Authors.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. namespace app\models;
  3. use Yii;
  4. use yii\helpers\Url;
  5. /**
  6. * This is the model class for table "authors".
  7. *
  8. * @property int $id id
  9. * @property string $uid Альтернативный id
  10. * @property string $name Автор
  11. * @property string $url Страница автора
  12. * @property string $jobTitle Должность
  13. * @property string $phone Телефон
  14. * @property string $active статус
  15. */
  16. class Authors extends base\BaseFrontendClass
  17. {
  18. public $photo;
  19. public static $story_dir = 'images/authors';
  20. /**
  21. * {@inheritdoc}
  22. */
  23. public static function tableName()
  24. {
  25. return 'authors';
  26. }
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public function rules()
  31. {
  32. return [
  33. [['name', 'jobTitle', 'phone','description'], 'required'],
  34. [['active','text','description'], 'string'],
  35. [['show'], 'integer'],
  36. [['uid'], 'string', 'max' => 36],
  37. [['name', 'jobTitle'], 'string', 'max' => 128],
  38. [['url'], 'string', 'max' => 255],
  39. [['phone'], 'string', 'max' => 64],
  40. ];
  41. }
  42. /**
  43. * {@inheritdoc}
  44. */
  45. public function attributeLabels()
  46. {
  47. return [
  48. 'id' => 'id',
  49. 'uid' => 'Альтернативный id',
  50. 'name' => 'Автор',
  51. 'url' => 'Страница автора',
  52. 'jobTitle' => 'Должность',
  53. 'phone' => 'Телефон',
  54. 'active' => 'статус',
  55. ];
  56. }
  57. /**
  58. * {@inheritdoc}
  59. */
  60. public function getAuthor($autor)
  61. {
  62. if( is_numeric($autor) ){
  63. $r = Authors::findOne(['id' => $autor]);
  64. if( isset($r->id) ) return $r;
  65. }else
  66. //ade11199-7292-412e-b98e-6e74234710b4
  67. if( preg_match('/^([a-z0-9]){8}\-([a-z0-9]){4}\-([a-z0-9]){4}\-([a-z0-9]){4}\-([a-z0-9]){12}$/', $autor) ){
  68. $r = Authors::findOne(['uid' => $autor]);
  69. if( isset($r->id) ) return $r;
  70. }
  71. return Authors::findOne(['id' => 5]);
  72. }
  73. public function getUrl($full = false):string
  74. {
  75. $base = Url::base('https');
  76. $alias = trim( $this->url );
  77. if( $alias == '' ) return ($full ? $base : "")."/author/".$this->id;
  78. if( stripos( $alias, 'http' ) === false ) return ($full ? $base : "")."/author/".$alias;
  79. return $alias;
  80. }
  81. public function getImg($size="_sizehd", $type='jpg'){
  82. return $this->getPhoto($size, $type);
  83. }
  84. public function getPhoto($size="_sizehd", $type='jpg'){
  85. if( $this->id ){
  86. $file ="/".self::$story_dir."/".$this->id.$size.".".$type;
  87. if( file_exists(Yii::getAlias('@webroot').$file) ){
  88. return $file;
  89. }
  90. }
  91. return false;
  92. }
  93. /**
  94. * {@inheritdoc}
  95. * @return status.
  96. */
  97. public function saveImg($id, $file, $type)
  98. {
  99. $post = Yii::$app->request->post();
  100. $pcut = isset($post['cropping'])?$post['cropping']:false;
  101. $t = ['image/jpeg'=>'jpg','image/png'=>'png', 'image/webp'=>'webp']; //расширить допустимый список и вынести в общий класс
  102. if( isset( $t[$type] ) ){
  103. $ext = $t[$type];
  104. //загрузка временной фото на обработку
  105. $name = basename($id."_origin.".$ext);
  106. $file_tmp = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  107. if( move_uploaded_file($file, $file_tmp) ){
  108. // фото исходник для дальнейшей обработки
  109. $name = basename($id."_sizehd.jpg");
  110. $hdfile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  111. $this->generatePreview( $file_tmp, $hdfile, 1920, 1080);
  112. $name = basename($id."_cuthd.jpg");
  113. $cutfile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  114. if( $pcut ){
  115. $cut = ['x'=>round($pcut['x']), 'y'=>round($pcut['y']), 'w'=>round($pcut['width']), 'h'=>round($pcut['height'])];
  116. $this->generateImageCrop($file_tmp, $cutfile, 1080, 1080, $cut);
  117. }else{
  118. // без обрезки
  119. $this->generatePreview( $file_tmp, $cutfile, 1080, 1080);
  120. }
  121. // фото на в ленту(можно отдавать поисковикам) сюжета 680x383
  122. $name = basename($id."_size2.webp");
  123. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  124. $this->generatePreview( $hdfile, $ofile, 680, 383);
  125. $name = basename($id."_size2.jpg");
  126. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  127. $this->generatePreview( $hdfile, $ofile, 680, 383);
  128. // size3 пропустим в текущем дизайне не применим
  129. // фото на в малая(можно отдавать в админку, инжекты и пр. лабудень) сюжета 320х180
  130. $name = basename($id."_sizesq1.webp");
  131. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  132. $this->generatePreview( $cutfile, $ofile, 320, 320 );
  133. $name = basename($id."_sizesq1.jpg");
  134. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  135. $this->generatePreview( $cutfile, $ofile, 320, 320 );
  136. $name = basename($id."_sizesq2.webp");
  137. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  138. $this->generatePreview( $cutfile, $ofile, 84, 84 );
  139. $name = basename($id."_sizesq2.jpg");
  140. $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
  141. $this->generatePreview( $cutfile, $ofile, 84, 84 );
  142. return true;
  143. unlink($file_tmp); // удалить оригинал или оставить?
  144. }
  145. }
  146. return false;
  147. }
  148. }