This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | declare(strict_types=1); |
||
4 | |||
5 | namespace Rinvex\Attributes\Models; |
||
6 | |||
7 | use Illuminate\Support\Str; |
||
8 | use Spatie\Sluggable\SlugOptions; |
||
9 | use Rinvex\Support\Traits\HasSlug; |
||
10 | use Spatie\EloquentSortable\Sortable; |
||
11 | use Illuminate\Database\Eloquent\Model; |
||
12 | use Rinvex\Cacheable\CacheableEloquent; |
||
13 | use Rinvex\Support\Traits\HasTranslations; |
||
14 | use Rinvex\Support\Traits\ValidatingTrait; |
||
15 | use Spatie\EloquentSortable\SortableTrait; |
||
16 | use Illuminate\Database\Eloquent\Relations\HasMany; |
||
17 | |||
18 | /** |
||
19 | * Rinvex\Attributes\Models\Attribute. |
||
20 | * |
||
21 | * @property int $id |
||
22 | * @property string $slug |
||
23 | * @property array $name |
||
24 | * @property array $description |
||
25 | * @property int $sort_order |
||
26 | * @property string $group |
||
27 | * @property string $type |
||
28 | * @property bool $is_required |
||
29 | * @property bool $is_collection |
||
30 | * @property string $default |
||
31 | * @property \Carbon\Carbon|null $created_at |
||
32 | * @property \Carbon\Carbon|null $updated_at |
||
33 | * @property array $entities |
||
34 | * @property-read \Rinvex\Attributes\Support\ValueCollection|\Rinvex\Attributes\Models\Value[] $values |
||
35 | * |
||
36 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute ordered($direction = 'asc') |
||
37 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereCreatedAt($value) |
||
38 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereDefault($value) |
||
39 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereDescription($value) |
||
40 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereGroup($value) |
||
41 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereId($value) |
||
42 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereIsCollection($value) |
||
43 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereIsRequired($value) |
||
44 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereSlug($value) |
||
45 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereSortOrder($value) |
||
46 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereName($value) |
||
47 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereType($value) |
||
48 | * @method static \Illuminate\Database\Eloquent\Builder|\Rinvex\Attributes\Models\Attribute whereUpdatedAt($value) |
||
49 | * @mixin \Eloquent |
||
50 | */ |
||
51 | class Attribute extends Model implements Sortable |
||
52 | { |
||
53 | use HasSlug; |
||
54 | use SortableTrait; |
||
55 | use HasTranslations; |
||
56 | use ValidatingTrait; |
||
57 | use CacheableEloquent; |
||
58 | |||
59 | /** |
||
60 | * {@inheritdoc} |
||
61 | */ |
||
62 | protected $fillable = [ |
||
63 | 'name', |
||
64 | 'slug', |
||
65 | 'description', |
||
66 | 'sort_order', |
||
67 | 'group', |
||
68 | 'type', |
||
69 | 'is_required', |
||
70 | 'is_collection', |
||
71 | 'default', |
||
72 | 'entities', |
||
73 | ]; |
||
74 | |||
75 | /** |
||
76 | * {@inheritdoc} |
||
77 | */ |
||
78 | protected $casts = [ |
||
79 | 'slug' => 'string', |
||
80 | 'sort_order' => 'integer', |
||
81 | 'group' => 'string', |
||
82 | 'type' => 'string', |
||
83 | 'is_required' => 'boolean', |
||
84 | 'is_collection' => 'boolean', |
||
85 | 'default' => 'string', |
||
86 | ]; |
||
87 | |||
88 | /** |
||
89 | * {@inheritdoc} |
||
90 | */ |
||
91 | protected $observables = [ |
||
92 | 'validating', |
||
93 | 'validated', |
||
94 | ]; |
||
95 | |||
96 | /** |
||
97 | * {@inheritdoc} |
||
98 | */ |
||
99 | public $translatable = [ |
||
100 | 'name', |
||
101 | 'description', |
||
102 | ]; |
||
103 | |||
104 | /** |
||
105 | * {@inheritdoc} |
||
106 | */ |
||
107 | public $sortable = [ |
||
108 | 'order_column_name' => 'sort_order', |
||
109 | ]; |
||
110 | |||
111 | /** |
||
112 | * The default rules that the model will validate against. |
||
113 | * |
||
114 | * @var array |
||
115 | */ |
||
116 | protected $rules = []; |
||
117 | |||
118 | /** |
||
119 | * Whether the model should throw a |
||
120 | * ValidationException if it fails validation. |
||
121 | * |
||
122 | * @var bool |
||
123 | */ |
||
124 | protected $throwValidationExceptions = true; |
||
125 | |||
126 | /** |
||
127 | * An array to map class names to their type names in database. |
||
128 | * |
||
129 | * @var array |
||
130 | */ |
||
131 | protected static $typeMap = []; |
||
132 | |||
133 | /** |
||
134 | * Create a new Eloquent model instance. |
||
135 | * |
||
136 | * @param array $attributes |
||
137 | */ |
||
138 | public function __construct(array $attributes = []) |
||
139 | { |
||
140 | parent::__construct($attributes); |
||
141 | |||
142 | $this->setTable(config('rinvex.attributes.tables.attributes')); |
||
143 | $this->setRules([ |
||
144 | 'name' => 'required|string|strip_tags|max:150', |
||
145 | 'description' => 'nullable|string|max:10000', |
||
146 | 'slug' => 'required|alpha_dash|max:150|unique:'.config('rinvex.attributes.tables.attributes').',slug', |
||
147 | 'sort_order' => 'nullable|integer|max:10000', |
||
148 | 'group' => 'nullable|string|strip_tags|max:150', |
||
149 | 'type' => 'required|string|strip_tags|max:150', |
||
150 | 'is_required' => 'sometimes|boolean', |
||
151 | 'is_collection' => 'sometimes|boolean', |
||
152 | 'default' => 'nullable|string|strip_tags|max:10000', |
||
153 | ]); |
||
154 | } |
||
155 | |||
156 | /** |
||
157 | * Enforce clean slugs. |
||
158 | * |
||
159 | * @param string $value |
||
160 | * |
||
161 | * @return void |
||
162 | */ |
||
163 | public function setSlugAttribute($value): void |
||
164 | { |
||
165 | $this->attributes['slug'] = Str::slug($value, $this->getSlugOptions()->slugSeparator, $this->getSlugOptions()->slugLanguage); |
||
166 | } |
||
167 | |||
168 | /** |
||
169 | * Set or get the type map for attribute types. |
||
170 | * |
||
171 | * @param array|null $map |
||
172 | * @param bool $merge |
||
173 | * |
||
174 | * @return array |
||
175 | */ |
||
176 | public static function typeMap(array $map = null, $merge = true) |
||
177 | { |
||
178 | if (is_array($map)) { |
||
179 | static::$typeMap = $merge && static::$typeMap |
||
0 ignored issues
–
show
|
|||
180 | ? $map + static::$typeMap : $map; |
||
181 | } |
||
182 | |||
183 | return static::$typeMap; |
||
184 | } |
||
185 | |||
186 | /** |
||
187 | * Get the model associated with a custom attribute type. |
||
188 | * |
||
189 | * @param string $alias |
||
190 | * |
||
191 | * @return string|null |
||
192 | */ |
||
193 | public static function getTypeModel($alias) |
||
194 | { |
||
195 | return self::$typeMap[$alias] ?? null; |
||
196 | } |
||
197 | |||
198 | /** |
||
199 | * Enforce clean groups. |
||
200 | * |
||
201 | * @param string $value |
||
202 | * |
||
203 | * @return void |
||
204 | */ |
||
205 | public function setGroupAttribute($value): void |
||
206 | { |
||
207 | $this->attributes['group'] = Str::slug($value); |
||
208 | } |
||
209 | |||
210 | /** |
||
211 | * Access entities relation and retrieve entity types as an array, |
||
212 | * Accessors/Mutators preceeds relation value when called dynamically. |
||
213 | * |
||
214 | * @return array |
||
215 | */ |
||
216 | public function getEntitiesAttribute(): array |
||
217 | { |
||
218 | return $this->entities()->pluck('entity_type')->toArray(); |
||
219 | } |
||
220 | |||
221 | /** |
||
222 | * Set the attribute attached entities. |
||
223 | * |
||
224 | * @param \Illuminate\Support\Collection|array $value |
||
0 ignored issues
–
show
There is no parameter named
$value . Was it maybe removed?
This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. Consider the following example. The parameter /**
* @param array $germany
* @param array $island
* @param array $italy
*/
function finale($germany, $island) {
return "2:1";
}
The most likely cause is that the parameter was removed, but the annotation was not. ![]() |
|||
225 | * @param mixed $entities |
||
226 | * |
||
227 | * @return void |
||
228 | */ |
||
229 | public function setEntitiesAttribute($entities): void |
||
230 | { |
||
231 | static::saved(function ($model) use ($entities) { |
||
0 ignored issues
–
show
|
|||
232 | $this->entities()->delete(); |
||
233 | ! $entities || $this->entities()->createMany(array_map(function ($entity) { |
||
0 ignored issues
–
show
array_map(function ($ent...$entity); }, $entities) is of type array , but the function expects a object<Illuminate\Databa...ent\Relations\iterable> .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
![]() |
|||
234 | return ['entity_type' => $entity]; |
||
235 | }, $entities)); |
||
236 | }); |
||
237 | } |
||
238 | |||
239 | /** |
||
240 | * Get the options for generating the slug. |
||
241 | * |
||
242 | * @return \Spatie\Sluggable\SlugOptions |
||
243 | */ |
||
244 | public function getSlugOptions(): SlugOptions |
||
245 | { |
||
246 | return SlugOptions::create() |
||
247 | ->usingSeparator('_') |
||
248 | ->doNotGenerateSlugsOnUpdate() |
||
249 | ->generateSlugsFrom('name') |
||
250 | ->saveSlugsTo('slug'); |
||
251 | } |
||
252 | |||
253 | /** |
||
254 | * Get the entities attached to this attribute. |
||
255 | * |
||
256 | * @return \Illuminate\Database\Eloquent\Relations\HasMany |
||
257 | */ |
||
258 | public function entities(): HasMany |
||
259 | { |
||
260 | return $this->hasMany(config('rinvex.attributes.models.attribute_entity'), 'attribute_id', 'id'); |
||
261 | } |
||
262 | |||
263 | /** |
||
264 | * Get the entities attached to this attribute. |
||
265 | * |
||
266 | * @param string $value |
||
267 | * |
||
268 | * @return \Illuminate\Database\Eloquent\Relations\HasMany |
||
269 | */ |
||
270 | public function values(string $value): HasMany |
||
271 | { |
||
272 | return $this->hasMany($value, 'attribute_id', 'id'); |
||
273 | } |
||
274 | } |
||
275 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.