1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
<?php
/**
* Portions Copyright 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)
* Copyright 2007-2014 Horde LLC (http://www.horde.org/)
*
* @category Horde
* @package Feed
*/
/**
* Atom feed class
*
* The Horde_Feed_Atom class is a concrete subclass of the general
* Horde_Feed_Base class, tailored for representing an Atom feed. It shares all
* of the same methods with its parent. The distinction is made in the format of
* data that Horde_Feed_Atom expects, and as a further pointer for users as to
* what kind of feed object they have been passed.
*
* @category Horde
* @package Feed
*/
class Horde_Feed_Atom extends Horde_Feed_Base
{
/**
* The classname for individual feed elements.
*
* @var string
*/
protected $_listItemClassName = 'Horde_Feed_Entry_Atom';
/**
* The default namespace for Atom feeds.
*
* @var string
*/
protected $_defaultNamespace = 'atom';
/**
* The XML string for an "empty" Atom feed.
*
* @var string
*/
protected $_emptyXml = '<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"></feed>';
/**
* Cache the individual feed elements so they don't need to be
* searched for on every operation.
* @return array
*/
protected function _buildListItemCache()
{
$entries = array();
foreach ($this->_element->childNodes as $child) {
if ($child->localName == 'entry') {
$entries[] = $child;
}
}
return $entries;
}
/**
* Easy access to <link> tags keyed by "rel" attributes.
* @TODO rationalize this with other __get/__call access
*
* If $elt->link() is called with no arguments, we will attempt to return
* the value of the <link> tag(s) like all other method-syntax attribute
* access. If an argument is passed to link(), however, then we will return
* the "href" value of the first <link> tag that has a "rel" attribute
* matching $rel:
*
* $elt->link(): returns the value of the link tag.
* $elt->link('self'): returns the href from the first <link rel="self"> in the entry.
*
* @param string $rel The "rel" attribute to look for.
* @return mixed
*/
public function link($rel = null)
{
if ($rel === null) {
return parent::__call('link', null);
}
// Index link tags by their "rel" attribute.
$links = parent::__get('link');
if (!is_array($links)) {
if ($links instanceof Horde_Xml_Element) {
$links = array($links);
} else {
return $links;
}
}
foreach ($links as $link) {
if (empty($link['rel'])) {
continue;
}
if ($rel == $link['rel']) {
return $link['href'];
}
}
return null;
}
}
|