Helix_Website/wp-content/plugins/members/addons/members-admin-access/app/class-view-settings.php

193 lines
5.0 KiB
PHP

<?php
/**
* Outputs a custom settings view under "Admin Access" on the Members plugin
* settings page.
*
* @package MembersAdminAccess
* @author Justin Tadlock <justintadlock@gmail.com>
* @copyright Copyright (c) 2018, Justin Tadlock
* @link https://themehybrid.com/plugins/members-admin-access
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
namespace Members\AddOns\AdminAccess;
use Members\Admin\View;
/**
* Sets up and handles the general settings view.
*
* @since 1.0.0
* @access public
*/
class View_Settings extends View {
/**
* Registers the plugin settings.
*
* @since 1.0.0
* @access public
* @return void
*/
function register_settings() {
// Register the setting.
register_setting( 'members_admin_access_settings', 'members_admin_access_settings', array( $this, 'validate_settings' ) );
/* === Settings Sections === */
add_settings_section( 'general', esc_html__( 'Admin Access', 'members' ), array( $this, 'section_general' ), app()->namespace . '/settings' );
/* === Settings Fields === */
add_settings_field( 'select_roles', esc_html__( 'Select Roles', 'members' ), array( $this, 'field_select_roles' ), app()->namespace . '/settings', 'general' );
add_settings_field( 'redirect', esc_html__( 'Redirect', 'members' ), array( $this, 'field_redirect' ), app()->namespace . '/settings', 'general' );
add_settings_field( 'toolbar', esc_html__( 'Toolbar', 'members' ), array( $this, 'field_toolbar' ), app()->namespace . '/settings', 'general' );
}
/**
* Validates the plugin settings.
*
* @since 1.0.0
* @access public
* @param array $input
* @return array
*/
function validate_settings( $settings ) {
// Validate selected roles.
//
// Note that it's possible for `$settings['roles']` to not be set
// when no roles at all are selected.
if ( empty( $settings['roles'] ) ) {
$settings['roles'] = array();
}
foreach ( $settings['roles'] as $key => $role ) {
if ( ! members_role_exists( $role ) )
unset( $settings['roles'][ $key ] );
}
// Escape URLs.
$settings['redirect_url'] = esc_url_raw( $settings['redirect_url'] );
if ( ! $settings['redirect_url'] )
$settings['redirect_url'] = esc_url_raw( home_url() );
// Handle checkboxes.
$settings['disable_toolbar'] = ! empty( $settings['disable_toolbar'] ) ? true : false;
return apply_filters( app()->namespace . '/validate_settings', $settings );
}
/**
* Role/Caps section callback.
*
* @since 1.0.0
* @access public
* @return void
*/
public function section_general() { ?>
<p class="description">
<?php esc_html_e( 'Control admin access by user role.', 'members' ); ?>
</p>
<?php }
/**
* Outputs the field for selecting roles.
*
* @since 1.0.0
* @access public
* @return void
*/
public function field_select_roles() { ?>
<p class="description">
<?php esc_html_e( 'Select which roles should have admin access.', 'members' ); ?>
</p>
<div class="wp-tab-panel">
<ul>
<?php foreach ( members_get_roles() as $role ) :
$disabled = in_array( $role->name, get_roles_with_permanent_access() ); ?>
<li>
<label>
<?php if ( ! $disabled ) : ?>
<input type="checkbox" name="members_admin_access_settings[roles][]" value="<?php echo esc_attr( $role->name ); ?>" <?php checked( role_has_access( $role->name ) ); ?> />
<?php else : ?>
<input readonly="readonly" disabled="disabled" type="checkbox" name="members_admin_access_settings[roles][]" value="<?php echo esc_attr( $role->name ); ?>" <?php checked( role_has_access( $role->name ) ); ?> />
<?php endif; ?>
<?php echo esc_html( $role->label ); ?>
</label>
</li>
<?php endforeach; ?>
</ul>
</div><!-- .wp-tab-panel -->
<?php }
/**
* Outputs the redirect URL field.
*
* @since 1.0.0
* @access public
* @return void
*/
public function field_redirect() { ?>
<p>
<label>
<?php esc_html_e( 'Redirect users without access to:', 'members' ); ?>
<input type="text" name="members_admin_access_settings[redirect_url]" value="<?php echo esc_attr( get_redirect_url() ); ?>" />
</label>
</p>
<?php }
/**
* The toolbar field callback.
*
* @since 1.0.0
* @access public
* @return void
*/
public function field_toolbar() { ?>
<p>
<label>
<input type="checkbox" name="members_admin_access_settings[disable_toolbar]" value="1" <?php checked( disable_toolbar() ); ?> />
<?php esc_html_e( 'Disable toolbar on the front end for users without admin access.', 'members' ); ?>
</label>
</p>
<?php }
/**
* Renders the settings page.
*
* @since 1.0.0
* @access public
* @return void
*/
public function template() { ?>
<form method="post" action="options.php">
<?php settings_fields( 'members_admin_access_settings' ); ?>
<?php do_settings_sections( app()->namespace . '/settings' ); ?>
<?php submit_button( esc_attr__( 'Update Settings', 'members' ), 'primary' ); ?>
</form>
<?php }
}