These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
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
|
|||
13 | { |
||
14 | |||
15 | |||
16 | /* Overload Variable |
||
17 | ------------------------------------------------------------------------------*/ |
||
18 | |||
19 | // none |
||
20 | |||
21 | |||
22 | /* Overload Methods |
||
23 | ------------------------------------------------------------------------------*/ |
||
24 | |||
25 | // CMS Fields |
||
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->Fill(57, 57)->getAbsoluteURL(), 'image/png'); // 57×57 |
||
105 | |||
106 | // @todo: What is this for ?? |
||
107 | $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Fill(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->Fill(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->Fill(76, 76)->getAbsoluteURL(), 'image/png', '76x76'); |
||
114 | |||
115 | // For iPhone with @2× display running iOS ≤ 6 |
||
116 | $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Fill(114, 114)->getAbsoluteURL(), 'image/png', '114x114'); |
||
117 | |||
118 | // For iPhone with @2× display running iOS ≥ 7 |
||
119 | $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Fill(120, 120)->getAbsoluteURL(), 'image/png', '120x120'); |
||
120 | |||
121 | // For iPad with @2× display running iOS ≤ 6 |
||
122 | $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Fill(144, 144)->getAbsoluteURL(), 'image/png', '144x144'); |
||
123 | |||
124 | // For iPad with @2× display running iOS ≥ 7 |
||
125 | $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Fill(152, 152)->getAbsoluteURL(), 'image/png', '152x152'); |
||
126 | |||
127 | // For iPhone 6 Plus with @3× display |
||
128 | $metadata .= $owner->MarkupLink('apple-touch-icon', $IOSPinicon->Fill(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 ?? |
||
148 | // $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->Fill(196,196)->getAbsoluteURL(), 'image/png', '196x196'); |
||
149 | |||
150 | // Android Chrome 37+ / HTML5 spec |
||
151 | $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->Fill(192, 192)->getAbsoluteURL(), 'image/png', '192x192'); |
||
152 | |||
153 | // Android Chrome 37+ / HTML5 spec |
||
154 | $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->Fill(128, 128)->getAbsoluteURL(), 'image/png', '128x128'); |
||
155 | |||
156 | // For Google TV |
||
157 | $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->Fill(96, 96)->getAbsoluteURL(), 'image/png', '96x96'); |
||
158 | |||
159 | // For Safari on Mac OS |
||
160 | $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->Fill(32, 32)->getAbsoluteURL(), 'image/png', '32x32'); |
||
161 | |||
162 | // The classic favicon, displayed in the tabs |
||
163 | $metadata .= $owner->MarkupLink('icon', $HTML5Favicon->Fill(16, 16)->getAbsoluteURL(), 'image/png', '16x16'); |
||
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 |
||
227 | // $metadata .= $owner->MarkupMeta('msapplication-square310x150logo', $WindowsPinicon->Fill(310,150)->getAbsoluteURL()); |
||
228 | |||
229 | // large tile |
||
230 | // $metadata .= $owner->MarkupMeta('msapplication-square310x310logo', $WindowsPinicon->Fill(310,310)->getAbsoluteURL()); |
||
231 | |||
232 | } |
||
233 | |||
234 | } |
||
235 |
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.