From: Roland Haeder Date: Fri, 13 Mar 2015 03:01:44 +0000 (+0100) Subject: Merge branch 'nightly' of gitorious.org:social/mainline into nightly X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=b8cd496971e0ca5d684891fa19b0f322b3d19ab0;p=quix0rs-gnu-social.git Merge branch 'nightly' of gitorious.org:social/mainline into nightly Conflicts: actions/showstream.php classes/Notice.php plugins/OStatus/classes/Ostatus_profile.php Signed-off-by: Roland Haeder --- b8cd496971e0ca5d684891fa19b0f322b3d19ab0 diff --cc actions/replies.php index 5bf2f8edc4,49098d0950..abc0662f52 --- a/actions/replies.php +++ b/actions/replies.php @@@ -203,11 -183,7 +183,7 @@@ class RepliesAction extends ManagedActi $this->elementEnd('div'); } - <<<<<<< HEAD - function isReadOnly(array $args=array()) - ======= -- public function isReadOnly($args) - >>>>>>> 1442ca16b410d327d7ec6269944144dfa075ff17 ++ public function isReadOnly(array $args=array()) { return true; } diff --cc actions/showstream.php index a3c461915a,8dd6c7deff..0000000000 deleted file mode 100644,100644 --- a/actions/showstream.php +++ /dev/null @@@ -1,349 -1,284 +1,0 @@@ --. -- * -- * @category Personal -- * @package StatusNet -- * @author Evan Prodromou -- * @author Sarven Capadisli -- * @copyright 2008-2009 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') && !defined('LACONICA')) { - exit(1); - } -- - require_once INSTALLDIR.'/lib/personalgroupnav.php'; - require_once INSTALLDIR.'/lib/noticelist.php'; - require_once INSTALLDIR.'/lib/profileminilist.php'; - require_once INSTALLDIR.'/lib/groupminilist.php'; - require_once INSTALLDIR.'/lib/feedlist.php'; -if (!defined('GNUSOCIAL')) { exit(1); } -- --/** -- * User profile page -- * -- * When I created this page, "show stream" seemed like the best name for it. -- * Now, it seems like a really bad name. -- * -- * It shows a stream of the user's posts, plus lots of profile info, links -- * to subscriptions and stuff, etc. -- * -- * @category Personal -- * @package StatusNet -- * @author Evan Prodromou -- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 -- * @link http://status.net/ -- */ --class ShowstreamAction extends ProfileAction --{ -- var $notice; -- -- protected function prepare(array $args=array()) -- { -- parent::prepare($args); -- -- if (empty($this->tag)) { -- $stream = new ProfileNoticeStream($this->profile, $this->scoped); -- } else { -- $stream = new TaggedProfileNoticeStream($this->profile, $this->tag, $this->scoped); -- } -- -- $this->notice = $stream->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); -- -- return true; -- } -- -- -- function title() -- { -- $base = $this->profile->getFancyName(); -- if (!empty($this->tag)) { -- if ($this->page == 1) { -- // TRANS: Page title showing tagged notices in one user's timeline. -- // TRANS: %1$s is the username, %2$s is the hash tag. -- return sprintf(_('Notices by %1$s tagged %2$s'), $base, $this->tag); -- } else { -- // TRANS: Page title showing tagged notices in one user's timeline. -- // TRANS: %1$s is the username, %2$s is the hash tag, %3$d is the page number. -- return sprintf(_('Notices by %1$s tagged %2$s, page %3$d'), $base, $this->tag, $this->page); -- } -- } else { -- if ($this->page == 1) { -- return $base; -- } else { -- // TRANS: Extended page title showing tagged notices in one user's timeline. -- // TRANS: %1$s is the username, %2$d is the page number. -- return sprintf(_('Notices by %1$s, page %2$d'), -- $base, -- $this->page); -- } -- } -- } -- -- function showContent() -- { -- $this->showNotices(); -- } -- -- function showProfileBlock() -- { -- $block = new AccountProfileBlock($this, $this->profile); -- $block->show(); -- } -- -- function showPageNoticeBlock() -- { -- return; -- } -- -- function getFeeds() -- { -- if (!empty($this->tag)) { -- return array(new Feed(Feed::RSS1, -- common_local_url('userrss', -- array('nickname' => $this->target->nickname, -- 'tag' => $this->tag)), -- // TRANS: Title for link to notice feed. -- // TRANS: %1$s is a user nickname, %2$s is a hashtag. -- sprintf(_('Notice feed for %1$s tagged %2$s (RSS 1.0)'), -- $this->target->nickname, $this->tag))); -- } -- -- return array(new Feed(Feed::JSON, -- common_local_url('ApiTimelineUser', -- array( -- 'id' => $this->user->id, -- 'format' => 'as')), -- // TRANS: Title for link to notice feed. -- // TRANS: %s is a user nickname. -- sprintf(_('Notice feed for %s (Activity Streams JSON)'), -- $this->target->nickname)), -- new Feed(Feed::RSS1, -- common_local_url('userrss', -- array('nickname' => $this->target->nickname)), -- // TRANS: Title for link to notice feed. -- // TRANS: %s is a user nickname. -- sprintf(_('Notice feed for %s (RSS 1.0)'), -- $this->target->nickname)), -- new Feed(Feed::RSS2, -- common_local_url('ApiTimelineUser', -- array( -- 'id' => $this->user->id, -- 'format' => 'rss')), -- // TRANS: Title for link to notice feed. -- // TRANS: %s is a user nickname. -- sprintf(_('Notice feed for %s (RSS 2.0)'), -- $this->target->nickname)), -- new Feed(Feed::ATOM, -- common_local_url('ApiTimelineUser', -- array( -- 'id' => $this->user->id, -- 'format' => 'atom')), -- // TRANS: Title for link to notice feed. -- // TRANS: %s is a user nickname. -- sprintf(_('Notice feed for %s (Atom)'), -- $this->target->nickname)), -- new Feed(Feed::FOAF, -- common_local_url('foaf', array('nickname' => -- $this->target->nickname)), -- // TRANS: Title for link to notice feed. FOAF stands for Friend of a Friend. -- // TRANS: More information at http://www.foaf-project.org. %s is a user nickname. -- sprintf(_('FOAF for %s'), $this->target->nickname))); -- } -- -- function extraHead() -- { -- if ($this->profile->bio) { -- $this->element('meta', array('name' => 'description', -- 'content' => $this->profile->bio)); -- } -- -- if ($this->user->emailmicroid && $this->user->email && $this->profile->profileurl) { -- $id = new Microid('mailto:'.$this->user->email, -- $this->selfUrl()); -- $this->element('meta', array('name' => 'microid', -- 'content' => $id->toString())); -- } -- -- // See https://wiki.mozilla.org/Microsummaries -- -- $this->element('link', array('rel' => 'microsummary', -- 'href' => common_local_url('microsummary', -- array('nickname' => $this->profile->nickname)))); -- -- $rsd = common_local_url('rsd', -- array('nickname' => $this->profile->nickname)); -- -- // RSD, http://tales.phrasewise.com/rfc/rsd -- $this->element('link', array('rel' => 'EditURI', -- 'type' => 'application/rsd+xml', -- 'href' => $rsd)); -- -- if ($this->page != 1) { -- $this->element('link', array('rel' => 'canonical', -- 'href' => $this->profile->profileurl)); -- } -- } -- -- function showEmptyListMessage() -- { -- // TRANS: First sentence of empty list message for a timeline. $1%s is a user nickname. -- $message = sprintf(_('This is the timeline for %1$s, but %1$s hasn\'t posted anything yet.'), $this->target->nickname) . ' '; -- -- if (common_logged_in()) { -- $current_user = common_current_user(); -- if ($this->user->id === $current_user->id) { -- // TRANS: Second sentence of empty list message for a stream for the user themselves. -- $message .= _('Seen anything interesting recently? You haven\'t posted any notices yet, now would be a good time to start :)'); -- } else { -- // TRANS: Second sentence of empty list message for a non-self timeline. %1$s is a user nickname, %2$s is a part of a URL. -- // TRANS: This message contains a Markdown link. Keep "](" together. -- $message .= sprintf(_('You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%%?status_textarea=%2$s).'), $this->target->nickname, '@' . $this->target->nickname); -- } -- } -- else { -- // TRANS: Second sentence of empty message for anonymous users. %s is a user nickname. -- // TRANS: This message contains a Markdown link. Keep "](" together. -- $message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to them.'), $this->target->nickname); -- } -- -- $this->elementStart('div', 'guide'); -- $this->raw(common_markup_to_html($message)); -- $this->elementEnd('div'); -- } -- -- function showNotices() -- { - $pnl = null; - if (Event::handle('ShowStreamNoticeList', array($this->notice, $this, &$pnl))) { - $pnl = new ProfileNoticeList($this->notice, $this); - } - $pnl = new NoticeList($this->notice, $this); -- $cnt = $pnl->show(); -- if (0 == $cnt) { -- $this->showEmptyListMessage(); -- } -- -- $args = array('nickname' => $this->target->nickname); -- if (!empty($this->tag)) -- { -- $args['tag'] = $this->tag; -- } -- $this->pagination($this->page>1, $cnt>NOTICES_PER_PAGE, $this->page, -- 'showstream', $args); -- } -- -- function showAnonymousMessage() -- { -- if (!(common_config('site','closed') || common_config('site','inviteonly'))) { -- // TRANS: Announcement for anonymous users showing a timeline if site registrations are open. -- // TRANS: This message contains a Markdown link. Keep "](" together. -- $m = sprintf(_('**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . -- 'based on the Free Software [StatusNet](http://status.net/) tool. ' . -- '[Join now](%%%%action.register%%%%) to follow **%s**\'s notices and many more! ([Read more](%%%%doc.help%%%%))'), -- $this->target->nickname, $this->target->nickname); -- } else { -- // TRANS: Announcement for anonymous users showing a timeline if site registrations are closed or invite only. -- // TRANS: This message contains a Markdown link. Keep "](" together. -- $m = sprintf(_('**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . -- 'based on the Free Software [StatusNet](http://status.net/) tool.'), -- $this->target->nickname, $this->target->nickname); -- } -- $this->elementStart('div', array('id' => 'anon_notice')); -- $this->raw(common_markup_to_html($m)); -- $this->elementEnd('div'); -- } -- -- function showSections() -- { -- parent::showSections(); -- if (!common_config('performance', 'high')) { -- $cloud = new PersonalTagCloudSection($this, $this->user); -- $cloud->show(); -- } -- } -- -- function noticeFormOptions() -- { -- $options = parent::noticeFormOptions(); -- $cur = common_current_user(); -- -- if (empty($cur) || $cur->id != $this->profile->id) { -- $options['to_profile'] = $this->profile; -- } -- -- return $options; - } - } - - // We don't show the author for a profile, since we already know who it is! - - /** - * Slightly modified from standard list; the author & avatar are hidden - * in CSS. We used to remove them here too, but as it turns out that - * confuses the inline reply code... and we hide them in CSS anyway - * since realtime updates come through in original form. - * - * Remaining customization right now is for the repeat marker, where - * it'll list who the original poster was instead of who did the repeat - * (since the repeater is you, and the repeatee isn't shown!) - * This will remain inconsistent if realtime updates come through, - * since those'll get rendered as a regular NoticeListItem. - */ - class ProfileNoticeList extends NoticeList - { - function newListItem(Notice $notice) - { - return new ProfileNoticeListItem($notice, $this->out); - } - } - - class ProfileNoticeListItem extends DoFollowListItem - { - /** - * show a link to the author of repeat - * - * @return void - */ - function showRepeat() - { - if (!empty($this->repeat)) { - - // FIXME: this code is almost identical to default; need to refactor - - $attrs = array('href' => $this->profile->profileurl, - 'class' => 'url'); - - if (!empty($this->profile->fullname)) { - $attrs['title'] = $this->profile->getFancyName(); - } - - $this->out->elementStart('span', 'repeat'); - - $text_link = XMLStringer::estring('a', $attrs, $this->profile->nickname); - - // TRANS: Link to the author of a repeated notice. %s is a linked nickname. - $this->out->raw(sprintf(_('Repeat of %s'), $text_link)); - - $this->out->elementEnd('span'); - } -- } --} diff --cc lib/apiaction.php index 062e6d0774,0eea08bed6..0eea08bed6 mode 100644,100755..100644 --- a/lib/apiaction.php +++ b/lib/apiaction.php diff --cc plugins/Share/actions/apistatusesretweets.php index 0000000000,7af4cd3ec6..82e86b9264 mode 000000,100644..100644 --- a/plugins/Share/actions/apistatusesretweets.php +++ b/plugins/Share/actions/apistatusesretweets.php @@@ -1,0 -1,126 +1,126 @@@ + . + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 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); + } + + /** + * Show up to 100 repeats of a notice + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + class ApiStatusesRetweetsAction extends ApiAuthAction + { + const MAXCOUNT = 100; + + var $original = null; + var $cnt = self::MAXCOUNT; + + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + */ - function prepare($args) ++ function prepare(array $args=array()) + { + parent::prepare($args); + + $id = $this->trimmed('id'); + + $this->original = Notice::getKV('id', $id); + + if (empty($this->original)) { + // TRANS: Client error displayed trying to display redents of a non-exiting notice. + $this->clientError(_('No such notice.'), + 400, $this->format); + return false; + } + + $cnt = $this->trimmed('count'); + + if (empty($cnt) || !is_integer($cnt)) { + $cnt = 100; + } else { + $this->cnt = min((int)$cnt, self::MAXCOUNT); + } + + return true; + } + + /** + * Handle the request + * + * Make a new notice for the update, save it, and show it + * + * @param array $args $_REQUEST data (unused) + * + * @return void + */ - function handle($args) ++ function handle(array $args=array()) + { + parent::handle($args); + + $strm = $this->original->repeatStream($this->cnt); + + switch ($this->format) { + case 'xml': + $this->showXmlTimeline($strm); + break; + case 'json': + $this->showJsonTimeline($strm); + break; + default: + // TRANS: Client error displayed when coming across a non-supported API method. + $this->clientError(_('API method not found.'), $code = 404); + break; + } + } + + /** + * Return true if read only. + * + * MAY override + * + * @param array $args other arguments + * + * @return boolean is read only action? + */ + - function isReadOnly($args) ++ function isReadOnly(array $args=array()) + { + return true; + } + } diff --cc plugins/Share/actions/apitimelineretweetedbyme.php index 0000000000,01f3fe378b..4ad4e269af mode 000000,100644..100644 --- a/plugins/Share/actions/apitimelineretweetedbyme.php +++ b/plugins/Share/actions/apitimelineretweetedbyme.php @@@ -1,0 -1,84 +1,84 @@@ + . + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 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); + } + + /** + * Show authenticating user's most recent repeats + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + class ApiTimelineRetweetedByMeAction extends ApiAuthAction + { + const DEFAULTCOUNT = 20; + const MAXCOUNT = 200; + const MAXNOTICES = 3200; + + var $repeats = null; + var $cnt = self::DEFAULTCOUNT; + var $page = 1; + var $since_id = null; + var $max_id = null; + + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + * + */ - function prepare($args) ++ function prepare(array $args=array()) + { + parent::prepare($args); + + // TRANS: Server error displayed calling unimplemented API method for 'retweeted by me'. + $this->serverError(_('Unimplemented.'), 503); + + return false; + } + + /** + * Return true if read only. + * + * @param array $args other arguments + * + * @return boolean is read only action? + */ - function isReadOnly($args) ++ function isReadOnly(array $args=array()) + { + return true; + } + } diff --cc plugins/Share/actions/apitimelineretweetedtome.php index 0000000000,92d4b358fe..14091eedee mode 000000,100644..100644 --- a/plugins/Share/actions/apitimelineretweetedtome.php +++ b/plugins/Share/actions/apitimelineretweetedtome.php @@@ -1,0 -1,162 +1,162 @@@ + . + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 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('GNUSOCIAL')) { exit(1); } + + /** + * Show most recent notices that are repeats in user's inbox + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + class ApiTimelineRetweetedToMeAction extends ApiAuthAction + { + const DEFAULTCOUNT = 20; + const MAXCOUNT = 200; + const MAXNOTICES = 3200; + + var $repeats = null; + var $cnt = self::DEFAULTCOUNT; + var $page = 1; + var $since_id = null; + var $max_id = null; + + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + */ + protected function prepare(array $args=array()) + { + parent::prepare($args); + + $cnt = $this->int('count', self::DEFAULTCOUNT, self::MAXCOUNT, 1); + + $page = $this->int('page', 1, (self::MAXNOTICES/$this->cnt)); + + $since_id = $this->int('since_id'); + + $max_id = $this->int('max_id'); + + return true; + } + + /** + * Handle the request + * + * show a timeline of the user's repeated notices + * + * @return void + */ + protected function handle() + { + parent::handle(); + + $offset = ($this->page-1) * $this->cnt; + $limit = $this->cnt; + + // TRANS: Title for Atom feed "repeated to me". %s is the user nickname. + $title = sprintf(_("Repeated to %s"), $this->scoped->getNickname()); + $subtitle = sprintf( + // @todo FIXME: $profile is not defined. + // TRANS: Subtitle for API action that shows most recent notices that are repeats in user's inbox. + // TRANS: %1$s is the sitename, %2$s is a user nickname, %3$s is a user profile name. + _('%1$s notices that were to repeated to %2$s / %3$s.'), + $sitename, $this->scoped->getNickname(), $profile->getBestName() + ); + $taguribase = TagURI::base(); + $id = "tag:$taguribase:RepeatedToMe:" . $this->scoped->id; + + $link = common_local_url( + 'all', + array('nickname' => $this->scoped->getNickname()) + ); + + $strm = $this->scoped->repeatedToMe($offset, $limit, $this->since_id, $this->max_id); + + switch ($this->format) { + case 'xml': + $this->showXmlTimeline($strm); + break; + case 'json': + $this->showJsonTimeline($strm); + break; + case 'atom': + header('Content-Type: application/atom+xml; charset=utf-8'); + + $atom = new AtomNoticeFeed($this->scoped->getUser()); + + $atom->setId($id); + $atom->setTitle($title); + $atom->setSubtitle($subtitle); + $atom->setUpdated('now'); + $atom->addLink($link); + + $id = $this->arg('id'); + + $atom->setSelfLink($self); + $atom->addEntryFromNotices($strm); + + $this->raw($atom->getString()); + + break; + case 'as': + header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE); + $doc = new ActivityStreamJSONDocument($this->scoped->getUser()); + $doc->setTitle($title); + $doc->addLink($link, 'alternate', 'text/html'); + $doc->addItemsFromNotices($strm); + $this->raw($doc->asString()); + break; + default: + // TRANS: Client error displayed when coming across a non-supported API method. + $this->clientError(_('API method not found.'), $code = 404); + break; + } + } + + /** + * Return true if read only. + * + * MAY override + * + * @param array $args other arguments + * + * @return boolean is read only action? + */ - function isReadOnly($args) ++ function isReadOnly(array $args=array()) + { + return true; + } + } diff --cc plugins/Share/actions/apitimelineretweetsofme.php index 0000000000,fe90213665..49990a5335 mode 000000,100644..100644 --- a/plugins/Share/actions/apitimelineretweetsofme.php +++ b/plugins/Share/actions/apitimelineretweetsofme.php @@@ -1,0 -1,172 +1,172 @@@ + . + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 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); + } + + /** + * Show authenticating user's most recent notices that have been repeated + * + * @category API + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + class ApiTimelineRetweetsOfMeAction extends ApiAuthAction + { + const DEFAULTCOUNT = 20; + const MAXCOUNT = 200; + const MAXNOTICES = 3200; + + var $repeats = null; + var $cnt = self::DEFAULTCOUNT; + var $page = 1; + var $since_id = null; + var $max_id = null; + + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + */ - function prepare($args) ++ function prepare(array $args=array()) + { + parent::prepare($args); + + $cnt = $this->int('count', self::DEFAULTCOUNT, self::MAXCOUNT, 1); + + $page = $this->int('page', 1, (self::MAXNOTICES/$this->cnt)); + + $since_id = $this->int('since_id'); + + $max_id = $this->int('max_id'); + + return true; + } + + /** + * Handle the request + * + * show a timeline of the user's repeated notices + * + * @param array $args $_REQUEST data (unused) + * + * @return void + */ - function handle($args) ++ function handle(array $args=array()) + { + parent::handle($args); + + $offset = ($this->page-1) * $this->cnt; + $limit = $this->cnt; + + // TRANS: Title of list of repeated notices of the logged in user. + // TRANS: %s is the nickname of the logged in user. + $title = sprintf(_("Repeats of %s"), $this->auth_user->nickname); + $sitename = common_config('site', 'name'); + + $profile = $this->auth_user->getProfile(); + + $subtitle = sprintf( + // TRANS: Subtitle of API time with retweets of me. + // TRANS: %1$s is the StatusNet sitename, %2$s is the user nickname, %3$s is the user profile name. + _('%1$s notices that %2$s / %3$s has repeated.'), + $sitename, $this->auth_user->nickname, $profile->getBestName() + ); + + $taguribase = TagURI::base(); + $id = "tag:$taguribase:RepeatsOfMe:" . $this->auth_user->id; + + $link = common_local_url( + 'all', + array('nickname' => $this->auth_user->nickname) + ); + + // This is a really bad query for some reason + + if (!common_config('performance', 'high')) { + $strm = $this->auth_user->repeatsOfMe($offset, $limit, $this->since_id, $this->max_id); + } else { + $strm = new Notice(); + $strm->whereAdd('0 = 1'); + $strm->find(); + } + + switch ($this->format) { + case 'xml': + $this->showXmlTimeline($strm); + break; + case 'json': + $this->showJsonTimeline($strm); + break; + case 'atom': + header('Content-Type: application/atom+xml; charset=utf-8'); + $atom = new AtomNoticeFeed($this->auth_user); + $atom->setId($id); + $atom->setTitle($title); + $atom->setSubtitle($subtitle); + $atom->setUpdated('now'); + $atom->addLink($link); + $atom->setSelfLink($this->getSelfUri()); + $atom->addEntryFromNotices($strm); + $this->raw($atom->getString()); + break; + case 'as': + header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE); + $doc = new ActivityStreamJSONDocument($this->auth_user); + $doc->setTitle($title); + $doc->addLink($link, 'alternate', 'text/html'); + $doc->addItemsFromNotices($strm); + $this->raw($doc->asString()); + break; + default: + // TRANS: Client error displayed when coming across a non-supported API method. + $this->clientError(_('API method not found.'), 404); + break; + } + } + + /** + * Return true if read only. + * + * MAY override + * + * @param array $args other arguments + * + * @return boolean is read only action? + */ - function isReadOnly($args) ++ function isReadOnly(array $args=array()) + { + return true; + } + }