0); // Show success notification showNotification("Saved", $mainToggle); } else { // Show error notification showNotification("Error Saving", $mainToggle, "error"); // Revert the checkbox to its previous state $this.prop("checked", !$this.prop("checked")); } }, error: function() { // Show error notification showNotification("Error Saving", $mainToggle, "error"); // Revert the checkbox to its previous state $this.prop("checked", !$this.prop("checked")); } }); }); // Utility function to show notifications function showNotification(message, $element, type) { type = type || "success"; // Default to success // Find the nearest toggle header for notification placement var $toggleHeader = $element.closest(".wp-allstars-toggle").find(".wp-allstars-toggle-header"); var $label = $toggleHeader.find("label"); var $notification = $("").addClass("wp-setting-notification " + type).text(message); // Remove any existing notifications $toggleHeader.find(".wp-setting-notification").remove(); // Add the notification $label.append($notification); // Remove notification after delay 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(array('message' => 'Invalid nonce')); return; } // Check user capabilities if (!current_user_can('manage_options')) { wp_send_json_error(array('message' => 'Insufficient permissions')); return; } // 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(array('message' => 'Invalid setting')); return; } // Handle the role settings update if ($setting === 'wp_allstars_hide_admin_bar_roles' || $setting === 'wp_allstars_restrict_dashboard_roles') { // Sanitize the array of roles if (is_array($value)) { $value = array_map('sanitize_text_field', $value); } else { $value = array(); } // Update the option $result = update_option($setting, $value); if ($result) { // Also update the corresponding toggle setting for consistency if ($setting === 'wp_allstars_hide_admin_bar_roles') { update_option('wp_allstars_hide_admin_bar', !empty($value) ? 1 : 0); } else if ($setting === 'wp_allstars_restrict_dashboard_roles') { update_option('wp_allstars_restrict_dashboard', !empty($value) ? 1 : 0); } wp_send_json_success(array('message' => 'Setting updated successfully')); } else { wp_send_json_error(array('message' => 'Error Saving')); } } else { wp_send_json_error(array('message' => 'Invalid setting name')); } } /** * 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()); $restrict_dashboard_roles = get_option('wp_allstars_restrict_dashboard_roles', array()); // 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() { // Register the additional toggle settings (matching the working toggle switches format) register_setting('wp_allstars_access', 'wp_allstars_hide_admin_bar'); register_setting('wp_allstars_access', 'wp_allstars_restrict_dashboard'); // Get current settings $hide_admin_bar = get_option('wp_allstars_hide_admin_bar', 0); $restrict_dashboard = get_option('wp_allstars_restrict_dashboard', 0); $hide_admin_bar_roles = get_option('wp_allstars_hide_admin_bar_roles', array()); $restrict_dashboard_roles = get_option('wp_allstars_restrict_dashboard_roles', array()); // Ensure the toggle state matches the role array if (!empty($hide_admin_bar_roles) && !$hide_admin_bar) { update_option('wp_allstars_hide_admin_bar', 1); $hide_admin_bar = 1; } else if (empty($hide_admin_bar_roles) && $hide_admin_bar) { update_option('wp_allstars_hide_admin_bar', 0); $hide_admin_bar = 0; } if (!empty($restrict_dashboard_roles) && !$restrict_dashboard) { update_option('wp_allstars_restrict_dashboard', 1); $restrict_dashboard = 1; } else if (empty($restrict_dashboard_roles) && $restrict_dashboard) { update_option('wp_allstars_restrict_dashboard', 0); $restrict_dashboard = 0; } // Get all available roles $roles = wp_roles()->get_names(); ?>
/>

$role_name): ?>
/>

$role_name): ?>