a2cde075
Yarik
first commit
|
1
|
<?php
|
a2cde075
Yarik
first commit
|
2
|
|
faff2c48
Yarik
Artbox comment cr...
|
3
4
5
6
|
namespace artbox\webcomment\models;
use artbox\webcomment\behaviors\ParentBehavior;
use artbox\webcomment\models\interfaces\CommentInterface;
|
fd5e93c2
Yarik
Artbox comment pr...
|
7
|
use artbox\webcomment\Module;
|
a2cde075
Yarik
first commit
|
8
9
10
11
12
|
use yii\behaviors\AttributeBehavior;
use yii\behaviors\BlameableBehavior;
use yii\behaviors\TimestampBehavior;
use yii\data\ActiveDataProvider;
use yii\db\ActiveRecord;
|
a2cde075
Yarik
first commit
|
13
14
15
16
|
/**
* Class CommentModel
*
|
faff2c48
Yarik
Artbox comment cr...
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
* @property int $id
* @property string $text
* @property int $customer_id
* @property string $username
* @property string $email
* @property int $created_at
* @property int $updated_at
* @property int $deleted_at
* @property int $status
* @property int $parent_id
* @property int $related_id
* @property string $ip
* @property string $info
* @property string $entity
* @property int $entity_id
* @property ActiveRecord $entityModel
* @property string $link
* @property \artbox\webcomment\models\CommentModel[] $children
* @property \artbox\order\models\Customer $customer
|
b409d909
Yarik
Rating caching
|
36
|
* @property \artbox\webcomment\models\RatingModel $rating
|
a2cde075
Yarik
first commit
|
37
38
39
40
41
42
43
44
45
46
|
*/
class CommentModel extends ActiveRecord implements CommentInterface
{
const STATUS_ACTIVE = 1;
const STATUS_HIDDEN = 0;
const STATUS_DELETED = 2;
const SCENARIO_USER = 'user';
const SCENARIO_GUEST = 'guest';
|
faff2c48
Yarik
Artbox comment cr...
|
47
48
|
const SCENARIO_ADMIN = 'admin';
const SCENARIO_ADMIN_ANSWER = 'admin';
|
a2cde075
Yarik
first commit
|
49
50
51
52
|
public $encryptedEntity;
public $entityId;
|
b409d909
Yarik
Rating caching
|
53
|
|
faff2c48
Yarik
Artbox comment cr...
|
54
55
56
|
/**
* @inheritdoc
*/
|
a2cde075
Yarik
first commit
|
57
58
59
60
61
62
63
|
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[ self::SCENARIO_USER ] = [
'text',
'entity',
'entity_id',
|
faff2c48
Yarik
Artbox comment cr...
|
64
|
'parent_id',
|
a2cde075
Yarik
first commit
|
65
66
67
68
69
70
71
72
73
74
|
'status',
];
$scenarios[ self::SCENARIO_GUEST ] = [
'text',
'entity',
'entity_id',
'username',
'email',
'status',
];
|
faff2c48
Yarik
Artbox comment cr...
|
75
76
77
78
79
80
81
82
83
84
85
86
|
$scenarios[ self::SCENARIO_ADMIN ] = [
'text',
'status',
];
$scenarios[ self::SCENARIO_ADMIN_ANSWER ] = [
'text',
'parent_id',
'customer_id',
'entity',
'entity_id',
'status',
];
|
a2cde075
Yarik
first commit
|
87
88
|
return $scenarios;
}
|
b409d909
Yarik
Rating caching
|
89
|
|
faff2c48
Yarik
Artbox comment cr...
|
90
91
92
|
/**
* @inheritdoc
*/
|
a2cde075
Yarik
first commit
|
93
94
95
96
|
public static function tableName()
{
return '{{%artbox_comment}}';
}
|
b409d909
Yarik
Rating caching
|
97
|
|
faff2c48
Yarik
Artbox comment cr...
|
98
99
100
|
/**
* @inheritdoc
*/
|
a2cde075
Yarik
first commit
|
101
102
103
104
105
106
107
108
|
public function rules()
{
return [
[
[
'text',
'entity',
'entity_id',
|
a2cde075
Yarik
first commit
|
109
110
111
112
|
'username',
'email',
],
'required',
|
a2cde075
Yarik
first commit
|
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
],
[
[
'text',
'entity',
'username',
],
'string',
],
[
[
'email',
],
'email',
],
[
[
'entity_id',
|
faff2c48
Yarik
Artbox comment cr...
|
131
|
'parent_id',
|
a2cde075
Yarik
first commit
|
132
133
134
135
|
],
'integer',
],
[
|
faff2c48
Yarik
Artbox comment cr...
|
136
|
[ 'parent_id' ],
|
a2cde075
Yarik
first commit
|
137
|
'exist',
|
faff2c48
Yarik
Artbox comment cr...
|
138
|
'targetAttribute' => 'id',
|
a2cde075
Yarik
first commit
|
139
140
141
142
|
'skipOnError' => true,
],
];
}
|
b409d909
Yarik
Rating caching
|
143
|
|
faff2c48
Yarik
Artbox comment cr...
|
144
145
146
|
/**
* @inheritdoc
*/
|
a2cde075
Yarik
first commit
|
147
148
149
150
151
152
153
154
|
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
],
[
'class' => BlameableBehavior::className(),
|
faff2c48
Yarik
Artbox comment cr...
|
155
|
'createdByAttribute' => 'customer_id',
|
a2cde075
Yarik
first commit
|
156
157
158
159
160
161
162
|
'updatedByAttribute' => false,
],
[
'class' => AttributeBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'ip',
],
|
faff2c48
Yarik
Artbox comment cr...
|
163
|
'value' => function () {
|
a2cde075
Yarik
first commit
|
164
165
166
167
|
return \Yii::$app->request->userIP;
},
],
[
|
fd5e93c2
Yarik
Artbox comment pr...
|
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
'class' => AttributeBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'status',
],
'value' => function () {
/**
* @var Module $module
*/
$module = \Yii::$app->getModule('artbox-comment');
if (!$module) {
Module::registerMe();
}
if ($module->enablePremoderate) {
return self::STATUS_HIDDEN;
} else {
return self::STATUS_ACTIVE;
}
},
],
[
|
a2cde075
Yarik
first commit
|
188
189
|
'class' => ParentBehavior::className(),
],
|
a2cde075
Yarik
first commit
|
190
191
|
];
}
|
b409d909
Yarik
Rating caching
|
192
|
|
faff2c48
Yarik
Artbox comment cr...
|
193
194
195
|
/**
* @inheritdoc
*/
|
a2cde075
Yarik
first commit
|
196
197
198
|
public function attributeLabels()
{
return [
|
faff2c48
Yarik
Artbox comment cr...
|
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
'id' => \Yii::t('artbox-comment', 'ID'),
'text' => \Yii::t('artbox-comment', 'Text'),
'customer_id' => \Yii::t('artbox-comment', 'User'),
'username' => \Yii::t('artbox-comment', 'Username'),
'email' => 'Email',
'created_at' => \Yii::t('artbox-comment', 'Date add'),
'updated_at' => \Yii::t('artbox-comment', 'Date update'),
'deleted_at' => \Yii::t('artbox-comment', 'Date delete'),
'status' => \Yii::t('artbox-comment', 'Status'),
'parent_id' => \Yii::t('artbox-comment', 'Comment parent'),
'related_id' => \Yii::t('artbox-comment', 'Comment related'),
'ip' => 'IP',
'entity' => \Yii::t('artbox-comment', 'Entity'),
'info' => \Yii::t('artbox-comment', 'Info'),
'entity_id' => \Yii::t('artbox-comment', 'Entity ID'),
|
a2cde075
Yarik
first commit
|
214
215
|
];
}
|
b409d909
Yarik
Rating caching
|
216
|
|
faff2c48
Yarik
Artbox comment cr...
|
217
218
219
220
221
|
/**
* Set Entity of Comment model
*
* @param string $entity
*/
|
a2cde075
Yarik
first commit
|
222
223
224
225
|
public function setEntity(string $entity)
{
$this->entity = $entity;
}
|
b409d909
Yarik
Rating caching
|
226
|
|
faff2c48
Yarik
Artbox comment cr...
|
227
228
229
230
231
|
/**
* Get Entity of Comment model
*
* @return string
*/
|
a2cde075
Yarik
first commit
|
232
233
234
235
|
public function getEntity(): string
{
return $this->entity;
}
|
b409d909
Yarik
Rating caching
|
236
|
|
faff2c48
Yarik
Artbox comment cr...
|
237
238
239
240
241
242
243
244
|
/**
* Get ActiveDataProvider of comments for particular Entity according to its EntityId
*
* @param string $entity Entity name
* @param int $entityId Entity Id
*
* @return \yii\data\ActiveDataProvider
*/
|
a2cde075
Yarik
first commit
|
245
246
|
public static function getTree(string $entity, int $entityId): ActiveDataProvider
{
|
faff2c48
Yarik
Artbox comment cr...
|
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
$query = self::find()
->with(
[
'children' => function ($query) {
/**
* @var \yii\db\ActiveQuery $query
*/
if (class_exists(self::getCustomerClass())) {
$query->with('customer');
}
},
]
)
->where(
[
'entity' => $entity,
'entity_id' => $entityId,
'status' => self::STATUS_ACTIVE,
'parent_id' => null,
]
);
if (class_exists(self::getCustomerClass())) {
$query->with('customer');
}
|
a2cde075
Yarik
first commit
|
271
272
|
return new ActiveDataProvider(
[
|
faff2c48
Yarik
Artbox comment cr...
|
273
|
'query' => $query,
|
a2cde075
Yarik
first commit
|
274
275
276
277
278
279
280
281
282
283
284
|
'pagination' => [
'pageSize' => 20,
],
'sort' => [
'defaultOrder' => [
'created_at' => SORT_DESC,
],
],
]
);
}
|
b409d909
Yarik
Rating caching
|
285
|
|
faff2c48
Yarik
Artbox comment cr...
|
286
287
288
289
290
|
/**
* Delete comment
*
* @return bool
*/
|
a2cde075
Yarik
first commit
|
291
292
|
public function deleteComment(): bool
{
|
faff2c48
Yarik
Artbox comment cr...
|
293
|
if (!\Yii::$app->user->isGuest && \Yii::$app->user->id == $this->customer_id) {
|
a2cde075
Yarik
first commit
|
294
295
296
297
298
299
|
if ($this->delete()) {
return true;
}
}
return false;
}
|
b409d909
Yarik
Rating caching
|
300
|
|
faff2c48
Yarik
Artbox comment cr...
|
301
302
303
304
305
|
/**
* Set EntityId of Comment model
*
* @param int $entityId
*/
|
a2cde075
Yarik
first commit
|
306
307
308
309
|
public function setEntityId(int $entityId)
{
$this->entityId = $entityId;
}
|
b409d909
Yarik
Rating caching
|
310
|
|
faff2c48
Yarik
Artbox comment cr...
|
311
312
313
314
315
|
/**
* Get EntityId of Comment model
*
* @return int
*/
|
a2cde075
Yarik
first commit
|
316
317
318
319
|
public function getEntityId(): int
{
return $this->entityId;
}
|
b409d909
Yarik
Rating caching
|
320
|
|
faff2c48
Yarik
Artbox comment cr...
|
321
322
323
324
325
|
/**
* Get children relation for current comment
*
* @return \yii\db\ActiveQuery
*/
|
a2cde075
Yarik
first commit
|
326
327
|
public function getChildren()
{
|
faff2c48
Yarik
Artbox comment cr...
|
328
|
return $this->hasMany(self::className(), [ 'parent_id' => 'id' ])
|
a2cde075
Yarik
first commit
|
329
330
331
|
->andFilterWhere([ 'status' => self::STATUS_ACTIVE ])
->inverseOf('parent');
}
|
b409d909
Yarik
Rating caching
|
332
|
|
faff2c48
Yarik
Artbox comment cr...
|
333
334
335
336
337
|
/**
* Get parent relation for current comment
*
* @return \yii\db\ActiveQuery
*/
|
a2cde075
Yarik
first commit
|
338
339
|
public function getParent()
{
|
faff2c48
Yarik
Artbox comment cr...
|
340
|
return $this->hasOne(self::className(), [ 'id' => 'parent_id' ])
|
a2cde075
Yarik
first commit
|
341
342
|
->inverseOf('children');
}
|
b409d909
Yarik
Rating caching
|
343
|
|
faff2c48
Yarik
Artbox comment cr...
|
344
345
346
347
348
349
|
/**
* Get customer relation for current comment
*
* @return \yii\db\ActiveQuery
*/
public function getCustomer()
|
a2cde075
Yarik
first commit
|
350
|
{
|
faff2c48
Yarik
Artbox comment cr...
|
351
|
return $this->hasOne(self::getCustomerClass(), [ 'id' => 'customer_id' ]);
|
a2cde075
Yarik
first commit
|
352
|
}
|
b409d909
Yarik
Rating caching
|
353
|
|
faff2c48
Yarik
Artbox comment cr...
|
354
355
356
357
358
|
/**
* Get rating relation for current model
*
* @return \yii\db\ActiveQuery
*/
|
a2cde075
Yarik
first commit
|
359
360
|
public function getRating()
{
|
faff2c48
Yarik
Artbox comment cr...
|
361
|
return $this->hasOne(RatingModel::className(), [ 'model_id' => 'id' ])
|
a2cde075
Yarik
first commit
|
362
363
364
|
->andWhere(
[
'or',
|
faff2c48
Yarik
Artbox comment cr...
|
365
|
[ 'artbox_comment_rating.model' => null ],
|
a2cde075
Yarik
first commit
|
366
367
368
369
|
[ 'artbox_comment_rating.model' => self::className() ],
]
);
}
|
b409d909
Yarik
Rating caching
|
370
|
|
faff2c48
Yarik
Artbox comment cr...
|
371
372
373
374
375
|
/**
* Get entity model for current comment or false if not ActiveRecord
*
* @return ActiveRecord|false
*/
|
ce440bf9
Alexey Boroda
-Comments upgrade...
|
376
377
|
public function getEntityModel()
{
|
faff2c48
Yarik
Artbox comment cr...
|
378
379
|
if (method_exists($this->entity, 'findOne')) {
$model = call_user_func_array(
|
ce440bf9
Alexey Boroda
-Comments upgrade...
|
380
|
[
|
faff2c48
Yarik
Artbox comment cr...
|
381
382
383
384
|
$this->entity,
'findOne',
],
[ $this->entity_id ]
|
ce440bf9
Alexey Boroda
-Comments upgrade...
|
385
|
);
|
faff2c48
Yarik
Artbox comment cr...
|
386
387
388
389
390
|
return $model;
} else {
return false;
}
}
|
b409d909
Yarik
Rating caching
|
391
|
|
faff2c48
Yarik
Artbox comment cr...
|
392
393
394
395
396
397
398
399
400
401
402
403
404
|
/**
* Get Customer model name
*
* @return string
*/
protected static function getCustomerClass()
{
/**
* @var \artbox\webcomment\Module $module
*/
$module = \Yii::$app->getModule('artbox-comment');
if ($module) {
return $module->userIdentityClass;
|
ce440bf9
Alexey Boroda
-Comments upgrade...
|
405
|
} else {
|
faff2c48
Yarik
Artbox comment cr...
|
406
|
return 'artbox\order\models\Customer';
|
ce440bf9
Alexey Boroda
-Comments upgrade...
|
407
408
|
}
}
|
a34d7471
Anastasia
bug fix
|
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
|
/**
* @return bool|\yii\db\ActiveQuery
*/
public function getEntityQuery()
{
if (method_exists($this->entity, 'find')) {
$query = call_user_func_array(
[
$this->entity,
'find',
],
[]
);
return $query->where([ 'id' => $this->entity_id ]);
} else {
return false;
}
}
|
0bacad2e
Yarik
Namespaces
|
427
428
|
}
|