class Atom10Feed extends XMLStringer
{
public $xw;
+
+ // @fixme most of these should probably be read-only properties
private $namespaces;
private $authors;
private $subject;
private $generator;
private $icon;
private $links;
- private $logo;
+ private $selfLink;
+ private $selfLinkType;
+ public $logo;
private $rights;
- private $subtitle;
- private $title;
+ public $subtitle;
+ public $title;
private $published;
private $updated;
private $entries;
$this->authors = array();
$this->links = array();
$this->entries = array();
- $this->addNamespace('xmlns', 'http://www.w3.org/2005/Atom');
+ $this->addNamespace('', 'http://www.w3.org/2005/Atom');
}
/**
$xs->element('name', null, $name);
} else {
throw new Atom10FeedException(
- 'author element must contain a name element.'
+ // TRANS: Atom feed exception thrown when an author element does not contain a name element.
+ _('Author element must contain a name element.')
);
}
- if (!is_null($uri)) {
+ if (isset($uri)) {
$xs->element('uri', null, $uri);
}
- if (!is_null(email)) {
+ if (isset($email)) {
$xs->element('email', null, $email);
}
}
/**
- * Add a activity feed subject via raw XML string
+ * Deprecated <activity:subject>; ignored
*
* @param string $xmlSubject An XML string representation of the subject
*
* @return void
*/
+
function setActivitySubject($xmlSubject)
{
- $this->subject = $xmlSubject;
+ // TRANS: Server exception thrown when using the method setActivitySubject() in the class Atom10Feed.
+ throw new ServerException(_('Do not use this method!'));
}
function getNamespaces()
{
$this->xw->startDocument('1.0', 'UTF-8');
$commonAttrs = array('xml:lang' => 'en-US');
- $commonAttrs = array_merge($commonAttrs, $this->namespaces);
+ foreach ($this->namespaces as $prefix => $uri) {
+ if ($prefix == '') {
+ $attr = 'xmlns';
+ } else {
+ $attr = 'xmlns:' . $prefix;
+ }
+ $commonAttrs[$attr] = $uri;
+ }
$this->elementStart('feed', $commonAttrs);
+ $this->element(
+ 'generator', array(
+ 'uri' => 'http://status.net',
+ 'version' => STATUSNET_VERSION
+ ),
+ 'StatusNet'
+ );
+
$this->element('id', null, $this->id);
$this->element('title', null, $this->title);
$this->element('subtitle', null, $this->subtitle);
$this->element('updated', null, $this->updated);
+ $this->renderAuthors();
+
+ if ($this->selfLink) {
+ $this->addLink($this->selfLink, array('rel' => 'self',
+ 'type' => $this->selfLinkType));
+ }
$this->renderLinks();
}
function getString()
{
- $this->validate();
+ if (Event::handle('StartApiAtom', array($this))) {
- $this->initFeed();
- $this->renderAuthors();
+ $this->validate();
+ $this->initFeed();
- if (!empty($this->subject)) {
- $this->raw($this->subject);
- }
+ if (!empty($this->subject)) {
+ $this->raw($this->subject);
+ }
+
+ $this->renderEntries();
+ $this->endFeed();
- $this->renderEntries();
- $this->endFeed();
+ Event::handle('EndApiAtom', array($this));
+ }
return $this->xw->outputMemory();
}
$this->id = $id;
}
+ function setSelfLink($url, $type='application/atom+xml')
+ {
+ $this->selfLink = $url;
+ $this->selfLinkType = $type;
+ }
+
function setTitle($title)
{
$this->title = $title;
array_push($this->links, $attrs);
}
-
}