ID)) { continue; } $role = 'Member'; if (isset($user->pivot) && isset($user->pivot->settings)) { $settings = maybe_unserialize($user->pivot->settings); if (is_array($settings)) { if (!empty($settings['is_admin'])) { $role = 'Admin'; } elseif (!empty($settings['is_viewer_only'])) { $role = 'Viewer'; } } } $displayName = isset($user->display_name) ? $user->display_name : ''; $sanitizedUsers[] = [ 'ID' => (int)$user->ID, 'display_name' => $displayName, 'photo' => fluent_boards_user_avatar($user->user_email ?? '', $displayName), 'role' => $role ]; } return $sanitizedUsers; } private static function signature($boardId) { $secret = self::getSecretForBoard($boardId); return hash_hmac('sha256', 'fluent_boards_public_board_' . absint($boardId), $secret); } private static function getSecretForBoard($boardId) { $board = \FluentBoards\App\Models\Board::find($boardId); $perBoardSalt = $board ? $board->getMetaByKey('public_token_salt') : ''; return wp_salt('auth') . $perBoardSalt; } public static function revokeAccessToken($boardId) { $board = \FluentBoards\App\Models\Board::find($boardId); if ($board) { $board->updateMeta('public_token_salt', wp_generate_password(32, true, true)); } } }