forked from GNUsocial/gnu-social
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:
parent
64cdbe6c55
commit
521daf5562
@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user