1 | <?php |
||||
2 | |||||
3 | namespace Uccello\Core\Helpers; |
||||
4 | |||||
5 | use Illuminate\Support\Collection; |
||||
6 | use Illuminate\Support\Facades\Auth; |
||||
7 | use Illuminate\Support\Facades\Cache; |
||||
8 | use Uccello\Core\Models\Domain; |
||||
9 | use Uccello\Core\Models\Module; |
||||
10 | use Uccello\Core\Models\Uitype; |
||||
11 | use Uccello\Core\Models\Displaytype; |
||||
12 | use Uccello\Core\Models\Capability; |
||||
13 | use Uccello\Core\Models\Entity; |
||||
14 | use Uccello\Core\Models\Filter; |
||||
15 | |||||
16 | class Uccello |
||||
17 | { |
||||
18 | /** |
||||
19 | * Returns true if multi domains are used, false else. |
||||
20 | * |
||||
21 | * @return void |
||||
22 | */ |
||||
23 | public function useMultiDomains() |
||||
24 | { |
||||
25 | return env('UCCELLO_MULTI_DOMAINS', true) !== false; |
||||
0 ignored issues
–
show
Bug
Best Practice
introduced
by
![]() |
|||||
26 | } |
||||
27 | |||||
28 | /** |
||||
29 | * Retrieve prefix and translate the given message. |
||||
30 | * If the translation does not exist try to find a default one. |
||||
31 | * If no translation exists display only the key. |
||||
32 | * |
||||
33 | * Priority: |
||||
34 | * 1 - Translation overrided in app |
||||
35 | * 2 - Translation in package |
||||
36 | * 3 - Default translation overrided in app |
||||
37 | * 4 - Default translation in uccello |
||||
38 | * 5 - No translation |
||||
39 | * |
||||
40 | * @param string $key |
||||
41 | * @param Module|null $module |
||||
42 | * @param array $replace |
||||
43 | * @param string $locale |
||||
44 | * @return \Illuminate\Contracts\Translation\Translator|string|array|null |
||||
45 | */ |
||||
46 | public function trans($key = null, ?Module $module = null, $replace = [ ], $locale = null) |
||||
47 | { |
||||
48 | $translator = app('translator'); |
||||
49 | |||||
50 | if (is_null($key)) { |
||||
51 | return $translator; |
||||
52 | } |
||||
53 | |||||
54 | // If $module is an instance of Module class, add a prefix before the key |
||||
55 | if (!is_null($module) && Module::class == get_class($module)) |
||||
56 | { |
||||
57 | // By default prefix is same as the module's name |
||||
58 | $prefix = $module->name.'.'; |
||||
0 ignored issues
–
show
|
|||||
59 | |||||
60 | // 1. Get translation in app |
||||
61 | $translation = $translator->trans($prefix.$key, $replace, $locale); |
||||
62 | |||||
63 | if ($translation !== $prefix.$key) { |
||||
64 | return $translation; |
||||
65 | } |
||||
66 | |||||
67 | // 2. Get translation in package |
||||
68 | if (!empty($module->package)) { |
||||
69 | // If a package name is defined add it before |
||||
70 | $prefix = $module->package.'::'.$prefix; |
||||
71 | |||||
72 | $translation = $translator->trans($prefix.$key, $replace, $locale); |
||||
73 | if ($translation !== $prefix.$key) { |
||||
74 | return $translation; |
||||
75 | } |
||||
76 | } |
||||
77 | |||||
78 | // 3. Try with default translation in app |
||||
79 | $appDefaultTranslation = $translator->trans('default.'.$key, $replace, $locale); |
||||
80 | if ($appDefaultTranslation !== 'default.'.$key) { // If default translation exists then use it |
||||
81 | return $appDefaultTranslation; |
||||
82 | } |
||||
83 | |||||
84 | // 4. Try with default translation in uccello |
||||
85 | $uccelloDefaultTranslation = $translator->trans('uccello::default.'.$key, $replace, $locale); |
||||
86 | if ($uccelloDefaultTranslation !== 'uccello::default.'.$key) { // If default translation exists then use it |
||||
87 | return $uccelloDefaultTranslation; |
||||
88 | } |
||||
89 | |||||
90 | // 5. If translation does not exist, display only the key |
||||
91 | return $key; |
||||
92 | } |
||||
93 | |||||
94 | // Default behaviour |
||||
95 | return $translator->trans($key, $replace, $locale); |
||||
96 | } |
||||
97 | |||||
98 | /** |
||||
99 | * Detects which view it must use and returns the evaluated view contents. |
||||
100 | * |
||||
101 | * Priority: |
||||
102 | * 1 - Module view overrided in app |
||||
103 | * 2 - Default view overrided in app |
||||
104 | * 3 - Module view ovverrided in package |
||||
105 | * 4 - Default view defined in package |
||||
106 | * 5 - Module view ovverrided in uccello |
||||
107 | * 6 - Default view defined in uccello |
||||
108 | * 7 - Fallback view if defined |
||||
109 | * |
||||
110 | * @param string $package |
||||
111 | * @param Module $module |
||||
112 | * @param string $viewName |
||||
113 | * @param string|null $fallbackView |
||||
114 | * @return string|null |
||||
115 | */ |
||||
116 | public function view(string $package, Module $module, string $viewName, ?string $fallbackView = null): ?string |
||||
117 | { |
||||
118 | // Module view overrided in app |
||||
119 | $appModuleView = 'uccello.modules.'.$module->name.'.'.$viewName; |
||||
0 ignored issues
–
show
|
|||||
120 | |||||
121 | // Default view overrided in app |
||||
122 | $appDefaultView = 'uccello.modules.default.'.$viewName; |
||||
123 | |||||
124 | // Module view ovverrided in package |
||||
125 | $packageModuleView = $package.'::modules.'.$module->name.'.'.$viewName; |
||||
126 | |||||
127 | // Default view defined in package |
||||
128 | $packageDefaultView = $package.'::modules.default.'.$viewName; |
||||
129 | |||||
130 | // Module view ovverrided in uccello |
||||
131 | $uccelloModuleView = 'uccello::modules.'.$module->name.'.'.$viewName; |
||||
132 | |||||
133 | // Default view defined in uccello |
||||
134 | $uccelloDefaultView = 'uccello::modules.default.'.$viewName; |
||||
135 | |||||
136 | $viewToInclude = null; |
||||
137 | if (view()->exists($appModuleView)) { |
||||
138 | $viewToInclude = $appModuleView; |
||||
139 | } elseif (view()->exists($appDefaultView)) { |
||||
140 | $viewToInclude = $appDefaultView; |
||||
141 | } elseif (view()->exists($packageModuleView)) { |
||||
142 | $viewToInclude = $packageModuleView; |
||||
143 | } elseif (view()->exists($packageDefaultView)) { |
||||
144 | $viewToInclude = $packageDefaultView; |
||||
145 | } elseif (view()->exists($uccelloModuleView)) { |
||||
146 | $viewToInclude = $uccelloModuleView; |
||||
147 | } elseif (view()->exists($uccelloDefaultView)) { |
||||
148 | $viewToInclude = $uccelloDefaultView; |
||||
149 | } elseif (!is_null($fallbackView)) { |
||||
150 | $viewToInclude = $fallbackView; |
||||
151 | } |
||||
152 | |||||
153 | return $viewToInclude; |
||||
154 | } |
||||
155 | |||||
156 | /** |
||||
157 | * Makes route automaticaly and add module parameter. |
||||
158 | * |
||||
159 | * @param array|string $name |
||||
160 | * @param Domain|string|null $domain |
||||
161 | * @param Module|string|null $module |
||||
162 | * @param mixed $parameters |
||||
163 | * @param boolean $absolute |
||||
164 | * @return string |
||||
165 | */ |
||||
166 | public function route($name, $domain = null, $module = null, $parameters = [ ], $absolute = true) : string |
||||
167 | { |
||||
168 | if (is_a($domain, Domain::class)) { |
||||
169 | $domain = $domain->slug; |
||||
170 | } else { |
||||
171 | $domain = $this->getDomain($domain)->slug ?? null; |
||||
172 | } |
||||
173 | |||||
174 | if (is_a($module, Module::class)) { |
||||
175 | $module = $module->name; |
||||
0 ignored issues
–
show
|
|||||
176 | } else { |
||||
177 | $module = $this->getModule($module)->name ?? null; |
||||
178 | } |
||||
179 | |||||
180 | // Get route uri to check if domain and module parameters are needed |
||||
181 | $routeUri = \Route::getRoutes()->getByName($name)->uri ?? null; |
||||
0 ignored issues
–
show
It seems like
$name can also be of type array ; however, parameter $name of Illuminate\Routing\RouteCollection::getByName() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
182 | |||||
183 | // Add domain to route if we use multi domains and if the parameter is needed |
||||
184 | if (!is_null($domain) && uccello()->useMultiDomains() && preg_match('`{domain}`', $routeUri)) { |
||||
0 ignored issues
–
show
Are you sure the usage of
uccello() is correct as it seems to always return null .
This check looks for function or method calls that always return null and whose return value is used. class A
{
function getObject()
{
return null;
}
}
$a = new A();
if ($a->getObject()) {
The method The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes. ![]() |
|||||
185 | $parameters[ 'domain' ] = $domain; |
||||
186 | } |
||||
187 | |||||
188 | // Add module to route if the parameter is needed |
||||
189 | if (!is_null($module) && preg_match('`{module}`', $routeUri)) { |
||||
190 | $parameters[ 'module' ] = $module; |
||||
191 | } |
||||
192 | |||||
193 | return route($name, $parameters, $absolute); |
||||
194 | } |
||||
195 | |||||
196 | /** |
||||
197 | * Returns the list of capabilities. |
||||
198 | * |
||||
199 | * @return \Illuminate\Database\Eloquent\Collection |
||||
200 | * |
||||
201 | * @see Uccello\Core\Models\Permission |
||||
202 | */ |
||||
203 | public function getCapabilities(): Collection |
||||
204 | { |
||||
205 | return Capability::all(); |
||||
206 | } |
||||
207 | |||||
208 | /** |
||||
209 | * Get a domain instance by slug or id |
||||
210 | * |
||||
211 | * @param string|int $slugOrId |
||||
212 | * @return Domain|null |
||||
213 | */ |
||||
214 | public function getDomain($slugOrId): ?Domain |
||||
215 | { |
||||
216 | if (is_numeric($slugOrId)) { |
||||
217 | return Domain::find($slugOrId); |
||||
218 | } else { |
||||
219 | return Domain::where('slug', (string)$slugOrId)->first(); |
||||
220 | } |
||||
221 | } |
||||
222 | |||||
223 | /** |
||||
224 | * Get a module instance by name or id |
||||
225 | * |
||||
226 | * @param string|int $nameOrId |
||||
227 | * @return Module|null |
||||
228 | */ |
||||
229 | public function getModule($nameOrId): ?Module |
||||
230 | { |
||||
231 | if (!$nameOrId) { |
||||
232 | return null; |
||||
233 | } |
||||
234 | |||||
235 | if (is_numeric($nameOrId)) { |
||||
236 | // Use cache |
||||
237 | $modules = Cache::rememberForever('modules_by_id', function () { |
||||
238 | $modulesGroupedById = collect(); |
||||
239 | Module::all()->map(function($item) use($modulesGroupedById) { |
||||
240 | $modulesGroupedById[$item->id] = $item; |
||||
241 | return $modulesGroupedById; |
||||
242 | }); |
||||
243 | return $modulesGroupedById; |
||||
244 | }); |
||||
245 | return $modules[(string) $nameOrId] ?? null; |
||||
246 | } else { |
||||
247 | // Use cache |
||||
248 | $modules = Cache::rememberForever('modules_by_name', function () { |
||||
249 | $modulesGroupedByName = collect(); |
||||
250 | Module::all()->map(function($item) use($modulesGroupedByName) { |
||||
251 | $modulesGroupedByName[$item->name] = $item; |
||||
252 | return $modulesGroupedByName; |
||||
253 | }); |
||||
254 | return $modulesGroupedByName; |
||||
255 | }); |
||||
256 | return $modules[(string) $nameOrId] ?? null; |
||||
257 | } |
||||
258 | } |
||||
259 | |||||
260 | /** |
||||
261 | * Get an Uitype instance by name or id |
||||
262 | * |
||||
263 | * @param string|int $nameOrId |
||||
264 | * @return Uitype|null |
||||
265 | */ |
||||
266 | public function getUitype($nameOrId): ?Uitype |
||||
267 | { |
||||
268 | if (!$nameOrId) { |
||||
269 | return null; |
||||
270 | } |
||||
271 | |||||
272 | if (is_numeric($nameOrId)) { |
||||
273 | // Use cache |
||||
274 | $uitypes = Cache::rememberForever('uitypes_by_id', function () { |
||||
275 | $uitypesGroupedById = collect(); |
||||
276 | Uitype::all()->map(function($item) use($uitypesGroupedById) { |
||||
277 | $uitypesGroupedById[$item->id] = $item; |
||||
278 | return $uitypesGroupedById; |
||||
279 | }); |
||||
280 | return $uitypesGroupedById; |
||||
281 | }); |
||||
282 | return $uitypes[(string) $nameOrId] ?? null; |
||||
283 | } else { |
||||
284 | // Use cache |
||||
285 | $uitypes = Cache::rememberForever('uitypes_by_name', function () { |
||||
286 | $uitypesGroupedByName = collect(); |
||||
287 | Uitype::all()->map(function($item) use($uitypesGroupedByName) { |
||||
288 | $uitypesGroupedByName[$item->name] = $item; |
||||
289 | return $uitypesGroupedByName; |
||||
290 | }); |
||||
291 | return $uitypesGroupedByName; |
||||
292 | }); |
||||
293 | return $uitypes[(string) $nameOrId] ?? null; |
||||
294 | } |
||||
295 | } |
||||
296 | |||||
297 | /** |
||||
298 | * Get a display type instance by name or id |
||||
299 | * |
||||
300 | * @param string|int $nameOrId |
||||
301 | * @return Uitype|null |
||||
302 | */ |
||||
303 | public function getDisplaytype($nameOrId): ?Displaytype |
||||
304 | { |
||||
305 | if (!$nameOrId) { |
||||
306 | return null; |
||||
307 | } |
||||
308 | |||||
309 | if (is_numeric($nameOrId)) { |
||||
310 | // Use cache |
||||
311 | $displaytypes = Cache::rememberForever('displaytypes_by_id', function () { |
||||
312 | $displaytypesGroupedById = collect(); |
||||
313 | Displaytype::all()->map(function($item) use($displaytypesGroupedById) { |
||||
314 | $displaytypesGroupedById[$item->id] = $item; |
||||
315 | return $displaytypesGroupedById; |
||||
316 | }); |
||||
317 | return $displaytypesGroupedById; |
||||
318 | }); |
||||
319 | return $displaytypes[(string) $nameOrId] ?? null; |
||||
320 | } else { |
||||
321 | // Use cache |
||||
322 | $displaytypes = Cache::rememberForever('displaytypes_by_name', function () { |
||||
323 | $displaytypesGroupedByName = collect(); |
||||
324 | Displaytype::all()->map(function($item) use($displaytypesGroupedByName) { |
||||
325 | $displaytypesGroupedByName[$item->name] = $item; |
||||
326 | return $displaytypesGroupedByName; |
||||
327 | }); |
||||
328 | return $displaytypesGroupedByName; |
||||
329 | }); |
||||
330 | return $displaytypes[(string) $nameOrId] ?? null; |
||||
331 | } |
||||
332 | } |
||||
333 | |||||
334 | /** |
||||
335 | * Get a capability instance by name or id |
||||
336 | * |
||||
337 | * @param string|int $nameOrId |
||||
338 | * @return Uitype|null |
||||
339 | */ |
||||
340 | public function getCapability($nameOrId): ?Capability |
||||
341 | { |
||||
342 | if (!$nameOrId) { |
||||
343 | return null; |
||||
344 | } |
||||
345 | |||||
346 | if (is_numeric($nameOrId)) { |
||||
347 | // Use cache |
||||
348 | $capabilities = Cache::rememberForever('capabilities_by_id', function () { |
||||
349 | $capabilitiesGroupedById = collect(); |
||||
350 | Capability::all()->map(function($item) use($capabilitiesGroupedById) { |
||||
351 | $capabilitiesGroupedById[$item->id] = $item; |
||||
352 | return $capabilitiesGroupedById; |
||||
353 | }); |
||||
354 | return $capabilitiesGroupedById; |
||||
355 | }); |
||||
356 | return $capabilities[(string) $nameOrId] ?? null; |
||||
357 | } else { |
||||
358 | // Use cache |
||||
359 | $capabilities = Cache::rememberForever('capabilities_by_name', function () { |
||||
360 | $capabilitiesGroupedByName = collect(); |
||||
361 | Capability::all()->map(function($item) use($capabilitiesGroupedByName) { |
||||
362 | $capabilitiesGroupedByName[$item->name] = $item; |
||||
363 | return $capabilitiesGroupedByName; |
||||
364 | }); |
||||
365 | return $capabilitiesGroupedByName; |
||||
366 | }); |
||||
367 | return $capabilities[(string) $nameOrId] ?? null; |
||||
368 | } |
||||
369 | } |
||||
370 | |||||
371 | /** |
||||
372 | * Returns all domains without parents |
||||
373 | * |
||||
374 | * @return Collection |
||||
375 | */ |
||||
376 | public function getRootDomains(): Collection |
||||
377 | { |
||||
378 | return Domain::getRoots()->get(); |
||||
379 | } |
||||
380 | |||||
381 | /** |
||||
382 | * Get last domain visited by the connected user, or the first one available |
||||
383 | * Priority: |
||||
384 | * 1. Last domain visited |
||||
385 | * 2. Domain where the user was created into |
||||
386 | * 3. First root domain |
||||
387 | * |
||||
388 | * @return Domain|null |
||||
389 | */ |
||||
390 | public function getLastOrDefaultDomain(): ?Domain |
||||
391 | { |
||||
392 | $domain = Auth::user()->lastDomain ?? Auth::user()->domain ?? null; // On login page user is not authenticated |
||||
0 ignored issues
–
show
|
|||||
393 | |||||
394 | if (!$domain) { |
||||
395 | $domain = $this->getRootDomains()[ 0 ]; |
||||
396 | } |
||||
397 | |||||
398 | return $domain; |
||||
399 | } |
||||
400 | |||||
401 | /** |
||||
402 | * Retrieve columns to display in a datatable table |
||||
403 | * |
||||
404 | * @param Module $module |
||||
405 | * @param integer $filterId |
||||
406 | * @param string $type |
||||
407 | * @return array |
||||
408 | */ |
||||
409 | public function getDatatableColumns(Module $module, $filterId=null, $type='list'): array |
||||
410 | { |
||||
411 | $columns = [ ]; |
||||
412 | |||||
413 | // Get default filter |
||||
414 | if ($filterId) { |
||||
0 ignored issues
–
show
The expression
$filterId of type integer|null is loosely compared to true ; this is ambiguous if the integer can be 0. You might want to explicitly use !== null instead.
In PHP, under loose comparison (like For 0 == false // true
0 == null // true
123 == false // false
123 == null // false
// It is often better to use strict comparison
0 === false // false
0 === null // false
![]() |
|||||
415 | $filter = Filter::find($filterId); |
||||
416 | } else { |
||||
417 | $filter = Filter::where('module_id', $module->id) |
||||
418 | ->where('type', $type) |
||||
419 | ->first(); |
||||
420 | |||||
421 | // If there is not result, try with type = list |
||||
422 | if (empty($filter) && $type !== 'list') { |
||||
423 | $filter = Filter::where('module_id', $module->id) |
||||
424 | ->where('type', 'list') |
||||
425 | ->first(); |
||||
426 | } |
||||
427 | } |
||||
428 | |||||
429 | if (empty($filter)) { |
||||
430 | return [ ]; |
||||
431 | } |
||||
432 | |||||
433 | $fieldsAdded = [ ]; |
||||
434 | |||||
435 | $seeDescendants = request()->hasSession() && request()->session()->get('descendants') ? true : false; |
||||
436 | |||||
437 | // Get filter fields |
||||
438 | foreach ($filter->columns as $fieldName) { |
||||
0 ignored issues
–
show
|
|||||
439 | $field = $module->fields->where('name', $fieldName)->first(); |
||||
440 | |||||
441 | // If the field does not exist or is not listable, continue |
||||
442 | if (!$field || !$field->isListable() || in_array($fieldName, $fieldsAdded)) { |
||||
443 | continue; |
||||
444 | } |
||||
445 | |||||
446 | $uitype = uitype($field->uitype_id); |
||||
447 | |||||
448 | // Add the field as a new column |
||||
449 | $columns[ ] = [ |
||||
450 | 'name' => $field->name, |
||||
451 | 'db_column' => $field->column, |
||||
452 | 'uitype' => $uitype->name, |
||||
453 | 'package' => $uitype->package, |
||||
454 | 'data' => $field->data, |
||||
455 | 'visible' => true |
||||
456 | ]; |
||||
457 | |||||
458 | $fieldsAdded[ ] = $fieldName; |
||||
459 | } |
||||
460 | |||||
461 | // Get all other fields |
||||
462 | $otherFields = $module->fields->whereNotIn('name', $fieldsAdded); |
||||
463 | |||||
464 | foreach ($otherFields as $field) { |
||||
465 | // If the field is not listable, continue |
||||
466 | if (!$field->isListable()) { |
||||
467 | continue; |
||||
468 | } |
||||
469 | |||||
470 | $uitype = uitype($field->uitype_id); |
||||
471 | |||||
472 | // Add the field as a new column |
||||
473 | $columns[ ] = [ |
||||
474 | 'name' => $field->name, |
||||
475 | 'db_column' => $field->column, |
||||
476 | 'uitype' => $uitype->name, |
||||
477 | 'package' => $uitype->package, |
||||
478 | 'data' => $field->data, |
||||
479 | 'visible' => $field->name === 'domain' && $seeDescendants ? true : false |
||||
480 | ]; |
||||
481 | } |
||||
482 | |||||
483 | return $columns; |
||||
484 | } |
||||
485 | |||||
486 | /** |
||||
487 | * Returns the module's default filter according to the type. |
||||
488 | * |
||||
489 | * @param Module $module |
||||
490 | * @param string $type |
||||
491 | * @return Filter |
||||
492 | */ |
||||
493 | public function getDefaultFilter(Module $module, $type="list") |
||||
494 | { |
||||
495 | $filter = Filter::where('module_id', $module->id) |
||||
496 | ->where('type', $type) |
||||
497 | ->first(); |
||||
498 | |||||
499 | // If there is not result, try with type = list |
||||
500 | if (empty($filter) && $type !== 'list') { |
||||
501 | $filter = Filter::where('module_id', $module->id) |
||||
502 | ->where('type', 'list') |
||||
503 | ->first(); |
||||
504 | } |
||||
505 | |||||
506 | return $filter; |
||||
507 | } |
||||
508 | |||||
509 | /** |
||||
510 | * Returns a record attribute value. |
||||
511 | * It is able to follow a complex path according to models definition (e.g. 'domain.parent.name') |
||||
512 | * |
||||
513 | * @param Object $record |
||||
514 | * @param string $attribute |
||||
515 | * @return string|Object|Array|null |
||||
516 | */ |
||||
517 | public function getRecordAttribute($record, string $attribute) { |
||||
518 | |||||
519 | $attributeParts = explode('.', $attribute); |
||||
520 | |||||
521 | if (count($attributeParts) > 0) { |
||||
522 | $value = $record; |
||||
523 | |||||
524 | foreach ($attributeParts as $part) { |
||||
525 | // Get attribute value if exists |
||||
526 | if (isset($value->{$part})) { |
||||
527 | $value = $value->{$part}; |
||||
528 | } |
||||
529 | // If property does not exist return an empty value |
||||
530 | else { |
||||
531 | $value = null; |
||||
532 | break; |
||||
533 | } |
||||
534 | } |
||||
535 | } else { |
||||
536 | $value = $record->{$attribute}; |
||||
537 | } |
||||
538 | |||||
539 | return $value; |
||||
540 | } |
||||
541 | |||||
542 | /** |
||||
543 | * Retrieves a record by its id or uuid |
||||
544 | * |
||||
545 | * @param int|string $idOrUuid |
||||
546 | * @param string|null $className |
||||
547 | * @return mixed |
||||
548 | */ |
||||
549 | public function getRecordByIdOrUuid($idOrUuid, $className = null) |
||||
550 | { |
||||
551 | $record = null; |
||||
552 | |||||
553 | if (is_numeric($idOrUuid) && !empty($className)) { |
||||
554 | $record = $className::find($idOrUuid); |
||||
555 | } else { |
||||
556 | $record = $this->getRecordByUuid($idOrUuid); |
||||
557 | } |
||||
558 | |||||
559 | return $record; |
||||
560 | } |
||||
561 | |||||
562 | /** |
||||
563 | * Retrieves a record by its uuid |
||||
564 | * |
||||
565 | * @param string $uuid |
||||
566 | * @return mixed |
||||
567 | */ |
||||
568 | public function getRecordByUuid($uuid) |
||||
569 | { |
||||
570 | $record = null; |
||||
571 | |||||
572 | if (!empty($uuid)) { |
||||
573 | $entity = Entity::find($uuid); |
||||
574 | if ($entity) { |
||||
575 | $record = $entity->record; |
||||
576 | } |
||||
577 | } |
||||
578 | |||||
579 | return $record; |
||||
580 | } |
||||
581 | |||||
582 | /** |
||||
583 | * Checks if the module is related to a Model. |
||||
584 | * |
||||
585 | * @return boolean |
||||
586 | */ |
||||
587 | public function isCrudModule(Module $module) |
||||
588 | { |
||||
589 | return !empty($module->model_class) && class_exists($module->model_class); |
||||
0 ignored issues
–
show
|
|||||
590 | } |
||||
591 | |||||
592 | /** |
||||
593 | * Checks if the module extends \Gzero\EloquentTree\Model\Tree. |
||||
594 | * |
||||
595 | * @return boolean |
||||
596 | */ |
||||
597 | public function isTreeModule(Module $module) |
||||
598 | { |
||||
599 | $modelClass = $module->model_class; |
||||
0 ignored issues
–
show
|
|||||
600 | |||||
601 | return is_subclass_of((new $modelClass), \Gzero\EloquentTree\Model\Tree::class); |
||||
0 ignored issues
–
show
The type
Gzero\EloquentTree\Model\Tree 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. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||||
602 | } |
||||
603 | } |