X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fostatus.php;h=5ba9f0e83c777ad103afd76b2420eef18de921a9;hb=df312402e46cc3cdc788c73d0c41874b6c71fcb3;hp=138f51090607abf8860e11723e88ed78a55a8dc8;hpb=27905cc21a523d052a0148c9802a64d6dfd9d0d2;p=friendica.git diff --git a/include/ostatus.php b/include/ostatus.php index 138f510906..5ba9f0e83c 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -676,13 +676,21 @@ function ostatus_conv_fetch_actor($actor) { update_gcontact($contact); } -function ostatus_fetch_conversation($self, $conversation_url = "") { +/** + * @brief Fetches the conversation url for a given item link or conversation id + * + * @param string $self The link to the posting + * @param string $conversation_id The conversation id + * + * @return string The conversation url + */ +function ostatus_fetch_conversation($self, $conversation_id = "") { - if ($conversation_url != "") { - $elements = explode(":", $conversation_url); + if ($conversation_id != "") { + $elements = explode(":", $conversation_id); if ((count($elements) <= 2) OR ($elements[0] != "tag")) - return $conversation_url; + return $conversation_id; } if ($self == "") @@ -706,6 +714,50 @@ function ostatus_fetch_conversation($self, $conversation_url = "") { return $base_url."/conversation/".$conversation_id; } +/** + * @brief Fetches actor details of a given actor and user id + * + * @param string $actor The actor url + * @param int $uid The user id + * @param int $contact_id The default contact-id + * + * @return array Array with actor details + */ +function ostatus_get_actor_details($actor, $uid, $contact_id) { + + $details = array(); + + $contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'", + $uid, normalise_link($actor), NETWORK_STATUSNET); + + if (!$contact) + $contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `alias` IN ('%s', '%s') AND `network` != '%s'", + $uid, $actor, normalise_link($actor), NETWORK_STATUSNET); + + if ($contact) { + logger("Found contact for url ".$actor, LOGGER_DEBUG); + $details["contact_id"] = $contact[0]["id"]; + $details["network"] = $contact[0]["network"]; + + $details["not_following"] = !in_array($contact[0]["rel"], array(CONTACT_IS_SHARING, CONTACT_IS_FRIEND)); + } else { + logger("No contact found for user ".$uid." and url ".$actor, LOGGER_DEBUG); + + // Adding a global contact + /// @TODO Use this data for the post + $details["global_contact_id"] = get_contact($actor, 0); + + logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG); + + $details["contact_id"] = $contact_id; + $details["network"] = NETWORK_OSTATUS; + + $details["not_following"] = true; + } + + return $details; +} + function ostatus_completion($conversation_url, $uid, $item = array(), $self = "") { $a = get_app(); @@ -946,40 +998,20 @@ function ostatus_completion($conversation_url, $uid, $item = array(), $self = "" if (isset($single_conv->actor->url)) $actor = $single_conv->actor->url; - $contact = q("SELECT `id`, `rel` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'", - $uid, normalise_link($actor), NETWORK_STATUSNET); - - if (count($contact)) { - logger("Found contact for url ".$actor, LOGGER_DEBUG); - $contact_id = $contact[0]["id"]; - - $not_following = !in_array($contact[0]["rel"], array(CONTACT_IS_SHARING, CONTACT_IS_FRIEND)); - } else { - logger("No contact found for url ".$actor, LOGGER_DEBUG); - - // Adding a global contact - /// @TODO Use this data for the post - $global_contact_id = get_contact($actor, 0); - - logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG); - - $contact_id = $parent["contact-id"]; - - $not_following = true; - } + $details = ostatus_get_actor_details($actor, $uid, $parent["contact-id"]); // Do we only want to import threads that were started by our contacts? - if ($not_following AND $new_parent AND get_config('system','ostatus_full_threads')) { - logger("Don't import uri ".$first_id." because we don't follow the person ".$actor, LOGGER_DEBUG); + if ($details["not_following"] AND $new_parent AND get_config('system','ostatus_full_threads')) { + logger("Don't import uri ".$first_id." because user ".$uid." doesn't follow the person ".$actor, LOGGER_DEBUG); continue; } $arr = array(); - $arr["network"] = NETWORK_OSTATUS; + $arr["network"] = $details["network"]; $arr["uri"] = $single_conv->id; $arr["plink"] = $plink; $arr["uid"] = $uid; - $arr["contact-id"] = $contact_id; + $arr["contact-id"] = $details["contact_id"]; $arr["parent-uri"] = $parent_uri; $arr["created"] = $single_conv->published; $arr["edited"] = $single_conv->published; @@ -1105,6 +1137,15 @@ function ostatus_completion($conversation_url, $uid, $item = array(), $self = "" if (($item_stored < 0) AND (count($item) > 0)) { //$arr["app"] .= " (OStatus-NoConvFound)"; + + if (get_config('system','ostatus_full_threads')) { + $details = ostatus_get_actor_details($item["owner-link"], $uid, $item["contact-id"]); + if ($details["not_following"]) { + logger("Don't import uri ".$item["uri"]." because user ".$uid." doesn't follow the person ".$item["owner-link"], LOGGER_DEBUG); + return false; + } + } + $item_stored = item_store($item, true); if ($item_stored) { logger("Uri ".$item["uri"]." wasn't found in conversation ".$conversation_url, LOGGER_DEBUG);