97 lines
2.1 KiB
PHP
97 lines
2.1 KiB
PHP
<?php
|
|
|
|
if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
|
|
if( ! class_exists('ACF_Location_User_Role') ) :
|
|
|
|
class ACF_Location_User_Role extends acf_location {
|
|
|
|
/**
|
|
* initialize
|
|
*
|
|
* Sets up the class functionality.
|
|
*
|
|
* @date 5/03/2014
|
|
* @since 5.0.0
|
|
*
|
|
* @param void
|
|
* @return void
|
|
*/
|
|
function initialize() {
|
|
$this->name = 'user_role';
|
|
$this->label = __("User Role", 'acf');
|
|
$this->category = 'user';
|
|
}
|
|
|
|
/**
|
|
* rule_match
|
|
*
|
|
* Determines if the given location $rule is a match for the current $screen.
|
|
*
|
|
* @date 17/9/19
|
|
* @since 5.8.1
|
|
*
|
|
* @param bool $result Whether or not this location rule is a match.
|
|
* @param array $rule The locatio rule data.
|
|
* @param array $screen The current screen data.
|
|
* @return bool
|
|
*/
|
|
function rule_match( $result, $rule, $screen ) {
|
|
|
|
// Extract vars.
|
|
$user_id = acf_maybe_get( $screen, 'user_id' );
|
|
$user_role = acf_maybe_get( $screen, 'user_role' );
|
|
|
|
// Allow $user_role to be supplied (third-party compatibility).
|
|
if( $user_role ) {
|
|
// Do nothing
|
|
|
|
// Determine $user_role from $user_id.
|
|
} elseif( $user_id ) {
|
|
|
|
// Use default role for new user.
|
|
if( $user_id == 'new' ) {
|
|
$user_role = get_option('default_role');
|
|
|
|
// Check if user can, and if so, set the value allowing them to match.
|
|
} elseif( user_can($user_id, $rule['value']) ) {
|
|
$user_role = $rule['value'];
|
|
}
|
|
|
|
// Return false if not a user.
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
// Compare and return.
|
|
return $this->compare( $user_role, $rule );
|
|
|
|
}
|
|
|
|
/**
|
|
* rule_values
|
|
*
|
|
* Returns an array of values for this location rule.
|
|
*
|
|
* @date 17/9/19
|
|
* @since 5.8.1
|
|
*
|
|
* @param array $choices An empty array.
|
|
* @param array $rule The locatio rule data.
|
|
* @return array
|
|
*/
|
|
function rule_values( $choices, $rule ) {
|
|
global $wp_roles;
|
|
|
|
// Merge roles with defaults and return.
|
|
return wp_parse_args($wp_roles->get_names(), array(
|
|
'all' => __('All', 'acf')
|
|
));
|
|
}
|
|
}
|
|
|
|
// initialize
|
|
acf_register_location_rule( 'ACF_Location_User_Role' );
|
|
|
|
endif; // class_exists check
|