*
* @category API
* @package StatusNet
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @author Evan Prodromou <evan@status.net>
+ * @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
exit(1);
}
-require_once INSTALLDIR . '/lib/api.php';
+require_once INSTALLDIR . '/lib/apiprivateauth.php';
/**
* Returns the most recent notices (default 20) posted to the group specified by ID
*
* @category API
* @package StatusNet
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @author Evan Prodromou <evan@status.net>
+ * @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-class ApiTimelineGroupAction extends ApiAction
+class ApiTimelineGroupAction extends ApiPrivateAuthAction
{
var $group = null;
parent::prepare($args);
$this->group = $this->getTargetGroup($this->arg('id'));
- $this->notices = $this->getNotices();
return true;
}
function handle($args)
{
parent::handle($args);
+
+ if (empty($this->group)) {
+ $this->clientError(_('Group not found!'), 404, $this->format);
+ return false;
+ }
+
+ $this->notices = $this->getNotices();
$this->showTimeline();
}
function showTimeline()
{
- $sitename = common_config('site', 'name');
- $title = sprintf(_("%s timeline"), $this->group->nickname);
- $taguribase = common_config('integration', 'taguri');
- $id = "tag:$taguribase:GroupTimeline:" . $this->group->id;
- $link = common_local_url(
- 'showgroup',
- array('nickname' => $this->group->nickname)
- );
- $subtitle = sprintf(
- _('Updates from %1$s on %2$s!'),
- $this->group->nickname,
- $sitename
- );
+ // We'll pull common formatting out of this for other formats
+ $atom = new AtomGroupNoticeFeed($this->group);
+
+ $self = $this->getSelfUri();
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle);
- break;
- case 'atom':
- $selfuri = common_root_url() .
- 'api/statusnet/groups/timeline/' .
- $this->group->nickname . '.atom';
- $this->showAtomTimeline(
+ $this->showRssTimeline(
$this->notices,
- $title,
- $id,
- $link,
- $subtitle,
+ $atom->title,
+ $this->group->homeUrl(),
+ $atom->subtitle,
null,
- $selfuri
+ $atom->logo,
+ $self
);
+ break;
+ case 'atom':
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ try {
+ $atom->addAuthorRaw($this->group->asAtomAuthor());
+ $atom->setActivitySubject($this->group->asActivitySubject());
+ $atom->setId($self);
+ $atom->setSelfLink($self);
+ $atom->addEntryFromNotices($this->notices);
+ $this->raw($atom->getString());
+ } catch (Atom10FeedException $e) {
+ $this->serverError(
+ 'Could not generate feed for group - ' . $e->getMessage()
+ );
+ return;
+ }
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
break;
default:
$this->clientError(
- _('API method not found!'),
+ _('API method not found.'),
404,
$this->format
);
($this->page-1) * $this->count,
$this->count,
$this->since_id,
- $this->max_id,
- $this->since
+ $this->max_id
);
while ($notice->fetch()) {