Test Failed
Push — master ( 3e7e73...11c99b )
by Philippe
06:28
created

AssetTrait::assets()   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 20
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 10
nc 4
nop 2
dl 0
loc 20
rs 9.6111
c 0
b 0
f 0
1
<?php
2
3
namespace Thinktomorrow\AssetLibrary;
4
5
use Illuminate\Database\Eloquent\Relations\MorphToMany;
6
use Illuminate\Support\Collection;
7
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
8
9
trait AssetTrait
10
{
11
    use HasMediaTrait;
12
13
    public static function bootAssetTrait()
14
    {
15
        static::deleted(function ($model) {
0 ignored issues
show
Bug introduced by
The method deleted() does not exist on Thinktomorrow\AssetLibrary\AssetTrait. Did you maybe mean deleteMedia()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

15
        static::/** @scrutinizer ignore-call */ 
16
                deleted(function ($model) {

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
16
            $model->assetRelation->each(function ($asset) use ($model) {
17
                $model->assetRelation()->updateExistingPivot($asset->id, ['unused'=> true]);
18
            });
19
        });
20
    }
21
22
    public function assetRelation(): MorphToMany
23
    {
24
        return $this->morphToMany(Asset::class, 'entity', 'asset_pivots')->withPivot('type', 'locale', 'order')->orderBy('order');
0 ignored issues
show
Bug introduced by
It seems like morphToMany() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

24
        return $this->/** @scrutinizer ignore-call */ morphToMany(Asset::class, 'entity', 'asset_pivots')->withPivot('type', 'locale', 'order')->orderBy('order');
Loading history...
25
    }
26
27
    public function asset(string $type, ?string $locale = null): ?Asset
28
    {
29
        return $this->assets($type, $locale)->first();
30
    }
31
32
    public function assets(?string $type = null, ?string $locale = null): Collection
33
    {
34
        $assets = $this->assetRelation;
35
36
        if ($type) {
37
            $assets = $assets->where('pivot.type', $type);
38
        }
39
40
        $locale = $locale ?? app()->getLocale();
0 ignored issues
show
introduced by
The method getLocale() does not exist on Illuminate\Container\Container. Are you sure you never get this type here, but always one of the subclasses? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

40
        $locale = $locale ?? app()->/** @scrutinizer ignore-call */ getLocale();
Loading history...
41
42
        $results = $assets->filter(function($asset) use($locale){
43
            return $asset->pivot->locale == $locale;
44
        });
45
46
        if($this->getUseAssetFallbackLocale() && $locale != $this->getAssetFallbackLocale() && $results->isEmpty()) {
47
            $results = $assets->filter(function($asset){
48
                return $asset->pivot->locale == $this->getAssetFallbackLocale();
49
            });
50
        }
51
        return $results->sortBy('pivot.order');
52
    }
53
54
    protected function getUseAssetFallbackLocale(): bool
55
    {
56
        return $this->useAssetFallbackLocale ?? config('thinktomorrow.assetlibrary.use_fallback_locale', false);
57
    }
58
59
    protected function getAssetFallbackLocale(): string
60
    {
61
        return $this->assetFallbackLocale ?? config('thinktomorrow.assetlibrary.fallback_locale');
62
    }
63
}
64