Completed
Push — master ( 9aa93d...bd75c7 )
by vistart
08:03
created

UserTrait::removeSelf()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 1
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 2
b 0
f 1
cc 1
eloc 2
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 `userClass` 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 229
    public function rules()
84
    {
85 229
        return array_merge(
86 229
            parent::rules(),
87 229
            $this->getPasswordHashRules(),
88 229
            $this->getPasswordResetTokenRules(),
89 229
            $this->getSourceRules(),
90 229
            $this->getStatusRules(),
91 229
            $this->getAuthKeyRules(),
92 229
            $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->user->isGuest && (empty($user) || !($user instanceof static))) {
108 1
            throw new InvalidParamException('User Not Specified.');
109
        }
110 1
        if ((empty($user) || !($user instanceof static)) && !Yii::$app->user->isGuest) {
111 1
            $user = Yii::$app->user->identity;
112
        }
113 1
        return $user->find()->guid($user)->exists() ? $user : false;
114
    }
115
}
116