b82db04a
Yarik
test
|
1
2
3
|
<?php
namespace common\modules\comment\models;
|
4ed1f788
Yarik
test
|
4
5
|
use yii\db\ActiveQuery;
|
b82db04a
Yarik
test
|
6
7
|
/**
* Class Comment
|
2d107e9e
Yarik
test
|
8
9
|
* @property bool $guestComment
* @property integer $comment_id
|
2fd40ee7
Yarik
test
|
10
11
12
13
14
15
16
17
18
19
20
|
* @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
|
b82db04a
Yarik
test
|
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
* @package common\modules\comment\models
*/
class Comment extends \yii\db\ActiveRecord
implements \common\modules\comment\interfaces\CommentInterface
{
const STATUS_HIDDEN = 0;
const STATUS_DELETED = 2;
const STATUS_ACTIVE = 1;
const STATUS_PERSONAL = 3;
const SCENARIO_USER = 'user';
const SCENARIO_GUEST = 'guest';
|
2d107e9e
Yarik
test
|
35
36
37
38
39
|
/**
* @var bool
*/
public $guestComment = true;
|
b82db04a
Yarik
test
|
40
41
42
43
|
public function rules()
{
return [
[
|
2d107e9e
Yarik
test
|
44
45
46
47
48
|
[
'text',
'user_name',
'user_email',
],
|
b82db04a
Yarik
test
|
49
50
51
|
'required',
],
[
|
2d107e9e
Yarik
test
|
52
53
54
55
56
57
58
|
[
'rating',
],
'safe',
],
[
[ 'user_email' ],
|
b82db04a
Yarik
test
|
59
60
61
|
'email',
],
[
|
2d107e9e
Yarik
test
|
62
|
[ 'user_name' ],
|
b82db04a
Yarik
test
|
63
64
|
'string',
],
|
2d107e9e
Yarik
test
|
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
[
[
'comment_id',
'comment_pid',
],
'integer',
],
[
[ 'status' ],
'default',
'value' => 1,
],
[
[ 'comment_pid' ],
'exist',
'targetAttribute' => 'comment_id',
'filter' => [
|
2fd40ee7
Yarik
test
|
82
83
|
'model' => $this->model,
'model_id' => $this->model_id,
|
2d107e9e
Yarik
test
|
84
85
|
],
],
|
b82db04a
Yarik
test
|
86
87
88
89
90
91
|
];
}
public function scenarios()
{
return [
|
2d107e9e
Yarik
test
|
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
self::SCENARIO_GUEST => [
'user_name',
'user_email',
'text',
'comment_pid',
],
self::SCENARIO_USER => [
'text',
'comment_pid',
],
];
}
/**
* @inheritdoc
*/
public function behaviors()
{
return [
[
'class' => \yii\behaviors\TimestampBehavior::className(),
'createdAtAttribute' => 'date_add',
'updatedAtAttribute' => 'date_update',
'value' => new \yii\db\Expression('NOW()'),
],
|
b82db04a
Yarik
test
|
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
];
}
public static function tableName()
{
return '{{%comment}}';
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
|
2d107e9e
Yarik
test
|
131
132
|
'text' => \Yii::t('app', 'Комментарий'),
'user_name' => \Yii::t('app', 'Имя'),
|
b82db04a
Yarik
test
|
133
134
135
136
|
'user_email' => \Yii::t('app', 'Email'),
];
}
|
2d107e9e
Yarik
test
|
137
138
139
140
141
142
|
public function getGuestComment()
{
return $this->guestComment;
}
public function setGuestComment($value)
|
b82db04a
Yarik
test
|
143
|
{
|
2d107e9e
Yarik
test
|
144
|
$this->guestComment = $value;
|
b82db04a
Yarik
test
|
145
146
|
}
|
4ed1f788
Yarik
test
|
147
|
/**
|
2fd40ee7
Yarik
test
|
148
149
|
* @param string $model
* @param integer $model_id
|
4ed1f788
Yarik
test
|
150
151
152
|
*
* @return ActiveQuery
*/
|
2fd40ee7
Yarik
test
|
153
|
public function getComments($model, $model_id)
|
b82db04a
Yarik
test
|
154
|
{
|
2d107e9e
Yarik
test
|
155
156
|
return $this->find()
->where([
|
2fd40ee7
Yarik
test
|
157
158
159
|
'comment.model' => $model,
'comment.model_id' => $model_id,
'comment.status' => 1,
|
2d107e9e
Yarik
test
|
160
|
]);
|
b82db04a
Yarik
test
|
161
162
|
}
|
2d107e9e
Yarik
test
|
163
|
public function postComment()
|
b82db04a
Yarik
test
|
164
|
{
|
2d107e9e
Yarik
test
|
165
166
167
168
169
170
171
|
if($this->checkCreate()) {
if($this->insert()) {
$this->clearSafe();
return true;
} else {
return false;
}
|
b82db04a
Yarik
test
|
172
|
} else {
|
2d107e9e
Yarik
test
|
173
|
$this->addError('comment_id', 'You can`t post comment here');
|
b82db04a
Yarik
test
|
174
175
176
177
|
return false;
}
}
|
2d107e9e
Yarik
test
|
178
|
public function updateComment()
|
b82db04a
Yarik
test
|
179
|
{
|
2d107e9e
Yarik
test
|
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
if($this->checkUpdate()) {
if(empty( $this->comment_id )) {
$this->addError('comment_id', 'Comment ID not found');
return false;
} else {
if($this->update()) {
$this->clearSafe();
return true;
} else {
return false;
}
}
} else {
$this->addError('comment_id', 'You can`t update this post');
return false;
}
|
b82db04a
Yarik
test
|
196
197
|
}
|
2d107e9e
Yarik
test
|
198
|
public function deleteComment()
|
b82db04a
Yarik
test
|
199
|
{
|
2d107e9e
Yarik
test
|
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
if($this->checkDelete()) {
if(empty( $this->comment_id )) {
$this->addError('comment_id', 'Comment ID not found');
return false;
} else {
if($this->status == self::STATUS_DELETED) {
return false;
}
$this->status = self::STATUS_DELETED;
if($this->update()) {
$this->clearSafe();
return true;
} else {
return false;
}
}
} else {
$this->addError('comment_id', 'You can`t delete this post');
return false;
}
|
b82db04a
Yarik
test
|
220
221
|
}
|
2d107e9e
Yarik
test
|
222
|
public function checkCreate()
|
b82db04a
Yarik
test
|
223
|
{
|
2d107e9e
Yarik
test
|
224
|
if($this->getGuestComment()) {
|
b82db04a
Yarik
test
|
225
226
|
return true;
} else {
|
2fd40ee7
Yarik
test
|
227
228
229
230
|
return \Yii::$app->user->can(\common\modules\comment\Permissions::CREATE, [
'model' => $this->model,
'model_id' => $this->model_id,
]);
|
b82db04a
Yarik
test
|
231
232
233
|
}
}
|
2d107e9e
Yarik
test
|
234
235
236
237
238
|
public function checkUpdate()
{
if($this->scenario == self::SCENARIO_GUEST) {
return false;
} else {
|
2fd40ee7
Yarik
test
|
239
240
241
242
243
244
245
|
return \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE, [
'model' => $this->model,
'model_id' => $this->model_id,
]) || \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE_OWN, [
'model' => $this->model,
'model_id' => $this->model_id,
]);
|
2d107e9e
Yarik
test
|
246
247
248
249
250
251
252
253
|
}
}
public function checkDelete()
{
if($this->scenario == self::SCENARIO_GUEST) {
return false;
} else {
|
2fd40ee7
Yarik
test
|
254
255
256
257
258
259
260
|
return \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE, [
'model' => $this->model,
'model_id' => $this->model_id,
]) || \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE_OWN, [
'model' => $this->model,
'model_id' => $this->model_id,
]);
|
2d107e9e
Yarik
test
|
261
262
263
264
265
|
}
}
protected function clearSafe($setNew = true)
{
|
b82db04a
Yarik
test
|
266
267
268
269
270
271
272
273
|
$safe = $this->safeAttributes();
$count = count($safe);
$values = array_fill(0, $count, NULL);
$result = array_combine($safe, $values);
$this->setAttributes($result);
$this->setIsNewRecord($setNew);
}
|
2d107e9e
Yarik
test
|
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
public function getParent()
{
return $this->hasOne(self::className(), [ 'comment_id' => 'comment_pid' ]);
}
public function getAuthor()
{
// if($this->user_id != NULL) {
return $this->hasOne(\common\models\User::className(), [ 'id' => 'user_id' ]);
// } else {
// return ['firstname' => $this->user_name, 'email' => $this->user_email];
// }
}
public function checkRating()
{
|
2fd40ee7
Yarik
test
|
290
291
292
293
294
295
|
$rating = $this->hasOne(\common\modules\comment\models\Rating::className(), [
'model_id' => 'comment_id',
])
->andWhere([
'model' => $this->className(),
])
|
2d107e9e
Yarik
test
|
296
297
298
|
->one();
if(!$rating instanceof \common\modules\comment\models\Rating) {
$rating = new \common\modules\comment\models\Rating([
|
2fd40ee7
Yarik
test
|
299
300
301
|
'model' => $this->className(),
'model_id' => $this->comment_id,
'user_id' => $this->user_id,
|
2d107e9e
Yarik
test
|
302
303
304
305
306
307
308
309
|
]);
$rating->save();
}
}
public function getRating()
{
$this->checkRating();
|
2fd40ee7
Yarik
test
|
310
311
312
313
|
return $this->hasOne(\common\modules\comment\models\Rating::className(), [
'model_id' => 'comment_id',
])
->andWhere([ 'model' => $this->className() ]);
|
2d107e9e
Yarik
test
|
314
315
316
317
|
}
public function hasRating($return = true)
{
|
2fd40ee7
Yarik
test
|
318
319
320
321
|
$rating = $this->hasOne(\common\modules\comment\models\Rating::className(), [
'model_id' => 'comment_id',
])
->andWhere([ 'model' => $this->className() ])
|
2d107e9e
Yarik
test
|
322
323
324
325
326
327
328
329
330
331
332
333
|
->andWhere([
'not',
[ 'value' => NULL ],
])
->one();
if($return) {
return $rating;
} else {
return $rating ? true : false;
}
}
|
2d107e9e
Yarik
test
|
334
|
}
|