/**
* StatusNet, the distributed open-source microblogging tool
*
- * Class for building and Atom feed from a collection of notices
+ * Class for building an Atom feed from a collection of notices
*
* PHP version 5
*
* @link http://status.net/
*/
-if (!defined('STATUSNET')
+if (!defined('STATUSNET'))
{
exit(1);
}
*/
class AtomNoticeFeed extends Atom10Feed
{
- function __construct($indent = true) {
+ var $cur;
+ protected $scoped=null;
+
+ /**
+ * Constructor - adds a bunch of XML namespaces we need in our
+ * notice-specific Atom feeds, and allows setting the current
+ * authenticated user (useful for API methods).
+ *
+ * @param User $cur the current authenticated user (optional)
+ * @param boolean $indent Whether to indent XML output
+ *
+ */
+ function __construct($cur = null, $indent = true) {
parent::__construct($indent);
+ $this->cur = $cur ?: common_current_user();
+ $this->scoped = !is_null($this->cur) ? $this->cur->getProfile() : null;
+
// Feeds containing notice info use these namespaces
$this->addNamespace(
- 'xmlns:thr',
+ 'thr',
'http://purl.org/syndication/thread/1.0'
);
$this->addNamespace(
- 'xmlns:georss',
+ 'georss',
'http://www.georss.org/georss'
);
$this->addNamespace(
- 'xmlns:activity',
+ 'activity',
'http://activitystrea.ms/spec/1.0/'
);
+ $this->addNamespace(
+ 'media',
+ 'http://purl.org/syndication/atommedia'
+ );
+
+ $this->addNamespace(
+ 'poco',
+ 'http://portablecontacts.net/spec/1.0'
+ );
+
// XXX: What should the uri be?
$this->addNamespace(
- 'xmlns:ostatus',
+ 'ostatus',
'http://ostatus.org/schema/1.0'
);
+
+ $this->addNamespace(
+ 'statusnet',
+ 'http://status.net/schema/api/1/'
+ );
}
/**
foreach ($notices as $notice) {
$this->addEntryFromNotice($notice);
}
- } else {
+ } elseif ($notices instanceof Notice) {
while ($notices->fetch()) {
- $this->addEntryFromNotice($notice);
+ $this->addEntryFromNotice($notices);
}
+ } else {
+ throw new ServerException('addEntryFromNotices got neither an array nor a Notice object');
}
}
*
* @param Notice $notice a Notice to add
*/
- function addEntryFromNotice($notice)
+ function addEntryFromNotice(Notice $notice)
+ {
+ try {
+ $source = $this->showSource();
+ $author = $this->showAuthor();
+
+ $this->addEntryRaw($notice->asAtomEntry(false, $source, $author, $this->scoped));
+ } catch (Exception $e) {
+ common_log(LOG_ERR, $e->getMessage());
+ // we continue on exceptions
+ }
+ }
+
+ function showSource()
{
- $this->addEntryRaw($notice->asAtomEntry());
+ return true;
}
+ function showAuthor()
+ {
+ return true;
+ }
}