]> git.mxchange.org Git - friendica.git/blobdiff - include/ostatus.php
Removal of test code
[friendica.git] / include / ostatus.php
index 83bc493e3912e0f614768c4d043bccf132b550f5..4f84c123d962d75352e19fadcff9ae1c03b4659b 100644 (file)
@@ -810,7 +810,7 @@ class ostatus {
                                `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'))",
+                               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
@@ -1561,10 +1561,13 @@ 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);
+               }
        }
 
        /**
@@ -1740,6 +1743,97 @@ class ostatus {
                return $entry;
        }
 
+       /**
+        * @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
         *
@@ -1881,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);
 
@@ -1892,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) {