Mercurial > hg > isophonics-drupal-site
comparison vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Feed.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 /** | |
3 * Zend Framework (http://framework.zend.com/) | |
4 * | |
5 * @link http://github.com/zendframework/zf2 for the canonical source repository | |
6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) | |
7 * @license http://framework.zend.com/license/new-bsd New BSD License | |
8 */ | |
9 | |
10 namespace Zend\Feed\Writer\Extension\ITunes; | |
11 | |
12 use Zend\Feed\Uri; | |
13 use Zend\Feed\Writer; | |
14 use Zend\Stdlib\StringUtils; | |
15 use Zend\Stdlib\StringWrapper\StringWrapperInterface; | |
16 | |
17 class Feed | |
18 { | |
19 /** | |
20 * Array of Feed data for rendering by Extension's renderers | |
21 * | |
22 * @var array | |
23 */ | |
24 protected $data = []; | |
25 | |
26 /** | |
27 * Encoding of all text values | |
28 * | |
29 * @var string | |
30 */ | |
31 protected $encoding = 'UTF-8'; | |
32 | |
33 /** | |
34 * The used string wrapper supporting encoding | |
35 * | |
36 * @var StringWrapperInterface | |
37 */ | |
38 protected $stringWrapper; | |
39 | |
40 /** | |
41 * Constructor | |
42 */ | |
43 public function __construct() | |
44 { | |
45 $this->stringWrapper = StringUtils::getWrapper($this->encoding); | |
46 } | |
47 | |
48 /** | |
49 * Set feed encoding | |
50 * | |
51 * @param string $enc | |
52 * @return Feed | |
53 */ | |
54 public function setEncoding($enc) | |
55 { | |
56 $this->stringWrapper = StringUtils::getWrapper($enc); | |
57 $this->encoding = $enc; | |
58 return $this; | |
59 } | |
60 | |
61 /** | |
62 * Get feed encoding | |
63 * | |
64 * @return string | |
65 */ | |
66 public function getEncoding() | |
67 { | |
68 return $this->encoding; | |
69 } | |
70 | |
71 /** | |
72 * Set a block value of "yes" or "no". You may also set an empty string. | |
73 * | |
74 * @param string | |
75 * @return Feed | |
76 * @throws Writer\Exception\InvalidArgumentException | |
77 */ | |
78 public function setItunesBlock($value) | |
79 { | |
80 if (!ctype_alpha($value) && strlen($value) > 0) { | |
81 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' | |
82 . ' contain alphabetic characters'); | |
83 } | |
84 if ($this->stringWrapper->strlen($value) > 255) { | |
85 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' | |
86 . ' contain a maximum of 255 characters'); | |
87 } | |
88 $this->data['block'] = $value; | |
89 return $this; | |
90 } | |
91 | |
92 /** | |
93 * Add feed authors | |
94 * | |
95 * @param array $values | |
96 * @return Feed | |
97 */ | |
98 public function addItunesAuthors(array $values) | |
99 { | |
100 foreach ($values as $value) { | |
101 $this->addItunesAuthor($value); | |
102 } | |
103 return $this; | |
104 } | |
105 | |
106 /** | |
107 * Add feed author | |
108 * | |
109 * @param string $value | |
110 * @return Feed | |
111 * @throws Writer\Exception\InvalidArgumentException | |
112 */ | |
113 public function addItunesAuthor($value) | |
114 { | |
115 if ($this->stringWrapper->strlen($value) > 255) { | |
116 throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only' | |
117 . ' contain a maximum of 255 characters each'); | |
118 } | |
119 if (!isset($this->data['authors'])) { | |
120 $this->data['authors'] = []; | |
121 } | |
122 $this->data['authors'][] = $value; | |
123 return $this; | |
124 } | |
125 | |
126 /** | |
127 * Set feed categories | |
128 * | |
129 * @param array $values | |
130 * @return Feed | |
131 * @throws Writer\Exception\InvalidArgumentException | |
132 */ | |
133 public function setItunesCategories(array $values) | |
134 { | |
135 if (!isset($this->data['categories'])) { | |
136 $this->data['categories'] = []; | |
137 } | |
138 foreach ($values as $key => $value) { | |
139 if (!is_array($value)) { | |
140 if ($this->stringWrapper->strlen($value) > 255) { | |
141 throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' | |
142 . ' contain a maximum of 255 characters each'); | |
143 } | |
144 $this->data['categories'][] = $value; | |
145 } else { | |
146 if ($this->stringWrapper->strlen($key) > 255) { | |
147 throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' | |
148 . ' contain a maximum of 255 characters each'); | |
149 } | |
150 $this->data['categories'][$key] = []; | |
151 foreach ($value as $val) { | |
152 if ($this->stringWrapper->strlen($val) > 255) { | |
153 throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' | |
154 . ' contain a maximum of 255 characters each'); | |
155 } | |
156 $this->data['categories'][$key][] = $val; | |
157 } | |
158 } | |
159 } | |
160 return $this; | |
161 } | |
162 | |
163 /** | |
164 * Set feed image (icon) | |
165 * | |
166 * @param string $value | |
167 * @return Feed | |
168 * @throws Writer\Exception\InvalidArgumentException | |
169 */ | |
170 public function setItunesImage($value) | |
171 { | |
172 if (!Uri::factory($value)->isValid()) { | |
173 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only' | |
174 . ' be a valid URI/IRI'); | |
175 } | |
176 if (!in_array(substr($value, -3), ['jpg', 'png'])) { | |
177 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only' | |
178 . ' use file extension "jpg" or "png" which must be the last three' | |
179 . ' characters of the URI (i.e. no query string or fragment)'); | |
180 } | |
181 $this->data['image'] = $value; | |
182 return $this; | |
183 } | |
184 | |
185 /** | |
186 * Set feed cumulative duration | |
187 * | |
188 * @param string $value | |
189 * @return Feed | |
190 * @throws Writer\Exception\InvalidArgumentException | |
191 */ | |
192 public function setItunesDuration($value) | |
193 { | |
194 $value = (string) $value; | |
195 if (!ctype_digit($value) | |
196 && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value) | |
197 && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value) | |
198 ) { | |
199 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only' | |
200 . ' be of a specified [[HH:]MM:]SS format'); | |
201 } | |
202 $this->data['duration'] = $value; | |
203 return $this; | |
204 } | |
205 | |
206 /** | |
207 * Set "explicit" flag | |
208 * | |
209 * @param bool $value | |
210 * @return Feed | |
211 * @throws Writer\Exception\InvalidArgumentException | |
212 */ | |
213 public function setItunesExplicit($value) | |
214 { | |
215 if (!in_array($value, ['yes', 'no', 'clean'])) { | |
216 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only' | |
217 . ' be one of "yes", "no" or "clean"'); | |
218 } | |
219 $this->data['explicit'] = $value; | |
220 return $this; | |
221 } | |
222 | |
223 /** | |
224 * Set feed keywords | |
225 * | |
226 * @param array $value | |
227 * @return Feed | |
228 * @throws Writer\Exception\InvalidArgumentException | |
229 */ | |
230 public function setItunesKeywords(array $value) | |
231 { | |
232 if (count($value) > 12) { | |
233 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' | |
234 . ' contain a maximum of 12 terms'); | |
235 } | |
236 $concat = implode(',', $value); | |
237 if ($this->stringWrapper->strlen($concat) > 255) { | |
238 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' | |
239 . ' have a concatenated length of 255 chars where terms are delimited' | |
240 . ' by a comma'); | |
241 } | |
242 $this->data['keywords'] = $value; | |
243 return $this; | |
244 } | |
245 | |
246 /** | |
247 * Set new feed URL | |
248 * | |
249 * @param string $value | |
250 * @return Feed | |
251 * @throws Writer\Exception\InvalidArgumentException | |
252 */ | |
253 public function setItunesNewFeedUrl($value) | |
254 { | |
255 if (!Uri::factory($value)->isValid()) { | |
256 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "newFeedUrl" may only' | |
257 . ' be a valid URI/IRI'); | |
258 } | |
259 $this->data['newFeedUrl'] = $value; | |
260 return $this; | |
261 } | |
262 | |
263 /** | |
264 * Add feed owners | |
265 * | |
266 * @param array $values | |
267 * @return Feed | |
268 */ | |
269 public function addItunesOwners(array $values) | |
270 { | |
271 foreach ($values as $value) { | |
272 $this->addItunesOwner($value); | |
273 } | |
274 return $this; | |
275 } | |
276 | |
277 /** | |
278 * Add feed owner | |
279 * | |
280 * @param array $value | |
281 * @return Feed | |
282 * @throws Writer\Exception\InvalidArgumentException | |
283 */ | |
284 public function addItunesOwner(array $value) | |
285 { | |
286 if (!isset($value['name']) || !isset($value['email'])) { | |
287 throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" must' | |
288 . ' be an array containing keys "name" and "email"'); | |
289 } | |
290 if ($this->stringWrapper->strlen($value['name']) > 255 | |
291 || $this->stringWrapper->strlen($value['email']) > 255 | |
292 ) { | |
293 throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" may only' | |
294 . ' contain a maximum of 255 characters each for "name" and "email"'); | |
295 } | |
296 if (!isset($this->data['owners'])) { | |
297 $this->data['owners'] = []; | |
298 } | |
299 $this->data['owners'][] = $value; | |
300 return $this; | |
301 } | |
302 | |
303 /** | |
304 * Set feed subtitle | |
305 * | |
306 * @param string $value | |
307 * @return Feed | |
308 * @throws Writer\Exception\InvalidArgumentException | |
309 */ | |
310 public function setItunesSubtitle($value) | |
311 { | |
312 if ($this->stringWrapper->strlen($value) > 255) { | |
313 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only' | |
314 . ' contain a maximum of 255 characters'); | |
315 } | |
316 $this->data['subtitle'] = $value; | |
317 return $this; | |
318 } | |
319 | |
320 /** | |
321 * Set feed summary | |
322 * | |
323 * @param string $value | |
324 * @return Feed | |
325 * @throws Writer\Exception\InvalidArgumentException | |
326 */ | |
327 public function setItunesSummary($value) | |
328 { | |
329 if ($this->stringWrapper->strlen($value) > 4000) { | |
330 throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only' | |
331 . ' contain a maximum of 4000 characters'); | |
332 } | |
333 $this->data['summary'] = $value; | |
334 return $this; | |
335 } | |
336 | |
337 /** | |
338 * Overloading: proxy to internal setters | |
339 * | |
340 * @param string $method | |
341 * @param array $params | |
342 * @return mixed | |
343 * @throws Writer\Exception\BadMethodCallException | |
344 */ | |
345 public function __call($method, array $params) | |
346 { | |
347 $point = lcfirst(substr($method, 9)); | |
348 if (!method_exists($this, 'setItunes' . ucfirst($point)) | |
349 && !method_exists($this, 'addItunes' . ucfirst($point)) | |
350 ) { | |
351 throw new Writer\Exception\BadMethodCallException( | |
352 'invalid method: ' . $method | |
353 ); | |
354 } | |
355 if (!array_key_exists($point, $this->data) || empty($this->data[$point])) { | |
356 return; | |
357 } | |
358 return $this->data[$point]; | |
359 } | |
360 } |