....................................../////.===Hehe-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 : 172.67.169.23  /  Your IP : 216.73.217.46
Web Server : nginx/1.28.3
System : Linux 4e27b89abc44 6.8.0-147-generic #147-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 24 11:33:16 UTC 2026 x86_64
User :  ( 1000)
PHP Version : 8.2.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /sites/xo-fab.com/www/components/com_komento/helpers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sites/xo-fab.com/www/components/com_komento/helpers/comment.php
<?php
/**
 * @package		Komento
 * @copyright	Copyright (C) 2012 Stack Ideas Private Limited. All rights reserved.
 * @license		GNU/GPL, see LICENSE.php
 *
 * Komento is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

defined('_JEXEC') or die('Restricted access');

/**
 * Comment utilities class.
 *
 */
class KomentoCommentHelper
{
	/**
	 * Process comments data
	 **/
	static public function process( $row, $admin = 0 )
	{
		if( isset( $row->processed ) && $row->processed )
		{
			return $row;
		}

		Komento::setCurrentComponent( $row->component );

		$config = Komento::getConfig();
		$konfig = Komento::getKonfig();
		$user = JFactory::getUser()->id;
		$commentsModel	= Komento::getModel( 'comments' );

		Komento::import( 'helper', 'date' );

		// Duplicate created date first before lapsed time messing up the original date
		$row->unformattedDate = $row->created;

		// get number of child for each comment
		$row->childs = $commentsModel->getTotalChilds( $row->id );

		// set url to proper url
		if( !empty($row->url) )
		{
			// Add 'http://' if not present
			$row->url = ( 0 === strpos( $row->url, 'http' ) ) ? $row->url : 'http://' . $row->url;
		}

		// 1. Load article and article details
		$application	= Komento::loadApplication( $row->component )->load( $row->cid );

		if( $application === false )
		{
			$application = Komento::getErrorApplication( $row->component, $row->cid );
		}

		// set component title
		$row->componenttitle = $application->getComponentName();

		// set content title
		$row->contenttitle = $application->getContentTitle();

		// get permalink
		$row->pagelink = $application->getContentPermalink();
		$row->permalink = $row->pagelink . '#kmt-' . $row->id;

		// set parentlink
		if( $row->parent_id != 0 )
		{
			$row->parentlink = $row->pagelink . '#kmt-' . $row->parent_id;
		}

		// to be reassign
		$row->shortlink = $row->permalink;

		// set extension object
		// use this to check if application is able to load article details
		// if row->extension is false, means error loading article details
		$row->extension = $application;

		if( $admin == 0 )
		{
			// frontend

			$actionsModel = Komento::getModel( 'actions' );
			$socialHelper = Komento::getHelper( 'social' );

			// parse comments HTML
			$row->comment = self::parseComment( $row->comment );

			// author's object
			$row->author = Komento::getProfile( $row->created_by );

			// don't convert for guest
			if( $row->created_by != 0 && $row->created_by != $row->author->id )
			{
				if( $config->get( 'enable_orphanitem_convert' ) )
				{
					KomentoCommentHelper::convertOrphanitem( $row->id );
				}
			}

			if( $row->created_by != 0 )
			{
				switch( $config->get( 'name_type' ) )
				{
					case 'username':
						// force username
						$row->name = $row->author->getUsername();
						break;
					case 'name':
						$row->name = $row->author->getName();
						break;
					case 'default':
					default:
						// default name to profile if name is null
						if( empty( $row->name ) )
						{
							$row->name = $row->author->getName();
						}
						break;
				}
			}
			else
			{
				if( empty( $row->name ) )
				{
					$row->name = JText::_( 'COM_KOMENTO_GUEST' );
				}
				else
				{
					if( $config->get( 'guest_label' ) )
					{
						$row->name = JText::_( 'COM_KOMENTO_GUEST' ) . ' - '. $row->name;
					}
				}
			}

			// set datetime
			if( $config->get( 'enable_lapsed_time' ) )
			{
				$row->created = KomentoDateHelper::getLapsedTime( $row->unformattedDate );
			}
			else
			{
				$dateformat = $config->get( 'date_format' );
				$row->created = KomentoDateHelper::toFormat( KomentoDateHelper::dateWithOffSet( $row->created ), $dateformat );
				// $row->created = Komento::getDate( $row->created )->toFormat( $dateformat );
			}

			// get actions likes
			$row->likes = $actionsModel->countAction( 'likes', $row->id );

			// get user liked
			$row->liked = $actionsModel->liked( $row->id, $user );

			// get user reported
			$row->reported = $actionsModel->reported( $row->id, $user );
		}
		else
		{
			// backend

			// format comments
			$row->comment = nl2br( Komento::getHelper( 'comment' )->parseBBCode( $row->comment ) );

			$row->created = KomentoDateHelper::dateWithOffSet( $row->created );
		}

		$row->processed = true;

		return $row;
	}

	static public function parseComment( $comment )
	{
		$config = Komento::getConfig();

		// word censoring
		if( $config->get( 'filter_word' ) )
		{
			$comment = self::parseCensor( $comment );
		}

		// parseBBcode to HTML
		$comment = self::parseBBCode( $comment );

		// parse newline to br tags
		// $comment = nl2br( $comment );

		return $comment;
	}

	public static function parseCensor($text)
	{
		// Komento::getHelper('filter');
		// $filterHelper = new KomentoFilterHelper;

		$filterHelper = Komento::getHelper('filter');
		$config = Komento::getConfig();

		$textToBeFilter	= explode(',', $config->get('filter_word_text'));
		// lets do some AI here. for each string, if there is a space,
		// remove the space and make it as a new filter text.
		if( count($textToBeFilter) > 0 )
		{
			$newFilterSet   = array();
			foreach( $textToBeFilter as $item)
			{
				$item = trim( $item );
				if( JString::stristr($item, ' ') !== false )
				{
					$newKeyWord		= JString::str_ireplace(' ', '', $item);
					$newFilterSet[]	= $newKeyWord;
				}
			}

			if( count($newFilterSet) > 0 )
			{
				$tmpNewFitler		= array_merge($textToBeFilter, $newFilterSet);
				$textToBeFilter		= array_unique($tmpNewFitler);
			}
		}

		$filterHelper->strings	= $textToBeFilter;
		$filterHelper->text		= $text;
		return $filterHelper->filter();
	}

	public static function parseBBCode($text)
	{
		$config = Komento::getConfig();
		$nofollow = $config->get( 'links_nofollow' ) ? ' rel="nofollow"' : '';

		$maxdimension = '';
		if( $config->get( 'max_image_width' ) || $config->get( 'max_image_height' ) )
		{
			$maxdimension = ' style="';

			if( $config->get( 'max_image_width' ) )
			{
				$maxdimension .= 'max-width:' . $config->get( 'max_image_width' ) . 'px;';
			}

			if( $config->get( 'max_image_height' ) )
			{
				$maxdimension .= 'max-height:' . $config->get( 'max_image_width' ) . 'px;';
			}

			$maxdimension .= '"';
		}

		// Converts all html entities properly
		$text	= htmlspecialchars( $text , ENT_NOQUOTES );

		$text	= trim($text);

		$text = preg_replace_callback('/\[code( type="(.*?)")?\](.*?)\[\/code\]/ms', array('KomentoCommentHelper','escape') , $text );

		// avoid smileys in pre tag gets replaced
		$text = KomentoCommentHelper::encodePre( $text );

		// change new line to br (without affecting pre)
		$text	= nl2br( $text );

		// BBCode to find...
		$in = array( 	 '/\[b\](.*?)\[\/b\]/ms',
						 '/\[i\](.*?)\[\/i\]/ms',
						 '/\[u\](.*?)\[\/u\]/ms',
						 '/\[img\]((http|https):\/\/([a-z0-9._\/-]+)\.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF))\[\/img]/i',
						 '/\[size\="?(.*?)"?\](.*?)\[\/size\]/ms',
						 '/\[color\="?(.*?)"?\](.*?)\[\/color\]/ms',
						 '/\[quote\](.*?)\[\/quote\]/ms'
						 // '/\[list\=(.*?)\](.*?)\[\/list\]/ms',
						 // '/\[list\](.*?)\[\/list\]/ms',
						 // '/\[\*\](.*?)\[\/\*\]/ms'
		);
		// And replace them by...
		$out = array(	 '<strong>\1</strong>',
						 '<em>\1</em>',
						 '<u>\1</u>',
						 '<img src="\1" alt="\1"' . $maxdimension . ' />',
						 '<a target="_blank" href="mailto:\1"' . $nofollow . '>\1</a>',
						 '<span style="font-size:\1%">\2</span>',
						 '<span style="color:\1">\2</span>',
						 '<blockquote>\1</blockquote>'
						 // '<ol start="\1">\2</ol>',
						 // '<ul>\1</ul>',
						 // '<li>\1</li>'
		);

		// strip out bbcode data first
		$tmp = preg_replace( $in , '' , $text );

		// strip out bbcode url data
		$urlin = '/\[url\="?(.*?)"?\](.*?)\[\/url\]/ms';
		$tmp = preg_replace($urlin, '', $tmp);

		// strip out video links too
		$tmp = Komento::getHelper('videos')->strip($tmp);

		// Check if the content still contain [img] tag
		// if yes, dont allow to replace to hyperlink for prevent XSS attack
		if (strpos($tmp, '[img]') === false || strpos($tmp, '[/img]') === false) {
			// replace url
			if ($config->get('auto_hyperlink')) {
				$text = self::replaceURL($tmp, $text);
			}
		}

		// replace video links
		if ($config->get('allow_video')) {
			$text = Komento::getHelper('Videos')->replace($text);
		} else {
			$text = Komento::getHelper('Videos')->strip($text);
		}

		// replace bbcode with html
		$text = preg_replace($in, $out, $text);

		// Replace url bbcode with html
		$text = self::replaceBBUrl($text);

		// manual fix for unwrapped li issue
		$text = self::replaceBBList($text);

		$smileyin = array();
		$smileyout = array();

		if( $config->get( 'bbcode_smile' ) )
		{
			$smileyin[] = ':)';
			$smileyout[] = '<img alt=":)" style="width:16px; height:16px;" class="kmt-emoticon" src="'.KOMENTO_EMOTICONS_DIR.'emoticon-smile.png" />';
		}
		if( $config->get( 'bbcode_happy' ) )
		{
			$smileyin[] = ':D';
			$smileyout[] = '<img alt=":D" style="width:16px; height:16px;" class="kmt-emoticon" src="'.KOMENTO_EMOTICONS_DIR.'emoticon-happy.png" />';
		}
		if( $config->get( 'bbcode_surprised' ) )
		{
			$smileyin[] = ':o';
			$smileyout[] = '<img alt=":o" style="width:16px; height:16px;" class="kmt-emoticon" src="'.KOMENTO_EMOTICONS_DIR.'emoticon-surprised.png" />';
		}
		if( $config->get( 'bbcode_tongue' ) )
		{
			$smileyin[] = ':p';
			$smileyout[] = '<img alt=":p" style="width:16px; height:16px;" class="kmt-emoticon" src="'.KOMENTO_EMOTICONS_DIR.'emoticon-tongue.png" />';
		}
		if( $config->get( 'bbcode_unhappy' ) )
		{
			$smileyin[] = ':(';
			$smileyout[] = '<img alt=":(" style="width:16px; height:16px;" class="kmt-emoticon" src="'.KOMENTO_EMOTICONS_DIR.'emoticon-unhappy.png" />';
		}
		if( $config->get( 'bbcode_wink' ) )
		{
			$smileyin[] = ';)';
			$smileyout[] = '<img alt=";)" style="width:16px; height:16px;" class="kmt-emoticon" src="'.KOMENTO_EMOTICONS_DIR.'emoticon-wink.png" />';
		}

		// add in custom smileys
		$smileycode = $config->get( 'smileycode' );
		$smileypath = $config->get( 'smileypath' );

		if( is_array( $smileycode ) && is_array( $smileypath ) )
		{
			foreach( $smileycode as $index => $code )
			{
				if( !empty( $code ) && !empty( $smileypath[$index] ) )
				{
					$smileyin[] = $code;
					$smileyout[] = '<img alt="' . $code . '" class="kmt-emoticon" src="' . $smileypath[$index] . '" />';
				}
			}
		}

		$text = str_replace($smileyin, $smileyout, $text);

		// done parsing emoticons and bbcode, decode pre text back
		$text = KomentoCommentHelper::decodePre( $text );

		// paragraphs
		$text = str_replace("\r", "", $text);
		$text = "<p>".preg_replace("/(\n){2,}/", "</p><p>", $text)."</p>";


		// $text = preg_replace_callback('/<pre>(.*?)<\/pre>/ms', "removeBr", $text);
		// $text = preg_replace('/<p><pre(.*)>(.*?)<\/pre><\/p>/ms', "<pre\\1>\\2</pre>", $text);

		$text = preg_replace_callback('/<ul>(.*?)<\/ul>/ms', array('KomentoCommentHelper','removeBr'), $text);
		// fix [list] within [*] causing dom errors
		$text = preg_replace('/<li>(.*?)<ul>(.*?)<\/ul>(.*?)<\/li>/ms', "\\1<ul>\\2</ul>\\3", $text);
		$text = preg_replace('/<p><ul>(.*?)<\/ul><\/p>/ms', "<ul>\\1</ul>", $text);

		return $text;
	}

	public static function replaceURL( $tmp , $text )
	{
		$config = Komento::getConfig();
		$nofollow = $config->get( 'links_nofollow' ) ? ' rel="nofollow"' : '';

		// $pattern    = '@(https?://[-\w\.]+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@';
		$pattern = '@(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))@';

		preg_match_all( $pattern , $tmp , $matches );

		if( isset( $matches[ 0 ] ) && is_array( $matches[ 0 ] ) )
		{
			foreach( $matches[ 0 ] as $match )
			{
				$text = str_ireplace( $match , '<a target="_blank" href="' . $match . '"' . $nofollow . '>' . $match . '</a>' , $text );

			}
		}
		return $text;
	}

	/**
	 * Replaces the bbcode url tag
	 *
	 * @since	2.0
	 * @access	public
	 * @param	string
	 * @return	
	 */
	public static function replaceBBUrl($text)
	{
		$config = Komento::getConfig();
		$nofollow = $config->get('links_nofollow') ? ' rel="nofollow"' : '';

		$pattern = '/\[url\="?(.*?)"\](.*?)\[\/url\]/ms';

		preg_match_all($pattern, $text, $matches);

		if (!empty($matches)) {

			$sources = array_shift($matches);

			$urls = $matches[0];
			$txts = $matches[1];

			for( $i = 0; $i < count( $sources ); $i++ )
			{
				$source = $sources[$i];

				if( !empty( $source ) )
				{
					$url = $urls[$i];
					// prevent user add javascript in the url element
					$segments = explode(' ', $url);
					$url = $segments[0];

					$txt = $txts[$i];

					if( stripos( $url, 'http://' ) !== 0 && stripos( $url, 'https://' ) !== 0 && stripos( $url, 'ftp://' ) !== 0 )
					{
						$url = 'http://' . $url;
					}

					$replace = '<a target="_blank" href="' . $url . '"' . $nofollow . '>' . $txt . '</a>';

					$text = str_ireplace( $source, $replace, $text );
				}
			}
		}

		return $text;
	}

	public static function replaceBBList( $text )
	{
		// 1. Fix invalid nesting issue with [*] and [list]
		// 2. Create a temporary text with all [list] block removed
		// 3. Wrap all remaining [*] blocks with [list] block in the temporary text
		// 4. Convert [list] and [*] blocks on the original text

		// Step 1
		$pattern = '/\[\*\](.*?)\[list\=(.*?)\](.*?)\[\/list\](.*?)\[\/\*\]/ms';
		$replace = "\\1[list=\\2]\\3[/list]\\4";
		$text = preg_replace( $pattern, $replace, $text );

		$pattern = '/\[\*\](.*?)\[list\](.*?)\[\/list\](.*?)\[\/\*\]/ms';
		$replace = "\\1[list]\\2[/list]\\3";
		$text = preg_replace( $pattern, $replace, $text );

		// Step 2
		$bblist = array(
			'/\[list\=(.*?)\](.*?)\[\/list\]/ms',
			'/\[list\](.*?)\[\/list\]/ms'
		);

		$tmp = preg_replace( $bblist, '', $text );

		// Step 3
		$pattern = '/\[\*\](.*?)\[\/\*\]/ms';

		preg_match_all( $pattern, $tmp, $matches );

		if( !empty( $matches ) )
		{
			$sources = array_shift( $matches );

			if( !empty( $sources ) )
			{
				foreach( $sources as $source )
				{
					$replace = '[list]' . $source . '[/list]';

					$text = str_ireplace( $source, $replace, $text );
				}
			}
		}

		// Step 4
		$in = array(
			'/\[list\=(.*?)\](.*?)\[\/list\]/ms',
			'/\[list\](.*?)\[\/list\]/ms',
			'/\[\*\](.*?)\[\/\*\]/ms'
		);

		$out = array(
			'<ol start="\1">\2</ol>',
			'<ul>\1</ul>',
			'<li>\1</li>'
		);

		$text = preg_replace( $in, $out, $text );

		return $text;
	}

	public static function escape($s) {
		$code = $s[3];

		$code = str_replace("[", "&#91;", $code);
		$code = str_replace("]", "&#93;", $code);

		$brush  = isset( $s[2] ) && !empty( $s[2] ) ? $s[2] : 'xml';
		$code	= html_entity_decode( $code );
		$code	= Komento::getHelper( 'String' )->escape( $code );

		if( $brush != '' )
		{
			$result = '<pre><code class="language-' . htmlspecialchars( $brush ) . '">' . $code . '</code></pre>';

		}
		else
		{
			$result = '<pre><code>' . $code . '</code></pre>';
		}

		return $result;
	}

	public static function encodePre( $text ) {
		$pattern = '/<pre.*?>(.*?)<\/pre>/s';
		preg_match_all( $pattern , $text , $matches );

		if( isset( $matches[ 0 ] ) && is_array( $matches[ 0 ] ) )
		{
			foreach( $matches[ 1 ] as $match )
			{
				$text = str_ireplace( $match , base64_encode( $match ), $text );
			}
		}

		return $text;
	}

	public static function decodePre( $text ) {
		$pattern = '/<pre.*?>(.*?)<\/pre>/s';
		preg_match_all( $pattern , $text , $matches );

		if( isset( $matches[ 0 ] ) && is_array( $matches[ 0 ] ) )
		{
			foreach( $matches[ 1 ] as $match )
			{
				$text = str_ireplace( $match , base64_decode( $match ) , $text );
			}
		}

		return $text;
	}

	public static function removeBr($s) {
		return str_replace("<br />", "", $s[0]);
	}

	public static function convertOrphanitem( $id )
	{
		$config = Komento::getConfig();

		$comment = Komento::getTable( 'comments' );
		$comment->load( $id );
		$comment->created_by = $config->get( 'orphanitem_ownership' );
		$comment->store();

		return true;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit