diff options
-rwxr-xr-x | include/diaspora.php | 52 | ||||
-rw-r--r-- | mod/settings.php | 25 | ||||
-rw-r--r-- | view/css/mod_settings.css | 14 | ||||
-rwxr-xr-x | view/tpl/settings_addons.tpl | 11 |
4 files changed, 81 insertions, 21 deletions
diff --git a/include/diaspora.php b/include/diaspora.php index 559a9d14d..d2e27aafe 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -1271,31 +1271,21 @@ function diaspora_comment($importer,$xml,$msg) { return; } - if((! $importer['system']) && (! 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 + + $pubcomment = get_pconfig($importer['channel_id'],'system','diaspora_public_comments'); - $search_guid = $guid; - if(strlen($guid) == 64) - $search_guid = $guid . '%'; + // 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. - $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: our comment just got relayed back to us (or there was a guid collision) : ' . $guid); - return; - } + 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) @@ -1304,8 +1294,36 @@ function diaspora_comment($importer,$xml,$msg) { 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; + } + + $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) + ); + if($r) { + logger('diaspora_comment: our comment just got relayed back to us (or there was a guid collision) : ' . $guid); + return; + } + + /* 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 @@ <div class="generic-content-wrapper-styled"> <h1>{{$title}}</h1> - <form action="settings/featured" method="post" autocomplete="off"> <input type='hidden' name='form_security_token' value='{{$form_security_token}}'> +{{if $diaspora_enabled}} +<div class="settings-block"> +<button class="btn btn-default" data-target="#settings-dspr-wrapper" data-toggle="collapse" type="button">{{$dsprtitle}}</button> +<div id="settings-dspr-wrapper" class="collapse well"> +<div id="dspr-settings-wrapper"> +<label id="dspr-pubcomment-label" for="dspr-pubcomment-checkbox">{{$dsprhelp}}</label> +<input id="dspr-pubcomment-checkbox" type="checkbox" name="dspr_pubcomment" value="1" ' . {{if $pubcomments}} checked="checked" {{/if}} /> +</div><div class="clear"></div> +<div class="settings-submit-wrapper" ><input type="submit" name="dspr-submit" class="settings-submit" value="{{$dsprsubmit}}" /></div></div></div> +{{/if}} {{$settings_addons}} </form> |