+ /**
+ * Add users to the receiver list of the given public activity.
+ * This is used to ensure that the activity will be stored in every thread.
+ *
+ * @param array $activity Activity array
+ * @return array Modified receiver list
+ */
+ private static function addReceivers(array $activity)
+ {
+ if (!in_array(0, $activity['receiver'])) {
+ // Private activities will not be modified
+ return $activity['receiver'];
+ }
+
+ // Add all owners of the referring item to the receivers
+ $original = $receivers = $activity['receiver'];
+ $items = Item::select(['uid'], ['uri' => $activity['object_id']]);
+ while ($item = DBA::fetch($items)) {
+ $receivers['uid:' . $item['uid']] = $item['uid'];
+ }
+ DBA::close($items);
+
+ if (count($original) != count($receivers)) {
+ Logger::info('Improved data', ['id' => $activity['id'], 'object' => $activity['object_id'], 'original' => $original, 'improved' => $receivers]);
+ }
+
+ return $receivers;
+ }
+