Get group attentions too for outbound notices
authorMikael Nordfeldth <mmn@hethane.se>
Sat, 9 Jan 2016 14:06:44 +0000 (15:06 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Sat, 9 Jan 2016 14:06:44 +0000 (15:06 +0100)
classes/Notice.php
lib/util.php

index b7378711f5d03382347eced4569a237cc17f8517..3fc93d4930db0f6a40279a5c27aed453123240ec 100644 (file)
@@ -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) {
index 7ce75e0fc0430360b6d264c87b15c98b66cfc861..7ebbf42cf601f58feed5b75ed3af1e3f3486ece1 100644 (file)
@@ -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) {