Files
old-experiments/backend/wordpress/wp-content/plugins/multiple-roles/model.php

110 lines
2.6 KiB
PHP
Raw Normal View History

2018-06-20 18:03:43 +02:00
<?php
/**
* Role logic: retrieving, updating, and checking permission.
*/
class MDMR_Model {
/**
* Grab all WordPress roles.
*
* @return array Roles in name => label pairs.
*/
public function get_roles() {
global $wp_roles;
return apply_filters( 'mdmr_get_roles', $wp_roles->role_names );
}
/**
* Get all editable roles by the current user
*
* @return array editable roles
*/
public function get_editable_roles() {
$editable_roles = get_editable_roles();
$final_roles = array();
foreach ( $editable_roles as $key => $role ) {
$final_roles[$key] = $role['name'];
}
return apply_filters( 'mdmr_get_editable_roles', (array) $final_roles );
}
/**
* Grab a particular user's roles.
*
* @param object|int $user The user object or ID.
* @return array Roles in name => label pairs.
*/
public function get_user_roles( $user = 0 ) {
if ( ! $user ) {
return array();
}
$user = get_user_by( 'id', (int) $user );
if ( empty( $user->roles ) ) {
return array();
}
$all_roles = $this->get_roles();
$roles = array();
foreach( $user->roles as $role ) {
$roles[$role] = $all_roles[$role];
}
return apply_filters( 'mdmr_get_user_roles', $roles );
}
/**
* Erase the user's existing roles and replace them with the new array.
*
* @param integer $user_id The WordPress user ID.
* @param array $roles The new array of roles for the user.
*
* @return bool
*/
public function update_roles( $user_id = 0, $roles = array() ) {
do_action( 'mdmr_before_update_roles', $user_id, $roles );
if ( empty( $roles ) ) {
return false;
}
$roles = array_map( 'sanitize_key', (array) $roles );
$roles = array_filter( (array) $roles, 'get_role' );
$user = get_user_by( 'id', (int) $user_id );
// remove all roles
$user->set_role( '' );
foreach( $roles as $role ) {
$user->add_role( $role );
}
do_action( 'mdmr_after_update_roles', $user_id, $roles, $user->roles );
return true;
}
/**
* Check whether or not a user can edit roles. User must have the edit_roles cap and
* must be on a specific site (and not in the network admin area). Users also can't
* edit their own roles unless they're a network admin.
*
* @return bool True if current user can update roles, false if not.
*/
public function can_update_roles() {
do_action( 'mdmr_before_can_update_roles' );
if ( is_network_admin() || ! current_user_can( 'edit_users' ) || ( defined( 'IS_PROFILE_PAGE' ) && IS_PROFILE_PAGE && ! current_user_can( 'manage_sites' ) ) ) {
return false;
}
return true;
}
}