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:
parent
c5bf6cb05e
commit
747fe9d59b
16
EVENTS.txt
16
EVENTS.txt
|
@ -725,20 +725,20 @@ EndUnblockProfile: when an unblock has succeeded
|
||||||
- $profile: the person unblocked, can be remote
|
- $profile: the person unblocked, can be remote
|
||||||
|
|
||||||
StartSubscribe: when a subscription is starting
|
StartSubscribe: when a subscription is starting
|
||||||
- $user: the person subscribing
|
- $profile: Profile that is subscribing
|
||||||
- $other: the person being subscribed to
|
- $other: Profile that is being subscribed to
|
||||||
|
|
||||||
EndSubscribe: when a subscription is finished
|
EndSubscribe: when a subscription is finished
|
||||||
- $user: the person subscribing
|
- $profile: Profile that is subscribing
|
||||||
- $other: the person being subscribed to
|
- $other: Profile that is being subscribed to
|
||||||
|
|
||||||
StartUnsubscribe: when an unsubscribe is starting
|
StartUnsubscribe: when an unsubscribe is starting
|
||||||
- $user: the person unsubscribing
|
- $profile: Profile that is unsubscribing
|
||||||
- $other: the person being unsubscribed from
|
- $other: Profile that is being unsubscribed from
|
||||||
|
|
||||||
EndUnsubscribe: when an unsubscribe is done
|
EndUnsubscribe: when an unsubscribe is done
|
||||||
- $user: the person unsubscribing
|
- $profile: Profile that is unsubscribing
|
||||||
- $other: the person being unsubscribed to
|
- $other: Profile that is being unsubscribed from
|
||||||
|
|
||||||
StartJoinGroup: when a user is joining a group
|
StartJoinGroup: when a user is joining a group
|
||||||
- $group: the group being joined
|
- $group: the group being joined
|
||||||
|
|
|
@ -175,7 +175,6 @@ class FoafAction extends Action
|
||||||
common_debug('Got a bad subscription: '.print_r($sub,true));
|
common_debug('Got a bad subscription: '.print_r($sub,true));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$user = $profile->getUser();
|
|
||||||
$other_uri = $profile->getUri();
|
$other_uri = $profile->getUri();
|
||||||
if (array_key_exists($other_uri, $person)) {
|
if (array_key_exists($other_uri, $person)) {
|
||||||
$person[$other_uri][0] = BOTH;
|
$person[$other_uri][0] = BOTH;
|
||||||
|
@ -183,7 +182,7 @@ class FoafAction extends Action
|
||||||
$person[$other_uri] = array(LISTENER,
|
$person[$other_uri] = array(LISTENER,
|
||||||
$profile->id,
|
$profile->id,
|
||||||
$profile->nickname,
|
$profile->nickname,
|
||||||
$user ? 'local' : 'remote');
|
$profile->isLocal() ? 'local' : 'remote');
|
||||||
}
|
}
|
||||||
unset($profile);
|
unset($profile);
|
||||||
}
|
}
|
||||||
|
@ -289,13 +288,12 @@ class FoafAction extends Action
|
||||||
common_debug('Got a bad subscription: '.print_r($sub,true));
|
common_debug('Got a bad subscription: '.print_r($sub,true));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$user = $profile->getUser();
|
|
||||||
$other_uri = $profile->getUri();
|
$other_uri = $profile->getUri();
|
||||||
$this->element('sioc:follows', array('rdf:resource' => $other_uri.'#acct'));
|
$this->element('sioc:follows', array('rdf:resource' => $other_uri.'#acct'));
|
||||||
$person[$other_uri] = array(LISTENEE,
|
$person[$other_uri] = array(LISTENEE,
|
||||||
$profile->id,
|
$profile->id,
|
||||||
$profile->nickname,
|
$profile->nickname,
|
||||||
$user ? 'local' : 'remote');
|
$profile->isLocal() ? 'local' : 'remote');
|
||||||
unset($profile);
|
unset($profile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -522,14 +522,16 @@ class Notice extends Managed_DataObject
|
||||||
|
|
||||||
// For private streams
|
// For private streams
|
||||||
|
|
||||||
$user = $profile->getUser();
|
try {
|
||||||
|
$user = $profile->getUser();
|
||||||
|
|
||||||
if (!empty($user)) {
|
|
||||||
if ($user->private_stream &&
|
if ($user->private_stream &&
|
||||||
($notice->scope == Notice::PUBLIC_SCOPE ||
|
($notice->scope == Notice::PUBLIC_SCOPE ||
|
||||||
$notice->scope == Notice::SITE_SCOPE)) {
|
$notice->scope == Notice::SITE_SCOPE)) {
|
||||||
$notice->scope |= Notice::FOLLOWER_SCOPE;
|
$notice->scope |= Notice::FOLLOWER_SCOPE;
|
||||||
}
|
}
|
||||||
|
} catch (NoSuchUserException $e) {
|
||||||
|
// Cannot handle private streams for remote profiles
|
||||||
}
|
}
|
||||||
|
|
||||||
// Force the scope for private groups
|
// Force the scope for private groups
|
||||||
|
@ -2420,11 +2422,8 @@ class Notice extends Managed_DataObject
|
||||||
|
|
||||||
// Only for users on this site
|
// Only for users on this site
|
||||||
|
|
||||||
if ($scope & Notice::SITE_SCOPE) {
|
if (($scope & Notice::SITE_SCOPE) && !$profile->isLocal()) {
|
||||||
$user = $profile->getUser();
|
return false;
|
||||||
if (empty($user)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only for users mentioned in the notice
|
// Only for users mentioned in the notice
|
||||||
|
|
|
@ -84,15 +84,28 @@ class Profile extends Managed_DataObject
|
||||||
|
|
||||||
protected $_user = -1; // Uninitialized value distinct from null
|
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);
|
$this->_user = User::getKV('id', $this->id);
|
||||||
}
|
}
|
||||||
|
if (!is_a($this->_user, 'User')) {
|
||||||
|
throw new NoSuchUserException(array('id'=>$this->id));
|
||||||
|
}
|
||||||
|
|
||||||
return $this->_user;
|
return $this->_user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isLocal()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$this->getUser();
|
||||||
|
} catch (NoSuchUserException $e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected $_avatars;
|
protected $_avatars;
|
||||||
|
|
||||||
function getAvatar($width, $height=null)
|
function getAvatar($width, $height=null)
|
||||||
|
|
|
@ -79,16 +79,8 @@ class Subscription extends Managed_DataObject
|
||||||
* @return mixed Subscription or Subscription_queue: new subscription info
|
* @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)) {
|
if (!$subscriber->hasRight(Right::SUBSCRIBE)) {
|
||||||
// TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
|
// TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
|
||||||
throw new Exception(_('You have been banned from subscribing.'));
|
throw new Exception(_('You have been banned from subscribing.'));
|
||||||
|
@ -193,7 +185,7 @@ class Subscription extends Managed_DataObject
|
||||||
* Cancel a subscription
|
* Cancel a subscription
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function cancel($subscriber, $other)
|
function cancel(Profile $subscriber, Profile $other)
|
||||||
{
|
{
|
||||||
if (!self::exists($subscriber, $other)) {
|
if (!self::exists($subscriber, $other)) {
|
||||||
// TRANS: Exception thrown when trying to unsibscribe without a subscription.
|
// TRANS: Exception thrown when trying to unsibscribe without a subscription.
|
||||||
|
|
|
@ -225,14 +225,6 @@ class User extends Managed_DataObject
|
||||||
return Sms_carrier::getKV('id', $this->carrier);
|
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)
|
function hasBlocked($other)
|
||||||
{
|
{
|
||||||
$profile = $this->getProfile();
|
$profile = $this->getProfile();
|
||||||
|
@ -437,7 +429,7 @@ class User extends Managed_DataObject
|
||||||
common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
|
common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
|
||||||
__FILE__);
|
__FILE__);
|
||||||
} else {
|
} 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);
|
return Profile_tag::setTags($this->id, $this->id, $newtags, $privacy);
|
||||||
}
|
}
|
||||||
|
|
||||||
function block($other)
|
function block(Profile $other)
|
||||||
{
|
{
|
||||||
// Add a new block record
|
// Add a new block record
|
||||||
|
|
||||||
|
|
|
@ -506,7 +506,7 @@ class ActivityObject
|
||||||
|
|
||||||
$object->poco = PoCo::fromProfile($profile);
|
$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))));
|
$object->extra[] = array('followers', array('url' => common_local_url('subscribers', array('nickname' => $profile->nickname))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -202,7 +202,11 @@ class ApiAction extends Action
|
||||||
{
|
{
|
||||||
$twitter_user = array();
|
$twitter_user = array();
|
||||||
|
|
||||||
$user = $profile->getUser();
|
try {
|
||||||
|
$user = $profile->getUser();
|
||||||
|
} catch (NoSuchUserException $e) {
|
||||||
|
$user = null;
|
||||||
|
}
|
||||||
|
|
||||||
$twitter_user['id'] = intval($profile->id);
|
$twitter_user['id'] = intval($profile->id);
|
||||||
$twitter_user['name'] = $profile->getBestName();
|
$twitter_user['name'] = $profile->getBestName();
|
||||||
|
|
|
@ -103,6 +103,13 @@ class ApiAuthAction extends ApiAction
|
||||||
$this->checkOAuthRequest($oauthReq);
|
$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
|
// Reject API calls with the wrong access level
|
||||||
|
|
||||||
if ($this->isReadOnly($args) == false) {
|
if ($this->isReadOnly($args) == false) {
|
||||||
|
|
|
@ -777,8 +777,7 @@ class SubCommand extends Command
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Subscription::start($this->user->getProfile(),
|
Subscription::start($this->user->getProfile(), $target);
|
||||||
$target);
|
|
||||||
// TRANS: Text shown after having subscribed to another user successfully.
|
// TRANS: Text shown after having subscribed to another user successfully.
|
||||||
// TRANS: %s is the name of the user the subscription was requested for.
|
// TRANS: %s is the name of the user the subscription was requested for.
|
||||||
$channel->output($this->user, sprintf(_('Subscribed to %s.'), $this->other));
|
$channel->output($this->user, sprintf(_('Subscribed to %s.'), $this->other));
|
||||||
|
@ -809,8 +808,7 @@ class UnsubCommand extends Command
|
||||||
$target = $this->getProfile($this->other);
|
$target = $this->getProfile($this->other);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Subscription::cancel($this->user->getProfile(),
|
Subscription::cancel($this->user->getProfile(), $target);
|
||||||
$target);
|
|
||||||
// TRANS: Text shown after having unsubscribed from another user successfully.
|
// TRANS: Text shown after having unsubscribed from another user successfully.
|
||||||
// TRANS: %s is the name of the user the unsubscription was requested for.
|
// TRANS: %s is the name of the user the unsubscription was requested for.
|
||||||
$channel->output($this->user, sprintf(_('Unsubscribed from %s.'), $this->other));
|
$channel->output($this->user, sprintf(_('Unsubscribed from %s.'), $this->other));
|
||||||
|
|
69
lib/nosuchuserexception.php
Normal file
69
lib/nosuchuserexception.php
Normal 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.'));
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,6 +26,9 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
function subs_subscribe_to($user, $other)
|
function subs_subscribe_to($user, $other)
|
||||||
{
|
{
|
||||||
|
if (is_a($other, 'User')) {
|
||||||
|
$other = $other->getProfile();
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
Subscription::start($user->getProfile(), $other);
|
Subscription::start($user->getProfile(), $other);
|
||||||
return true;
|
return true;
|
||||||
|
@ -36,6 +39,9 @@ function subs_subscribe_to($user, $other)
|
||||||
|
|
||||||
function subs_unsubscribe_to($user, $other)
|
function subs_unsubscribe_to($user, $other)
|
||||||
{
|
{
|
||||||
|
if (is_a($other, 'User')) {
|
||||||
|
$other = $other->getProfile();
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
Subscription::cancel($user->getProfile(), $other);
|
Subscription::cancel($user->getProfile(), $other);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -57,82 +57,88 @@ class ActivityPlugin extends Plugin
|
||||||
public $StartLike = false;
|
public $StartLike = false;
|
||||||
public $StopLike = false;
|
public $StopLike = false;
|
||||||
|
|
||||||
function onEndSubscribe($subscriber, $other)
|
function onEndSubscribe(Profile $profile, Profile $other)
|
||||||
{
|
{
|
||||||
// Only do this if config is enabled
|
// Only do this if config is enabled
|
||||||
if(!$this->StartFollowUser) return true;
|
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,
|
if (!$profile->isLocal()) {
|
||||||
$content,
|
// can't do anything with remote user anyway
|
||||||
ActivityPlugin::SOURCE,
|
return true;
|
||||||
array('rendered' => $rendered,
|
|
||||||
'urls' => array(),
|
|
||||||
'replies' => array($other->getUri()),
|
|
||||||
'verb' => ActivityVerb::FOLLOW,
|
|
||||||
'object_type' => ActivityObject::PERSON,
|
|
||||||
'uri' => $sub->uri));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function onEndUnsubscribe($subscriber, $other)
|
function onEndUnsubscribe(Profile $profile, Profile $other)
|
||||||
{
|
{
|
||||||
// Only do this if config is enabled
|
// Only do this if config is enabled
|
||||||
if(!$this->StopFollowUser) return true;
|
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',
|
if (!$profile->isLocal()) {
|
||||||
$subscriber->id,
|
return true;
|
||||||
$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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,42 +147,42 @@ class ActivityPlugin extends Plugin
|
||||||
// Only do this if config is enabled
|
// Only do this if config is enabled
|
||||||
if(!$this->StartLike) return true;
|
if(!$this->StartLike) return true;
|
||||||
|
|
||||||
$user = $profile->getUser();
|
if (!$profile->isLocal()) {
|
||||||
|
return true;
|
||||||
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)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,43 +190,45 @@ class ActivityPlugin extends Plugin
|
||||||
{
|
{
|
||||||
// Only do this if config is enabled
|
// Only do this if config is enabled
|
||||||
if(!$this->StopLike) return true;
|
if(!$this->StopLike) return true;
|
||||||
$user = User::getKV('id', $profile->id);
|
|
||||||
|
|
||||||
if (!empty($user)) {
|
if (!$profile->isLocal()) {
|
||||||
$author = Profile::getKV('id', $notice->profile_id);
|
return true;
|
||||||
// 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)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,9 +237,7 @@ class ActivityPlugin extends Plugin
|
||||||
// Only do this if config is enabled
|
// Only do this if config is enabled
|
||||||
if(!$this->JoinGroup) return true;
|
if(!$this->JoinGroup) return true;
|
||||||
|
|
||||||
$user = $profile->getUser();
|
if (!$profile->isLocal()) {
|
||||||
|
|
||||||
if (empty($user)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,7 +261,7 @@ class ActivityPlugin extends Plugin
|
||||||
$mem = Group_member::pkeyGet(array('group_id' => $group->id,
|
$mem = Group_member::pkeyGet(array('group_id' => $group->id,
|
||||||
'profile_id' => $profile->id));
|
'profile_id' => $profile->id));
|
||||||
|
|
||||||
$notice = Notice::saveNew($user->id,
|
$notice = Notice::saveNew($profile->id,
|
||||||
$content,
|
$content,
|
||||||
ActivityPlugin::SOURCE,
|
ActivityPlugin::SOURCE,
|
||||||
array('rendered' => $rendered,
|
array('rendered' => $rendered,
|
||||||
|
@ -272,9 +278,7 @@ class ActivityPlugin extends Plugin
|
||||||
// Only do this if config is enabled
|
// Only do this if config is enabled
|
||||||
if(!$this->LeaveGroup) return true;
|
if(!$this->LeaveGroup) return true;
|
||||||
|
|
||||||
$user = $profile->getUser();
|
if (!$profile->isLocal()) {
|
||||||
|
|
||||||
if (empty($user)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,11 +300,11 @@ class ActivityPlugin extends Plugin
|
||||||
$group->homeUrl());
|
$group->homeUrl());
|
||||||
|
|
||||||
$uri = TagURI::mint('leave:%d:%d:%s',
|
$uri = TagURI::mint('leave:%d:%d:%s',
|
||||||
$user->id,
|
$profile->id,
|
||||||
$group->id,
|
$group->id,
|
||||||
common_date_iso8601(common_sql_now()));
|
common_date_iso8601(common_sql_now()));
|
||||||
|
|
||||||
$notice = Notice::saveNew($user->id,
|
$notice = Notice::saveNew($profile->id,
|
||||||
$content,
|
$content,
|
||||||
ActivityPlugin::SOURCE,
|
ActivityPlugin::SOURCE,
|
||||||
array('rendered' => $rendered,
|
array('rendered' => $rendered,
|
||||||
|
|
|
@ -481,7 +481,7 @@ class BlacklistPlugin extends Plugin
|
||||||
/**
|
/**
|
||||||
* Check URLs and homepages for blacklisted users.
|
* 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) {
|
foreach (array($other->profileurl, $other->homepage) as $url) {
|
||||||
|
|
||||||
|
|
|
@ -158,9 +158,10 @@ class Blog_entry extends Managed_DataObject
|
||||||
// Use user's preferences for short URLs, if possible
|
// Use user's preferences for short URLs, if possible
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$user = $profile->getUser();
|
$user = $profile->isLocal()
|
||||||
$shortUrl = File_redirection::makeShort($url,
|
? $profile->getUser()
|
||||||
empty($user) ? null : $user);
|
: null;
|
||||||
|
$shortUrl = File_redirection::makeShort($url, $user);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
// Don't let this stop us.
|
// Don't let this stop us.
|
||||||
$shortUrl = $url;
|
$shortUrl = $url;
|
||||||
|
|
|
@ -33,13 +33,17 @@ class GravatarPlugin extends Plugin
|
||||||
function onEndProfileGetAvatar($profile, $size, &$avatar)
|
function onEndProfileGetAvatar($profile, $size, &$avatar)
|
||||||
{
|
{
|
||||||
if (empty($avatar)) {
|
if (empty($avatar)) {
|
||||||
$user = $profile->getUser();
|
try {
|
||||||
if (!empty($user) && !empty($user->email)) {
|
$user = $profile->getUser();
|
||||||
// Fake one!
|
if (!empty($user->email)) {
|
||||||
$avatar = new Avatar();
|
// Fake one!
|
||||||
$avatar->width = $avatar->height = $size;
|
$avatar = new Avatar();
|
||||||
$avatar->url = $this->gravatar_url($user->email, $size);
|
$avatar->width = $avatar->height = $size;
|
||||||
return false;
|
$avatar->url = $this->gravatar_url($user->email, $size);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (NoSuchUserException $e) {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -182,16 +182,16 @@ class OMBPlugin extends Plugin
|
||||||
/**
|
/**
|
||||||
* Check for illegal subscription attempts
|
* Check for illegal subscription attempts
|
||||||
*
|
*
|
||||||
* @param User $user subscriber
|
* @param Profile $profile subscriber
|
||||||
* @param Profile $other subscribee
|
* @param Profile $other subscribee
|
||||||
* @return hook return value
|
* @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-
|
// OMB 0.1 doesn't have a mechanism for local-server-
|
||||||
// originated subscription.
|
// originated subscription.
|
||||||
|
|
||||||
$omb01 = Remote_profile::getKV('id', $other_id);
|
$omb01 = Remote_profile::getKV('id', $other->id);
|
||||||
|
|
||||||
if (!empty($omb01)) {
|
if (!empty($omb01)) {
|
||||||
throw new ClientException(
|
throw new ClientException(
|
||||||
|
@ -257,14 +257,14 @@ class OMBPlugin extends Plugin
|
||||||
/**
|
/**
|
||||||
* Remove old OMB subscription tokens
|
* Remove old OMB subscription tokens
|
||||||
*
|
*
|
||||||
* @param User $user subscriber
|
* @param Profile $profile subscriber
|
||||||
* @param Profile $other subscribee
|
* @param Profile $other subscribee
|
||||||
* @return hook return value
|
* @return hook return value
|
||||||
*/
|
*/
|
||||||
function onEndUnsubscribe($profile, $other)
|
function onEndUnsubscribe(Profile $profile, Profile $other)
|
||||||
{
|
{
|
||||||
$sub = Subscription::pkeyGet(
|
$sub = Subscription::pkeyGet(
|
||||||
array('subscriber' => $subscriber->id, 'subscribed' => $other->id)
|
array('subscriber' => $profile->id, 'subscribed' => $other->id)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!empty($sub->token)) {
|
if (!empty($sub->token)) {
|
||||||
|
|
|
@ -601,18 +601,16 @@ class OStatusPlugin extends Plugin
|
||||||
* @fixme If something else aborts later, we could end up with a stray
|
* @fixme If something else aborts later, we could end up with a stray
|
||||||
* PuSH subscription. This is relatively harmless, though.
|
* PuSH subscription. This is relatively harmless, though.
|
||||||
*
|
*
|
||||||
* @param Profile $subscriber
|
* @param Profile $profile subscriber
|
||||||
* @param Profile $other
|
* @param Profile $other subscribee
|
||||||
*
|
*
|
||||||
* @return hook return code
|
* @return hook return code
|
||||||
*
|
*
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
function onStartSubscribe($subscriber, $other)
|
function onStartSubscribe(Profile $profile, Profile $other)
|
||||||
{
|
{
|
||||||
$user = User::getKV('id', $subscriber->id);
|
if (!$profile->isLocal()) {
|
||||||
|
|
||||||
if (empty($user)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -632,18 +630,16 @@ class OStatusPlugin extends Plugin
|
||||||
* Having established a remote subscription, send a notification to the
|
* Having established a remote subscription, send a notification to the
|
||||||
* remote OStatus profile's endpoint.
|
* remote OStatus profile's endpoint.
|
||||||
*
|
*
|
||||||
* @param Profile $subscriber
|
* @param Profile $profile subscriber
|
||||||
* @param Profile $other
|
* @param Profile $other subscribee
|
||||||
*
|
*
|
||||||
* @return hook return code
|
* @return hook return code
|
||||||
*
|
*
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
function onEndSubscribe($subscriber, $other)
|
function onEndSubscribe(Profile $profile, Profile $other)
|
||||||
{
|
{
|
||||||
$user = User::getKV('id', $subscriber->id);
|
if (!$profile->isLocal()) {
|
||||||
|
|
||||||
if (empty($user)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -653,12 +649,12 @@ class OStatusPlugin extends Plugin
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id,
|
$sub = Subscription::pkeyGet(array('subscriber' => $profile->id,
|
||||||
'subscribed' => $other->id));
|
'subscribed' => $other->id));
|
||||||
|
|
||||||
$act = $sub->asActivity();
|
$act = $sub->asActivity();
|
||||||
|
|
||||||
$oprofile->notifyActivity($act, $subscriber);
|
$oprofile->notifyActivity($act, $profile);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -671,11 +667,9 @@ class OStatusPlugin extends Plugin
|
||||||
* @param Profile $other
|
* @param Profile $other
|
||||||
* @return hook return value
|
* @return hook return value
|
||||||
*/
|
*/
|
||||||
function onEndUnsubscribe($profile, $other)
|
function onEndUnsubscribe(Profile $profile, Profile $other)
|
||||||
{
|
{
|
||||||
$user = User::getKV('id', $profile->id);
|
if (!$profile->isLocal()) {
|
||||||
|
|
||||||
if (empty($user)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -298,7 +298,7 @@ class OStatusSubAction extends Action
|
||||||
if ($user->isSubscribed($local)) {
|
if ($user->isSubscribed($local)) {
|
||||||
// TRANS: OStatus remote subscription dialog error.
|
// TRANS: OStatus remote subscription dialog error.
|
||||||
$this->showForm(_m('Already subscribed!'));
|
$this->showForm(_m('Already subscribed!'));
|
||||||
} elseif (Subscription::start($user, $local)) {
|
} elseif (Subscription::start($user->getProfile(), $local)) {
|
||||||
$this->success();
|
$this->success();
|
||||||
} else {
|
} else {
|
||||||
// TRANS: OStatus remote subscription dialog error.
|
// TRANS: OStatus remote subscription dialog error.
|
||||||
|
|
|
@ -55,15 +55,15 @@ class SubscriptionThrottlePlugin extends Plugin
|
||||||
/**
|
/**
|
||||||
* Filter subscriptions to see if they're coming too fast.
|
* Filter subscriptions to see if they're coming too fast.
|
||||||
*
|
*
|
||||||
* @param User $user The user subscribing
|
* @param Profile $profile The profile subscribing
|
||||||
* @param User $other The user being subscribed to
|
* @param Profile $other The profile being subscribed to
|
||||||
*
|
*
|
||||||
* @return boolean hook value
|
* @return boolean hook value
|
||||||
*/
|
*/
|
||||||
function onStartSubscribe($user, $other)
|
function onStartSubscribe(Profile $profile, $other)
|
||||||
{
|
{
|
||||||
foreach ($this->subLimits as $seconds => $limit) {
|
foreach ($this->subLimits as $seconds => $limit) {
|
||||||
$sub = $this->_getNthSub($user, $limit);
|
$sub = $this->_getNthSub($profile, $limit);
|
||||||
|
|
||||||
if (!empty($sub)) {
|
if (!empty($sub)) {
|
||||||
$subtime = strtotime($sub->created);
|
$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 Profile $profile profile to get subscriptions for
|
||||||
* @param integer $n How far to count back
|
* @param integer $n How far to count back
|
||||||
*
|
*
|
||||||
* @return Subscription a subscription or null
|
* @return Subscription a subscription or null
|
||||||
*/
|
*/
|
||||||
private function _getNthSub($user, $n)
|
private function _getNthSub(Profile $profile, $n)
|
||||||
{
|
{
|
||||||
$sub = new Subscription();
|
$sub = new Subscription();
|
||||||
|
|
||||||
$sub->subscriber = $user->id;
|
$sub->subscriber = $profile->id;
|
||||||
$sub->orderBy('created DESC');
|
$sub->orderBy('created DESC');
|
||||||
$sub->limit($n - 1, 1);
|
$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 Profile $profile The user to get memberships for
|
||||||
* @param integer $n How far to count back
|
* @param integer $n How far to count back
|
||||||
*
|
*
|
||||||
* @return Group_member a membership or null
|
* @return Group_member a membership or null
|
||||||
*/
|
*/
|
||||||
private function _getNthMem($profile, $n)
|
private function _getNthMem(Profile $profile, $n)
|
||||||
{
|
{
|
||||||
$mem = new Group_member();
|
$mem = new Group_member();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user