Fixed errors limiting comments to specific groups

This commit is contained in:
Don Chambers 2012-09-21 11:04:00 -05:00
parent d82d9b35f3
commit e266224a84

View file

@ -1,315 +1,316 @@
<?php # $Id$ <?php # $Id$
include_once dirname(__FILE__) . '/common.inc.php'; include_once dirname(__FILE__) . '/common.inc.php';
class serendipity_event_adduser extends serendipity_event class serendipity_event_adduser extends serendipity_event
{ {
function introspect(&$propbag) function introspect(&$propbag)
{ {
global $serendipity; global $serendipity;
$propbag->add('name', PLUGIN_ADDUSER_NAME); $propbag->add('name', PLUGIN_ADDUSER_NAME);
$propbag->add('description', PLUGIN_ADDUSER_DESC); $propbag->add('description', PLUGIN_ADDUSER_DESC);
$propbag->add('stackable', false); $propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking'); $propbag->add('author', 'Garvin Hicking');
$propbag->add('version', '2.35'); $propbag->add('version', '2.35');
$propbag->add('requirements', array( $propbag->add('requirements', array(
'serendipity' => '0.8', 'serendipity' => '0.8',
'smarty' => '2.6.7', 'smarty' => '2.6.7',
'php' => '4.1.0' 'php' => '4.1.0'
)); ));
$propbag->add('groups', array('BACKEND_USERMANAGEMENT')); $propbag->add('groups', array('BACKEND_USERMANAGEMENT'));
$propbag->add('event_hooks', array( $propbag->add('event_hooks', array(
'frontend_configure' => true, 'frontend_configure' => true,
'frontend_display' => true, 'frontend_display' => true,
'entries_header' => true, 'entries_header' => true,
'entry_display' => true, 'entry_display' => true,
'frontend_saveComment' => true, 'frontend_saveComment' => true,
'external_plugin' => true 'external_plugin' => true
)); ));
$propbag->add('configuration', array( $propbag->add('configuration', array(
'instructions', 'instructions',
'registered_only', 'registered_only',
'true_identities' 'registered_only_group',
)); 'true_identities'
));
// Register (multiple) dependencies. KEY is the name of the depending plugin. VALUE is a mode of either 'remove' or 'keep'.
// If the mode 'remove' is set, removing the plugin results in a removal of the depending plugin. 'Keep' meens to // Register (multiple) dependencies. KEY is the name of the depending plugin. VALUE is a mode of either 'remove' or 'keep'.
// not touch the depending plugin. // If the mode 'remove' is set, removing the plugin results in a removal of the depending plugin. 'Keep' meens to
$this->dependencies = array('serendipity_plugin_adduser' => 'keep'); // not touch the depending plugin.
} $this->dependencies = array('serendipity_plugin_adduser' => 'keep');
}
function introspect_config_item($name, &$propbag)
{ function introspect_config_item($name, &$propbag)
switch($name) { {
case 'instructions': switch($name) {
$propbag->add('type', 'html'); case 'instructions':
$propbag->add('name', PLUGIN_ADDUSER_INSTRUCTIONS); $propbag->add('type', 'html');
$propbag->add('description', PLUGIN_ADDUSER_INSTRUCTIONS_DESC); $propbag->add('name', PLUGIN_ADDUSER_INSTRUCTIONS);
$propbag->add('default', PLUGIN_ADDUSER_INSTRUCTIONS_DEFAULT); $propbag->add('description', PLUGIN_ADDUSER_INSTRUCTIONS_DESC);
break; $propbag->add('default', PLUGIN_ADDUSER_INSTRUCTIONS_DEFAULT);
break;
case 'registered_only':
$propbag->add('type', 'boolean'); case 'registered_only':
$propbag->add('name', PLUGIN_ADDUSER_REGISTERED_ONLY); $propbag->add('type', 'boolean');
$propbag->add('description', PLUGIN_ADDUSER_REGISTERED_ONLY_DESC); $propbag->add('name', PLUGIN_ADDUSER_REGISTERED_ONLY);
$propbag->add('default', false); $propbag->add('description', PLUGIN_ADDUSER_REGISTERED_ONLY_DESC);
break; $propbag->add('default', false);
break;
case 'registered_only_group':
$propbag->add('name', PLUGIN_ADDUSER_REGISTERED_ONLY_GROUP); case 'registered_only_group':
$propbag->add('description', PLUGIN_ADDUSER_REGISTERED_ONLY_GROUP_DESC); $propbag->add('name', PLUGIN_ADDUSER_REGISTERED_ONLY_GROUP);
$_groups =& serendipity_getAllGroups(); $propbag->add('description', PLUGIN_ADDUSER_REGISTERED_ONLY_GROUP_DESC);
$groups = array(); $_groups =& serendipity_getAllGroups();
foreach($_groups AS $group) { $groups = array();
$groups[$group['confkey']] = $group['confvalue']; foreach($_groups AS $group) {
} $groups[$group['confkey']] = $group['confvalue'];
}
$propbag->add('type', 'multiselect');
$propbag->add('select_values', $groups); $propbag->add('type', 'multiselect');
$propbag->add('select_size', 5); $propbag->add('select_values', $groups);
$propbag->add('default', 'all'); $propbag->add('select_size', 5);
break; $propbag->add('default', 'all');
break;
case 'true_identities':
$propbag->add('type', 'boolean'); case 'true_identities':
$propbag->add('name', PLUGIN_ADDUSER_REGISTERED_CHECK); $propbag->add('type', 'boolean');
$propbag->add('description', PLUGIN_ADDUSER_REGISTERED_CHECK_DESC); $propbag->add('name', PLUGIN_ADDUSER_REGISTERED_CHECK);
$propbag->add('default', true); $propbag->add('description', PLUGIN_ADDUSER_REGISTERED_CHECK_DESC);
break; $propbag->add('default', true);
break;
default:
return false; default:
} return false;
return true; }
} return true;
}
function generate_content(&$title) {
$title = PLUGIN_ADDUSER_NAME; function generate_content(&$title) {
} $title = PLUGIN_ADDUSER_NAME;
}
// Checks whether the current author is contained in one of the gorups that need no spam checking
function inGroup() { // Checks whether the current author is contained in one of the gorups that need no spam checking
global $serendipity; function inGroup() {
global $serendipity;
$checkgroups = explode('^', $this->get_config('registered_only_group'));
$checkgroups = explode('^', $this->get_config('registered_only_group'));
// Not configured, so this shall not apply.
if ($checkgroups[0] == '') { // Not configured, so this shall not apply.
return true; if ($checkgroups[0] == '') {
} return true;
}
if (!isset($serendipity['authorid']) || !is_array($checkgroups)) {
return false; if (!isset($serendipity['authorid']) || !is_array($checkgroups)) {
} return false;
}
$mygroups =& serendipity_getGroups($serendipity['authorid'], true);
if (!is_array($mygroups)) { $mygroups =& serendipity_getGroups($serendipity['authorid'], true);
return false; if (!is_array($mygroups)) {
} return false;
}
foreach($checkgroups AS $key => $groupid) {
if ($groupid == 'all') { foreach($checkgroups AS $key => $groupid) {
return true; if ($groupid == 'all') {
} elseif (in_array($groupid, $mygroups)) { return true;
return true; } elseif (in_array($groupid, $mygroups)) {
} return true;
} }
}
return false;
} return false;
}
function event_hook($event, &$bag, &$eventData, $addData = null) {
global $serendipity; function event_hook($event, &$bag, &$eventData, $addData = null) {
static $login_url = null; global $serendipity;
static $login_url = null;
if ($login_url === null) {
$login_url = $serendipity['baseURL'] . $serendipity['indexFile'] . '?/plugin/loginbox'; if ($login_url === null) {
} $login_url = $serendipity['baseURL'] . $serendipity['indexFile'] . '?/plugin/loginbox';
}
$hooks = &$bag->get('event_hooks');
$hooks = &$bag->get('event_hooks');
if (isset($hooks[$event])) {
switch($event) { if (isset($hooks[$event])) {
case 'frontend_saveComment': switch($event) {
if (!isset($serendipity['csuccess'])) { case 'frontend_saveComment':
$serendipity['csuccess'] = 'true'; if (!isset($serendipity['csuccess'])) {
} $serendipity['csuccess'] = 'true';
}
if (serendipity_db_bool($this->get_config('registered_only')) && !serendipity_userLoggedIn() && $addData['source2'] != 'adduser') {
$eventData = array('allow_comments' => false); if (serendipity_db_bool($this->get_config('registered_only')) && !serendipity_userLoggedIn() && $addData['source2'] != 'adduser') {
$serendipity['messagestack']['comments'][] = PLUGIN_ADDUSER_REGISTERED_ONLY_REASON; $eventData = array('allow_comments' => false);
return false; $serendipity['messagestack']['comments'][] = PLUGIN_ADDUSER_REGISTERED_ONLY_REASON;
} return false;
}
if (serendipity_db_bool($this->get_config('registered_only')) && $this->inGroup() && $addData['source2'] != 'adduser') {
$eventData = array('allow_comments' => false); if (serendipity_db_bool($this->get_config('registered_only')) && !$this->inGroup() && $addData['source2'] != 'adduser') {
$serendipity['messagestack']['comments'][] = PLUGIN_ADDUSER_REGISTERED_ONLY_REASON; $eventData = array('allow_comments' => false);
return false; $serendipity['messagestack']['comments'][] = PLUGIN_ADDUSER_REGISTERED_ONLY_REASON;
} return false;
}
if (serendipity_db_bool($this->get_config('true_identities')) && !serendipity_userLoggedIn()) {
$user = serendipity_db_escape_string(trim($addData['name'])); if (serendipity_db_bool($this->get_config('true_identities')) && !serendipity_userLoggedIn()) {
$authors = serendipity_db_query("SELECT authorid FROM {$serendipity['dbPrefix']}authors WHERE realname = '" . $user . "'"); $user = serendipity_db_escape_string(trim($addData['name']));
if (is_array($authors) && isset($authors[0]['authorid'])) { $authors = serendipity_db_query("SELECT authorid FROM {$serendipity['dbPrefix']}authors WHERE realname = '" . $user . "'");
$eventData = array('allow_comments' => false); if (is_array($authors) && isset($authors[0]['authorid'])) {
$serendipity['messagestack']['comments'][] = sprintf( $eventData = array('allow_comments' => false);
PLUGIN_ADDUSER_REGISTERED_CHECK_REASON, $serendipity['messagestack']['comments'][] = sprintf(
PLUGIN_ADDUSER_REGISTERED_CHECK_REASON,
$login_url,
'onclick="javascript:loginbox = window.open(this.href, \'loginbox\', \'width=300,height=300,locationbar=no,menubar=no,personalbar=no,statusbar=yes,status=yes,toolbar=no\'); return false;"' $login_url,
); 'onclick="javascript:loginbox = window.open(this.href, \'loginbox\', \'width=300,height=300,locationbar=no,menubar=no,personalbar=no,statusbar=yes,status=yes,toolbar=no\'); return false;"'
} );
} }
}
break;
break;
case 'external_plugin':
if ($eventData != 'loginbox') { case 'external_plugin':
return true; if ($eventData != 'loginbox') {
} return true;
}
$out = array();
serendipity_plugin_api::hook_event('backend_login_page', $out); $out = array();
serendipity_smarty_init(); serendipity_plugin_api::hook_event('backend_login_page', $out);
$serendipity['smarty']->assign(array( serendipity_smarty_init();
'loginform_add' => $out, $serendipity['smarty']->assign(array(
'loginform_url' => $login_url, 'loginform_add' => $out,
'loginform_user' => $_SESSION['serendipityUser'], 'loginform_url' => $login_url,
'loginform_mail' => $_SESSION['serendipityEmail'], 'loginform_user' => $_SESSION['serendipityUser'],
'close_window' => defined('LOGIN_ACTION'), 'loginform_mail' => $_SESSION['serendipityEmail'],
'is_logged_in' => serendipity_userLoggedIn(), 'close_window' => defined('LOGIN_ACTION'),
'is_error' => defined('LOGIN_ERROR') 'is_logged_in' => serendipity_userLoggedIn(),
)); 'is_error' => defined('LOGIN_ERROR')
$filename = 'loginbox.tpl'; ));
$tfile = serendipity_getTemplateFile($filename, 'serendipityPath'); $filename = 'loginbox.tpl';
if (!$tfile || $tfile == $filename) { $tfile = serendipity_getTemplateFile($filename, 'serendipityPath');
$tfile = dirname(__FILE__) . '/' . $filename; if (!$tfile || $tfile == $filename) {
} $tfile = dirname(__FILE__) . '/' . $filename;
$inclusion = $serendipity['smarty']->security_settings[INCLUDE_ANY]; }
$serendipity['smarty']->security_settings[INCLUDE_ANY] = true; $inclusion = $serendipity['smarty']->security_settings[INCLUDE_ANY];
$serendipity['smarty']->display($tfile); $serendipity['smarty']->security_settings[INCLUDE_ANY] = true;
$serendipity['smarty']->display($tfile);
break;
break;
case 'frontend_display':
if (serendipity_db_bool($this->get_config('registered_only')) && !serendipity_userLoggedIn()) { case 'frontend_display':
$serendipity['messagestack']['comments'][] = sprintf( if (serendipity_db_bool($this->get_config('registered_only')) && !serendipity_userLoggedIn()) {
PLUGIN_ADDUSER_REGISTERED_ONLY_REASON, $serendipity['messagestack']['comments'][] = sprintf(
$serendipity['baseURL'] . $serendipity['indexFile'] . '?serendipity[subpage]=adduser', PLUGIN_ADDUSER_REGISTERED_ONLY_REASON,
$serendipity['baseURL'] . 'serendipity_admin.php'); $serendipity['baseURL'] . $serendipity['indexFile'] . '?serendipity[subpage]=adduser',
$eventData['allow_comments'] = false; $serendipity['baseURL'] . 'serendipity_admin.php');
} $eventData['allow_comments'] = false;
break; }
break;
case 'frontend_configure':
if (isset($serendipity['POST']['action']) && isset($serendipity['POST']['user']) && isset($serendipity['POST']['pass'])) { case 'frontend_configure':
serendipity_login(); if (isset($serendipity['POST']['action']) && isset($serendipity['POST']['user']) && isset($serendipity['POST']['pass'])) {
if (serendipity_userLoggedIn()) { serendipity_login();
define('LOGIN_ACTION', 'login'); if (serendipity_userLoggedIn()) {
header('X-s9y-auth: Login'); define('LOGIN_ACTION', 'login');
} else { header('X-s9y-auth: Login');
define('LOGIN_ERROR', true); } else {
} define('LOGIN_ERROR', true);
} elseif (isset($serendipity['POST']['action']) && isset($serendipity['POST']['logout'])) { }
serendipity_logout(); } elseif (isset($serendipity['POST']['action']) && isset($serendipity['POST']['logout'])) {
if (!serendipity_userLoggedIn()) { serendipity_logout();
header('X-s9y-auth: Logout'); if (!serendipity_userLoggedIn()) {
define('LOGIN_ACTION', 'logout'); header('X-s9y-auth: Logout');
} define('LOGIN_ACTION', 'logout');
} }
}
if ((serendipity_db_bool($this->get_config('registered_only')) || serendipity_db_bool($this->get_config('true_identities'))) && $_SESSION['serendipityAuthedUser']) {
if (defined('IN_serendipity_admin') && $serendipity['GET']['adminAction'] == 'doEdit') { if ((serendipity_db_bool($this->get_config('registered_only')) || serendipity_db_bool($this->get_config('true_identities'))) && $_SESSION['serendipityAuthedUser']) {
// void if (defined('IN_serendipity_admin') && $serendipity['GET']['adminAction'] == 'doEdit') {
} else { // void
$serendipity['COOKIE']['name'] = (isset($_SESSION['serendipityRealname']) ? $_SESSION['serendipityRealname'] : $_SESSION['serendipityUser']); } else {
$serendipity['COOKIE']['email'] = $_SESSION['serendipityEmail']; $serendipity['COOKIE']['name'] = (isset($_SESSION['serendipityRealname']) ? $_SESSION['serendipityRealname'] : $_SESSION['serendipityUser']);
if ($serendipity['POST']['comment']) { $serendipity['COOKIE']['email'] = $_SESSION['serendipityEmail'];
$serendipity['POST']['name'] = $serendipity['COOKIE']['name']; if ($serendipity['POST']['comment']) {
$serendipity['POST']['email'] = $serendipity['COOKIE']['email']; $serendipity['POST']['name'] = $serendipity['COOKIE']['name'];
} $serendipity['POST']['email'] = $serendipity['COOKIE']['email'];
} }
} }
}
return true;
break; return true;
break;
case 'entry_display':
if ($serendipity['GET']['subpage'] == 'adduser' || $serendipity['POST']['subpage'] == 'adduser' || !empty($serendipity['GET']['adduser_activation']) || !empty($this->clean_page)) { case 'entry_display':
if (is_array($eventData)) { if ($serendipity['GET']['subpage'] == 'adduser' || $serendipity['POST']['subpage'] == 'adduser' || !empty($serendipity['GET']['adduser_activation']) || !empty($this->clean_page)) {
$eventData['clean_page'] = true; if (is_array($eventData)) {
} $eventData['clean_page'] = true;
} }
break; }
break;
case 'entries_header':
if ($serendipity['GET']['subpage'] == 'adduser' || $serendipity['POST']['subpage'] == 'adduser' || !empty($serendipity['GET']['adduser_activation'])) { case 'entries_header':
$this->clean_page = true; if ($serendipity['GET']['subpage'] == 'adduser' || $serendipity['POST']['subpage'] == 'adduser' || !empty($serendipity['GET']['adduser_activation'])) {
$url = $serendipity['baseURL'] . $serendipity['indexFile']; $this->clean_page = true;
$hidden['subpage'] = 'adduser'; $url = $serendipity['baseURL'] . $serendipity['indexFile'];
$hidden['subpage'] = 'adduser';
$username = substr($serendipity['POST']['adduser_user'], 0, 40);
$password = substr($serendipity['POST']['adduser_pass'], 0, 32); $username = substr($serendipity['POST']['adduser_user'], 0, 40);
$email = $serendipity['POST']['adduser_email']; $password = substr($serendipity['POST']['adduser_pass'], 0, 32);
$email = $serendipity['POST']['adduser_email'];
echo '<div id="adduser_form" style="padding-left: 4px; padding-right: 10px"><a id="adduser"></a>';
echo '<div id="adduser_form" style="padding-left: 4px; padding-right: 10px"><a id="adduser"></a>';
// Get the config from the sidebar plugin
$pair_config = array( // Get the config from the sidebar plugin
'userlevel' => USERLEVEL_EDITOR, $pair_config = array(
'no_create' => false, 'userlevel' => USERLEVEL_EDITOR,
'right_publish' => false, 'no_create' => false,
'instructions' => $this->get_config('instructions', ''), 'right_publish' => false,
'usergroups' => array(), 'instructions' => $this->get_config('instructions', ''),
'straight_insert' => false, 'usergroups' => array(),
'approve' => false, 'straight_insert' => false,
'use_captcha' => false 'approve' => false,
); 'use_captcha' => false
$config = serendipity_db_query("SELECT name, value FROM {$serendipity['dbPrefix']}config WHERE name LIKE 'serendipity_plugin_adduser:%'"); );
$config = serendipity_db_query("SELECT name, value FROM {$serendipity['dbPrefix']}config WHERE name LIKE 'serendipity_plugin_adduser:%'");
if (is_array($config)) {
foreach($config AS $conf) { if (is_array($config)) {
$names = explode('/', $conf['name']); foreach($config AS $conf) {
if ($names[1] == 'instructions' && !empty($pair_config['instructions'])) { $names = explode('/', $conf['name']);
continue; if ($names[1] == 'instructions' && !empty($pair_config['instructions'])) {
} continue;
}
if ($names[1] == 'usergroups') {
$ug = (array)explode(',', $conf['value']); if ($names[1] == 'usergroups') {
$ug = (array)explode(',', $conf['value']);
foreach($ug AS $cid) {
if ($cid === false || empty($cid)) { foreach($ug AS $cid) {
continue; if ($cid === false || empty($cid)) {
} continue;
$pair_config[$names[1]][$cid] = $cid; }
} $pair_config[$names[1]][$cid] = $cid;
} else { }
$pair_config[$names[1]] = serendipity_get_bool($conf['value']); } else {
} $pair_config[$names[1]] = serendipity_get_bool($conf['value']);
} }
} }
}
if (!serendipity_common_adduser::adduser($username, $password, $email, $pair_config['userlevel'], $pair_config['usergroups'], $pair_config['no_create'], $pair_config['right_publish'], $pair_config['straight_insert'], $pair_config['approve'], $pair_config['use_captcha'])) {
serendipity_common_adduser::loginform($url, $hidden, $pair_config['instructions'], $username, $password, $email, $pair_config['use_captcha']); if (!serendipity_common_adduser::adduser($username, $password, $email, $pair_config['userlevel'], $pair_config['usergroups'], $pair_config['no_create'], $pair_config['right_publish'], $pair_config['straight_insert'], $pair_config['approve'], $pair_config['use_captcha'])) {
} serendipity_common_adduser::loginform($url, $hidden, $pair_config['instructions'], $username, $password, $email, $pair_config['use_captcha']);
}
echo '</div>';
} echo '</div>';
return true; }
break; return true;
break;
default:
return false; default:
} return false;
}
} else {
return false; } else {
} return false;
} }
} }
}
/* vim: set sts=4 ts=4 expandtab : */
/* vim: set sts=4 ts=4 expandtab : */