user_account in the lobby AJAX call to prevent errors.screenshare_roles shortcode parameter to granularly control who can share their screen[cite: 25].[cite_start]'all' Support: Setting screenshare_roles="all" allows every participant (including guests) to share their screen[cite: 25].[cite_start]Specific Roles: Supports comma-separated role slugs (e.g., screenshare_roles="subscriber,customer")[cite: 25].[cite_start]Presenter Rights: Presenters/Admins always retain screen sharing rights regardless of this setting[cite: 25].screenshare_roles shortcode parameter to granularly control who can share their screen[cite: 25].screenshare_roles="all" allows every participant (including guests) to share their screen[cite: 25].screenshare_roles="subscriber,customer")[cite: 25].wpj_generate_token_callback to receive mic_state and cam_state params and store them securely in the WordPress Transient (mic_enabled, cam_enabled).wpj_generate_token_callback to receive mic_state and cam_state params and store them securely in the WordPress Transient (mic_enabled, cam_enabled).pick_mic_current, pick_cam_current, mute_microphone, disable_camera, etc.) to translations.json.pick_mic_current, pick_cam_current, mute_microphone, disable_camera, etc.) to translations.json.share_roles to screenshare_roles for better clarity and standard naming convention[cite: 27].share_roles to screenshare_roles for better clarity and standard naming convention[cite: 27].wpj_generate_token_callback to calculate can_share status server-side based on the context key and store it in the session[cite: 27].wpj_generate_token_callback to calculate can_share status server-side based on the context key and store it in the session[cite: 27].wpj-lobby.js):Refactored populateDeviceDropdowns to update data-wpj-tooltip attributes instead of button text.Added updateControlTooltip() helper for real-time state feedback.Updated proceedToJoin to capture and send current device states to the server.populateDeviceDropdowns to update data-wpj-tooltip attributes instead of button text.updateControlTooltip() helper for real-time state feedback.proceedToJoin to capture and send current device states to the server.wpj-meetingroom.js):Updated createVideoTask and createAudioTask to respect micEnabled and camEnabled flags from session data.UX Fix: Ensured the "Enable Camera" button remains enabled (.prop('disabled', false)) even if the user enters the room with the camera turned off, allowing them to enable it later.createVideoTask and createAudioTask to respect micEnabled and camEnabled flags from session data..prop('disabled', false)) even if the user enters the room with the camera turned off, allowing them to enable it later.room_title: Sets the welcome title displayed in the lobby (Default: "Meeting Room").display_name: Controls the user naming strategy. Options: Firstname, Lastname, Displayname, Anonym.room_id: Manually overrides the channel name (e.g., for creating a permanent VIP room).presenter_roles: Allows overriding global presenter permissions for a specific room (e.g., presenter_roles="editor,shop_manager").auto_approve: Controls waiting room logic (on/off).room_title: Sets the welcome title displayed in the lobby (Default: "Meeting Room").display_name: Controls the user naming strategy. Options: Firstname, Lastname, Displayname, Anonym.room_id: Manually overrides the channel name (e.g., for creating a permanent VIP room).presenter_roles: Allows overriding global presenter permissions for a specific room (e.g., presenter_roles="editor,shop_manager").auto_approve: Controls waiting room logic (on/off).user_role parameter was missing in the shared asset loader (wpj_load_lobby_assets), causing Admins/Presenters to be treated as guests (forcing them to "Knock") when joining from BuddyBoss tabs or non-standard pages.Resolution: The system now calculates the role server-side using the wpj_get_user_role_status helper and explicitly passes it to the JavaScript settings object in all scenarios.user_role parameter was missing in the shared asset loader (wpj_load_lobby_assets), causing Admins/Presenters to be treated as guests (forcing them to "Knock") when joining from BuddyBoss tabs or non-standard pages.wpj_get_user_role_status helper and explicitly passes it to the JavaScript settings object in all scenarios.presenter_roles).Resolution: The wpj_meetingroom_shortcode function now prioritizes the role stored in the secure Transient (session) over the global settings, ensuring HTML elements match the actual user permissions.presenter_roles).wpj_meetingroom_shortcode function now prioritizes the role stored in the secure Transient (session) over the global settings, ensuring HTML elements match the actual user permissions.wpj_load_lobby_assets() to ensure consistent behavior between standard WP pages and shortcode fallbacks.wpj_load_lobby_assets() to ensure consistent behavior between standard WP pages and shortcode fallbacks.localStorage.Lobby Persistence: Automatically restores the user's previously selected Microphone, Camera, and Speaker upon entering the lobby.Meeting Persistence: Saves any device changes made via the Device Dock during a meeting.Refresh Restoration: When refreshing the meeting room page, the system validates and restores the last active device configuration instead of resetting to defaults.Smart Validation: Added checks to ensure saved device IDs still exist physically (e.g., if a USB mic was unplugged) before attempting to restore them, falling back gracefully if missing.localStorage.wpj-lobby.js):Removed redundant global variable declarations for dropdown elements.Consolidated device population logic into a single, cleaner function with local scoping to prevent variable collisions.