Favorite plugin now "extends" Activity on NoticeAsActivity

Got this mainly from my patches to FreeSocial. The idea is to migrate
also the Note activity to a plugin and have everything be handled as
events, only filling out the basic "context" stuff in the Notice class.
This commit is contained in:
Mikael Nordfeldth 2014-07-28 10:02:53 +02:00
parent 6e481d35ed
commit 509f31af0e
3 changed files with 43 additions and 1 deletions

View File

@ -243,7 +243,7 @@ class EventPlugin extends MicroAppPlugin
* *
* @return ActivityObject * @return ActivityObject
*/ */
function onEndNoticeAsActivity(Notice $stored, Activity $act, Profile $scoped=null) { protected function extendActivity(Notice $stored, Activity $act, Profile $scoped=null) {
switch ($stored->object_type) { switch ($stored->object_type) {
case RSVP::POSITIVE: case RSVP::POSITIVE:
case RSVP::NEGATIVE: case RSVP::NEGATIVE:

View File

@ -187,6 +187,24 @@ class FavoritePlugin extends ActivityHandlerPlugin
return $object; return $object;
} }
// FIXME: Put this in lib/activityhandlerplugin.php when we're ready
// with the other microapps/activityhandlers as well.
// Also it should be StartNoticeAsActivity (with a prepped Activity, including ->context etc.)
public function onEndNoticeAsActivity(Notice $stored, Activity $act, Profile $scoped=null)
{
if (!$this->isMyNotice($stored)) {
return true;
}
common_debug('Extending activity '.$stored->id.' with '.get_called_class());
$this->extendActivity($stored, $act, $scoped);
return false;
}
public function extendActivity(Notice $stored, Activity $act, Profile $scoped=null)
{
Fave::extendActivity($stored, $act, $scoped);
}
public function activityObjectFromNotice(Notice $notice) public function activityObjectFromNotice(Notice $notice)
{ {

View File

@ -271,6 +271,19 @@ class Fave extends Managed_DataObject
return $object; return $object;
} }
/**
* Retrieves the _targeted_ notice of a verb (such as the notice that was
* _favorited_, but not the favorite activity itself).
*
* @param Notice $stored The activity notice.
*
* @throws NoResultException when it can't find what it's looking for.
*/
static public function getTargetFromStored(Notice $stored)
{
return self::fromStored($stored)->getTarget();
}
static public function getObjectType() static public function getObjectType()
{ {
return 'activity'; return 'activity';
@ -312,6 +325,17 @@ class Fave extends Managed_DataObject
return $object; return $object;
} }
static public function extendActivity(Notice $stored, Activity $act, Profile $scoped=null)
{
$target = self::getTargetFromStored($stored);
$act->target = $target->asActivityObject();
$act->objects = array(clone($act->target));
$act->context->replyToID = $target->getUri();
$act->context->replyToUrl = $target->getUrl();
$act->title = ActivityUtils::verbToTitle($act->verb);
}
static function saveActivityObject(ActivityObject $actobj, Notice $stored) static function saveActivityObject(ActivityObject $actobj, Notice $stored)
{ {
$object = self::parseActivityObject($actobj, $stored); $object = self::parseActivityObject($actobj, $stored);