'GET', 'callback' => [__CLASS__, 'get_all_roles'], 'permission_callback' => function () { return current_user_can('manage_options'); } ] ]); register_rest_route('plac/v1', '/all-users', [ 'methods' => 'GET', 'callback' => [__CLASS__, 'get_all_user'], 'permission_callback' => function () { return current_user_can('manage_options'); } ]); register_rest_route('plac/v1', '/get-current-primary-role', [ 'methods' => 'POST', 'callback' => [__CLASS__, 'get_current_primary_role'], 'permission_callback' => function () { return current_user_can('manage_options'); } ]); register_rest_route('plac/v1', '/migrate-role', [ 'methods' => 'POST', 'callback' => [__CLASS__, 'migrate_role'], 'permission_callback' => function () { return current_user_can('manage_options'); } ]); } public static function get_all_roles() { global $wp_roles; if (!isset($wp_roles)) { $wp_roles = new WP_Roles(); } $roles = $wp_roles->get_names(); return new WP_REST_Response(['roles' => $roles], 200); } public static function get_all_user() { global $wpdb; $tableName = $wpdb->prefix . "users"; $users = $wpdb->get_results($wpdb->prepare("SELECT display_name FROM $tableName"), ARRAY_A); return new WP_REST_Response($users, 200); } public static function get_user_id_by_display_name($display_name) { $user = get_users([ 'search' => $display_name, 'search_columns' => ['display_name'], 'number' => 1, ]); return !empty($user) ? $user[0]->ID : null; } public static function get_current_primary_role(WP_REST_Request $request) { $data = $request->get_params(); if (!isset($data['_wpnonce']) || !wp_verify_nonce($data['_wpnonce'], 'plac_wp_rest')) { return new WP_REST_Response([ 'message' => 'Invalid nonce' ], 403); } $current_user = $data['user'] ?? null; if (empty($current_user)) { return new WP_REST_Response(['error' => 'User parameter is missing'], 400); } $user_id = self::get_user_id_by_display_name($current_user); if (!$user_id) { return new WP_REST_Response(['error' => 'User not found'], 404); } $user = get_userdata($user_id); if (!$user || empty($user->roles)) { return new WP_REST_Response(['error' => 'No roles found for this user'], 404); } return new WP_REST_Response(['role' => $user->roles[0]], 200); } public static function migrate_role(WP_REST_Request $request) { $data = $request->get_params(); if (!isset($data['_wpnonce']) || !wp_verify_nonce($data['_wpnonce'], 'plac_wp_rest')) { return new WP_REST_Response([ 'message' => 'Invalid nonce' ], 403); } if (isset($data['user']) && isset($data['new_primary_role'])) { $user = $data['user']; $new_primary_role = $data['new_primary_role']; // Handle other_roles parameter safely $other_roles = []; if (isset($data['other_roles'])) { // Convert to array if it's not already $other_roles = is_array($data['other_roles']) ? $data['other_roles'] : [$data['other_roles']]; } $user_id = self::get_user_id_by_display_name($user); if (!$user_id) { return new WP_REST_Response(['error' => 'User not found'], 404); } // Get the WordPress user object - use the fully qualified class name $user_obj = new \WP_User($user_id); // Remove all existing roles $user_obj->set_role(''); // This clears all roles // Add the primary role first $user_obj->add_role($new_primary_role); // Add additional roles if (!empty($other_roles)) { foreach ($other_roles as $role) { if (!empty($role) && $role !== $new_primary_role) { $user_obj->add_role($role); } } } // Clear user caches to ensure roles update correctly clean_user_cache($user_id); return new WP_REST_Response([ 'message' => 'Role migrated successfully', 'primary_role' => $new_primary_role, 'other_roles' => $other_roles ], 200); } return new WP_REST_Response(['error' => 'Missing required parameters'], 400); } }