UserTrait::rules()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 1
Metric Value
dl 0
loc 12
ccs 9
cts 9
cp 1
rs 9.4285
c 2
b 0
f 1
cc 1
eloc 9
nc 1
nop 0
crap 1
1
<?php
2
3
/**
4
 *  _   __ __ _____ _____ ___  ____  _____
5
 * | | / // // ___//_  _//   ||  __||_   _|
6
 * | |/ // /(__  )  / / / /| || |     | |
7
 * |___//_//____/  /_/ /_/ |_||_|     |_|
8
 * @link https://vistart.me/
9
 * @copyright Copyright (c) 2016 - 2017 vistart
10
 * @license https://vistart.me/license/
11
 */
12
13
namespace rhosocial\base\models\traits;
14
15
use Yii;
16
use yii\base\InvalidParamException;
17
18
/**
19
 * Assemble PasswordTrait, RegistrationTrait and IdentityTrait into UserTrait.
20
 * This trait can only be used in the class extended from [[BaseEntityModel]],
21
 * [[BaseMongoEntityModel]], [[BaseRedisEntityModel]], or any other classes used
22
 * [[EntityTrait]].
23
 * This trait implements two methods `create()` and `findOneOrCreate()`.
24
 * Please read the notes of methods and used traits for further detailed usage.
25
 *
26
 * @version 1.0
27
 * @author vistart <[email protected]>
28
 */
29
trait UserTrait
30
{
31
    use PasswordTrait,
32
        RegistrationTrait,
33
        IdentityTrait;
34
35
    /**
36
     * Create new entity model associated with current user. The model to be created
37
     * must be extended from [[BaseBlameableModel]], [[BaseMongoBlameableModel]],
38
     * [[BaseRedisBlameableModel]], or any other classes used [[BlameableTrait]].
39
     * if $config does not specify `hostClass` property, self will be assigned to.
40
     * @param string $className Full qualified class name.
41
     * @param array $config name-value pairs that will be used to initialize
42
     * the object properties.
43
     * @param boolean $loadDefault Determines whether loading default values
44
     * after entity model created.
45
     * Notice! The [[\yii\mongodb\ActiveRecord]] and [[\yii\redis\ActiveRecord]]
46
     * does not support loading default value. If you want to assign properties
47
     * with default values, please define the `default` rule(s) for properties in
48
     * `rules()` method and return them by yourself if you don't specified them in config param.
49
     * @param boolean $skipIfSet whether existing value should be preserved.
50
     * This will only set defaults for attributes that are `null`.
51
     * @return [[$className]] new model created with specified configuration.
52
     *//*
53
    public function create($className, $config = [], $loadDefault = true, $skipIfSet = true)
54
    {
55
        if (!isset($config['hostClass'])) {
56
            $config['hostClass'] = static::class;
57
        }
58
        if (isset($config['class'])) {
59
            unset($config['class']);
60
        }
61
        $entity = new $className($config);
62
        $entity->setHost($this);
63
        if ($loadDefault && method_exists($entity, 'loadDefaultValues')) {
64
            $entity->loadDefaultValues($skipIfSet);
65
        }
66
        return $entity;
67
    }
68
    
69
    /**
70
     * This method is only used for overriding [[removeSelf()]] in [[TimestampTrait]].
71
     * @see deregister()
72
     * @return boolean
73
     */
74 4
    public function removeSelf()
75
    {
76 4
        return $this->deregister();
77
    }
78
79
    /**
80
     * Get all rules with current user properties.
81
     * @return array all rules.
82
     */
83 292
    public function rules()
84
    {
85 292
        return array_merge(
86 292
            parent::rules(),
87 292
            $this->getPasswordHashRules(),
88 292
            $this->getPasswordResetTokenRules(),
89 292
            $this->getSourceRules(),
90 292
            $this->getStatusRules(),
91 292
            $this->getAuthKeyRules(),
92 292
            $this->getAccessTokenRules()
93
        );
94
    }
95
    
96
    /**
97
     * Check whether the user is valid.
98
     * @param static $user User instance. The current logged-in user is automatically
0 ignored issues
show
introduced by
The type UserTrait for parameter $user is a trait, and thus cannot be used for type-hinting in PHP. Maybe consider adding an interface and use that for type-hinting?
Loading history...
99
     * used if a user is logged in and this parameter is null.
100
     * @return static|false if current user is valid, it return as is, otherwise
101
     * false returned.
102
     * @throws InvalidParamException if the current user is not logged in and
103
     * the user is not a valid instance.
104
     */
105 2
    public static function isValid($user)
106
    {
107 2
        if (Yii::$app instanceof \yii\web\Application && !Yii::$app->user->isGuest)
108
        {
109 1
            return Yii::$app->user->identity;
110
        }
111 1
        if (!($user instanceof static)) {
112 1
            return false;
113
        }
114
        return $user->find()->guid($user)->exists() ? $user : false;
0 ignored issues
show
Bug introduced by
It seems like find() must be provided by classes using this trait. How about adding it as abstract method to this trait?

This check looks for methods that are used by a trait but not required by it.

To illustrate, let’s look at the following code example

trait Idable {
    public function equalIds(Idable $other) {
        return $this->getId() === $other->getId();
    }
}

The trait Idable provides a method equalsId that in turn relies on the method getId(). If this method does not exist on a class mixing in this trait, the method will fail.

Adding the getId() as an abstract method to the trait will make sure it is available.

Loading history...
115
    }
116
}
117