diff --git a/boot.php b/boot.php index 0a2f5c50cd..5cc3499311 100644 --- a/boot.php +++ b/boot.php @@ -1509,6 +1509,9 @@ function killme() { * @brief Redirect to another URL and terminate this process. */ function goaway($s) { + if (!strstr(normalise_link($s), normalise_link(App::get_baseurl()))) + $s = App::get_baseurl()."/".$s; + header("Location: $s"); killme(); } diff --git a/include/ostatus.php b/include/ostatus.php index 5c5016d0fc..44431967ec 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -686,7 +686,8 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { $conversation_url = ostatus_convert_href($conversation_url); // If the thread shouldn't be completed then store the item and go away - if ((intval(get_config('system','ostatus_poll_interval')) == -2) AND (count($item) > 0)) { + // Don't do a completion on liked content + if (((intval(get_config('system','ostatus_poll_interval')) == -2) AND (count($item) > 0)) OR ($item["verb"] == ACTIVITY_LIKE)) { //$arr["app"] .= " (OStatus-NoCompletion)"; $item_stored = item_store($item, true); return($item_stored); @@ -725,7 +726,7 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { $pageno = 1; $items = array(); - logger('fetching conversation url '.$conv.' for user '.$uid); + logger('fetching conversation url '.$conv.' ('.$conversation_url.') for user '.$uid); do { $conv_arr = z_fetch_url($conv."?page=".$pageno); @@ -778,6 +779,8 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { $r = q("SELECT `nurl` FROM `contact` WHERE `uid` = %d AND `self`", intval($uid)); $importer = $r[0]; + $new_parent = true; + foreach ($items as $single_conv) { // Update the gcontact table @@ -809,6 +812,9 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { // 2. This first post is a post inside our thread // 3. This first post is a post inside another thread if (($first_id != $parent["uri"]) AND ($parent["uri"] != "")) { + + $new_parent = true; + $new_parents = q("SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN (SELECT `parent` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s')) LIMIT 1", @@ -909,12 +915,14 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { if (isset($single_conv->actor->url)) $actor = $single_conv->actor->url; - $contact = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'", + $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); @@ -925,6 +933,14 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG); $contact_id = $parent["contact-id"]; + + $not_following = true; + } + + // 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); + continue; } $arr = array(); diff --git a/mod/admin.php b/mod/admin.php index a98f464f81..e7c4f51b66 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -598,6 +598,7 @@ function admin_page_site_post(&$a) { $dfrn_only = ((x($_POST,'dfrn_only')) ? True : False); $ostatus_disabled = !((x($_POST,'ostatus_disabled')) ? True : False); $ostatus_poll_interval = ((x($_POST,'ostatus_poll_interval')) ? intval(trim($_POST['ostatus_poll_interval'])) : 0); + $ostatus_full_threads = ((x($_POST,'ostatus_full_threads')) ? True : False); $diaspora_enabled = ((x($_POST,'diaspora_enabled')) ? True : False); $ssl_policy = ((x($_POST,'ssl_policy')) ? intval($_POST['ssl_policy']) : 0); $force_ssl = ((x($_POST,'force_ssl')) ? True : False); @@ -746,6 +747,7 @@ function admin_page_site_post(&$a) { set_config('system','dfrn_only', $dfrn_only); set_config('system','ostatus_disabled', $ostatus_disabled); set_config('system','ostatus_poll_interval', $ostatus_poll_interval); + set_config('system','ostatus_full_threads', $ostatus_full_threads); set_config('system','diaspora_enabled', $diaspora_enabled); set_config('config','private_addons', $private_addons); @@ -947,6 +949,7 @@ function admin_page_site(&$a) { '$max_author_posts_community_page' => array('max_author_posts_community_page', t("Posts per user on community page"), get_config('system','max_author_posts_community_page'), t("The maximum number of posts per user on the community page. (Not valid for 'Global Community')")), '$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28StatusNet, GNU Social etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")), '$ostatus_poll_interval' => array('ostatus_poll_interval', t("OStatus conversation completion interval"), (string) intval(get_config('system','ostatus_poll_interval')), t("How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."), $ostatus_poll_choices), + '$ostatus_full_threads' => array('ostatus_full_threads', t("Only import OStatus threads from our contacts"), get_config('system','ostatus_full_threads'), t("Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system.")), '$ostatus_not_able' => t("OStatus support can only be enabled if threading is enabled."), '$diaspora_able' => $diaspora_able, '$diaspora_not_able' => t("Diaspora support can't be enabled because Friendica was installed into a sub directory."), diff --git a/view/templates/admin_site.tpl b/view/templates/admin_site.tpl index b08e5f935f..91957d016a 100644 --- a/view/templates/admin_site.tpl +++ b/view/templates/admin_site.tpl @@ -87,6 +87,7 @@ {{if $thread_allow.2}} {{include file="field_checkbox.tpl" field=$ostatus_disabled}} {{include file="field_select.tpl" field=$ostatus_poll_interval}} + {{include file="field_checkbox.tpl" field=$ostatus_full_threads}} {{else}}