Blame view

common/models/Articles.php 5.01 KB
d8c1a2e0   Yarik   Big commit artbox
1
  <?php
d55d2fe0   Yarik   Multilanguage
2
3
      
      namespace common\models;
af036678   Yarik   Image behaviors
4
      
d55d2fe0   Yarik   Multilanguage
5
6
7
8
9
10
11
12
      use common\modules\language\behaviors\LanguageBehavior;
      use common\behaviors\SaveImgBehavior;
      use common\modules\comment\models\CommentModel;
      use Yii;
      use yii\db\ActiveQuery;
      use yii\db\ActiveRecord;
      use yii\web\Request;
      
d8c1a2e0   Yarik   Big commit artbox
13
      /**
d55d2fe0   Yarik   Multilanguage
14
       * This is the model class for table "articles".
5c2eb7c8   Yarik   Big commit almost...
15
16
17
18
       * @property integer         $id
       * @property integer         $date
       * @property string          $image
       * @property ArticleToRating $averageRating
d55d2fe0   Yarik   Multilanguage
19
       * * From language behavior *
5c2eb7c8   Yarik   Big commit almost...
20
21
22
23
24
25
26
       * @property ArticlesLang    $lang
       * @property ArticlesLang[]  $langs
       * @property ArticlesLang    $object_lang
       * @property string          $ownerKey
       * @property string          $langKey
       * @property ArticlesLang[]  $model_langs
       * @property bool            $transactionStatus
d55d2fe0   Yarik   Multilanguage
27
       * @method string           getOwnerKey()
14cd7eed   Yarik   LanguageBehavior ...
28
       * @method void             setOwnerKey( string $value )
d55d2fe0   Yarik   Multilanguage
29
       * @method string           getLangKey()
14cd7eed   Yarik   LanguageBehavior ...
30
       * @method void             setLangKey( string $value )
d55d2fe0   Yarik   Multilanguage
31
32
33
       * @method ActiveQuery      getLangs()
       * @method ActiveQuery      getLang( integer $language_id )
       * @method ArticlesLang[]   generateLangs()
14cd7eed   Yarik   LanguageBehavior ...
34
35
36
       * @method void             loadLangs( Request $request )
       * @method bool             linkLangs()
       * @method bool             saveLangs()
fd238f57   Yarik   Admin begin refac...
37
       * @method bool             getTransactionStatus()
14cd7eed   Yarik   LanguageBehavior ...
38
       * * End language behavior *
af036678   Yarik   Image behaviors
39
       * * From SaveImgBehavior
5c2eb7c8   Yarik   Big commit almost...
40
41
       * @property string|null     $imageFile
       * @property string|null     $imageUrl
af036678   Yarik   Image behaviors
42
43
44
       * @method string|null getImageFile( int $field )
       * @method string|null getImageUrl( int $field )
       * * End SaveImgBehavior
d8c1a2e0   Yarik   Big commit artbox
45
       */
af036678   Yarik   Image behaviors
46
      class Articles extends ActiveRecord
d8c1a2e0   Yarik   Big commit artbox
47
      {
d55d2fe0   Yarik   Multilanguage
48
          
d8c1a2e0   Yarik   Big commit artbox
49
          /**
d55d2fe0   Yarik   Multilanguage
50
           * @inheritdoc
d8c1a2e0   Yarik   Big commit artbox
51
           */
d55d2fe0   Yarik   Multilanguage
52
53
54
          public static function tableName()
          {
              return 'articles';
d8c1a2e0   Yarik   Big commit artbox
55
          }
d55d2fe0   Yarik   Multilanguage
56
57
58
59
60
61
62
          
          /**
           * @inheritdoc
           */
          public function behaviors()
          {
              return [
d55d2fe0   Yarik   Multilanguage
63
                  [
14cd7eed   Yarik   LanguageBehavior ...
64
                      'class'  => SaveImgBehavior::className(),
93c267f7   Yarik   Multilanguage big...
65
66
                      'fields' => [
                          [
14cd7eed   Yarik   LanguageBehavior ...
67
                              'name'      => 'image',
93c267f7   Yarik   Multilanguage big...
68
                              'directory' => 'articles',
14cd7eed   Yarik   LanguageBehavior ...
69
                          ],
93c267f7   Yarik   Multilanguage big...
70
                      ],
d55d2fe0   Yarik   Multilanguage
71
72
73
74
                  ],
                  'language' => [
                      'class' => LanguageBehavior::className(),
                  ],
d55d2fe0   Yarik   Multilanguage
75
              ];
d8c1a2e0   Yarik   Big commit artbox
76
          }
d55d2fe0   Yarik   Multilanguage
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
          
          /**
           * @inheritdoc
           */
          public function rules()
          {
              return [
                  [
                      [ 'date' ],
                      'default',
                      'value' => function() {
                          return time();
                      },
                  ],
                  [
                      [ 'date' ],
                      'safe',
                  ],
                  [
d55d2fe0   Yarik   Multilanguage
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
                      [ 'date' ],
                      'filter',
                      'filter' => function($value) {
                          return strtotime($value) ? : time();
                      },
                  ],
              ];
          }
          
          /**
           * @inheritdoc
           */
          public function attributeLabels()
          {
              return [
14cd7eed   Yarik   LanguageBehavior ...
111
112
113
114
                  'id'       => Yii::t('app', 'ID'),
                  'date'     => Yii::t('app', 'Date'),
                  'image'    => Yii::t('app', 'Image'),
                  'imageUrl' => Yii::t('app', 'Image'),
d55d2fe0   Yarik   Multilanguage
115
116
117
              ];
          }
          
d55d2fe0   Yarik   Multilanguage
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
          public function recalculateRating()
          {
              /**
               * @var ArticleToRating $averageRating
               */
              $average = $this->getComments()
                              ->joinWith('rating')
                              ->select([ 'average' => 'avg(artbox_comment_rating.value)::float' ])
                              ->scalar();
              if(!$average) {
                  $average = 0;
              }
              $averageRating = $this->averageRating;
              if(!empty( $averageRating )) {
                  $averageRating->value = $average;
              } else {
                  $averageRating = new ArticleToRating([
                      'articles_id' => $this->id,
                      'value'       => $average,
                  ]);
              }
              if($averageRating->save()) {
                  return true;
              } else {
                  return false;
              }
          }
          
          public function getComments()
          {
              return $this->hasMany(CommentModel::className(), [ 'entity_id' => 'id' ])
                          ->where([
                              'artbox_comment.entity'             => self::className(),
                              'artbox_comment.status'             => CommentModel::STATUS_ACTIVE,
                              'artbox_comment.artbox_comment_pid' => NULL,
                          ]);
          }
          
          public function getAverageRating()
          {
              return $this->hasOne(ArticleToRating::className(), [ 'articles_id' => 'id' ]);
d8c1a2e0   Yarik   Big commit artbox
159
160
          }
      }