/** * @param array[string]string $arFile * @param array[string]string $arResizeParams * @param array[string]mixed $callbackData * @param bool $bNeedResize * @param array[string]string $sourceImageFile * @param array[string]string $cacheImageFileTmp * @return bool */ public 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(); $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") { $bucket = CCloudStorage::FindBucketForFile($arFile, $arFile["FILE_NAME"]); if (!is_object($bucket)) { return false; } if ($bucket->Init()) { $callbackData["obTargetBucket"] = $obTargetBucket = $bucket; } } $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 = $callbackData["obTargetBucket"]->GetFileSRC($callbackData["fileURL"]); $arDestinationSize = array(); //Check if it is cache file was deleted, but there was a successful resize if (!$bImmediate && COption::GetOptionString("clouds", "delayed_resize") === "Y" && is_array($delayInfo = CCloudStorage::ResizeImageFileGet($cacheImageFile)) && $delayInfo["ERROR_CODE"] == 0) { $callbackData["cacheSTARTED"] = true; if ($arFile["FILE_SIZE"] > 1) { $callbackData["fileSize"] = $arFile["FILE_SIZE"]; } $bNeedResize = false; $result = true; } elseif ($fs = $obTargetBucket->FileExists($callbackData["fileURL"])) { //If file was resized before the fact was registered if (!$bImmediate && COption::GetOptionString("clouds", "delayed_resize") === "Y") { CCloudStorage::ResizeImageFileAdd($arDestinationSize, $arFile, $cacheImageFile, $arResizeParams); } $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["cacheSTARTED"] = false; $bNeedResize = false; $callbackData["cacheOBJ"]->AbortDataCache(); $callbackData["cacheVARS"] = array("cacheImageFile" => $cacheImageFile, "width" => $arDestinationSize["width"], "height" => $arDestinationSize["height"]); $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; }