123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?php
- namespace app\models;
- use \app\helpers\Transliterator;
- use Yii;
- /**
- * This is the model class for table "person".
- *
- * @property string $name
- * @property string $jobtitle
- * @property string|null $birthdate
- * @property string $description
- * @property int $id
- */
- class Person extends base\BaseFrontendClass
- {
- /**
- * @var string
- */
- public $photo;
- public static $story_dir = '/images/person-images';
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return 'person';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['name', 'jobtitle', 'description'], 'required'],
- [['name', 'jobtitle', 'description', 'alias','show','phone','email'], 'string'],
- [['birthdate'], 'safe'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'name' => 'Имя',
- 'jobtitle' => 'Должность или звание',
- 'birthdate' => 'День рождения',
- 'description' => 'Описание',
- 'id' => 'ID',
- 'alias' => 'url',
- 'phone' => 'Телефон',
- 'email' => 'email',
- 'show' => 'Показывать'
- ];
- }
- public function beforeSave($insert)
- {
- if (!parent::beforeSave($insert)) {
- return false;
- }
- if( is_int($this->show) || is_numeric($this->show) ){
- $this->show = ((int) $this->show == 1)?'Y':'N';
- }
- $this->birthdate = date('Y-m-d', strtotime($this->birthdate));
- if( trim($this->alias) == '' ){
- $this->alias = Transliterator::toUrl($this->name);
- }
- return true;
- }
- public function getImg($size = 'hd', $type = 'webp'){
- return static::$story_dir."/".$this->id."_size{$size}.{$type}";
- }
- /**
- * {@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";
- if( $pcut ){
- $cut = ['x'=>round($pcut['x']), 'y'=>round($pcut['y']), 'w'=>round($pcut['width']), 'h'=>round($pcut['height'])];
- $this->generateImageCrop($file_tmp, $hdfile, 1920, 1080, $cut);
- }else{
- // без обрезки
- $this->generatePreview( $file_tmp, $hdfile, 1920, 1080);
- }
- //unlink($file_tmp); удалить оригинал или оставить?
- // фото на главную сюжета 1300х731
- $name = basename($id."_size1.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $hdfile, $ofile, 1300, 731);
- $name = basename($id."_size1.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $hdfile, $ofile, 1300, 731);
- // фото на в ленту(можно отдавать поисковикам) сюжета 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."_size4.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $hdfile, $ofile, 320, 180 );
- $name = basename($id."_size4.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
- $this->generatePreview( $hdfile, $ofile, 320, 180 );
- return true;
- }
- }
- return false;
- }
- }
|