'POST', 'callback' => [__CLASS__, 'save_settings'], 'permission_callback' => function () { return current_user_can('manage_options'); } ]); } public static function save_settings(WP_REST_Request $request) { $data = $request->get_params(); // Check nonce for security $nonce = $request->get_param('_wpnonce'); if (!$nonce || !wp_verify_nonce($nonce, 'plac_wp_rest')) { return new WP_REST_Response([ 'message' => 'Invalid nonce' ], 403); } // Remove nonce from data to avoid saving it unset($data['_wpnonce']); $access_control_default_options = [ 'global_settings' => [ 'settings' => [ 'enable_access_control' => 1, 'enable_frontend_bar' => 1, ], 'color_customizer' => [ 'bar_background_color' => '#5007aa', 'bar_text_color' => '#ffffff', 'button_color' => '#d1c1ff', 'button_text_color' => '#000000', ], 'permission' => [ 'enable_shop_manager' => 0, ], ], 'more' => [ 'extra' => [ 'enable_delete_plugin_data_on_uninstall' => 0, ], ], ]; if(isset($data['do_reset']) && $data['do_reset']){ update_option('access_control_options',$access_control_default_options); // Reset WP roles self::reset_wp_roles(); return new WP_REST_Response([ 'message' => 'Reset completed successfully', ], 200); } } public static function reset_wp_roles() { $backup = get_option('plac_role_backup'); if ($backup === false) { return array( 'success' => false, 'message' => 'No backup found to restore' ); } // Get WordPress roles $wp_roles = wp_roles(); // Restore each role's capabilities foreach ($backup as $role_name => $capabilities) { // Check if role exists if (!isset($wp_roles->roles[$role_name])) { $failed_roles[] = $role_name; continue; } // Get role object $role = get_role($role_name); // Get all existing capabilities for this role $existing_capabilities = array(); if (isset($wp_roles->roles[$role_name]['capabilities'])) { $existing_capabilities = array_keys($wp_roles->roles[$role_name]['capabilities']); } // Remove all existing capabilities first foreach ($existing_capabilities as $cap) { $role->remove_cap($cap); } // Add the backed up capabilities foreach ($capabilities as $cap => $granted) { if ($granted) { $role->add_cap($cap); } } } } }