Issues (46)

src/models/Owner.php (1 issue)

Labels
Severity
1
<?php
2
3
namespace Itstructure\MFUploader\models;
4
5
use yii\db\ActiveQuery;
6
use yii\base\InvalidArgumentException;
0 ignored issues
show
The type yii\base\InvalidArgumentException was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
7
8
/**
9
 * This is the base class for owners.
10
 *
11
 * @property int $ownerId Owner id.
12
 * @property string $owner Owner name (post, article, page e.t.c.).
13
 * @property string $ownerAttribute Owner attribute (thumbnail, image e.t.c.).
14
 *
15
 * @package Itstructure\MFUploader\models
16
 *
17
 * @author Andrey Girnik <[email protected]>
18
 */
19
abstract class Owner extends \yii\db\ActiveRecord
20
{
21
    /**
22
     * {@inheritdoc}
23
     */
24
    public function rules()
25
    {
26
        return [
27
            [
28
                [
29
                    'ownerId',
30
                    'owner',
31
                    'ownerAttribute',
32
                ],
33
                'required',
34
            ],
35
            [
36
                'ownerId',
37
                'integer',
38
            ],
39
            [
40
                [
41
                    'owner',
42
                    'ownerAttribute',
43
                ],
44
                'string',
45
                'max' => 64,
46
            ],
47
        ];
48
    }
49
50
    /**
51
     * {@inheritdoc}
52
     */
53
    public function attributeLabels()
54
    {
55
        return [
56
            'ownerId' => 'Owner ID',
57
            'owner' => 'Owner',
58
            'ownerAttribute' => 'Owner Attribute',
59
        ];
60
    }
61
62
    /**
63
     * Get model (mediafile/album) primary key name.
64
     *
65
     * @return string
66
     */
67
    abstract protected static function getModelKeyName(): string;
68
69
    /**
70
     * Add owner to mediafiles table.
71
     *
72
     * @param int    $modelId
73
     * @param int    $ownerId
74
     * @param string $owner
75
     * @param string $ownerAttribute
76
     *
77
     * @return bool
78
     */
79
    public static function addOwner(int $modelId, int $ownerId, string $owner, string $ownerAttribute): bool
80
    {
81
        $ownerModel = new static();
82
        $ownerModel->{static::getModelKeyName()} = $modelId;
83
        $ownerModel->ownerId = $ownerId;
84
        $ownerModel->owner = $owner;
85
        $ownerModel->ownerAttribute = $ownerAttribute;
86
87
        return $ownerModel->save();
88
    }
89
90
    /**
91
     * Remove this mediafile/album owner.
92
     *
93
     * @param int $ownerId
94
     * @param string $owner
95
     * @param string|null $ownerAttribute
96
     *
97
     * @return bool
98
     */
99
    public static function removeOwner(int $ownerId, string $owner, string $ownerAttribute = null): bool
100
    {
101
        $deleted = static::deleteAll(static::buildFilterOptions($ownerId, $owner, $ownerAttribute));
102
103
        return $deleted > 0;
104
    }
105
106
    /**
107
     * Getting entity id's which are related with Other owners too.
108
     *
109
     * @param string $owner
110
     * @param int $ownerId
111
     * @param array $entityIds
112
     *
113
     * @return array|\yii\db\ActiveRecord[]
114
     */
115
    public static function filterMultipliedEntityIds(string $owner, int $ownerId, array $entityIds)
116
    {
117
        return static::find()
118
            ->select(static::getModelKeyName())
119
            ->where([static::getModelKeyName() => $entityIds])
120
            ->andWhere([
121
                'OR',
122
                ['!=', 'ownerId', $ownerId],
123
                ['!=', 'owner', $owner]
124
            ])
125
            ->all();
126
    }
127
128
    /**
129
     * Get Id's by owner.
130
     *
131
     * @param string $nameId
132
     * @param array $args It can be an array of the next params: owner{string}, ownerId{int}, ownerAttribute{string}.
133
     *
134
     * @throws InvalidArgumentException
135
     *
136
     * @return ActiveQuery
137
     */
138
    protected static function getEntityIdsQuery(string $nameId, array $args): ActiveQuery
139
    {
140
        $conditions = [];
141
142
        if (!empty($args['owner'])) {
143
            if (!is_string($args['owner'])) {
144
                throw new InvalidArgumentException('Parameter owner must be a string.');
145
            }
146
            $conditions['owner'] = $args['owner'];
147
148
            if (!empty($args['ownerId'])) {
149
                if (!is_numeric($args['ownerId'])) {
150
                    throw new InvalidArgumentException('Parameter ownerId must be numeric.');
151
                }
152
                $conditions['ownerId'] = $args['ownerId'];
153
            }
154
        }
155
156
        if (!empty($args['ownerAttribute'])) {
157
            if (!is_string($args['ownerAttribute'])) {
158
                throw new InvalidArgumentException('Parameter ownerAttribute must be a string.');
159
            }
160
            $conditions['ownerAttribute'] = $args['ownerAttribute'];
161
        }
162
163
        $query = static::find()
164
            ->select($nameId);
165
166
        if (count($conditions) > 0) {
167
            return $query->where($conditions);
168
        }
169
170
        return $query;
171
    }
172
173
    /**
174
     * Build filter options for some actions.
175
     *
176
     * @param int $ownerId
177
     * @param string $owner
178
     * @param string|null $ownerAttribute
179
     *
180
     * @return array
181
     */
182
    protected static function buildFilterOptions(int $ownerId, string $owner, string $ownerAttribute = null)
183
    {
184
        return array_merge([
185
            'ownerId' => $ownerId,
186
            'owner' => $owner
187
        ], empty($ownerAttribute) ? [] : ['ownerAttribute' => $ownerAttribute]);
188
    }
189
}
190