示例#1
0
 /**
  * Удаление файла
  *
  * @param $clusterFileSrc
  * @return bool
  * @throws Exception
  */
 public function delete($clusterFileUniqSrc)
 {
     $file = new File($this->getRootSrc($clusterFileUniqSrc));
     if ($file->isExist()) {
         $file->remove();
     }
     return true;
 }
示例#2
0
 public function actionRemoveEnvGlobalFile()
 {
     $file = new File(APP_ENV_GLOBAL_FILE);
     if ($file->remove()) {
         \Yii::$app->session->setFlash('success', \Yii::t('app', 'File deleted successfully'));
     } else {
         \Yii::$app->session->setFlash('error', \Yii::t('app', 'Could not delete the file'));
     }
     return $this->redirect(\Yii::$app->request->getReferrer());
 }
示例#3
0
 /**
  * @param \yii\web\UrlManager $manager
  * @param \yii\web\Request $request
  * @return array|bool
  */
 public function parseRequest($manager, $request)
 {
     $pathInfo = $request->getPathInfo();
     $params = $request->getQueryParams();
     $sourceOriginalFile = File::object($pathInfo);
     $extension = $sourceOriginalFile->getExtension();
     if (!$extension) {
         return false;
     }
     if (Validate::validate(new AllowExtension(), $extension)->isInvalid()) {
         return false;
     }
     return ['cms/imaging/process', $params];
 }
示例#4
0
 /**
  * @param \yii\web\UrlManager $manager
  * @param \yii\web\Request $request
  * @return array|bool
  */
 public function parseRequest($manager, $request)
 {
     $pathInfo = $request->getPathInfo();
     $params = $request->getQueryParams();
     $sourceOriginalFile = File::object($pathInfo);
     $extension = $sourceOriginalFile->getExtension();
     if (!$extension) {
         return false;
     }
     if (!in_array(StringHelper::strtolower($extension), (array) \Yii::$app->imaging->extensions)) {
         return false;
     }
     return ['cms/imaging/process', $params];
 }
示例#5
0
 public function init()
 {
     parent::init();
     $this->js = (array) $this->js;
     if (count($this->js) <= 1) {
         return;
     }
     $fileName = 'yii2-sx-' . md5($this->className()) . ".js";
     $fileMinJs = \Yii::getAlias('@app/runtime/assets/js/' . $fileName);
     if (file_exists($fileMinJs)) {
         $this->js = [$fileName];
         $this->sourcePath = '@app/runtime/assets/js';
         return;
     }
     $fileContent = "";
     foreach ($this->js as $js) {
         $fileContent .= file_get_contents($this->sourcePath . '/' . $js);
     }
     if ($fileContent) {
         $file = new File($fileMinJs);
         $file->make($fileContent);
     }
 }
示例#6
0
 /**
  * Lists all StorageFile models.
  * @return 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();
     }
 }
示例#7
0
文件: Storage.php 项目: Liv1020/cms
 /**
  *
  * Загрузить файл в хранилище, добавить в базу, вернуть модель StorageFile
  *
  * @param UploadedFile|string|File $file    объект UploadedFile или File или rootPath до файла локально или http:// путь к файлу (TODO:: доделать)
  * @param array $data                       данные для сохранения в базу
  * @param null $clusterId                   идентификатор кластера по умолчанию будет выбран первый из конфигурации
  * @return StorageFile
  * @throws Exception
  */
 public function upload($file, $data = [], $clusterId = null)
 {
     //Для начала всегда загружаем файл во временную диррикторию
     $tmpdir = Dir::runtimeTmp();
     $tmpfile = $tmpdir->newFile();
     if ($file instanceof UploadedFile) {
         $extension = File::object($file->name)->getExtension();
         $tmpfile->setExtension($extension);
         if (!$file->saveAs($tmpfile->getPath())) {
             throw new Exception("Файл не загружен во временную диррикторию");
         }
     } else {
         if ($file instanceof File || is_string($file) && BaseUrl::isRelative($file)) {
             $file = File::object($file);
             $tmpfile->setExtension($file->getExtension());
             $tmpfile = $file->move($tmpfile);
         } else {
             if (is_string($file) && !BaseUrl::isRelative($file)) {
                 $curl_session = curl_init($file);
                 if (!$curl_session) {
                     throw new Exception("Неверная ссылка");
                 }
                 curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true);
                 curl_setopt($curl_session, CURLOPT_BINARYTRANSFER, true);
                 $file_content = curl_exec($curl_session);
                 curl_close($curl_session);
                 if (!$file_content) {
                     throw new Exception("Не удалось скачать файл");
                 }
                 $extension = pathinfo($file, PATHINFO_EXTENSION);
                 $pos = strpos($extension, "?");
                 if ($pos === false) {
                 } else {
                     $extension = substr($extension, 0, $pos);
                 }
                 if ($extension) {
                     $tmpfile->setExtension($extension);
                 }
                 $is_file_saved = file_put_contents($tmpfile, $file_content);
                 if (!$is_file_saved) {
                     throw new Exception("Не удалось сохранить файл");
                 }
                 //Если в ссылке нет расширения
                 if (!$extension) {
                     $tmpfile = new File($tmpfile->getPath());
                     try {
                         $mimeType = FileHelper::getMimeType($tmpfile->getPath(), null, false);
                     } catch (InvalidConfigException $e) {
                         throw new Exception("Не удалось пределить расширение файла: " . $e->getMessage());
                     }
                     if (!$mimeType) {
                         throw new Exception("Не удалось пределить расширение файла");
                     }
                     $extensions = FileHelper::getExtensionsByMimeType($mimeType);
                     if ($extensions) {
                         if (in_array("jpg", $extensions)) {
                             $extension = 'jpg';
                         } else {
                             if (in_array("png", $extensions)) {
                                 $extension = 'png';
                             } else {
                                 $extension = $extensions[0];
                             }
                         }
                         $newFile = new File($tmpfile->getPath());
                         $newFile->setExtension($extension);
                         $tmpfile = $tmpfile->copy($newFile);
                     }
                 }
             } else {
                 throw new Exception("Файл должен быть определен как \\yii\\web\\UploadedFile или \\skeeks\\sx\\File или string");
             }
         }
     }
     $data["type"] = $tmpfile->getType();
     $data["mime_type"] = $tmpfile->getMimeType();
     $data["size"] = $tmpfile->size()->getBytes();
     $data["extension"] = $tmpfile->getExtension();
     //Елси это изображение
     if ($tmpfile->getType() == 'image') {
         if (extension_loaded('gd')) {
             list($width, $height, $type, $attr) = getimagesize($tmpfile->toString());
             $data["image_height"] = $height;
             $data["image_width"] = $width;
         }
     }
     if ($cluster = $this->getCluster($clusterId)) {
         if ($newFileSrc = $cluster->upload($tmpfile)) {
             $data = array_merge($data, ["src" => $cluster->getPublicSrc($newFileSrc), "cluster_id" => $cluster->getId(), "cluster_file" => $newFileSrc]);
         }
     }
     $file = new StorageFile($data);
     $file->save(false);
     return $file;
 }
示例#8
0
文件: Cms.php 项目: Liv1020/cms
    /**
     * Пройтись по всем расширениям уставноленным в проект, и сгенерировать конфиг файл.
     * @return bool
     */
    public function generateModulesConfigFile()
    {
        $configs = $this->findConfigFiles(['/config/main.php']);
        $configsConsole = $this->findConfigFiles(['/config/main-console.php']);
        if ($configs || $configsConsole) {
            $date = date("dd.mm.YY", time());
            $fileContent = <<<PHP
<?php
/**
 * Автоматически сгенерированные конфиг, можно просто удалить этот файл.
 *
 * @author Semenov Alexander <*****@*****.**>
 * @link http://skeeks.com/
 * @copyright 2010-2014 SkeekS (Sx)
 * @date {$date}
 * @since 1.0.0
 */
 return [

PHP;
            $fileContent .= "'web' => [\n";
            foreach ($configs as $filePach) {
                $fileContent .= "\"" . $filePach . "\", \n";
            }
            $fileContent .= "],\n";
            $fileContent .= "'console' => [\n";
            foreach ($configsConsole as $filePach) {
                $fileContent .= "\"" . $filePach . "\", \n";
            }
            $fileContent .= "]\n";
            $fileContent .= '];';
            $file = new File(AUTO_GENERATED_MODULES_FILE);
            $file->write($fileContent);
        }
        $file = new File(AUTO_GENERATED_MODULES_FILE);
        return $file->isExist();
    }
示例#9
0
文件: Cms.php 项目: Liv1020/cms
 /**
  *
  * Взять все установленные расширения, и вернуть пути к конфигам
  *
  * @param string|array $fileName
  * @return array
  */
 public function findConfigFiles($fileName = '/config/main.php')
 {
     $config = [];
     $fileNames = [];
     if (is_string($fileName)) {
         $fileNames[] = $fileName;
     } else {
         if (is_array($fileName)) {
             $fileNames = $fileName;
         }
     }
     foreach ((array) \Yii::$app->extensions as $code => $data) {
         if (is_array($data['alias'])) {
             $configTmp = [];
             foreach ($data['alias'] as $code => $path) {
                 foreach ($fileNames as $fileName) {
                     $file = new \skeeks\sx\File($path . $fileName);
                     if ($file->isExist()) {
                         $config[] = $file->getPath();
                     }
                 }
             }
         }
     }
     return $config;
 }
示例#10
0
 /**
  *
  * Геренрация названия файла, уникального названия.
  *
  * @param $originalFileName
  * @return string
  */
 protected function _generateClusterFileName(File $originalFileName)
 {
     $originalFileName->getExtension();
     // generate a unique file name
     $newName = md5(microtime() . rand(0, 100));
     return $originalFileName->getExtension() ? $newName . "." . $originalFileName->getExtension() : $newName;
 }
示例#11
0
 /**
  * @return File[]
  */
 public function findFiles()
 {
     $dir = $this->getPath();
     $files = array();
     if ($dir[strlen($dir) - 1] != '/') {
         $dir .= '/';
         //добавляем слеш в конец если его нет
     }
     $nDir = opendir($dir);
     while (false !== ($file = readdir($nDir))) {
         if (!is_file($dir . "/" . $file)) {
             continue;
         }
         if ($file != "." and $file != "..") {
             //если это не директория
             $files[] = File::object($dir . "/" . $file);
         }
     }
     closedir($nDir);
     return $files;
 }
示例#12
0
    /**
     * Logs in a user using the provided username and password.
     *
     * @return boolean whether the user is logged in successfully
     */
    public function write()
    {
        if ($this->validate() && $this->hasConnect()) {
            $fileContent = <<<PHP
<?php
/**
 * @author Semenov Alexander <*****@*****.**>
 * @link http://skeeks.com/
 * @copyright 2010 SkeekS (СкикС)
 * @date 17.09.2015
 */
return [
    'class' => 'yii\\db\\Connection',
    'dsn' => 'mysql:host={$this->host};dbname={$this->dbname}',
    'username' => '{$this->username}',
    'password' => '{$this->password}',
    'charset' => '{$this->charset}',
    'enableSchemaCache' => true,
    'schemaCacheDuration' => 3600,
];

PHP;
            $file = new File(Yii::getAlias('@common/config/db.php'));
            $file->write($fileContent);
            if ($file->isExist()) {
                return true;
            }
            return false;
        } else {
            return false;
        }
    }