Ticket #2327: fixing block to remove the blocking user's subscription to the blockee if present; also cleaning up inbox delivery to apply the block checks more consistently, instead of just to group posts.

This commit is contained in:
Brion Vibber 2010-09-20 15:57:46 -07:00
parent 64cdbe6c55
commit 521daf5562
2 changed files with 23 additions and 13 deletions

View File

@ -753,8 +753,15 @@ class Notice extends Memcached_DataObject
} }
/** /**
* @param $groups array of Group *objects* * Pull up a full list of local recipients who will be getting
* @param $recipients array of profile *ids* * this notice in their inbox. Results will be cached, so don't
* change the input data wily-nilly!
*
* @param array $groups optional list of Group objects;
* if left empty, will be loaded from group_inbox records
* @param array $recipient optional list of reply profile ids
* if left empty, will be loaded from reply records
* @return array associating recipient user IDs with an inbox source constant
*/ */
function whoGets($groups=null, $recipients=null) function whoGets($groups=null, $recipients=null)
{ {
@ -787,27 +794,27 @@ class Notice extends Memcached_DataObject
$ni[$id] = NOTICE_INBOX_SOURCE_SUB; $ni[$id] = NOTICE_INBOX_SOURCE_SUB;
} }
$profile = $this->getProfile();
foreach ($groups as $group) { foreach ($groups as $group) {
$users = $group->getUserMembers(); $users = $group->getUserMembers();
foreach ($users as $id) { foreach ($users as $id) {
if (!array_key_exists($id, $ni)) { if (!array_key_exists($id, $ni)) {
$user = User::staticGet('id', $id); $ni[$id] = NOTICE_INBOX_SOURCE_GROUP;
if (!$user->hasBlocked($profile)) {
$ni[$id] = NOTICE_INBOX_SOURCE_GROUP;
}
} }
} }
} }
foreach ($recipients as $recipient) { foreach ($recipients as $recipient) {
if (!array_key_exists($recipient, $ni)) { if (!array_key_exists($recipient, $ni)) {
$recipientUser = User::staticGet('id', $recipient); $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY;
if (!empty($recipientUser)) { }
$ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY; }
}
// Exclude any deleted, non-local, or blocking recipients.
$profile = $this->getProfile();
foreach ($ni as $id => $source) {
$user = User::staticGet('id', $id);
if (empty($user) || $user->hasBlocked($profile)) {
unset($ni[$id]);
} }
} }

View File

@ -552,6 +552,9 @@ class User extends Memcached_DataObject
if (Subscription::exists($other, $self)) { if (Subscription::exists($other, $self)) {
Subscription::cancel($other, $self); Subscription::cancel($other, $self);
} }
if (Subscription::exists($self, $other)) {
Subscription::cancel($self, $other);
}
$block->query('COMMIT'); $block->query('COMMIT');