• Модуль: clouds
  • Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage.php
  • Класс: CCloudStorage
  • Вызов: CCloudStorage::OnAfterResizeImage
static function OnAfterResizeImage($arFile, $arResizeParams, &$callbackData, &$cacheImageFile, &$cacheImageFileTmp, &$arImageSize)
{
	global $arCloudImageSizeCache;
	$io = CBXVirtualIo::GetInstance();

	if (!is_array($callbackData))
		return false;

	if ($callbackData["cacheSTARTED"])
	{
		/** @var CCloudStorageBucket $obTargetBucket */
		$obTargetBucket = $callbackData["obTargetBucket"];
		/** @var CPHPCache $cacheOBJ */
		$cacheOBJ = $callbackData["cacheOBJ"];

		if (isset($callbackData["tmpFile"])) //have to upload to the cloud
		{
			$arFileToStore = CFile::MakeFileArray($io->GetPhysicalName($cacheImageFileTmp));
			if (!$arFileToStore)
			{
				$cacheOBJ->AbortDataCache();

				$tmpFile = $io->GetPhysicalName($callbackData["tmpFile"]);
				unlink($tmpFile);
				@rmdir(mb_substr($tmpFile, 0, -mb_strlen(bx_basename($tmpFile))));

				unlink($cacheImageFileTmp);
				@rmdir(mb_substr($cacheImageFileTmp, 0, -mb_strlen(bx_basename($cacheImageFileTmp))));

				$obSourceBucket = new CCloudStorageBucket(intval($arFile["HANDLER_ID"]));
				if ($obSourceBucket->Init())
				{
					$cacheImageFile = $obSourceBucket->GetFileSRC($arFile, false);
				}

				return false;
			}

			if (!preg_match("/^image\//", $arFileToStore["type"]))
				$arFileToStore["type"] = $arFile["CONTENT_TYPE"];

			if ($obTargetBucket->SaveFile($callbackData["fileURL"], $arFileToStore))
			{
				$cacheImageFile = $obTargetBucket->GetFileSRC($callbackData["fileURL"], false);

				$arImageSize = CFile::GetImageSize($cacheImageFileTmp);
				$arImageSize[2] = filesize($io->GetPhysicalName($cacheImageFileTmp));
				$iFileSize = filesize($arFileToStore["tmp_name"]);

				if (!is_array($arImageSize))
					$arImageSize = array(0, 0);
				$cacheOBJ->EndDataCache(array(
					"cacheImageFile" => $cacheImageFile,
					"width" => $arImageSize[0],
					"height" => $arImageSize[1],
					"size" => $arImageSize[2],
				));

				$tmpFile = $io->GetPhysicalName($callbackData["tmpFile"]);
				unlink($tmpFile);
				@rmdir(mb_substr($tmpFile, 0, -mb_strlen(bx_basename($tmpFile))));

				$arCloudImageSizeCache[$cacheImageFile] = $arImageSize;

				$obTargetBucket->IncFileCounter($iFileSize);

				if (
					COption::GetOptionString("clouds", "delayed_resize") === "Y"
					&& !is_array(CCloudStorage::ResizeImageFileGet($cacheImageFile))
				)
				{
					$arDestinationSize = array();
					CCloudStorage::ResizeImageFileAdd(
						$arDestinationSize,
						$arFile,
						$cacheImageFile,
						$arResizeParams,
						9 //already there
					);
				}
			}
			else
			{
				$cacheOBJ->AbortDataCache();

				$tmpFile = $io->GetPhysicalName($callbackData["tmpFile"]);
				unlink($tmpFile);
				@rmdir(mb_substr($tmpFile, 0, -mb_strlen(bx_basename($tmpFile))));

				unlink($cacheImageFileTmp);
				@rmdir(mb_substr($cacheImageFileTmp, 0, -mb_strlen(bx_basename($cacheImageFileTmp))));

				$obSourceBucket = new CCloudStorageBucket(intval($arFile["HANDLER_ID"]));
				if ($obSourceBucket->Init())
				{
					$cacheImageFile = $obSourceBucket->GetFileSRC($arFile, false);
				}

				return false;
			}
		}
		else //the file is already in the cloud
		{
			$bNeedCreatePicture = false;
			$arSourceSize = array("x" => 0, "y" => 0, "width" => 0, "height" => 0);
			$arDestinationSize = array("x" => 0, "y" => 0, "width" => 0, "height" => 0);
			CFile::ScaleImage($arFile["WIDTH"], $arFile["HEIGHT"], $arResizeParams[0], $arResizeParams[1], $bNeedCreatePicture, $arSourceSize, $arDestinationSize);

			$cacheImageFile = $obTargetBucket->GetFileSRC($callbackData["fileURL"], false);
			$arImageSize = array(
				$arDestinationSize["width"],
				$arDestinationSize["height"],
				isset($callbackData["fileSize"])? $callbackData["fileSize"]: $obTargetBucket->GetFileSize($callbackData["fileURL"]),
			);
			$cacheOBJ->EndDataCache(array(
				"cacheImageFile" => $cacheImageFile,
				"width" => $arImageSize[0],
				"height" => $arImageSize[1],
				"size" => $arImageSize[2],
			));

			$arCloudImageSizeCache[$cacheImageFile] = $arImageSize;
		}
	}
	elseif (is_array($callbackData["cacheVARS"]))
	{
		$cacheImageFile = $callbackData["cacheVARS"]["cacheImageFile"];
		$arImageSize = array(
			$callbackData["cacheVARS"]["width"],
			$callbackData["cacheVARS"]["height"],
			$callbackData["cacheVARS"]["size"],
		);
		$arCloudImageSizeCache[$cacheImageFile] = $arImageSize;
	}
	else
	{
		return false;
	}

	foreach (GetModuleEvents("clouds", "OnAfterResizeImage", true) as $arEvent)
	{
		ExecuteModuleEventEx($arEvent, [$callbackData["delayedResize"] ?? false, &$cacheImageFile]);
	}

	return true;
}