Subscribe
31 Mar, 2026

[0.2.4.2] - 2026-03-31

Added

  • BuddyBoss Moderator Support: Introduced the `bb_mod_presenter="on"` parameter for the `[wpj_lobby]` shortcode. This allows BuddyBoss Group Moderators to be granted Presenter privileges automatically (Group Organizers remain Presenters by default).
  • Presenter UI Indicator: Added a visual star icon in the Lobby UI next to the user's name to clearly indicate active Presenter status before entering the meeting room.
  • Extensible Shortcode Generator: Implemented the `wpj_shortcode_generator_addons` action hook, enabling external addons (like BuddyBoss) to seamlessly inject custom parameters and UI elements into the core Shortcode Generator without modifying core files.Added sanitization for user_account in the lobby AJAX call to prevent errors.
  • Translation Updates: Added Danish localization for Agora registration instructions and detailed BuddyBoss specific rules within the addon settings.

Changed

  • Screen Share 'All' Logic: Refactored backend permissions to ensure that setting `screenshare_roles="all"` forcefully grants screen sharing capabilities to everyone in the room, explicitly overriding the strict BuddyBoss group hierarchy.

Fixed

  • Context Transient Bug: Fixed a critical data-loss issue in `shortcode.php` where the BuddyBoss `group_id` was saved as `0` in the session transient. This prevented the AJAX token generation from recognizing the BuddyBoss context and incorrectly stripped Moderator permissions.
  • Initial Role Resolution: Fixed missing BuddyBoss parameters in `wpj_enqueue_scripts()` that caused the initial Lobby page load to incorrectly classify Moderators as standard users before the AJAX call.
  • PHP Warning: Resolved an `Undefined variable $meeting_room_url` warning in `jd-wpjointly.php` by properly initializing the variable prior to its conditional execution block.
  • Strict Tab Verification: Improved BuddyBoss integration by adding a `bp_is_current_action()` check. This ensures that meeting room assets and logic are only executed when the user is actively viewing the specific Meeting tab, preventing script conflicts and unnecessary loading on other group tabs like "Members" or "Media".
20 Mar, 2026

[0.2.4.1] - 2026-03-20

Added

  • Registration Info: Added Agora registration and console links to the settings page with translation support (`wpj_t`).
19 Mar, 2026

[0.2.4.0] - 2026-03-19

Added

  • Presenter IDs Parameter:
  • Introduced the `presenter_ids` parameter to the `[wpj_lobby]` shortcode.
  • Functionality: This allows administrators to grant Presenter privileges to specific users based on their exact WordPress User ID (e.g., `presenter_ids="1,15,42"`).
  • Priority: This parameter has the highest priority, overriding all other role-based or global settings.
  • Interactive Shortcode Generator:
  • Added a new administrative submenu (`WP Jointly` -> `Shortcode Generator`).
  • Features: Provides a modern, interactive UI to easily configure meeting room parameters (Room Title, Layout, Display Name, Roles, etc.) and generates a ready-to-use shortcode with a one-click copy function.
  • User Selection Modal: Built-in modal within the generator to search and select users by name or email, automatically fetching and appending their User IDs to the shortcode.
  • Translations Update: Added comprehensive translation keys for the new Shortcode Generator UI to `translations.json`.

Changed

  • Core Role Logic: Refactored `wpj_get_user_role_status()` in `jd-wpjointly.php` to accept and evaluate specific User IDs safely before falling back to WordPress roles, bbPress roles, or global configurations.
  • *Context Data Security: Updated the transient context generation in `shortcode.php` to securely pass the new `presenter_ids` array to the backend token generation API.
30 Jan, 2026

[0.2.3.1] - 2026-01-30

Fixed

  • Role Calculation for Anonymous Users:
  • Issue: Fixed a critical logic flaw where setting `display_name="Anonym"` in the shortcode prevented the User ID from being passed to the backend. This caused logged-in users with valid `presenter_roles` to be downgraded to standard 'user' status (Guest).
  • Resolution: Updated `shortcode.php` to strictly separate the "Display Name" logic from the "User Identity" logic. The system now always injects the authenticated `user_id` into the hidden fields, ensuring that role verification (`wpj_get_user_role_status`) works correctly regardless of the chosen display name strategy.
25 Dec, 2025

[0.2.3.0] - 2025-12-25

Added

  •  Unified Grid Layout:
  • Introduced a new `layout` parameter to the `[wpj_lobby]` shortcode to control the meeting room visual structure.
  • `layout="split"` (Default):** Maintains the classic layout with separate grids for Presenters (Top) and Users (Bottom).
  •  `layout="unified"`: Merges all participants into a single, responsive gallery grid.
  •  Smart Dynamic Sizing (CSS-First):
  •  Implemented modern CSS `:has()` selectors to automatically adjust the Unified Grid columns/rows based on participant count (1-6 users) without relying on complex JavaScript calculations.
  • Adaptive States:
  • 1 User: Full screen (100% height/width).
  • 2 Users: Split 50/50 side-by-side.
  • 3-4 Users: 2x2 Grid.
  • 5-6 Users: 2x3 Grid.
  • 7+ Users: Auto-flow grid with scroll.

Changed

  • Grid Architecture: Refactored `sortAndRouteVideoGrid` logic to support conditional rendering containers (`.wpj_unified-grid` vs `.wpj_presenter-grid`).
  • Shortcode Logic: Updated `wpj_lobby_shortcode` to process and sanitize the new `layout` attribute and pass it securely via Context Transient.
23 Dec, 2025

[0.2.2.7] - 2025-12-23

Fixed

  • Critical BuddyBoss Asset Loading:
  • Issue: Fixed a logic flaw where the plugin aggressively loaded the Lobby scripts (triggering camera/microphone permission requests) on **every** BuddyBoss Group tab (e.g., Members, Discussions), ignoring the configured Meeting Tab.
  • Resolution: Implemented a strict "Gatekeeper" check in `wpj_enqueue_scripts` within the main plugin file.
  • Logic: The system now utilizes `bp_is_current_action()` to strictly verify if the current Tab Slug matches the configured Meeting Tab. Assets are now only enqueued when the user is explicitly on the correct tab, preventing unwanted device requests on other pages.
08 Dec, 2025

[0.2.2.6] - 2025-12-08

Added

  • Audio Level Visualizer:
  • Lobby: Added a real-time audio bar to the video preview, allowing users to verify their microphone input level before joining.
  • Meeting Room (Local): Implemented a zero-latency audio bar for the local user's tile using direct polling logic.
  • Noise Gate: Applied a noise gate (5% threshold) to the local visualizer to prevent background noise (e.g., fans, AC) from triggering the bar animation.
  • Enhanced Debugging System:
  • Upgraded `logDebug()` function in both Lobby and Meeting Room to support optional `title` and `color` parameters.
  • Developers can now categorize logs (e.g., `[WPJ_DEBUG][RTM]`) and color-code them for easier troubleshooting in the browser console.

Changed

  • Speaking Indicator Logic:
  • Hybrid Architecture: Split visualization logic into two streams:
  • Local: Uses high-frequency interval polling (100ms) for smooth, instant feedback on the user's own tile.
  • Remote: Uses Agora's `volume-indicator` event (200ms) for network-efficient updates on other participants.
  • UX Refinement:
  • Remote Users: Now display ONLY the "Speaking" border (Green) when talking. The audio bar is hidden to keep the grid clean.
  • Local User: Now displays ONLY the Audio Bar. The "Speaking" border is removed to reduce visual redundancy.
  •  Sensitivity: Lowered the remote detection threshold (from 10 to 3) to improve responsiveness for soft speech.
03 Dec, 2025

[0.2.2.5] - 2025-12-03

Added

  • Screen Share Permission Control:[cite_start]Implemented 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].
  • [cite_start]Implemented 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].
  • State Persistence (Lobby to Meeting):Seamless Transition: Implemented logic to carry over the user's Microphone (Mute/Unmute) and Camera (On/Off) states from the Lobby to the Meeting Room.Smart Initialization:Camera Off in Lobby: The meeting starts with the camera disabled (no track created to save resources), but the "Enable Camera" button remains active/clickable.Mic Muted in Lobby: The meeting starts with the microphone track muted immediately.Backend Integration: Updated wpj_generate_token_callback to receive mic_state and cam_state params and store them securely in the WordPress Transient (mic_enabledcam_enabled).
  • Seamless Transition: Implemented logic to carry over the user's Microphone (Mute/Unmute) and Camera (On/Off) states from the Lobby to the Meeting Room.
  • Smart Initialization:Camera Off in Lobby: The meeting starts with the camera disabled (no track created to save resources), but the "Enable Camera" button remains active/clickable.Mic Muted in Lobby: The meeting starts with the microphone track muted immediately.
  • Camera Off in Lobby: The meeting starts with the camera disabled (no track created to save resources), but the "Enable Camera" button remains active/clickable.
  • Mic Muted in Lobby: The meeting starts with the microphone track muted immediately.
  • Backend Integration: Updated wpj_generate_token_callback to receive mic_state and cam_state params and store them securely in the WordPress Transient (mic_enabledcam_enabled).
  • Enhanced UI/UX (Lobby):Icon-Only Device Selectors: Redesigned the Lobby device dropdown buttons to be cleaner (Icon only), removing the text labels to save space.Smart Tooltips:Device Info: Moved the active device name to a multi-line tooltip (e.g., "Pick Microphone - current: Default") that appears on hover.Dynamic Controls: Added real-time dynamic tooltips to Mic/Cam buttons that update based on state (e.g., toggling between "Mute microphone" and "Unmute microphone").Localization: Added new translation keys (pick_mic_currentpick_cam_currentmute_microphonedisable_camera, etc.) to translations.json.
  • Icon-Only Device Selectors: Redesigned the Lobby device dropdown buttons to be cleaner (Icon only), removing the text labels to save space.
  • Smart Tooltips:Device Info: Moved the active device name to a multi-line tooltip (e.g., "Pick Microphone - current: Default") that appears on hover.Dynamic Controls: Added real-time dynamic tooltips to Mic/Cam buttons that update based on state (e.g., toggling between "Mute microphone" and "Unmute microphone").
  • Device Info: Moved the active device name to a multi-line tooltip (e.g., "Pick Microphone - current: Default") that appears on hover.
  • Dynamic Controls: Added real-time dynamic tooltips to Mic/Cam buttons that update based on state (e.g., toggling between "Mute microphone" and "Unmute microphone").
  • Localization: Added new translation keys (pick_mic_currentpick_cam_currentmute_microphonedisable_camera, etc.) to translations.json.

Changed

  • Parameter Renaming:[cite_start]Renamed share_roles to screenshare_roles for better clarity and standard naming convention[cite: 27].
  • [cite_start]Renamed share_roles to screenshare_roles for better clarity and standard naming convention[cite: 27].
  • Logic Refinement:[cite_start]Updated wpj_generate_token_callback to calculate can_share status server-side based on the context key and store it in the session[cite: 27].
  • [cite_start]Updated wpj_generate_token_callback to calculate can_share status server-side based on the context key and store it in the session[cite: 27].
  • Lobby Logic (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.
  • 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.
  • Meeting Logic (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.
  • 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.
02 Dec, 2025

[0.2.2.4] - 2025-12-02

Added

  • Enhanced Shortcode Parameters:Added full support for customizing the lobby experience directly via shortcode attributes.room_title: Sets the welcome title displayed in the lobby (Default: "Meeting Room").display_name: Controls the user naming strategy. Options: FirstnameLastnameDisplaynameAnonym.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).
  • Added full support for customizing the lobby experience directly via shortcode attributes.
  • room_title: Sets the welcome title displayed in the lobby (Default: "Meeting Room").
  • display_name: Controls the user naming strategy. Options: FirstnameLastnameDisplaynameAnonym.
  • 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).

Fixed

  • Critical Role Synchronization (BuddyBoss & Fallback):Fixed a logic gap where the 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.
  • Fixed a logic gap where the 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.
  • Meeting Room Button Logic:Fixed an issue where the "Share Screen" button was missing for Presenters who were granted rights via Shortcode Override (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.
  • Fixed an issue where the "Share Screen" button was missing for Presenters who were granted rights via Shortcode Override (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.

Changed

  • Refactored Asset Loading:Centralized lobby asset loading into a shared function wpj_load_lobby_assets() to ensure consistent behavior between standard WP pages and shortcode fallbacks.
  • Centralized lobby asset loading into a shared function wpj_load_lobby_assets() to ensure consistent behavior between standard WP pages and shortcode fallbacks.
01 Dec, 2025

[0.2.2.3] - 2025-12-01

Added

  • Settings Persistence (LocalStorage):Implemented intelligent device memory using browser 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.
  • Implemented intelligent device memory using browser 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.

Refactored

  • Code Cleanup (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.
  • Removed redundant global variable declarations for dropdown elements.
  • Consolidated device population logic into a single, cleaner function with local scoping to prevent variable collisions.