Advertisement
Guest User

Untitled

a guest
Nov 5th, 2013
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.29 KB | None | 0 0
  1. <?php
  2. /**
  3.  * nu-web.loc.
  4.  * User: maxyc
  5.  * Date: 06.10.13 12:38
  6.  *
  7.  * Description:
  8.  *
  9.  */
  10.  
  11. class File extends EActiveRecord{
  12.  
  13.     private static $container = 'static.www';
  14.     private static $path = '/uploads/mdb';
  15.     private static $pathCache = '/uploads/mdb/cacheResize';
  16.  
  17.     public static function model($className = __CLASS__)
  18.     {
  19.         return parent::model($className);
  20.     }
  21.  
  22.     public function tableName()
  23.     {
  24.         return 'm_file';
  25.     }
  26.  
  27.     public function rules(){
  28.         return array(
  29.             array('name, file_md5, type', 'required'),
  30.             array('is_color, size, width, height, bits, channels', 'numerical', 'min'=>1),
  31.  
  32.             array('exif', 'safe')
  33.         );
  34.     }
  35.  
  36.     public function getOriginal(){
  37.         return Yii::app()->params['serverStaticPath'].self::$path.'/'. substr($this->file_md5, 0, 2).'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name);
  38.     }
  39.  
  40.     /**
  41.      * @param $template_name
  42.      * @param bool $recache обновить кеш картинки принудительно
  43.      * @return string
  44.      * @throws CHttpException
  45.      */
  46.     public function getPreview($template_name, $recache = false){
  47.         $template_list = Yii::app()->params['Imagine']['templates'];
  48.         if(!isset($template_list[$template_name]))
  49.             throw new CHttpException(404,'Шаблон размеров изображений не найден: '.$template_name);
  50.         $options = $template_list[$template_name];
  51.  
  52.         $file_dir = self::$pathCache.'/'.$options['width'].'.'.$options['height'].'/'.substr($this->file_md5, 0, 2);
  53.  
  54.         if(!file_exists(Yii::getPathOfAlias(self::$container).$file_dir))
  55.             mkdir(Yii::getPathOfAlias(self::$container).$file_dir, 0777, true);
  56.  
  57.         if(!$recache && file_exists(Yii::getPathOfAlias(self::$container).$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name)))
  58.             return Yii::app()->params['serverStaticPath'].$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name);
  59.  
  60.  
  61.         if(!isset($options['quality']))
  62.             $options['quality'] = 100;
  63.  
  64.         $transformation = new Imagine\Filter\Transformation();
  65.         $transformation->thumbnail(new Imagine\Image\Box($options['width'], $options['height']))
  66.             ->save(Yii::getPathOfAlias(self::$container).$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name), array('quality'=>$options['quality']));
  67.  
  68.         $imagine= new Imagine\Gd\Imagine();
  69.         $transformation->apply($imagine->open(Yii::getPathOfAlias(self::$container).self::$path.'/'. substr($this->file_md5, 0, 2).'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name)));
  70.  
  71.         return Yii::app()->params['serverStaticPath'].$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name);
  72.     }
  73.  
  74.     public static function upload($model, $field_name){
  75.         $file = CUploadedFile::getInstance($model, $field_name);
  76.         if(!$file) return;
  77.         $file_name = md5_file($file->tempName);
  78.  
  79.         if($temp = self::model()->findByAttributes(array('file_md5'=>$file_name))) // если файл уже найден в бд. вернем его ид
  80.             return $temp;
  81.  
  82.         // иначе продолжаем сохранение файла
  83.  
  84.         $upload_dir = Yii::getPathOfAlias(self::$container).self::$path;
  85.         $sub_dir = substr($file_name, 0, 2);
  86.         if(!file_exists($upload_dir.'/'.$sub_dir.'/'))
  87.             mkdir($upload_dir.'/'.$sub_dir.'/', 0775, true);
  88.  
  89.         $save_path = realpath($upload_dir).'/'.$sub_dir.'/'.$file_name.'.'.$file->extensionName;
  90.  
  91.         $gis = getimagesize($file->tempName);
  92.         $exif = exif_read_data($file->tempName);
  93.  
  94.         $_file = new self;
  95.         $_file->type = $file->type;
  96.         $_file->size = $file->size;
  97.         $_file->file_md5 = $file_name;
  98.         $_file->name = $file->name;
  99.  
  100.         $_file->width = $gis[0];
  101.         $_file->height = $gis[1];
  102.         $_file->bits = $gis['bits'];
  103.         $_file->channels = $gis['channels'];
  104.         $_file->is_color = $exif['COMPUTED']['IsColor'];
  105.         $_file->_exif = serialize($exif);
  106.  
  107.         if($_file->save())
  108.             if(!$file->saveAs($save_path))
  109.                 $_file->remove();
  110.  
  111.         return $_file;
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement