mirror of
https://github.com/kennethreitz-archive/wordpress-skeleton.git
synced 2026-06-17 14:10:58 +00:00
678 lines
28 KiB
PHP
Executable File
678 lines
28 KiB
PHP
Executable File
<?php
|
|
class RoleManager {
|
|
var $file_basename; /* under wp-content/plugins */
|
|
var $manage_roles_uri;
|
|
|
|
/**
|
|
* the constructor
|
|
* R23
|
|
* @param str $path_file
|
|
* @return RoleManager
|
|
*/
|
|
function RoleManager($path_file='') {
|
|
global $wp_db_version, $iwg_rolemanagement;
|
|
$this->file_basename = basename(__FILE__);
|
|
$this->manage_roles_uri = get_settings('siteurl') . '/wp-admin/'.$path_file.'?page=' . $this->file_basename;
|
|
}
|
|
|
|
/**
|
|
* handle cap-changes on a single role
|
|
* R22
|
|
*/
|
|
function handle_role_changes() {
|
|
global $wp_roles, $current_user, $iwg_rolemanagement;
|
|
// Handle cap-changes on a single role
|
|
if (empty($_POST['role'])) {
|
|
$iwg_rolemanagement->error_number = 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
$role = $iwg_rolemanagement->check_input($_POST['role'], null, false, false, true);
|
|
if ( !$role ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
if (empty($_POST['cap'])) {
|
|
$iwg_rolemanagement->error_number = 2000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
$cap = $iwg_rolemanagement->check_input($_POST['cap'], 'int_cap', true);
|
|
if ( !$cap ) {
|
|
$iwg_rolemanagement->error_number += 2000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
if ( ! $iwg_rolemanagement->capmanager->cap_exists($cap) ) {
|
|
$iwg_rolemanagement->error_number = 2010;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_edit_cap_on_role_'.$role.'_'.$cap);
|
|
|
|
/*
|
|
* need this check here for users with javascript switched off,
|
|
* if javascript is on the check run before submit and no data aer submitted
|
|
*/
|
|
if( ($cap == $iwg_rolemanagement->neededcap && in_array($role, $current_user->roles)) ||
|
|
($cap == 'edit_users' && in_array($role, $current_user->roles)) ) {
|
|
$iwg_rolemanagement->error_number = 9001;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
|
|
if ($_POST['grant'] == 1) {
|
|
$wp_roles->add_cap($role, $cap, true);
|
|
} else {
|
|
$wp_roles->remove_cap($role, $cap);
|
|
}
|
|
|
|
//Redirect them away
|
|
if (isset($_POST['ajax'])) {
|
|
$changed = addslashes($_POST['grant'] ? __('Capability granted', 'role-manager') : __('Capability denied', 'role-manager'));
|
|
die('toggleCap("btn_' . $role . '__' . $cap . '");
|
|
setMessage("' . $changed . '");
|
|
');
|
|
} else {
|
|
$changed = ($_POST['grant'] ? 'granted' : 'denied') . '=' . $role;
|
|
header('Location: ' . $this->manage_roles_uri . '&' . $changed);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* handle the creation of a new role
|
|
* R22
|
|
*/
|
|
function handle_new_role_creation() {
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_create_new_role');
|
|
|
|
// experimental for wp-mu
|
|
// s. http://www.im-web-gefunden.de/wordpress-plugins/role-manager/#comment-6722
|
|
if ( ! isset($wp_roles) ) {
|
|
$wp_roles = new WP_Roles();
|
|
}
|
|
// end of experimental for wp-mu
|
|
$this->_add_new_role();
|
|
header('Location: ' . $this->manage_roles_uri . '&new-role=true');
|
|
}
|
|
|
|
/**
|
|
* show the form to rename a role
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function rename_role_form($role) {
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_rename_role_form_'.$role);
|
|
|
|
// no: underscore, space
|
|
// yes: minus
|
|
$role_name = $iwg_rolemanagement->check_input($role, null, false, false, true);
|
|
if ( !$role_name ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
|
|
?>
|
|
<div class="wrap">
|
|
<h2><?php _e('Rename Role', 'role-manager'); ?> '<?php echo $wp_roles->role_names[$role_name]; ?>'</h2>
|
|
<form method="post" class="role-manager" action="<?php echo $this->manage_roles_uri; ?>">
|
|
<input type="hidden" name="action" value="rename" />
|
|
<input type="hidden" name="role" value="<?php echo $role; ?>" />
|
|
<label for="role-name"><?php _e('New Name:', 'role-manager'); ?>
|
|
<input type="text" name="role-name" id="role-name" value="<?php echo $wp_roles->role_names[$role_name]; ?>" />
|
|
</label>
|
|
<?php $iwg_rolemanagement->nonce_field('iwg_rolemanager_rename_role_'.$role_name); ?>
|
|
<input type="submit" value="<?php _e('Rename Role', 'role-manager'); ?>" />
|
|
</form>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* handle rename of a given role
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function rename_role($role) {
|
|
global $wp_roles, $wpdb, $iwg_rolemanagement;
|
|
|
|
if ($_POST['role-name']) {
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_rename_role_'.$role);
|
|
$old_role_name = $iwg_rolemanagement->check_input($role, null, false, false, true);
|
|
$new_role_name = $iwg_rolemanagement->check_input($_POST['role-name'], null, false, true);
|
|
if ( !$old_role_name || !$new_role_name ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
|
|
$roletitle = sanitize_title($new_role_name);
|
|
|
|
if ( $roletitle != $old_role_name ) {
|
|
if ( $wp_roles->is_role($roletitle) ) {
|
|
$iwg_rolemanagement->error_number = 1010;
|
|
$iwg_rolemanagement->handle_error($roletitle);
|
|
}
|
|
// check if a capability with this name exists
|
|
if ( $iwg_rolemanagement->already_exists($roletitle, 'role') ) {
|
|
$iwg_rolemanagement->handle_error($roletitle);
|
|
}
|
|
$oldrole = $wp_roles->get_role($old_role_name);
|
|
$wp_roles->add_role($roletitle, stripslashes($new_role_name), $oldrole->capabilities);
|
|
//$this->debug('before', $wp_roles);
|
|
|
|
$uids_with_role = $iwg_rolemanagement->get_all_userids_with_role($old_role_name);
|
|
if ( count($uids_with_role) > 0 ) {
|
|
foreach ($uids_with_role as $id) {
|
|
$user = new WP_User($id);
|
|
$user->roles = $iwg_rolemanagement->fill_array_keys_with_true( $user->roles );
|
|
$user->add_role($roletitle);
|
|
// Bug in capabilities.php, WP_User::get_role_caps(), Start at Line 176
|
|
// this->roles has [0]=admin and should be [admin]=true
|
|
// wrong form comes from array_keys($this->caps) at line 176
|
|
$user->roles = $iwg_rolemanagement->fill_array_keys_with_true( $user->roles );
|
|
$user->remove_role($old_role_name);
|
|
}
|
|
}
|
|
$wp_roles->remove_role($old_role_name);
|
|
header('Location: ' . $this->manage_roles_uri . '&role-renamed=true');
|
|
}
|
|
header('Location: ' . $this->manage_roles_uri);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* show the form to copy a role
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function copy_role_form($role) {
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_copy_role_form_'.$role);
|
|
|
|
// no: underscore, space
|
|
// yes: minus
|
|
$role_name = $iwg_rolemanagement->check_input($role, null, false, false, true);
|
|
if ( !$role_name ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
$orig_role = $wp_roles->get_role($role);
|
|
|
|
?>
|
|
<div class="wrap">
|
|
<h2><?php _e('Copy Role', 'role-manager'); ?> '<?php echo $wp_roles->role_names[$role_name]; ?>'</h2>
|
|
<form method="post" class="role-manager" action="<?php echo $this->manage_roles_uri; ?>">
|
|
<input type="hidden" name="action" value="copy" />
|
|
<input type="hidden" name="role" value="<?php echo $role; ?>" />
|
|
<label for="role-name"><?php _e('New Name:', 'role-manager'); ?>
|
|
<input type="text" name="role-name" id="role-name" value="<?php echo __('Copy of', 'role-manager')." ".$wp_roles->role_names[$role_name]; ?>" />
|
|
</label>
|
|
<label><?php _e('Capabilities to be included:', 'role-manager'); ?></label>
|
|
<fieldset>
|
|
<?php foreach ($iwg_rolemanagement->get_cap_list(true) as $cap) {
|
|
$checked = $orig_role->has_cap($cap) ? 'checked="checked"' : '';?>
|
|
<label for="cap-<?php echo $cap; ?>" class="cap-label">
|
|
<input type="checkbox" name="caps[<?php echo $cap; ?>]" id="cap-<?php echo $cap."\" ".$checked; ?>" />
|
|
<?php echo $iwg_rolemanagement->capmanager->get_cap_name($cap); ?></label>
|
|
<?php } ?>
|
|
</fieldest>
|
|
|
|
<?php $iwg_rolemanagement->nonce_field('iwg_rolemanager_copy_role_'.$role_name); ?>
|
|
<input type="submit" value="<?php _e('Copy Role', 'role-manager'); ?>" />
|
|
</form>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* handle copy of a given role
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function copy_role($role) {
|
|
global $wp_roles, $wpdb, $iwg_rolemanagement;
|
|
|
|
if ($_POST['role-name']) {
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_copy_role_'.$role);
|
|
$this->_add_new_role();
|
|
header('Location: ' . $this->manage_roles_uri . '&role-copied=true');
|
|
//header('Location: ' . $this->manage_roles_uri);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* show the form to delete a given role
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function delete_role_form($role) {
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanger_delete_role_form_'.$role);
|
|
|
|
// no: underscore, space
|
|
// yes: minus
|
|
$role_name = $iwg_rolemanagement->check_input($role, null, false, false, true);
|
|
if ( !$role_name ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
?>
|
|
<div class="wrap">
|
|
<h2><?php _e('Delete Role', 'role-manager'); ?> '<?php echo $wp_roles->role_names[$role_name]; ?>'</h2>
|
|
<p><?php echo __('All users with this role will have it removed, and they will lose all capabilities from this role (unless other roles provide it). If a user has only this role, they will be assigned the default role, ', 'role-manager') . get_option('default_role'); ?></p>
|
|
<form method="post" class="role-manager" action="<?php echo $this->manage_roles_uri; ?>">
|
|
<input type="hidden" name="action" value="delete" />
|
|
<input type="hidden" name="role" value="<?php echo $role_name; ?>" />
|
|
<?php $iwg_rolemanagement->nonce_field('iwg_rolemanager_delete_role_'.$role_name); ?>
|
|
<input type="submit" name="confirm" value="<?php _e('Confirm Delete Role', 'role-manager'); ?>" />
|
|
</form>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* delete a given role from wordpress
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function delete_role($role) {
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
if ($_POST['confirm']) {
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_delete_role_'.$role);
|
|
|
|
// no: underscore, space
|
|
// yes: minus
|
|
$role_name = $iwg_rolemanagement->check_input($role, null, false, false, true);
|
|
if ( !$role_name ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
|
|
$defaultrole = get_option('default_role');
|
|
if ($role_name == $defaultrole) {
|
|
//LAZY CODE ALERT! we should give the option of changing the default role
|
|
$iwg_rolemanagement->error_number = 1020;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
|
|
//remove the role from all the users
|
|
$uids_with_role = $iwg_rolemanagement->get_all_userids_with_role($role_name);
|
|
if ( count($uids_with_role) > 0 ) {
|
|
foreach ($uids_with_role as $id) {
|
|
$user = new WP_User($id);
|
|
$user->roles = $iwg_rolemanagement->fill_array_keys_with_true( $user->roles );
|
|
//if this role removal would end them up with no roles, assign the default role instead of removing
|
|
if (count($user->roles) <= 1) {
|
|
$user->add_role($defaultrole);
|
|
$user->roles = $iwg_rolemanagement->fill_array_keys_with_true( $user->roles );
|
|
}
|
|
$user->remove_role($role_name);
|
|
}
|
|
}
|
|
$wp_roles->remove_role($role_name);
|
|
header('Location: ' . $this->manage_roles_uri . '&role-deleted=true');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* change a given role to wordpress default role
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function make_default($role) {
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
|
|
if( $iwg_rolemanagement->user_has_permissions() ) {
|
|
$role_name = $iwg_rolemanagement->check_input($role, null, false, false, true);
|
|
if ( !$role_name ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
/* don't work for ajax calls
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_chg_def_role_'.$role_name);
|
|
*/
|
|
if ($wp_roles->is_role($role_name)) {
|
|
update_option('default_role', $role_name);
|
|
} else {
|
|
$iwg_rolemanagement->error_number += 1030;
|
|
$iwg_rolemanagement->handle_error($role_name);
|
|
}
|
|
if (isset($_POST['ajax'])) {
|
|
$changed = addslashes(__('Default role changed.', 'role-manager'));
|
|
die('showdefaultrole("' . $role_name .'");
|
|
setMessage("' . $changed . '");
|
|
');
|
|
}
|
|
header('Location: ' . $this->manage_roles_uri . '&made-default=true');
|
|
} else {
|
|
if (isset($_POST['ajax'])) {
|
|
$changed = addslashes(__('Error: Default role not changed.', 'role-manager'));
|
|
die('setMessage("' . $changed . '");
|
|
');
|
|
}
|
|
header('Location: ' . $this->manage_roles_uri);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* set the userlevel for a given role
|
|
* R22
|
|
* @param str $role
|
|
*/
|
|
function set_user_level($role) {
|
|
global $wpdb, $wp_roles, $iwg_rolemanagement;
|
|
|
|
$level = isset($_POST['level']) ? $_POST['level'] : $_GET['level'];
|
|
$level = $iwg_rolemanagement->check_input($level);
|
|
if ( $level !== false ) {
|
|
$level = (int) $level;
|
|
if ( ($level < 0) || ($level > 10) ) {
|
|
$iwg_rolemanagement->error_number = 1900;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
} else {
|
|
$iwg_rolemanagement->error_number = 1900;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
// no: underscore, space
|
|
// yes: minus
|
|
$role = $iwg_rolemanagement->check_input($role, null, false, false, true);
|
|
if ( !$role ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
|
|
/* don't work for ajax calls
|
|
$iwg_rolemanagement->check_admin_ref('iwg_rolemanager_change_level_'.$role);
|
|
*/
|
|
|
|
$role_o = $wp_roles->get_role($role);
|
|
|
|
$role_user_level = array_reduce(array_keys($role_o->capabilities), array('WP_User', 'level_reduction'), 0);
|
|
$wp_roles->remove_cap($role, "level_{$role_user_level}");
|
|
$wp_roles->add_cap($role, "level_{$level}");
|
|
|
|
$uids_with_role = $iwg_rolemanagement->get_all_userids_with_role($role);
|
|
if ( count($uids_with_role) > 0 ) {
|
|
foreach ($uids_with_role as $id) {
|
|
/* normally we shoukd use the next three steps here - but it doesn't work
|
|
because $wp_roles->add_cap isn't flushed to the db here
|
|
$user = new WP_User($id);
|
|
$user->roles = $iwg_rolemanagement->fill_array_keys_with_true( $user->roles );
|
|
$user->update_user_level_from_caps();
|
|
on this reason used this one step: */
|
|
update_usermeta($id, $wpdb->prefix.'user_level', $level);
|
|
}
|
|
}
|
|
|
|
if (isset($_POST['ajax'])) {
|
|
$changed = addslashes(__('Set user level of role.', 'role-manager'));
|
|
die('fadeuserlevel("' . $role .'");
|
|
setMessage("' . $changed . '");
|
|
');
|
|
}
|
|
header('Location: ' . $this->manage_roles_uri . '&set-userlevel=true');
|
|
}
|
|
|
|
/**
|
|
* show the roles page or switch to call the rename or delete form
|
|
* R22
|
|
*/
|
|
function manage_roles_page() {
|
|
global $wp_roles, $current_user, $iwg_rolemanagement;
|
|
|
|
if ( ! $iwg_rolemanagement->user_has_permissions() ) {
|
|
$iwg_rolemanagement->error_number = 9000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
|
|
$action = $_POST['action'] ? $_POST['action'] : $_GET['action'];
|
|
$role = $_POST['role'] ? $_POST['role'] : $_GET['role'];
|
|
|
|
switch ($action) {
|
|
case 'rename': $this->rename_role_form($role); break;
|
|
case 'copy': $this->copy_role_form($role); break;
|
|
case 'delete': $this->delete_role_form($role); break;
|
|
default:
|
|
// Display a message if we've made changes
|
|
if ($_GET['granted']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('Capability granted', 'role-manager') . '</p></div>';
|
|
} elseif ($_GET['denied']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('Capability denied', 'role-manager') . '</p></div>';
|
|
} elseif ($_GET['new-role']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('New role created', 'role-manager') . '</p></div>';
|
|
} elseif ($_GET['role-renamed']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('Role renamed', 'role-manager') . '</p></div>';
|
|
} elseif ($_GET['role-copied']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('Role copied', 'role-manager') . '</p></div>';
|
|
} elseif ($_GET['role-deleted']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('Role deleted', 'role-manager') . '</p></div>';
|
|
} elseif ($_GET['made-default']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('Default role changed', 'role-manager') . '</p></div>';
|
|
} elseif ($_GET['set-userlevel']) {
|
|
echo '<div class="updated fade" id="message"><p>' . __('Set user level of role', 'role-manager') . '</p></div>';
|
|
}
|
|
|
|
// Output an admin page
|
|
echo '<div class="wrap" id="main_page"><h2>' . __('Manage Roles', 'role-manager') . '</h2>';
|
|
echo '<p>' . __('This page is for editing what capabilities are associated with each role. To change the capabilities of a specific user, click on Authors & Users, then click Edit next to the user you want to change. You can <a href="#new-role">add new roles</a> as well.', 'role-manager') . '</p>';
|
|
|
|
$capnames = $iwg_rolemanagement->get_cap_list();
|
|
|
|
$defaultrole = get_option('default_role');
|
|
foreach($wp_roles->role_names as $roledex => $rolename) {
|
|
if ($roledex == $defaultrole) {
|
|
$lovelylittlestar = '<img src="' . $iwg_rolemanagement->image_dir . 'star.png" alt="Default Role" class="defrole" id="defrole_' . $roledex . '" onclick="return !setdefaultrole(\'' . $roledex . '\');" />';
|
|
} else {
|
|
$lovelylittlestar = '<img src="' . $iwg_rolemanagement->image_dir . 'star_disabled.png" class="nondefrole" id="defrole_' . $roledex . '" alt="Click to make this the default role" onclick="return !setdefaultrole(\'' . $roledex . '\');" />';
|
|
}
|
|
$lovelylittlestar_url = $this->manage_roles_uri . '&action=makedefault&role=' . $roledex;
|
|
$lovelylittlestar_url = $iwg_rolemanagement->nonce_url($lovelylittlestar_url,'iwg_rolemanager_chg_def_role_'.$roledex);
|
|
$lovelylittlestar = '<a href="' . $lovelylittlestar_url . '" class="roledefaulter">' . $lovelylittlestar . '</a>';
|
|
$rename_url = $this->manage_roles_uri . "&action=rename&role=".$roledex;
|
|
$rename_url = $iwg_rolemanagement->nonce_url($rename_url,'iwg_rolemanager_rename_role_form_'.$roledex);
|
|
?><h3 class="roles_name"><?php echo $lovelylittlestar . ' ' . $rolename . ' '; ?>
|
|
(<a href='<?php echo $rename_url;?>'><?php _e('rename', 'role-manager');?></a><?php
|
|
$copy_url = $this->manage_roles_uri . "&action=copy&role=".$roledex;
|
|
$copy_url = $iwg_rolemanagement->nonce_url($copy_url,'iwg_rolemanager_copy_role_form_'.$roledex);
|
|
?>, <a href='<?php echo $copy_url;?>'><?php _e('copy', 'role-manager');?></a><?php
|
|
|
|
$role = $wp_roles->get_role($roledex);
|
|
if(!($role->has_cap($iwg_rolemanagement->neededcap) && in_array($roledex, $current_user->roles))) {
|
|
$delete_url = $this->manage_roles_uri . "&action=delete&role=".$roledex;
|
|
$delete_url = $iwg_rolemanagement->nonce_url($delete_url,'iwg_rolemanger_delete_role_form_'.$roledex);
|
|
echo ", <a href='" . $delete_url . "'>" . __('delete', 'role-manager') . "</a>";
|
|
}
|
|
?>)</h3><?php
|
|
|
|
foreach($capnames as $cap) {
|
|
$capname = $iwg_rolemanagement->capmanager->get_cap_name($cap);
|
|
?><form onsubmit="submitme(this);return false;" method="post" class="cap_form" id="<?php echo $roledex . '__' . $cap; ?>" action="<?php echo $this->manage_roles_uri;?> ">
|
|
<input type="hidden" name="role" value="<?php echo $roledex;?>" />
|
|
<input type="hidden" name="cap" value="<?php echo $cap;?>" />
|
|
<input type="hidden" name="grant" value="<?php echo ($role->has_cap($cap)?'0':'1');?>" />
|
|
<?php $iwg_rolemanagement->nonce_field('iwg_rolemanager_edit_cap_on_role_'.$roledex.'_'.$cap);
|
|
if ($role->has_cap($cap)) {
|
|
if( ($cap == $iwg_rolemanagement->neededcap && in_array($roledex, $current_user->roles)) ||
|
|
($cap == 'edit_users' && in_array($roledex, $current_user->roles)) ) {
|
|
echo '<input type="image" id="btn_' . $roledex . '__' . $cap . '" src="' . $iwg_rolemanagement->image_dir . 'accept2.png" name="grant" value="0" alt="' . __('Granted', 'role-manager') . '" onclick="return badidea();"/>';
|
|
} else {
|
|
echo '<input type="image" id="btn_' . $roledex . '__' . $cap . '" src="' . $iwg_rolemanagement->image_dir . 'accept.png" name="grant" value="0" alt="' . __('Granted', 'role-manager') . '" />';
|
|
}
|
|
} else {
|
|
echo '<input type="image" id="btn_' . $roledex . '__' . $cap . '" src="' . $iwg_rolemanagement->image_dir . 'cancel.png" name="grant" value="1" alt="' . __('Denied', 'role-manager') . '" />';
|
|
}
|
|
echo ' ' . $capname;
|
|
?></form><?php
|
|
}
|
|
$role_user_level = array_reduce(array_keys($role->capabilities), array('WP_User', 'level_reduction'), 0);
|
|
?>
|
|
<form method="post" class="userlevel_form" id="<?php echo $roledex;?>___user_level" action="<?php echo $this->manage_roles_uri;?>" onsubmit="return !setlevel(document.getElementById('<?php echo $roledex;?>___ulvalue).value,'<?php echo $roledex; ?>');">
|
|
<input type="hidden" name="role" value="<?php echo $roledex; ?>" />
|
|
<input type="hidden" name="action" value="setuserlevel" />
|
|
<?php $iwg_rolemanagement->nonce_field('iwg_rolemanager_change_level_'.$roledex); ?>
|
|
<input type="image" src="<?php echo $iwg_rolemanagement->image_dir;?>refresh.png" alt="'<?php _e('Update', 'role-manager');?>" />
|
|
<label style="font-style:italic;">
|
|
<?php $sel = '<select name="level" id="' . $roledex . '___ulvalue" onchange="setlevel(this.value,\'' . $roledex . '\');">';
|
|
for($level=0; $level<=10; $level++) {
|
|
$sel .= '<option value="' . $level . '"';
|
|
if($role_user_level == $level) {
|
|
$sel .= ' selected="selected"';
|
|
}
|
|
$sel .= '>' . $level . '</option>';
|
|
}
|
|
$sel .= '</select>';
|
|
echo sprintf(__(' User Level: %s', 'role-manager'), $sel);
|
|
?></label></form><?php
|
|
}
|
|
|
|
//Echo the new role form
|
|
?>
|
|
<h2 id="new-role"><?php _e('Create a new Role', 'role-manager'); ?></h2>
|
|
<form method="post" class="role-manager">
|
|
<label for="role-name"><?php _e('Role Name:', 'role-manager'); ?> <input type="text" name="role-name" id="role-name" /></label>
|
|
<label><?php _e('Capabilities to be included:', 'role-manager'); ?></label>
|
|
<fieldset>
|
|
<?php foreach ($iwg_rolemanagement->get_cap_list(true) as $cap) { ?>
|
|
<label for="cap-<?php echo $cap; ?>" class="cap-label">
|
|
<input type="checkbox" name="caps[<?php echo $cap; ?>]" id="cap-<?php echo $cap; ?>" />
|
|
<?php echo $iwg_rolemanagement->capmanager->get_cap_name($cap); ?></label>
|
|
<?php } ?>
|
|
</fieldest>
|
|
<?php $iwg_rolemanagement->nonce_field('iwg_rolemanager_create_new_role'); ?>
|
|
<input type="submit" name="new-role" value="<?php _e('Create Role', 'role-manager'); ?>" />
|
|
</form>
|
|
<?php
|
|
} //switch ($action)
|
|
}
|
|
|
|
/**
|
|
* dispatcher for the actions rename, delete, makedefault and setuserlevel for a transmitted role
|
|
* R22
|
|
*/
|
|
function process_role_changes() {
|
|
global $iwg_rolemanagement;
|
|
|
|
if ( $iwg_rolemanagement->user_has_permissions() ) {
|
|
$action = $_POST['action'] ? $_POST['action'] : $_GET['action'];
|
|
$role = $_POST['role'] ? $_POST['role'] : $_GET['role'];
|
|
|
|
switch ($action) {
|
|
case 'rename': $this->rename_role($role); break;
|
|
case 'copy': $this->copy_role($role); break;
|
|
case 'delete': $this->delete_role($role); break;
|
|
case 'makedefault': $this->make_default($role); break;
|
|
case 'setuserlevel': $this->set_user_level($role); break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* called from handle_new_role_creation and copy_role
|
|
* it is the same, because in both functions the add a new role to the core
|
|
* Don't call this from outside!
|
|
* R22
|
|
*/
|
|
function _add_new_role() {
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
|
|
if (empty($_POST['role-name'])) {
|
|
$iwg_rolemanagement->error_number = 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
$role_name = $iwg_rolemanagement->check_input($_POST['role-name'], null, false, true);
|
|
if ( !$role_name ) {
|
|
$iwg_rolemanagement->error_number += 1000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
// check if a role with this name exists
|
|
if ( $wp_roles->is_role($role_name) ) {
|
|
$iwg_rolemanagement->error_number = 1040;
|
|
$iwg_rolemanagement->handle_error($role_name);
|
|
}
|
|
// check if a capability with this name exists
|
|
if ( $iwg_rolemanagement->already_exists($role_name, 'role') ) {
|
|
$iwg_rolemanagement->handle_error($role_name);
|
|
}
|
|
$caps = $_POST['caps'];
|
|
//turn all the 'on's to 1s after a check if the cap is valid and exists
|
|
if($caps) {
|
|
foreach ($caps as $k => $cap) {
|
|
$k = $iwg_rolemanagement->check_input($k, 'int_cap', true);
|
|
if ( $k ) {
|
|
if ( $iwg_rolemanagement->capmanager->cap_exists($k) ) {
|
|
$caps[$k] = 1;
|
|
} else {
|
|
$iwg_rolemanagement->error_number = 2010;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
} else {
|
|
$iwg_rolemanagement->error_number += 2000;
|
|
$iwg_rolemanagement->handle_error();
|
|
}
|
|
}
|
|
} else {
|
|
$caps = array();
|
|
}
|
|
|
|
//$role = $wp_roles->add_role(sanitize_title($_POST['role-name']), stripslashes($_POST['role-name']), $caps);
|
|
$role = $wp_roles->add_role(sanitize_title($role_name), stripslashes($role_name), $caps);
|
|
}
|
|
|
|
/**
|
|
* get detached roles
|
|
* R22
|
|
* @param boolean $flip
|
|
* @return array with detached roles
|
|
*/
|
|
function get_detached_roles ( $flip = FALSE ) {
|
|
/* flip == TRUE -> result: [cap]=>true; flip == FALSE -> result: []=>cap */
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
|
|
$detached_roles = array();
|
|
foreach($wp_roles->role_names as $int_role => $role_name) {
|
|
$role = $wp_roles->get_role($int_role);
|
|
$users = $iwg_rolemanagement->get_all_userids_with_role($int_role);
|
|
if ( count($users) == 0 ) {
|
|
$detached_roles[$int_role] = 1;
|
|
}
|
|
}
|
|
if ( ! $flip ) {
|
|
$detached_roles=array_keys($detached_roles);
|
|
}
|
|
return $detached_roles;
|
|
}
|
|
|
|
/**
|
|
* get attaced roles
|
|
* R22
|
|
* @param boolean $flip
|
|
* @return array with attached roles
|
|
*/
|
|
function get_attached_roles ( $flip = FALSE ) {
|
|
/* flip == TRUE -> result: [cap]=>true; flip == FALSE -> result: []=>cap */
|
|
global $wp_roles, $iwg_rolemanagement;
|
|
|
|
$attached_roles = array();
|
|
$attached_roles = array_keys($wp_roles->role_names);
|
|
//$this->debug('ATTACHED ROLES', $attached_roles);
|
|
$detached_roles = $this->get_detached_roles(FALSE);
|
|
//$this->debug('DETACHED ROLES', $detached_roles);
|
|
$attached_roles = array_diff($attached_roles, $detached_roles);
|
|
//$this->debug('ATTACHED ROLES 2', $attached_roles);
|
|
if ( $flip ) {
|
|
$attached_roles=$iwg_rolemanagement->fill_array_keys_with_true($attached_roles);
|
|
}
|
|
return $attached_roles;
|
|
}
|
|
|
|
/* Utility Functions */
|
|
function debug($foo) {
|
|
$args = func_get_args();
|
|
echo "<pre style=\"background-color:#ffeeee;border:1px solid red;\">";
|
|
foreach($args as $arg1) {
|
|
echo htmlentities(print_r($arg1, 1)) . "<br/>";
|
|
}
|
|
echo "</pre>";
|
|
}
|
|
|
|
}
|
|
?>
|