SEOInfo   A
last analyzed

Complexity

Total Complexity 20

Size/Duplication

Total Lines 103
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 40
c 1
b 0
f 0
dl 0
loc 103
ccs 38
cts 38
cp 1
rs 10
wmc 20

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getTable() 0 3 1
A thinkImagesMap() 0 4 1
A seoptimisable() 0 3 1
F seoPrepare() 0 45 16
A seoImage() 0 3 1
1
<?php
2
3
namespace NovaSeoEntity\Models;
4
5
use Artesaos\SEOTools\Facades\SEOMeta;
6
use Artesaos\SEOTools\Facades\SEOTools;
7
use Illuminate\Database\Eloquent\Model;
8
use NovaSeoEntity\Contracts\WithSeoEntity;
9
use SimpleImageManager\Eloquent\HasThinkImage;
10
use SimpleImageManager\Eloquent\ThinkImage;
11
12
class SEOInfo extends Model
13
{
14
    use HasThinkImage;
15
16
    public static string $thinkSeoImgDriver = 'seo_image';
17
18
    /**
19
     * @inheritdoc
20
     */
21
    protected $guarded = [];
22
23
    /**
24
     * @inheritdoc
25
     */
26
    protected $casts = [
27
        'meta'          => 'json',
28
        'open_graph'    => 'json',
29
        'twitter_card'  => 'json',
30
        'json_ld'       => 'json',
31
        'json_ld_multi' => 'json',
32
    ];
33
34
    /**
35
     * @inheritDoc
36
     */
37 9
    public function getTable(): string
38
    {
39 9
        return config('nova-seo-entity.table', parent::getTable());
40
    }
41
42
    /**
43
     * Get model used token
44
     *
45
     * @return \Illuminate\Database\Eloquent\Relations\MorphTo
46
     */
47 5
    public function seoptimisable(): \Illuminate\Database\Eloquent\Relations\MorphTo
48
    {
49 5
        return $this->morphTo('seoptimisable');
50
    }
51
52
    /** @inerhitDoc */
53 4
    public function thinkImagesMap(): array
54
    {
55 4
        return [
56 4
            'image' => ( new ThinkImage(static::$thinkSeoImgDriver, $this->image) ),
0 ignored issues
show
Bug introduced by
The property image does not seem to exist on NovaSeoEntity\Models\SEOInfo. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
57 4
        ];
58
    }
59
60 4
    public function seoImage(): ThinkImage
61
    {
62 4
        return $this->thinkImage('image');
63
    }
64
65
    /**
66
     * Prepare seo data for view.
67
     *
68
     * @return static
69
     */
70 1
    public function seoPrepare(): static
71
    {
72
        /** @var $model WithSeoEntity|null */
73 1
        $model = ($this->seoptimisable instanceof WithSeoEntity) ? $this->seoptimisable : null;
0 ignored issues
show
Bug introduced by
The property seoptimisable does not seem to exist on NovaSeoEntity\Models\SEOInfo. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
74
75 1
        if ($value = $model?->getSEOFieldValue('robots', $this->robots) ?? $this->robots) {
0 ignored issues
show
Bug introduced by
The property robots does not seem to exist on NovaSeoEntity\Models\SEOInfo. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
76 1
            SEOMeta::setRobots($value);
77
        }
78
79 1
        if ($value = $model?->getSEOFieldValue('title', $this->title) ?? $this->title) {
0 ignored issues
show
Bug introduced by
The property title does not seem to exist on NovaSeoEntity\Models\SEOInfo. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
80 1
            SEOTools::setTitle($value);
81
        }
82
83 1
        if ($value = $model?->getSEOFieldValue('description', $this->description) ?? $this->description) {
0 ignored issues
show
Bug introduced by
The property description does not seem to exist on NovaSeoEntity\Models\SEOInfo. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
84 1
            SEOTools::setDescription($value);
85
        }
86
87 1
        if ($value = $model?->getSEOFieldValue('canonical', $this->canonical) ?? $this->canonical) {
0 ignored issues
show
Bug introduced by
The property canonical does not seem to exist on NovaSeoEntity\Models\SEOInfo. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
88 1
            SEOTools::setCanonical(
89 1
                preg_match('/^http(s)?:\/\//', $value) ?
90 1
                    $value :
91 1
                    (rtrim(config('nova-seo-entity.canonical_url'), '/') . '/' . ltrim($value, '/'))
92 1
            );
93
        }
94
95 1
        $twitterImage = $this->seoImage()->exists('2x1') ? $this->seoImage()->url('2x1'):null;
96 1
        if ($value = $model?->getSEOFieldValue('img_twitter', $twitterImage) ?? $twitterImage) {
97 1
            SEOTools::twitter()->setImage($value);
98
        }
99
100 1
        $opengraphImage = $this->seoImage()->exists('1_91x1') ? $this->seoImage()->url('1_91x1'):null;
101 1
        if ($value = $model?->getSEOFieldValue('img_opengraph', $opengraphImage) ?? $opengraphImage) {
102 1
            SEOTools::opengraph()->addImage($value);
103
        }
104
105 1
        $ldImages = array_filter([
106 1
            $this->seoImage()->exists('1x1') ? $this->seoImage()->url('1x1'):null,
107 1
            $this->seoImage()->exists('4x3') ? $this->seoImage()->url('4x3'):null,
108 1
            $this->seoImage()->exists('16x9') ? $this->seoImage()->url('16x9'):null,
109 1
        ]);
110 1
        if (($value = $model?->getSEOFieldValue('img_json_ld', $ldImages) ?? $ldImages) && !empty($value)) {
111 1
            SEOTools::jsonLd()->setImages($value);
112
        }
113
114 1
        return $this;
115
    }
116
}
117