blogid;
if ($this->multisite && $current_blog!=$this->main_blog_id) {
switch_to_blog($this->main_blog_id); // in order to get URE options from the main blog
}
$this->options_id = $options_id;
$this->options = get_option($options_id);
if ($this->multisite && $current_blog!=$this->main_blog_id) {
// return back to the current blog
restore_current_blog();
}
}
// end of init_options()
/**
* saves options array into WordPress database wp_options table
*/
public function flush_options() {
global $wpdb;
if ($this->multisite) {
$current_blog = $wpdb->blogid;
if ($current_blog!==$this->main_blog_id) {
switch_to_blog($this->main_blog_id); // in order to save URE options to the main blog
}
}
update_option($this->options_id, $this->options);
if ($this->multisite && $current_blog!==$this->main_blog_id) {
// return back to the current blog
restore_current_blog();
}
}
// end of flush_options()
public function get_main_blog_id() {
return $this->main_blog_id;
}
/**
* return key capability to have access to User Role Editor Plugin
*
* @return string
*/
public function get_key_capability() {
if (!$this->multisite) {
$key_capability = URE_KEY_CAPABILITY;
} else {
$enable_simple_admin_for_multisite = $this->get_option('enable_simple_admin_for_multisite', 0);
if ( (defined('URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE') && URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE == 1) ||
$enable_simple_admin_for_multisite) {
$key_capability = URE_KEY_CAPABILITY;
} else {
$key_capability = 'manage_network_users';
}
}
return $key_capability;
}
// end of get_key_capability()
/**
* return front-end according to the context - role or user editor
*/
public function editor() {
if (!$this->editor_init0()) {
$this->show_message(esc_html__('Error: wrong request', 'URE'));
return false;
}
$this->process_user_request();
$this->editor_init1();
$this->show_editor();
}
// end of editor()
protected function advertisement() {
if (!class_exists('User_Role_Editor_Pro')) {
$this->advert = new ure_Advertisement();
$this->advert->display();
}
}
// end of advertisement()
protected function output_role_edit_dialogs() {
?>
role_delete_html; ?>
role_default_html; ?>
capability_remove_html; ?>
show_message($this->notification);
?>
advertisement();
?>
advertise_pro_version();
if ($this->ure_object == 'role') {
$this->output_role_edit_dialogs();
}
?>
';
} else {
$link = '';
}
return $link;
}
// end of capability_help_link()
/**
* Go through all users and if user has non-existing role lower him to Subscriber role
*
*/
protected function validate_user_roles() {
global $wp_roles;
$default_role = get_option('default_role');
if (empty($default_role)) {
$default_role = 'subscriber';
}
$users_query = new WP_User_Query(array('fields' => 'ID'));
$users = $users_query->get_results();
foreach ($users as $user_id) {
$user = get_user_by('id', $user_id);
if (is_array($user->roles) && count($user->roles) > 0) {
foreach ($user->roles as $role) {
$user_role = $role;
break;
}
} else {
$user_role = is_array($user->roles) ? '' : $user->roles;
}
if (!empty($user_role) && !isset($wp_roles->roles[$user_role])) { // role doesn't exists
$user->set_role($default_role); // set the lowest level role for this user
$user_role = '';
}
if (empty($user_role)) {
// Cleanup users level capabilities from non-existed roles
$cap_removed = true;
while (count($user->caps) > 0 && $cap_removed) {
foreach ($user->caps as $capability => $value) {
if (!isset($this->full_capabilities[$capability])) {
$user->remove_cap($capability);
$cap_removed = true;
break;
}
$cap_removed = false;
}
} // while ()
}
} // foreach()
}
// end of validate_user_roles()
protected function add_capability_to_full_caps_list($cap_id) {
if (!isset($this->full_capabilities[$cap_id])) {
$cap = array();
$cap['inner'] = $cap_id;
$cap['human'] = esc_html__($this->convert_caps_to_readable($cap_id), 'ure');
if (isset($this->built_in_wp_caps[$cap_id])) {
$cap['wp_core'] = true;
} else {
$cap['wp_core'] = false;
}
$this->full_capabilities[$cap_id] = $cap;
}
}
// end of add_capability_to_full_caps_list()
protected function init_full_capabilities() {
$this->built_in_wp_caps = $this->get_built_in_wp_caps();
$this->full_capabilities = array();
foreach ($this->roles as $role) {
// validate if capabilities is an array
if (isset($role['capabilities']) && is_array($role['capabilities'])) {
foreach ($role['capabilities'] as $key => $value) {
$this->add_capability_to_full_caps_list($key);
}
}
}
// Get Gravity Forms plugin capabilities, if available
if (class_exists('GFCommon')) {
$gf_caps = GFCommon::all_caps();
foreach ($gf_caps as $gf_cap) {
$this->add_capability_to_full_caps_list($gf_cap);
}
}
// provide compatibility with plugins and themes which use 'members_get_capabilities' filter from Members plugin to define their capabilities
$custom_caps = array();
$custom_caps = apply_filters( 'members_get_capabilities', $custom_caps );
foreach ($custom_caps as $cap) {
$this->add_capability_to_full_caps_list($cap);
}
if ($this->ure_object=='user') {
foreach($this->user_to_edit->caps as $key=>$value) {
if (!isset($this->roles[$key])) { // it is the user capability, not role
$this->add_capability_to_full_caps_list($key);
}
}
}
foreach ($this->built_in_wp_caps as $cap=>$val) {
if (!isset($this->full_capabilities[$cap])) {
$this->add_capability_to_full_caps_list($cap);
}
}
unset($this->built_in_wp_caps);
asort($this->full_capabilities);
}
// end of init_full_capabilities()
/**
* return WordPress user roles to its initial state, just like after installation
* @global WP_Roles $wp_roles
*/
protected function wp_roles_reinit() {
global $wp_roles;
$wp_roles->roles = array();
$wp_roles->role_objects = array();
$wp_roles->role_names = array();
$wp_roles->use_db = true;
require_once(ABSPATH . '/wp-admin/includes/schema.php');
populate_roles();
$wp_roles->reinit();
$this->roles = $this->get_user_roles();
}
// end of wp_roles_reinit()
/**
* reset user roles to WordPress default roles
*/
protected function reset_user_roles() {
$this->wp_roles_reinit();
if ($this->is_full_network_synch() || $this->apply_to_all) {
$this->current_role = '';
$this->direct_network_roles_update();
}
//$this->validate_user_roles(); // if user has non-existing role lower him to Subscriber role
$reload_link = wp_get_referer();
$reload_link = remove_query_arg('action', $reload_link);
?>
roles) || !is_array($this->roles) || count($this->roles)==0) { // Nothing to save - something goes wrong - stop ...
return false;
}
return true;
}
// end of last_check_before_update()
// Save Roles to database
protected function save_roles() {
global $wpdb;
if (!$this->last_check_before_update()) {
return false;
}
if (!isset($this->roles[$this->current_role])) {
return false;
}
$this->capabilities_to_save = $this->remove_caps_not_allowed_for_single_admin($this->capabilities_to_save);
$this->roles[$this->current_role]['capabilities'] = $this->capabilities_to_save;
$option_name = $wpdb->prefix . 'user_roles';
update_option($option_name, $this->roles);
return true;
}
// end of save_roles()
/**
* Update roles for all network using direct database access - quicker in several times
*
* @global wpdb $wpdb
* @return boolean
*/
function direct_network_roles_update() {
global $wpdb;
if (!$this->last_check_before_update()) {
return false;
}
if (!empty($this->current_role)) {
if (!isset($this->roles[$this->current_role])) {
$this->roles[$this->current_role]['name'] = $this->current_role_name;
}
$this->roles[$this->current_role]['capabilities'] = $this->capabilities_to_save;
}
$serialized_roles = serialize($this->roles);
foreach ($this->blog_ids as $blog_id) {
$prefix = $wpdb->get_blog_prefix($blog_id);
$options_table_name = $prefix . 'options';
$option_name = $prefix . 'user_roles';
$query = "update $options_table_name
set option_value='$serialized_roles'
where option_name='$option_name'
limit 1";
$wpdb->query($query);
if ($wpdb->last_error) {
$this->log_event($wpdb->last_error, true);
return false;
}
}
return true;
}
// end of direct_network_roles_update()
public function restore_after_blog_switching($blog_id = 0) {
if (!empty($blog_id)) {
switch_to_blog($blog_id);
}
// cleanup blog switching data
$GLOBALS['_wp_switched_stack'] = array();
$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );
}
// end of restore_after_blog_switching(
protected function wp_api_network_roles_update() {
global $wpdb;
$result = true;
$old_blog = $wpdb->blogid;
foreach ($this->blog_ids as $blog_id) {
switch_to_blog($blog_id);
$this->roles = $this->get_user_roles();
if (!isset($this->roles[$this->current_role])) { // add new role to this blog
$this->roles[$this->current_role] = array('name' => $this->current_role_name, 'capabilities' => array('read' => true));
}
if (!$this->save_roles()) {
$result = false;
break;
}
}
$this->restore_after_blog_switching($old_blog);
$this->roles = $this->get_user_roles();
return $result;
}
// end of wp_api_network_roles_update()
/**
* Update role for all network using WordPress API
*
* @return boolean
*/
protected function multisite_update_roles() {
if (defined('URE_DEBUG') && URE_DEBUG) {
$time_shot = microtime();
}
if ($this->is_full_network_synch()) {
$result = $this->direct_network_roles_update();
} else {
$result = $this->wp_api_network_roles_update();
}
if (defined('URE_DEBUG') && URE_DEBUG) {
echo '
';
}
return $result;
}
// end of multisite_update_roles()
/**
* Process user request on update roles
*
* @global wpdb $wpdb
* @return boolean
*/
protected function update_roles() {
global $wpdb;
if ($this->multisite && is_super_admin() && $this->apply_to_all) { // update Role for the all blogs/sites in the network (permitted to superadmin only)
if (!$this->multisite_update_roles()) {
return false;
}
} else {
if (!$this->save_roles()) {
return false;
}
}
return true;
}
// end of update_roles()
/**
* Write message to the log file
*
* @global type $wp_version
* @param string $message
* @param boolean $show_message
*/
protected function log_event($message, $show_message = false) {
global $wp_version;
$file_name = URE_PLUGIN_DIR . 'user-role-editor.log';
$fh = fopen($file_name, 'a');
$cr = "\n";
$s = $cr . date("d-m-Y H:i:s") . $cr .
'WordPress version: ' . $wp_version . ', PHP version: ' . phpversion() . ', MySQL version: ' . mysql_get_server_info() . $cr;
fwrite($fh, $s);
fwrite($fh, $message . $cr);
fclose($fh);
if ($show_message) {
$this->show_message('Error! ' . esc_html__('Error is occur. Please check the log file.', 'ure'));
}
}
// end of log_event()
/**
* returns array without capabilities blocked for single site administrators
* @param array $capabilities
* @return array
*/
protected function remove_caps_not_allowed_for_single_admin($capabilities) {
foreach(array_keys($capabilities) as $cap) {
if ($this->block_cap_for_single_admin($cap)) {
unset($capabilities[$cap]);
}
}
return $capabilities;
}
// end of remove_caps_not_allowed_for_single_admin()
/**
* process new role create request
*
* @global WP_Roles $wp_roles
*
* @return string - message about operation result
*
*/
protected function add_new_role() {
global $wp_roles;
$mess = '';
$this->current_role = '';
if (isset($_POST['user_role_id']) && $_POST['user_role_id']) {
$user_role_id = utf8_decode($_POST['user_role_id']);
// sanitize user input for security
$valid_name = preg_match('/[A-Za-z0-9_\-]*/', $user_role_id, $match);
if (!$valid_name || ($valid_name && ($match[0] != $user_role_id))) { // some non-alphanumeric charactes found!
return esc_html__('Error: Role ID must contain latin characters, digits, hyphens or underscore only!', 'ure');
}
$numeric_name = preg_match('/[0-9]*/', $user_role_id, $match);
if ($numeric_name && ($match[0] == $user_role_id)) { // numeric name discovered
return esc_html__('Error: WordPress does not support numeric Role name (ID). Add latin characters to it.', 'ure');
}
if ($user_role_id) {
$user_role_name = isset($_POST['user_role_name']) ? $_POST['user_role_name'] : false;
if (!empty($user_role_name)) {
$user_role_name = sanitize_text_field($user_role_name);
} else {
$user_role_name = $user_role_id; // as user role name is empty, use user role ID instead
}
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
if (isset($wp_roles->roles[$user_role_id])) {
return sprintf('Error! ' . esc_html__('Role %s exists already', 'ure'), $user_role_id);
}
$user_role_id = strtolower($user_role_id);
$this->current_role = $user_role_id;
$user_role_copy_from = isset($_POST['user_role_copy_from']) ? $_POST['user_role_copy_from'] : false;
if (!empty($user_role_copy_from) && $user_role_copy_from != 'none' && $wp_roles->is_role($user_role_copy_from)) {
$role = $wp_roles->get_role($user_role_copy_from);
$capabilities = $this->remove_caps_not_allowed_for_single_admin($role->capabilities);
} else {
$capabilities = array('read' => true, 'level_0' => true);
}
// add new role to the roles array
$result = add_role($user_role_id, $user_role_name, $capabilities);
if (!isset($result) || empty($result)) {
$mess = 'Error! ' . esc_html__('Error is encountered during new role create operation', 'ure');
} else {
$mess = sprintf(esc_html__('Role %s is created successfully', 'ure'), $user_role_name);
}
}
}
return $mess;
}
// end of new_role_create()
/**
* Deletes user role from the WP database
*/
protected function delete_wp_roles($roles_to_del) {
global $wp_roles;
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
$result = false;
foreach($roles_to_del as $role_id) {
if (!isset($wp_roles->roles[$role_id])) {
$result = false;
break;
}
if ($this->role_contains_caps_not_allowed_for_simple_admin($role_id)) { // do not delete
continue;
}
unset($wp_roles->role_objects[$role_id]);
unset($wp_roles->role_names[$role_id]);
unset($wp_roles->roles[$role_id]);
$result = true;
} // foreach()
if ($result) {
update_option($wp_roles->role_key, $wp_roles->roles);
}
return $result;
}
// end of delete_wp_roles()
protected function delete_all_unused_roles() {
$this->roles = $this->get_user_roles();
$roles_to_del = array_keys($this->get_roles_can_delete());
$result = $this->delete_wp_roles($roles_to_del);
$this->roles = null; // to force roles refresh
return $result;
}
// end of delete_all_unused_roles()
/**
* process user request for user role deletion
* @global WP_Roles $wp_roles
* @return type
*/
protected function delete_role() {
$mess = '';
if (isset($_POST['user_role_id']) && $_POST['user_role_id']) {
$role = $_POST['user_role_id'];
if ($role==-1) { // delete all unused roles
$result = $this->delete_all_unused_roles();
} else {
$result = $this->delete_wp_roles(array($role));
}
if (empty($result)) {
$mess = 'Error! ' . esc_html__('Error encountered during role delete operation', 'ure');
} elseif ($role==-1) {
$mess = sprintf(esc_html__('Unused roles are deleted successfully', 'ure'), $role);
} else {
$mess = sprintf(esc_html__('Role %s is deleted successfully', 'ure'), $role);
}
unset($_POST['user_role']);
}
return $mess;
}
// end of ure_delete_role()
/**
* Change default WordPress role
* @global WP_Roles $wp_roles
* @return string
*/
protected function change_default_role() {
global $wp_roles;
$mess = '';
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
if (!empty($_POST['user_role_id'])) {
$user_role_id = $_POST['user_role_id'];
unset($_POST['user_role_id']);
$errorMessage = 'Error! ' . esc_html__('Error encountered during default role change operation', 'ure');
if (isset($wp_roles->role_objects[$user_role_id]) && $user_role_id !== 'administrator') {
$result = update_option('default_role', $user_role_id);
if (empty($result)) {
$mess = $errorMessage;
} else {
$mess = sprintf(esc_html__('Default role for new users is set to %s successfully', 'ure'), $wp_roles->role_names[$user_role_id]);
}
} else {
$mess = $errorMessage;
}
}
return $mess;
}
// end of change_default_role()
/**
* Not really used in the plugin - just storage for the translation strings
*/
protected function translation_data() {
// for the translation purpose
if (false) {
// Standard WordPress roles
__('Editor', 'ure');
__('Author', 'ure');
__('Contributor', 'ure');
__('Subscriber', 'ure');
// Standard WordPress capabilities
__('Switch themes', 'ure');
__('Edit themes', 'ure');
__('Activate plugins', 'ure');
__('Edit plugins', 'ure');
__('Edit users', 'ure');
__('Edit files', 'ure');
__('Manage options', 'ure');
__('Moderate comments', 'ure');
__('Manage categories', 'ure');
__('Manage links', 'ure');
__('Upload files', 'ure');
__('Import', 'ure');
__('Unfiltered html', 'ure');
__('Edit posts', 'ure');
__('Edit others posts', 'ure');
__('Edit published posts', 'ure');
__('Publish posts', 'ure');
__('Edit pages', 'ure');
__('Read', 'ure');
__('Level 10', 'ure');
__('Level 9', 'ure');
__('Level 8', 'ure');
__('Level 7', 'ure');
__('Level 6', 'ure');
__('Level 5', 'ure');
__('Level 4', 'ure');
__('Level 3', 'ure');
__('Level 2', 'ure');
__('Level 1', 'ure');
__('Level 0', 'ure');
__('Edit others pages', 'ure');
__('Edit published pages', 'ure');
__('Publish pages', 'ure');
__('Delete pages', 'ure');
__('Delete others pages', 'ure');
__('Delete published pages', 'ure');
__('Delete posts', 'ure');
__('Delete others posts', 'ure');
__('Delete published posts', 'ure');
__('Delete private posts', 'ure');
__('Edit private posts', 'ure');
__('Read private posts', 'ure');
__('Delete private pages', 'ure');
__('Edit private pages', 'ure');
__('Read private pages', 'ure');
__('Delete users', 'ure');
__('Create users', 'ure');
__('Unfiltered upload', 'ure');
__('Edit dashboard', 'ure');
__('Update plugins', 'ure');
__('Delete plugins', 'ure');
__('Install plugins', 'ure');
__('Update themes', 'ure');
__('Install themes', 'ure');
__('Update core', 'ure');
__('List users', 'ure');
__('Remove users', 'ure');
__('Add users', 'ure');
__('Promote users', 'ure');
__('Edit theme options', 'ure');
__('Delete themes', 'ure');
__('Export', 'ure');
}
}
// end of ure_TranslationData()
/**
* placeholder - realized at the Pro version
*/
protected function check_blog_user($user) {
return true;
}
// end of check_blog_user()
/**
* placeholder - realized at the Pro version
*/
protected function network_update_user($user) {
return true;
}
// end of network_update_user()
/**
* Update user roles and capabilities
*
* @global WP_Roles $wp_roles
* @param WP_User $user
* @return boolean
*/
protected function update_user($user) {
global $wp_roles;
if ($this->multisite) {
if (!$this->check_blog_user($user)) {
return false;
}
}
$primary_role = $_POST['primary_role'];
if (empty($primary_role) || !isset($wp_roles->roles[$primary_role])) {
$primary_role = '';
}
if (function_exists('bbp_filter_blog_editable_roles')) { // bbPress plugin is active
$bbp_user_role = bbp_get_user_role($user->ID);
} else {
$bbp_user_role = '';
}
// revoke all roles and capabilities from this user
$user->roles = array();
$user->remove_all_caps();
// restore primary role
if (!empty($primary_role)) {
$user->add_role($primary_role);
}
// restore bbPress user role if she had one
if (!empty($bbp_user_role)) {
$user->add_role($bbp_user_role);
}
// add other roles to user
foreach ($_POST as $key => $value) {
$result = preg_match('/^wp_role_(.+)/', $key, $match);
if ($result === 1) {
$role = $match[1];
if (isset($wp_roles->roles[$role])) {
$user->add_role($role);
}
}
}
// add individual capabilities to user
if (count($this->capabilities_to_save) > 0) {
foreach ($this->capabilities_to_save as $key => $value) {
$user->add_cap($key);
}
}
$user->update_user_level_from_caps();
if ($this->apply_to_all) { // apply update to the all network
if (!$this->network_update_user($user)) {
return false;
}
}
return true;
}
// end of update_user()
/**
* Add new capability
*
* @global WP_Roles $wp_roles
* @return string
*/
protected function add_new_capability() {
global $wp_roles;
$mess = '';
if (isset($_POST['capability_id']) && $_POST['capability_id']) {
$user_capability = $_POST['capability_id'];
// sanitize user input for security
$valid_name = preg_match('/[A-Za-z0-9_\-]*/', $user_capability, $match);
if (!$valid_name || ($valid_name && ($match[0] != $user_capability))) { // some non-alphanumeric charactes found!
return 'Error! ' . esc_html__('Error: Capability name must contain latin characters and digits only!', 'ure');
;
}
if ($user_capability) {
$user_capability = strtolower($user_capability);
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
$wp_roles->use_db = true;
$administrator = $wp_roles->get_role('administrator');
if (!$administrator->has_cap($user_capability)) {
$wp_roles->add_cap('administrator', $user_capability);
$mess = sprintf(esc_html__('Capability %s is added successfully', 'ure'), $user_capability);
} else {
$mess = sprintf('Error! ' . esc_html__('Capability %s exists already', 'ure'), $user_capability);
}
}
}
return $mess;
}
// end of add_new_capability()
/**
* Delete capability
*
* @global wpdb $wpdb
* @global WP_Roles $wp_roles
* @return string - information message
*/
protected function delete_capability() {
global $wpdb, $wp_roles;
$mess = '';
if (!empty($_POST['user_capability_id'])) {
$capability_id = $_POST['user_capability_id'];
$caps_to_remove = $this->get_caps_to_remove();
if (!is_array($caps_to_remove) || count($caps_to_remove) == 0 || !isset($caps_to_remove[$capability_id])) {
return sprintf(esc_html__('Error! You do not have permission to delete this capability: %s!', 'ure'), $capability_id);
}
// process users
$usersId = $wpdb->get_col("SELECT $wpdb->users.ID FROM $wpdb->users");
foreach ($usersId as $user_id) {
$user = get_user_to_edit($user_id);
if ($user->has_cap($capability_id)) {
$user->remove_cap($capability_id);
}
}
// process roles
foreach ($wp_roles->role_objects as $wp_role) {
if ($wp_role->has_cap($capability_id)) {
$wp_role->remove_cap($capability_id);
}
}
$mess = sprintf(esc_html__('Capability %s is removed successfully', 'ure'), $capability_id);
}
return $mess;
}
// end of remove_capability()
/**
* Returns list of user roles, except 1st one, and bbPress assigned as they are shown by WordPress and bbPress theirselves.
*
* @param type $user WP_User from wp-includes/capabilities.php
* @return array
*/
public function other_user_roles($user) {
global $wp_roles;
if (!is_array($user->roles) || count($user->roles) <= 1) {
return '';
}
// get bbPress assigned user role
if (function_exists('bbp_filter_blog_editable_roles')) {
$bb_press_role = bbp_get_user_role($user->ID);
} else {
$bb_press_role = '';
}
$roles = array();
foreach ($user->roles as $key => $value) {
if (!empty($bb_press_role) && $bb_press_role === $value) {
// exclude bbPress assigned role
continue;
}
$roles[] = $value;
}
array_shift($roles); // exclude primary role which is shown by WordPress itself
return $roles;
}
// end of ure_other_user_roles()
/**
* Returns text presentation of user roles
*
* @param type $roles user roles list
* @return string
*/
public function roles_text($roles) {
global $wp_roles;
if (is_array($roles) && count($roles) > 0) {
$role_names = array();
foreach ($roles as $role) {
$role_names[] = $wp_roles->roles[$role]['name'];
}
$output = implode(', ', $role_names);
} else {
$output = '';
}
return $output;
}
// end of roles_text()
/**
* display opening part of the HTML box with title and CSS style
*
* @param string $title
* @param string $style
*/
protected function display_box_start($title, $style = '') {
?>
User Role Editor
current_role) || !$this->current_role) {
if (isset($_REQUEST['user_role']) && $_REQUEST['user_role'] && isset($this->roles[$_REQUEST['user_role']])) {
$this->current_role = $_REQUEST['user_role'];
} else {
$this->current_role = $this->get_last_role_id();
}
$this->current_role_name = $this->roles[$this->current_role]['name'];
}
}
// end of set_current_role()
protected function show_admin_role_allowed() {
$show_admin_role = $this->get_option('show_admin_role', 0);
$show_admin_role = ((defined('URE_SHOW_ADMIN_ROLE') && URE_SHOW_ADMIN_ROLE==1) || $show_admin_role==1) && $this->user_is_admin();
return $show_admin_role;
}
// end of show_admin_role()
public function role_edit_prepare_html($select_width=200) {
$caps_access_restrict_for_simple_admin = $this->get_option('caps_access_restrict_for_simple_admin', 0);
$show_admin_role = $this->show_admin_role_allowed();
if ($select_width>0) {
$select_style = 'style="width: '. $select_width .'px"';
} else {
$select_style = '';
}
$this->role_default_html = '';
$roles_can_delete = $this->get_roles_can_delete();
if ($roles_can_delete && count($roles_can_delete) > 0) {
$this->role_delete_html = '';
foreach ($roles_can_delete as $key => $value) {
$this->role_delete_html .= '';
}
$this->role_delete_html .= '';
$this->role_delete_html .= '';
} else {
$this->role_delete_html = '';
}
$this->capability_remove_html = $this->get_caps_to_remove_html();
}
// end of role_edit_prepare_html()
public function user_primary_role_dropdown_list($user_roles) {
?>
' . esc_html__('— No role for this site —') . '';
?>
user_to_edit->caps[$capability])) {
return true;
}
foreach ($this->user_to_edit->roles as $role) {
if ($role===$capability) {
return true;
}
if (!empty($this->roles[$role]['capabilities'][$capability])) {
return true;
}
}
return false;
}
// end of user_can()
// returns true if current user has $capability assigned through the roles or directly
// returns true if current user has role with name equal $cap
public function user_has_capability($user, $cap) {
global $wp_roles;
if (!is_object($user) || empty($user->ID)) {
return false;
}
if (is_multisite() && is_super_admin($user->ID)) {
return true;
}
if (isset($user->caps[$cap])) {
return true;
}
foreach ($user->roles as $role) {
if ($role === $cap) {
return true;
}
if (!empty($wp_roles->roles[$role]['capabilities'][$cap])) {
return true;
}
}
return false;
}
// end of user_has_capability()
public function show_other_default_roles() {
$other_default_roles = $this->get_option('other_default_roles', array());
foreach ($this->roles as $role_id => $role) {
if ( $role_id=='administrator' || $role_id==$this->wp_default_role ) {
continue;
}
if ( in_array($role_id, $other_default_roles) ) {
$checked = 'checked="checked"';
} else {
$checked = '';
}
echo ' ';
}
}
// end of show_other_default_roles()
public function create_no_rights_role() {
global $wp_roles;
$role_id = 'no_rights';
$role_name = 'No rights';
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
if (isset($wp_roles->roles[$role_name])) {
return;
}
add_role($role_id, $role_name, array());
}
// end of create_no_rights_role()
public function get_users_without_role() {
global $wpdb;
$id = get_current_blog_id();
$blog_prefix = $wpdb->get_blog_prefix($id);
$query = "select ID from {$wpdb->users} users
where not exists (select user_id from {$wpdb->usermeta}
where user_id=users.ID and meta_key='{$blog_prefix}capabilities') or
exists (select user_id from wp_usermeta
where user_id=users.ID and meta_key='{$blog_prefix}capabilities' and meta_value='a:0:{}') ;";
$users = $wpdb->get_col($query);
return $users;
}
// end of get_users_without_role()
public function get_current_role() {
return $this->current_role;
}
// end of get_current_role()
}
// end of URE_Lib class