Person.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace app\models;
  3. use \app\helpers\Transliterator;
  4. use Yii;
  5. /**
  6. * This is the model class for table "person".
  7. *
  8. * @property string $name
  9. * @property string $jobtitle
  10. * @property string|null $birthdate
  11. * @property string $description
  12. * @property int $id
  13. */
  14. class Person extends base\BaseFrontendClass
  15. {
  16. /**
  17. * @var string
  18. */
  19. public $photo;
  20. public static $story_dir = '/images/person-images';
  21. /**
  22. * {@inheritdoc}
  23. */
  24. public static function tableName()
  25. {
  26. return 'person';
  27. }
  28. /**
  29. * {@inheritdoc}
  30. */
  31. public function rules()
  32. {
  33. return [
  34. [['name', 'jobtitle', 'description'], 'required'],
  35. [['name', 'jobtitle', 'description', 'alias','show','phone','email'], 'string'],
  36. [['birthdate'], 'safe'],
  37. ];
  38. }
  39. /**
  40. * {@inheritdoc}
  41. */
  42. public function attributeLabels()
  43. {
  44. return [
  45. 'name' => 'Имя',
  46. 'jobtitle' => 'Должность или звание',
  47. 'birthdate' => 'День рождения',
  48. 'description' => 'Описание',
  49. 'id' => 'ID',
  50. 'alias' => 'url',
  51. 'phone' => 'Телефон',
  52. 'email' => 'email',
  53. 'show' => 'Показывать'
  54. ];
  55. }
  56. public function beforeSave($insert)
  57. {
  58. if (!parent::beforeSave($insert)) {
  59. return false;
  60. }
  61. if( is_int($this->show) || is_numeric($this->show) ){
  62. $this->show = ((int) $this->show == 1)?'Y':'N';
  63. }
  64. $this->birthdate = date('Y-m-d', strtotime($this->birthdate));
  65. if( trim($this->alias) == '' ){
  66. $this->alias = Transliterator::toUrl($this->name);
  67. }
  68. return true;
  69. }
  70. public function getImg($size = 'hd', $type = 'webp'){
  71. return static::$story_dir."/".$this->id."_size{$size}.{$type}";
  72. }
  73. /**
  74. * {@inheritdoc}
  75. * @return status.
  76. */
  77. public function saveImg($id, $file, $type)
  78. {
  79. $post = Yii::$app->request->post();
  80. $pcut = isset($post['cropping'])?$post['cropping']:false;
  81. $t = ['image/jpeg'=>'jpg','image/png'=>'png', 'image/webp'=>'webp']; //расширить допустимый список и вынести в общий класс
  82. if( isset( $t[$type] ) ){
  83. $ext = $t[$type];
  84. //загрузка временной фото на обработку
  85. $name = basename($id."_origin.".$ext);
  86. $file_tmp = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  87. if( move_uploaded_file($file, $file_tmp) ){
  88. // фото исходник для дальнейшей обработки
  89. $name = basename($id."_sizehd.jpg");
  90. $hdfile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  91. if( $pcut ){
  92. $cut = ['x'=>round($pcut['x']), 'y'=>round($pcut['y']), 'w'=>round($pcut['width']), 'h'=>round($pcut['height'])];
  93. $this->generateImageCrop($file_tmp, $hdfile, 1920, 1080, $cut);
  94. }else{
  95. // без обрезки
  96. $this->generatePreview( $file_tmp, $hdfile, 1920, 1080);
  97. }
  98. //unlink($file_tmp); удалить оригинал или оставить?
  99. // фото на главную сюжета 1300х731
  100. $name = basename($id."_size1.webp");
  101. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  102. $this->generatePreview( $hdfile, $ofile, 1300, 731);
  103. $name = basename($id."_size1.jpg");
  104. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  105. $this->generatePreview( $hdfile, $ofile, 1300, 731);
  106. // фото на в ленту(можно отдавать поисковикам) сюжета 680x383
  107. $name = basename($id."_size2.webp");
  108. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  109. $this->generatePreview( $hdfile, $ofile, 680, 383);
  110. $name = basename($id."_size2.jpg");
  111. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  112. $this->generatePreview( $hdfile, $ofile, 680, 383);
  113. // size3 пропустим в текущем дизайне не применим
  114. // фото на в малая(можно отдавать в админку, инжекты и пр. лабудень) сюжета 320х180
  115. $name = basename($id."_size4.webp");
  116. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  117. $this->generatePreview( $hdfile, $ofile, 320, 180 );
  118. $name = basename($id."_size4.jpg");
  119. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  120. $this->generatePreview( $hdfile, $ofile, 320, 180 );
  121. return true;
  122. }
  123. }
  124. return false;
  125. }
  126. }