179 lines
3.7 KiB
PHP
179 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* Creates a new role object. This is an extension of the core `get_role()` functionality. It's
|
|
* just been beefed up a bit to provide more useful info for our plugin.
|
|
*
|
|
* @package Members
|
|
* @subpackage Includes
|
|
* @author Justin Tadlock <justintadlock@gmail.com>
|
|
* @copyright Copyright (c) 2009 - 2018, Justin Tadlock
|
|
* @link https://themehybrid.com/plugins/members
|
|
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
*/
|
|
|
|
namespace Members;
|
|
|
|
/**
|
|
* Role class.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
*/
|
|
class Role {
|
|
|
|
/**
|
|
* The role name.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $name = '';
|
|
|
|
/**
|
|
* The role label.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $label = '';
|
|
|
|
/**
|
|
* The group the role belongs to.
|
|
*
|
|
* @see Members\Role_Group
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $group = '';
|
|
|
|
/**
|
|
* Whether the role has caps (granted).
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var bool
|
|
*/
|
|
public $has_caps = false;
|
|
|
|
/**
|
|
* Capability count for the role.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var int
|
|
*/
|
|
public $granted_cap_count = 0;
|
|
|
|
/**
|
|
* Capability count for the role.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var int
|
|
*/
|
|
public $denied_cap_count = 0;
|
|
|
|
/**
|
|
* Array of capabilities that the role has in the form of `array( $cap => $bool )`.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var array
|
|
*/
|
|
public $caps = array();
|
|
|
|
/**
|
|
* Array of granted capabilities that the role has.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var array
|
|
*/
|
|
public $granted_caps = array();
|
|
|
|
/**
|
|
* Array of denied capabilities that the role has.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @var array
|
|
*/
|
|
public $denied_caps = array();
|
|
|
|
/**
|
|
* Return the role string in attempts to use the object as a string.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function __toString() {
|
|
return $this->name;
|
|
}
|
|
|
|
/**
|
|
* Creates a new role object.
|
|
*
|
|
* @since 2.0.0
|
|
* @access public
|
|
* @param string $role
|
|
* @param array $args
|
|
* @return void
|
|
*/
|
|
public function __construct( $name, $args = array() ) {
|
|
|
|
foreach ( array_keys( get_object_vars( $this ) ) as $key ) {
|
|
|
|
if ( isset( $args[ $key ] ) )
|
|
$this->$key = $args[ $key ];
|
|
}
|
|
|
|
$this->name = members_sanitize_role( $name );
|
|
|
|
if ( $this->caps ) {
|
|
|
|
// Validate cap values as booleans in case they are stored as strings.
|
|
$this->caps = array_map( 'members_validate_boolean', $this->caps );
|
|
|
|
// Get granted and denied caps.
|
|
$this->granted_caps = array_keys( $this->caps, true );
|
|
$this->denied_caps = array_keys( $this->caps, false );
|
|
|
|
// Remove user levels from granted/denied caps.
|
|
$this->granted_caps = members_remove_old_levels( $this->granted_caps );
|
|
$this->denied_caps = members_remove_old_levels( $this->denied_caps );
|
|
|
|
// Remove hidden caps from granted/denied caps.
|
|
$this->granted_caps = members_remove_hidden_caps( $this->granted_caps );
|
|
$this->denied_caps = members_remove_hidden_caps( $this->denied_caps );
|
|
|
|
// Set the cap count.
|
|
$this->granted_cap_count = count( $this->granted_caps );
|
|
$this->denied_cap_count = count( $this->denied_caps );
|
|
|
|
// Check if we have caps.
|
|
$this->has_caps = 0 < $this->granted_cap_count;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Magic method for getting media object properties. Let's keep from failing if a theme
|
|
* author attempts to access a property that doesn't exist.
|
|
*
|
|
* @since 2.0.2
|
|
* @access public
|
|
* @param string $property
|
|
* @return mixed
|
|
*/
|
|
public function get( $property ) {
|
|
|
|
if ( 'label' === $property )
|
|
return members_translate_role( $this->name );
|
|
|
|
return isset( $this->$property ) ? $this->$property : false;
|
|
}
|
|
}
|