]> git.mxchange.org Git - friendica.git/commitdiff
Fix: public comments weren't distributed to the followers.
authorMichael <heluecht@pirati.ca>
Tue, 15 May 2018 04:33:28 +0000 (04:33 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 15 May 2018 04:33:28 +0000 (04:33 +0000)
src/Model/Item.php
src/Protocol/Diaspora.php

index 01a0b7497cb6397f6762222c2e540d566c021066..ab291a3306dd1f9372b1e7981fc8e0d496139cc7 100644 (file)
@@ -355,6 +355,13 @@ class Item extends BaseObject
                        unset($item['dsprsig']);
                }
 
+               if (!empty($item['diaspora_signed_text'])) {
+                       $diaspora_signed_text = $item['diaspora_signed_text'];
+                       unset($item['diaspora_signed_text']);
+               } else {
+                       $diaspora_signed_text = '';
+               }
+
                // Converting the plink
                /// @TODO Check if this is really still needed
                if ($item['network'] == NETWORK_OSTATUS) {
@@ -553,7 +560,7 @@ class Item extends BaseObject
 
                        $fields = ['uri', 'parent-uri', 'id', 'deleted',
                                'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
-                               'wall', 'private', 'forum_mode'];
+                               'wall', 'private', 'forum_mode', 'origin'];
                        $condition = ['uri' => $item['parent-uri'], 'uid' => $item['uid']];
                        $params = ['order' => ['id' => false]];
                        $parent = dba::selectFirst('item', $fields, $condition, $params);
@@ -805,6 +812,12 @@ class Item extends BaseObject
                                                'signature' => $dsprsig->signature, 'signer' => $dsprsig->signer]);
                }
 
+               if (!empty($diaspora_signed_text)) {
+                       // Formerly we stored the signed text, the signature and the author in different fields.
+                       // We now store the raw data so that we are more flexible.
+                       dba::insert('sign', ['iid' => $current_post, 'signed_text' => $diaspora_signed_text]);
+               }
+
                $deleted = self::tagDeliver($item['uid'], $current_post);
 
                /*
@@ -849,6 +862,8 @@ class Item extends BaseObject
 
                if ($notify) {
                        Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", $notify_type, $current_post);
+               } elseif (!empty($parent) && $parent['origin']) {
+                       Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", "comment-import", $current_post);
                }
 
                return $current_post;
@@ -857,9 +872,10 @@ class Item extends BaseObject
        /**
         * @brief Distributes public items to the receivers
         *
-        * @param integer $itemid Item ID that should be added
+        * @param integer $itemid      Item ID that should be added
+        * @param string  $signed_text Original text (for Diaspora signatures), JSON encoded.
         */
-       public static function distribute($itemid)
+       public static function distribute($itemid, $signed_text = '')
        {
                $condition = ["`id` IN (SELECT `parent` FROM `item` WHERE `id` = ?)", $itemid];
                $parent = dba::selectFirst('item', ['owner-id'], $condition);
@@ -894,14 +910,22 @@ class Item extends BaseObject
                        $users[$contact['uid']] = $contact['uid'];
                }
 
+               $origin_uid = 0;
+
                if ($item['uri'] != $item['parent-uri']) {
-                       $parents = dba::select('item', ['uid'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]);
+                       $parents = dba::select('item', ['uid', 'origin'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]);
                        while ($parent = dba::fetch($parents)) {
                                $users[$parent['uid']] = $parent['uid'];
+                               if ($parent['origin'] && !$item['origin']) {
+                                       $origin_uid = $parent['uid'];
+                               }
                        }
                }
 
                foreach ($users as $uid) {
+                       if ($origin_uid == $uid) {
+                               $item['diaspora_signed_text'] = $signed_text;
+                       }
                        self::storeForUser($itemid, $item, $uid);
                }
        }
index e8fdd99c5bc752051ec466d57ed889200813349b..adb1e8cbfa061bcd67ec4d6e3efca120065d2463 100644 (file)
@@ -1747,6 +1747,12 @@ class Diaspora
 
                self::fetchGuid($datarray);
 
+               // If we are the origin of the parent we store the original data.
+               // We notify our followers during the item storage.
+               if ($parent_item["origin"]) {
+                       $datarray['diaspora_signed_text'] = json_encode($data);
+               }
+
                $message_id = Item::insert($datarray);
 
                if ($message_id <= 0) {
@@ -1756,20 +1762,10 @@ class Diaspora
                if ($message_id) {
                        logger("Stored comment ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
                        if ($datarray['uid'] == 0) {
-                               Item::distribute($message_id);
+                               Item::distribute($message_id, json_encode($data));
                        }
                }
 
-               // If we are the origin of the parent we store the original data and notify our followers
-               if ($message_id && $parent_item["origin"]) {
-                       // Formerly we stored the signed text, the signature and the author in different fields.
-                       // We now store the raw data so that we are more flexible.
-                       dba::insert('sign', ['iid' => $message_id, 'signed_text' => json_encode($data)]);
-
-                       // notify others
-                       Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $message_id);
-               }
-
                return true;
        }
 
@@ -2071,6 +2067,20 @@ class Diaspora
 
                $datarray["body"] = self::constructLikeBody($contact, $parent_item, $guid);
 
+               // like on comments have the comment as parent. So we need to fetch the toplevel parent
+               if ($parent_item["id"] != $parent_item["parent"]) {
+                       $toplevel = dba::selectFirst('item', ['origin'], ['id' => $parent_item["parent"]]);
+                       $origin = $toplevel["origin"];
+               } else {
+                       $origin = $parent_item["origin"];
+               }
+
+               // If we are the origin of the parent we store the original data.
+               // We notify our followers during the item storage.
+               if ($origin) {
+                       $datarray['diaspora_signed_text'] = json_encode($data);
+               }
+
                $message_id = Item::insert($datarray);
 
                if ($message_id <= 0) {
@@ -2080,28 +2090,10 @@ class Diaspora
                if ($message_id) {
                        logger("Stored like ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
                        if ($datarray['uid'] == 0) {
-                               Item::distribute($message_id);
+                               Item::distribute($message_id, json_encode($data));
                        }
                }
 
-               // like on comments have the comment as parent. So we need to fetch the toplevel parent
-               if ($parent_item["id"] != $parent_item["parent"]) {
-                       $toplevel = dba::selectFirst('item', ['origin'], ['id' => $parent_item["parent"]]);
-                       $origin = $toplevel["origin"];
-               } else {
-                       $origin = $parent_item["origin"];
-               }
-
-               // If we are the origin of the parent we store the original data and notify our followers
-               if ($message_id && $origin) {
-                       // Formerly we stored the signed text, the signature and the author in different fields.
-                       // We now store the raw data so that we are more flexible.
-                       dba::insert('sign', ['iid' => $message_id, 'signed_text' => json_encode($data)]);
-
-                       // notify others
-                       Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $message_id);
-               }
-
                return true;
        }