allow moderated comments like wordpress if permissions are compatible

This commit is contained in:
zotlabs
2017-06-18 22:25:41 -07:00
committed by Mario Vavti
parent 3d6255ae24
commit 1472f85b16
13 changed files with 222 additions and 22 deletions

View File

@@ -33,7 +33,7 @@ class Item extends \Zotlabs\Web\Controller {
// This will change. Figure out who the observer is and whether or not
// they have permission to post here. Else ignore the post.
if((! local_channel()) && (! remote_channel()) && (! x($_REQUEST,'commenter')))
if((! local_channel()) && (! remote_channel()) && (! x($_REQUEST,'anonname')))
return;
$uid = local_channel();
@@ -77,7 +77,7 @@ class Item extends \Zotlabs\Web\Controller {
call_hooks('post_local_start', $_REQUEST);
// logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA);
// logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA);
$api_source = ((x($_REQUEST,'api_source') && $_REQUEST['api_source']) ? true : false);
@@ -205,10 +205,29 @@ class Item extends \Zotlabs\Web\Controller {
$route = $parent_item['route'];
}
$moderated = false;
if(! $observer)
if(! $observer) {
$observer = \App::get_observer();
if(! $observer) {
$observer = anon_identity_init($_REQUEST);
if($observer) {
$moderated = true;
$remote_xchan = $remote_observer = $observer;
}
}
}
if(! $observer) {
notice( t('Permission denied.') . EOL) ;
if($api_source)
return ( [ 'success' => false, 'message' => 'permission denied' ] );
if(x($_REQUEST,'return'))
goaway(z_root() . "/" . $return_path );
killme();
}
if($parent) {
logger('mod_item: item_post parent=' . $parent);
$can_comment = false;
@@ -312,7 +331,7 @@ class Item extends \Zotlabs\Web\Controller {
$walltowall = false;
$walltowall_comment = false;
if($remote_xchan)
if($remote_xchan && ! $moderated)
$observer = $remote_observer;
if($observer) {
@@ -996,6 +1015,10 @@ class Item extends \Zotlabs\Web\Controller {
\Zotlabs\Daemon\Master::Summon(array('Notifier', $notify_type, $post_id));
logger('post_complete');
if($moderated) {
info(t('Your comment is awaiting approval.') . EOL);
}
// figure out how to return, depending on from whence we came

View File

@@ -0,0 +1,77 @@
<?php
namespace Zotlabs\Module;
require_once('include/conversation.php');
class Moderate extends \Zotlabs\Web\Controller {
function get() {
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
return;
}
if(argc() > 2) {
$post_id = intval(argv(1));
if(! $post_id)
goaway(z_root() . '/moderate');
$action = argv(2);
$r = q("select * from item where uid = %d and id = %d and item_blocked = %d limit 1",
intval(local_channel()),
intval($post_id),
intval(ITEM_MODERATED)
);
if($r) {
if($action === 'approve') {
q("update item set item_blocked = 0 where uid = %d and id = %d",
intval(local_channel()),
intval($post_id)
);
notice( t('Comment approved') . EOL);
}
elseif($action === 'drop') {
drop_item($post_id,false);
notice( t('Comment deleted') . EOL);
}
}
$r = q("select * from item where id = %d",
intval($post_id)
);
if($r) {
xchan_query($r);
$sync_item = fetch_post_tags($r);
build_sync_packet(local_channel(),array('item' => array(encode_item($sync_item[0],true))));
}
goaway(z_root() . '/moderate');
}
$r = q("select item.id as item_id, item.* from item where item.uid = %d and item_blocked = %d and item_deleted = 0 order by created desc limit 60",
intval(local_channel()),
intval(ITEM_MODERATED)
);
if($r) {
xchan_query($r);
$items = fetch_post_tags($r,true);
}
else {
$items = array();
}
$o = conversation($a,$items,'moderate',false,'traditional');
return $o;
}
}

View File

@@ -324,7 +324,7 @@ class Channel {
foreach($global_perms as $k => $perm) {
$options = array();
foreach($perm_opts as $opt) {
if((! strstr($k,'view')) && $opt[1] == PERMS_PUBLIC)
if(((! strstr($k,'view')) && $k !== 'post_comments') && $opt[1] == PERMS_PUBLIC)
continue;
$options[$opt[1]] = $opt[0];
}