]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Tidying up getUser calls to profiles and some events
authorMikael Nordfeldth <mmn@hethane.se>
Mon, 9 Sep 2013 19:35:16 +0000 (21:35 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Mon, 9 Sep 2013 21:03:34 +0000 (23:03 +0200)
getUser calls are much more strict, and one place where this was found was
in the (un)subscribe start/end event handlers, which resulted in making the
Subscription class a bit stricter, regarding ::start and ::cancel at least.
Several minor fixes in many files were made due to this.

This does NOT touch the Foreign_link function, which should also have a more
strict getUser call. That is a future project.

20 files changed:
EVENTS.txt
actions/foaf.php
classes/Notice.php
classes/Profile.php
classes/Subscription.php
classes/User.php
lib/activityobject.php
lib/apiaction.php
lib/apiauth.php
lib/command.php
lib/nosuchuserexception.php [new file with mode: 0644]
lib/subs.php
plugins/Activity/ActivityPlugin.php
plugins/Blacklist/BlacklistPlugin.php
plugins/Blog/classes/Blog_entry.php
plugins/Gravatar/GravatarPlugin.php
plugins/OMB/OMBPlugin.php
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/actions/ostatussub.php
plugins/SubscriptionThrottle/SubscriptionThrottlePlugin.php

index 49940e467fbc88d1b5309200c5a5f6a261840494..a3fd43bd6a98c256c7a0f2a67141036225894323 100644 (file)
@@ -725,20 +725,20 @@ EndUnblockProfile: when an unblock has succeeded
 - $profile: the person unblocked, can be remote
 
 StartSubscribe: when a subscription is starting
-- $user: the person subscribing
-- $other: the person being subscribed to
+- $profile: Profile that is subscribing
+- $other: Profile that is being subscribed to
 
 EndSubscribe: when a subscription is finished
-- $user: the person subscribing
-- $other: the person being subscribed to
+- $profile: Profile that is subscribing
+- $other: Profile that is being subscribed to
 
 StartUnsubscribe: when an unsubscribe is starting
-- $user: the person unsubscribing
-- $other: the person being unsubscribed from
+- $profile: Profile that is unsubscribing
+- $other: Profile that is being unsubscribed from
 
 EndUnsubscribe: when an unsubscribe is done
-- $user: the person unsubscribing
-- $other: the person being unsubscribed to
+- $profile: Profile that is unsubscribing
+- $other: Profile that is being unsubscribed from
 
 StartJoinGroup: when a user is joining a group
 - $group: the group being joined
index de03c337886e10a1f13a5bc89b4194cb622d82e2..77e27796db059cd88ec5c1b34625f5366b353137 100644 (file)
@@ -175,7 +175,6 @@ class FoafAction extends Action
                     common_debug('Got a bad subscription: '.print_r($sub,true));
                     continue;
                 }
-                $user = $profile->getUser();
                 $other_uri = $profile->getUri();
                 if (array_key_exists($other_uri, $person)) {
                     $person[$other_uri][0] = BOTH;
@@ -183,7 +182,7 @@ class FoafAction extends Action
                     $person[$other_uri] = array(LISTENER,
                                                 $profile->id,
                                                 $profile->nickname,
-                                                $user ? 'local' : 'remote');
+                                                $profile->isLocal() ? 'local' : 'remote');
                 }
                 unset($profile);
             }
@@ -289,13 +288,12 @@ class FoafAction extends Action
                         common_debug('Got a bad subscription: '.print_r($sub,true));
                         continue;
                     }
-                    $user = $profile->getUser();
                     $other_uri = $profile->getUri();
                     $this->element('sioc:follows', array('rdf:resource' => $other_uri.'#acct'));
                     $person[$other_uri] = array(LISTENEE,
                                                 $profile->id,
                                                 $profile->nickname,
-                                                $user ? 'local' : 'remote');
+                                                $profile->isLocal() ? 'local' : 'remote');
                     unset($profile);
                 }
             }
index 7b87e394ce08bd3f51d5adee867f40a69c56dac7..1aba98b7bc8aca41d067e52ce55d9ba4e1a228e2 100644 (file)
@@ -522,14 +522,16 @@ class Notice extends Managed_DataObject
 
         // For private streams
 
-        $user = $profile->getUser();
+        try {
+            $user = $profile->getUser();
 
-        if (!empty($user)) {
             if ($user->private_stream &&
                 ($notice->scope == Notice::PUBLIC_SCOPE ||
                  $notice->scope == Notice::SITE_SCOPE)) {
                 $notice->scope |= Notice::FOLLOWER_SCOPE;
             }
+        } catch (NoSuchUserException $e) {
+            // Cannot handle private streams for remote profiles
         }
 
         // Force the scope for private groups
@@ -2420,11 +2422,8 @@ class Notice extends Managed_DataObject
 
             // Only for users on this site
 
-            if ($scope & Notice::SITE_SCOPE) {
-                $user = $profile->getUser();
-                if (empty($user)) {
-                    return false;
-                }
+            if (($scope & Notice::SITE_SCOPE) && !$profile->isLocal()) {
+                return false;
             }
 
             // Only for users mentioned in the notice
index 6f502c9c188ced49fa8738a21dd200179e829a93..fe8e11641989603e1067b5b8fe44380fff9e3d7d 100644 (file)
@@ -84,15 +84,28 @@ class Profile extends Managed_DataObject
 
     protected $_user = -1;  // Uninitialized value distinct from null
 
-    function getUser()
+    public function getUser()
     {
-        if (is_int($this->_user) && $this->_user == -1) {
+        if ($this->_user === -1) {
             $this->_user = User::getKV('id', $this->id);
         }
+        if (!is_a($this->_user, 'User')) {
+            throw new NoSuchUserException(array('id'=>$this->id));
+        }
 
         return $this->_user;
     }
 
+    public function isLocal()
+    {
+        try {
+            $this->getUser();
+        } catch (NoSuchUserException $e) {
+            return false;
+        }
+        return true;
+    }
+
     protected $_avatars;
 
     function getAvatar($width, $height=null)
index 1a4a714455cedc183a78b90e0d84ad904e22877d..0c0c6489dedf7bd1b8b5851f953205f6a94590e0 100644 (file)
@@ -79,16 +79,8 @@ class Subscription extends Managed_DataObject
      * @return mixed Subscription or Subscription_queue: new subscription info
      */
 
-    static function start($subscriber, $other, $force=false)
+    static function start(Profile $subscriber, Profile $other, $force=false)
     {
-        // @fixme should we enforce this as profiles in callers instead?
-        if ($subscriber instanceof User) {
-            $subscriber = $subscriber->getProfile();
-        }
-        if ($other instanceof User) {
-            $other = $other->getProfile();
-        }
-
         if (!$subscriber->hasRight(Right::SUBSCRIBE)) {
             // TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
             throw new Exception(_('You have been banned from subscribing.'));
@@ -193,7 +185,7 @@ class Subscription extends Managed_DataObject
      * Cancel a subscription
      *
      */
-    function cancel($subscriber, $other)
+    function cancel(Profile $subscriber, Profile $other)
     {
         if (!self::exists($subscriber, $other)) {
             // TRANS: Exception thrown when trying to unsibscribe without a subscription.
index 55057574dbbe617fcd3062a5bb03e1fd682be174..e8e06a2d40b9d00f17f512bb980343dbad2e0d38 100644 (file)
@@ -225,14 +225,6 @@ class User extends Managed_DataObject
         return Sms_carrier::getKV('id', $this->carrier);
     }
 
-    /**
-     * @deprecated use Subscription::start($sub, $other);
-     */
-    function subscribeTo($other)
-    {
-        return Subscription::start($this->getProfile(), $other);
-    }
-
     function hasBlocked($other)
     {
         $profile = $this->getProfile();
@@ -437,7 +429,7 @@ class User extends Managed_DataObject
                     common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
                                __FILE__);
                 } else {
-                    Subscription::start($user, $defuser);
+                    Subscription::start($profile, $defuser->getProfile());
                 }
             }
 
@@ -594,7 +586,7 @@ class User extends Managed_DataObject
         return Profile_tag::setTags($this->id, $this->id, $newtags, $privacy);
     }
 
-    function block($other)
+    function block(Profile $other)
     {
         // Add a new block record
 
index ee69e1c7623001615852a8b8ef2d7be4e9f89105..741aefdd6bb4e4f01767bc3ebd4eff4184c2bbb4 100644 (file)
@@ -506,7 +506,7 @@ class ActivityObject
 
             $object->poco = PoCo::fromProfile($profile);
 
-            if ($profile->getUser()) {
+            if ($profile->isLocal()) {
                 $object->extra[] = array('followers', array('url' => common_local_url('subscribers', array('nickname' => $profile->nickname))));
             }
 
index edd184934fb2c35d294040086874977f100c7e51..54c082244841ddf85273a4b2376a985fbe110776 100644 (file)
@@ -202,7 +202,11 @@ class ApiAction extends Action
     {
         $twitter_user = array();
 
-        $user = $profile->getUser();
+        try {
+            $user = $profile->getUser();
+        } catch (NoSuchUserException $e) {
+            $user = null;
+        }
 
         $twitter_user['id'] = intval($profile->id);
         $twitter_user['name'] = $profile->getBestName();
index ecb206bab1b58172684bd654fa81eabe723d3f75..499c50248032eee1e677a7a3cb8fe3028d7626ef 100644 (file)
@@ -103,6 +103,13 @@ class ApiAuthAction extends ApiAction
             $this->checkOAuthRequest($oauthReq);
         }
 
+        // NOTE: Make sure we're scoped properly based on the auths!
+        if (isset($this->auth_user) && !empty($this->auth_user)) {
+            $this->scoped = $this->auth_user->getProfile();
+        } else {
+            $this->scoped = null;
+        }
+
         // Reject API calls with the wrong access level
 
         if ($this->isReadOnly($args) == false) {
index e93b7fbfee62bb2237b9a69fdb7fb8e0cf8816dd..57708deaf8e1dc75f7d4c3a363ec9a6f6e5b4d18 100644 (file)
@@ -777,8 +777,7 @@ class SubCommand extends Command
         }
 
         try {
-            Subscription::start($this->user->getProfile(),
-                                $target);
+            Subscription::start($this->user->getProfile(), $target);
             // TRANS: Text shown after having subscribed to another user successfully.
             // TRANS: %s is the name of the user the subscription was requested for.
             $channel->output($this->user, sprintf(_('Subscribed to %s.'), $this->other));
@@ -809,8 +808,7 @@ class UnsubCommand extends Command
         $target = $this->getProfile($this->other);
 
         try {
-            Subscription::cancel($this->user->getProfile(),
-                                 $target);
+            Subscription::cancel($this->user->getProfile(), $target);
             // TRANS: Text shown after having unsubscribed from another user successfully.
             // TRANS: %s is the name of the user the unsubscription was requested for.
             $channel->output($this->user, sprintf(_('Unsubscribed from %s.'), $this->other));
diff --git a/lib/nosuchuserexception.php b/lib/nosuchuserexception.php
new file mode 100644 (file)
index 0000000..0fa1c8d
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * class for an exception when a local user is not found by certain criteria
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Exception
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Mikael Nordfeldth <mmn@hethane.se>
+ * @copyright 2013 Free Software Foundation, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Class for an exception when a local user is not found by certain criteria
+ *
+ * @category Exception
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @author   Mikael Nordfeldth <mmn@hethane.se>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link     http://status.net/
+ */
+
+class NoSuchUserException extends ServerException
+{
+    public $data = array();
+
+    /**
+     * constructor
+     *
+     * @param array $data user search criteria
+     */
+
+    public function __construct(array $data)
+    {
+        // filter on unique keys for local users
+        foreach(array('id', 'email', 'nickname') as $key) {
+            if (isset($data[$key]) && !empty($data[$key])) {
+                $this->data[$key] = $data[$key];
+            }
+        }
+
+        // Here we could log the failed lookup
+
+        parent::__construct(_('No such user found.'));
+    }
+}
index 165bbaa8ff7a4bbdc09429f3b703e55d6407846d..6ac448b9546b8ffa56c897e2ee1180ca4e2b03f4 100644 (file)
@@ -26,6 +26,9 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
 function subs_subscribe_to($user, $other)
 {
+    if (is_a($other, 'User')) {
+        $other = $other->getProfile();
+    }
     try {
         Subscription::start($user->getProfile(), $other);
         return true;
@@ -36,6 +39,9 @@ function subs_subscribe_to($user, $other)
 
 function subs_unsubscribe_to($user, $other)
 {
+    if (is_a($other, 'User')) {
+        $other = $other->getProfile();
+    }
     try {
         Subscription::cancel($user->getProfile(), $other);
         return true;
index bffd7a3a10f43314f4f33bd7658b89a81c50f238..ec8d6d69119c0ea8034ed3eb929996668b7f4140 100644 (file)
@@ -57,82 +57,88 @@ class ActivityPlugin extends Plugin
     public $StartLike = false;
     public $StopLike = false;
 
-    function onEndSubscribe($subscriber, $other)
+    function onEndSubscribe(Profile $profile, Profile $other)
     {
         // Only do this if config is enabled
         if(!$this->StartFollowUser) return true;
-        $user = $subscriber->getUser();
-        if (!empty($user)) {
-            $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id,
-                                               'subscribed' => $other->id));
-            // TRANS: Text for "started following" item in activity plugin.
-            // TRANS: %1$s is a profile URL, %2$s is a profile name,
-            // TRANS: %3$s is a profile URL, %4$s is a profile name.
-            $rendered = sprintf(_m('<a href="%1$s">%2$s</a> started following <a href="%3$s">%4$s</a>.'),
-                                $subscriber->profileurl,
-                                $subscriber->getBestName(),
-                                $other->profileurl,
-                                $other->getBestName());
-            // TRANS: Text for "started following" item in activity plugin.
-            // TRANS: %1$s is a profile name, %2$s is a profile URL,
-            // TRANS: %3$s is a profile name, %4$s is a profile URL.
-            $content  = sprintf(_m('%1$s (%2$s) started following %3$s (%4$s).'),
-                                $subscriber->getBestName(),
-                                $subscriber->profileurl,
-                                $other->getBestName(),
-                                $other->profileurl);
-
-            $notice = Notice::saveNew($user->id,
-                                      $content,
-                                      ActivityPlugin::SOURCE,
-                                      array('rendered' => $rendered,
-                                            'urls' => array(),
-                                            'replies' => array($other->getUri()),
-                                            'verb' => ActivityVerb::FOLLOW,
-                                            'object_type' => ActivityObject::PERSON,
-                                            'uri' => $sub->uri));
+
+        if (!$profile->isLocal()) {
+            // can't do anything with remote user anyway
+            return true;
         }
+
+        $sub = Subscription::pkeyGet(array('subscriber' => $profile->id,
+                                           'subscribed' => $other->id));
+        // TRANS: Text for "started following" item in activity plugin.
+        // TRANS: %1$s is a profile URL, %2$s is a profile name,
+        // TRANS: %3$s is a profile URL, %4$s is a profile name.
+        $rendered = sprintf(_m('<a href="%1$s">%2$s</a> started following <a href="%3$s">%4$s</a>.'),
+                            $profile->profileurl,
+                            $profile->getBestName(),
+                            $other->profileurl,
+                            $other->getBestName());
+        // TRANS: Text for "started following" item in activity plugin.
+        // TRANS: %1$s is a profile name, %2$s is a profile URL,
+        // TRANS: %3$s is a profile name, %4$s is a profile URL.
+        $content  = sprintf(_m('%1$s (%2$s) started following %3$s (%4$s).'),
+                            $profile->getBestName(),
+                            $profile->profileurl,
+                            $other->getBestName(),
+                            $other->profileurl);
+
+        $notice = Notice::saveNew($profile->id,
+                                  $content,
+                                  ActivityPlugin::SOURCE,
+                                  array('rendered' => $rendered,
+                                        'urls' => array(),
+                                        'replies' => array($other->getUri()),
+                                        'verb' => ActivityVerb::FOLLOW,
+                                        'object_type' => ActivityObject::PERSON,
+                                        'uri' => $sub->uri));
         return true;
     }
 
-    function onEndUnsubscribe($subscriber, $other)
+    function onEndUnsubscribe(Profile $profile, Profile $other)
     {
         // Only do this if config is enabled
         if(!$this->StopFollowUser) return true;
-        $user = $subscriber->getUser();
-        if (!empty($user)) {
-            // TRANS: Text for "stopped following" item in activity plugin.
-            // TRANS: %1$s is a profile URL, %2$s is a profile name,
-            // TRANS: %3$s is a profile URL, %4$s is a profile name.
-            $rendered = sprintf(_m('<a href="%1$s">%2$s</a> stopped following <a href="%3$s">%4$s</a>.'),
-                                $subscriber->profileurl,
-                                $subscriber->getBestName(),
-                                $other->profileurl,
-                                $other->getBestName());
-            // TRANS: Text for "stopped following" item in activity plugin.
-            // TRANS: %1$s is a profile name, %2$s is a profile URL,
-            // TRANS: %3$s is a profile name, %4$s is a profile URL.
-            $content  = sprintf(_m('%1$s (%2$s) stopped following %3$s (%4$s).'),
-                                $subscriber->getBestName(),
-                                $subscriber->profileurl,
-                                $other->getBestName(),
-                                $other->profileurl);
-
-            $uri = TagURI::mint('stop-following:%d:%d:%s',
-                                $subscriber->id,
-                                $other->id,
-                                common_date_iso8601(common_sql_now()));
-
-            $notice = Notice::saveNew($user->id,
-                                      $content,
-                                      ActivityPlugin::SOURCE,
-                                      array('rendered' => $rendered,
-                                            'urls' => array(),
-                                            'replies' => array($other->getUri()),
-                                            'uri' => $uri,
-                                            'verb' => ActivityVerb::UNFOLLOW,
-                                            'object_type' => ActivityObject::PERSON));
+
+        if (!$profile->isLocal()) {
+            return true;
         }
+
+        // TRANS: Text for "stopped following" item in activity plugin.
+        // TRANS: %1$s is a profile URL, %2$s is a profile name,
+        // TRANS: %3$s is a profile URL, %4$s is a profile name.
+        $rendered = sprintf(_m('<a href="%1$s">%2$s</a> stopped following <a href="%3$s">%4$s</a>.'),
+                            $profile->profileurl,
+                            $profile->getBestName(),
+                            $other->profileurl,
+                            $other->getBestName());
+        // TRANS: Text for "stopped following" item in activity plugin.
+        // TRANS: %1$s is a profile name, %2$s is a profile URL,
+        // TRANS: %3$s is a profile name, %4$s is a profile URL.
+        $content  = sprintf(_m('%1$s (%2$s) stopped following %3$s (%4$s).'),
+                            $profile->getBestName(),
+                            $profile->profileurl,
+                            $other->getBestName(),
+                            $other->profileurl);
+
+        $uri = TagURI::mint('stop-following:%d:%d:%s',
+                            $profile->id,
+                            $other->id,
+                            common_date_iso8601(common_sql_now()));
+
+        $notice = Notice::saveNew($profile->id,
+                                  $content,
+                                  ActivityPlugin::SOURCE,
+                                  array('rendered' => $rendered,
+                                        'urls' => array(),
+                                        'replies' => array($other->getUri()),
+                                        'uri' => $uri,
+                                        'verb' => ActivityVerb::UNFOLLOW,
+                                        'object_type' => ActivityObject::PERSON));
+
         return true;
     }
 
@@ -141,42 +147,42 @@ class ActivityPlugin extends Plugin
         //  Only do this if config is enabled
         if(!$this->StartLike) return true;
 
-        $user = $profile->getUser();
-
-        if (!empty($user)) {
-
-            $author = $notice->getProfile();
-            $fave   = Fave::pkeyGet(array('user_id' => $user->id,
-                                          'notice_id' => $notice->id));
-
-            // TRANS: Text for "liked" item in activity plugin.
-            // TRANS: %1$s is a profile URL, %2$s is a profile name,
-            // TRANS: %3$s is a notice URL, %4$s is an author name.
-            $rendered = sprintf(_m('<a href="%1$s">%2$s</a> liked <a href="%3$s">%4$s\'s update</a>.'),
-                                $profile->profileurl,
-                                $profile->getBestName(),
-                                $notice->bestUrl(),
-                                $author->getBestName());
-            // TRANS: Text for "liked" item in activity plugin.
-            // TRANS: %1$s is a profile name, %2$s is a profile URL,
-            // TRANS: %3$s is an author name, %4$s is a notice URL.
-            $content  = sprintf(_m('%1$s (%2$s) liked %3$s\'s status (%4$s).'),
-                                $profile->getBestName(),
-                                $profile->profileurl,
-                                $author->getBestName(),
-                                $notice->bestUrl());
-
-            $notice = Notice::saveNew($user->id,
-                                      $content,
-                                      ActivityPlugin::SOURCE,
-                                      array('rendered' => $rendered,
-                                            'urls' => array(),
-                                            'replies' => array($author->getUri()),
-                                            'uri' => $fave->getURI(),
-                                            'verb' => ActivityVerb::FAVORITE,
-                                            'object_type' => (($notice->verb == ActivityVerb::POST) ?
-                                                             $notice->object_type : ActivityObject::ACTIVITY)));
+        if (!$profile->isLocal()) {
+            return true;
         }
+
+        $author = $notice->getProfile();
+        $fave   = Fave::pkeyGet(array('user_id' => $profile->id,
+                                      'notice_id' => $notice->id));
+
+        // TRANS: Text for "liked" item in activity plugin.
+        // TRANS: %1$s is a profile URL, %2$s is a profile name,
+        // TRANS: %3$s is a notice URL, %4$s is an author name.
+        $rendered = sprintf(_m('<a href="%1$s">%2$s</a> liked <a href="%3$s">%4$s\'s update</a>.'),
+                            $profile->profileurl,
+                            $profile->getBestName(),
+                            $notice->bestUrl(),
+                            $author->getBestName());
+        // TRANS: Text for "liked" item in activity plugin.
+        // TRANS: %1$s is a profile name, %2$s is a profile URL,
+        // TRANS: %3$s is an author name, %4$s is a notice URL.
+        $content  = sprintf(_m('%1$s (%2$s) liked %3$s\'s status (%4$s).'),
+                            $profile->getBestName(),
+                            $profile->profileurl,
+                            $author->getBestName(),
+                            $notice->bestUrl());
+
+        $notice = Notice::saveNew($profile->id,
+                                  $content,
+                                  ActivityPlugin::SOURCE,
+                                  array('rendered' => $rendered,
+                                        'urls' => array(),
+                                        'replies' => array($author->getUri()),
+                                        'uri' => $fave->getURI(),
+                                        'verb' => ActivityVerb::FAVORITE,
+                                        'object_type' => (($notice->verb == ActivityVerb::POST) ?
+                                                         $notice->object_type : ActivityObject::ACTIVITY)));
+
         return true;
     }
 
@@ -184,43 +190,45 @@ class ActivityPlugin extends Plugin
     {
         // Only do this if config is enabled
         if(!$this->StopLike) return true;
-        $user = User::getKV('id', $profile->id);
-
-        if (!empty($user)) {
-            $author = Profile::getKV('id', $notice->profile_id);
-            // TRANS: Text for "stopped liking" item in activity plugin.
-            // TRANS: %1$s is a profile URL, %2$s is a profile name,
-            // TRANS: %3$s is a notice URL, %4$s is an author name.
-            $rendered = sprintf(_m('<a href="%1$s">%2$s</a> stopped liking <a href="%3$s">%4$s\'s update</a>.'),
-                                $profile->profileurl,
-                                $profile->getBestName(),
-                                $notice->bestUrl(),
-                                $author->getBestName());
-            // TRANS: Text for "stopped liking" item in activity plugin.
-            // TRANS: %1$s is a profile name, %2$s is a profile URL,
-            // TRANS: %3$s is an author name, %4$s is a notice URL.
-            $content  = sprintf(_m('%1$s (%2$s) stopped liking %3$s\'s status (%4$s).'),
-                                $profile->getBestName(),
-                                $profile->profileurl,
-                                $author->getBestName(),
-                                $notice->bestUrl());
-
-            $uri = TagURI::mint('unlike:%d:%d:%s',
-                                $profile->id,
-                                $notice->id,
-                                common_date_iso8601(common_sql_now()));
-
-            $notice = Notice::saveNew($user->id,
-                                      $content,
-                                      ActivityPlugin::SOURCE,
-                                      array('rendered' => $rendered,
-                                            'urls' => array(),
-                                            'replies' => array($author->getUri()),
-                                            'uri' => $uri,
-                                            'verb' => ActivityVerb::UNFAVORITE,
-                                            'object_type' => (($notice->verb == ActivityVerb::POST) ?
-                                                             $notice->object_type : ActivityObject::ACTIVITY)));
+
+        if (!$profile->isLocal()) {
+            return true;
         }
+
+        $author = Profile::getKV('id', $notice->profile_id);
+        // TRANS: Text for "stopped liking" item in activity plugin.
+        // TRANS: %1$s is a profile URL, %2$s is a profile name,
+        // TRANS: %3$s is a notice URL, %4$s is an author name.
+        $rendered = sprintf(_m('<a href="%1$s">%2$s</a> stopped liking <a href="%3$s">%4$s\'s update</a>.'),
+                            $profile->profileurl,
+                            $profile->getBestName(),
+                            $notice->bestUrl(),
+                            $author->getBestName());
+        // TRANS: Text for "stopped liking" item in activity plugin.
+        // TRANS: %1$s is a profile name, %2$s is a profile URL,
+        // TRANS: %3$s is an author name, %4$s is a notice URL.
+        $content  = sprintf(_m('%1$s (%2$s) stopped liking %3$s\'s status (%4$s).'),
+                            $profile->getBestName(),
+                            $profile->profileurl,
+                            $author->getBestName(),
+                            $notice->bestUrl());
+
+        $uri = TagURI::mint('unlike:%d:%d:%s',
+                            $profile->id,
+                            $notice->id,
+                            common_date_iso8601(common_sql_now()));
+
+        $notice = Notice::saveNew($profile->id,
+                                  $content,
+                                  ActivityPlugin::SOURCE,
+                                  array('rendered' => $rendered,
+                                        'urls' => array(),
+                                        'replies' => array($author->getUri()),
+                                        'uri' => $uri,
+                                        'verb' => ActivityVerb::UNFAVORITE,
+                                        'object_type' => (($notice->verb == ActivityVerb::POST) ?
+                                                         $notice->object_type : ActivityObject::ACTIVITY)));
+
         return true;
     }
 
@@ -229,9 +237,7 @@ class ActivityPlugin extends Plugin
         // Only do this if config is enabled
         if(!$this->JoinGroup) return true;
 
-        $user = $profile->getUser();
-
-        if (empty($user)) {
+        if (!$profile->isLocal()) {
             return true;
         }
 
@@ -255,7 +261,7 @@ class ActivityPlugin extends Plugin
         $mem = Group_member::pkeyGet(array('group_id' => $group->id,
                                            'profile_id' => $profile->id));
 
-        $notice = Notice::saveNew($user->id,
+        $notice = Notice::saveNew($profile->id,
                                   $content,
                                   ActivityPlugin::SOURCE,
                                   array('rendered' => $rendered,
@@ -272,9 +278,7 @@ class ActivityPlugin extends Plugin
         // Only do this if config is enabled
         if(!$this->LeaveGroup) return true;
 
-        $user = $profile->getUser();
-
-        if (empty($user)) {
+        if (!$profile->isLocal()) {
             return true;
         }
 
@@ -296,11 +300,11 @@ class ActivityPlugin extends Plugin
                             $group->homeUrl());
 
         $uri = TagURI::mint('leave:%d:%d:%s',
-                            $user->id,
+                            $profile->id,
                             $group->id,
                             common_date_iso8601(common_sql_now()));
 
-        $notice = Notice::saveNew($user->id,
+        $notice = Notice::saveNew($profile->id,
                                   $content,
                                   ActivityPlugin::SOURCE,
                                   array('rendered' => $rendered,
index 2a99e65f112dd41f0035caeb48a684d64cf6d409..142ec2d056d4c0adfa572d8ee3bcf5b5085c1c04 100644 (file)
@@ -481,7 +481,7 @@ class BlacklistPlugin extends Plugin
     /**
      * Check URLs and homepages for blacklisted users.
      */
-    function onStartSubscribe($subscriber, $other)
+    function onStartSubscribe(Profile $subscriber, Profile $other)
     {
         foreach (array($other->profileurl, $other->homepage) as $url) {
 
index b7de821d923096927c72f36acfe46a47edd51627..5e0effcc74e8c2fc7fbc27795bc8291d398e459c 100644 (file)
@@ -158,9 +158,10 @@ class Blog_entry extends Managed_DataObject
         // Use user's preferences for short URLs, if possible
 
         try {
-            $user = $profile->getUser();
-            $shortUrl = File_redirection::makeShort($url,
-                                                    empty($user) ? null : $user);
+            $user = $profile->isLocal()
+                        ? $profile->getUser()
+                        : null;
+            $shortUrl = File_redirection::makeShort($url, $user);
         } catch (Exception $e) {
             // Don't let this stop us.
             $shortUrl = $url;
index bdb73f3433b06f966e21a6048f68773d4fe26cda..2cb6bd8cac5a6da6426601d91a0f1d2eb44953ec 100644 (file)
@@ -33,13 +33,17 @@ class GravatarPlugin extends Plugin
     function onEndProfileGetAvatar($profile, $size, &$avatar)
     {
         if (empty($avatar)) {
-            $user = $profile->getUser();
-            if (!empty($user) && !empty($user->email)) {
-                // Fake one!
-                $avatar = new Avatar();
-                $avatar->width = $avatar->height = $size;
-                $avatar->url = $this->gravatar_url($user->email, $size);
-                return false;
+            try {
+                $user = $profile->getUser();
+                if (!empty($user->email)) {
+                    // Fake one!
+                    $avatar = new Avatar();
+                    $avatar->width = $avatar->height = $size;
+                    $avatar->url = $this->gravatar_url($user->email, $size);
+                    return false;
+                }
+            } catch (NoSuchUserException $e) {
+                return true;
             }
         }
 
index e2552e8e0881be6b189de1d3b1d34402b25abe69..cd319d24c28725aebc41d6444127fff7cdcd1b26 100644 (file)
@@ -182,16 +182,16 @@ class OMBPlugin extends Plugin
     /**
      * Check for illegal subscription attempts
      *
-     * @param User    $user     subscriber
+     * @param Profile $profile  subscriber
      * @param Profile $other    subscribee
      * @return hook return value
      */
-    function onStartSubscribe($profile, $other)
+    function onStartSubscribe(Profile $profile, Profile $other)
     {
         // OMB 0.1 doesn't have a mechanism for local-server-
         // originated subscription.
 
-        $omb01 = Remote_profile::getKV('id', $other_id);
+        $omb01 = Remote_profile::getKV('id', $other->id);
 
         if (!empty($omb01)) {
             throw new ClientException(
@@ -257,14 +257,14 @@ class OMBPlugin extends Plugin
     /**
      * Remove old OMB subscription tokens
      *
-     * @param User    $user     subscriber
+     * @param Profile $profile  subscriber
      * @param Profile $other    subscribee
      * @return hook return value
      */
-    function onEndUnsubscribe($profile, $other)
+    function onEndUnsubscribe(Profile $profile, Profile $other)
     {
         $sub = Subscription::pkeyGet(
-            array('subscriber' => $subscriber->id, 'subscribed' => $other->id)
+            array('subscriber' => $profile->id, 'subscribed' => $other->id)
         );
 
         if (!empty($sub->token)) {
index bcb8a3098c0041a5adfb5e8387ed00419436cc06..d34535bdcbe1f5792aeb0dbb4bbbcc3daea53e4d 100644 (file)
@@ -601,18 +601,16 @@ class OStatusPlugin extends Plugin
      * @fixme If something else aborts later, we could end up with a stray
      *        PuSH subscription. This is relatively harmless, though.
      *
-     * @param Profile $subscriber
-     * @param Profile $other
+     * @param Profile $profile  subscriber
+     * @param Profile $other    subscribee
      *
      * @return hook return code
      *
      * @throws Exception
      */
-    function onStartSubscribe($subscriber, $other)
+    function onStartSubscribe(Profile $profile, Profile $other)
     {
-        $user = User::getKV('id', $subscriber->id);
-
-        if (empty($user)) {
+        if (!$profile->isLocal()) {
             return true;
         }
 
@@ -632,18 +630,16 @@ class OStatusPlugin extends Plugin
      * Having established a remote subscription, send a notification to the
      * remote OStatus profile's endpoint.
      *
-     * @param Profile $subscriber
-     * @param Profile $other
+     * @param Profile $profile  subscriber
+     * @param Profile $other    subscribee
      *
      * @return hook return code
      *
      * @throws Exception
      */
-    function onEndSubscribe($subscriber, $other)
+    function onEndSubscribe(Profile $profile, Profile $other)
     {
-        $user = User::getKV('id', $subscriber->id);
-
-        if (empty($user)) {
+        if (!$profile->isLocal()) {
             return true;
         }
 
@@ -653,12 +649,12 @@ class OStatusPlugin extends Plugin
             return true;
         }
 
-        $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id,
+        $sub = Subscription::pkeyGet(array('subscriber' => $profile->id,
                                            'subscribed' => $other->id));
 
         $act = $sub->asActivity();
 
-        $oprofile->notifyActivity($act, $subscriber);
+        $oprofile->notifyActivity($act, $profile);
 
         return true;
     }
@@ -671,11 +667,9 @@ class OStatusPlugin extends Plugin
      * @param Profile $other
      * @return hook return value
      */
-    function onEndUnsubscribe($profile, $other)
+    function onEndUnsubscribe(Profile $profile, Profile $other)
     {
-        $user = User::getKV('id', $profile->id);
-
-        if (empty($user)) {
+        if (!$profile->isLocal()) {
             return true;
         }
 
index 2c2bce0fe6e2ce563df3e264af656d79a211a668..59bd6761cab4cb101154da0526ca92f41e6db335 100644 (file)
@@ -298,7 +298,7 @@ class OStatusSubAction extends Action
         if ($user->isSubscribed($local)) {
             // TRANS: OStatus remote subscription dialog error.
             $this->showForm(_m('Already subscribed!'));
-        } elseif (Subscription::start($user, $local)) {
+        } elseif (Subscription::start($user->getProfile(), $local)) {
             $this->success();
         } else {
             // TRANS: OStatus remote subscription dialog error.
index 9e6fc9cab7cd70522dd556ec07cf80d7426667a1..2bc6d0fa62914accd44811cd7641cbdc9938006a 100644 (file)
@@ -55,15 +55,15 @@ class SubscriptionThrottlePlugin extends Plugin
     /**
      * Filter subscriptions to see if they're coming too fast.
      *
-     * @param User $user  The user subscribing
-     * @param User $other The user being subscribed to
+     * @param Profile $profile  The profile subscribing
+     * @param Profile $other    The profile being subscribed to
      *
      * @return boolean hook value
      */
-    function onStartSubscribe($user, $other)
+    function onStartSubscribe(Profile $profile, $other)
     {
         foreach ($this->subLimits as $seconds => $limit) {
-            $sub = $this->_getNthSub($user, $limit);
+            $sub = $this->_getNthSub($profile, $limit);
 
             if (!empty($sub)) {
                 $subtime = strtotime($sub->created);
@@ -105,18 +105,18 @@ class SubscriptionThrottlePlugin extends Plugin
     }
 
     /**
-     * Get the Nth most recent subscription for this user
+     * Get the Nth most recent subscription for this profile
      *
-     * @param User    $user The user to get subscriptions for
-     * @param integer $n    How far to count back
+     * @param Profile $profile profile to get subscriptions for
+     * @param integer $n       How far to count back
      *
      * @return Subscription a subscription or null
      */
-    private function _getNthSub($user, $n)
+    private function _getNthSub(Profile $profile, $n)
     {
         $sub = new Subscription();
 
-        $sub->subscriber = $user->id;
+        $sub->subscriber = $profile->id;
         $sub->orderBy('created DESC');
         $sub->limit($n - 1, 1);
 
@@ -128,14 +128,14 @@ class SubscriptionThrottlePlugin extends Plugin
     }
 
     /**
-     * Get the Nth most recent group membership for this user
+     * Get the Nth most recent group membership for this profile
      *
      * @param Profile $profile The user to get memberships for
      * @param integer $n       How far to count back
      *
      * @return Group_member a membership or null
      */
-    private function _getNthMem($profile, $n)
+    private function _getNthMem(Profile $profile, $n)
     {
         $mem = new Group_member();