- $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
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;
$person[$other_uri] = array(LISTENER,
$profile->id,
$profile->nickname,
- $user ? 'local' : 'remote');
+ $profile->isLocal() ? 'local' : 'remote');
}
unset($profile);
}
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);
}
}
// 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
// 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
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)
* @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.'));
* 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.
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();
common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
__FILE__);
} else {
- Subscription::start($user, $defuser);
+ Subscription::start($profile, $defuser->getProfile());
}
}
return Profile_tag::setTags($this->id, $this->id, $newtags, $privacy);
}
- function block($other)
+ function block(Profile $other)
{
// Add a new block record
$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))));
}
{
$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();
$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) {
}
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));
$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));
--- /dev/null
+<?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.'));
+ }
+}
function subs_subscribe_to($user, $other)
{
+ if (is_a($other, 'User')) {
+ $other = $other->getProfile();
+ }
try {
Subscription::start($user->getProfile(), $other);
return true;
function subs_unsubscribe_to($user, $other)
{
+ if (is_a($other, 'User')) {
+ $other = $other->getProfile();
+ }
try {
Subscription::cancel($user->getProfile(), $other);
return true;
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;
}
// 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;
}
{
// 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;
}
// Only do this if config is enabled
if(!$this->JoinGroup) return true;
- $user = $profile->getUser();
-
- if (empty($user)) {
+ if (!$profile->isLocal()) {
return true;
}
$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,
// Only do this if config is enabled
if(!$this->LeaveGroup) return true;
- $user = $profile->getUser();
-
- if (empty($user)) {
+ if (!$profile->isLocal()) {
return true;
}
$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,
/**
* 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) {
// 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;
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;
}
}
/**
* 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(
/**
* 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)) {
* @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;
}
* 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;
}
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;
}
* @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;
}
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.
/**
* 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);
}
/**
- * 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);
}
/**
- * 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();