web/wp-includes/SimplePie/Item.php
changeset 204 09a1c134465b
equal deleted inserted replaced
203:f507feede89a 204:09a1c134465b
       
     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