members/addons/members-admin-access/app/functions.php
<?php
/**
* Plugin functions.
*
* @package MembersAdminAccess
* @author Justin Tadlock <justintadlock@gmail.com>
* @copyright Copyright (c) 2018, Justin Tadlock
* @link https://themehybrid.com/plugins/members-admin-access
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
namespace Members\AddOns\AdminAccess;
# Filter whether to show the toolbar.
add_filter( 'show_admin_bar', __NAMESPACE__ . '\show_admin_bar', 95 );
# Modify toolbar items.
add_action( 'admin_bar_menu', __NAMESPACE__ . '\admin_bar_menu', 95 );
/**
* Filter on the `show_admin_bar` hook to disable the admin bar for users without admin access.
*
* @since 1.0.0
* @access public
* @param bool $show
* @return bool
*/
function show_admin_bar( $show ) {
return disable_toolbar() && ! current_user_has_access() ? false : $show;
}
/**
* Removes items from the toolbar if it is showing for a user without access.
*
* @since 1.0.0
* @access public
* @param object $wp_admin_bar
* @return void
*/
function admin_bar_menu( $wp_admin_bar ) {
if ( is_admin() || disable_toolbar() || current_user_has_access() )
return;
$items = [
'about',
'site-name',
'dashboard',
'customize',
'updates',
'comments',
'new-content',
'edit',
'edit-profile',
'user-info'
];
apply_filters( app()->namespace . '/remove_toolbar_items', $items );
foreach ( $items as $item )
$wp_admin_bar->remove_menu( $item );
}
/**
* Returns an array of the default plugin settings.
*
* @since 1.0.0
* @access public
* @return array
*/
function get_default_settings() {
$settings = [
'roles' => array_keys( members_get_roles() ), // Defaults to all roles.
'redirect_url' => esc_url_raw( home_url() ),
'disable_toolbar' => true
];
return apply_filters( app()->namespace . '/get_default_settings', $settings );
}
/**
* Returns the requested plugin setting's value.
*
* @since 1.0.0
* @access public
* @param string $option
* @return mixed
*/
function get_setting( $option = '' ) {
$defaults = get_default_settings();
$settings = wp_parse_args( get_option( 'members_admin_access_settings', $defaults ), $defaults );
return isset( $settings[ $option ] ) ? $settings[ $option ] : false;
}
/**
* Returns the redirect to ID. A value of `0` is the home/front page.
*
* @since 1.0.0
* @access public
* @return int
*/
function get_redirect_url() {
return apply_filters( app()->namespace . '/get_redirect_url', get_setting( 'redirect_url' ) );
}
/**
* Conditional check on whether to disable the toolbar for users without admin access.
*
* @since 1.0.0
* @access public
* @return bool
*/
function disable_toolbar() {
return (bool) apply_filters( app()->namespace . '/disable_toolbar', get_setting( 'disable_toolbar' ) );
}
/**
* Returns an array of roles with admin access.
*
* @since 1.0.0
* @access public
* @return array
*/
function get_roles_with_access() {
$roles = (array) apply_filters( app()->namespace . '/get_roles_with_access', get_setting( 'roles' ) );
return array_merge( get_roles_with_permanent_access(), $roles );
}
/**
* Returns an array of roles with permanent admin access, such as administrators.
*
* @since 1.0.0
* @access public
* @return array
*/
function get_roles_with_permanent_access() {
return apply_filters( app()->namespace . '/get_roles_with_permanent_access', [ 'administrator' ] );
}
/**
* Conditional function for checking if a particular role has access.
*
* @since 1.0.0
* @access public
* @param string $role
* @return bool
*/
function role_has_access( $role ) {
return apply_filters(
app()->namespace . '/role_has_access',
in_array( $role, get_roles_with_access() ),
$role
);
}
/**
* Conditional function to check if the current user has admin access.
*
* @since 1.0.0
* @access public
* @return bool
*/
function current_user_has_access() {
return user_has_access( get_current_user_id() );
}
/**
* Conditional function to check if a specific user has admin access.
*
* @since 1.0.0
* @access public
* @param int $user_id
* @return bool
*/
function user_has_access( $user_id = 0 ) {
return apply_filters(
app()->namespace . '/user_has_access',
members_user_has_role( $user_id, get_roles_with_access() ),
$user_id
);
}