Tidying up getUser calls to profiles and some events

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.
This commit is contained in:
Mikael Nordfeldth 2013-09-09 21:35:16 +02:00
parent c5bf6cb05e
commit 747fe9d59b
20 changed files with 317 additions and 236 deletions

View 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

View 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);
}
}

View 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

View 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)

View 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.

View 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

View 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))));
}

View 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();

View 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) {

View 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));

View File

@ -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.'));
}
}

View 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;

View 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,

View 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) {

View 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;

View 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;
}
}

View 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)) {

View 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;
}

View 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.

View 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();