]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
OStatus: Salmon favorite & unfavorite events now handled
authorBrion Vibber <brion@pobox.com>
Sun, 21 Feb 2010 00:45:30 +0000 (16:45 -0800)
committerBrion Vibber <brion@pobox.com>
Sun, 21 Feb 2010 00:45:30 +0000 (16:45 -0800)
plugins/OStatus/actions/usersalmon.php
plugins/OStatus/lib/salmonaction.php

index 4363488ddc333ef7acd53b086c4ff50e21bec647..20c6c2942a98d8d491d0a58261c22be3f6e1eed9 100644 (file)
@@ -131,10 +131,51 @@ class UsersalmonAction extends SalmonAction
 
     function handleFavorite()
     {
-        // WORST VARIABLE NAME EVER
-        $object = $this->act->object;
+        $notice = $this->getNotice($this->act->object);
+        $profile = $this->ensureProfile()->localProfile();
 
-        switch ($this->act->object->type) {
+        $old = Fave::pkeyGet(array('user_id' => $profile->id,
+                                   'notice_id' => $notice->id));
+
+        if (!empty($old)) {
+            throw new ClientException("We already know that's a fave!");
+        }
+
+        if (!Fave::addNew($profile, $notice)) {
+            throw new ClientException("Could not save new favorite.");
+        }
+    }
+
+    /**
+     * Remote user doesn't like one of our posts after all!
+     * Confirm the post is ours, and save a local favorite event.
+     */
+    function handleUnfavorite()
+    {
+        $notice = $this->getNotice($this->act->object);
+        $profile = $this->ensureProfile()->localProfile();
+
+        $fave = Fave::pkeyGet(array('user_id' => $profile->id,
+                                   'notice_id' => $notice->id));
+        if (empty($fave)) {
+            throw new ClientException("Notice wasn't favorited!");
+        }
+
+        $fave->delete();
+    }
+
+    /**
+     * @param ActivityObject $object
+     * @return Notice
+     * @throws ClientException on invalid input
+     */
+    function getNotice($object)
+    {
+        if (!$object) {
+            throw new ClientException("Can't favorite/unfavorite without an object.");
+        }
+
+        switch ($object->type) {
         case ActivityObject::ARTICLE:
         case ActivityObject::BLOGENTRY:
         case ActivityObject::NOTE:
@@ -155,35 +196,7 @@ class UsersalmonAction extends SalmonAction
             throw new ClientException("Notice with ID $object->id not posted by $this->user->id.");
         }
 
-        $profile = $this->ensureProfile();
-
-        $old = Fave::pkeyGet(array('user_id' => $profile->id,
-                                   'notice_id' => $notice->id));
-
-        if (!empty($old)) {
-            throw new ClientException("We already know that's a fave!");
-        }
-
-        $fave = new Fave();
-
-        // @fixme need to change this attribute name, maybe references
-        $fave->user_id   = $profile->id;
-        $fave->notice_id = $notice->id;
-
-        $result = $fave->insert();
-
-        if (!$result) {
-            common_log_db_error($fave, 'INSERT', __FILE__);
-            throw new ServerException('Could not save new favorite.');
-        }
-    }
-
-    /**
-     * Remote user doesn't like one of our posts after all!
-     * Confirm the post is ours, and save a local favorite event.
-     */
-    function handleUnfavorite()
-    {
+        return $notice;
     }
 
 }
index 7085e4583e20fe166b186e039f0896dfbb9e49d5..c83890507748248f162412a8c5bba0ff038dfc09 100644 (file)
@@ -81,6 +81,9 @@ class SalmonAction extends Action
             case ActivityVerb::FAVORITE:
                 $this->handleFavorite();
                 break;
+            case ActivityVerb::UNFAVORITE:
+                $this->handleUnfavorite();
+                break;
             case ActivityVerb::FOLLOW:
             case ActivityVerb::FRIEND:
                 $this->handleFollow();