From 5ef10a14efe21803832876e0a8f27c0ed78aa7ac Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Sat, 9 Jan 2016 15:06:44 +0100 Subject: [PATCH] Get group attentions too for outbound notices --- classes/Notice.php | 46 +++++++++++++++++++++++----------------------- lib/util.php | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index b7378711f5..3fc93d4930 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1579,14 +1579,28 @@ class Notice extends Managed_DataObject continue; } - $this->saveAttention($target); + try { + $this->saveAttention($target); + } catch (AlreadyFulfilledException $e) { + common_debug('Attention already exists: '.var_export($e->getMessage(),true)); + } catch (Exception $e) { + common_log(LOG_ERR, "Could not save notice id=={$this->getID()} attention for profile id=={$target->getID()}: {$e->getMessage()}"); + } } } + /** + * Saves an attention for a profile (user or group) which means + * it shows up in their home feed and such. + */ function saveAttention(Profile $target, $reason=null) { if ($target->isGroup()) { // FIXME: Make sure we check that users are in the groups they send to! + if ($target->getGroup()->isLocal()) { + // legacy notification method, will still be in use for quite a while I think + $this->addToGroupInbox($target->getGroup()); + } } else { if ($target->hasBlocked($this->getProfile())) { common_log(LOG_INFO, "Not saving reply to profile {$target->id} ($uri) from sender {$sender->id} because of a block."); @@ -1595,17 +1609,11 @@ class Notice extends Managed_DataObject } if ($target->isLocal()) { - // is local user - $this->saveReply($target->getID()); // since we still have the Reply table which some apparently use! + // legacy notification method, will still be in use for quite a while I think + $this->saveReply($target->getID()); } - try { - $att = Attention::saveNew($this, $target, $reason); - } catch (AlreadyFulfilledException $e) { - common_debug('Could not save Attention: '.$e->getMessage()); - } catch (Exception $e) { - common_log(LOG_ERR, 'Could not save Attention: '.$e->getMessage()); - } + $att = Attention::saveNew($this, $target, $reason); self::blow('reply:stream:%d', $target->getID()); return true; @@ -1952,19 +1960,11 @@ class Notice extends Managed_DataObject } } - $reply_ids = $this->getReplies(); - - foreach ($reply_ids as $id) { - $rprofile = Profile::getKV('id', $id); - if ($rprofile instanceof Profile) { - $ctx->attention[$rprofile->getUri()] = ActivityObject::PERSON; - } - } - - $groups = $this->getGroups(); - - foreach ($groups as $group) { - $ctx->attention[$group->getUri()] = ActivityObject::GROUP; + // This covers the legacy getReplies and getGroups too which get their data + // from entries stored via Notice::saveNew (which we want to move away from)... + foreach ($this->getAttentionProfiles() as $target) { + // User and group profiles which get the attention of this notice + $ctx->attention[$target->getUri()] = $target->getObjectType(); } switch ($this->scope) { diff --git a/lib/util.php b/lib/util.php index 7ce75e0fc0..7ebbf42cf6 100644 --- a/lib/util.php +++ b/lib/util.php @@ -687,7 +687,7 @@ function common_get_attentions($text, Profile $sender, Notice $parent=null) $atts = array(); foreach ($mentions as $mention) { foreach ($mention['mentioned'] as $mentioned) { - $atts[$mentioned->getUri()] = $mentioned->isGroup() ? ActivityObject::GROUP : ActivityObject::PERSON; + $atts[$mentioned->getUri()] = $mentioned->getObjectType(); } } if ($parent instanceof Notice) {