Completed
Push — master ( 80243c...960f7b )
by Andrew
02:25
created

GenerateHTML5Favicon()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 25
rs 8.8571
cc 1
eloc 7
nc 1
nop 3
1
<?php
2
3
/**
4
 * @todo Description
5
 *
6
 * @package silverstripe-seo
7
 * @subpackage icons
8
 * @author Andrew Gerber <[email protected]>
9
 * @version 1.0.0
10
 *
11
 */
12
class SEO_Icons_SiteTree_DataExtension extends DataExtension
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
13
{
14
15
16
    /* Overload Variable
17
    ------------------------------------------------------------------------------*/
18
19
    // none
20
21
22
    /* Overload Methods
23
    ------------------------------------------------------------------------------*/
24
25
    // CMS Fields
0 ignored issues
show
Unused Code Comprehensibility introduced by
37% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
26
// 	public function updateCMSFields(FieldList $fields) {}
27
28
29
    /* Template Methods
30
    ------------------------------------------------------------------------------*/
31
32
    /**
33
     * Updates metadata with icons.
34
     *
35
     * @param SiteConfig $config
36
     * @param SiteTree $owner
37
     * @param $metadata
38
     *
39
     * @return void
40
     */
41
    public function updateMetadata(SiteConfig $config, SiteTree $owner, &$metadata)
42
    {
43
44
        //// HTML4 Favicon
45
46
        // @todo Perhaps create dynamic image, but just use favicon.ico for now
47
48
        //// Create Favicons
49
50
        $HTML5Favicon = $config->HTML5Favicon();
51
        $IOSPinicon = $config->IOSPinicon();
52
        $AndroidPinicon = $config->AndroidPinicon();
53
        $WindowsPinicon = $config->WindowsPinicon();
54
55
        //// iOS Pinicon
56
57
        if ($IOSPinicon->exists()) {
58
            $this->GenerateIOSPinicon($config, $owner, $metadata, $IOSPinicon);
59
        }
60
61
        //// HTML5 Favicon
62
63
        if ($HTML5Favicon->exists()) {
64
            $this->GenerateHTML5Favicon($owner, $metadata, $HTML5Favicon);
65
        }
66
67
        //// Android Pinicon Manifest
68
69
        if ($AndroidPinicon->exists()) {
70
            $this->GenerateAndroidPinicon($config, $owner, $metadata);
71
        }
72
73
        //// Windows Pinicon Manifest
74
75
        if ($WindowsPinicon->exists()) {
76
            $this->GenerateWindowsPinicon($config, $owner, $metadata, $WindowsPinicon);
77
        }
78
79
    }
80
81
    /**
82
     * Generates markup for the iOS pinicon
83
     *
84
     * @param SiteConfig $config
85
     * @param SiteTree $owner
86
     * @param string $metadata
87
     * @param Image $IOSPinicon
88
     *
89
     * @return void
90
     */
91
    protected function GenerateIOSPinicon(SiteConfig $config, SiteTree $owner, &$metadata, Image $IOSPinicon) {
92
93
        // header
94
        $metadata .= $this->owner->MarkupComment('iOS Pinned Icon');
95
96
        //// iOS Pinicon Title
97
        if ($config->fetchPiniconTitle()) {
98
            $metadata .= $owner->MarkupMeta('apple-mobile-web-app-title', $config->fetchPiniconTitle());
99
        }
100
101
        //// iOS Pinned Icon
102
103
        // For non-Retina (@1× display) iPhone, iPod Touch, and Android 2.1+ devices
104
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(57, 57)->getAbsoluteURL(), 'image/png'); // 57×57
105
106
        // @todo: What is this for ??
107
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(60, 60)->getAbsoluteURL(), 'image/png', '60x60');
108
109
        // For the iPad mini and the first- and second-generation iPad (@1× display) on iOS ≤ 6
110
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(72, 72)->getAbsoluteURL(), 'image/png', '72x72');
111
112
        // For the iPad mini and the first- and second-generation iPad (@1× display) on iOS ≥ 7
113
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(76, 76)->getAbsoluteURL(), 'image/png', '76x76');
114
115
        // For iPhone with @2× display running iOS ≤ 6
116
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(114, 114)->getAbsoluteURL(), 'image/png', '114x114');
117
118
        // For iPhone with @2× display running iOS ≥ 7
119
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(120, 120)->getAbsoluteURL(), 'image/png', '120x120');
120
121
        // For iPad with @2× display running iOS ≤ 6
122
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(144, 144)->getAbsoluteURL(), 'image/png', '144x144');
123
124
        // For iPad with @2× display running iOS ≥ 7
125
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(152, 152)->getAbsoluteURL(), 'image/png', '152x152');
126
127
        // For iPhone 6 Plus with @3× display
128
        $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Pad(180, 180)->getAbsoluteURL(), 'image/png', '180x180');
129
130
    }
131
132
    /**
133
     * Generates markup for the HTML5 favicon
134
     *
135
     * @param SiteTree $owner
136
     * @param string $metadata
137
     * @param Image $HTML5Favicon
138
     *
139
     * @return void
140
     */
141
    protected function GenerateHTML5Favicon(SiteTree $owner, &$metadata, Image $HTML5Favicon) {
142
143
        // header
144
        $metadata .= $owner->MarkupComment('HTML5 Favicon');
145
146
//			// Android Chrome 32
147
        // @todo: Is the Android Chrome 32 196x196 px icon fully redundant ??
0 ignored issues
show
Unused Code Comprehensibility introduced by
44% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
148
//			$metadata .= $owner->MarkupLink('icon', $HTML5Favicon->SetSize(196,196)->getAbsoluteURL(), 'image/png', '196x196');
149
150
        // Android Chrome 37+ / HTML5 spec
151
        $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->SetSize(192, 192)->getAbsoluteURL(), 'image/png', '192x192');
0 ignored issues
show
Deprecated Code introduced by
The method Image::SetSize() has been deprecated with message: 4.0 Use Pad instead

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
152
153
        // Android Chrome 37+ / HTML5 spec
154
        $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->SetSize(128, 128)->getAbsoluteURL(), 'image/png', '128x128');
0 ignored issues
show
Deprecated Code introduced by
The method Image::SetSize() has been deprecated with message: 4.0 Use Pad instead

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
155
156
        // For Google TV
157
        $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->SetSize(96, 96)->getAbsoluteURL(), 'image/png', '96x96');
0 ignored issues
show
Deprecated Code introduced by
The method Image::SetSize() has been deprecated with message: 4.0 Use Pad instead

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
158
159
        // For Safari on Mac OS
160
        $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->SetSize(32, 32)->getAbsoluteURL(), 'image/png', '32x32');
0 ignored issues
show
Deprecated Code introduced by
The method Image::SetSize() has been deprecated with message: 4.0 Use Pad instead

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
161
162
        // The classic favicon, displayed in the tabs
163
        $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->SetSize(16, 16)->getAbsoluteURL(), 'image/png', '16x16');
0 ignored issues
show
Deprecated Code introduced by
The method Image::SetSize() has been deprecated with message: 4.0 Use Pad instead

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
164
165
    }
166
167
    /**
168
     * Generates markup for the Android pinicon
169
     *
170
     * @param SiteConfig $config
171
     * @param SiteTree $owner
172
     * @param $metadata
173
     *
174
     * @return void
175
     */
176
    protected function GenerateAndroidPinicon(SiteConfig $config, SiteTree $owner, &$metadata) {
177
178
        // header
179
        $metadata .= $owner->MarkupComment('Android Pinned Icon');
180
181
        //
182
        if ($config->fetchAndroidPiniconThemeColor()) {
183
            $metadata .= $owner->MarkupMeta('theme-color', $config->fetchAndroidPiniconThemeColor());
184
        }
185
186
        //
187
        $metadata .= $owner->MarkupLink('manifest', '/manifest.json');
188
189
    }
190
191
    /**
192
     * Generates markup for the Windows pinicon
193
     *
194
     * @param SiteConfig $config
195
     * @param SiteTree $owner
196
     * @param $metadata
197
     * @param Image $WindowsPinicon
198
     *
199
     * @return void
200
     */
201
    protected function GenerateWindowsPinicon(SiteConfig $config, SiteTree $owner, &$metadata, Image $WindowsPinicon) {
202
203
        // header
204
        $metadata .= $owner->MarkupComment('Windows Pinned Icon');
205
206
        // application name
207
        $appName = $config->fetchPiniconTitle();
208
        if (!$appName) {
209
            $appName = $config->Title;
210
        }
211
        $metadata .= $owner->MarkupMeta('application-name', $appName);
212
213
        // tile background color
214
        if ($config->fetchWindowsPiniconBackgroundColor()) {
215
            $metadata .= $owner->MarkupMeta('msapplication-TileColor', $config->fetchWindowsPiniconBackgroundColor());
216
        }
217
218
        // small tile
219
        $metadata .= $owner->MarkupMeta('msapplication-square70x70logo', $WindowsPinicon->Fill(70, 70)->getAbsoluteURL());
220
221
        // medium tile
222
        $metadata .= $owner->MarkupMeta('msapplication-square150x150logo', $WindowsPinicon->Fill(150, 150)->getAbsoluteURL());
223
224
        // @todo: Implement wide & tall tiles
225
226
        // wide tile
0 ignored issues
show
Unused Code Comprehensibility introduced by
57% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
227
//			$metadata .= $owner->MarkupMeta('msapplication-square310x150logo', $WindowsPinicon->Fill(310,150)->getAbsoluteURL());
228
229
        // large tile
0 ignored issues
show
Unused Code Comprehensibility introduced by
57% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
230
//			$metadata .= $owner->MarkupMeta('msapplication-square310x310logo', $WindowsPinicon->Fill(310,310)->getAbsoluteURL());
231
232
    }
233
234
}
235