123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- <?php
- namespace app\models;
- use Yii;
- use yii\helpers\Url;
- /**
- * This is the model class for table "authors".
- *
- * @property int $id id
- * @property string $uid Альтернативный id
- * @property string $name Автор
- * @property string $url Страница автора
- * @property string $jobTitle Должность
- * @property string $phone Телефон
- * @property string $active статус
- */
- class Authors extends base\BaseFrontendClass
- {
- public $photo;
- public static $story_dir = 'images/authors';
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return 'authors';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['name', 'jobTitle', 'phone','description'], 'required'],
- [['active','text','description'], 'string'],
- [['show'], 'integer'],
- [['uid'], 'string', 'max' => 36],
- [['name', 'jobTitle'], 'string', 'max' => 128],
- [['url'], 'string', 'max' => 255],
- [['phone'], 'string', 'max' => 64],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'id',
- 'uid' => 'Альтернативный id',
- 'name' => 'Автор',
- 'url' => 'Страница автора',
- 'jobTitle' => 'Должность',
- 'phone' => 'Телефон',
- 'active' => 'статус',
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function getAuthor($autor)
- {
- if( is_numeric($autor) ){
- $r = Authors::findOne(['id' => $autor]);
- if( isset($r->id) ) return $r;
- }else
- //ade11199-7292-412e-b98e-6e74234710b4
- if( preg_match('/^([a-z0-9]){8}\-([a-z0-9]){4}\-([a-z0-9]){4}\-([a-z0-9]){4}\-([a-z0-9]){12}$/', $autor) ){
- $r = Authors::findOne(['uid' => $autor]);
- if( isset($r->id) ) return $r;
- }
- return Authors::findOne(['id' => 5]);
- }
- public function getUrl($full = false):string
- {
- $base = Url::base('https');
- $alias = trim( $this->url );
- if( $alias == '' ) return ($full ? $base : "")."/author/".$this->id;
- if( stripos( $alias, 'http' ) === false ) return ($full ? $base : "")."/author/".$alias;
- return $alias;
- }
- public function getImg($size="_sizehd", $type='jpg'){
- return $this->getPhoto($size, $type);
- }
- public function getPhoto($size="_sizehd", $type='jpg'){
- if( $this->id ){
- $file ="/".self::$story_dir."/".$this->id.$size.".".$type;
- if( file_exists(Yii::getAlias('@webroot').$file) ){
- return $file;
- }
- }
- return false;
- }
- /**
- * {@inheritdoc}
- * @return status.
- */
- public function saveImg($id, $file, $type)
- {
- $post = Yii::$app->request->post();
- $pcut = isset($post['cropping'])?$post['cropping']:false;
- $t = ['image/jpeg'=>'jpg','image/png'=>'png', 'image/webp'=>'webp']; //расширить допустимый список и вынести в общий класс
- if( isset( $t[$type] ) ){
- $ext = $t[$type];
- //загрузка временной фото на обработку
- $name = basename($id."_origin.".$ext);
- $file_tmp = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- if( move_uploaded_file($file, $file_tmp) ){
- // фото исходник для дальнейшей обработки
- $name = basename($id."_sizehd.jpg");
- $hdfile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $file_tmp, $hdfile, 1920, 1080);
- $name = basename($id."_cuthd.jpg");
- $cutfile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- if( $pcut ){
- $cut = ['x'=>round($pcut['x']), 'y'=>round($pcut['y']), 'w'=>round($pcut['width']), 'h'=>round($pcut['height'])];
- $this->generateImageCrop($file_tmp, $cutfile, 1080, 1080, $cut);
- }else{
- // без обрезки
- $this->generatePreview( $file_tmp, $cutfile, 1080, 1080);
- }
- // фото на в ленту(можно отдавать поисковикам) сюжета 680x383
- $name = basename($id."_size2.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $hdfile, $ofile, 680, 383);
- $name = basename($id."_size2.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $hdfile, $ofile, 680, 383);
- // size3 пропустим в текущем дизайне не применим
- // фото на в малая(можно отдавать в админку, инжекты и пр. лабудень) сюжета 320х180
- $name = basename($id."_sizesq1.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $cutfile, $ofile, 320, 320 );
- $name = basename($id."_sizesq1.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $cutfile, $ofile, 320, 320 );
- $name = basename($id."_sizesq2.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $cutfile, $ofile, 84, 84 );
- $name = basename($id."_sizesq2.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $cutfile, $ofile, 84, 84 );
- return true;
- unlink($file_tmp); // удалить оригинал или оставить?
- }
- }
- return false;
- }
- }
|