Blame view

common/modules/comment/models/CommentProjectAnswer.php 5.71 KB
b5becf98   Yarik   test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  <?php
      namespace common\modules\comment\models;
  
      use common\models\Project;
      use common\models\User;
      use yii\db\ActiveQuery;
      use yii\helpers\Url;
  
      /**
       * Class Comment
       * @property bool    $guestComment
       * @property integer $comment_id
       * @property string  $text
       * @property int     $user_id
       * @property string  $user_name
       * @property string  $user_email
       * @property int     $comment_pid
       * @property int     $status
       * @property string  $date_add
       * @property string  $date_update
       * @property string  $date_delete
       * @property string  $model
       * @property int     $model_id
       * @property Rating  $rating
       * @property User    $user
       * @property User    $author
       * @package common\modules\comment\models
       */
      class CommentProjectAnswer extends Comment
      {
  
          public function rules()
          {
              return [
                  [
                      [
                          'text',
                          'user_name',
                          'user_email',
                      ],
                      'required',
                  ],
                  [
                      [
                          'rating',
                      ],
                      'safe',
                  ],
                  [
                      [ 'user_email' ],
                      'email',
                  ],
                  [
                      [ 'user_name' ],
                      'string',
                  ],
                  [
                      [
                          'comment_id',
                          'comment_pid',
                      ],
                      'integer',
                  ],
                  [
                      [ 'status' ],
                      'default',
                      'value' => 1,
                  ],
                  [
                      [ 'comment_pid' ],
                      'exist',
                      'targetAttribute' => 'comment_id',
                      'filter'          => [
                          'model'    => $this->model,
                          'model_id' => $this->model_id,
                      ],
                  ],
              ];
          }
  
          /**
           * @param string  $model
           * @param integer $model_id
           *
           * @return ActiveQuery
           */
          public static function getComments($model, $model_id)
          {
              $query = self::find()
                           ->where([
                               'comment.model'       => $model,
                               'comment.model_id'    => $model_id,
                               'comment.status'      => 1,
                               'comment.comment_pid' => NULL,
                           ])
                           ->with('parent');
              $project = Project::findOne($model_id);
              $user = \Yii::$app->user;
              if(empty( $user ) || $project->user_id != $user->id) {
                  $query->innerJoin([ 'child' => 'comment' ], 'comment.comment_id = child.comment_pid')
                        ->andWhere([
                            'not',
                            [ 'child.comment_id' => NULL ],
                        ]);
              }
              return $query;
          }
  
8eab7c9f   Yarik   test
109
110
          public function beforeDelete()
          {
d7f5a86c   Yarik   test
111
112
              if(!empty($this->child)) {
                  $this->child->delete();
8eab7c9f   Yarik   test
113
              }
d7f5a86c   Yarik   test
114
              return parent::beforeDelete(); // TODO: Change the autogenerated stub
8eab7c9f   Yarik   test
115
116
          }
  
b5becf98   Yarik   test
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
          public function checkCreate()
          {
              if($this->getGuestComment()) {
                  return true;
              } else {
                  return \Yii::$app->user->can(\common\modules\comment\Permissions::CREATE, [
                      'model'         => $this->model,
                      'model_id'      => $this->model_id,
                      'comment_model' => $this,
                  ]);
              }
          }
  
          public function checkUpdate()
          {
              if($this->scenario == self::SCENARIO_GUEST) {
                  return false;
              } else {
8eab7c9f   Yarik   test
135
136
137
                  if(!empty($this->comment_pid) && $this->user_id == \Yii::$app->user->id) {
                      return true;
                  }
b5becf98   Yarik   test
138
              }
8eab7c9f   Yarik   test
139
              return false;
b5becf98   Yarik   test
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
          }
  
          public function checkDelete()
          {
              if($this->scenario == self::SCENARIO_GUEST) {
                  return false;
              } else {
                  return ( \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE, [
                          'model'    => $this->model,
                          'model_id' => $this->model_id,
                          'comment'  => $this,
                      ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE_OWN, [
                          'model'    => $this->model,
                          'model_id' => $this->model_id,
                          'comment'  => $this,
                      ]) );
              }
          }
  
          public function checkReply()
          {
              if($this->scenario != self::SCENARIO_GUEST) {
                  if(!$this->isNewRecord && empty( $this->comment_pid )) {
                      $project = Project::findOne($this->model_id);
8eab7c9f   Yarik   test
164
165
166
167
168
169
                      if($project->user_id == \Yii::$app->user->id && empty($this->child)) {
                          return true;
                      }
                  } elseif($this->isNewRecord && !empty($this->comment_pid)) {
                      $parent = self::findOne($this->comment_pid);
                      if(!empty($parent) && $parent->checkReply()) {
b5becf98   Yarik   test
170
171
172
173
174
175
176
177
178
179
180
181
182
                          return true;
                      }
                  }
              }
              return false;
          }
  
          public function getChild()
          {
              return $this->hasOne($this->className(), [ 'comment_pid' => 'comment_id' ]);
          }
  
      }