fix: Accordion and toggle switch behavior - Fix accordion panels to stay open when clicked - Prevent toggle switch from reverting back to 'on' state - Ensure consistent 'Error Saving' message - Fix event propagation issues causing double triggers - Remove redundant event handlers causing yo-yo effect
This commit is contained in:
@ -56,8 +56,16 @@ class WP_Allstars_Access_Manager {
|
|||||||
// Add inline JS for handling settings updates
|
// Add inline JS for handling settings updates
|
||||||
$access_js = '
|
$access_js = '
|
||||||
jQuery(document).ready(function($) {
|
jQuery(document).ready(function($) {
|
||||||
|
// Stop propagation on toggle switches to prevent multiple events
|
||||||
|
$(".wp-toggle-switch").on("click", function(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
|
||||||
// Handle main toggle switches
|
// Handle main toggle switches
|
||||||
$("#wp_allstars_hide_admin_bar, #wp_allstars_restrict_dashboard").on("change", function() {
|
$("#wp_allstars_hide_admin_bar, #wp_allstars_restrict_dashboard").on("change", function(e) {
|
||||||
|
// Stop event propagation to prevent double triggering
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
var $this = $(this);
|
var $this = $(this);
|
||||||
var setting = $this.attr("id");
|
var setting = $this.attr("id");
|
||||||
var value = $this.is(":checked");
|
var value = $this.is(":checked");
|
||||||
@ -94,14 +102,6 @@ class WP_Allstars_Access_Manager {
|
|||||||
} else {
|
} else {
|
||||||
// Clear all role checkboxes when disabled
|
// Clear all role checkboxes when disabled
|
||||||
$settingsArea.find("input[type=checkbox]").prop("checked", false);
|
$settingsArea.find("input[type=checkbox]").prop("checked", false);
|
||||||
// Optionally collapse the section if it was toggled off
|
|
||||||
// Uncomment this if you want the section to collapse when disabled
|
|
||||||
/*
|
|
||||||
if ($header.attr("aria-expanded") === "true") {
|
|
||||||
$header.attr("aria-expanded", "false");
|
|
||||||
$settingsArea.slideUp(200);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
showErrorNotification($this);
|
showErrorNotification($this);
|
||||||
@ -118,7 +118,10 @@ class WP_Allstars_Access_Manager {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Handle role checkbox changes
|
// Handle role checkbox changes
|
||||||
$(".wp-allstars-role-checkbox input").on("change", function() {
|
$(".wp-allstars-role-checkbox input").on("change", function(e) {
|
||||||
|
// Stop event propagation to prevent double triggering
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
var $this = $(this);
|
var $this = $(this);
|
||||||
var $container = $this.closest(".wp-allstars-role-checkboxes");
|
var $container = $this.closest(".wp-allstars-role-checkboxes");
|
||||||
var setting = $container.find("input").first().attr("name");
|
var setting = $container.find("input").first().attr("name");
|
||||||
@ -148,11 +151,11 @@ class WP_Allstars_Access_Manager {
|
|||||||
// Update the main toggle based on role selection
|
// Update the main toggle based on role selection
|
||||||
if (selectedRoles.length > 0) {
|
if (selectedRoles.length > 0) {
|
||||||
$mainToggle.prop("checked", true);
|
$mainToggle.prop("checked", true);
|
||||||
showSavedNotification($mainToggle);
|
|
||||||
} else {
|
} else {
|
||||||
$mainToggle.prop("checked", false);
|
$mainToggle.prop("checked", false);
|
||||||
showSavedNotification($mainToggle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showSavedNotification($this);
|
||||||
} else {
|
} else {
|
||||||
showErrorNotification($this);
|
showErrorNotification($this);
|
||||||
// Revert the checkbox to its previous state
|
// Revert the checkbox to its previous state
|
||||||
@ -204,19 +207,6 @@ class WP_Allstars_Access_Manager {
|
|||||||
});
|
});
|
||||||
}, 2000);
|
}, 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle expandable settings panels
|
|
||||||
$(".wp-allstars-toggle-header").on("click", function() {
|
|
||||||
var $this = $(this);
|
|
||||||
var $settings = $this.closest(".wp-allstars-toggle").find(".wp-allstars-toggle-settings");
|
|
||||||
var isExpanded = $this.attr("aria-expanded") === "true";
|
|
||||||
|
|
||||||
// Toggle aria-expanded attribute
|
|
||||||
$this.attr("aria-expanded", !isExpanded);
|
|
||||||
|
|
||||||
// Toggle settings visibility
|
|
||||||
$settings.slideToggle(200);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
';
|
';
|
||||||
|
|
||||||
@ -229,13 +219,13 @@ class WP_Allstars_Access_Manager {
|
|||||||
public static function handle_access_setting_update() {
|
public static function handle_access_setting_update() {
|
||||||
// Verify nonce
|
// Verify nonce
|
||||||
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'wp-allstars-nonce')) {
|
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'wp-allstars-nonce')) {
|
||||||
wp_send_json_error('Invalid nonce');
|
wp_send_json_error(array('message' => 'Invalid nonce'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check user capabilities
|
// Check user capabilities
|
||||||
if (!current_user_can('manage_options')) {
|
if (!current_user_can('manage_options')) {
|
||||||
wp_send_json_error('Insufficient permissions');
|
wp_send_json_error(array('message' => 'Insufficient permissions'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,23 +234,32 @@ class WP_Allstars_Access_Manager {
|
|||||||
$value = isset($_POST['value']) ? $_POST['value'] : '';
|
$value = isset($_POST['value']) ? $_POST['value'] : '';
|
||||||
|
|
||||||
if (empty($setting)) {
|
if (empty($setting)) {
|
||||||
wp_send_json_error('Invalid setting');
|
wp_send_json_error(array('message' => 'Invalid setting'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle different setting types
|
// Handle different setting types
|
||||||
$result = false;
|
$result = false;
|
||||||
|
|
||||||
switch ($setting) {
|
switch ($setting) {
|
||||||
case 'wp_allstars_hide_admin_bar':
|
case 'wp_allstars_hide_admin_bar':
|
||||||
// When the main toggle is changed, update the roles option
|
// When the main toggle is changed, update the roles option
|
||||||
|
if ($value) {
|
||||||
$default_roles = array('guest', 'subscriber', 'customer');
|
$default_roles = array('guest', 'subscriber', 'customer');
|
||||||
$result = update_option('wp_allstars_hide_admin_bar_roles', $value ? $default_roles : array());
|
$result = update_option('wp_allstars_hide_admin_bar_roles', $default_roles);
|
||||||
|
} else {
|
||||||
|
$result = update_option('wp_allstars_hide_admin_bar_roles', array());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'wp_allstars_restrict_dashboard':
|
case 'wp_allstars_restrict_dashboard':
|
||||||
// When the main toggle is changed, update the roles option
|
// When the main toggle is changed, update the roles option
|
||||||
|
if ($value) {
|
||||||
$default_roles = array('guest', 'subscriber', 'customer');
|
$default_roles = array('guest', 'subscriber', 'customer');
|
||||||
$result = update_option('wp_allstars_restrict_dashboard_roles', $value ? $default_roles : array());
|
$result = update_option('wp_allstars_restrict_dashboard_roles', $default_roles);
|
||||||
|
} else {
|
||||||
|
$result = update_option('wp_allstars_restrict_dashboard_roles', array());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'wp_allstars_hide_admin_bar_roles[]':
|
case 'wp_allstars_hide_admin_bar_roles[]':
|
||||||
@ -280,14 +279,14 @@ class WP_Allstars_Access_Manager {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
wp_send_json_error('Invalid setting name');
|
wp_send_json_error(array('message' => 'Invalid setting name'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result) {
|
if ($result) {
|
||||||
wp_send_json_success(array('message' => 'Setting updated successfully'));
|
wp_send_json_success(array('message' => 'Setting updated successfully'));
|
||||||
} else {
|
} else {
|
||||||
wp_send_json_error(array('message' => 'Failed to save setting'));
|
wp_send_json_error(array('message' => 'Error Saving'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user