diff --git a/include/diaspora.php b/include/diaspora.php index 559a9d14d..d2e27aafe 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -1271,17 +1271,49 @@ function diaspora_comment($importer,$xml,$msg) { return; } - if((! $importer['system']) && (! perm_is_allowed($importer['channel_id'],$contact['xchan_hash'],'post_comments'))) { + + + $pubcomment = get_pconfig($importer['channel_id'],'system','diaspora_public_comments'); + + // by default comments on public posts are allowed from anybody on Diaspora. That is their policy. + // Once this setting is set to something we'll track your preference and it will over-ride the default. + + if($pubcomment === false) + $pubcomment = 1; + + // Friendica is currently truncating guids at 64 chars + $search_guid = $parent_guid; + if(strlen($parent_guid) == 64) + $search_guid = $parent_guid . '%'; + + $r = q("SELECT * FROM item WHERE uid = %d AND mid LIKE '%s' LIMIT 1", + intval($importer['channel_id']), + dbesc($search_guid) + ); + if(! $r) { + logger('diaspora_comment: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid); + return; + } + + $parent_item = $r[0]; + + if(intval($parent_item['item_private'])) + $pubcomment = 0; + + // So basically if something arrives at the sys channel it's by definition public and we allow it. + // If $pubcomment and the parent was public, we allow it. + // In all other cases, honour the permissions for this Diaspora connection + + if((! $importer['system']) && (! $pubcomment) && (! perm_is_allowed($importer['channel_id'],$contact['xchan_hash'],'post_comments'))) { logger('diaspora_comment: Ignoring this author.'); return 202; } - // Friendica is currently truncating guids at 64 chars - $search_guid = $guid; if(strlen($guid) == 64) $search_guid = $guid . '%'; + $r = q("SELECT * FROM item WHERE uid = %d AND mid like '%s' LIMIT 1", intval($importer['channel_id']), dbesc($search_guid) @@ -1291,20 +1323,6 @@ function diaspora_comment($importer,$xml,$msg) { return; } - $search_guid = $parent_guid; - if(strlen($parent_guid) == 64) - $search_guid = $parent_guid . '%'; - - - $r = q("SELECT * FROM item WHERE uid = %d AND mid LIKE '%s' LIMIT 1", - intval($importer['channel_id']), - dbesc($search_guid) - ); - if(! $r) { - logger('diaspora_comment: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid); - return; - } - $parent_item = $r[0]; /* How Diaspora performs comment signature checking: diff --git a/mod/settings.php b/mod/settings.php index 8c927a97c..2ccedcb7b 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -114,6 +114,12 @@ function settings_post(&$a) { check_form_security_token_redirectOnErr('/settings/featured', 'settings_featured'); call_hooks('feature_settings_post', $_POST); + + if($_POST['dspr-submit']) { + set_pconfig(local_channel(),'system','diaspora_public_comments',intval($_POST['dspr_pubcomment'])); + info( t('Diaspora Policy Settings updated.') . EOL); + } + build_sync_packet(); return; } @@ -648,18 +654,31 @@ function settings_content(&$a) { } if((argc() > 1) && (argv(1) === 'featured')) { $settings_addons = ""; + + $o = ''; + $diaspora_enabled = get_config('system','diaspora_enabled'); $r = q("SELECT * FROM `hook` WHERE `hook` = 'feature_settings' "); - if(! count($r)) + if((! $r) && (! $diaspora_enabled)) $settings_addons = t('No feature settings configured'); + if($diaspora_enabled) { + $pubcomments = get_pconfig(local_channel(),'system','diaspora_public_comments'); + if($pubcomments === false) + $pubcomments = 1; + } + call_hooks('feature_settings', $settings_addons); - - + $tpl = get_markup_template("settings_addons.tpl"); $o .= replace_macros($tpl, array( '$form_security_token' => get_form_security_token("settings_featured"), '$title' => t('Feature Settings'), + '$diaspora_enabled' => $diaspora_enabled, + '$pubcomments' => $pubcomments, + '$dsprtitle' => t('Diaspora Policy Settings'), + '$dsprhelp' => t('Allow any Diaspora member to comment on your public posts.'), + '$dsprsubmit' => t('Submit Diaspora Policy Settings'), '$settings_addons' => $settings_addons )); return $o; diff --git a/view/css/mod_settings.css b/view/css/mod_settings.css index cd66684f8..5fb139074 100644 --- a/view/css/mod_settings.css +++ b/view/css/mod_settings.css @@ -64,3 +64,17 @@ ul#settings-privacy-macros { clear: both; margin-bottom: 15px; } + +#dspr-pubcomment-label { + float: left; + width: 200px; + margin-bottom: 25px; +} + +#dspr-pubcomment-checkbox { + float: left; +} + +#settings-dspr-wrapper { + margin-top: 15px; +} diff --git a/view/tpl/settings_addons.tpl b/view/tpl/settings_addons.tpl index f0d5195bf..a18f57658 100755 --- a/view/tpl/settings_addons.tpl +++ b/view/tpl/settings_addons.tpl @@ -1,10 +1,19 @@

{{$title}}

-
+{{if $diaspora_enabled}} +
+ +
+
+ + +
+
+{{/if}} {{$settings_addons}}