home *** CD-ROM | disk | FTP | other *** search
/ HTML Examples / WP.iso / wordpress / wp-includes / SimplePie / Source.php < prev   
Encoding:
PHP Script  |  2012-11-21  |  20.1 KB  |  612 lines

  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.  * Handles `<atom:source>`
  47.  *
  48.  * Used by {@see SimplePie_Item::get_source()}
  49.  *
  50.  * This class can be overloaded with {@see SimplePie::set_source_class()}
  51.  *
  52.  * @package SimplePie
  53.  * @subpackage API
  54.  */
  55. class SimplePie_Source
  56. {
  57.     var $item;
  58.     var $data = array();
  59.     protected $registry;
  60.  
  61.     public function __construct($item, $data)
  62.     {
  63.         $this->item = $item;
  64.         $this->data = $data;
  65.     }
  66.  
  67.     public function set_registry(SimplePie_Registry $registry)
  68.     {
  69.         $this->registry = $registry;
  70.     }
  71.  
  72.     public function __toString()
  73.     {
  74.         return md5(serialize($this->data));
  75.     }
  76.  
  77.     public function get_source_tags($namespace, $tag)
  78.     {
  79.         if (isset($this->data['child'][$namespace][$tag]))
  80.         {
  81.             return $this->data['child'][$namespace][$tag];
  82.         }
  83.         else
  84.         {
  85.             return null;
  86.         }
  87.     }
  88.  
  89.     public function get_base($element = array())
  90.     {
  91.         return $this->item->get_base($element);
  92.     }
  93.  
  94.     public function sanitize($data, $type, $base = '')
  95.     {
  96.         return $this->item->sanitize($data, $type, $base);
  97.     }
  98.  
  99.     public function get_item()
  100.     {
  101.         return $this->item;
  102.     }
  103.  
  104.     public function get_title()
  105.     {
  106.         if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
  107.         {
  108.             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
  109.         }
  110.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
  111.         {
  112.             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
  113.         }
  114.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
  115.         {
  116.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
  117.         }
  118.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
  119.         {
  120.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
  121.         }
  122.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
  123.         {
  124.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
  125.         }
  126.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
  127.         {
  128.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  129.         }
  130.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
  131.         {
  132.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  133.         }
  134.         else
  135.         {
  136.             return null;
  137.         }
  138.     }
  139.  
  140.     public function get_category($key = 0)
  141.     {
  142.         $categories = $this->get_categories();
  143.         if (isset($categories[$key]))
  144.         {
  145.             return $categories[$key];
  146.         }
  147.         else
  148.         {
  149.             return null;
  150.         }
  151.     }
  152.  
  153.     public function get_categories()
  154.     {
  155.         $categories = array();
  156.  
  157.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
  158.         {
  159.             $term = null;
  160.             $scheme = null;
  161.             $label = null;
  162.             if (isset($category['attribs']['']['term']))
  163.             {
  164.                 $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
  165.             }
  166.             if (isset($category['attribs']['']['scheme']))
  167.             {
  168.                 $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
  169.             }
  170.             if (isset($category['attribs']['']['label']))
  171.             {
  172.                 $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
  173.             }
  174.             $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
  175.         }
  176.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
  177.         {
  178.             // This is really the label, but keep this as the term also for BC.
  179.             // Label will also work on retrieving because that falls back to term.
  180.             $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  181.             if (isset($category['attribs']['']['domain']))
  182.             {
  183.                 $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
  184.             }
  185.             else
  186.             {
  187.                 $scheme = null;
  188.             }
  189.             $categories[] = $this->registry->create('Category', array($term, $scheme, null));
  190.         }
  191.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
  192.         {
  193.             $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
  194.         }
  195.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
  196.         {
  197.             $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
  198.         }
  199.  
  200.         if (!empty($categories))
  201.         {
  202.             return array_unique($categories);
  203.         }
  204.         else
  205.         {
  206.             return null;
  207.         }
  208.     }
  209.  
  210.     public function get_author($key = 0)
  211.     {
  212.         $authors = $this->get_authors();
  213.         if (isset($authors[$key]))
  214.         {
  215.             return $authors[$key];
  216.         }
  217.         else
  218.         {
  219.             return null;
  220.         }
  221.     }
  222.  
  223.     public function get_authors()
  224.     {
  225.         $authors = array();
  226.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
  227.         {
  228.             $name = null;
  229.             $uri = null;
  230.             $email = null;
  231.             if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
  232.             {
  233.                 $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  234.             }
  235.             if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
  236.             {
  237.                 $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]));
  238.             }
  239.             if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
  240.             {
  241.                 $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  242.             }
  243.             if ($name !== null || $email !== null || $uri !== null)
  244.             {
  245.                 $authors[] = $this->registry->create('Author', array($name, $uri, $email));
  246.             }
  247.         }
  248.         if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
  249.         {
  250.             $name = null;
  251.             $url = null;
  252.             $email = null;
  253.             if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
  254.             {
  255.                 $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  256.             }
  257.             if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
  258.             {
  259.                 $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]));
  260.             }
  261.             if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
  262.             {
  263.                 $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  264.             }
  265.             if ($name !== null || $email !== null || $url !== null)
  266.             {
  267.                 $authors[] = $this->registry->create('Author', array($name, $url, $email));
  268.             }
  269.         }
  270.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
  271.         {
  272.             $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
  273.         }
  274.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
  275.         {
  276.             $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
  277.         }
  278.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
  279.         {
  280.             $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
  281.         }
  282.  
  283.         if (!empty($authors))
  284.         {
  285.             return array_unique($authors);
  286.         }
  287.         else
  288.         {
  289.             return null;
  290.         }
  291.     }
  292.  
  293.     public function get_contributor($key = 0)
  294.     {
  295.         $contributors = $this->get_contributors();
  296.         if (isset($contributors[$key]))
  297.         {
  298.             return $contributors[$key];
  299.         }
  300.         else
  301.         {
  302.             return null;
  303.         }
  304.     }
  305.  
  306.     public function get_contributors()
  307.     {
  308.         $contributors = array();
  309.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
  310.         {
  311.             $name = null;
  312.             $uri = null;
  313.             $email = null;
  314.             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
  315.             {
  316.                 $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  317.             }
  318.             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
  319.             {
  320.                 $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]));
  321.             }
  322.             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
  323.             {
  324.                 $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  325.             }
  326.             if ($name !== null || $email !== null || $uri !== null)
  327.             {
  328.                 $contributors[] = $this->registry->create('Author', array($name, $uri, $email));
  329.             }
  330.         }
  331.         foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
  332.         {
  333.             $name = null;
  334.             $url = null;
  335.             $email = null;
  336.             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
  337.             {
  338.                 $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  339.             }
  340.             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
  341.             {
  342.                 $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]));
  343.             }
  344.             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
  345.             {
  346.                 $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  347.             }
  348.             if ($name !== null || $email !== null || $url !== null)
  349.             {
  350.                 $contributors[] = $this->registry->create('Author', array($name, $url, $email));
  351.             }
  352.         }
  353.  
  354.         if (!empty($contributors))
  355.         {
  356.             return array_unique($contributors);
  357.         }
  358.         else
  359.         {
  360.             return null;
  361.         }
  362.     }
  363.  
  364.     public function get_link($key = 0, $rel = 'alternate')
  365.     {
  366.         $links = $this->get_links($rel);
  367.         if (isset($links[$key]))
  368.         {
  369.             return $links[$key];
  370.         }
  371.         else
  372.         {
  373.             return null;
  374.         }
  375.     }
  376.  
  377.     /**
  378.      * Added for parity between the parent-level and the item/entry-level.
  379.      */
  380.     public function get_permalink()
  381.     {
  382.         return $this->get_link(0);
  383.     }
  384.  
  385.     public function get_links($rel = 'alternate')
  386.     {
  387.         if (!isset($this->data['links']))
  388.         {
  389.             $this->data['links'] = array();
  390.             if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
  391.             {
  392.                 foreach ($links as $link)
  393.                 {
  394.                     if (isset($link['attribs']['']['href']))
  395.                     {
  396.                         $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
  397.                         $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
  398.                     }
  399.                 }
  400.             }
  401.             if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
  402.             {
  403.                 foreach ($links as $link)
  404.                 {
  405.                     if (isset($link['attribs']['']['href']))
  406.                     {
  407.                         $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
  408.                         $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
  409.  
  410.                     }
  411.                 }
  412.             }
  413.             if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
  414.             {
  415.                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
  416.             }
  417.             if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
  418.             {
  419.                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
  420.             }
  421.             if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
  422.             {
  423.                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
  424.             }
  425.  
  426.             $keys = array_keys($this->data['links']);
  427.             foreach ($keys as $key)
  428.             {
  429.                 if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
  430.                 {
  431.                     if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
  432.                     {
  433.                         $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
  434.                         $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
  435.                     }
  436.                     else
  437.                     {
  438.                         $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
  439.                     }
  440.                 }
  441.                 elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
  442.                 {
  443.                     $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
  444.                 }
  445.                 $this->data['links'][$key] = array_unique($this->data['links'][$key]);
  446.             }
  447.         }
  448.  
  449.         if (isset($this->data['links'][$rel]))
  450.         {
  451.             return $this->data['links'][$rel];
  452.         }
  453.         else
  454.         {
  455.             return null;
  456.         }
  457.     }
  458.  
  459.     public function get_description()
  460.     {
  461.         if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
  462.         {
  463.             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
  464.         }
  465.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
  466.         {
  467.             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
  468.         }
  469.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
  470.         {
  471.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
  472.         }
  473.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
  474.         {
  475.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
  476.         }
  477.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
  478.         {
  479.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
  480.         }
  481.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
  482.         {
  483.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  484.         }
  485.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
  486.         {
  487.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  488.         }
  489.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
  490.         {
  491.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
  492.         }
  493.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
  494.         {
  495.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
  496.         }
  497.         else
  498.         {
  499.             return null;
  500.         }
  501.     }
  502.  
  503.     public function get_copyright()
  504.     {
  505.         if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
  506.         {
  507.             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
  508.         }
  509.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright'))
  510.         {
  511.             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
  512.         }
  513.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright'))
  514.         {
  515.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  516.         }
  517.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
  518.         {
  519.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  520.         }
  521.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
  522.         {
  523.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  524.         }
  525.         else
  526.         {
  527.             return null;
  528.         }
  529.     }
  530.  
  531.     public function get_language()
  532.     {
  533.         if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language'))
  534.         {
  535.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  536.         }
  537.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
  538.         {
  539.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  540.         }
  541.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
  542.         {
  543.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
  544.         }
  545.         elseif (isset($this->data['xml_lang']))
  546.         {
  547.             return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
  548.         }
  549.         else
  550.         {
  551.             return null;
  552.         }
  553.     }
  554.  
  555.     public function get_latitude()
  556.     {
  557.         if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
  558.         {
  559.             return (float) $return[0]['data'];
  560.         }
  561.         elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
  562.         {
  563.             return (float) $match[1];
  564.         }
  565.         else
  566.         {
  567.             return null;
  568.         }
  569.     }
  570.  
  571.     public function get_longitude()
  572.     {
  573.         if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
  574.         {
  575.             return (float) $return[0]['data'];
  576.         }
  577.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
  578.         {
  579.             return (float) $return[0]['data'];
  580.         }
  581.         elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
  582.         {
  583.             return (float) $match[2];
  584.         }
  585.         else
  586.         {
  587.             return null;
  588.         }
  589.     }
  590.  
  591.     public function get_image_url()
  592.     {
  593.         if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
  594.         {
  595.             return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
  596.         }
  597.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
  598.         {
  599.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
  600.         }
  601.         elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
  602.         {
  603.             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
  604.         }
  605.         else
  606.         {
  607.             return null;
  608.         }
  609.     }
  610. }
  611.  
  612.