]> git.mxchange.org Git - friendica.git/blobdiff - include/ostatus.php
Only update the contact entry with uid=0
[friendica.git] / include / ostatus.php
index ba5b80cd5d4fe264a93358912fdb4efce1014bc0..e31b4474dab28fafa556eb62964e42a62e978809 100644 (file)
@@ -1,4 +1,8 @@
 <?php
+/**
+ * @file include/ostatus.php
+ */
+
 require_once("include/Contact.php");
 require_once("include/threads.php");
 require_once("include/html2bbcode.php");
@@ -14,11 +18,26 @@ require_once("include/api.php");
 require_once("mod/proxy.php");
 require_once("include/xml.php");
 
+/**
+ * @brief This class contain functions for the OStatus protocol
+ *
+ */
 class ostatus {
        const OSTATUS_DEFAULT_POLL_INTERVAL = 30; // given in minutes
        const OSTATUS_DEFAULT_POLL_TIMEFRAME = 1440; // given in minutes
        const OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS = 14400; // given in minutes
 
+       /**
+        * @brief Fetches author data
+        *
+        * @param object $xpath The xpath object
+        * @param object $context The xml context of the author detals
+        * @param array $importer user record of the importing user
+        * @param array $contact Called by reference, will contain the fetched contact
+        * @param bool $onlyfetch Only fetch the header without updating the contact entries
+        *
+        * @return array Array of author related entries for the item
+        */
        private function fetchauthor($xpath, $context, $importer, &$contact, $onlyfetch) {
 
                $author = array();
@@ -124,6 +143,14 @@ class ostatus {
                return($author);
        }
 
+       /**
+        * @brief Fetches author data from a given XML string
+        *
+        * @param string $xml The XML
+        * @param array $importer user record of the importing user
+        *
+        * @return array Array of author related entries for the item
+        */
        public static function salmon_author($xml, $importer) {
 
                if ($xml == "")
@@ -151,7 +178,16 @@ class ostatus {
                }
        }
 
+       /**
+        * @brief Imports an XML string containing OStatus elements
+        *
+        * @param string $xml The XML
+        * @param array $importer user record of the importing user
+        * @param $contact
+        * @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);
 
@@ -492,6 +528,13 @@ class ostatus {
                }
        }
 
+       /**
+        * @brief Create an url out of an uri
+        *
+        * @param string $href URI in the format "parameter1:parameter1:..."
+        *
+        * @return string URL in the format http(s)://....
+        */
        public static function convert_href($href) {
                $elements = explode(":",$href);
 
@@ -515,6 +558,12 @@ class ostatus {
                return $href;
        }
 
+       /**
+        * @brief Checks if there are entries in conversations that aren't present on our side
+        *
+        * @param bool $mentions Fetch conversations where we are mentioned
+        * @param bool $override Override the interval setting
+        */
        public static function check_conversations($mentions = false, $override = false) {
                $last = get_config('system','ostatus_last_poll');
 
@@ -702,8 +751,18 @@ class ostatus {
                return $details;
        }
 
+       /**
+        * @brief Stores an item and completes the thread
+        *
+        * @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 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;
 
@@ -1093,6 +1152,12 @@ class ostatus {
                return($item_stored);
        }
 
+       /**
+        * @brief Stores conversation data into the database
+        *
+        * @param integer $itemid The id of the item
+        * @param string $conversation_url The uri of the conversation
+        */
        private function store_conversation($itemid, $conversation_url) {
 
                $conversation_url = self::convert_href($conversation_url);
@@ -1114,6 +1179,13 @@ class ostatus {
                }
        }
 
+       /**
+        * @brief Checks if the current post is a reshare
+        *
+        * @param array $item The item array of thw post
+        *
+        * @return string The guid if the post is a reshare
+        */
        private function get_reshared_guid($item) {
                $body = trim($item["body"]);
 
@@ -1143,6 +1215,13 @@ class ostatus {
                return $guid;
        }
 
+       /**
+        * @brief Cleans the body of a post if it contains picture links
+        *
+        * @param string $body The body
+        *
+        * @return string The cleaned body
+        */
        private function format_picture_post($body) {
                $siteinfo = get_attached_data($body);
 
@@ -1170,6 +1249,14 @@ class ostatus {
                return $body;
        }
 
+       /**
+        * @brief Adds the header elements to the XML document
+        *
+        * @param object $doc XML document
+        * @param array $owner Contact data of the poster
+        *
+        * @return object header root element
+        */
        private function add_header($doc, $owner) {
 
                $a = get_app();
@@ -1223,6 +1310,12 @@ class ostatus {
                return $root;
        }
 
+       /**
+        * @brief Add the link to the push hubs to the XML document
+        *
+        * @param object $doc XML document
+        * @param object $root XML root element where the hub links are added
+        */
        public static function hublinks($doc, $root) {
                $hub = get_config('system','huburl');
 
@@ -1242,6 +1335,13 @@ class ostatus {
                }
        }
 
+       /**
+        * @brief Adds attachement data to the XML document
+        *
+        * @param object $doc XML document
+        * @param object $root XML root element where the hub links are added
+        * @param array $item Data of the item that is to be posted
+        */
        private function get_attachment($doc, $root, $item) {
                $o = "";
                $siteinfo = get_attached_data($item["body"]);
@@ -1305,6 +1405,14 @@ class ostatus {
                }
        }
 
+       /**
+        * @brief Adds the author element to the XML document
+        *
+        * @param object $doc XML document
+        * @param array $owner Contact data of the poster
+        *
+        * @return object author element
+        */
        private function add_author($doc, $owner) {
 
                $r = q("SELECT `homepage` FROM `profile` WHERE `uid` = %d AND `is-default` LIMIT 1", intval($owner["uid"]));
@@ -1371,18 +1479,42 @@ class ostatus {
         *
        */
 
+       /**
+        * @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 string activity
+        */
        function construct_verb($item) {
                if ($item['verb'])
                        return $item['verb'];
                return ACTIVITY_POST;
        }
 
+       /**
+        * @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 string Object type
+        */
        function construct_objecttype($item) {
                if (in_array($item['object-type'], array(ACTIVITY_OBJ_NOTE, ACTIVITY_OBJ_COMMENT)))
                        return $item['object-type'];
                return ACTIVITY_OBJ_NOTE;
        }
 
+       /**
+        * @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 bool $toplevel
+        *
+        * @return object Entry element
+        */
        private function entry($doc, $item, $owner, $toplevel = false) {
                $repeated_guid = self::get_reshared_guid($item);
                if ($repeated_guid != "")
@@ -1397,6 +1529,14 @@ class ostatus {
                        return self::note_entry($doc, $item, $owner, $toplevel);
        }
 
+       /**
+        * @brief Adds a source entry to the XML document
+        *
+        * @param object $doc XML document
+        * @param array $contact Array of the contact that is added
+        *
+        * @return object Source element
+        */
        private function source_entry($doc, $contact) {
                $source = $doc->createElement("source");
                xml::add_element($doc, $source, "id", $contact["poll"]);
@@ -1413,6 +1553,14 @@ class ostatus {
                return $source;
        }
 
+       /**
+        * @brief Fetches contact data from the contact or the gcontact table
+        *
+        * @param string $url URL of the contact
+        * @param array $owner Contact data of the poster
+        *
+        * @return array Contact array
+        */
        private function contact_entry($url, $owner) {
 
                $r = q("SELECT * FROM `contact` WHERE `nurl` = '%s' AND `uid` IN (0, %d) ORDER BY `uid` DESC LIMIT 1",
@@ -1447,6 +1595,17 @@ class ostatus {
                return $contact;
        }
 
+       /**
+        * @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 bool $toplevel Is it for en entry element (false) or a feed entry (true)?
+        *
+        * @return object Entry element
+        */
        private function reshare_entry($doc, $item, $owner, $repeated_guid, $toplevel) {
 
                if (($item["id"] != $item["parent"]) AND (normalise_link($item["author-link"]) != normalise_link($owner["url"]))) {
@@ -1473,8 +1632,6 @@ class ostatus {
 
                $as_object = $doc->createElement("activity:object");
 
-// ostatusWaEeYs
-// ostatusogu9zg - besser
                xml::add_element($doc, $as_object, "activity:object-type", NAMESPACE_ACTIVITY_SCHEMA."activity");
 
                self::entry_content($doc, $as_object, $repeated_item, $owner, "", "", false);
@@ -1505,6 +1662,16 @@ class ostatus {
                return $entry;
        }
 
+       /**
+        * @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 bool $toplevel Is it for en entry element (false) or a feed entry (true)?
+        *
+        * @return object Entry element with "like"
+        */
        private function like_entry($doc, $item, $owner, $toplevel) {
 
                if (($item["id"] != $item["parent"]) AND (normalise_link($item["author-link"]) != normalise_link($owner["url"]))) {
@@ -1532,6 +1699,16 @@ class ostatus {
                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 bool $toplevel Is it for en entry element (false) or a feed entry (true)?
+        *
+        * @return object Entry element
+        */
        private function note_entry($doc, $item, $owner, $toplevel) {
 
                if (($item["id"] != $item["parent"]) AND (normalise_link($item["author-link"]) != normalise_link($owner["url"]))) {
@@ -1549,7 +1726,18 @@ class ostatus {
                return $entry;
        }
 
+       /**
+        * @brief Adds a header element to the XML document
+        *
+        * @param object $doc XML document
+        * @param object $entry The entry element where the elements are added
+        * @param array $owner Contact data of the poster
+        * @param bool $toplevel Is it for en entry element (false) or a feed entry (true)?
+        *
+        * @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"]);
@@ -1572,6 +1760,17 @@ class ostatus {
                return $title;
        }
 
+       /**
+        * @brief Adds elements to the XML document
+        *
+        * @param object $doc XML document
+        * @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 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) {
 
                if ($verb == "")
@@ -1601,6 +1800,15 @@ class ostatus {
                xml::add_element($doc, $entry, "updated", datetime_convert("UTC","UTC",$item["edited"]."+00:00",ATOM_TIME));
        }
 
+       /**
+        * @brief Adds the elements at the foot of an entry to the XML document
+        *
+        * @param object $doc XML document
+        * @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
+        */
        private function entry_footer($doc, $entry, $item, $owner, $complete = true) {
 
                $mentioned = array();
@@ -1697,6 +1905,15 @@ class ostatus {
                }
        }
 
+       /**
+        * @brief Creates the XML feed for a given nickname
+        *
+        * @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 string XML feed
+        */
        public static function feed(&$a, $owner_nick, $last_update) {
 
                $r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`timezone`, `user`.`page-flags`
@@ -1746,6 +1963,14 @@ class ostatus {
                return(trim($doc->saveXML()));
        }
 
+       /**
+        * @brief Creates the XML for a salmon message
+        *
+        * @param array $item Data of the item that is to be posted
+        * @param array $owner Contact data of the poster
+        *
+        * @return string XML for the salmon
+        */
        public static function salmon($item,$owner) {
 
                $doc = new DOMDocument('1.0', 'utf-8');