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; } }