X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fostatus.php;h=b798a605f91eb9a609dee34335949eafaff5847b;hb=57cadf5b8f5d5c45f1931607c22145647ca52f36;hp=0796fcc3b77a24cba55cd41cb4b98f8de56c0649;hpb=ffd73d137bee6d17f44adc8bb37bfd15c23ec67e;p=friendica.git diff --git a/include/ostatus.php b/include/ostatus.php index 0796fcc3b7..b798a605f9 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -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; - $value = $xpath->evaluate('atom:author/uri/text()', $context)->item(0)->nodeValue; + // 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/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,6 +143,23 @@ 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["photo"] = $author["author-avatar"]; update_gcontact($contact); @@ -144,12 +169,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 +212,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); @@ -751,16 +777,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; @@ -1151,12 +1178,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 +1275,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 +1336,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 +1361,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 +1431,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 +1505,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 +1518,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 +1531,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); @@ -1534,12 +1555,12 @@ class ostatus { } /** - * @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 +1579,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 +1610,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 +1623,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 +1690,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 +1712,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 +1728,14 @@ class ostatus { } /** - * @brief + * @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 +1755,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 +1789,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 +1829,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) { @@ -1913,13 +1934,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) {