* @license GPLv3 * @copyright 2020 by Joachim Jensen */ defined('ABSPATH') || exit; if (! class_exists('WP_List_Table')) { require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php'); } final class RUA_Capabilities_List extends WP_List_Table { public function __construct() { parent::__construct(array( 'singular' => __('Capability', 'restrict-user-access'), 'plural' => __('Capabilities', 'restrict-user-access'), 'ajax' => false, 'screen' => RUA_App::TYPE_RESTRICT.'_caps' )); } /** * Text for no caps * * @since 0.8 * @return void */ public function no_items() { _e('No capabilities found.', 'restrict-user-access'); } /** * Table columns with titles * * @since 0.8 * @return array */ public function get_columns() { return array( 'name' => __('Capability'), 'permit' => __('Permit').$this->get_sum_label(1), 'deny' => __('Deny').$this->get_sum_label(0), 'unset' => __('Unset').$this->get_sum_label(-1) ); } private function get_sum_label($type) { return ' '; } /** * Columns to make sortable. * * @since 0.8 * @return array */ public function get_sortable_columns() { return array(); } /** * Primary column used for responsive view * * @since 0.8 * @return string */ protected function get_default_primary_column_name() { return 'name'; } /** * Default fallback for column render * * @since 0.8 * @param WP_User $item * @param string $column_name * @return mixed */ protected function column_default($item, $column_name) { switch ($column_name) { default: return print_r($item, true); } } /** * Render name column * * @since 0.8 * @param string $name * @return string */ protected function column_name($name) { return ''.$name.''; } /** * Render permit column * * @since 0.8 * @param string $user * @return string */ protected function column_permit($name) { return $this->_column_cap($name, 1); } /** * Render deny column * * @since 0.8 * @param string $name * @return string */ protected function column_deny($name) { return $this->_column_cap($name, 0); } protected function column_unset($name) { return $this->_column_cap($name, -1); } /** * Helper function for cap checkbox * * @since 0.8 * @param string $name * @param int $value * @return string */ protected function _column_cap($name, $value) { $metadata = RUA_App::instance()->level_manager->metadata()->get('caps')->get_data(get_the_ID()); $checked_value = -1; $parent_input = ''; $parent_value = $this->get_inherited_cap($name); if (!is_null($parent_value)) { $checked_value = $parent_value; if ($checked_value == $value) { $parent_input = ''; } } if (isset($metadata[$name])) { $checked_value = $metadata[$name]; } return $parent_input.sprintf( '', $name, $value, checked($checked_value, $value, false) ); } protected $caps; /** * @param string $name * * @return int|null */ protected function get_inherited_cap($name) { if (is_null($this->caps)) { $level_ids = array_reverse(get_post_ancestors(get_the_ID())); $this->caps = array(); foreach ($level_ids as $level) { $this->caps = array_merge( $this->caps, RUA_App::instance()->level_manager->metadata()->get('caps')->get_data($level, true) ); } } return isset($this->caps[$name]) ? (int)$this->caps[$name] : null; } /** * Bulk actions * * @since 0.8 * @return array */ public function get_bulk_actions() { return array(); } /** * Generate the table navigation above or below the table * * @since 0.8 * @param string $which */ public function display_tablenav($which) { ?>