skeeks\cms\controllers\ImagingController::actionProcess PHP 메소드

actionProcess() 공개 메소드

Lists all StorageFile models.
public actionProcess ( ) : mixed
리턴 mixed
    public function actionProcess()
    {
        ini_set("memory_limit", "512M");
        $imaging = \Yii::$app->imaging;
        if (!$imaging) {
            //TODO: можно добавить проверку YII ensure...
            throw new \yii\base\Exception("Component Imaging not found");
        }
        $newFileSrc = \Yii::$app->request->getPathInfo();
        $extension = Imaging::getExtension($newFileSrc);
        if (!$extension) {
            throw new \yii\base\Exception("Extension not found: " . $newFileSrc);
        }
        if (!$imaging->isAllowExtension($extension)) {
            throw new \yii\base\Exception("Extension '{$extension}' not supported in Imaging component");
        }
        $newFile = File::object($newFileSrc);
        $strposFilter = strpos($newFileSrc, "/" . Imaging::THUMBNAIL_PREFIX);
        if (!$strposFilter) {
            throw new \ErrorException("This is not a filter thumbnail: " . $newFileSrc);
        }
        $originalFileSrc = substr($newFileSrc, 0, $strposFilter) . "." . $newFile->getExtension();
        $webRoot = \Yii::getAlias('@webroot');
        $originalFileRoot = $webRoot . DIRECTORY_SEPARATOR . $originalFileSrc;
        $newFileRoot = $webRoot . DIRECTORY_SEPARATOR . $newFileSrc;
        $newFileRootDefault = $webRoot . DIRECTORY_SEPARATOR . str_replace($newFile->getBaseName(), Imaging::DEFAULT_THUMBNAIL_FILENAME . "." . $extension, $newFileSrc);
        $originalFile = new File($originalFileRoot);
        if (!$originalFile->isExist()) {
            throw new \ErrorException("The original file is not found: " . $newFileSrc);
        }
        //Проверено наличие оригинального файла, есть пути к оригиналу, и результирующему файлу.
        //Отслось собрать фильтр, и проверить наличие параметров. А так же проверить разрешены ли эти параметры, для этого в строке есть захэшированный ключь
        $filterSting = substr($newFileSrc, $strposFilter + strlen(DIRECTORY_SEPARATOR . Imaging::THUMBNAIL_PREFIX), strlen($newFileSrc));
        $filterCode = explode("/", $filterSting);
        $filterCode = $filterCode[0];
        //Код фильтра
        //Если указаны парамтры, то ноужно проверить контрольную строчку, и если они не соответствуют ей, то ничего делать не будем
        if ($params = \Yii::$app->request->get()) {
            $pramsCheckArray = explode(DIRECTORY_SEPARATOR, $filterSting);
            if (count($pramsCheckArray) < 3) {
                throw new \yii\base\Exception("the control line not found: " . $newFileSrc);
            }
            $string = $imaging->getParamsCheckString($params);
            if ($pramsCheckArray[1] != $string) {
                throw new \yii\base\Exception("Parameters invalid: " . $newFileSrc);
            }
        }
        $filterClass = str_replace("-", "\\", $filterCode);
        if (!class_exists($filterClass)) {
            throw new \ErrorException("Filter class is not created: " . $newFileSrc);
        }
        /**
         * @var Filter $filter
         */
        $filter = new $filterClass((array) $params);
        if (!is_subclass_of($filter, Filter::className())) {
            throw new \ErrorException("No child filter class: " . $newFileSrc);
        }
        try {
            //Проверяем а создан ли уже файл, и если да то просто делаем на него ссылку.
            $filter->setOriginalRootFilePath($originalFileRoot)->setNewRootFilePath($newFileRootDefault)->save();
            if (PHP_OS === 'Windows') {
                if ($newFileRoot != $newFileRootDefault) {
                    //Не тестировалось
                    copy($newFileRootDefault, $newFileRoot);
                }
            } else {
                if ($newFileRoot != $newFileRootDefault) {
                    symlink($newFileRootDefault, $newFileRoot);
                }
            }
            $url = \Yii::$app->request->getUrl() . ($params ? "" : '?sx-refresh');
            /*Header("HTTP/1.0 200 OK");
              Image::getImagine()->open($newFileRootDefault)->show('png');
              return '';*/
            return \Yii::$app->response->redirect($url, 302);
        } catch (\Exception $e) {
            return $e->getMessage();
        }
    }
ImagingController