Completed
Push — master ( 6b9272...284840 )
by Jake
03:00
created

SEOGenerator::getFavicons()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
eloc 4
c 1
b 0
f 1
nc 2
nop 0
dl 0
loc 7
rs 9.4285
1
<?php
2
3
namespace MeestorHok\Blue;
4
5
use Artesaos\SEOTools\Facades\SEOTools as SEOTools;
6
use Request;
7
use File;
8
9
class SEOGenerator
10
{
11
    public $defaults;
12
    public static $favicons;
13
    
14
    public function __construct () {
15
        $this->defaults = [
16
            'title' => 'Home',
17
            'title-spacer' => ' &#8211; ',
18
            'title-description' => 'Laravel Blue',
19
            'keywords' => array_collapse([['home'], ['laravel', 'blue', 'cms', 'meestorhok']]),
20
            'description' => 'This amazing site was created by Laravel Blue!',
21
            'images' => [],
22
            'twitter' => '@BlueCMS',
23
            'copyright' => '© 2016 Laravel Blue',
24
            'robots' => 'index,follow',
25
            'icon_dir' => '/blue/img/icons',
26
            'colors' => [
27
                'safari_pinned' => '#151e4f',
28
                'ms_tile' => '#ffffff',
29
                'theme' => '#151e4f'
30
            ]
31
        ];
32
    }
33
    
34
    public function generateSEO (array $page)
35
    {
36
        SEOTools::metatags()
37
            ->setTitleDefault($page['title-description'])
38
            ->setTitleSeparator($page['title-spacer'])
39
            ->setTitle($page['title'])
40
            ->setDescription($page['description'])
41
            ->setCanonical(Request::url())
42
            ->addMeta('copyright', $page['copyright'])
43
            ->addMeta('robots', $page['robots'])
44
            ->addMeta('HandheldFriendly', 'True')
45
            ->addMeta('MobileOptimized', '320')
46
            ->addMeta('X-UA-Compatible', 'IE=edge', 'http-equiv')
47
            ->addMeta('viewport', 'width=device-width, initial-scale=1, shrink-to-fit=no');
48
        SEOTools::opengraph()
49
            ->setTitle($page['title'].$page['title-spacer'].$page['title-description'])
50
            ->setDescription($page['description'])
51
            ->setUrl(Request::url())
52
            ->addProperty('locale', 'en_US')
53
            ->addProperty('type', 'website');
54
        SEOTools::twitter()
55
            ->setSite($page['twitter'])
56
            ->setTitle($page['title'].$page['title-spacer'].$page['title-description'])
57
            ->setDescription($page['description'])
58
            ->setType('summary')
59
            ->setUrl(Request::url());
60
        foreach ($page['images'] as $image) {
61
            SEOTools::opengraph()->addImage(asset($image['uri']));
62
            SEOTools::twitter()->addImage(asset($image['uri']));
63
        }
64
        foreach ($page['keywords'] as $keyword) {
65
            SEOTools::metatags()->addKeyword($keyword);
66
        }
67
    }
68
    
69
    public function make (array $details, $view = null)
70
    {
71
        $this->defaults = array_replace($this->defaults, $details);
72
        
73
        $this->generateSEO($this->defaults);
74
        
75
        if (!is_null($view)) {
76
            return view($view);
77
        }
78
    }
79
    
80
    public function get ()
81
    {
82
        return str_replace(PHP_EOL, '', SEOTools::generate()) . $this->getFavicons();
83
    }
84
    
85
    public function setFavicons () 
86
    {
87
        $favicon_dir = insert_if_exists($this->defaults['icon_dir']);
88
        $colors = $this->defaults['colors'];
89
        self::$favicons =
90 View Code Duplication
                insert_if_exists (['60x60', '72x72', '114x114', '120x120', '152x152', '180x180'], function ($insert) use ($favicon_dir) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
91
                        return '<link rel="apple-touch-icon" sizes="' . $insert . '" href="' . asset($favicon_dir . '/apple-touch-icon-' . $insert . '.png').'">';
92
                    }, function ($insert) use ($favicon_dir) {
93
                        return File::exists(public_path($favicon_dir.'/apple-touch-icon-'.$insert.'.png'));
94
                    }) . 
95 View Code Duplication
                insert_if_exists (['16x16', '32x32', '96x96', '194x194'], function ($insert) use ($favicon_dir) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
96
                        return '<link rel="icon" type="image/png" href="' . asset($favicon_dir . '/favicon-' . $insert . '.png').'" sizes="'.$insert.'">';
97
                    }, function ($insert) use ($favicon_dir) {
98
                        return File::exists(public_path($favicon_dir.'/favicon-'.$insert.'.png'));
99
                    }) . 
100 View Code Duplication
                insert_if_exists (['192x192'], function ($insert) use ($favicon_dir) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
101
                        return '<link rel="icon" type="image/png" href="' . asset($favicon_dir . '/android-chrome-' . $insert . '.png').'" sizes="'.$insert.'">';
102
                    }, function ($insert) use ($favicon_dir) {
103
                        return File::exists(public_path($favicon_dir.'/android-chrome-'.$insert.'.png'));
104
                    }) . 
105
                insert_if_exists ($favicon_dir.'/manifest.json', function ($insert) {
106
                        return '<link rel="manifest" href="' . asset($insert) . '">';
107
                    }, function ($insert) {
108
                        return File::exists(public_path($insert));
109
                    }) . 
110
                insert_if_exists ($favicon_dir.'/safari-pinned-tab.svg', function ($insert) use ($colors) {
111
                        return '<link rel="mask-icon" href="'.asset($insert).'" color="' . insert_if_exists($colors['safari_pinned']) . '">';
112
                    }, function ($insert) {
113
                        return File::exists(public_path($insert));
114
                    }) . 
115
                insert_if_exists ($favicon_dir.'/favicon.ico', function ($insert) {
116
                        return '<link rel="shortcut icon" href="'.asset($insert).'">';
117
                    }, function ($insert) {
118
                        return File::exists(public_path($insert));
119
                    }) . 
120
                insert_if_exists ($favicon_dir.'/mstile-144x144.png', function ($insert) {
121
                        return '<meta name="msapplication-TileImage" content="'.asset($insert).'">';
122
                    }, function ($insert) {
123
                        return File::exists(public_path($insert));
124
                    }) . 
125
                insert_if_exists ($favicon_dir.'/browserconfig.xml', function ($insert) {
126
                        return '<meta name="msapplication-config" content="'.asset($insert).'">';
127
                    }, function ($insert) {
128
                        return File::exists(public_path($insert));
129
                    }) . 
130
                insert_if_exists ($colors['ms_tile'], function ($insert) {
131
                        return '<meta name="msapplication-TileColor" content="'.$insert.'">';
132
                    }) . 
133
                insert_if_exists ($colors['theme'], function ($insert) {
134
                        return '<meta name="theme-color" content="'.$insert.'">';
135
                    });
136
        return self::$favicons;
137
    }
138
    
139
    public function getFavicons () 
140
    {
141
        if (is_null(self::$favicons)) {
142
            return $this->setFavicons();
143
        }
144
        return self::$favicon;
145
    }
146
}