]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/actions/usersalmon.php
More modern coding, stuff related to subscriptions
[quix0rs-gnu-social.git] / plugins / OStatus / actions / usersalmon.php
index bc91b31559247922cb5a309db1fb3d1c96ff43ff..550c034e4921f8870a93cfaff178f8d2448bda2a 100644 (file)
@@ -17,9 +17,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * @package OStatusPlugin
@@ -27,7 +25,7 @@ if (!defined('STATUSNET')) {
  */
 class UsersalmonAction extends SalmonAction
 {
-    function prepare($args)
+    protected function prepare(array $args=array())
     {
         parent::prepare($args);
 
@@ -38,9 +36,9 @@ class UsersalmonAction extends SalmonAction
             $this->clientError(_m('No ID.'));
         }
 
-        $this->user = User::staticGet('id', $id);
+        $this->user = User::getKV('id', $id);
 
-        if (empty($this->user)) {
+        if (!$this->user instanceof User) {
             // TRANS: Client error displayed when referring to a non-existing user.
             $this->clientError(_m('No such user.'));
         }
@@ -74,38 +72,35 @@ class UsersalmonAction extends SalmonAction
         }
 
         // Notice must either be a) in reply to a notice by this user
-        // or b) to the attention of this user
-        // or c) in reply to a notice to the attention of this user
+        // or b) in reply to a notice to the attention of this user
+        // or c) to the attention of this user
 
         $context = $this->activity->context;
+        $notice = false;
 
         if (!empty($context->replyToID)) {
-            $notice = Notice::staticGet('uri', $context->replyToID);
-            if (empty($notice)) {
-                // TRANS: Client exception.
-                throw new ClientException(_m('In reply to unknown notice.'));
-            }
-            if ($notice->profile_id != $this->user->id &&
-                !in_array($this->user->id, $notice->getReplies())) {
-                // TRANS: Client exception.
-                throw new ClientException(_m('In reply to a notice not by this user and not mentioning this user.'));
-            }
-        } else if (!empty($context->attention)) {
-            if (!in_array($this->user->uri, $context->attention) &&
-                !in_array(common_profile_url($this->user->nickname), $context->attention)) {
-                common_log(LOG_ERR, "{$this->user->uri} not in attention list (".implode(',', $context->attention).")");
-                // TRANS: Client exception.
-                throw new ClientException(_m('To the attention of user(s), not including this one.'));
-            }
+            $notice = Notice::getKV('uri', $context->replyToID);
+        }
+
+        if ($notice instanceof Notice &&
+            ($notice->profile_id == $this->user->id ||
+             array_key_exists($this->user->id, $notice->getReplies())))
+        {
+            // In reply to a notice either from or mentioning this user.
+        } else if (!empty($context->attention) &&
+                   (array_key_exists($this->user->uri, $context->attention) ||
+                    array_key_exists($common_profile_url($this->user->nickname),
+                             $context->attention)))
+        {
+            // To the attention of this user.
         } else {
             // TRANS: Client exception.
             throw new ClientException(_m('Not to anyone in reply to anything.'));
         }
 
-        $existing = Notice::staticGet('uri', $this->activity->objects[0]->id);
-
-        if (!empty($existing)) {
-            common_log(LOG_ERR, "Not saving notice '{$existing->uri}'; already exists.");
+        $existing = Notice::getKV('uri', $this->activity->objects[0]->id);
+        if ($existing instanceof Notice) {
+            common_log(LOG_ERR, "Not saving notice with duplicate URI '".$existing->getUri()."' (seems it already exists).");
             return;
         }
 
@@ -119,8 +114,8 @@ class UsersalmonAction extends SalmonAction
     function handleFollow()
     {
         $oprofile = $this->ensureProfile();
-        if ($oprofile) {
-            common_log(LOG_INFO, "Setting up subscription from remote {$oprofile->uri} to local {$this->user->nickname}");
+        if ($oprofile instanceof Ostatus_profile) {
+            common_log(LOG_INFO, sprintf('Setting up subscription from remote %s to local %s', $oprofile->getUri(), $this->user->getNickname()));
             Subscription::start($oprofile->localProfile(),
                                 $this->user->getProfile());
         } else {
@@ -137,9 +132,13 @@ class UsersalmonAction extends SalmonAction
     function handleUnfollow()
     {
         $oprofile = $this->ensureProfile();
-        if ($oprofile) {
-            common_log(LOG_INFO, "Canceling subscription from remote {$oprofile->uri} to local {$this->user->nickname}");
-            Subscription::cancel($oprofile->localProfile(), $this->user->getProfile());
+        if ($oprofile instanceof Ostatus_profile) {
+            common_log(LOG_INFO, sprintf('Canceling subscription from remote %s to local %s', $oprofile->getUri(), $this->user->getNickname()));
+            try {
+                Subscription::cancel($oprofile->localProfile(), $this->user->getProfile());
+            } catch (AlreadyFulfilledException $e) {
+                common_debug('Subscription did not exist, so there was nothing to cancel');
+            }
         } else {
             common_log(LOG_ERR, "Can't cancel subscription from remote, didn't find the profile");
         }
@@ -158,7 +157,7 @@ class UsersalmonAction extends SalmonAction
         $old = Fave::pkeyGet(array('user_id' => $profile->id,
                                    'notice_id' => $notice->id));
 
-        if (!empty($old)) {
+        if ($old instanceof Fave) {
             // TRANS: Client exception.
             throw new ClientException(_m('This is already a favorite.'));
         }
@@ -180,7 +179,7 @@ class UsersalmonAction extends SalmonAction
 
         $fave = Fave::pkeyGet(array('user_id' => $profile->id,
                                    'notice_id' => $notice->id));
-        if (empty($fave)) {
+        if (!$fave instanceof Fave) {
             // TRANS: Client exception.
             throw new ClientException(_m('Notice was not favorited!'));
         }
@@ -194,12 +193,11 @@ class UsersalmonAction extends SalmonAction
             if ($this->activity->objects[0]->type != ActivityObject::PERSON) {
                 // TRANS: Client exception.
                 throw new ClientException(_m('Not a person object.'));
-                return false;
             }
             // this is a peopletag
-            $tagged = User::staticGet('uri', $this->activity->objects[0]->id);
+            $tagged = User::getKV('uri', $this->activity->objects[0]->id);
 
-            if (empty($tagged)) {
+            if (!$tagged instanceof User) {
                 // TRANS: Client exception.
                 throw new ClientException(_m('Unidentified profile being listed.'));
             }
@@ -231,9 +229,9 @@ class UsersalmonAction extends SalmonAction
                 return false;
             }
             // this is a peopletag
-            $tagged = User::staticGet('uri', $this->activity->objects[0]->id);
+            $tagged = User::getKV('uri', $this->activity->objects[0]->id);
 
-            if (empty($tagged)) {
+            if (!$tagged instanceof User) {
                 // TRANS: Client exception.
                 throw new ClientException(_m('Unidentified profile being unlisted.'));
             }
@@ -262,13 +260,8 @@ class UsersalmonAction extends SalmonAction
      * @return Notice
      * @throws ClientException on invalid input
      */
-    function getNotice($object)
+    function getNotice(ActivityObject $object)
     {
-        if (!$object) {
-            // TRANS: Client exception.
-            throw new ClientException(_m('Cannot favorite/unfavorite without an object.'));
-        }
-
         switch ($object->type) {
         case ActivityObject::ARTICLE:
         case ActivityObject::BLOGENTRY:
@@ -281,9 +274,9 @@ class UsersalmonAction extends SalmonAction
             throw new ClientException(_m('Cannot handle that kind of object for liking/faving.'));
         }
 
-        $notice = Notice::staticGet('uri', $object->id);
+        $notice = Notice::getKV('uri', $object->id);
 
-        if (empty($notice)) {
+        if (!$notice instanceof Notice) {
             // TRANS: Client exception. %s is an object ID.
             throw new ClientException(sprintf(_m('Notice with ID %s unknown.'),$object->id));
         }