id ) $screen->add_option( 'per_page', array( 'default' => 20 ) ); } /** * Sets up the roles column headers. * * @since 2.0.0 * @access public * @param array $columns * @return array */ public function manage_roles_columns( $columns ) { $columns = array( 'cb' => '', 'title' => esc_html__( 'Role Name', 'members' ), 'role' => esc_html__( 'Role', 'members' ), 'users' => esc_html__( 'Users', 'members' ), 'granted_caps' => esc_html__( 'Granted', 'members' ), 'denied_caps' => esc_html__( 'Denied', 'members' ) ); return apply_filters( 'members_manage_roles_columns', $columns ); } /** * Runs on the `load-{$page}` hook. This is the handler for form submissions and requests. * * @since 2.0.0 * @access public * @return void */ public function load() { // Get the current action if sent as request. $action = isset( $_REQUEST['action'] ) ? sanitize_key( $_REQUEST['action'] ) : false; // Get the current action if posted. if ( ( isset( $_POST['action'] ) && 'delete' == $_POST['action'] ) || ( isset( $_POST['action2'] ) && 'delete' == $_POST['action2'] ) ) $action = 'bulk-delete'; if ( ( isset( $_POST['action'] ) && 'export' == $_POST['action'] ) || ( isset( $_POST['action2'] ) && 'export' == $_POST['action2'] ) ) $action = 'bulk-export'; // Bulk export role handler. if ( 'bulk-export' === $action ) { if ( current_user_can( 'list_roles' ) ) { // Verify the nonce. Nonce created via `WP_List_Table::display_tablenav()`. check_admin_referer( 'bulk-roles' ); $selected_roles = array(); if ( isset( $_POST['roles'] ) && is_array( $_POST['roles'] ) ) { foreach ( $_POST['roles'] as $role ) { $selected_roles[] = members_sanitize_role( $role ); } $selected_roles = array_filter( $selected_roles ); } if ( ! empty( $selected_roles ) ) { Role_Export::get_instance()->handle_selective_export( $selected_roles ); } else { add_settings_error( 'members_roles', 'no_roles_selected', esc_html__( 'Please select at least one role to export.', 'members' ) ); } } // Bulk delete role handler. } else if ( 'bulk-delete' === $action ) { // If roles were selected, let's delete some roles. if ( current_user_can( 'delete_roles' ) && isset( $_POST['roles'] ) && is_array( $_POST['roles'] ) ) { // Verify the nonce. Nonce created via `WP_List_Table::display_tablenav()`. check_admin_referer( 'bulk-roles' ); // Loop through each of the selected roles. foreach ( $_POST['roles'] as $role ) { $role = members_sanitize_role( $role ); if ( members_role_exists( $role ) ) members_delete_role( $role ); } // Add roles deleted message. add_settings_error( 'members_roles', 'roles_deleted', esc_html__( 'Selected roles deleted.', 'members' ), 'updated' ); } // Delete single role handler. } else if ( 'delete' === $action ) { // Make sure the current user can delete roles. if ( current_user_can( 'delete_roles' ) ) { // Verify the referer. check_admin_referer( 'delete_role', 'members_delete_role_nonce' ); // Get the role we want to delete. $role = members_sanitize_role( $_GET['role'] ); // Check that we have a role before attempting to delete it. if ( members_role_exists( $role ) ) { // Add role deleted message. add_settings_error( 'members_roles', 'role_deleted', sprintf( esc_html__( '%s role deleted.', 'members' ), members_get_role( $role )->get( 'label' ) ), 'updated' ); // Delete the role. members_delete_role( $role ); } } } // Redirect away from expired import preview before headers are sent. if ( isset( $_GET['members_import_preview'] ) && current_user_can( 'edit_roles' ) ) { $transient_key = 'members_import_preview_' . get_current_user_id(); if ( ! get_transient( $transient_key ) ) { set_transient( 'members_import_error_' . get_current_user_id(), __( 'Your import preview has expired. Please upload the file again.', 'members' ), 30 ); wp_safe_redirect( add_query_arg( 'members_import_error', 'expired', members_get_edit_roles_url() ) ); exit; } } // Display import success message. if ( isset( $_GET['members_imported'] ) ) { $message_key = 'members_import_message_' . get_current_user_id(); $message = get_transient( $message_key ); if ( $message ) { add_settings_error( 'members_roles', 'roles_imported', esc_html( $message ), 'updated' ); delete_transient( $message_key ); } } // Display import error message. if ( isset( $_GET['members_import_error'] ) ) { $error_key = 'members_import_error_' . get_current_user_id(); $error = get_transient( $error_key ); if ( $error ) { add_settings_error( 'members_roles', 'import_error', esc_html( $error ) ); delete_transient( $error_key ); } } // Load page hook. do_action( 'members_load_manage_roles' ); } /** * Enqueue scripts/styles. * * @since 2.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_style( 'members-admin' ); wp_enqueue_script( 'members-edit-role' ); wp_enqueue_script( 'members-import-export' ); } /** * Displays the page content. * * @since 2.0.0 * @access public * @return void */ public function page() { // Show the import preview page if requested. if ( isset( $_GET['members_import_preview'] ) && current_user_can( 'edit_roles' ) ) { $this->render_import_preview(); return; } require_once( members_plugin()->dir . 'admin/class-role-list-table.php' ); ?>

prepare_items(); ?> display(); ?>
array(), 'settings' => array(), 'import_settings' => false, 'meta' => array(), 'duplicate_slugs' => 0, ) ); $roles = $preview_data['roles']; $import_settings = ! empty( $preview_data['import_settings'] ); $meta = ! empty( $preview_data['meta'] ) ? $preview_data['meta'] : array(); $duplicate_slugs = ! empty( $preview_data['duplicate_slugs'] ) ? (int) $preview_data['duplicate_slugs'] : 0; $has_conflicts = false; $conflict_count = 0; $current_user_roles = wp_get_current_user()->roles; $default_role = get_option( 'default_role' ); foreach ( $roles as $slug => $role ) { if ( ! empty( $role['conflict'] ) ) { $has_conflicts = true; $conflict_count++; } $roles[ $slug ]['protected'] = ( 'administrator' === $slug || in_array( $slug, $current_user_roles, true ) || $slug === $default_role || ! members_is_role_editable( $slug ) ); } $new_count = count( $roles ) - $conflict_count; ?>

' . number_format_i18n( count( $roles ) ) . '', number_format_i18n( $new_count ), number_format_i18n( $conflict_count ) ); ?>

' . esc_html( $meta['site_url'] ) . '', '' . esc_html( date_i18n( get_option( 'date_format' ), strtotime( $meta['export_date'] ) ) ) . '', esc_html( ! empty( $meta['wp_version'] ) ? $meta['wp_version'] : __( 'unknown', 'members' ) ) ); ?>

0 ) : ?>

$role ) : ?>
0 ) : ?>

add_help_tab( array( 'id' => 'overview', 'title' => esc_html__( 'Overview', 'members' ), 'callback' => array( $this, 'help_tab_overview' ) ) ); // Add screen content help tab. $screen->add_help_tab( array( 'id' => 'screen-content', 'title' => esc_html__( 'Screen Content', 'members' ), 'callback' => array( $this, 'help_tab_screen_content' ) ) ); // Add available actions help tab. $screen->add_help_tab( array( 'id' => 'row-actions', 'title' => esc_html__( 'Available Actions', 'members' ), 'callback' => array( $this, 'help_tab_row_actions' ) ) ); // Add bulk actions help tab. $screen->add_help_tab( array( 'id' => 'bulk-actions', 'title' => esc_html__( 'Bulk Actions', 'members' ), 'callback' => array( $this, 'help_tab_bulk_actions' ) ) ); // Add import/export help tab. $screen->add_help_tab( array( 'id' => 'import-export', 'title' => esc_html__( 'Import / Export', 'members' ), 'callback' => array( $this, 'help_tab_import_export' ) ) ); // Set the help sidebar. $screen->set_help_sidebar( members_get_help_sidebar_text() ); } /** * Overview help tab callback function. * * @since 2.0.0 * @access public * @return void */ public function help_tab_overview() { ?>