OStatus: send favorite/unfavorite notifications to remote authors

This commit is contained in:
Brion Vibber 2010-02-20 15:56:36 -08:00
parent ea9d6f21ec
commit 9c2fe8492f
2 changed files with 67 additions and 0 deletions

View File

@ -1104,6 +1104,38 @@ class Notice extends Memcached_DataObject
return $xs->getString();
}
/**
* Returns an XML string fragment with a reference to a notice as an
* Activity Streams noun object with the given element type.
*
* Assumes that 'activity' namespace has been previously defined.
*
* @param string $element one of 'subject', 'object', 'target'
* @return string
*/
function asActivityNoun($element)
{
$xs = new XMLStringer(true);
$xs->elementStart('activity:' . $element);
$xs->element('activity:object-type',
null,
'http://activitystrea.ms/schema/1.0/note');
$xs->element('id',
null,
$this->uri);
$xs->element('content',
array('type' => 'text/html'),
$this->rendered);
$xs->element('link',
array('type' => 'text/html',
'rel' => 'permalink',
'href' => $this->bestUrl()));
$xs->elementEnd('activity:' . $element);
return $xs->getString();
}
function bestUrl()
{
if (!empty($this->url)) {

View File

@ -357,4 +357,39 @@ class OStatusPlugin extends Plugin
return true;
}
/**
* Notify remote users when their notices get favorited.
*
* @param Profile or User $profile of local user doing the faving
* @param Notice $notice being favored
* @return hook return value
*/
function onEndFavorNotice($profile, Notice $notice)
{
if ($profile instanceof User) {
// @fixme upstream function should clarify its parameters
$profile = $profile->getProfile();
}
$oprofile = Ostatus_profile::staticGet('profile_id', $notice->profile_id);
if ($oprofile) {
$oprofile->notify($profile, ActivityVerb::FAVORITE, $notice);
}
}
/**
* Notify remote users when their notices get de-favorited.
*
* @param Profile or User $profile of local user doing the de-faving
* @param Notice $notice being favored
* @return hook return value
*/
function onEndDisfavorNotice(Profile $profile, Notice $notice)
{
$oprofile = Ostatus_profile::staticGet('profile_id', $notice->profile_id);
if ($oprofile) {
$oprofile->notify($profile, ActivityVerb::UNFAVORITE, $notice);
}
}
}