%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.137.170.241
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/components/bitrix/photogallery.upload/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/photogallery.upload//functions.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
use \Bitrix\Main;

class CPhotoUploader
{
	protected $iblockId;
	protected $gallery;
	protected $arParams;
	protected $arResult; //just for event

	protected $watermark = null;
	var $post = [];

	function __construct(&$arParams, &$gallery, &$arResult)
	{
		$this->iblockId = $arParams["IBLOCK_ID"];
		$this->gallery = $gallery;

		$this->arParams = &$arParams;
		$this->arResult = &$arResult;
	}

	private function getWatermarkRules()
	{
		if ($this->watermark)
		{
			return $this->watermark;
		}

		$watermark = [
			'type' => mb_strtolower($this->arParams['WATERMARK_TYPE']),
			'text' => trim($this->arParams['WATERMARK_TEXT']),
			'font' => trim($this->arParams['PATH_TO_FONT']),
			'position' => $this->arParams['WATERMARK_POSITION'],
			'color' => trim($this->arParams['WATERMARK_COLOR']),
			'size' => $this->arParams['WATERMARK_SIZE'],
			'fill' => $this->arParams['WATERMARK_FILE_ORDER'] == 'usual' ? 'exact' : $this->arParams['WATERMARK_FILE_ORDER'], // resize | exact | repeat
			'file' => $this->arParams['WATERMARK_FILE'], // file on the server
			'alpha_level' => $this->arParams['WATERMARK_TRANSPARENCY'],
			'use_copyright' => 'N', // Y | N
		];
		if ($this->arParams['WATERMARK_RULES'] == 'ALL')
		{
			if($this->arParams['WATERMARK_TYPE'] == 'TEXT')
			{
				$watermark['use_copyright'] = "N";
			}
			else
			{
				$watermark['size'] = 'real';
			}
		}
		elseif ($this->post['photo_watermark_use'] == 'Y')
		{
			$watermark = array_merge($watermark, array(
				'type' => $this->post['photo_watermark_type'],
				'text' => $this->post['photo_watermark_text'],
				'position' => $this->post['photo_watermark_position'],
				'color' => $this->post['photo_watermark_color'],
				'size' => $this->post['photo_watermark_size'],
				'fill' => 'resize', // resize | exact | repeat
				'file' => $this->post['photo_watermark_file'],
				'alpha_level' => $this->post['photo_watermark_opacity'],
				'use_copyright' => $this->post["photo_watermark_copyright"] == "Y" ? "Y" : "N"
			));
		}

		// We have ugly default font but it's better than no font at all
		if ($watermark['font'] <> '')
		{
			$documentRoot = Main\Application::getDocumentRoot();
			$paths = [
				[
					$documentRoot,
					$watermark['font']
				],
				[
					$documentRoot,
					BX_ROOT,
					'modules',
					'photogallery',
					'fonts',
					$watermark['font']
				]
			];
			$watermark['font'] = '';
		}
		foreach ($paths as $path)
		{
			$file = new Main\IO\File(implode(Main\IO\Path::DIRECTORY_SEPARATOR, $path));
			if ($file->isExists())
			{
				$watermark['font'] = $file->getPhysicalPath();
				break;
			}
		}
		if ($watermark['file'] <> '')
		{
			$file = new Main\IO\File(Main\Application::getDocumentRoot().Main\IO\Path::DIRECTORY_SEPARATOR.$watermark['file']);
			$watermark['file'] = $file->isExists() ? $file->getPhysicalPath() : '';
		}
		if (
			$watermark['type'] == 'text' && $watermark['font'] <> '' && $watermark['text'] <> '' ||
			$watermark['type'] !== 'text' && $watermark['file'] <> '')
		{
			$this->watermark = $watermark;
		}
		else
		{
			$this->watermark = [];
		}
		return $this->watermark;
	}
	private function adjustIBlock($arParams)
	{
		//region File properties
		$properties = [];
		foreach ($arParams['converters'] as $key => $val)
		{
			if ($val['code'] == "thumbnail")
				continue;
			$code = mb_strtoupper($val['code']);
			if (!($res = CIBlock::GetProperties($this->iblockId, [], ["CODE" => $code])->fetch()))
			{
				$properties[] = $code;
			}
		}

		if (!empty($properties))
		{
			$obProperty = new CIBlockProperty;
			foreach ($properties as $code)
			{
				$obProperty->Add(array(
					"IBLOCK_ID" => $this->iblockId,
					"ACTIVE" => "Y",
					"PROPERTY_TYPE" => "F",
					"MULTIPLE" => "N",
					"NAME" => (GetMessage("P_".$code) <> '' ? GetMessage("P_".$code) : $code),
					"CODE" => $code,
					"FILE_TYPE" => "jpg, gif, bmp, png, jpeg"
				));
			}
		}
		//endregion
		//region Moderation properties
		$properties = [];
		foreach (["PUBLIC_ELEMENT", "APPROVE_ELEMENT"] as $code)
		{
			if (!($res = CIBlock::GetProperties($this->iblockId, [], ["CODE" => $code])->fetch()))
			{
				$properties[] = $code;
			}
		}

		if (count($properties) > 0)
		{
			$obProperty = new CIBlockProperty;
			foreach ($properties as $code)
			{
				$obProperty->Add(array(
					"IBLOCK_ID" => $this->iblockId,
					"ACTIVE" => "Y",
					"PROPERTY_TYPE" => "S",
					"MULTIPLE" => "N",
					"NAME" => (GetMessage("P_".$code) <> '' ? GetMessage("P_".$code) : $code),
					"DEFAULT_VALUE" => "N",
					"CODE" => $code
				));
			}
		}
		//endregion
		return true;
	}

	public function onBeforeUpload(&$package, &$upload, $post, $files, &$error)
	{
		$this->post = $post;
		return true;
	}

	public function onAfterUpload($packageLog, &$uploadLog, $files)
	{
		$sectionIds = [0, $uploadLog['SECTION_ID']];
		$galleryIds = [0];
		$userIds = [];
		if ($this->gallery)
		{
			$sectionIds[] = $this->gallery["ID"];
			$galleryIds[] = $this->gallery["CODE"];
			$userIds[] = $this->gallery["CREATED_BY"];
		}
		PClearComponentCacheEx($this->iblockId, $sectionIds, $galleryIds, $userIds);

		$uploadLog["redirectUrl"] = CComponentEngine::MakePathFromTemplate(
			$this->arParams["~SECTION_URL"],
			[
				"USER_ALIAS" => $this->gallery ? $this->gallery['CODE'] : '',
				"SECTION_ID" => $uploadLog['SECTION_ID']
			]
		);
		return true;
	}

	private function getSectionId(&$upload)
	{
		if ($upload["SECTION_ID"] > 0)
		{
			return $upload["SECTION_ID"];
		}

		if ($this->post["photo_album_id"] > 0)
		{
			$upload["SECTION_ID"] = $this->post["photo_album_id"];
		}
		else
		{
			$upload["SECTION_ID"] = $this->createAlbum($this->post["new_album_name"]);
			$upload["NEW_SECTION_ID"] = $upload["SECTION_ID"];
		}

		if ($upload["SECTION_ID"] <= 0)
		{
			throw new Main\ArgumentNullException('Album is not created or does not exist.');
		}

		return $upload["SECTION_ID"];
	}

	protected function createAlbum($name)
	{
		$name = trim($name);
		$name = ($name <> '' ? $name : GetMessage("P_NEW_ALBUM"));
		$name = ($name <> '' ? $name : "New album");

		$arFields = Array(
			"ACTIVE" => "Y",
			"IBLOCK_ID" => $this->iblockId,
			"IBLOCK_SECTION_ID" => $this->gallery ? $this->gallery['ID'] : 0,
			"DATE" => ConvertTimeStamp(time()+CTimeZone::GetOffset()),
			"UF_DATE" => ConvertTimeStamp(time()+CTimeZone::GetOffset()),
			"NAME" => $name
		);
		$GLOBALS["UF_DATE"] = $arFields["UF_DATE"];

		$bs = new CIBlockSection;
		$GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_{$this->iblockId}_SECTION", $arFields);

		if ($ID = $bs->Add($arFields))
		{
			CIBlockSection::ReSort($this->iblockId);
		}
		return ($ID > 0 ? $ID : false);
	}

	protected function createCoverForNewAlbum(&$upload, $photo)
	{
		if ($upload["NEW_SECTION_ID"] > 0)
		{
			$file = $photo["files"]["default"]; // Big picture
			$file['~tmp_name'] = $file['tmp_name'];
			$file['tmp_name'] .= "_album_cover.tmp";

			if (CFile::ResizeImageFile($file['tmp_name'], $file['tmp_name_1'],
				[
					'width' => $this->arParams["ALBUM_PHOTO_THUMBS"]["SIZE"],
					'height' => $this->arParams["ALBUM_PHOTO_THUMBS"]["SIZE"]
				],
				BX_RESIZE_IMAGE_PROPORTIONAL)
			)
			{
				$bs = new CIBlockSection;
				if ($bs->Update($upload["SECTION_ID"], ["PICTURE" => $file], false, false))
				{
					unset($upload["NEW_SECTION_ID"]);
				}
			}
		}
	}

	function handleFile($hash, $photo, &$package, &$upload, &$error)
	{
		try
		{
			$arParams = $this->arParams;

			if (!Main\Loader::includeModule('iblock'))
			{
				throw new main\NotSupportedException('Iblock module is not included.');
			}

			$sectionId = $this->getSectionId($upload);
			$this->arParams["SECTION_ID"] = $sectionId;
			$this->adjustIBlock($this->arParams);

			$this->arParams["bxu"]->checkCanvases(
				$hash,
				$photo,
				$this->arParams['converters'],
				$this->getWatermarkRules()
			);

			// Props
			$publish = ($this->post["Public"] == "N" ? "N" : "Y");
			$approve = ($publish === "Y" && ($arParams["ABS_PERMISSION"] >= "U" || $arParams["APPROVE_BY_DEFAULT"] == "Y") ? "Y" : "X");
			$Prop = [
				"REAL_PICTURE" => ["n0" => $photo["files"]["default"]],
				"PUBLIC_ELEMENT" => ["n0" => $publish],
				"APPROVE_ELEMENT" => ["n0" => $approve]];

			foreach ($arParams['converters'] as $val)
			{
				if ($val['code'] != "default" && $val['code'] != "thumbnail")
				{
					$code = mb_strtoupper($val['code']);
					$Prop[$code] = ["n0" => $photo["files"][$val['code']]];
				}
			}
			global $USER;
			// Real photo
			$arFields = Array(
				"ACTIVE" => (($arParams["MODERATION"] == "Y" && $arParams["ABS_PERMISSION"] < "U") ? "N" : "Y"),
				"MODIFIED_BY" => $USER->GetID(),
				"IBLOCK_SECTION" => $upload['SECTION_ID'],
				"IBLOCK_ID" => $this->iblockId,
				"NAME" => $photo['name'],
				"CODE" => $photo['name'],
				"TAGS" => $photo['tags'],
				"DETAIL_TEXT" => $photo['description'],
				"DETAIL_TEXT_TYPE" => "text",
				"PREVIEW_PICTURE" => $photo["files"]["thumbnail"],
				"PREVIEW_TEXT" => $photo['description'],
				"PREVIEW_TEXT_TYPE" => "text",
				"PROPERTY_VALUES" => $Prop
			);

			$bs = new CIBlockElement;

			$id = $bs->Add($arFields);
			if ($id <= 0)
			{
				throw new Main\NotImplementedException($bs->LAST_ERROR);
			}
			$arFields['ID'] = $id;
			$_SESSION['arUploadedPhotos'][] = $id;
			CIBlockElement::RecalcSections($id);

			foreach(GetModuleEvents("photogallery", "OnAfterUpload", true) as $arEvent)
			{
				ExecuteModuleEventEx($arEvent, array(&$arFields, $this->arParams, $this->arResult));
			}

			$this->createCoverForNewAlbum($upload, $photo);
		}
		catch(\Throwable $exception)
		{
			$error = $exception->getMessage();
			return false;
		}
		return $id;
	}
}
function getImageUploaderId($str = 'bx_img_upl_')
{
	static $iIndexOnPage = 0;
	$iIndexOnPage++;
	return $str . $iIndexOnPage;
}

if (!function_exists("_get_size"))
{
	function _get_size($v)
	{
		$l = mb_substr($v, -1);
		$ret = mb_substr($v, 0, -1);
		switch(mb_strtoupper($l))
		{
			case 'P':
				$ret *= 1024;
			case 'T':
				$ret *= 1024;
			case 'G':
				$ret *= 1024;
			case 'K':
				$ret /= 1024;
				break;
		}
		return $ret;
	}
}
?>

Youez - 2016 - github.com/yon3zu
LinuXploit