$site['id'], 'site_name' => $site['site_name'], 'site_url' => $site['site_url'], 'success' => $response['success'], 'status' => $response['success'] ? ( isset( $response['data']['status'] ) ? $response['data']['status'] : 'created' ) : 'failed', 'message' => $response['success'] ? ( isset( $response['data']['message'] ) ? $response['data']['message'] : 'User created.' ) : $response['error'], ); } return $results; } /** * Delete a user from multiple sites. * * @param string $identifier Email or username of the user to delete. * @param array $site_ids Array of site IDs. * @return array Per-site results. */ public static function delete_user_from_sites( $identifier, $site_ids, $site_users = array() ) { $sites = WPUHM_Site_Manager::get_by_ids( $site_ids ); $results = array(); foreach ( $sites as $site ) { $params = array( 'identifier' => $identifier ); if ( isset( $site_users[ $site['id'] ] ) ) { $params['user_id'] = $site_users[ $site['id'] ]; } $response = WPUHM_API_Client::delete( $site['site_url'], $site['api_key'], 'users/' . urlencode( $identifier ), $params ); $results[] = array( 'site_id' => $site['id'], 'site_name' => $site['site_name'], 'site_url' => $site['site_url'], 'success' => $response['success'], 'status' => $response['success'] ? ( isset( $response['data']['status'] ) ? $response['data']['status'] : 'deleted' ) : 'failed', 'message' => $response['success'] ? ( isset( $response['data']['message'] ) ? $response['data']['message'] : 'User deleted.' ) : $response['error'], ); } return $results; } /** * Update a user on multiple sites. * * @param string $identifier Email or username. * @param array $changes Fields to update (role, email, first_name, last_name, password). * @param array $site_ids Array of site IDs. * @return array Per-site results. */ public static function update_user_on_sites( $identifier, $changes, $site_ids ) { $sites = WPUHM_Site_Manager::get_by_ids( $site_ids ); $results = array(); foreach ( $sites as $site ) { $response = WPUHM_API_Client::put( $site['site_url'], $site['api_key'], 'users/' . urlencode( $identifier ), $changes ); $results[] = array( 'site_id' => $site['id'], 'site_name' => $site['site_name'], 'site_url' => $site['site_url'], 'success' => $response['success'], 'status' => $response['success'] ? 'updated' : 'failed', 'message' => $response['success'] ? ( isset( $response['data']['message'] ) ? $response['data']['message'] : 'User updated.' ) : $response['error'], ); } return $results; } /** * Search for a user across all or selected sites. * * @param string $query Email or username to search. * @param array $site_ids Optional. Specific site IDs to search. Empty = all sites. * @return array Per-site search results. */ public static function search_user_on_sites( $query, $site_ids = array() ) { if ( empty( $site_ids ) ) { $sites = WPUHM_Site_Manager::get_all(); } else { $sites = WPUHM_Site_Manager::get_by_ids( $site_ids ); } $results = array(); foreach ( $sites as $site ) { $response = WPUHM_API_Client::get( $site['site_url'], $site['api_key'], 'users/search', array( 'q' => $query ) ); $results[] = array( 'site_id' => $site['id'], 'site_name' => $site['site_name'], 'site_url' => $site['site_url'], 'success' => $response['success'], 'found' => $response['success'] && isset( $response['data']['found'] ) && $response['data']['found'], 'user' => ( $response['success'] && isset( $response['data']['user'] ) ) ? $response['data']['user'] : null, 'error' => ! $response['success'] ? $response['error'] : null, ); } return $results; } /** * Get all users from all or selected sites. * * @param array $site_ids Optional. Specific site IDs. Empty = all sites. * @return array Aggregated user data. */ public static function get_all_users( $site_ids = array() ) { if ( empty( $site_ids ) ) { $sites = WPUHM_Site_Manager::get_all(); } else { $sites = WPUHM_Site_Manager::get_by_ids( $site_ids ); } $aggregated = array(); // Keyed by email foreach ( $sites as $site ) { $response = WPUHM_API_Client::get( $site['site_url'], $site['api_key'], 'users' ); if ( $response['success'] && isset( $response['data']['users'] ) ) { foreach ( $response['data']['users'] as $user ) { $email = $user['email']; if ( ! isset( $aggregated[ $email ] ) ) { $aggregated[ $email ] = array( 'username' => $user['username'], 'email' => $user['email'], 'first_name' => $user['first_name'], 'last_name' => $user['last_name'], 'display_name' => $user['display_name'], 'sites' => array(), ); } $aggregated[ $email ]['sites'][] = array( 'site_id' => $site['id'], 'site_name' => $site['site_name'], 'site_url' => $site['site_url'], 'role' => $user['role'], 'user_id' => $user['id'], ); } } } // Sort by display name uasort( $aggregated, function( $a, $b ) { return strcasecmp( $a['display_name'], $b['display_name'] ); } ); return array_values( $aggregated ); } }