コード例 #1
0
ファイル: storage.php プロジェクト: rasuldev/torino
 /**
  * @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;
 }