mirror of
https://github.com/friendica/friendica
synced 2024-12-23 13:20:21 +00:00
Merge pull request #2400 from annando/1603-ostatus-thread
Only import OStatus threads that are started by our contacts
This commit is contained in:
commit
bdfd81e723
4 changed files with 26 additions and 3 deletions
3
boot.php
3
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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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."),
|
||||
|
|
|
@ -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}}
|
||||
<div class='field checkbox' id='div_id_{{$ostatus_disabled.0}}'>
|
||||
<label for='id_{{$ostatus_disabled.0}}'>{{$ostatus_disabled.1}}</label>
|
||||
|
|
Loading…
Reference in a new issue