Completed
Push — master ( b27204...a2c64d )
by Nate
05:15 queued 02:48
created

src/actions/users/AbstractUserAssociation.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
/**
4
 * @copyright  Copyright (c) Flipbox Digital Limited
5
 * @license    https://flipboxfactory.com/software/domains/license
6
 * @link       https://www.flipboxfactory.com/software/domains/
7
 */
8
9
namespace flipbox\organizations\actions\users;
10
11
use Craft;
12
use craft\elements\User;
13
use flipbox\craft\ember\actions\ManageTrait;
14
use flipbox\organizations\elements\Organization;
15
use flipbox\organizations\records\UserAssociation;
16
use yii\base\Action;
17
use yii\web\HttpException;
18
19
/**
20
 * @author Flipbox Factory <[email protected]>
21
 * @since  1.0.0
22
 */
23
abstract class AbstractUserAssociation extends Action
24
{
25
    use ManageTrait;
26
27
    /**
28
     * @inheritdoc
29
     * @param UserAssociation $record
30
     * @return bool
31
     */
32
    abstract protected function performAction(User $user, Organization $organization, int $sortOrder = null): bool;
33
34
    /**
35
     * HTTP not found response code
36
     *
37
     * @return int
38
     */
39
    protected function statusCodeNotFound(): int
40
    {
41
        return $this->statusCodeNotFound ?? 404;
0 ignored issues
show
The property statusCodeNotFound does not exist on object<flipbox\organizat...bstractUserAssociation>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
42
    }
43
44
    /**
45
     * @return string
46
     */
47
    protected function messageNotFound(): string
48
    {
49
        return $this->messageNotFound ?? 'Unable to find object.';
0 ignored issues
show
The property messageNotFound does not exist on object<flipbox\organizat...bstractUserAssociation>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
50
    }
51
52
    /**
53
     * @return null
54
     * @throws HttpException
55
     */
56
    protected function handleNotFoundResponse()
57
    {
58
        throw new HttpException(
59
            $this->statusCodeNotFound(),
60
            $this->messageNotFound()
61
        );
62
    }
63
64
    /**
65
     * @param string|int $identifier
66
     * @return User|null
67
     */
68
    protected function findUser($identifier)
69
    {
70
        if (is_numeric($identifier)) {
71
            return Craft::$app->getUsers()->getUserById($identifier);
72
        }
73
74
        return Craft::$app->getUsers()->getUserByUsernameOrEmail($identifier);
75
    }
76
77
    /**
78
     * @param string $user
79
     * @param string $organization
80
     * @param int|null $sortOrder
81
     * @return null|\yii\base\Model|\yii\web\Response
82
     * @throws HttpException
83
     */
84
    public function run(
85
        string $user,
86
        string $organization,
87
        int $sortOrder = null
88
    ) {
89
        if (null === ($user = $this->findUser($user))) {
90
            return $this->handleNotFoundResponse();
91
        }
92
93
        if (null === ($organization = Organization::findOne($organization))) {
94
            return $this->handleNotFoundResponse();
95
        }
96
97
        return $this->runInternal($user, $organization, $sortOrder);
98
    }
99
100
    /**
101
     * @param User $user
102
     * @param Organization $organization
103
     * @param int|null $sortOrder
104
     * @return mixed
105
     * @throws \yii\web\UnauthorizedHttpException
106
     */
107
    protected function runInternal(User $user, Organization $organization, int $sortOrder = null)
108
    {
109
        // Check access
110
        if (($access = $this->checkAccess($user, $organization, $sortOrder)) !== true) {
111
            return $access;
112
        }
113
114
        if (!$this->performAction($user, $organization, $sortOrder)) {
115
            return $this->handleFailResponse($user);
116
        }
117
118
        return $this->handleSuccessResponse($user);
119
    }
120
}
121