File: /home/www/web115/wordpress/wp-content/plugins/members/admin/class-cap-tabs.php
<?php
/**
* Edit Capabilities tab section on the edit/new role screen.
*
* @package Members
* @subpackage Admin
* @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\Admin;
/**
* Handles building the edit caps tabs.
*
* @since 2.0.0
* @access public
*/
final class Cap_Tabs {
/**
* The role object that we're creating tabs for.
*
* @since 2.0.0
* @access public
* @var object
*/
public $role;
/**
* Array of caps shown by the cap tabs.
*
* @since 2.0.0
* @access public
* @var array
*/
public $added_caps = array();
/**
* The caps the role has. Note that if this is a new role (new role screen), the default
* new role caps will be passed in.
*
* @since 2.0.0
* @access public
* @var array
*/
public $has_caps = array();
/**
* Array of tab sections.
*
* @since 2.0.0
* @access public
* @var array
*/
public $sections = array();
/**
* Array of single cap controls.
*
* @since 2.0.0
* @access public
* @var array
*/
public $controls = array();
/**
* Array of section json data.
*
* @since 2.0.0
* @access public
* @var array
*/
public $sections_json = array();
/**
* Array of control json data.
*
* @since 2.0.0
* @access public
* @var array
*/
public $controls_json = array();
/**
* Sets up the cap tabs.
*
* @since 2.0.0
* @access public
* @param string $role
* @param array $has_caps
* @return void
*/
public function __construct( $role = '', $has_caps = array() ) {
// Check if there were explicit caps passed in.
if ( $has_caps )
$this->has_caps = $has_caps;
// Check if we have a role.
if ( $role ) {
$this->role = members_get_role( $role );
// If no explicit caps were passed in, use the role's caps.
if ( ! $has_caps )
$this->has_caps = $this->role->caps;
}
// Add sections and controls.
$this->register();
// Print custom JS in the footer.
add_action( 'admin_footer', array( $this, 'localize_scripts' ), 0 );
add_action( 'admin_footer', array( $this, 'print_templates' ) );
}
/**
* Registers the sections (and each section's controls) that will be used for
* the tab content.
*
* @since 2.0.0
* @access public
* @return void
*/
public function register() {
// Hook before registering.
do_action( 'members_pre_edit_caps_manager_register' );
$groups = members_get_cap_groups();
uasort( $groups, 'members_priority_sort' );
// Get and loop through the available capability groups.
foreach ( $groups as $group ) {
$caps = $group->caps;
// Remove added caps.
if ( $group->diff_added )
$caps = array_diff( $group->caps, $this->added_caps );
// Add group's caps to the added caps array.
$this->added_caps = array_unique( array_merge( $this->added_caps, $caps ) );
// Create a new section.
$this->sections[] = $section = new Cap_Section( $this, $group->name, array( 'icon' => $group->icon, 'label' => $group->label ) );
// Get the section json data.
$this->sections_json[] = $section->json();
// Create new controls for each cap.
foreach ( $caps as $cap ) {
$this->controls[] = $control = new Cap_Control( $this, $cap, array( 'section' => $group->name ) );
// Get the control json data.
$this->controls_json[] = $control->json();
}
}
// Create a new "All" section.
$this->sections[] = $section = new Cap_Section( $this, 'all', array( 'icon' => 'dashicons-plus', 'label' => esc_html__( 'All', 'members' ) ) );
// Get the section json data.
$this->sections_json[] = $section->json();
// Create new controls for each cap.
foreach ( $this->added_caps as $cap ) {
$this->controls[] = $control = new Cap_Control( $this, $cap, array( 'section' => 'all' ) );
// Get the control json data.
$this->controls_json[] = $control->json();
}
// Hook after registering.
do_action( 'members_edit_caps_manager_register' );
}
/**
* Displays the cap tabs.
*
* @since 2.0.0
* @access public
* @return void
*/
public function display() { ?>
<div id="tabcapsdiv" class="postbox">
<h2 class="hndle"><?php printf( esc_html__( 'Edit Capabilities: %s', 'members' ), '<span class="members-which-tab"></span>' ); ?></h2>
<div class="inside">
<div class="members-cap-tabs">
<?php $this->tab_nav(); ?>
<div class="members-tab-wrap"></div>
</div><!-- .members-cap-tabs -->
</div><!-- .inside -->
</div><!-- .postbox -->
<?php }
/**
* Outputs the tab nav.
*
* @since 2.0.0
* @access public
* @return void
*/
public function tab_nav() { ?>
<ul class="members-tab-nav">
<?php foreach ( $this->sections as $section ) : ?>
<?php $icon = preg_match( '/dashicons-/', $section->icon ) ? sprintf( 'dashicons %s', sanitize_html_class( $section->icon ) ) : esc_attr( $section->icon ); ?>
<li class="members-tab-title">
<a href="<?php echo esc_attr( "#members-tab-{$section->section}" ); ?>"><i class="<?php echo $icon; ?>"></i> <span class="label"><?php echo esc_html( $section->label ); ?></span></a>
</li>
<?php endforeach; ?>
</ul><!-- .members-tab-nav -->
<?php }
/**
* Passes our sections and controls data as json to the `edit-role.js` file.
*
* @since 2.0.0
* @access public
* @return void
*/
public function localize_scripts() {
wp_localize_script( 'members-edit-role', 'members_sections', $this->sections_json );
wp_localize_script( 'members-edit-role', 'members_controls', $this->controls_json );
}
/**
* Outputs the Underscore JS templates.
*
* @since 2.0.0
* @access public
* @return void
*/
public function print_templates() { ?>
<script type="text/html" id="tmpl-members-cap-section">
<?php members_get_underscore_template( 'cap-section' ); ?>
</script>
<script type="text/html" id="tmpl-members-cap-control">
<?php members_get_underscore_template( 'cap-control' ); ?>
</script>
<?php }
}