correctly show <source> for atom feeds

This commit is contained in:
Evan Prodromou 2010-08-03 15:50:21 -07:00
parent 744233c6dc
commit f83171824f
3 changed files with 67 additions and 24 deletions

View File

@ -1215,30 +1215,46 @@ class Notice extends Memcached_DataObject
if ($source) { if ($source) {
$atom_feed = $profile->getAtomFeed();
if (!empty($atom_feed)) {
$xs->elementStart('source'); $xs->elementStart('source');
$xs->element('id', null, $profile->profileurl); // XXX: we should store the actual feed ID
$xs->element('title', null, $profile->nickname . " - " . common_config('site', 'name'));
$xs->element('link', array('href' => $profile->profileurl)); $xs->element('id', null, $atom_feed);
// XXX: we should store the actual feed title
$xs->element('title', null, $profile->getBestName());
$xs->element('link', array('rel' => 'alternate',
'type' => 'text/html',
'href' => $profile->profileurl));
$xs->element('link', array('rel' => 'self',
'type' => 'application/atom+xml',
'href' => $atom_feed));
$xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
$notice = $profile->getCurrentNotice();
if (!empty($notice)) {
$xs->element('updated', null, common_date_w3dtf($notice->created));
}
$user = User::staticGet('id', $profile->id); $user = User::staticGet('id', $profile->id);
if (!empty($user)) { if (!empty($user)) {
$atom_feed = common_local_url('ApiTimelineUser',
array('format' => 'atom',
'id' => $profile->nickname));
$xs->element('link', array('rel' => 'self',
'type' => 'application/atom+xml',
'href' => $profile->profileurl));
$xs->element('link', array('rel' => 'license', $xs->element('link', array('rel' => 'license',
'href' => common_config('license', 'url'))); 'href' => common_config('license', 'url')));
} }
$xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
$xs->element('updated', null, common_date_w3dtf($this->created)); // FIXME: not true!
$xs->elementEnd('source'); $xs->elementEnd('source');
} }
}
Event::handle('EndActivitySource', array(&$this, &$xs)); Event::handle('EndActivitySource', array(&$this, &$xs));
} }

View File

@ -152,18 +152,17 @@ class Profile extends Memcached_DataObject
* *
* @return mixed Notice or null * @return mixed Notice or null
*/ */
function getCurrentNotice() function getCurrentNotice()
{ {
$notice = new Notice(); $notice = $this->getNotices(0, 1);
$notice->profile_id = $this->id;
// @fixme change this to sort on notice.id only when indexes are updated if ($notice->fetch()) {
$notice->orderBy('created DESC, notice.id DESC');
$notice->limit(1);
if ($notice->find(true)) {
return $notice; return $notice;
} } else {
return null; return null;
} }
}
function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0) function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0)
{ {
@ -943,4 +942,20 @@ class Profile extends Memcached_DataObject
return $result; return $result;
} }
function getAtomFeed()
{
$feed = null;
if (Event::handle('StartProfileGetAtomFeed', array($this, &$feed))) {
$user = User::staticGet('id', $this->id);
if (!empty($user)) {
$feed = common_local_url('ApiTimelineUser', array('id' => $user->id,
'format' => 'atom'));
}
Event::handle('EndProfileGetAtomFeed', array($this, $feed));
}
return $feed;
}
} }

View File

@ -953,4 +953,16 @@ class OStatusPlugin extends Plugin
} }
return false; return false;
} }
public function onStartProfileGetAtomFeed($profile, &$feed)
{
$oprofile = Ostatus_profile::staticGet('profile_id', $profile->id);
if (empty($oprofile)) {
return true;
}
$feed = $oprofile->feeduri;
return false;
}
} }