").addClass("wp-setting-notification"); $label.append($notification); } $notification.text("Saved").removeClass("error").addClass("success"); setTimeout(function() { $notification.fadeOut(300, function() { $(this).remove(); }); }, 2000); } function showErrorNotification($element) { var $label = $element.closest(".wp-allstars-toggle-left").find("label"); var $notification = $label.find(".wp-setting-notification"); if ($notification.length === 0) { $notification = $("").addClass("wp-setting-notification"); $label.append($notification); } $notification.text("Error Saving").removeClass("success").addClass("error"); setTimeout(function() { $notification.fadeOut(300, function() { $(this).remove(); }); }, 2000); } }); '; wp_add_inline_script('wp-allstars-admin', $access_js); } /** * Handle AJAX updates for access settings */ public static function handle_access_setting_update() { // Verify nonce if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'wp-allstars-nonce')) { wp_send_json_error('Invalid nonce'); } // Check user capabilities if (!current_user_can('manage_options')) { wp_send_json_error('Insufficient permissions'); } // Get and validate setting $setting = isset($_POST['setting']) ? sanitize_text_field($_POST['setting']) : ''; $value = isset($_POST['value']) ? $_POST['value'] : ''; if (empty($setting)) { wp_send_json_error('Invalid setting'); } // Handle different setting types switch ($setting) { case 'wp_allstars_hide_admin_bar': update_option('wp_allstars_hide_admin_bar_roles', $value ? array('guest', 'subscriber', 'customer') : array()); break; case 'wp_allstars_restrict_dashboard': update_option('wp_allstars_restrict_dashboard_roles', $value ? array('guest', 'subscriber', 'customer') : array()); break; case 'wp_allstars_hide_admin_bar_roles': case 'wp_allstars_restrict_dashboard_roles': if (is_array($value)) { $value = array_map('sanitize_text_field', $value); update_option($setting, $value); } break; default: wp_send_json_error('Invalid setting name'); } wp_send_json_success(); } /** * Set up access control hooks */ public static function setup_access_control() { // Get current user $user = wp_get_current_user(); if (!$user->exists()) { return; } // Get user roles $user_roles = $user->roles; // Get restricted roles from settings $hide_admin_bar_roles = get_option('wp_allstars_hide_admin_bar_roles', array('guest', 'subscriber', 'customer')); $restrict_dashboard_roles = get_option('wp_allstars_restrict_dashboard_roles', array('guest', 'subscriber', 'customer')); // Check if user's role is in restricted roles $should_hide_admin_bar = array_intersect($user_roles, $hide_admin_bar_roles); $should_restrict_dashboard = array_intersect($user_roles, $restrict_dashboard_roles); // Hide admin bar if needed if (!empty($should_hide_admin_bar)) { add_filter('show_admin_bar', '__return_false'); } // Restrict dashboard access if needed if (!empty($should_restrict_dashboard) && is_admin() && !wp_doing_ajax()) { // Allow access to profile page if (isset($_GET['page']) && $_GET['page'] === 'profile.php') { return; } // Redirect to home page wp_redirect(home_url()); exit; } } /** * Display the access control settings in the advanced tab */ public static function display_access_settings() { // Get current settings $hide_admin_bar_roles = get_option('wp_allstars_hide_admin_bar_roles', array('guest', 'subscriber', 'customer')); $restrict_dashboard_roles = get_option('wp_allstars_restrict_dashboard_roles', array('guest', 'subscriber', 'customer')); // Get all available roles $roles = wp_roles()->get_names(); ?>
$role_name): ?>
$role_name): ?>