123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- <?php
- namespace app\models\base;
- use app\models\base\Image;
- use Yii;
- /**
- * This is the model class for table "news".
- *
- * @property int $id Уникальный id
- * @property string $uid uid
- * @property string $mark
- * @property string $alias символный URL
- * @property string $old_url
- * @property string $dt_pub дата публикации
- * @property string $dt_cr дата создания
- * @property string $dt_upd дата изменения
- * @property int $rev ревизия документа
- * @property string $title заг h1
- * @property string $lid лид
- * @property string $text содержание
- * @property string|null $meta_title meta title
- * @property string $author автор
- * @property string $show_author Показывать автора
- * @property string $editors редакторы
- * @property string $link URL редиректа
- * @property string $embed_url медиа вставка
- * @property string $photo_name имя фото файла
- * @property string $photo_title подпись фото
- * @property string $photo_include Показывать миниатюру
- * @property string $photo_rcol Показывать в доп колонке
- * @property string $active 0 не пуб. 1 - норм 2 - топ
- * @property string $verifed Проверено корректором
- * @property string $top в топ новости
- * @property string $NH Новость часа
- * @property string $comments Включать коменты
- * @property int $flags флаги бит маска
- * @property string $photo фотогалерея
- * @property string $video видео
- * @property string $audio аудио
- * @property int $export_rss не отдавать в Яндекс новости (mail,dzen,..) бит маска
- * @property string $noindex Не отдавать в поиск
- * @property int $type тип публикации
- * @property int $inscription подпись после статьи (на правах рекл. мед.)
- * @property string $old_gallery_title подпись к старым галереям
- * @property NewsTopic[] $topics
- */
- class News extends BaseFrontendClass
- {
- /**
- * @var bin
- */
- public $fdzen;
- public $fmail;
- public $commerc;
- public $mcommerc;
- public $pcommerc;
- public static $story_dir = 'images/news';
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%news}}';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['title', 'lid'], 'required'],
- [['id', 'rev', 'flags', 'export_rss', 'type', 'inscription'], 'integer'],
- [['dt_pub', 'dt_cr', 'dt_upd'], 'safe'],
- [['title', 'lid', 'text', 'show_author', 'editors', 'embed_url', 'photo_name', 'photo_title', 'photo_include', 'photo_rcol', 'active', 'verifed', 'top', 'NH', 'comments', 'photo', 'video', 'audio', 'noindex', 'old_gallery_title'], 'string'],
- [['uid','mark'], 'string', 'max' => 36],
- [['alias', 'old_url', 'author', 'link'], 'string', 'max' => 255],
- [['meta_title'], 'string'],
- [['id'], 'unique'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'uid' => 'Uid',
- 'alias' => 'Alias',
- 'old_url' => 'Old Url',
- 'dt_pub' => 'Dt Pub',
- 'dt_cr' => 'Dt Cr',
- 'dt_upd' => 'Dt Upd',
- 'rev' => 'Rev',
- 'title' => 'Title',
- 'lid' => 'Lid',
- 'text' => 'Text',
- 'meta_title' => 'Meta Title',
- 'author' => 'Author',
- 'show_author' => 'Show Author',
- 'editors' => 'Editors',
- 'link' => 'Link',
- 'embed_url' => 'Embed Url',
- 'photo_name' => 'Photo Name',
- 'photo_title' => 'Photo Title',
- 'photo_include' => 'Photo Include',
- 'photo_rcol' => 'Photo Rcol',
- 'active' => 'Active',
- 'verifed' => 'Verifed',
- 'top' => 'Top',
- 'NH' => 'Nh',
- 'comments' => 'Comments',
- 'flags' => 'Flags',
- 'photo' => 'Photo',
- 'video' => 'Video',
- 'audio' => 'Audio',
- 'export_rss' => 'Export Rss',
- 'noindex' => 'Noindex',
- 'type' => 'Type',
- 'inscription' => 'Inscription',
- 'old_gallery_title' => 'Old Gallery Title',
- ];
- }
- /**
- * {@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."/news/$name";
- if( move_uploaded_file($file, $file_tmp) ){
- // фото исходник для дальнейшей обработки
- $name = basename($id."_sizehd.jpg");
- $hdfile = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$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."/webp/$name";
- $this->generatePreview( $hdfile, $ofile, 1300, 731);
- $name = basename($id."_size1.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$name";
- $this->generatePreview( $hdfile, $ofile, 1300, 731);
- // фото на НЧ 841x473
- $name = basename($id."_size5.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/webp/$name";
- $this->generatePreview( $hdfile, $ofile, 841, 473);
- $name = basename($id."_size5.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$name";
- $this->generatePreview( $hdfile, $ofile, 841, 473);
- // фото на в ленту(можно отдавать поисковикам) сюжета 680x383
- $name = basename($id."_size2.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/webp/$name";
- $this->generatePreview( $hdfile, $ofile, 680, 383);
- $name = basename($id."_size2.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$name";
- $this->generatePreview( $hdfile, $ofile, 680, 383);
- $name = basename($id."_size3.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/webp/$name";
- $this->generatePreview( $hdfile, $ofile, 500, 282);
- $name = basename($id."_size3.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$name";
- $this->generatePreview( $hdfile, $ofile, 500, 282);
- // size3 пропустим в текущем дизайне не применим
- // фото на в малая(можно отдавать в админку, инжекты и пр. лабудень) сюжета 320х180
- $name = basename($id."_size4.webp");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/webp/$name";
- $this->generatePreview( $hdfile, $ofile, 320, 180 );
- $name = basename($id."_size4.jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$name";
- $this->generatePreview( $hdfile, $ofile, 320, 180 );
- $name = basename($id.".jpg");
- $ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$name";
- $this->generatePreview( $hdfile, $ofile, 94, 94, ['sharpen' => '10 -enhance -gravity center -crop 94x94+0+0 +repage'] );
- return $file_tmp;
- }
- }
- return false;
- }
- /**
- * {@inheritdoc}
- * @return status.
- */
- public function deleteImg($id)
- {
- $img = ["_origin.png", "_origin.jpeg", "_origin.jpg", "_sizehd.jpg", "_size1.webp", "_size1.jpg", "_size2.webp", "_size2.jpg", "_size3.webp", "_size3.jpg", "_size4.webp", "_size4.jpg", ".jpg"];
- foreach( $img as $prefix ){
- $name = basename($id.$prefix);
- if( strpos( $prefix, 'webp' ) === false ){
- $file = Yii::getAlias('@webroot').'/'.static::$story_dir."/news/$name";
- }else{
- $file = Yii::getAlias('@webroot').'/'.static::$story_dir."/webp/$name";
- }
- @unlink( $file );
- }
- }
- public function Active($id, $state = -1)
- {
- if( $state < 0 ){
- $this->active = ($this->active == 'Y')?'N':'Y';
- }else{
- $this->active = $state;
- }
- return $this->save(false);
- }
- public function NH($id, $state = -1)
- {
- if( $state < 0 ){
- $this->NH = ($this->NH == 'Y')?'N':'Y';
- }else{
- $this->NH = $state;
- }
- return $this->save(false);
- }
- public function KD($id, $state = -1)
- {
- if( $state < 0 ){
- $this->top = ($this->top == 'Y')?'N':'Y';
- }else{
- $this->top = $state;
- }
- return $this->save(false);
- }
- /**
- * {@inheritdoc}
- * @return NewsQuery the active query used by this AR class.
- */
- public static function find()
- {
- return new NewsQuery(get_called_class());
- }
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getTopicRelations()
- {
- return $this->hasMany(NewsTopicRelation::class,['news_id'=>'id']);
- }
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getTopics()
- {
- return $this->hasMany(NewsTopic::class,['id'=>'topic_id'])->via('topicRelations');
- }
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getTagsRelations()
- {
- return $this->hasMany(TagsRelation::class,['news_id'=>'id']);
- }
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getTags()
- {
- return $this->hasMany(Tags::class,['id'=>'topic_id'])->via('tagsRelations');
- }
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getStoryRelations()
- {
- return $this->hasMany(StoryRelation::class,['news_id'=>'id']);
- }
- public function isAmicPhoto()
- {
- return (bool) ($this->flags & 2);
- }
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getStories()
- {
- return $this->hasMany(Story::class,['id'=>'topic_id'])->via('storyRelations');
- }
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getStory()
- {
- return $this->hasMany(Story::class,['id'=>'topic_id'])->via('storyRelations');
- }
- /**
- * @return Image
- */
- public function getImage($type="webp"):Image
- {
- return Image::findOne($this->id,$type,$this->photo_name);
- }
- }
|