Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * nu-web.loc.
- * User: maxyc
- * Date: 06.10.13 12:38
- *
- * Description:
- *
- */
- class File extends EActiveRecord{
- private static $container = 'static.www';
- private static $path = '/uploads/mdb';
- private static $pathCache = '/uploads/mdb/cacheResize';
- public static function model($className = __CLASS__)
- {
- return parent::model($className);
- }
- public function tableName()
- {
- return 'm_file';
- }
- public function rules(){
- return array(
- array('name, file_md5, type', 'required'),
- array('is_color, size, width, height, bits, channels', 'numerical', 'min'=>1),
- array('exif', 'safe')
- );
- }
- public function getOriginal(){
- return Yii::app()->params['serverStaticPath'].self::$path.'/'. substr($this->file_md5, 0, 2).'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name);
- }
- /**
- * @param $template_name
- * @param bool $recache обновить кеш картинки принудительно
- * @return string
- * @throws CHttpException
- */
- public function getPreview($template_name, $recache = false){
- $template_list = Yii::app()->params['Imagine']['templates'];
- if(!isset($template_list[$template_name]))
- throw new CHttpException(404,'Шаблон размеров изображений не найден: '.$template_name);
- $options = $template_list[$template_name];
- $file_dir = self::$pathCache.'/'.$options['width'].'.'.$options['height'].'/'.substr($this->file_md5, 0, 2);
- if(!file_exists(Yii::getPathOfAlias(self::$container).$file_dir))
- mkdir(Yii::getPathOfAlias(self::$container).$file_dir, 0777, true);
- if(!$recache && file_exists(Yii::getPathOfAlias(self::$container).$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name)))
- return Yii::app()->params['serverStaticPath'].$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name);
- if(!isset($options['quality']))
- $options['quality'] = 100;
- $transformation = new Imagine\Filter\Transformation();
- $transformation->thumbnail(new Imagine\Image\Box($options['width'], $options['height']))
- ->save(Yii::getPathOfAlias(self::$container).$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name), array('quality'=>$options['quality']));
- $imagine= new Imagine\Gd\Imagine();
- $transformation->apply($imagine->open(Yii::getPathOfAlias(self::$container).self::$path.'/'. substr($this->file_md5, 0, 2).'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name)));
- return Yii::app()->params['serverStaticPath'].$file_dir.'/'.($this->file_md5).'.'.CFileHelper::getExtension($this->name);
- }
- public static function upload($model, $field_name){
- $file = CUploadedFile::getInstance($model, $field_name);
- if(!$file) return;
- $file_name = md5_file($file->tempName);
- if($temp = self::model()->findByAttributes(array('file_md5'=>$file_name))) // если файл уже найден в бд. вернем его ид
- return $temp;
- // иначе продолжаем сохранение файла
- $upload_dir = Yii::getPathOfAlias(self::$container).self::$path;
- $sub_dir = substr($file_name, 0, 2);
- if(!file_exists($upload_dir.'/'.$sub_dir.'/'))
- mkdir($upload_dir.'/'.$sub_dir.'/', 0775, true);
- $save_path = realpath($upload_dir).'/'.$sub_dir.'/'.$file_name.'.'.$file->extensionName;
- $gis = getimagesize($file->tempName);
- $exif = exif_read_data($file->tempName);
- $_file = new self;
- $_file->type = $file->type;
- $_file->size = $file->size;
- $_file->file_md5 = $file_name;
- $_file->name = $file->name;
- $_file->width = $gis[0];
- $_file->height = $gis[1];
- $_file->bits = $gis['bits'];
- $_file->channels = $gis['channels'];
- $_file->is_color = $exif['COMPUTED']['IsColor'];
- $_file->_exif = serialize($exif);
- if($_file->save())
- if(!$file->saveAs($save_path))
- $_file->remove();
- return $_file;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement