{"id":252520,"date":"2025-09-21T02:05:09","date_gmt":"2025-09-21T02:05:09","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/connectsphere\/"},"modified":"2026-08-25T13:19:11","modified_gmt":"2026-08-25T13:19:11","slug":"connectsphere","status":"publish","type":"plugin","link":"https:\/\/sl.wordpress.org\/plugins\/connectsphere\/","author":22011295,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.0","stable_tag":"1.7.0","tested":"7.1","requires":"5.0","requires_php":"8.0","requires_plugins":null,"header_name":"ConnectSphere","header_author":"tlloancy","header_description":"Join online courses with video, audio, chat, and screen sharing via WebRTC.","assets_banners_color":"6799cd","last_updated":"2026-08-25 13:19:11","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/donorbox.org\/wordpress-plugins","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":10,"downloads":894,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.9":{"tag":"1.0.9","author":"tlloancy","date":"2025-09-21 02:04:33"},"1.1.0":{"tag":"1.1.0","author":"tlloancy","date":"2026-01-26 01:49:24"},"1.2.0":{"tag":"1.2.0","author":"tlloancy","date":"2026-04-13 23:59:58"},"1.3.0":{"tag":"1.3.0","author":"tlloancy","date":"2026-04-23 01:34:04"},"1.3.1":{"tag":"1.3.1","author":"tlloancy","date":"2026-04-23 23:56:04"},"1.4.0":{"tag":"1.4.0","author":"tlloancy","date":"2026-04-24 14:30:15"},"1.5.0":{"tag":"1.5.0","author":"tlloancy","date":"2026-04-24 23:30:11"},"1.6.0":{"tag":"1.6.0","author":"tlloancy","date":"2026-05-28 11:50:49"},"1.7.0":{"tag":"1.7.0","author":"tlloancy","date":"2026-08-25 13:19:11"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3365103,"resolution":"256x256","location":"assets","locale":"","width":560,"height":560}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3365103,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"connectsphere\/room":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":2,"name":"connectsphere\/room","title":"ConnectSphere Room","category":"widgets","icon":"video-alt3","description":"Insert the ConnectSphere live video room (same as the [connectsphere_room] shortcode).","keywords":["webrtc","video","janus","classroom"],"textdomain":"connectsphere","supports":{"html":false,"align":["wide","full"]},"editorScript":"connectsphere-block-editor","editorStyle":"connectsphere-block-editor-style"}},"tagged_versions":["1.0.9","1.1.0","1.2.0","1.3.0","1.3.1","1.4.0","1.5.0","1.6.0","1.7.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[5707,5298,222,10939,8025],"plugin_category":[41,50],"plugin_contributors":[232640],"plugin_business_model":[],"class_list":["post-252520","plugin","type-plugin","status-publish","hentry","plugin_tags-chat","plugin_tags-education","plugin_tags-video","plugin_tags-webinar","plugin_tags-webrtc","plugin_category-communication","plugin_category-media","plugin_contributors-tlloancy","plugin_committers-tlloancy"],"banners":{"banner":"https:\/\/ps.w.org\/connectsphere\/assets\/banner-772x250.png?rev=3365103","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/connectsphere\/assets\/icon-256x256.gif?rev=3365103","icon_2x":"https:\/\/ps.w.org\/connectsphere\/assets\/icon-256x256.gif?rev=3365103","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Sending a Zoom or Meet link pulls learners off your course site, breaks your branding, and leaves attendance to a third-party tab. <strong>ConnectSphere<\/strong> embeds a live classroom <em>on your own pages<\/em>: camera, microphone, public and private chat, and screen sharing, using the <a href=\"https:\/\/janus.conf.meetecho.com\/\">Janus WebRTC Gateway<\/a> you control.<\/p>\n\n<p><strong>Who it is for<\/strong><\/p>\n\n<ul>\n<li>Course authors who want a live session inside a lesson page, not a separate meeting URL.<\/li>\n<li>Tutors and training teams who already run WordPress and can host (or commission) a Janus server.<\/li>\n<li>Sites that must keep media on infrastructure they choose (self-hosted gateway + STUN\/TURN).<\/li>\n<\/ul>\n\n<p><strong>What you get in the room<\/strong><\/p>\n\n<ul>\n<li>Video, audio, public chat, private chat, screen sharing<\/li>\n<li>Raise Hand, live participant count, connection-quality bars (RTT + packet loss)<\/li>\n<li>Leave (stops camera\/mic and releases WebRTC resources)<\/li>\n<li>Dark or Light room theme (front-end only)<\/li>\n<li>French translation included<\/li>\n<\/ul>\n\n<p><strong>What this plugin is not<\/strong><\/p>\n\n<p>ConnectSphere is <strong>not<\/strong> a hosted video SaaS. It is a WordPress front-end for <strong>your<\/strong> Janus Videoroom + Textroom. A shared demo gateway is included so you can click around; it is unmonitored and <strong>not<\/strong> for paying students. Production use needs a dedicated Janus server with TLS\/WSS and a TURN server for users behind strict NAT.<\/p>\n\n<p>Insert the room with <code>[connectsphere_room]<\/code> or the <strong>ConnectSphere Room<\/strong> block. Settings live under the ConnectSphere admin menu.<\/p>\n\n<h3>Compatibility<\/h3>\n\n<ul>\n<li>Tested up to WordPress 7.0.<\/li>\n<\/ul>\n\n<h3>New Features<\/h3>\n\n<ul>\n<li><strong>Participant counter<\/strong>: The participants panel now shows a live count of people in the room.<\/li>\n<li><strong>Raise Hand<\/strong>: New button lets participants signal the host. A hand icon (\u270b) appears on the video bubble and in the participant list for all attendees.<\/li>\n<li><strong>Connection quality indicator<\/strong>: Three-bar signal indicator in the control bar, powered by WebRTC <code>getStats()<\/code> (RTT + packet loss).<\/li>\n<li><strong>Light theme<\/strong>: New color theme option in Settings &gt; ConnectSphere &gt; Room Appearance. Dark (default) or Light \u2014 with a live preview in the settings page.<\/li>\n<li><strong>Leave button<\/strong>: Cleanly stops camera\/mic tracks, releases all WebRTC handles, and resets the room state. Previously, leaving was only possible by closing the tab.<\/li>\n<li><strong>Auto-join after create<\/strong>: Creating a room now immediately joins it. No need to click \"Join\" separately.<\/li>\n<\/ul>\n\n<h3>UX &amp; Architecture<\/h3>\n\n<ul>\n<li>Status ticker now spans full width below the control buttons, no longer squeezed to a few pixels.<\/li>\n<li>Join logic extracted into <code>performJoin()<\/code> to eliminate duplicated code between the Create and Join flows.<\/li>\n<li>Professional Janus server installation service documented in FAQ and admin settings page.<\/li>\n<\/ul>\n\n<h3>Bug Fixes &amp; i18n<\/h3>\n\n<ul>\n<li>Fixed missing <code>load_plugin_textdomain()<\/code> \u2014 PHP-side translations now load correctly.<\/li>\n<li>Fixed broken ICE retry paths that referenced undeclared <code>videoroomHandle<\/code> \/ <code>textroomHandle<\/code> variables (now correctly using <code>videoroom<\/code> \/ <code>textroom<\/code>).<\/li>\n<li>Fixed notification sound using a site-root absolute path; now uses the correct plugin URL via <code>connectSphere.plugin_url<\/code>.<\/li>\n<li>Removed dead <code>wp_ajax_connectsphere_join_room<\/code> registration (endpoint was never called from the front-end).<\/li>\n<li>Fixed PHP fatal error risk: apostrophe inside single-quoted string in capabilities check.<\/li>\n<li>All remaining hard-coded French strings in PHP and JS replaced with English base strings wrapped in i18n functions.<\/li>\n<li>Added missing CSS classes: <code>.unread-badge<\/code>, <code>.new-message-highlight<\/code>, <code>.disabled<\/code>, <code>.hand-raised<\/code>.<\/li>\n<li><code>plugin_url<\/code> added to localized JS data; removed unused <code>ajax_url<\/code> \/ <code>nonce<\/code>.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<p>(2026-04-25)<\/p>\n\n<h3>User Experience &amp; Admin Ergonomics<\/h3>\n\n<ul>\n<li><strong>Shortcode Quick-Copy<\/strong>: Added a dedicated \"Usage\" section in the settings page featuring a one-click copy button for the <code>[connectsphere_room]<\/code> shortcode.<\/li>\n<li><strong>Copy Feedback<\/strong>: Integrated a visual \"Copied!\" confirmation using WordPress native Dashicons for a better user experience.<\/li>\n<\/ul>\n\n<h3>Internal Logic &amp; i18n<\/h3>\n\n<ul>\n<li><strong>JS Dependency Update<\/strong>: Added <code>sprintf<\/code> to the <code>wp-i18n<\/code> imports in <code>connectsphere.js<\/code> to support complex dynamic translations.<\/li>\n<\/ul>\n\n<h4>1.4.0 (2026-04-24)<\/h4>\n\n<h3>Internationalization (i18n) &amp; Localization<\/h3>\n\n<ul>\n<li><strong>Full Multilingual Support<\/strong>: Added <code>Domain Path<\/code> for native translation.<\/li>\n<li><strong>wp-i18n Integration<\/strong>: Scripts now explicitly depend on <code>wp-i18n<\/code> for secure string translation.<\/li>\n<li><strong>String Standardization<\/strong>: All UI messages harmonized to English for global compatibility.<\/li>\n<\/ul>\n\n<h3>Improved Resilience &amp; Performance<\/h3>\n\n<ul>\n<li><strong>Aggressive Reconnection Logic<\/strong>: Reduced reconnection timeouts from 15 seconds to <strong>4 seconds<\/strong> for both <code>videoroom<\/code> and <code>textroom<\/code> plugins. This ensures much faster recovery after network drops.<\/li>\n<li><strong>Enhanced Connection Stability<\/strong>: Refined the Janus initialization flow to handle session drops more proactively.<\/li>\n<li><strong>Version Bump<\/strong>: Updated to 1.4.0 to force cache refreshing for all assets.<\/li>\n<\/ul>\n\n<h4>1.3.1 (2026-04-24)<\/h4>\n\n<h3>S\u00e9curit\u00e9 &amp; Stabilit\u00e9<\/h3>\n\n<ul>\n<li><strong>Renforcement de la s\u00e9curit\u00e9 (Nonce)<\/strong> : Correction de la faille de v\u00e9rification des jetons de s\u00e9curit\u00e9 dans l'administration. D\u00e9sormais, les r\u00e9glages sont prot\u00e9g\u00e9s par <code>check_admin_referer<\/code> pour pr\u00e9venir les attaques CSRF.<\/li>\n<li><strong>Optimisation du chargement des scripts<\/strong> : Les fichiers JS (Janus, adapter.js) et CSS ne sont plus charg\u00e9s sur tout le site. Ils sont d\u00e9sormais inject\u00e9s uniquement sur les pages utilisant le shortcode <code>[connectsphere_room]<\/code>, am\u00e9liorant drastiquement les performances du site.<\/li>\n<\/ul>\n\n<h3>Interface &amp; Responsive<\/h3>\n\n<ul>\n<li><strong>Full Responsive Design<\/strong> : Refonte compl\u00e8te du CSS pour mobile et tablette. La grille vid\u00e9o et la barre de contr\u00f4le s'adaptent d\u00e9sormais parfaitement aux petits \u00e9crans.<\/li>\n<li><strong>Z-Index Fix<\/strong> : Ajustement de la profondeur de l'interface pour garantir la visibilit\u00e9 des menus de navigation WordPress au-dessus du salon vid\u00e9o.<\/li>\n<\/ul>\n\n<h4>1.3.0 (2026-04-23)<\/h4>\n\n<h3>UI Overhaul, Ad-Free &amp; CSS Refactoring<\/h3>\n\n<ul>\n<li><strong>Removed all integrated advertisements<\/strong>: Banners and marketing popups are now gone for a 100% professional experience.<\/li>\n<li><strong>New Activity Log Ticker<\/strong>: Replaced intrusive \"Toast\" notifications with a sleek, terminal-style status bar in the control panel.<\/li>\n<li><strong>Cyber-Terminal Aesthetics<\/strong>: Implemented scrolling marquee effects for system messages to prevent blocking the video grid.<\/li>\n<li><strong>CSS Refactoring<\/strong>: Completely reorganized the stylesheet. Cleaned up legacy notification styles and unminified key components for better maintainability.<\/li>\n<li><strong>Layout Stabilization<\/strong>: Fixed the 100vw horizontal overflow bug and optimized control bar responsiveness using modern Flexbox.<\/li>\n<li><strong>Cleanup<\/strong>: Removed unused DOM manipulation logic from the JS core to improve performance.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<h3>Enhanced screen-sharing support with explicit media direction<\/h3>\n\n<ul>\n<li>Replaced generic <code>media: { audio: true, video: true }<\/code> with precise recvonly settings.<\/li>\n<li>Now explicitly sets <code>audioRecv: true<\/code> and <code>videoRecv: true<\/code> while disabling local capture.<\/li>\n<li>Ensures compatibility with system audio during screen sharing.<\/li>\n<li>Follows Janus Gateway's recommended pattern for subscriber answer creation.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>6.9 Ok<\/li>\n<li>A little too much advertisings<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Fixed textroom error (error_code: 422) by adding a 500ms delay for the join request and handling specific retries.<\/li>\n<li>Improved connection management with a 30-second keep-alive interval and progressive retry delays (15s, 30s, 60s).<\/li>\n<li>Public messages are now visible to all participants with username, date, time, and content.<\/li>\n<li>Resolved connection errors (DTLS alert, ICE disconnected) with better handle management.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Fixed textroom errors (error_code: 415) for join and message requests by using textroom.data() to send via the WebRTC data channel.<\/li>\n<li>Public messages are now visible to all participants with username, date, time, and content.<\/li>\n<li>Improved connection error handling (DTLS alert, connection loss) with 15-second reconnection delays.<\/li>\n<li>Resolved PeerConnection errors (error_code: 416) by properly detaching handles.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Fixed textroom errors (error_code: 415) for join and message requests by using the correct format (textroom: 'join', textroom: 'message').<\/li>\n<li>Public messages are now visible to all participants with username, date, time, and content.<\/li>\n<li>Improved connection error handling (DTLS alert, connection loss) with increased reconnection delays to 15 seconds.<\/li>\n<li>Resolved PeerConnection errors (error_code: 416) by properly detaching handles.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed chat issue: public messages are now visible to all participants with username, date, time, and content.<\/li>\n<li>Resolved textroom errors (error_code: 413) by correcting the format of join and message requests.<\/li>\n<li>Improved connection error handling (DTLS alert, connection loss).<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed PHP syntax error in connectsphere.php (line 84).<\/li>\n<li>Improved message handling to include username, date, time, and content.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed chat issue: public messages are now visible to all with username, date, time, and content.<\/li>\n<li>Improved message styles for better readability.<\/li>\n<li>Fixed textroom connection errors (error_code: 415).<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed chat styling for a dark icy background and improved text readability.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added specific CSS styles for the settings page (admin.php?page=connectsphere).<\/li>\n<li>Added dynamic resizing of input fields.<\/li>\n<li>Fixed issue with CSS styles not applying on the settings page.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added STUN\/TURN server configuration in settings.<\/li>\n<li>Improved settings interface with an icy blue theme.<\/li>\n<li>Added an animated background with connected spheres.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with WebRTC, chat, and integrated marketing.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate ConnectSphere from Plugins.<\/li>\n<li>Open <strong>ConnectSphere<\/strong> in the admin menu. Set the Janus URL (<code>wss:\/\/\u2026<\/code>), STUN (<code>stun:\u2026<\/code>), and TURN (<code>turn:\u2026<\/code>) plus TURN credentials.<\/li>\n<li>Pick Dark or Light for the public room.<\/li>\n<li>Add <code>[connectsphere_room]<\/code> to a page, or insert the <strong>ConnectSphere Room<\/strong> block.<\/li>\n<li>On the page: enter a username and room ID, then Create or Join.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20my%20own%20janus%20server%3F\"><h3>Do I need my own Janus server?<\/h3><\/dt>\n<dd><p>Yes for any real audience. The default URL is a shared demo. For live courses you need Janus Gateway (videoroom + textroom), WSS, and usually coturn.<\/p><\/dd>\n<dt id=\"how%20do%20i%20put%20the%20room%20on%20a%20page%3F\"><h3>How do I put the room on a page?<\/h3><\/dt>\n<dd><p>Shortcode <code>[connectsphere_room]<\/code> (same as 1.6.0) or the Gutenberg block <strong>ConnectSphere Room<\/strong>. Both render the same template and load Janus only on that page.<\/p><\/dd>\n<dt id=\"can%20i%20run%20100%20participants%3F\"><h3>Can I run 100 participants?<\/h3><\/dt>\n<dd><p>Janus can, if the <em>server<\/em> has CPU, RAM, and bandwidth. Plan a dedicated VPS (about 2 vCPU \/ 2 GB RAM) once you pass roughly ten concurrent publishers. The WordPress plugin does not magically scale the gateway.<\/p><\/dd>\n<dt id=\"why%20can%E2%80%99t%20some%20users%20connect%3F\"><h3>Why can\u2019t some users connect?<\/h3><\/dt>\n<dd><p>They are likely behind a firewall that blocks peer-to-peer. Configure a working TURN server (not only STUN). URLs must use the <code>stun:<\/code> \/ <code>turn:<\/code> prefixes; Janus must be <code>wss:\/\/<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20match%20the%20room%20to%20a%20light%20site%3F\"><h3>Can I match the room to a light site?<\/h3><\/dt>\n<dd><p>Yes. <strong>ConnectSphere \u2192 Room appearance \u2192 Light<\/strong>. That setting does not restyle wp-admin.<\/p><\/dd>\n<dt id=\"is%20there%20a%20premium%20%2F%20recording%20%2F%20lms%20plugin%3F\"><h3>Is there a Premium \/ recording \/ LMS plugin?<\/h3><\/dt>\n<dd><p>A Pro with recording, waiting room, and LMS hooks is planned, not shipped. Do not expect those features in 1.7.0.<\/p><\/dd>\n<dt id=\"how%20much%20is%20a%20professional%20janus%20install%3F\"><h3>How much is a professional Janus install?<\/h3><\/dt>\n<dd><p>The author offers installation (Janus, coturn, TLS\/WSS, firewall, test) from \u20ac249 on your VPS, or a turnkey package from \u20ac449. See https:\/\/profiles.wordpress.org\/tlloancy\/<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.0<\/h4>\n\n<p>August 25, 2026:\n* Compat: Tested up to WordPress 7.1. Version constant <code>CONNECTSPHERE_VERSION<\/code>.\n* Editor: Gutenberg block <code>connectsphere\/room<\/code> (<code>block.json<\/code>, dynamic render). <code>[connectsphere_room]<\/code> is unchanged. Assets also enqueue when the room is rendered (widgets \/ block themes).\n* Design: Settings screen uses native WordPress admin (<code>form-table<\/code>, <code>.wrap<\/code>, <code>.card<\/code>). Removed ice-blue glow, pulsing background, and floating spheres.\n* Docs: wordpress.org listing rewritten around the real product (self-hosted Janus classroom). <code>docs\/USER-GUIDE.md<\/code> (English) and <code>docs\/MODE-DEMPLOI.md<\/code> (French).\n* The Janus client (<code>assets\/js\/connectsphere.js<\/code>, <code>janus.js<\/code>, <code>adapter.js<\/code>) is not rewritten.<\/p>\n\n<h4>1.6.0<\/h4>\n\n<p>(2026-05-28)<\/p>","raw_excerpt":"Put live video class, chat, and screen sharing on your WordPress site. Students stay on your domain \u2014 you connect a Janus server.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/252520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=252520"}],"author":[{"embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tlloancy"}],"wp:attachment":[{"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=252520"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=252520"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=252520"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=252520"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=252520"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=252520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}