X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fdiaspora.php;h=f2d48486788bf68145cd3dcbb22b07395b4d91f5;hb=5ca93d054104b4af964263ec5b054806b5222bba;hp=5836589110aa3f2f6718c45a65e61faf4ebcefbf;hpb=26098fa263f8d4e216fe5566aeb495c5b518b78a;p=friendica.git diff --git a/include/diaspora.php b/include/diaspora.php index 5836589110..f2d4848678 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -2,6 +2,10 @@ /** * @file include/diaspora.php * @brief The implementation of the diaspora protocol + * + * The new protocol is described here: http://diaspora.github.io/diaspora_federation/index.html + * Currently this implementation here interprets the old and the new protocol and sends the old one. + * This will change in the future. */ require_once("include/items.php"); @@ -619,7 +623,7 @@ class diaspora { dbesc($arr["photo"]), dbesc($arr["request"]), dbesc($arr["nick"]), - dbesc($arr["addr"]), + dbesc(strtolower($arr["addr"])), dbesc($arr["guid"]), dbesc($arr["batch"]), dbesc($arr["notify"]), @@ -634,7 +638,7 @@ class diaspora { } else { $r = q("INSERT INTO `fcontact` (`url`,`name`,`photo`,`request`,`nick`,`addr`, `guid`, `batch`, `notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated`) - VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", + VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", dbesc($arr["url"]), dbesc($arr["name"]), dbesc($arr["photo"]), @@ -673,7 +677,7 @@ class diaspora { $r = q("SELECT `addr` FROM `gcontact` WHERE `id` = %d AND `addr` != ''", intval($gcontact_id)); if ($r) - return $r[0]["addr"]; + return strtolower($r[0]["addr"]); } $r = q("SELECT `network`, `addr`, `self`, `url`, `nick` FROM `contact` WHERE `id` = %d", @@ -693,7 +697,7 @@ class diaspora { } } - return $handle; + return strtolower($handle); } /** @@ -995,17 +999,21 @@ class diaspora { */ private function author_contact_by_url($contact, $person, $uid) { - $r = q("SELECT `id`, `network` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1", + $r = q("SELECT `id`, `network`, `url` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1", dbesc(normalise_link($person["url"])), intval($uid)); if ($r) { $cid = $r[0]["id"]; $network = $r[0]["network"]; + + // We are receiving content from a user that is about to be terminated + // This means the user is vital, so we remove a possible termination date. + unmark_for_death($contact); } else { $cid = $contact["id"]; $network = NETWORK_DIASPORA; } - return (array("cid" => $cid, "network" => $network)); + return array("cid" => $cid, "network" => $network); } /** @@ -1107,6 +1115,11 @@ class diaspora { $text = unxmlify($data->text); $author = notags(unxmlify($data->author)); + if (isset($data->created_at)) + $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); + else + $created_at = datetime_convert(); + $contact = self::allowed_contact_by_handle($importer, $sender, true); if (!$contact) return false; @@ -1153,6 +1166,8 @@ class diaspora { $datarray["object-type"] = ACTIVITY_OBJ_COMMENT; $datarray["object"] = $xml; + $datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at; + $datarray["body"] = diaspora2bb($text); self::fetch_guid($datarray); @@ -1173,7 +1188,7 @@ class diaspora { ); // notify others - proc_run("php", "include/notifier.php", "comment-import", $message_id); + proc_run(PRIORITY_HIGH, "include/notifier.php", "comment-import", $message_id); } return $message_id; @@ -1349,7 +1364,7 @@ class diaspora { intval($importer["uid"]), dbesc($guid), dbesc($author), - dbesc(datetime_convert("UTC", "UTC", $created_at)), + dbesc($created_at), dbesc(datetime_convert()), dbesc($subject), dbesc($participants) @@ -1508,7 +1523,7 @@ class diaspora { ); // notify others - proc_run("php", "include/notifier.php", "comment-import", $message_id); + proc_run(PRIORITY_HIGH, "include/notifier.php", "comment-import", $message_id); } return $message_id; @@ -1641,7 +1656,7 @@ class diaspora { * @return bool Success */ private function receive_profile($importer, $data) { - $author = notags(unxmlify($data->author)); + $author = strtolower(notags(unxmlify($data->author))); $contact = self::contact_by_handle($importer["uid"], $author); if (!$contact) @@ -1788,7 +1803,7 @@ class diaspora { $i = item_store($arr); if($i) - proc_run("php", "include/notifier.php", "activity", $i); + proc_run(PRIORITY_HIGH, "include/notifier.php", "activity", $i); } } } @@ -2071,7 +2086,7 @@ class diaspora { $guid = notags(unxmlify($data->guid)); $author = notags(unxmlify($data->author)); $public = notags(unxmlify($data->public)); - $created_at = notags(unxmlify($data->created_at)); + $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); $contact = self::allowed_contact_by_handle($importer, $author, false); if (!$contact) @@ -2118,7 +2133,7 @@ class diaspora { $datarray["plink"] = self::plink($author, $guid); $datarray["private"] = (($public == "false") ? 1 : 0); - $datarray["changed"] = $datarray["created"] = $datarray["edited"] = datetime_convert("UTC", "UTC", $created_at); + $datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at; $datarray["object-type"] = $original_item["object-type"]; @@ -2181,7 +2196,7 @@ class diaspora { // Now check if the retraction needs to be relayed by us if($p[0]["origin"]) { // notify others - proc_run("php", "include/notifier.php", "drop", $r[0]["id"]); + proc_run(PRIORITY_HIGH, "include/notifier.php", "drop", $r[0]["id"]); } return true; @@ -2239,12 +2254,11 @@ class diaspora { * @return int The message id of the newly created item */ private function receive_status_message($importer, $data, $xml) { - $raw_message = unxmlify($data->raw_message); $guid = notags(unxmlify($data->guid)); $author = notags(unxmlify($data->author)); $public = notags(unxmlify($data->public)); - $created_at = notags(unxmlify($data->created_at)); + $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); $provider_display_name = notags(unxmlify($data->provider_display_name)); /// @todo enable support for polls @@ -2312,7 +2326,7 @@ class diaspora { $datarray["plink"] = self::plink($author, $guid); $datarray["private"] = (($public == "false") ? 1 : 0); - $datarray["changed"] = $datarray["created"] = $datarray["edited"] = datetime_convert("UTC", "UTC", $created_at); + $datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at; if (isset($address["address"])) $datarray["location"] = $address["address"]; @@ -2623,7 +2637,13 @@ class diaspora { } else { // queue message for redelivery add_to_queue($contact["id"], NETWORK_DIASPORA, $slap, $public_batch); + + // The message could not be delivered. We mark the contact as "dead" + mark_for_death($contact); } + } elseif (($return_code >= 200) AND ($return_code <= 299)) { + // We successfully delivered a message, the contact is alive + unmark_for_death($contact); } return(($return_code) ? $return_code : (-1)); @@ -2866,8 +2886,10 @@ class diaspora { "created_at" => $created, "provider_display_name" => $item["app"]); - if (count($location) == 0) + // Diaspora rejects messages when they contain a location without "lat" or "lng" + if (!isset($location["lat"]) OR !isset($location["lng"])) { unset($message["location"]); + } $type = "status_message"; }