]> git.mxchange.org Git - friendica.git/blobdiff - include/ostatus.php
Removal of test code
[friendica.git] / include / ostatus.php
index 0796fcc3b77a24cba55cd41cb4b98f8de56c0649..4f84c123d962d75352e19fadcff9ae1c03b4659b 100644 (file)
@@ -44,8 +44,7 @@ class ostatus {
                $author["author-link"] = $xpath->evaluate('atom:author/atom:uri/text()', $context)->item(0)->nodeValue;
                $author["author-name"] = $xpath->evaluate('atom:author/atom:name/text()', $context)->item(0)->nodeValue;
 
-               // Preserve the value
-               $authorlink = $author["author-link"];
+               $aliaslink = $author["author-link"];
 
                $alternate = $xpath->query("atom:author/atom:link[@rel='alternate']", $context)->item(0)->attributes;
                if (is_object($alternate))
@@ -55,7 +54,7 @@ class ostatus {
 
                $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` IN ('%s', '%s') AND `network` != '%s'",
                        intval($importer["uid"]), dbesc(normalise_link($author["author-link"])),
-                       dbesc(normalise_link($authorlink)), dbesc(NETWORK_STATUSNET));
+                       dbesc(normalise_link($aliaslink)), dbesc(NETWORK_STATUSNET));
                if ($r) {
                        $contact = $r[0];
                        $author["contact-id"] = $r[0]["id"];
@@ -91,13 +90,20 @@ class ostatus {
 
                // Only update the contacts if it is an OStatus contact
                if ($r AND !$onlyfetch AND ($contact["network"] == NETWORK_OSTATUS)) {
+
                        // Update contact data
 
-                       $value = $xpath->query("atom:link[@rel='salmon']", $context)->item(0)->nodeValue;
-                       if ($value != "")
-                               $contact["notify"] = $value;
+                       // This query doesn't seem to work
+                       // $value = $xpath->query("atom:link[@rel='salmon']", $context)->item(0)->nodeValue;
+                       // if ($value != "")
+                       //      $contact["notify"] = $value;
+
+                       // This query doesn't seem to work as well - I hate these queries
+                       // $value = $xpath->query("atom:link[@rel='self' and @type='application/atom+xml']", $context)->item(0)->nodeValue;
+                       // if ($value != "")
+                       //      $contact["poll"] = $value;
 
-                       $value = $xpath->evaluate('atom:author/uri/text()', $context)->item(0)->nodeValue;
+                       $value = $xpath->evaluate('atom:author/atom:uri/text()', $context)->item(0)->nodeValue;
                        if ($value != "")
                                $contact["alias"] = $value;
 
@@ -117,12 +123,14 @@ class ostatus {
                        if ($value != "")
                                $contact["location"] = $value;
 
-                       if (($contact["name"] != $r[0]["name"]) OR ($contact["nick"] != $r[0]["nick"]) OR ($contact["about"] != $r[0]["about"]) OR ($contact["location"] != $r[0]["location"])) {
+                       if (($contact["name"] != $r[0]["name"]) OR ($contact["nick"] != $r[0]["nick"]) OR ($contact["about"] != $r[0]["about"]) OR
+                               ($contact["alias"] != $r[0]["alias"]) OR ($contact["location"] != $r[0]["location"])) {
 
                                logger("Update contact data for contact ".$contact["id"], LOGGER_DEBUG);
 
-                               q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `about` = '%s', `location` = '%s', `name-date` = '%s' WHERE `id` = %d",
-                                       dbesc($contact["name"]), dbesc($contact["nick"]), dbesc($contact["about"]), dbesc($contact["location"]),
+                               q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `alias` = '%s', `about` = '%s', `location` = '%s', `name-date` = '%s' WHERE `id` = %d",
+                                       dbesc($contact["name"]), dbesc($contact["nick"]), dbesc($contact["alias"]),
+                                       dbesc($contact["about"]), dbesc($contact["location"]),
                                        dbesc(datetime_convert()), intval($contact["id"]));
 
                                poco_check($contact["url"], $contact["name"], $contact["network"], $author["author-avatar"], $contact["about"], $contact["location"],
@@ -135,7 +143,25 @@ class ostatus {
                                update_contact_avatar($author["author-avatar"], $importer["uid"], $contact["id"]);
                        }
 
+                       // Ensure that we are having this contact (with uid=0)
+                       $cid = get_contact($author["author-link"], 0);
+
+                       if ($cid) {
+                               // Update it with the current values
+                               q("UPDATE `contact` SET `url` = '%s', `name` = '%s', `nick` = '%s', `alias` = '%s',
+                                               `about` = '%s', `location` = '%s',
+                                               `success_update` = '%s', `last-update` = '%s'
+                                       WHERE `id` = %d",
+                                       dbesc($author["author-link"]), dbesc($contact["name"]), dbesc($contact["nick"]),
+                                       dbesc($contact["alias"]), dbesc($contact["about"]), dbesc($contact["location"]),
+                                       dbesc(datetime_convert()), dbesc(datetime_convert()), intval($cid));
+
+                               // Update the avatar
+                               update_contact_avatar($author["author-avatar"], 0, $cid);
+                       }
+
                        $contact["generation"] = 2;
+                       $contact["hide"] = false; // OStatus contacts are never hidden
                        $contact["photo"] = $author["author-avatar"];
                        update_gcontact($contact);
                }
@@ -144,12 +170,12 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Fetches author data from a given XML string
         *
-        * @param $xml
+        * @param string $xml The XML
         * @param array $importer user record of the importing user
         *
-        * @return 
+        * @return array Array of author related entries for the item
         */
        public static function salmon_author($xml, $importer) {
 
@@ -187,6 +213,7 @@ class ostatus {
         * @param array $hub Called by reference, returns the fetched hub data
         */
        public static function import($xml,$importer,&$contact, &$hub) {
+               /// @todo this function is too long. It has to be split in many parts
 
                logger("Import OStatus message", LOGGER_DEBUG);
 
@@ -466,6 +493,7 @@ class ostatus {
                                                $orig_body = $xpath->query('atom:content/text()', $activityobjects)->item(0)->nodeValue;
 
                                        $orig_created = $xpath->query('atom:published/text()', $activityobjects)->item(0)->nodeValue;
+                                       $orig_edited = $xpath->query('atom:updated/text()', $activityobjects)->item(0)->nodeValue;
 
                                        $orig_contact = $contact;
                                        $orig_author = self::fetchauthor($xpath, $activityobjects, $importer, $orig_contact, false);
@@ -475,6 +503,7 @@ class ostatus {
                                        $item["author-avatar"] = $orig_author["author-avatar"];
                                        $item["body"] = add_page_info_to_body(html2bbcode($orig_body));
                                        $item["created"] = $orig_created;
+                                       $item["edited"] = $orig_edited;
 
                                        $item["uri"] = $orig_uri;
                                        $item["plink"] = $orig_link;
@@ -665,6 +694,7 @@ class ostatus {
                                }
                        }
 
+               $contact["hide"] = false; // OStatus contacts are never hidden
                update_gcontact($contact);
        }
 
@@ -751,16 +781,17 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Stores an item and completes the thread
         *
-        * @param $conversation_url
-        * @param $uid
+        * @param string $conversation_url The URI of the conversation
+        * @param integer $uid The user id
         * @param array $item Data of the item that is to be posted
         *
-        * @return 
+        * @return integer The item id of the posted item array
         */
        private function completion($conversation_url, $uid, $item = array(), $self = "") {
 
+               /// @todo This function is totally ugly and has to be rewritten totally
 
                $item_stored = -1;
 
@@ -775,11 +806,20 @@ class ostatus {
                }
 
                // Get the parent
+               $parents = q("SELECT `item`.`id`, `item`.`parent`, `item`.`uri`, `item`.`contact-id`, `item`.`type`,
+                               `item`.`verb`, `item`.`visible` FROM `term`
+                               STRAIGHT_JOIN `item` AS `thritem` ON `thritem`.`parent` = `term`.`oid`
+                               STRAIGHT_JOIN `item` ON `item`.`parent` = `thritem`.`parent`
+                               WHERE `term`.`uid` = %d AND `term`.`otype` = %d AND `term`.`type` = %d AND `term`.`url` = '%s'",
+                               intval($uid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), dbesc($conversation_url));
+
+/*             2016-10-23: The old query will be kept until we are sure that the query above is a good and fast replacement
+
                $parents = q("SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN
                                (SELECT `parent` FROM `item` WHERE `id` IN
                                        (SELECT `oid` FROM `term` WHERE `uid` = %d AND `otype` = %d AND `type` = %d AND `url` = '%s'))",
                                intval($uid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), dbesc($conversation_url));
-
+*/
                if ($parents)
                        $parent = $parents[0];
                elseif (count($item) > 0) {
@@ -1151,12 +1191,10 @@ class ostatus {
        }
 
        /**
-        * @brief 
-        *
-        * @param $itemid
-        * @param $conversation_url
+        * @brief Stores conversation data into the database
         *
-        * @return 
+        * @param integer $itemid The id of the item
+        * @param string $conversation_url The uri of the conversation
         */
        private function store_conversation($itemid, $conversation_url) {
 
@@ -1250,12 +1288,12 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds the header elements to the XML document
         *
         * @param object $doc XML document
         * @param array $owner Contact data of the poster
         *
-        * @return 
+        * @return object header root element
         */
        private function add_header($doc, $owner) {
 
@@ -1311,12 +1349,10 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Add the link to the push hubs to the XML document
         *
         * @param object $doc XML document
-        * @param $root
-        *
-        * @return 
+        * @param object $root XML root element where the hub links are added
         */
        public static function hublinks($doc, $root) {
                $hub = get_config('system','huburl');
@@ -1338,13 +1374,11 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds attachement data to the XML document
         *
         * @param object $doc XML document
-        * @param $root
+        * @param object $root XML root element where the hub links are added
         * @param array $item Data of the item that is to be posted
-        *
-        * @return 
         */
        private function get_attachment($doc, $root, $item) {
                $o = "";
@@ -1410,12 +1444,12 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds the author element to the XML document
         *
         * @param object $doc XML document
         * @param array $owner Contact data of the poster
         *
-        * @return 
+        * @return object author element
         */
        private function add_author($doc, $owner) {
 
@@ -1484,11 +1518,11 @@ class ostatus {
        */
 
        /**
-        * @brief 
+        * @brief Returns the given activity if present - otherwise returns the "post" activity
         *
         * @param array $item Data of the item that is to be posted
         *
-        * @return 
+        * @return string activity
         */
        function construct_verb($item) {
                if ($item['verb'])
@@ -1497,11 +1531,11 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Returns the given object type if present - otherwise returns the "note" object type
         *
         * @param array $item Data of the item that is to be posted
         *
-        * @return 
+        * @return string Object type
         */
        function construct_objecttype($item) {
                if (in_array($item['object-type'], array(ACTIVITY_OBJ_NOTE, ACTIVITY_OBJ_COMMENT)))
@@ -1510,14 +1544,14 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds an entry element to the XML document
         *
         * @param object $doc XML document
         * @param array $item Data of the item that is to be posted
         * @param array $owner Contact data of the poster
-        * @param $toplevel
+        * @param bool $toplevel
         *
-        * @return 
+        * @return object Entry element
         */
        private function entry($doc, $item, $owner, $toplevel = false) {
                $repeated_guid = self::get_reshared_guid($item);
@@ -1527,19 +1561,22 @@ class ostatus {
                if ($xml)
                        return $xml;
 
-               if ($item["verb"] == ACTIVITY_LIKE)
+               if ($item["verb"] == ACTIVITY_LIKE) {
                        return self::like_entry($doc, $item, $owner, $toplevel);
-               else
+               } elseif (in_array($item["verb"], array(ACTIVITY_FOLLOW, NAMESPACE_OSTATUS."/unfollow"))) {
+                       return self::follow_entry($doc, $item, $owner, $toplevel);
+               } else {
                        return self::note_entry($doc, $item, $owner, $toplevel);
+               }
        }
 
        /**
-        * @brief 
+        * @brief Adds a source entry to the XML document
         *
         * @param object $doc XML document
-        * @param $contact
+        * @param array $contact Array of the contact that is added
         *
-        * @return 
+        * @return object Source element
         */
        private function source_entry($doc, $contact) {
                $source = $doc->createElement("source");
@@ -1558,12 +1595,12 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Fetches contact data from the contact or the gcontact table
         *
-        * @param $url
+        * @param string $url URL of the contact
         * @param array $owner Contact data of the poster
         *
-        * @return 
+        * @return array Contact array
         */
        private function contact_entry($url, $owner) {
 
@@ -1589,8 +1626,10 @@ class ostatus {
 
                if (!isset($contact["poll"])) {
                        $data = probe_url($url);
-                       $contact["alias"] = $data["alias"];
                        $contact["poll"] = $data["poll"];
+
+                       if (!$contact["alias"])
+                               $contact["alias"] = $data["alias"];
                }
 
                if (!isset($contact["alias"]))
@@ -1600,15 +1639,15 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds an entry element with reshared content
         *
         * @param object $doc XML document
         * @param array $item Data of the item that is to be posted
         * @param array $owner Contact data of the poster
         * @param $repeated_guid
-        * @param $toplevel
+        * @param bool $toplevel Is it for en entry element (false) or a feed entry (true)?
         *
-        * @return 
+        * @return object Entry element
         */
        private function reshare_entry($doc, $item, $owner, $repeated_guid, $toplevel) {
 
@@ -1667,14 +1706,14 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds an entry element with a "like"
         *
         * @param object $doc XML document
         * @param array $item Data of the item that is to be posted
         * @param array $owner Contact data of the poster
-        * @param $toplevel
+        * @param bool $toplevel Is it for en entry element (false) or a feed entry (true)?
         *
-        * @return object
+        * @return object Entry element with "like"
         */
        private function like_entry($doc, $item, $owner, $toplevel) {
 
@@ -1689,7 +1728,8 @@ class ostatus {
 
                $as_object = $doc->createElement("activity:object");
 
-               $parent = q("SELECT * FROM `item` WHERE `id` = %d", intval($item["parent"]));
+               $parent = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d",
+                       dbesc($item["thr-parent"]), intval($item["uid"]));
                $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
 
                xml::add_element($doc, $as_object, "activity:object-type", self::construct_objecttype($parent[0]));
@@ -1704,14 +1744,105 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds the person object element to the XML document
+        *
+        * @param object $doc XML document
+        * @param array $owner Contact data of the poster
+        * @param array $contact Contact data of the target
+        *
+        * @return object author element
+        */
+       private function add_person_object($doc, $owner, $contact) {
+
+               $object = $doc->createElement("activity:object");
+               xml::add_element($doc, $object, "activity:object-type", ACTIVITY_OBJ_PERSON);
+
+               if ($contact['network'] == NETWORK_PHANTOM) {
+                       xml::add_element($doc, $object, "id", $contact['url']);
+                       return $object;
+               }
+
+               xml::add_element($doc, $object, "id", $contact["alias"]);
+               xml::add_element($doc, $object, "title", $contact["nick"]);
+
+               $attributes = array("rel" => "alternate", "type" => "text/html", "href" => $contact["url"]);
+               xml::add_element($doc, $object, "link", "", $attributes);
+
+               $attributes = array(
+                               "rel" => "avatar",
+                               "type" => "image/jpeg", // To-Do?
+                               "media:width" => 175,
+                               "media:height" => 175,
+                               "href" => $contact["photo"]);
+               xml::add_element($doc, $object, "link", "", $attributes);
+
+               xml::add_element($doc, $object, "poco:preferredUsername", $contact["nick"]);
+               xml::add_element($doc, $object, "poco:displayName", $contact["name"]);
+
+               if (trim($contact["location"]) != "") {
+                       $element = $doc->createElement("poco:address");
+                       xml::add_element($doc, $element, "poco:formatted", $contact["location"]);
+                       $object->appendChild($element);
+               }
+
+               return $object;
+       }
+
+       /**
+        * @brief Adds a follow/unfollow entry element
+        *
+        * @param object $doc XML document
+        * @param array $item Data of the follow/unfollow message
+        * @param array $owner Contact data of the poster
+        * @param bool $toplevel Is it for en entry element (false) or a feed entry (true)?
+        *
+        * @return object Entry element
+        */
+       private function follow_entry($doc, $item, $owner, $toplevel) {
+
+               $item["id"] = $item["parent"] = 0;
+               $item['guid'] = get_guid(32);
+               $item["uri"] = $item['parent-uri'] = $item['thr-parent'] = 'urn:X-dfrn:'.get_app()->get_hostname() . ':follow:'.$item['guid'];
+               $item["created"] = $item["edited"] = datetime_convert('UTC','UTC', 'now', ATOM_TIME);
+               $item["app"] = "activity";
+
+               $contact = Probe::uri($item['follow']);
+
+               if ($contact['alias'] == '') {
+                       $contact['alias'] = $contact["url"];
+               } else {
+                       $item['follow'] = $contact['alias'];
+               }
+
+               if ($item['verb'] == ACTIVITY_FOLLOW) {
+                       $message = t('<a href="%s">%s</> is now following <a href="%s">%s</>.');
+               } else {
+                       $message = t('<a href="%s">%s</> stopped following <a href="%s">%s</>.');
+               }
+
+               $item["body"] = sprintf($message, $owner["url"], $owner["nick"], $contact["url"], $contact["nick"]);
+
+               $title = self::entry_header($doc, $entry, $owner, $toplevel);
+
+               self::entry_content($doc, $entry, $item, $owner, "");
+
+               $object = self::add_person_object($doc, $owner, $contact);
+               $entry->appendChild($object);
+
+               self::entry_footer($doc, $entry, $item, $owner);
+
+               return $entry;
+       }
+
+       /**
+        * @brief Adds a regular entry element
         *
         * @param object $doc XML document
         * @param array $item Data of the item that is to be posted
         * @param array $owner Contact data of the poster
-        * @param $toplevel
+        * @param bool $toplevel Is it for en entry element (false) or a feed entry (true)?
         *
-        * @return 
+        * @return object Entry element
         */
        private function note_entry($doc, $item, $owner, $toplevel) {
 
@@ -1731,16 +1862,17 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds a header element to the XML document
         *
         * @param object $doc XML document
-        * @param $entry
+        * @param object $entry The entry element where the elements are added
         * @param array $owner Contact data of the poster
-        * @param $toplevel
+        * @param bool $toplevel Is it for en entry element (false) or a feed entry (true)?
         *
-        * @return 
+        * @return string The title for the element
         */
        private function entry_header($doc, &$entry, $owner, $toplevel) {
+               /// @todo Check if this title stuff is really needed (I guess not)
                if (!$toplevel) {
                        $entry = $doc->createElement("entry");
                        $title = sprintf("New note by %s", $owner["nick"]);
@@ -1764,17 +1896,15 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds elements to the XML document
         *
         * @param object $doc XML document
-        * @param $entry
+        * @param object $entry Entry element where the content is added
         * @param array $item Data of the item that is to be posted
         * @param array $owner Contact data of the poster
-        * @param $title
-        * @param $verb
-        * @param $complete
-        *
-        * @return 
+        * @param string $title Title for the post
+        * @param string $verb The activity verb
+        * @param bool $complete Add the "status_net" element?
         */
        private function entry_content($doc, $entry, $item, $owner, $title, $verb = "", $complete = true) {
 
@@ -1806,15 +1936,13 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Adds the elements at the foot of an entry to the XML document
         *
         * @param object $doc XML document
-        * @param $entry
+        * @param object $entry The entry element where the elements are added
         * @param array $item Data of the item that is to be posted
         * @param array $owner Contact data of the poster
         * @param $complete
-        *
-        * @return 
         */
        private function entry_footer($doc, $entry, $item, $owner, $complete = true) {
 
@@ -1847,9 +1975,14 @@ class ostatus {
                        }
                }
 
-               xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation",
-                                                       "href" => App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]));
-               xml::add_element($doc, $entry, "ostatus:conversation", App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]);
+               if (intval($item["parent"]) > 0) {
+                       $conversation = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"];
+               } else {
+                       $conversation = "urn:X-dfrn:".App::get_baseurl().":conversation:".$item["guid"];
+               }
+
+               xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation));
+               xml::add_element($doc, $entry, "ostatus:conversation", $conversation);
 
                $tags = item_getfeedtags($item);
 
@@ -1858,6 +1991,10 @@ class ostatus {
                                if ($t[0] == "@")
                                        $mentioned[$t[1]] = $t[1];
 
+               if (isset($item['follow'])) {
+                       $mentioned[$item['follow']] = $item['follow'];
+               }
+
                // Make sure that mentions are accepted (GNU Social has problems with mixing HTTP and HTTPS)
                $newmentions = array();
                foreach ($mentioned AS $mention) {
@@ -1913,13 +2050,13 @@ class ostatus {
        }
 
        /**
-        * @brief 
+        * @brief Creates the XML feed for a given nickname
         *
-        * @param $a
-        * @param $owner_nick
-        * @param $last_update
+        * @param app $a The application class
+        * @param string $owner_nick Nickname of the feed owner
+        * @param string $last_update Date of the last update
         *
-        * @return 
+        * @return string XML feed
         */
        public static function feed(&$a, $owner_nick, $last_update) {
 
@@ -1936,9 +2073,23 @@ class ostatus {
                        $last_update = 'now -30 days';
 
                $check_date = datetime_convert('UTC','UTC',$last_update,'Y-m-d H:i:s');
-
-               $items = q("SELECT STRAIGHT_JOIN `item`.*, `item`.`id` AS `item_id` FROM `item`
-                               INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`
+               $authorid = get_contact($owner["url"], 0);
+
+               $items = q("SELECT `item`.*, `item`.`id` AS `item_id` FROM `item` USE INDEX (`uid_contactid_created`)
+                               STRAIGHT_JOIN `thread` ON `thread`.`iid` = `item`.`parent`
+                               WHERE `item`.`uid` = %d AND `item`.`contact-id` = %d AND
+                                       `item`.`author-id` = %d AND `item`.`created` > '%s' AND
+                                       NOT `item`.`deleted` AND NOT `item`.`private` AND
+                                       `thread`.`network` IN ('%s', '%s')
+                               ORDER BY `item`.`created` DESC LIMIT 300",
+                               intval($owner["uid"]), intval($owner["id"]),
+                               intval($authorid), dbesc($check_date),
+                               dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
+
+/*             2016-10-23: The old query will be kept until we are sure that the query above is a good and fast replacement
+
+               $items = q("SELECT `item`.*, `item`.`id` AS `item_id` FROM `item`
+                               STRAIGHT_JOIN `thread` ON `thread`.`iid` = `item`.`parent`
                                LEFT JOIN `item` AS `thritem` ON `thritem`.`uri`=`item`.`thr-parent` AND `thritem`.`uid`=`item`.`uid`
                                WHERE `item`.`uid` = %d AND `item`.`received` > '%s' AND NOT `item`.`private` AND NOT `item`.`deleted`
                                        AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid`  = '' AND `item`.`deny_gid`  = ''
@@ -1946,7 +2097,7 @@ class ostatus {
                                                OR (`item`.`network` = '%s' AND ((`thread`.`network` IN ('%s', '%s')) OR (`thritem`.`network` IN ('%s', '%s')))) AND `thread`.`mention`)
                                        AND ((`item`.`owner-link` IN ('%s', '%s') AND (`item`.`parent` = `item`.`id`))
                                                OR (`item`.`author-link` IN ('%s', '%s')))
-                               ORDER BY `item`.`received` DESC
+                               ORDER BY `item`.`id` DESC
                                LIMIT 0, 300",
                                intval($owner["uid"]), dbesc($check_date), dbesc(NETWORK_DFRN),
                                //dbesc(NETWORK_OSTATUS), dbesc(NETWORK_OSTATUS),
@@ -1956,7 +2107,7 @@ class ostatus {
                                dbesc($owner["nurl"]), dbesc(str_replace("http://", "https://", $owner["nurl"])),
                                dbesc($owner["nurl"]), dbesc(str_replace("http://", "https://", $owner["nurl"]))
                        );
-
+*/
                $doc = new DOMDocument('1.0', 'utf-8');
                $doc->formatOutput = true;