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