X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fatomnoticefeed.php;h=292bc97e8584ccfe0819bb93522d175051a5451d;hb=996345088e8d57cf39fa38129ab50ff02918a275;hp=a28c9cda7b678795be3e78695ccd093c5be9babf;hpb=ce3c3be1bf971329f82bedbf3aae636e3c8ecbf9;p=quix0rs-gnu-social.git diff --git a/lib/atomnoticefeed.php b/lib/atomnoticefeed.php index a28c9cda7b..292bc97e85 100644 --- a/lib/atomnoticefeed.php +++ b/lib/atomnoticefeed.php @@ -1,18 +1,112 @@ . + * + * @category Feed + * @package StatusNet + * @author Zach Copley + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ +if (!defined('STATUSNET')) +{ + exit(1); +} + +/** + * Class for creating a feed that represents a collection of notices. Builds the + * feed in memory. Get the feed as a string with AtomNoticeFeed::getString(). + * + * @category Feed + * @package StatusNet + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ 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); - // Feeds containing notice info use the Atom Threading Extensions + $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( + 'georss', + 'http://www.georss.org/georss' + ); + + $this->addNamespace( + '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( + 'ostatus', + 'http://ostatus.org/schema/1.0' + ); + + $this->addNamespace( + 'statusnet', + 'http://status.net/schema/api/1/' + ); } + /** + * Add more than one Notice to the feed + * + * @param mixed $notices an array of Notice objects or handle + * + */ function addEntryFromNotices($notices) { if (is_array($notices)) { @@ -21,14 +115,36 @@ class AtomNoticeFeed extends Atom10Feed } } else { while ($notices->fetch()) { - $this->addEntryFromNotice($notice); + $this->addEntryFromNotice($notices); } } } + /** + * Add a single Notice to the feed + * + * @param Notice $notice a Notice to add + */ function addEntryFromNotice($notice) { - $this->addEntryRaw($notice->asAtomEntry()); + 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 + } } -} \ No newline at end of file + function showSource() + { + return true; + } + + function showAuthor() + { + return true; + } +}