b0f143c3
Yarik
first commit
|
1
|
<?php
|
b95371cf
Yarik
test
|
2
|
namespace common\models;
|
b0f143c3
Yarik
first commit
|
3
|
|
4ed1f788
Yarik
test
|
4
5
|
use common\modules\comment\models\Comment;
use common\modules\comment\models\Rating;
|
b95371cf
Yarik
test
|
6
|
use Yii;
|
4ed1f788
Yarik
test
|
7
|
use yii\base\InvalidConfigException;
|
b95371cf
Yarik
test
|
8
9
|
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
|
e8236f44
Yarik
test
|
10
|
use yii\db\ActiveQuery;
|
b95371cf
Yarik
test
|
11
|
use yii\db\ActiveRecord;
|
be662d1f
Yarik
test
|
12
|
use yii\helpers\Url;
|
e8236f44
Yarik
test
|
13
14
|
use yii\rbac\ManagerInterface;
use yii\rbac\Role;
|
b95371cf
Yarik
test
|
15
16
|
use yii\web\IdentityInterface;
use developeruz\db_rbac\interfaces\UserRbacInterface;
|
b0f143c3
Yarik
first commit
|
17
18
|
/**
|
b95371cf
Yarik
test
|
19
|
* User model
|
5077a0ec
Yarik
test
|
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
|
* @property integer $id
* @property string $username
* @property string $password_hash
* @property string $password_reset_token
* @property string $email
* @property string $auth_key
* @property integer $status
* @property integer $created_at
* @property integer $updated_at
* @property string $password write-only password
* @property string $type
* @property UserInfo $userInfo
* @property string $userName
* @property array[] $roles
* @property CompanyInfo $companyInfo
* @property array[] $phones
* @property array[] $site
* @property string $address
* @property string $liveTime
* @property Payment[] $payments
* @property integer[] $paymentInput
* @property Specialization[] $specializations
* @property integer[] $specializationInput
* @property Blog[] $blog
* @property Job[] $jobs
* @property Job $currentJob
* @property Portfolio[] $portfolios
* @property Project[] $projects
* @property Team[] $teams
* @property Vacancy[] $vacancies
* @property Gallery[] $galleries
|
be662d1f
Yarik
test
|
51
|
* @property UserInfo|CompanyInfo $owner
|
5077a0ec
Yarik
test
|
52
53
54
55
56
57
|
* @property string $name
* @property Comment[] $comments
* @property Rating[] $commentRating
* @property int $ratingPG
* @property string $lastVisit
* @property string $link
|
b0f143c3
Yarik
first commit
|
58
|
*/
|
b95371cf
Yarik
test
|
59
|
class User extends ActiveRecord implements IdentityInterface, UserRbacInterface
|
b0f143c3
Yarik
first commit
|
60
|
{
|
4c9663e0
Yarik
test
|
61
|
|
b95371cf
Yarik
test
|
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
const STATUS_DELETED = 0;
const STATUS_ACTIVE = 10;
public $profile;
public $old_password;
public $new_password;
public $password_reply;
/**
* @inheritdoc
*/
public static function tableName()
{
return '{{%user}}';
}
|
b95371cf
Yarik
test
|
81
82
83
84
85
86
|
/**
* @inheritdoc
*/
public function behaviors()
{
return [
|
35b03e57
Administrator
add yii jquery
|
87
|
[
|
be662d1f
Yarik
test
|
88
|
'class' => 'common\behaviors\ShowImage',
|
35b03e57
Administrator
add yii jquery
|
89
|
],
|
b95371cf
Yarik
test
|
90
91
92
93
|
TimestampBehavior::className(),
];
}
|
b95371cf
Yarik
test
|
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/**
* @inheritdoc
*/
public function rules()
{
return [
[
'status',
'default',
'value' => self::STATUS_ACTIVE,
],
[
'status',
'in',
'range' => [
self::STATUS_ACTIVE,
self::STATUS_DELETED,
],
],
[
[
'username',
'lastname',
'firstname',
'middlename',
],
'string',
'max' => 255,
],
[
|
b95371cf
Yarik
test
|
124
125
126
|
[
'specializationInput',
'paymentInput',
|
4ed1f788
Yarik
test
|
127
|
'type',
|
b95371cf
Yarik
test
|
128
129
130
|
],
'safe',
],
|
658a5f37
Yarik
test
|
131
132
133
134
|
[
'type',
'default',
'value' => 1,
|
4ed1f788
Yarik
test
|
135
|
],
|
b95371cf
Yarik
test
|
136
137
138
139
140
141
|
];
}
/**
* @inheritdoc
*/
|
3e86d3d1
Yarik
test
|
142
143
144
145
|
public function attributeLabels()
{
return [
'firstname' => Yii::t('app', 'Имя'),
|
4ed1f788
Yarik
test
|
146
147
|
'lastname' => Yii::t('app', 'Фамилия'),
'email' => Yii::t('app', 'Email'),
|
3e86d3d1
Yarik
test
|
148
149
150
151
152
153
|
];
}
/**
* @inheritdoc
*/
|
b95371cf
Yarik
test
|
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
public static function findIdentity($id)
{
if(Yii::$app->getSession()
->has('user-' . $id)
) {
if(Yii::$app->getSession()
->has('user-' . $id)
) {
return new self(Yii::$app->getSession()
->get('user-' . $id));
} else {
return isset( self::$users[ $id ] ) ? new self(self::$users[ $id ]) : NULL;
}
} else {
return static::findOne([
'id' => $id,
'status' => self::STATUS_ACTIVE,
]);
|
b0f143c3
Yarik
first commit
|
172
|
}
|
b95371cf
Yarik
test
|
173
|
|
b0f143c3
Yarik
first commit
|
174
|
}
|
b95371cf
Yarik
test
|
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
/**
* @param \nodge\eauth\ServiceBase $service
*
* @return User
* @throws ErrorException
*/
public static function findByEAuth($service)
{
if(!$service->getIsAuthenticated()) {
throw new ErrorException('EAuth user should be authenticated before creating identity.');
}
$id = $service->getServiceName() . '-' . $service->getId();
$attributes = [
'id' => $id,
'username' => $service->getAttribute('name'),
'authKey' => md5($id),
'profile' => $service->getAttributes(),
];
$attributes[ 'profile' ][ 'service' ] = $service->getServiceName();
Yii::$app->getSession()
->set('user-' . $id, $attributes);
return new self($attributes);
|
b0f143c3
Yarik
first commit
|
198
|
}
|
b0f143c3
Yarik
first commit
|
199
|
|
b95371cf
Yarik
test
|
200
|
public $authKey;
|
b0f143c3
Yarik
first commit
|
201
|
|
b95371cf
Yarik
test
|
202
203
204
205
206
207
208
|
/**
* @inheritdoc
*/
public static function findIdentityByAccessToken($token, $type = NULL)
{
throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
}
|
b0f143c3
Yarik
first commit
|
209
|
|
b95371cf
Yarik
test
|
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
/**
* Finds user by username
*
* @param string $username
*
* @return static|null
*/
public static function findByUsername($username)
{
return static::findOne([
'username' => $username,
'status' => self::STATUS_ACTIVE,
]);
}
|
b0f143c3
Yarik
first commit
|
224
|
|
b95371cf
Yarik
test
|
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
|
/**
* Finds user by password reset token
*
* @param string $token password reset token
*
* @return static|null
*/
public static function findByPasswordResetToken($token)
{
if(!static::isPasswordResetTokenValid($token)) {
return NULL;
}
return static::findOne([
'password_reset_token' => $token,
'status' => self::STATUS_ACTIVE,
]);
|
b0f143c3
Yarik
first commit
|
242
243
|
}
|
b95371cf
Yarik
test
|
244
245
246
247
248
249
250
251
252
253
254
255
|
/**
* Finds out if password reset token is valid
*
* @param string $token password reset token
*
* @return boolean
*/
public static function isPasswordResetTokenValid($token)
{
if(empty( $token )) {
return false;
}
|
b0f143c3
Yarik
first commit
|
256
|
|
b95371cf
Yarik
test
|
257
258
259
|
$timestamp = (int) substr($token, strrpos($token, '_') + 1);
$expire = Yii::$app->params[ 'user.passwordResetTokenExpire' ];
return $timestamp + $expire >= time();
|
b0f143c3
Yarik
first commit
|
260
261
|
}
|
b95371cf
Yarik
test
|
262
263
264
265
266
267
268
|
/**
* @inheritdoc
*/
public function getId()
{
return $this->getPrimaryKey();
}
|
b0f143c3
Yarik
first commit
|
269
|
|
b95371cf
Yarik
test
|
270
271
272
273
274
275
276
|
/**
* @inheritdoc
*/
public function getAuthKey()
{
return $this->auth_key;
}
|
b0f143c3
Yarik
first commit
|
277
|
|
b95371cf
Yarik
test
|
278
279
280
281
282
283
284
|
/**
* @inheritdoc
*/
public function validateAuthKey($authKey)
{
return $this->getAuthKey() === $authKey;
}
|
b0f143c3
Yarik
first commit
|
285
|
|
b95371cf
Yarik
test
|
286
287
288
289
290
291
292
293
294
295
296
|
/**
* Validates password
*
* @param string $password password to validate
*
* @return boolean if password provided is valid for current user
*/
public function validatePassword($password)
{
return Yii::$app->security->validatePassword($password, $this->password_hash);
}
|
b0f143c3
Yarik
first commit
|
297
|
|
b95371cf
Yarik
test
|
298
299
300
301
302
303
304
305
306
|
/**
* Generates password hash from password and sets it to the model
*
* @param string $password
*/
public function setPassword($password)
{
$this->password_hash = Yii::$app->security->generatePasswordHash($password);
}
|
b0f143c3
Yarik
first commit
|
307
|
|
b95371cf
Yarik
test
|
308
309
310
311
312
313
314
|
/**
* Generates "remember me" authentication key
*/
public function generateAuthKey()
{
$this->auth_key = Yii::$app->security->generateRandomString();
}
|
b0f143c3
Yarik
first commit
|
315
|
|
b95371cf
Yarik
test
|
316
317
318
319
320
321
322
|
/**
* Generates new password reset token
*/
public function generatePasswordResetToken()
{
$this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
}
|
b0f143c3
Yarik
first commit
|
323
|
|
b95371cf
Yarik
test
|
324
325
326
327
328
329
330
|
/**
* Removes password reset token
*/
public function removePasswordResetToken()
{
$this->password_reset_token = NULL;
}
|
b0f143c3
Yarik
first commit
|
331
|
|
e8236f44
Yarik
test
|
332
333
|
/**
* Returns name of the User
|
e8236f44
Yarik
test
|
334
335
|
* @return string
*/
|
b95371cf
Yarik
test
|
336
337
338
339
|
public function getUserName()
{
return $this->username;
}
|
b0f143c3
Yarik
first commit
|
340
|
|
e8236f44
Yarik
test
|
341
342
|
/**
* Return array of all User's roles
|
e8236f44
Yarik
test
|
343
344
|
* @return array
*/
|
b95371cf
Yarik
test
|
345
346
347
348
349
350
|
public function getRoles()
{
$auth = \Yii::$app->authManager;
$roles = $this->getRoleChildrenRecursive($auth->getRolesByUser($this->id), $auth);
return $roles;
}
|
b0f143c3
Yarik
first commit
|
351
|
|
e8236f44
Yarik
test
|
352
|
/**
|
4c9663e0
Yarik
test
|
353
354
355
356
|
* @param Role[] $roles User roles returned by
* [ManagerInterface]->[getRolesByUser($id)]
* @param ManagerInterface $auth Auth manager
* @param array $result
|
e8236f44
Yarik
test
|
357
358
359
|
*
* @return array
*/
|
b95371cf
Yarik
test
|
360
|
protected function getRoleChildrenRecursive($roles, $auth, $result = [ ])
|
b0f143c3
Yarik
first commit
|
361
|
{
|
b95371cf
Yarik
test
|
362
363
364
365
366
367
368
|
if(is_array($roles) && !empty( $roles )) {
foreach($roles as $role => $item) {
if(!( $item instanceof \yii\rbac\Role )) {
continue;
}
$result[] = $role;
$result = self::getRoleChildrenRecursive($auth->getChildren($role), $auth, $result);
|
b0f143c3
Yarik
first commit
|
369
|
}
|
b95371cf
Yarik
test
|
370
371
372
|
return $result;
} else {
return $result;
|
b0f143c3
Yarik
first commit
|
373
|
}
|
b0f143c3
Yarik
first commit
|
374
|
}
|
cd6bd007
Yarik
test
|
375
|
|
e8236f44
Yarik
test
|
376
377
|
/**
* Return UserInfo for this User
|
e8236f44
Yarik
test
|
378
379
|
* @return \yii\db\ActiveQuery
*/
|
b95371cf
Yarik
test
|
380
381
|
public function getUserInfo()
{
|
4ed1f788
Yarik
test
|
382
383
|
return $this->hasOne(UserInfo::className(), [ 'user_id' => 'id' ])
->inverseOf('user');
|
b95371cf
Yarik
test
|
384
|
}
|
51e0a262
Yarik
test
|
385
|
|
e8236f44
Yarik
test
|
386
387
|
/**
* Check if User is Performer
|
e8236f44
Yarik
test
|
388
|
* <i>currently in development mode</i>
|
e8236f44
Yarik
test
|
389
390
|
* @return bool
*/
|
b95371cf
Yarik
test
|
391
392
393
394
|
public function getIsPerformer()
{
return true;
}
|
033f9331
Administrator
09.02.16
|
395
|
|
e8236f44
Yarik
test
|
396
397
|
/**
* Return CompanyInfo for this User
|
e8236f44
Yarik
test
|
398
399
|
* @return \yii\db\ActiveQuery
*/
|
47559a4b
Yarik
test
|
400
401
402
403
|
public function getCompanyInfo()
{
return $this->hasOne(CompanyInfo::className(), [ 'user_id' => 'id' ]);
}
|
658d13d4
Administrator
09.02.16
|
404
|
|
e8236f44
Yarik
test
|
405
406
|
/**
* Return array of User's phones
|
e8236f44
Yarik
test
|
407
408
|
* @return array
*/
|
a02e2fdb
Yarik
test
|
409
410
411
|
public function getPhones()
{
return Fields::getData($this->id, self::className(), 'phone');
|
f6ea8941
Administrator
09.02.16
|
412
413
|
}
|
e8236f44
Yarik
test
|
414
415
|
/**
* Return array of User's site
|
e8236f44
Yarik
test
|
416
417
|
* @return array
*/
|
a02e2fdb
Yarik
test
|
418
419
420
|
public function getSite()
{
return Fields::getData($this->id, self::className(), 'site');
|
f6ea8941
Administrator
09.02.16
|
421
422
|
}
|
e8236f44
Yarik
test
|
423
424
|
/**
* Return full address of User in view like:
|
e8236f44
Yarik
test
|
425
426
427
|
* <code>{country}, {city}, {street}, {house}</code>
* @return string
*/
|
a02e2fdb
Yarik
test
|
428
429
430
|
public function getAddress()
{
return $this->userInfo->country . ', ' . $this->userInfo->city . ', ' . $this->companyInfo->street . ', ' . $this->companyInfo->house;
|
f6ea8941
Administrator
09.02.16
|
431
432
|
}
|
e8236f44
Yarik
test
|
433
434
|
/**
* Return relative interval of time from User registration date until now.
|
e8236f44
Yarik
test
|
435
436
|
* @return string
*/
|
47559a4b
Yarik
test
|
437
438
|
public function getLiveTime()
{
|
47559a4b
Yarik
test
|
439
440
|
$now = new \DateTime('now');
$date1 = new \DateTime(date('Y-m-d H:i:s', $this->created_at));
|
eb7e82fb
Administrator
29.02.16
|
441
442
|
$result = explode(',', \Yii::$app->formatter->asDuration($date1->diff($now)));
|
4ed1f788
Yarik
test
|
443
|
if($result >= 4) {
|
eb7e82fb
Administrator
29.02.16
|
444
445
446
|
array_splice($result, 2);
}
|
4ed1f788
Yarik
test
|
447
|
return implode(',', $result);
|
47559a4b
Yarik
test
|
448
|
}
|
b95371cf
Yarik
test
|
449
|
|
e8236f44
Yarik
test
|
450
451
|
/**
* Check if User is Customer
|
e8236f44
Yarik
test
|
452
|
* <i>currently in development</i>
|
e8236f44
Yarik
test
|
453
454
|
* @return bool
*/
|
b95371cf
Yarik
test
|
455
456
457
458
459
|
public function getIsCustomer()
{
return true;
}
|
e8236f44
Yarik
test
|
460
461
|
/**
* Return array of payments types accepted by the user.
|
e8236f44
Yarik
test
|
462
463
|
* @return ActiveQuery
*/
|
b95371cf
Yarik
test
|
464
465
466
467
468
469
|
public function getPayments()
{
return $this->hasMany(Payment::className(), [ 'payment_id' => 'payment_id' ])
->viaTable('user_payment', [ 'user_id' => 'id' ]);
}
|
e8236f44
Yarik
test
|
470
471
|
/**
* Return array of Payment IDs, accepted by the user.
|
e8236f44
Yarik
test
|
472
473
|
* @return integer[]
*/
|
b95371cf
Yarik
test
|
474
475
476
477
478
479
480
|
public function getPaymentInput()
{
return $this->getPayments()
->asArray()
->column();
}
|
e8236f44
Yarik
test
|
481
482
483
484
485
|
/**
* Setter which allow to set User's payment ID's for further saving to the DB.
*
* @param integer[] $value
*/
|
b95371cf
Yarik
test
|
486
487
488
489
490
|
public function setPaymentInput($value)
{
$this->paymentInput = $value;
}
|
e8236f44
Yarik
test
|
491
492
|
/**
* Return array of Specializations in which the User works.
|
e8236f44
Yarik
test
|
493
494
|
* @return ActiveQuery
*/
|
b95371cf
Yarik
test
|
495
496
497
498
499
500
|
public function getSpecializations()
{
return $this->hasMany(Specialization::className(), [ 'specialization_id' => 'specialization_id' ])
->viaTable('user_specialization', [ 'user_id' => 'id' ]);
}
|
e8236f44
Yarik
test
|
501
502
|
/**
* Return array of User's blogs
|
e8236f44
Yarik
test
|
503
504
|
* @return ActiveQuery
*/
|
376a557b
Administrator
09.02.16
|
505
506
507
508
509
|
public function getBlog()
{
return $this->hasMany(Blog::className(), [ 'user_id' => 'id' ]);
}
|
e8236f44
Yarik
test
|
510
511
|
/**
* Return array of User's jobs.
|
e8236f44
Yarik
test
|
512
513
|
* @return ActiveQuery
*/
|
f6ea8941
Administrator
09.02.16
|
514
515
516
517
518
|
public function getJobs()
{
return $this->hasMany(Job::className(), [ 'user_id' => 'id' ]);
}
|
e8236f44
Yarik
test
|
519
520
|
/**
* Return ActiveRecord of current User's place of work.
|
e8236f44
Yarik
test
|
521
522
523
524
|
* @return ActiveQuery
*/
public function getCurrentJob()
{
|
4c9663e0
Yarik
test
|
525
526
|
return $this->hasOne(Job::className(), [ 'user_id' => 'id' ])
->where([ 'current' => 1 ]);
|
e8236f44
Yarik
test
|
527
528
529
530
|
}
/**
* Return array of User's specialization IDs
|
e8236f44
Yarik
test
|
531
532
|
* @return integer[]
*/
|
b95371cf
Yarik
test
|
533
534
535
536
|
public function getSpecializationInput()
{
return $this->getSpecializations()
->asArray()
|
4c9663e0
Yarik
test
|
537
|
->indexBy('specialization_id')
|
b95371cf
Yarik
test
|
538
539
540
|
->column();
}
|
e8236f44
Yarik
test
|
541
542
543
544
545
|
/**
* Setter which allow to set User's specializations for further saving to the DB.
*
* @param integer[] $value
*/
|
b95371cf
Yarik
test
|
546
547
548
549
|
public function setSpecializationInput($value)
{
$this->specializationInput = $value;
}
|
51e0a262
Yarik
test
|
550
|
|
e8236f44
Yarik
test
|
551
552
|
/**
* Return array of User's portfolios.
|
e8236f44
Yarik
test
|
553
554
|
* @return ActiveQuery
*/
|
a02e2fdb
Yarik
test
|
555
556
557
558
559
|
public function getPortfolios()
{
return $this->hasMany(Portfolio::className(), [ 'user_id' => 'id' ]);
}
|
e8236f44
Yarik
test
|
560
561
|
/**
* Return array of User's projects.
|
e8236f44
Yarik
test
|
562
563
|
* @return ActiveQuery
*/
|
a02e2fdb
Yarik
test
|
564
565
566
567
568
|
public function getProjects()
{
return $this->hasMany(Project::className(), [ 'user_id' => 'id' ]);
}
|
e8236f44
Yarik
test
|
569
570
|
/**
* Return array of company's Team members.
|
e8236f44
Yarik
test
|
571
572
|
* @return ActiveQuery
*/
|
a02e2fdb
Yarik
test
|
573
574
575
576
577
|
public function getTeams()
{
return $this->hasMany(Team::className(), [ 'user_id' => 'id' ]);
}
|
e8236f44
Yarik
test
|
578
579
|
/**
* Return array of company's Vacancies.
|
e8236f44
Yarik
test
|
580
581
|
* @return ActiveQuery
*/
|
a02e2fdb
Yarik
test
|
582
583
|
public function getVacancies()
{
|
4ed1f788
Yarik
test
|
584
585
|
return $this->hasMany(Vacancy::className(), [ 'user_id' => 'id' ])
->inverseOf('user');
|
a02e2fdb
Yarik
test
|
586
587
|
}
|
be662d1f
Yarik
test
|
588
589
|
/**
* Return all user's galleries
|
be662d1f
Yarik
test
|
590
591
|
* @return ActiveQuery
*/
|
2e35d6bd
Yarik
test
|
592
593
594
595
596
|
public function getGalleries()
{
return $this->hasMany(Gallery::className(), [ 'user_id' => 'id' ]);
}
|
be662d1f
Yarik
test
|
597
598
|
/**
* Return company info or user info according to user type
|
be662d1f
Yarik
test
|
599
600
|
* @return ActiveQuery
*/
|
3dc20ff7
Administrator
24.02.16
|
601
602
|
public function getOwner()
{
|
4ed1f788
Yarik
test
|
603
|
if($this->type == 2) {
|
3dc20ff7
Administrator
24.02.16
|
604
|
return $this->hasOne(CompanyInfo::className(), [ 'user_id' => 'id' ]);
|
4ed1f788
Yarik
test
|
605
606
|
} else {
return $this->hasOne(UserInfo::className(), [ 'user_id' => 'id' ]);
|
3dc20ff7
Administrator
24.02.16
|
607
|
}
|
3dc20ff7
Administrator
24.02.16
|
608
609
|
}
|
be662d1f
Yarik
test
|
610
611
|
/**
* Return company name or user firstname and lastname according to user type
|
be662d1f
Yarik
test
|
612
613
|
* @return string
*/
|
4ed1f788
Yarik
test
|
614
615
616
|
public function getName()
{
if($this->type == 2) {
|
3ea37908
Administrator
01.03.16
|
617
|
return $this->companyInfo->name;
|
4ed1f788
Yarik
test
|
618
619
|
} else {
return $this->firstname . ' ' . $this->lastname;
|
3ea37908
Administrator
01.03.16
|
620
|
}
|
4ed1f788
Yarik
test
|
621
|
}
|
3ea37908
Administrator
01.03.16
|
622
|
|
2fd40ee7
Yarik
test
|
623
|
/**
|
be662d1f
Yarik
test
|
624
|
* Return all comments to user
|
2fd40ee7
Yarik
test
|
625
626
|
* @return ActiveQuery
*/
|
4ed1f788
Yarik
test
|
627
628
|
public function getComments()
{
|
2fd40ee7
Yarik
test
|
629
630
631
632
633
634
635
636
637
|
return $this->hasMany(Comment::className(), [
'model_id' => 'id',
])
->andWhere([
'comment.model' => $this->className(),
]);
}
/**
|
be662d1f
Yarik
test
|
638
|
* Return all ratings to user
|
2fd40ee7
Yarik
test
|
639
640
641
642
643
644
645
646
647
|
* @return ActiveQuery
*/
public function getCommentRating()
{
return $this->hasMany(Rating::className(), [ 'model_id' => 'comment_id' ])
->via('comments')
->andWhere([
'rating.model' => Comment::className(),
]);
|
3dc20ff7
Administrator
24.02.16
|
648
649
|
}
|
be662d1f
Yarik
test
|
650
651
652
|
/**
* Return user's rating<br>
* <b>Available only for PostgreSQL</b>
|
be662d1f
Yarik
test
|
653
654
655
|
* @return int
* @throws InvalidConfigException
*/
|
4ed1f788
Yarik
test
|
656
657
658
659
660
|
public function getRatingPG()
{
if(\Yii::$app->db->driverName != 'pgsql') {
throw new InvalidConfigException('This method is available only in PostgreSQL');
}
|
2fd40ee7
Yarik
test
|
661
|
return $this->getCommentRating()
|
5077a0ec
Yarik
test
|
662
|
->select([ 'rating' => 'ROUND(SUM("rating"."value")/COUNT("rating"."rating_id")::numeric, 2)' ])
|
2fd40ee7
Yarik
test
|
663
664
665
666
667
668
669
|
->andWhere([
'not',
[ 'rating.value' => NULL ],
])
->scalar();
}
|
be662d1f
Yarik
test
|
670
671
|
/**
* Recalculate rating and write it to db.
|
be662d1f
Yarik
test
|
672
|
* <b>Only for PostgreSQL</b>
|
be662d1f
Yarik
test
|
673
|
* @see \common\models\User::getRatingPG()
|
be662d1f
Yarik
test
|
674
675
|
* @throws InvalidConfigException
*/
|
2fd40ee7
Yarik
test
|
676
677
678
679
680
681
|
public function updateRating()
{
if($rating = $this->getRatingPG()) {
$this->userInfo->rating = $rating;
$this->userInfo->save();
}
|
4ed1f788
Yarik
test
|
682
|
}
|
3dc20ff7
Administrator
24.02.16
|
683
|
|
be662d1f
Yarik
test
|
684
685
686
687
688
689
690
|
public function getLastVisit()
{
return \Yii::$app->formatter->asRelativeTime($this->userInfo->date_visit);
}
/**
* Return link to user personal page according to user type
|
be662d1f
Yarik
test
|
691
692
693
694
695
|
* @return string
*/
public function getLink($page = 'common')
{
if($this->type == 2) {
|
5077a0ec
Yarik
test
|
696
697
698
699
|
return Url::to([
'company/' . $page,
'company_id' => $this->id,
]);
|
be662d1f
Yarik
test
|
700
|
} else {
|
5077a0ec
Yarik
test
|
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
|
return Url::to([
'performer/' . $page,
'performer_id' => $this->id,
]);
}
}
public function getIsBookmarked($type = Bookmark::TYPE_PERFORMER)
{
if(!empty( \Yii::$app->user->identity )) {
if(!empty( $this->hasOne(Bookmark::className(), [ 'model_id' => 'id' ])
->andWhere([
'model' => $this->className(),
'user_id' => \Yii::$app->user->getId(),
'type' => $type,
])
->one() )
) {
return true;
} else {
return false;
}
} else {
return false;
|
be662d1f
Yarik
test
|
725
726
727
|
}
}
|
51e0a262
Yarik
test
|
728
|
}
|