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

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