SimplePie PHP Cross Reference Developer Tools

Source: /library/SimplePie/Item.php - 2964 lines - 98299 bytes - Summary - Text - Print

Description: SimplePie A PHP-Based RSS and Atom Feed Framework. Takes the hard work out of managing a complete RSS/Atom solution.

   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  

title

Description

title

Description

title

Description

title

title

Body