]> scripts.mit.edu Git - autoinstalls/wordpress.git/blob - wp-includes/SimplePie/Item.php
WordPress 4.4
[autoinstalls/wordpress.git] / wp-includes / SimplePie / Item.php
1 <?php
2 /**
3  * SimplePie
4  *
5  * A PHP-Based RSS and Atom Feed Framework.
6  * Takes the hard work out of managing a complete RSS/Atom solution.
7  *
8  * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without modification, are
12  * permitted provided that the following conditions are met:
13  *
14  *      * Redistributions of source code must retain the above copyright notice, this list of
15  *        conditions and the following disclaimer.
16  *
17  *      * Redistributions in binary form must reproduce the above copyright notice, this list
18  *        of conditions and the following disclaimer in the documentation and/or other materials
19  *        provided with the distribution.
20  *
21  *      * Neither the name of the SimplePie Team nor the names of its contributors may be used
22  *        to endorse or promote products derived from this software without specific prior
23  *        written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
26  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
27  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
28  * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  * @package SimplePie
36  * @version 1.3.1
37  * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
38  * @author Ryan Parman
39  * @author Geoffrey Sneddon
40  * @author Ryan McCue
41  * @link http://simplepie.org/ SimplePie
42  * @license http://www.opensource.org/licenses/bsd-license.php BSD License
43  */
44
45
46 /**
47  * Manages all item-related data
48  *
49  * Used by {@see SimplePie::get_item()} and {@see SimplePie::get_items()}
50  *
51  * This class can be overloaded with {@see SimplePie::set_item_class()}
52  *
53  * @package SimplePie
54  * @subpackage API
55  */
56 class SimplePie_Item
57 {
58         /**
59          * Parent feed
60          *
61          * @access private
62          * @var SimplePie
63          */
64         var $feed;
65
66         /**
67          * Raw data
68          *
69          * @access private
70          * @var array
71          */
72         var $data = array();
73
74         /**
75          * Registry object
76          *
77          * @see set_registry
78          * @var SimplePie_Registry
79          */
80         protected $registry;
81
82         /**
83          * Create a new item object
84          *
85          * This is usually used by {@see SimplePie::get_items} and
86          * {@see SimplePie::get_item}. Avoid creating this manually.
87          *
88          * @param SimplePie $feed Parent feed
89          * @param array $data Raw data
90          */
91         public function __construct($feed, $data)
92         {
93                 $this->feed = $feed;
94                 $this->data = $data;
95         }
96
97         /**
98          * Set the registry handler
99          *
100          * This is usually used by {@see SimplePie_Registry::create}
101          *
102          * @since 1.3
103          * @param SimplePie_Registry $registry
104          */
105         public function set_registry(SimplePie_Registry $registry)
106         {
107                 $this->registry = $registry;
108         }
109
110         /**
111          * Get a string representation of the item
112          *
113          * @return string
114          */
115         public function __toString()
116         {
117                 return md5(serialize($this->data));
118         }
119
120         /**
121          * Remove items that link back to this before destroying this object
122          */
123         public function __destruct()
124         {
125                 if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
126                 {
127                         unset($this->feed);
128                 }
129         }
130
131         /**
132          * Get data for an item-level element
133          *
134          * This method allows you to get access to ANY element/attribute that is a
135          * sub-element of the item/entry tag.
136          *
137          * See {@see SimplePie::get_feed_tags()} for a description of the return value
138          *
139          * @since 1.0
140          * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
141          * @param string $namespace The URL of the XML namespace of the elements you're trying to access
142          * @param string $tag Tag name
143          * @return array
144          */
145         public function get_item_tags($namespace, $tag)
146         {
147                 if (isset($this->data['child'][$namespace][$tag]))
148                 {
149                         return $this->data['child'][$namespace][$tag];
150                 }
151                 else
152                 {
153                         return null;
154                 }
155         }
156
157         /**
158          * Get the base URL value from the parent feed
159          *
160          * Uses `<xml:base>`
161          *
162          * @param array $element
163          * @return string
164          */
165         public function get_base($element = array())
166         {
167                 return $this->feed->get_base($element);
168         }
169
170         /**
171          * Sanitize feed data
172          *
173          * @access private
174          * @see SimplePie::sanitize()
175          * @param string $data Data to sanitize
176          * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants
177          * @param string $base Base URL to resolve URLs against
178          * @return string Sanitized data
179          */
180         public function sanitize($data, $type, $base = '')
181         {
182                 return $this->feed->sanitize($data, $type, $base);
183         }
184
185         /**
186          * Get the parent feed
187          *
188          * Note: this may not work as you think for multifeeds!
189          *
190          * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed
191          * @since 1.0
192          * @return SimplePie
193          */
194         public function get_feed()
195         {
196                 return $this->feed;
197         }
198
199         /**
200          * Get the unique identifier for the item
201          *
202          * This is usually used when writing code to check for new items in a feed.
203          *
204          * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute
205          * for RDF. If none of these are supplied (or `$hash` is true), creates an
206          * MD5 hash based on the permalink and title. If either of those are not
207          * supplied, creates a hash based on the full feed data.
208          *
209          * @since Beta 2
210          * @param boolean $hash Should we force using a hash instead of the supplied ID?
211          * @return string
212          */
213         public function get_id($hash = false)
214         {
215                 if (!$hash)
216                 {
217                         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
218                         {
219                                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
220                         }
221                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
222                         {
223                                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
224                         }
225                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
226                         {
227                                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
228                         }
229                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
230                         {
231                                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
232                         }
233                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
234                         {
235                                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
236                         }
237                         elseif (isset($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about']))
238                         {
239                                 return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
240                         }
241                         elseif (($return = $this->get_permalink()) !== null)
242                         {
243                                 return $return;
244                         }
245                         elseif (($return = $this->get_title()) !== null)
246                         {
247                                 return $return;
248                         }
249                 }
250                 if ($this->get_permalink() !== null || $this->get_title() !== null)
251                 {
252                         return md5($this->get_permalink() . $this->get_title());
253                 }
254                 else
255                 {
256                         return md5(serialize($this->data));
257                 }
258         }
259
260         /**
261          * Get the title of the item
262          *
263          * Uses `<atom:title>`, `<title>` or `<dc:title>`
264          *
265          * @since Beta 2 (previously called `get_item_title` since 0.8)
266          * @return string|null
267          */
268         public function get_title()
269         {
270                 if (!isset($this->data['title']))
271                 {
272                         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
273                         {
274                                 $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
275                         }
276                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
277                         {
278                                 $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
279                         }
280                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
281                         {
282                                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
283                         }
284                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
285                         {
286                                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
287                         }
288                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
289                         {
290                                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
291                         }
292                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
293                         {
294                                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
295                         }
296                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
297                         {
298                                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
299                         }
300                         else
301                         {
302                                 $this->data['title'] = null;
303                         }
304                 }
305                 return $this->data['title'];
306         }
307
308         /**
309          * Get the content for the item
310          *
311          * Prefers summaries over full content , but will return full content if a
312          * summary does not exist.
313          *
314          * To prefer full content instead, use {@see get_content}
315          *
316          * Uses `<atom:summary>`, `<description>`, `<dc:description>` or
317          * `<itunes:subtitle>`
318          *
319          * @since 0.8
320          * @param boolean $description_only Should we avoid falling back to the content?
321          * @return string|null
322          */
323         public function get_description($description_only = false)
324         {
325                 if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
326                 {
327                         return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
328                 }
329                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
330                 {
331                         return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
332                 }
333                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
334                 {
335                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
336                 }
337                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
338                 {
339                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
340                 }
341                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
342                 {
343                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
344                 }
345                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
346                 {
347                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
348                 }
349                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
350                 {
351                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
352                 }
353                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
354                 {
355                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
356                 }
357                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
358                 {
359                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
360                 }
361
362                 elseif (!$description_only)
363                 {
364                         return $this->get_content(true);
365                 }
366                 else
367                 {
368                         return null;
369                 }
370         }
371
372         /**
373          * Get the content for the item
374          *
375          * Prefers full content over summaries, but will return a summary if full
376          * content does not exist.
377          *
378          * To prefer summaries instead, use {@see get_description}
379          *
380          * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)
381          *
382          * @since 1.0
383          * @param boolean $content_only Should we avoid falling back to the description?
384          * @return string|null
385          */
386         public function get_content($content_only = false)
387         {
388                 if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
389                 {
390                         return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
391                 }
392                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
393                 {
394                         return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
395                 }
396                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
397                 {
398                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
399                 }
400                 elseif (!$content_only)
401                 {
402                         return $this->get_description(true);
403                 }
404                 else
405                 {
406                         return null;
407                 }
408         }
409
410         /**
411          * Get a category for the item
412          *
413          * @since Beta 3 (previously called `get_categories()` since Beta 2)
414          * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
415          * @return SimplePie_Category|null
416          */
417         public function get_category($key = 0)
418         {
419                 $categories = $this->get_categories();
420                 if (isset($categories[$key]))
421                 {
422                         return $categories[$key];
423                 }
424                 else
425                 {
426                         return null;
427                 }
428         }
429
430         /**
431          * Get all categories for the item
432          *
433          * Uses `<atom:category>`, `<category>` or `<dc:subject>`
434          *
435          * @since Beta 3
436          * @return array|null List of {@see SimplePie_Category} objects
437          */
438         public function get_categories()
439         {
440                 $categories = array();
441
442                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
443                 {
444                         $term = null;
445                         $scheme = null;
446                         $label = null;
447                         if (isset($category['attribs']['']['term']))
448                         {
449                                 $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
450                         }
451                         if (isset($category['attribs']['']['scheme']))
452                         {
453                                 $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
454                         }
455                         if (isset($category['attribs']['']['label']))
456                         {
457                                 $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
458                         }
459                         $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
460                 }
461                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
462                 {
463                         // This is really the label, but keep this as the term also for BC.
464                         // Label will also work on retrieving because that falls back to term.
465                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
466                         if (isset($category['attribs']['']['domain']))
467                         {
468                                 $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
469                         }
470                         else
471                         {
472                                 $scheme = null;
473                         }
474                         $categories[] = $this->registry->create('Category', array($term, $scheme, null));
475                 }
476                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
477                 {
478                         $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
479                 }
480                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
481                 {
482                         $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
483                 }
484
485                 if (!empty($categories))
486                 {
487                         return array_unique($categories);
488                 }
489                 else
490                 {
491                         return null;
492                 }
493         }
494
495         /**
496          * Get an author for the item
497          *
498          * @since Beta 2
499          * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
500          * @return SimplePie_Author|null
501          */
502         public function get_author($key = 0)
503         {
504                 $authors = $this->get_authors();
505                 if (isset($authors[$key]))
506                 {
507                         return $authors[$key];
508                 }
509                 else
510                 {
511                         return null;
512                 }
513         }
514
515         /**
516          * Get a contributor for the item
517          *
518          * @since 1.1
519          * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
520          * @return SimplePie_Author|null
521          */
522         public function get_contributor($key = 0)
523         {
524                 $contributors = $this->get_contributors();
525                 if (isset($contributors[$key]))
526                 {
527                         return $contributors[$key];
528                 }
529                 else
530                 {
531                         return null;
532                 }
533         }
534
535         /**
536          * Get all contributors for the item
537          *
538          * Uses `<atom:contributor>`
539          *
540          * @since 1.1
541          * @return array|null List of {@see SimplePie_Author} objects
542          */
543         public function get_contributors()
544         {
545                 $contributors = array();
546                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
547                 {
548                         $name = null;
549                         $uri = null;
550                         $email = null;
551                         if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
552                         {
553                                 $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
554                         }
555                         if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
556                         {
557                                 $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
558                         }
559                         if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
560                         {
561                                 $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
562                         }
563                         if ($name !== null || $email !== null || $uri !== null)
564                         {
565                                 $contributors[] = $this->registry->create('Author', array($name, $uri, $email));
566                         }
567                 }
568                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
569                 {
570                         $name = null;
571                         $url = null;
572                         $email = null;
573                         if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
574                         {
575                                 $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
576                         }
577                         if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
578                         {
579                                 $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
580                         }
581                         if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
582                         {
583                                 $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
584                         }
585                         if ($name !== null || $email !== null || $url !== null)
586                         {
587                                 $contributors[] = $this->registry->create('Author', array($name, $url, $email));
588                         }
589                 }
590
591                 if (!empty($contributors))
592                 {
593                         return array_unique($contributors);
594                 }
595                 else
596                 {
597                         return null;
598                 }
599         }
600
601         /**
602          * Get all authors for the item
603          *
604          * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
605          *
606          * @since Beta 2
607          * @return array|null List of {@see SimplePie_Author} objects
608          */
609         public function get_authors()
610         {
611                 $authors = array();
612                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
613                 {
614                         $name = null;
615                         $uri = null;
616                         $email = null;
617                         if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
618                         {
619                                 $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
620                         }
621                         if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
622                         {
623                                 $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
624                         }
625                         if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
626                         {
627                                 $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
628                         }
629                         if ($name !== null || $email !== null || $uri !== null)
630                         {
631                                 $authors[] = $this->registry->create('Author', array($name, $uri, $email));
632                         }
633                 }
634                 if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
635                 {
636                         $name = null;
637                         $url = null;
638                         $email = null;
639                         if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
640                         {
641                                 $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
642                         }
643                         if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
644                         {
645                                 $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
646                         }
647                         if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
648                         {
649                                 $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
650                         }
651                         if ($name !== null || $email !== null || $url !== null)
652                         {
653                                 $authors[] = $this->registry->create('Author', array($name, $url, $email));
654                         }
655                 }
656                 if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author'))
657                 {
658                         $authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)));
659                 }
660                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
661                 {
662                         $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
663                 }
664                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
665                 {
666                         $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
667                 }
668                 foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
669                 {
670                         $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
671                 }
672
673                 if (!empty($authors))
674                 {
675                         return array_unique($authors);
676                 }
677                 elseif (($source = $this->get_source()) && ($authors = $source->get_authors()))
678                 {
679                         return $authors;
680                 }
681                 elseif ($authors = $this->feed->get_authors())
682                 {
683                         return $authors;
684                 }
685                 else
686                 {
687                         return null;
688                 }
689         }
690
691         /**
692          * Get the copyright info for the item
693          *
694          * Uses `<atom:rights>` or `<dc:rights>`
695          *
696          * @since 1.1
697          * @return string
698          */
699         public function get_copyright()
700         {
701                 if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
702                 {
703                         return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
704                 }
705                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
706                 {
707                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
708                 }
709                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
710                 {
711                         return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
712                 }
713                 else
714                 {
715                         return null;
716                 }
717         }
718
719         /**
720          * Get the posting date/time for the item
721          *
722          * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,
723          * `<atom:modified>`, `<pubDate>` or `<dc:date>`
724          *
725          * Note: obeys PHP's timezone setting. To get a UTC date/time, use
726          * {@see get_gmdate}
727          *
728          * @since Beta 2 (previously called `get_item_date` since 0.8)
729          *
730          * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
731          * @return int|string|null
732          */
733         public function get_date($date_format = 'j F Y, g:i a')
734         {
735                 if (!isset($this->data['date']))
736                 {
737                         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
738                         {
739                                 $this->data['date']['raw'] = $return[0]['data'];
740                         }
741                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
742                         {
743                                 $this->data['date']['raw'] = $return[0]['data'];
744                         }
745                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
746                         {
747                                 $this->data['date']['raw'] = $return[0]['data'];
748                         }
749                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
750                         {
751                                 $this->data['date']['raw'] = $return[0]['data'];
752                         }
753                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
754                         {
755                                 $this->data['date']['raw'] = $return[0]['data'];
756                         }
757                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate'))
758                         {
759                                 $this->data['date']['raw'] = $return[0]['data'];
760                         }
761                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
762                         {
763                                 $this->data['date']['raw'] = $return[0]['data'];
764                         }
765                         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
766                         {
767                                 $this->data['date']['raw'] = $return[0]['data'];
768                         }
769
770                         if (!empty($this->data['date']['raw']))
771                         {
772                                 $parser = $this->registry->call('Parse_Date', 'get');
773                                 $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']);
774                         }
775                         else
776                         {
777                                 $this->data['date'] = null;
778                         }
779                 }
780                 if ($this->data['date'])
781                 {
782                         $date_format = (string) $date_format;
783                         switch ($date_format)
784                         {
785                                 case '':
786                                         return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
787
788                                 case 'U':
789                                         return $this->data['date']['parsed'];
790
791                                 default:
792                                         return date($date_format, $this->data['date']['parsed']);
793                         }
794                 }
795                 else
796                 {
797                         return null;
798                 }
799         }
800
801         /**
802          * Get the update date/time for the item
803          *
804          * Uses `<atom:updated>`
805          *
806          * Note: obeys PHP's timezone setting. To get a UTC date/time, use
807          * {@see get_gmdate}
808          *
809          * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
810          * @return int|string|null
811          */
812         public function get_updated_date($date_format = 'j F Y, g:i a')
813         {
814                 if (!isset($this->data['updated']))
815                 {
816                         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
817                         {
818                                 $this->data['updated']['raw'] = $return[0]['data'];
819                         }
820
821                         if (!empty($this->data['updated']['raw']))
822                         {
823                                 $parser = $this->registry->call('Parse_Date', 'get');
824                                 $this->data['updated']['parsed'] = $parser->parse($this->data['date']['raw']);
825                         }
826                         else
827                         {
828                                 $this->data['updated'] = null;
829                         }
830                 }
831                 if ($this->data['updated'])
832                 {
833                         $date_format = (string) $date_format;
834                         switch ($date_format)
835                         {
836                                 case '':
837                                         return $this->sanitize($this->data['updated']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
838
839                                 case 'U':
840                                         return $this->data['updated']['parsed'];
841
842                                 default:
843                                         return date($date_format, $this->data['updated']['parsed']);
844                         }
845                 }
846                 else
847                 {
848                         return null;
849                 }
850         }
851
852         /**
853          * Get the localized posting date/time for the item
854          *
855          * Returns the date formatted in the localized language. To display in
856          * languages other than the server's default, you need to change the locale
857          * with {@link http://php.net/setlocale setlocale()}. The available
858          * localizations depend on which ones are installed on your web server.
859          *
860          * @since 1.0
861          *
862          * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data)
863          * @return int|string|null
864          */
865         public function get_local_date($date_format = '%c')
866         {
867                 if (!$date_format)
868                 {
869                         return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
870                 }
871                 elseif (($date = $this->get_date('U')) !== null && $date !== false)
872                 {
873                         return strftime($date_format, $date);
874                 }
875                 else
876                 {
877                         return null;
878                 }
879         }
880
881         /**
882          * Get the posting date/time for the item (UTC time)
883          *
884          * @see get_date
885          * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
886          * @return int|string|null
887          */
888         public function get_gmdate($date_format = 'j F Y, g:i a')
889         {
890                 $date = $this->get_date('U');
891                 if ($date === null)
892                 {
893                         return null;
894                 }
895
896                 return gmdate($date_format, $date);
897         }
898
899         /**
900          * Get the update date/time for the item (UTC time)
901          *
902          * @see get_updated_date
903          * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
904          * @return int|string|null
905          */
906         public function get_updated_gmdate($date_format = 'j F Y, g:i a')
907         {
908                 $date = $this->get_updated_date('U');
909                 if ($date === null)
910                 {
911                         return null;
912                 }
913
914                 return gmdate($date_format, $date);
915         }
916
917         /**
918          * Get the permalink for the item
919          *
920          * Returns the first link available with a relationship of "alternate".
921          * Identical to {@see get_link()} with key 0
922          *
923          * @see get_link
924          * @since 0.8
925          * @return string|null Permalink URL
926          */
927         public function get_permalink()
928         {
929                 $link = $this->get_link();
930                 $enclosure = $this->get_enclosure(0);
931                 if ($link !== null)
932                 {
933                         return $link;
934                 }
935                 elseif ($enclosure !== null)
936                 {
937                         return $enclosure->get_link();
938                 }
939                 else
940                 {
941                         return null;
942                 }
943         }
944
945         /**
946          * Get a single link for the item
947          *
948          * @since Beta 3
949          * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
950          * @param string $rel The relationship of the link to return
951          * @return string|null Link URL
952          */
953         public function get_link($key = 0, $rel = 'alternate')
954         {
955                 $links = $this->get_links($rel);
956                 if ($links[$key] !== null)
957                 {
958                         return $links[$key];
959                 }
960                 else
961                 {
962                         return null;
963                 }
964         }
965
966         /**
967          * Get all links for the item
968          *
969          * Uses `<atom:link>`, `<link>` or `<guid>`
970          *
971          * @since Beta 2
972          * @param string $rel The relationship of links to return
973          * @return array|null Links found for the item (strings)
974          */
975         public function get_links($rel = 'alternate')
976         {
977                 if (!isset($this->data['links']))
978                 {
979                         $this->data['links'] = array();
980                         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
981                         {
982                                 if (isset($link['attribs']['']['href']))
983                                 {
984                                         $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
985                                         $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
986
987                                 }
988                         }
989                         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
990                         {
991                                 if (isset($link['attribs']['']['href']))
992                                 {
993                                         $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
994                                         $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
995                                 }
996                         }
997                         if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
998                         {
999                                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1000                         }
1001                         if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
1002                         {
1003                                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1004                         }
1005                         if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
1006                         {
1007                                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1008                         }
1009                         if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
1010                         {
1011                                 if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true')
1012                                 {
1013                                         $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1014                                 }
1015                         }
1016
1017                         $keys = array_keys($this->data['links']);
1018                         foreach ($keys as $key)
1019                         {
1020                                 if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
1021                                 {
1022                                         if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
1023                                         {
1024                                                 $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
1025                                                 $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
1026                                         }
1027                                         else
1028                                         {
1029                                                 $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
1030                                         }
1031                                 }
1032                                 elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
1033                                 {
1034                                         $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
1035                                 }
1036                                 $this->data['links'][$key] = array_unique($this->data['links'][$key]);
1037                         }
1038                 }
1039                 if (isset($this->data['links'][$rel]))
1040                 {
1041                         return $this->data['links'][$rel];
1042                 }
1043                 else
1044                 {
1045                         return null;
1046                 }
1047         }
1048
1049         /**
1050          * Get an enclosure from the item
1051          *
1052          * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
1053          *
1054          * @since Beta 2
1055          * @todo Add ability to prefer one type of content over another (in a media group).
1056          * @param int $key The enclosure that you want to return.  Remember that arrays begin with 0, not 1
1057          * @return SimplePie_Enclosure|null
1058          */
1059         public function get_enclosure($key = 0, $prefer = null)
1060         {
1061                 $enclosures = $this->get_enclosures();
1062                 if (isset($enclosures[$key]))
1063                 {
1064                         return $enclosures[$key];
1065                 }
1066                 else
1067                 {
1068                         return null;
1069                 }
1070         }
1071
1072         /**
1073          * Get all available enclosures (podcasts, etc.)
1074          *
1075          * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
1076          *
1077          * At this point, we're pretty much assuming that all enclosures for an item
1078          * are the same content.  Anything else is too complicated to
1079          * properly support.
1080          *
1081          * @since Beta 2
1082          * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
1083          * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
1084          * @return array|null List of SimplePie_Enclosure items
1085          */
1086         public function get_enclosures()
1087         {
1088                 if (!isset($this->data['enclosures']))
1089                 {
1090                         $this->data['enclosures'] = array();
1091
1092                         // Elements
1093                         $captions_parent = null;
1094                         $categories_parent = null;
1095                         $copyrights_parent = null;
1096                         $credits_parent = null;
1097                         $description_parent = null;
1098                         $duration_parent = null;
1099                         $hashes_parent = null;
1100                         $keywords_parent = null;
1101                         $player_parent = null;
1102                         $ratings_parent = null;
1103                         $restrictions_parent = null;
1104                         $thumbnails_parent = null;
1105                         $title_parent = null;
1106
1107                         // Let's do the channel and item-level ones first, and just re-use them if we need to.
1108                         $parent = $this->get_feed();
1109
1110                         // CAPTIONS
1111                         if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
1112                         {
1113                                 foreach ($captions as $caption)
1114                                 {
1115                                         $caption_type = null;
1116                                         $caption_lang = null;
1117                                         $caption_startTime = null;
1118                                         $caption_endTime = null;
1119                                         $caption_text = null;
1120                                         if (isset($caption['attribs']['']['type']))
1121                                         {
1122                                                 $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1123                                         }
1124                                         if (isset($caption['attribs']['']['lang']))
1125                                         {
1126                                                 $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1127                                         }
1128                                         if (isset($caption['attribs']['']['start']))
1129                                         {
1130                                                 $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1131                                         }
1132                                         if (isset($caption['attribs']['']['end']))
1133                                         {
1134                                                 $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1135                                         }
1136                                         if (isset($caption['data']))
1137                                         {
1138                                                 $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1139                                         }
1140                                         $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1141                                 }
1142                         }
1143                         elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
1144                         {
1145                                 foreach ($captions as $caption)
1146                                 {
1147                                         $caption_type = null;
1148                                         $caption_lang = null;
1149                                         $caption_startTime = null;
1150                                         $caption_endTime = null;
1151                                         $caption_text = null;
1152                                         if (isset($caption['attribs']['']['type']))
1153                                         {
1154                                                 $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1155                                         }
1156                                         if (isset($caption['attribs']['']['lang']))
1157                                         {
1158                                                 $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1159                                         }
1160                                         if (isset($caption['attribs']['']['start']))
1161                                         {
1162                                                 $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1163                                         }
1164                                         if (isset($caption['attribs']['']['end']))
1165                                         {
1166                                                 $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1167                                         }
1168                                         if (isset($caption['data']))
1169                                         {
1170                                                 $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1171                                         }
1172                                         $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1173                                 }
1174                         }
1175                         if (is_array($captions_parent))
1176                         {
1177                                 $captions_parent = array_values(array_unique($captions_parent));
1178                         }
1179
1180                         // CATEGORIES
1181                         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
1182                         {
1183                                 $term = null;
1184                                 $scheme = null;
1185                                 $label = null;
1186                                 if (isset($category['data']))
1187                                 {
1188                                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1189                                 }
1190                                 if (isset($category['attribs']['']['scheme']))
1191                                 {
1192                                         $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1193                                 }
1194                                 else
1195                                 {
1196                                         $scheme = 'http://search.yahoo.com/mrss/category_schema';
1197                                 }
1198                                 if (isset($category['attribs']['']['label']))
1199                                 {
1200                                         $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1201                                 }
1202                                 $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1203                         }
1204                         foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
1205                         {
1206                                 $term = null;
1207                                 $scheme = null;
1208                                 $label = null;
1209                                 if (isset($category['data']))
1210                                 {
1211                                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1212                                 }
1213                                 if (isset($category['attribs']['']['scheme']))
1214                                 {
1215                                         $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1216                                 }
1217                                 else
1218                                 {
1219                                         $scheme = 'http://search.yahoo.com/mrss/category_schema';
1220                                 }
1221                                 if (isset($category['attribs']['']['label']))
1222                                 {
1223                                         $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1224                                 }
1225                                 $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1226                         }
1227                         foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
1228                         {
1229                                 $term = null;
1230                                 $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
1231                                 $label = null;
1232                                 if (isset($category['attribs']['']['text']))
1233                                 {
1234                                         $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
1235                                 }
1236                                 $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1237
1238                                 if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
1239                                 {
1240                                         foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
1241                                         {
1242                                                 if (isset($subcategory['attribs']['']['text']))
1243                                                 {
1244                                                         $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
1245                                                 }
1246                                                 $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1247                                         }
1248                                 }
1249                         }
1250                         if (is_array($categories_parent))
1251                         {
1252                                 $categories_parent = array_values(array_unique($categories_parent));
1253                         }
1254
1255                         // COPYRIGHT
1256                         if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
1257                         {
1258                                 $copyright_url = null;
1259                                 $copyright_label = null;
1260                                 if (isset($copyright[0]['attribs']['']['url']))
1261                                 {
1262                                         $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1263                                 }
1264                                 if (isset($copyright[0]['data']))
1265                                 {
1266                                         $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1267                                 }
1268                                 $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1269                         }
1270                         elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
1271                         {
1272                                 $copyright_url = null;
1273                                 $copyright_label = null;
1274                                 if (isset($copyright[0]['attribs']['']['url']))
1275                                 {
1276                                         $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1277                                 }
1278                                 if (isset($copyright[0]['data']))
1279                                 {
1280                                         $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1281                                 }
1282                                 $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1283                         }
1284
1285                         // CREDITS
1286                         if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
1287                         {
1288                                 foreach ($credits as $credit)
1289                                 {
1290                                         $credit_role = null;
1291                                         $credit_scheme = null;
1292                                         $credit_name = null;
1293                                         if (isset($credit['attribs']['']['role']))
1294                                         {
1295                                                 $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
1296                                         }
1297                                         if (isset($credit['attribs']['']['scheme']))
1298                                         {
1299                                                 $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1300                                         }
1301                                         else
1302                                         {
1303                                                 $credit_scheme = 'urn:ebu';
1304                                         }
1305                                         if (isset($credit['data']))
1306                                         {
1307                                                 $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1308                                         }
1309                                         $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
1310                                 }
1311                         }
1312                         elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
1313                         {
1314                                 foreach ($credits as $credit)
1315                                 {
1316                                         $credit_role = null;
1317                                         $credit_scheme = null;
1318                                         $credit_name = null;
1319                                         if (isset($credit['attribs']['']['role']))
1320                                         {
1321                                                 $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
1322                                         }
1323                                         if (isset($credit['attribs']['']['scheme']))
1324                                         {
1325                                                 $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1326                                         }
1327                                         else
1328                                         {
1329                                                 $credit_scheme = 'urn:ebu';
1330                                         }
1331                                         if (isset($credit['data']))
1332                                         {
1333                                                 $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1334                                         }
1335                                         $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
1336                                 }
1337                         }
1338                         if (is_array($credits_parent))
1339                         {
1340                                 $credits_parent = array_values(array_unique($credits_parent));
1341                         }
1342
1343                         // DESCRIPTION
1344                         if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
1345                         {
1346                                 if (isset($description_parent[0]['data']))
1347                                 {
1348                                         $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1349                                 }
1350                         }
1351                         elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
1352                         {
1353                                 if (isset($description_parent[0]['data']))
1354                                 {
1355                                         $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1356                                 }
1357                         }
1358
1359                         // DURATION
1360                         if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
1361                         {
1362                                 $seconds = null;
1363                                 $minutes = null;
1364                                 $hours = null;
1365                                 if (isset($duration_parent[0]['data']))
1366                                 {
1367                                         $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1368                                         if (sizeof($temp) > 0)
1369                                         {
1370                                                 $seconds = (int) array_pop($temp);
1371                                         }
1372                                         if (sizeof($temp) > 0)
1373                                         {
1374                                                 $minutes = (int) array_pop($temp);
1375                                                 $seconds += $minutes * 60;
1376                                         }
1377                                         if (sizeof($temp) > 0)
1378                                         {
1379                                                 $hours = (int) array_pop($temp);
1380                                                 $seconds += $hours * 3600;
1381                                         }
1382                                         unset($temp);
1383                                         $duration_parent = $seconds;
1384                                 }
1385                         }
1386
1387                         // HASHES
1388                         if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
1389                         {
1390                                 foreach ($hashes_iterator as $hash)
1391                                 {
1392                                         $value = null;
1393                                         $algo = null;
1394                                         if (isset($hash['data']))
1395                                         {
1396                                                 $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1397                                         }
1398                                         if (isset($hash['attribs']['']['algo']))
1399                                         {
1400                                                 $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
1401                                         }
1402                                         else
1403                                         {
1404                                                 $algo = 'md5';
1405                                         }
1406                                         $hashes_parent[] = $algo.':'.$value;
1407                                 }
1408                         }
1409                         elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
1410                         {
1411                                 foreach ($hashes_iterator as $hash)
1412                                 {
1413                                         $value = null;
1414                                         $algo = null;
1415                                         if (isset($hash['data']))
1416                                         {
1417                                                 $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1418                                         }
1419                                         if (isset($hash['attribs']['']['algo']))
1420                                         {
1421                                                 $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
1422                                         }
1423                                         else
1424                                         {
1425                                                 $algo = 'md5';
1426                                         }
1427                                         $hashes_parent[] = $algo.':'.$value;
1428                                 }
1429                         }
1430                         if (is_array($hashes_parent))
1431                         {
1432                                 $hashes_parent = array_values(array_unique($hashes_parent));
1433                         }
1434
1435                         // KEYWORDS
1436                         if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
1437                         {
1438                                 if (isset($keywords[0]['data']))
1439                                 {
1440                                         $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1441                                         foreach ($temp as $word)
1442                                         {
1443                                                 $keywords_parent[] = trim($word);
1444                                         }
1445                                 }
1446                                 unset($temp);
1447                         }
1448                         elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
1449                         {
1450                                 if (isset($keywords[0]['data']))
1451                                 {
1452                                         $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1453                                         foreach ($temp as $word)
1454                                         {
1455                                                 $keywords_parent[] = trim($word);
1456                                         }
1457                                 }
1458                                 unset($temp);
1459                         }
1460                         elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
1461                         {
1462                                 if (isset($keywords[0]['data']))
1463                                 {
1464                                         $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1465                                         foreach ($temp as $word)
1466                                         {
1467                                                 $keywords_parent[] = trim($word);
1468                                         }
1469                                 }
1470                                 unset($temp);
1471                         }
1472                         elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
1473                         {
1474                                 if (isset($keywords[0]['data']))
1475                                 {
1476                                         $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1477                                         foreach ($temp as $word)
1478                                         {
1479                                                 $keywords_parent[] = trim($word);
1480                                         }
1481                                 }
1482                                 unset($temp);
1483                         }
1484                         if (is_array($keywords_parent))
1485                         {
1486                                 $keywords_parent = array_values(array_unique($keywords_parent));
1487                         }
1488
1489                         // PLAYER
1490                         if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
1491                         {
1492                                 if (isset($player_parent[0]['attribs']['']['url']))
1493                                 {
1494                                         $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1495                                 }
1496                         }
1497                         elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
1498                         {
1499                                 if (isset($player_parent[0]['attribs']['']['url']))
1500                                 {
1501                                         $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1502                                 }
1503                         }
1504
1505                         // RATINGS
1506                         if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
1507                         {
1508                                 foreach ($ratings as $rating)
1509                                 {
1510                                         $rating_scheme = null;
1511                                         $rating_value = null;
1512                                         if (isset($rating['attribs']['']['scheme']))
1513                                         {
1514                                                 $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1515                                         }
1516                                         else
1517                                         {
1518                                                 $rating_scheme = 'urn:simple';
1519                                         }
1520                                         if (isset($rating['data']))
1521                                         {
1522                                                 $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1523                                         }
1524                                         $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1525                                 }
1526                         }
1527                         elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
1528                         {
1529                                 foreach ($ratings as $rating)
1530                                 {
1531                                         $rating_scheme = 'urn:itunes';
1532                                         $rating_value = null;
1533                                         if (isset($rating['data']))
1534                                         {
1535                                                 $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1536                                         }
1537                                         $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1538                                 }
1539                         }
1540                         elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
1541                         {
1542                                 foreach ($ratings as $rating)
1543                                 {
1544                                         $rating_scheme = null;
1545                                         $rating_value = null;
1546                                         if (isset($rating['attribs']['']['scheme']))
1547                                         {
1548                                                 $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1549                                         }
1550                                         else
1551                                         {
1552                                                 $rating_scheme = 'urn:simple';
1553                                         }
1554                                         if (isset($rating['data']))
1555                                         {
1556                                                 $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1557                                         }
1558                                         $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1559                                 }
1560                         }
1561                         elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
1562                         {
1563                                 foreach ($ratings as $rating)
1564                                 {
1565                                         $rating_scheme = 'urn:itunes';
1566                                         $rating_value = null;
1567                                         if (isset($rating['data']))
1568                                         {
1569                                                 $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1570                                         }
1571                                         $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1572                                 }
1573                         }
1574                         if (is_array($ratings_parent))
1575                         {
1576                                 $ratings_parent = array_values(array_unique($ratings_parent));
1577                         }
1578
1579                         // RESTRICTIONS
1580                         if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
1581                         {
1582                                 foreach ($restrictions as $restriction)
1583                                 {
1584                                         $restriction_relationship = null;
1585                                         $restriction_type = null;
1586                                         $restriction_value = null;
1587                                         if (isset($restriction['attribs']['']['relationship']))
1588                                         {
1589                                                 $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
1590                                         }
1591                                         if (isset($restriction['attribs']['']['type']))
1592                                         {
1593                                                 $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1594                                         }
1595                                         if (isset($restriction['data']))
1596                                         {
1597                                                 $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1598                                         }
1599                                         $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1600                                 }
1601                         }
1602                         elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
1603                         {
1604                                 foreach ($restrictions as $restriction)
1605                                 {
1606                                         $restriction_relationship = 'allow';
1607                                         $restriction_type = null;
1608                                         $restriction_value = 'itunes';
1609                                         if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
1610                                         {
1611                                                 $restriction_relationship = 'deny';
1612                                         }
1613                                         $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1614                                 }
1615                         }
1616                         elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
1617                         {
1618                                 foreach ($restrictions as $restriction)
1619                                 {
1620                                         $restriction_relationship = null;
1621                                         $restriction_type = null;
1622                                         $restriction_value = null;
1623                                         if (isset($restriction['attribs']['']['relationship']))
1624                                         {
1625                                                 $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
1626                                         }
1627                                         if (isset($restriction['attribs']['']['type']))
1628                                         {
1629                                                 $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1630                                         }
1631                                         if (isset($restriction['data']))
1632                                         {
1633                                                 $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1634                                         }
1635                                         $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1636                                 }
1637                         }
1638                         elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
1639                         {
1640                                 foreach ($restrictions as $restriction)
1641                                 {
1642                                         $restriction_relationship = 'allow';
1643                                         $restriction_type = null;
1644                                         $restriction_value = 'itunes';
1645                                         if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
1646                                         {
1647                                                 $restriction_relationship = 'deny';
1648                                         }
1649                                         $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1650                                 }
1651                         }
1652                         if (is_array($restrictions_parent))
1653                         {
1654                                 $restrictions_parent = array_values(array_unique($restrictions_parent));
1655                         }
1656                         else
1657                         {
1658                                 $restrictions_parent = array(new SimplePie_Restriction('allow', null, 'default'));
1659                         }
1660
1661                         // THUMBNAILS
1662                         if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
1663                         {
1664                                 foreach ($thumbnails as $thumbnail)
1665                                 {
1666                                         if (isset($thumbnail['attribs']['']['url']))
1667                                         {
1668                                                 $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1669                                         }
1670                                 }
1671                         }
1672                         elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
1673                         {
1674                                 foreach ($thumbnails as $thumbnail)
1675                                 {
1676                                         if (isset($thumbnail['attribs']['']['url']))
1677                                         {
1678                                                 $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1679                                         }
1680                                 }
1681                         }
1682
1683                         // TITLES
1684                         if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
1685                         {
1686                                 if (isset($title_parent[0]['data']))
1687                                 {
1688                                         $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1689                                 }
1690                         }
1691                         elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
1692                         {
1693                                 if (isset($title_parent[0]['data']))
1694                                 {
1695                                         $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1696                                 }
1697                         }
1698
1699                         // Clear the memory
1700                         unset($parent);
1701
1702                         // Attributes
1703                         $bitrate = null;
1704                         $channels = null;
1705                         $duration = null;
1706                         $expression = null;
1707                         $framerate = null;
1708                         $height = null;
1709                         $javascript = null;
1710                         $lang = null;
1711                         $length = null;
1712                         $medium = null;
1713                         $samplingrate = null;
1714                         $type = null;
1715                         $url = null;
1716                         $width = null;
1717
1718                         // Elements
1719                         $captions = null;
1720                         $categories = null;
1721                         $copyrights = null;
1722                         $credits = null;
1723                         $description = null;
1724                         $hashes = null;
1725                         $keywords = null;
1726                         $player = null;
1727                         $ratings = null;
1728                         $restrictions = null;
1729                         $thumbnails = null;
1730                         $title = null;
1731
1732                         // If we have media:group tags, loop through them.
1733                         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
1734                         {
1735                                 if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
1736                                 {
1737                                         // If we have media:content tags, loop through them.
1738                                         foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
1739                                         {
1740                                                 if (isset($content['attribs']['']['url']))
1741                                                 {
1742                                                         // Attributes
1743                                                         $bitrate = null;
1744                                                         $channels = null;
1745                                                         $duration = null;
1746                                                         $expression = null;
1747                                                         $framerate = null;
1748                                                         $height = null;
1749                                                         $javascript = null;
1750                                                         $lang = null;
1751                                                         $length = null;
1752                                                         $medium = null;
1753                                                         $samplingrate = null;
1754                                                         $type = null;
1755                                                         $url = null;
1756                                                         $width = null;
1757
1758                                                         // Elements
1759                                                         $captions = null;
1760                                                         $categories = null;
1761                                                         $copyrights = null;
1762                                                         $credits = null;
1763                                                         $description = null;
1764                                                         $hashes = null;
1765                                                         $keywords = null;
1766                                                         $player = null;
1767                                                         $ratings = null;
1768                                                         $restrictions = null;
1769                                                         $thumbnails = null;
1770                                                         $title = null;
1771
1772                                                         // Start checking the attributes of media:content
1773                                                         if (isset($content['attribs']['']['bitrate']))
1774                                                         {
1775                                                                 $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
1776                                                         }
1777                                                         if (isset($content['attribs']['']['channels']))
1778                                                         {
1779                                                                 $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
1780                                                         }
1781                                                         if (isset($content['attribs']['']['duration']))
1782                                                         {
1783                                                                 $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
1784                                                         }
1785                                                         else
1786                                                         {
1787                                                                 $duration = $duration_parent;
1788                                                         }
1789                                                         if (isset($content['attribs']['']['expression']))
1790                                                         {
1791                                                                 $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
1792                                                         }
1793                                                         if (isset($content['attribs']['']['framerate']))
1794                                                         {
1795                                                                 $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
1796                                                         }
1797                                                         if (isset($content['attribs']['']['height']))
1798                                                         {
1799                                                                 $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
1800                                                         }
1801                                                         if (isset($content['attribs']['']['lang']))
1802                                                         {
1803                                                                 $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1804                                                         }
1805                                                         if (isset($content['attribs']['']['fileSize']))
1806                                                         {
1807                                                                 $length = ceil($content['attribs']['']['fileSize']);
1808                                                         }
1809                                                         if (isset($content['attribs']['']['medium']))
1810                                                         {
1811                                                                 $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
1812                                                         }
1813                                                         if (isset($content['attribs']['']['samplingrate']))
1814                                                         {
1815                                                                 $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
1816                                                         }
1817                                                         if (isset($content['attribs']['']['type']))
1818                                                         {
1819                                                                 $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1820                                                         }
1821                                                         if (isset($content['attribs']['']['width']))
1822                                                         {
1823                                                                 $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
1824                                                         }
1825                                                         $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1826
1827                                                         // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
1828
1829                                                         // CAPTIONS
1830                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
1831                                                         {
1832                                                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
1833                                                                 {
1834                                                                         $caption_type = null;
1835                                                                         $caption_lang = null;
1836                                                                         $caption_startTime = null;
1837                                                                         $caption_endTime = null;
1838                                                                         $caption_text = null;
1839                                                                         if (isset($caption['attribs']['']['type']))
1840                                                                         {
1841                                                                                 $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1842                                                                         }
1843                                                                         if (isset($caption['attribs']['']['lang']))
1844                                                                         {
1845                                                                                 $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1846                                                                         }
1847                                                                         if (isset($caption['attribs']['']['start']))
1848                                                                         {
1849                                                                                 $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1850                                                                         }
1851                                                                         if (isset($caption['attribs']['']['end']))
1852                                                                         {
1853                                                                                 $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1854                                                                         }
1855                                                                         if (isset($caption['data']))
1856                                                                         {
1857                                                                                 $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1858                                                                         }
1859                                                                         $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1860                                                                 }
1861                                                                 if (is_array($captions))
1862                                                                 {
1863                                                                         $captions = array_values(array_unique($captions));
1864                                                                 }
1865                                                         }
1866                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
1867                                                         {
1868                                                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
1869                                                                 {
1870                                                                         $caption_type = null;
1871                                                                         $caption_lang = null;
1872                                                                         $caption_startTime = null;
1873                                                                         $caption_endTime = null;
1874                                                                         $caption_text = null;
1875                                                                         if (isset($caption['attribs']['']['type']))
1876                                                                         {
1877                                                                                 $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1878                                                                         }
1879                                                                         if (isset($caption['attribs']['']['lang']))
1880                                                                         {
1881                                                                                 $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1882                                                                         }
1883                                                                         if (isset($caption['attribs']['']['start']))
1884                                                                         {
1885                                                                                 $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1886                                                                         }
1887                                                                         if (isset($caption['attribs']['']['end']))
1888                                                                         {
1889                                                                                 $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1890                                                                         }
1891                                                                         if (isset($caption['data']))
1892                                                                         {
1893                                                                                 $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1894                                                                         }
1895                                                                         $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1896                                                                 }
1897                                                                 if (is_array($captions))
1898                                                                 {
1899                                                                         $captions = array_values(array_unique($captions));
1900                                                                 }
1901                                                         }
1902                                                         else
1903                                                         {
1904                                                                 $captions = $captions_parent;
1905                                                         }
1906
1907                                                         // CATEGORIES
1908                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
1909                                                         {
1910                                                                 foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
1911                                                                 {
1912                                                                         $term = null;
1913                                                                         $scheme = null;
1914                                                                         $label = null;
1915                                                                         if (isset($category['data']))
1916                                                                         {
1917                                                                                 $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1918                                                                         }
1919                                                                         if (isset($category['attribs']['']['scheme']))
1920                                                                         {
1921                                                                                 $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1922                                                                         }
1923                                                                         else
1924                                                                         {
1925                                                                                 $scheme = 'http://search.yahoo.com/mrss/category_schema';
1926                                                                         }
1927                                                                         if (isset($category['attribs']['']['label']))
1928                                                                         {
1929                                                                                 $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1930                                                                         }
1931                                                                         $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
1932                                                                 }
1933                                                         }
1934                                                         if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
1935                                                         {
1936                                                                 foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
1937                                                                 {
1938                                                                         $term = null;
1939                                                                         $scheme = null;
1940                                                                         $label = null;
1941                                                                         if (isset($category['data']))
1942                                                                         {
1943                                                                                 $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1944                                                                         }
1945                                                                         if (isset($category['attribs']['']['scheme']))
1946                                                                         {
1947                                                                                 $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1948                                                                         }
1949                                                                         else
1950                                                                         {
1951                                                                                 $scheme = 'http://search.yahoo.com/mrss/category_schema';
1952                                                                         }
1953                                                                         if (isset($category['attribs']['']['label']))
1954                                                                         {
1955                                                                                 $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1956                                                                         }
1957                                                                         $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
1958                                                                 }
1959                                                         }
1960                                                         if (is_array($categories) && is_array($categories_parent))
1961                                                         {
1962                                                                 $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
1963                                                         }
1964                                                         elseif (is_array($categories))
1965                                                         {
1966                                                                 $categories = array_values(array_unique($categories));
1967                                                         }
1968                                                         elseif (is_array($categories_parent))
1969                                                         {
1970                                                                 $categories = array_values(array_unique($categories_parent));
1971                                                         }
1972
1973                                                         // COPYRIGHTS
1974                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
1975                                                         {
1976                                                                 $copyright_url = null;
1977                                                                 $copyright_label = null;
1978                                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
1979                                                                 {
1980                                                                         $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1981                                                                 }
1982                                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
1983                                                                 {
1984                                                                         $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1985                                                                 }
1986                                                                 $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1987                                                         }
1988                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
1989                                                         {
1990                                                                 $copyright_url = null;
1991                                                                 $copyright_label = null;
1992                                                                 if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
1993                                                                 {
1994                                                                         $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1995                                                                 }
1996                                                                 if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
1997                                                                 {
1998                                                                         $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1999                                                                 }
2000                                                                 $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
2001                                                         }
2002                                                         else
2003                                                         {
2004                                                                 $copyrights = $copyrights_parent;
2005                                                         }
2006
2007                                                         // CREDITS
2008                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2009                                                         {
2010                                                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2011                                                                 {
2012                                                                         $credit_role = null;
2013                                                                         $credit_scheme = null;
2014                                                                         $credit_name = null;
2015                                                                         if (isset($credit['attribs']['']['role']))
2016                                                                         {
2017                                                                                 $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2018                                                                         }
2019                                                                         if (isset($credit['attribs']['']['scheme']))
2020                                                                         {
2021                                                                                 $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2022                                                                         }
2023                                                                         else
2024                                                                         {
2025                                                                                 $credit_scheme = 'urn:ebu';
2026                                                                         }
2027                                                                         if (isset($credit['data']))
2028                                                                         {
2029                                                                                 $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2030                                                                         }
2031                                                                         $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2032                                                                 }
2033                                                                 if (is_array($credits))
2034                                                                 {
2035                                                                         $credits = array_values(array_unique($credits));
2036                                                                 }
2037                                                         }
2038                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2039                                                         {
2040                                                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2041                                                                 {
2042                                                                         $credit_role = null;
2043                                                                         $credit_scheme = null;
2044                                                                         $credit_name = null;
2045                                                                         if (isset($credit['attribs']['']['role']))
2046                                                                         {
2047                                                                                 $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2048                                                                         }
2049                                                                         if (isset($credit['attribs']['']['scheme']))
2050                                                                         {
2051                                                                                 $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2052                                                                         }
2053                                                                         else
2054                                                                         {
2055                                                                                 $credit_scheme = 'urn:ebu';
2056                                                                         }
2057                                                                         if (isset($credit['data']))
2058                                                                         {
2059                                                                                 $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2060                                                                         }
2061                                                                         $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2062                                                                 }
2063                                                                 if (is_array($credits))
2064                                                                 {
2065                                                                         $credits = array_values(array_unique($credits));
2066                                                                 }
2067                                                         }
2068                                                         else
2069                                                         {
2070                                                                 $credits = $credits_parent;
2071                                                         }
2072
2073                                                         // DESCRIPTION
2074                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2075                                                         {
2076                                                                 $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2077                                                         }
2078                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2079                                                         {
2080                                                                 $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2081                                                         }
2082                                                         else
2083                                                         {
2084                                                                 $description = $description_parent;
2085                                                         }
2086
2087                                                         // HASHES
2088                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2089                                                         {
2090                                                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2091                                                                 {
2092                                                                         $value = null;
2093                                                                         $algo = null;
2094                                                                         if (isset($hash['data']))
2095                                                                         {
2096                                                                                 $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2097                                                                         }
2098                                                                         if (isset($hash['attribs']['']['algo']))
2099                                                                         {
2100                                                                                 $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2101                                                                         }
2102                                                                         else
2103                                                                         {
2104                                                                                 $algo = 'md5';
2105                                                                         }
2106                                                                         $hashes[] = $algo.':'.$value;
2107                                                                 }
2108                                                                 if (is_array($hashes))
2109                                                                 {
2110                                                                         $hashes = array_values(array_unique($hashes));
2111                                                                 }
2112                                                         }
2113                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2114                                                         {
2115                                                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2116                                                                 {
2117                                                                         $value = null;
2118                                                                         $algo = null;
2119                                                                         if (isset($hash['data']))
2120                                                                         {
2121                                                                                 $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2122                                                                         }
2123                                                                         if (isset($hash['attribs']['']['algo']))
2124                                                                         {
2125                                                                                 $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2126                                                                         }
2127                                                                         else
2128                                                                         {
2129                                                                                 $algo = 'md5';
2130                                                                         }
2131                                                                         $hashes[] = $algo.':'.$value;
2132                                                                 }
2133                                                                 if (is_array($hashes))
2134                                                                 {
2135                                                                         $hashes = array_values(array_unique($hashes));
2136                                                                 }
2137                                                         }
2138                                                         else
2139                                                         {
2140                                                                 $hashes = $hashes_parent;
2141                                                         }
2142
2143                                                         // KEYWORDS
2144                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2145                                                         {
2146                                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2147                                                                 {
2148                                                                         $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2149                                                                         foreach ($temp as $word)
2150                                                                         {
2151                                                                                 $keywords[] = trim($word);
2152                                                                         }
2153                                                                         unset($temp);
2154                                                                 }
2155                                                                 if (is_array($keywords))
2156                                                                 {
2157                                                                         $keywords = array_values(array_unique($keywords));
2158                                                                 }
2159                                                         }
2160                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2161                                                         {
2162                                                                 if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2163                                                                 {
2164                                                                         $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2165                                                                         foreach ($temp as $word)
2166                                                                         {
2167                                                                                 $keywords[] = trim($word);
2168                                                                         }
2169                                                                         unset($temp);
2170                                                                 }
2171                                                                 if (is_array($keywords))
2172                                                                 {
2173                                                                         $keywords = array_values(array_unique($keywords));
2174                                                                 }
2175                                                         }
2176                                                         else
2177                                                         {
2178                                                                 $keywords = $keywords_parent;
2179                                                         }
2180
2181                                                         // PLAYER
2182                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2183                                                         {
2184                                                                 $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2185                                                         }
2186                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2187                                                         {
2188                                                                 $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2189                                                         }
2190                                                         else
2191                                                         {
2192                                                                 $player = $player_parent;
2193                                                         }
2194
2195                                                         // RATINGS
2196                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2197                                                         {
2198                                                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2199                                                                 {
2200                                                                         $rating_scheme = null;
2201                                                                         $rating_value = null;
2202                                                                         if (isset($rating['attribs']['']['scheme']))
2203                                                                         {
2204                                                                                 $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2205                                                                         }
2206                                                                         else
2207                                                                         {
2208                                                                                 $rating_scheme = 'urn:simple';
2209                                                                         }
2210                                                                         if (isset($rating['data']))
2211                                                                         {
2212                                                                                 $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2213                                                                         }
2214                                                                         $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2215                                                                 }
2216                                                                 if (is_array($ratings))
2217                                                                 {
2218                                                                         $ratings = array_values(array_unique($ratings));
2219                                                                 }
2220                                                         }
2221                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2222                                                         {
2223                                                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2224                                                                 {
2225                                                                         $rating_scheme = null;
2226                                                                         $rating_value = null;
2227                                                                         if (isset($rating['attribs']['']['scheme']))
2228                                                                         {
2229                                                                                 $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2230                                                                         }
2231                                                                         else
2232                                                                         {
2233                                                                                 $rating_scheme = 'urn:simple';
2234                                                                         }
2235                                                                         if (isset($rating['data']))
2236                                                                         {
2237                                                                                 $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2238                                                                         }
2239                                                                         $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2240                                                                 }
2241                                                                 if (is_array($ratings))
2242                                                                 {
2243                                                                         $ratings = array_values(array_unique($ratings));
2244                                                                 }
2245                                                         }
2246                                                         else
2247                                                         {
2248                                                                 $ratings = $ratings_parent;
2249                                                         }
2250
2251                                                         // RESTRICTIONS
2252                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2253                                                         {
2254                                                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2255                                                                 {
2256                                                                         $restriction_relationship = null;
2257                                                                         $restriction_type = null;
2258                                                                         $restriction_value = null;
2259                                                                         if (isset($restriction['attribs']['']['relationship']))
2260                                                                         {
2261                                                                                 $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2262                                                                         }
2263                                                                         if (isset($restriction['attribs']['']['type']))
2264                                                                         {
2265                                                                                 $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2266                                                                         }
2267                                                                         if (isset($restriction['data']))
2268                                                                         {
2269                                                                                 $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2270                                                                         }
2271                                                                         $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2272                                                                 }
2273                                                                 if (is_array($restrictions))
2274                                                                 {
2275                                                                         $restrictions = array_values(array_unique($restrictions));
2276                                                                 }
2277                                                         }
2278                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2279                                                         {
2280                                                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2281                                                                 {
2282                                                                         $restriction_relationship = null;
2283                                                                         $restriction_type = null;
2284                                                                         $restriction_value = null;
2285                                                                         if (isset($restriction['attribs']['']['relationship']))
2286                                                                         {
2287                                                                                 $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2288                                                                         }
2289                                                                         if (isset($restriction['attribs']['']['type']))
2290                                                                         {
2291                                                                                 $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2292                                                                         }
2293                                                                         if (isset($restriction['data']))
2294                                                                         {
2295                                                                                 $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2296                                                                         }
2297                                                                         $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2298                                                                 }
2299                                                                 if (is_array($restrictions))
2300                                                                 {
2301                                                                         $restrictions = array_values(array_unique($restrictions));
2302                                                                 }
2303                                                         }
2304                                                         else
2305                                                         {
2306                                                                 $restrictions = $restrictions_parent;
2307                                                         }
2308
2309                                                         // THUMBNAILS
2310                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2311                                                         {
2312                                                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2313                                                                 {
2314                                                                         $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2315                                                                 }
2316                                                                 if (is_array($thumbnails))
2317                                                                 {
2318                                                                         $thumbnails = array_values(array_unique($thumbnails));
2319                                                                 }
2320                                                         }
2321                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2322                                                         {
2323                                                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2324                                                                 {
2325                                                                         $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2326                                                                 }
2327                                                                 if (is_array($thumbnails))
2328                                                                 {
2329                                                                         $thumbnails = array_values(array_unique($thumbnails));
2330                                                                 }
2331                                                         }
2332                                                         else
2333                                                         {
2334                                                                 $thumbnails = $thumbnails_parent;
2335                                                         }
2336
2337                                                         // TITLES
2338                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2339                                                         {
2340                                                                 $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2341                                                         }
2342                                                         elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2343                                                         {
2344                                                                 $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2345                                                         }
2346                                                         else
2347                                                         {
2348                                                                 $title = $title_parent;
2349                                                         }
2350
2351                                                         $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
2352                                                 }
2353                                         }
2354                                 }
2355                         }
2356
2357                         // If we have standalone media:content tags, loop through them.
2358                         if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
2359                         {
2360                                 foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
2361                                 {
2362                                         if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2363                                         {
2364                                                 // Attributes
2365                                                 $bitrate = null;
2366                                                 $channels = null;
2367                                                 $duration = null;
2368                                                 $expression = null;
2369                                                 $framerate = null;
2370                                                 $height = null;
2371                                                 $javascript = null;
2372                                                 $lang = null;
2373                                                 $length = null;
2374                                                 $medium = null;
2375                                                 $samplingrate = null;
2376                                                 $type = null;
2377                                                 $url = null;
2378                                                 $width = null;
2379
2380                                                 // Elements
2381                                                 $captions = null;
2382                                                 $categories = null;
2383                                                 $copyrights = null;
2384                                                 $credits = null;
2385                                                 $description = null;
2386                                                 $hashes = null;
2387                                                 $keywords = null;
2388                                                 $player = null;
2389                                                 $ratings = null;
2390                                                 $restrictions = null;
2391                                                 $thumbnails = null;
2392                                                 $title = null;
2393
2394                                                 // Start checking the attributes of media:content
2395                                                 if (isset($content['attribs']['']['bitrate']))
2396                                                 {
2397                                                         $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
2398                                                 }
2399                                                 if (isset($content['attribs']['']['channels']))
2400                                                 {
2401                                                         $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
2402                                                 }
2403                                                 if (isset($content['attribs']['']['duration']))
2404                                                 {
2405                                                         $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
2406                                                 }
2407                                                 else
2408                                                 {
2409                                                         $duration = $duration_parent;
2410                                                 }
2411                                                 if (isset($content['attribs']['']['expression']))
2412                                                 {
2413                                                         $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
2414                                                 }
2415                                                 if (isset($content['attribs']['']['framerate']))
2416                                                 {
2417                                                         $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
2418                                                 }
2419                                                 if (isset($content['attribs']['']['height']))
2420                                                 {
2421                                                         $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
2422                                                 }
2423                                                 if (isset($content['attribs']['']['lang']))
2424                                                 {
2425                                                         $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
2426                                                 }
2427                                                 if (isset($content['attribs']['']['fileSize']))
2428                                                 {
2429                                                         $length = ceil($content['attribs']['']['fileSize']);
2430                                                 }
2431                                                 if (isset($content['attribs']['']['medium']))
2432                                                 {
2433                                                         $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
2434                                                 }
2435                                                 if (isset($content['attribs']['']['samplingrate']))
2436                                                 {
2437                                                         $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
2438                                                 }
2439                                                 if (isset($content['attribs']['']['type']))
2440                                                 {
2441                                                         $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2442                                                 }
2443                                                 if (isset($content['attribs']['']['width']))
2444                                                 {
2445                                                         $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
2446                                                 }
2447                                                 if (isset($content['attribs']['']['url']))
2448                                                 {
2449                                                         $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2450                                                 }
2451                                                 // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
2452
2453                                                 // CAPTIONS
2454                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
2455                                                 {
2456                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
2457                                                         {
2458                                                                 $caption_type = null;
2459                                                                 $caption_lang = null;
2460                                                                 $caption_startTime = null;
2461                                                                 $caption_endTime = null;
2462                                                                 $caption_text = null;
2463                                                                 if (isset($caption['attribs']['']['type']))
2464                                                                 {
2465                                                                         $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2466                                                                 }
2467                                                                 if (isset($caption['attribs']['']['lang']))
2468                                                                 {
2469                                                                         $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
2470                                                                 }
2471                                                                 if (isset($caption['attribs']['']['start']))
2472                                                                 {
2473                                                                         $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
2474                                                                 }
2475                                                                 if (isset($caption['attribs']['']['end']))
2476                                                                 {
2477                                                                         $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
2478                                                                 }
2479                                                                 if (isset($caption['data']))
2480                                                                 {
2481                                                                         $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2482                                                                 }
2483                                                                 $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
2484                                                         }
2485                                                         if (is_array($captions))
2486                                                         {
2487                                                                 $captions = array_values(array_unique($captions));
2488                                                         }
2489                                                 }
2490                                                 else
2491                                                 {
2492                                                         $captions = $captions_parent;
2493                                                 }
2494
2495                                                 // CATEGORIES
2496                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
2497                                                 {
2498                                                         foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
2499                                                         {
2500                                                                 $term = null;
2501                                                                 $scheme = null;
2502                                                                 $label = null;
2503                                                                 if (isset($category['data']))
2504                                                                 {
2505                                                                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2506                                                                 }
2507                                                                 if (isset($category['attribs']['']['scheme']))
2508                                                                 {
2509                                                                         $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2510                                                                 }
2511                                                                 else
2512                                                                 {
2513                                                                         $scheme = 'http://search.yahoo.com/mrss/category_schema';
2514                                                                 }
2515                                                                 if (isset($category['attribs']['']['label']))
2516                                                                 {
2517                                                                         $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
2518                                                                 }
2519                                                                 $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
2520                                                         }
2521                                                 }
2522                                                 if (is_array($categories) && is_array($categories_parent))
2523                                                 {
2524                                                         $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
2525                                                 }
2526                                                 elseif (is_array($categories))
2527                                                 {
2528                                                         $categories = array_values(array_unique($categories));
2529                                                 }
2530                                                 elseif (is_array($categories_parent))
2531                                                 {
2532                                                         $categories = array_values(array_unique($categories_parent));
2533                                                 }
2534                                                 else
2535                                                 {
2536                                                         $categories = null;
2537                                                 }
2538
2539                                                 // COPYRIGHTS
2540                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
2541                                                 {
2542                                                         $copyright_url = null;
2543                                                         $copyright_label = null;
2544                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
2545                                                         {
2546                                                                 $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
2547                                                         }
2548                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
2549                                                         {
2550                                                                 $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2551                                                         }
2552                                                         $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
2553                                                 }
2554                                                 else
2555                                                 {
2556                                                         $copyrights = $copyrights_parent;
2557                                                 }
2558
2559                                                 // CREDITS
2560                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2561                                                 {
2562                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2563                                                         {
2564                                                                 $credit_role = null;
2565                                                                 $credit_scheme = null;
2566                                                                 $credit_name = null;
2567                                                                 if (isset($credit['attribs']['']['role']))
2568                                                                 {
2569                                                                         $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2570                                                                 }
2571                                                                 if (isset($credit['attribs']['']['scheme']))
2572                                                                 {
2573                                                                         $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2574                                                                 }
2575                                                                 else
2576                                                                 {
2577                                                                         $credit_scheme = 'urn:ebu';
2578                                                                 }
2579                                                                 if (isset($credit['data']))
2580                                                                 {
2581                                                                         $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2582                                                                 }
2583                                                                 $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2584                                                         }
2585                                                         if (is_array($credits))
2586                                                         {
2587                                                                 $credits = array_values(array_unique($credits));
2588                                                         }
2589                                                 }
2590                                                 else
2591                                                 {
2592                                                         $credits = $credits_parent;
2593                                                 }
2594
2595                                                 // DESCRIPTION
2596                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2597                                                 {
2598                                                         $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2599                                                 }
2600                                                 else
2601                                                 {
2602                                                         $description = $description_parent;
2603                                                 }
2604
2605                                                 // HASHES
2606                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2607                                                 {
2608                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2609                                                         {
2610                                                                 $value = null;
2611                                                                 $algo = null;
2612                                                                 if (isset($hash['data']))
2613                                                                 {
2614                                                                         $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2615                                                                 }
2616                                                                 if (isset($hash['attribs']['']['algo']))
2617                                                                 {
2618                                                                         $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2619                                                                 }
2620                                                                 else
2621                                                                 {
2622                                                                         $algo = 'md5';
2623                                                                 }
2624                                                                 $hashes[] = $algo.':'.$value;
2625                                                         }
2626                                                         if (is_array($hashes))
2627                                                         {
2628                                                                 $hashes = array_values(array_unique($hashes));
2629                                                         }
2630                                                 }
2631                                                 else
2632                                                 {
2633                                                         $hashes = $hashes_parent;
2634                                                 }
2635
2636                                                 // KEYWORDS
2637                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2638                                                 {
2639                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2640                                                         {
2641                                                                 $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2642                                                                 foreach ($temp as $word)
2643                                                                 {
2644                                                                         $keywords[] = trim($word);
2645                                                                 }
2646                                                                 unset($temp);
2647                                                         }
2648                                                         if (is_array($keywords))
2649                                                         {
2650                                                                 $keywords = array_values(array_unique($keywords));
2651                                                         }
2652                                                 }
2653                                                 else
2654                                                 {
2655                                                         $keywords = $keywords_parent;
2656                                                 }
2657
2658                                                 // PLAYER
2659                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2660                                                 {
2661                                                         $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2662                                                 }
2663                                                 else
2664                                                 {
2665                                                         $player = $player_parent;
2666                                                 }
2667
2668                                                 // RATINGS
2669                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2670                                                 {
2671                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2672                                                         {
2673                                                                 $rating_scheme = null;
2674                                                                 $rating_value = null;
2675                                                                 if (isset($rating['attribs']['']['scheme']))
2676                                                                 {
2677                                                                         $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2678                                                                 }
2679                                                                 else
2680                                                                 {
2681                                                                         $rating_scheme = 'urn:simple';
2682                                                                 }
2683                                                                 if (isset($rating['data']))
2684                                                                 {
2685                                                                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2686                                                                 }
2687                                                                 $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2688                                                         }
2689                                                         if (is_array($ratings))
2690                                                         {
2691                                                                 $ratings = array_values(array_unique($ratings));
2692                                                         }
2693                                                 }
2694                                                 else
2695                                                 {
2696                                                         $ratings = $ratings_parent;
2697                                                 }
2698
2699                                                 // RESTRICTIONS
2700                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2701                                                 {
2702                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2703                                                         {
2704                                                                 $restriction_relationship = null;
2705                                                                 $restriction_type = null;
2706                                                                 $restriction_value = null;
2707                                                                 if (isset($restriction['attribs']['']['relationship']))
2708                                                                 {
2709                                                                         $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2710                                                                 }
2711                                                                 if (isset($restriction['attribs']['']['type']))
2712                                                                 {
2713                                                                         $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2714                                                                 }
2715                                                                 if (isset($restriction['data']))
2716                                                                 {
2717                                                                         $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2718                                                                 }
2719                                                                 $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2720                                                         }
2721                                                         if (is_array($restrictions))
2722                                                         {
2723                                                                 $restrictions = array_values(array_unique($restrictions));
2724                                                         }
2725                                                 }
2726                                                 else
2727                                                 {
2728                                                         $restrictions = $restrictions_parent;
2729                                                 }
2730
2731                                                 // THUMBNAILS
2732                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2733                                                 {
2734                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2735                                                         {
2736                                                                 $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2737                                                         }
2738                                                         if (is_array($thumbnails))
2739                                                         {
2740                                                                 $thumbnails = array_values(array_unique($thumbnails));
2741                                                         }
2742                                                 }
2743                                                 else
2744                                                 {
2745                                                         $thumbnails = $thumbnails_parent;
2746                                                 }
2747
2748                                                 // TITLES
2749                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2750                                                 {
2751                                                         $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2752                                                 }
2753                                                 else
2754                                                 {
2755                                                         $title = $title_parent;
2756                                                 }
2757
2758                                                 $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
2759                                         }
2760                                 }
2761                         }
2762
2763                         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
2764                         {
2765                                 if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
2766                                 {
2767                                         // Attributes
2768                                         $bitrate = null;
2769                                         $channels = null;
2770                                         $duration = null;
2771                                         $expression = null;
2772                                         $framerate = null;
2773                                         $height = null;
2774                                         $javascript = null;
2775                                         $lang = null;
2776                                         $length = null;
2777                                         $medium = null;
2778                                         $samplingrate = null;
2779                                         $type = null;
2780                                         $url = null;
2781                                         $width = null;
2782
2783                                         $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
2784                                         if (isset($link['attribs']['']['type']))
2785                                         {
2786                                                 $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2787                                         }
2788                                         if (isset($link['attribs']['']['length']))
2789                                         {
2790                                                 $length = ceil($link['attribs']['']['length']);
2791                                         }
2792
2793                                         // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2794                                         $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2795                                 }
2796                         }
2797
2798                         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
2799                         {
2800                                 if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
2801                                 {
2802                                         // Attributes
2803                                         $bitrate = null;
2804                                         $channels = null;
2805                                         $duration = null;
2806                                         $expression = null;
2807                                         $framerate = null;
2808                                         $height = null;
2809                                         $javascript = null;
2810                                         $lang = null;
2811                                         $length = null;
2812                                         $medium = null;
2813                                         $samplingrate = null;
2814                                         $type = null;
2815                                         $url = null;
2816                                         $width = null;
2817
2818                                         $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
2819                                         if (isset($link['attribs']['']['type']))
2820                                         {
2821                                                 $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2822                                         }
2823                                         if (isset($link['attribs']['']['length']))
2824                                         {
2825                                                 $length = ceil($link['attribs']['']['length']);
2826                                         }
2827
2828                                         // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2829                                         $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2830                                 }
2831                         }
2832
2833                         if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure'))
2834                         {
2835                                 if (isset($enclosure[0]['attribs']['']['url']))
2836                                 {
2837                                         // Attributes
2838                                         $bitrate = null;
2839                                         $channels = null;
2840                                         $duration = null;
2841                                         $expression = null;
2842                                         $framerate = null;
2843                                         $height = null;
2844                                         $javascript = null;
2845                                         $lang = null;
2846                                         $length = null;
2847                                         $medium = null;
2848                                         $samplingrate = null;
2849                                         $type = null;
2850                                         $url = null;
2851                                         $width = null;
2852
2853                                         $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
2854                                         if (isset($enclosure[0]['attribs']['']['type']))
2855                                         {
2856                                                 $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2857                                         }
2858                                         if (isset($enclosure[0]['attribs']['']['length']))
2859                                         {
2860                                                 $length = ceil($enclosure[0]['attribs']['']['length']);
2861                                         }
2862
2863                                         // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2864                                         $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2865                                 }
2866                         }
2867
2868                         if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width))
2869                         {
2870                                 // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2871                                 $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2872                         }
2873
2874                         $this->data['enclosures'] = array_values(array_unique($this->data['enclosures']));
2875                 }
2876                 if (!empty($this->data['enclosures']))
2877                 {
2878                         return $this->data['enclosures'];
2879                 }
2880                 else
2881                 {
2882                         return null;
2883                 }
2884         }
2885
2886         /**
2887          * Get the latitude coordinates for the item
2888          *
2889          * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
2890          *
2891          * Uses `<geo:lat>` or `<georss:point>`
2892          *
2893          * @since 1.0
2894          * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
2895          * @link http://www.georss.org/ GeoRSS
2896          * @return string|null
2897          */
2898         public function get_latitude()
2899         {
2900                 if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
2901                 {
2902                         return (float) $return[0]['data'];
2903                 }
2904                 elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
2905                 {
2906                         return (float) $match[1];
2907                 }
2908                 else
2909                 {
2910                         return null;
2911                 }
2912         }
2913
2914         /**
2915          * Get the longitude coordinates for the item
2916          *
2917          * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
2918          *
2919          * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
2920          *
2921          * @since 1.0
2922          * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
2923          * @link http://www.georss.org/ GeoRSS
2924          * @return string|null
2925          */
2926         public function get_longitude()
2927         {
2928                 if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
2929                 {
2930                         return (float) $return[0]['data'];
2931                 }
2932                 elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
2933                 {
2934                         return (float) $return[0]['data'];
2935                 }
2936                 elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
2937                 {
2938                         return (float) $match[2];
2939                 }
2940                 else
2941                 {
2942                         return null;
2943                 }
2944         }
2945
2946         /**
2947          * Get the `<atom:source>` for the item
2948          *
2949          * @since 1.1
2950          * @return SimplePie_Source|null
2951          */
2952         public function get_source()
2953         {
2954                 if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source'))
2955                 {
2956                         return $this->registry->create('Source', array($this, $return[0]));
2957                 }
2958                 else
2959                 {
2960                         return null;
2961                 }
2962         }
2963 }
2964