- Модуль: clouds
- Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage.php
- Класс: CCloudStorage
- Вызов: CCloudStorage::OnBeforeResizeImage
static function OnBeforeResizeImage($arFile, $arResizeParams, &$callbackData, &$bNeedResize, &$sourceImageFile, &$cacheImageFileTmp)
{
$callbackData = null;
if (intval($arFile["HANDLER_ID"]) <= 0)
return false;
$obSourceBucket = new CCloudStorageBucket(intval($arFile["HANDLER_ID"]));
if (!$obSourceBucket->Init())
return false;
$callbackData = /*.(array[string]mixed).*/
array();
$callbackData["obSourceBucket"] = $obSourceBucket;
//Assume target bucket same as source
$callbackData["obTargetBucket"] = $obTargetBucket = $obSourceBucket;
//if original file bucket is read only
if ($obSourceBucket->READ_ONLY === "Y") //Try to find bucket with write rights
{
$bucket = CCloudStorage::FindBucketForFile($arFile, $arFile["FILE_NAME"]);
if (!is_object($bucket))
return false;
if ($bucket->Init())
{
$callbackData["obTargetBucket"] = $obTargetBucket = $bucket;
}
}
if (!$arFile["SRC"])
{
$arFile["SRC"] = $obSourceBucket->GetFileSRC($arFile, false);
}
if (defined("BX_MOBILE") && constant("BX_MOBILE") === true)
$bImmediate = true;
else
$bImmediate = $arResizeParams[5];
$callbackData["cacheID"] = $arFile["ID"]."/".md5(serialize($arResizeParams));
$callbackData["cacheOBJ"] = new CPHPCache;
$callbackData["fileDIR"] = "/"."resize_cache/".$callbackData["cacheID"]."/".$arFile["SUBDIR"];
$callbackData["fileNAME"] = $arFile["FILE_NAME"];
$callbackData["fileURL"] = $callbackData["fileDIR"]."/".$callbackData["fileNAME"];
$result = true;
if ($callbackData["cacheOBJ"]->StartDataCache(CACHED_clouds_file_resize, $callbackData["cacheID"], "clouds"))
{
$cacheImageFile = $obTargetBucket->GetFileSRC($callbackData["fileURL"], false);
$arDestinationSize = array();
//Check if it is cache file was deleted, but there was a successful resize
$delayInfo = $bImmediate ? false : CCloudStorage::ResizeImageFileGet($cacheImageFile);
if (is_array($delayInfo) && ($delayInfo["ERROR_CODE"] < 10))
{
$callbackData["cacheSTARTED"] = true;
if ($arFile["FILE_SIZE"] > 1)
$callbackData["fileSize"] = $arFile["FILE_SIZE"];
$bNeedResize = false;
$result = true;
}
//Check if it is cache file was deleted, but not the file in the cloud
elseif ($fs = $obTargetBucket->FileExists($callbackData["fileURL"]))
{
//If file was resized before the fact was registered
if (COption::GetOptionString("clouds", "delayed_resize") === "Y")
{
CCloudStorage::ResizeImageFileAdd(
$arDestinationSize,
$arFile,
$cacheImageFile,
$arResizeParams,
9 //already where
);
}
$callbackData["cacheSTARTED"] = true;
if ($fs > 1)
$callbackData["fileSize"] = $fs;
$bNeedResize = false;
$result = true;
}
else
{
$callbackData["tmpFile"] = CFile::GetTempName('', $arFile["FILE_NAME"]);
$callbackData["tmpFile"] = preg_replace("#[\\\/]+#", "/", $callbackData["tmpFile"]);
if (
!$bImmediate
&& COption::GetOptionString("clouds", "delayed_resize") === "Y"
&& CCloudStorage::ResizeImageFileDelay(
$arDestinationSize,
$arFile,
$cacheImageFile,
$arResizeParams
)
)
{
$callbackData["delayedResize"] = true;
$callbackData["cacheSTARTED"] = false;
$bNeedResize = false;
$callbackData["cacheOBJ"]->AbortDataCache();
$callbackData["cacheVARS"] = array(
"cacheImageFile" => $cacheImageFile,
"width" => $arDestinationSize["width"],
"height" => $arDestinationSize["height"],
"size" => null,
);
$result = true;
}
elseif ($obSourceBucket->DownloadToFile($arFile, $callbackData["tmpFile"]))
{
$callbackData["cacheSTARTED"] = true;
$bNeedResize = true;
$sourceImageFile = $callbackData["tmpFile"];
$cacheImageFileTmp = CFile::GetTempName('', $arFile["FILE_NAME"]);
$result = true;
}
else
{
$callbackData["cacheSTARTED"] = false;
$bNeedResize = false;
$callbackData["cacheOBJ"]->AbortDataCache();
$result = false;
}
}
}
else
{
$callbackData["cacheSTARTED"] = false;
$callbackData["cacheVARS"] = $callbackData["cacheOBJ"]->GetVars();
$bNeedResize = false;
$result = true;
}
return $result;
}