]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Favorite plugin now "extends" Activity on NoticeAsActivity
authorMikael Nordfeldth <mmn@hethane.se>
Mon, 28 Jul 2014 08:02:53 +0000 (10:02 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Mon, 28 Jul 2014 08:02:53 +0000 (10:02 +0200)
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.

plugins/Event/EventPlugin.php
plugins/Favorite/FavoritePlugin.php
plugins/Favorite/classes/Fave.php

index a5ddc4725571afa928738482dee021de7f1fa748..bfc9c91606ec373519a1fdcfb10b83613c7af0ec 100644 (file)
@@ -243,7 +243,7 @@ class EventPlugin extends MicroAppPlugin
      *
      * @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) {
         case RSVP::POSITIVE:
         case RSVP::NEGATIVE:
index 82409d23f7a5a8ec6aaafb043718b492e83ec8b5..9f2618d5821cceaa0104ba933426f55466fb1801 100644 (file)
@@ -187,6 +187,24 @@ class FavoritePlugin extends ActivityHandlerPlugin
         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)
     {
index 3703c844dadefae59ef897850bc9509b2455a5d4..96e9520b3d45c355e75c063ce7df117ab7134c74 100644 (file)
@@ -271,6 +271,19 @@ class Fave extends Managed_DataObject
         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()
     {
         return 'activity';
@@ -312,6 +325,17 @@ class Fave extends Managed_DataObject
         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)
     {
         $object = self::parseActivityObject($actobj, $stored);