# Changelog
## v4.6.0
# Added

 * Jibri pool, AI features, private sessions, tutoring schedule (v4.6)
 * add chapter headings to AI transcription (#167)
 * top up Jibri pool immediately when a unit goes busy
 * allow students to view AI-generated content (summary, quiz, transcription)
 * add Jibri status monitor for pool recording tracking; fix image forceCreate
 * Jibri pool UI — pool status badges, add/remove VM, pool size control
 * Jibri pool — DB schema, pool management task and provision refactor
 * merge feature/gcp-machine-type into dev
 * add per-server GCP machine type selection with specs
 * AI transcription of GCS recordings with clickable timestamps (#166)
 * show last 10 calls chronologically and missed calls in call.php
 * incoming call polling + Web Push notifications (#171)
 * tutoring schedule for private sessions (#171)
 * show recent call history in call.php (#170)
 * log private session access via Moodle event system (#170)
 * restrict private session link to coursemates; add call.php search page (#170)
 * simplify private sessions - symmetric room, direct access from profile (#170)
# Fixed

 * match Jibri room names when separator is stripped from filename
 * install jibri-monitor.sh from scratch in image-based VM startup script
 * include lib.php in NO_MOODLE_COOKIES callback path
 * use string_sanitize() and default sesionname in jibrirecording callback
 * disable live streaming in configOverwrite using both legacy and current Jitsi key
 * hide recording/streaming buttons while Jibri pool entry is provisioning
 * add defensive guard in process_server for non-GCP/non-Jibri servers
 * disable adhoc task deduplication when provisioning Jibri pool
 * delete all pool Jibris when Jitsi VM is stopped
 * skip Jibri pool management when Jitsi VM is not running
 * stop/start all Jibri pool VMs when stopping/starting the Jitsi server
 * mark pool entry idle immediately when recording finishes
 * reduce jibri-monitor polling interval from 10s to 2s
 * set unique MUC nickname per Jibri VM when booting from image
 * preserve jibri_provisioningstatus=ready when all pool entries are deleted
 * show delete button for Jibri/GCS recordings in adminrecord.php
 * use timecreated instead of timemodified for provisioning timeout check
 * update POOL_ENTRY_ID in baked monitor script when booting from image
 * call jibriready callback from image-based VMs; add provisioning timeout fallback
 * indent jibri-monitor heredoc bodies to satisfy PHP 7.3+ flexible heredoc rules
 * add mkdir -p /etc/jibri before writing delete-token in Jibri startup script
 * use pool status to determine Jibri availability for recording/streaming
 * use GCP instance status instead of Jibri health API port
 * create Jibri base image without stopping the VM
 * merge fix/jibri-automation-banner into dev
 * wrap /opt/google/chrome/chrome not /usr/bin/google-chrome
 * hide Chrome automation infobar in Jibri recordings (#164)
 * delete AI quiz course module when a recording is deleted
 * only open PR when google/apiclient version actually changes
 * only open PR when google/apiclient version actually changes
 * grant moderator role to both participants in private sessions
 * show user names as subject in private session instead of room name
 * use data-bs-dismiss for Bootstrap 5 dismiss button in incoming call modal
 * base64url encoding for push keys; mailto: VAPID subject; push debug logging
 * replace navigator.serviceWorker.ready with per-registration wait
 * add step-by-step status feedback during push subscription flow
 * remove explicit SW scope to support Moodle subdirectory installs
 * improve Web Push error handling and permission flow
 * course headings link to course page in tutoringschedule.php
 * use js_amd_inline for reliable JS loading in tutoringschedule.php
 * use Moodle single_button for back link in tutoringschedule.php
 * use Moodle single_button for tutoring schedule link in call.php
 * code style in call.php
 * code style in jitsi_check_tutoring_availability
 * bump version to avoid downgrade error on dev branch
 * move private sessions setting out of experimental section (#170)
 * disable recording and live streaming in private sessions (#170)
 * redirect to call.php after private session; two-column responsive layout (#170)
 * add missing jitsi-container div to createsessionpriv() (#170)
# Changed

 * add regression test for dot-separator stripping in Jibri filename matching
 * extract jitsi_build_room_name() and add regression tests
 * close issue #163 — Jibri pool with custom GCP image implemented
 * run check_jibri_pool every minute instead of every 5 minutes
 * fix phpcs in lib.php
 * fix phpcs violations in pool task files
 * fix phpcs formatting in servermanagement.php
 * remove global gcp_machine_type admin setting
 * use sparkles emoji for AI Tools header, remove emojis from tab labels
 * fix phpcs spacing in closure and remove duplicate aiquiz string
 * replace stacked AI buttons with accordion + tabs in view_table.php
 * Revert "chore: bump version to v4.5.1 (build 2026041301)" [skip ci]
 * add missing vendor dependencies for minishlink/web-push
 * fix phpcs blank line after opening brace in external_test
 * add unit tests for tutoring schedule, push subscriptions, and incoming call
 * remove debug console.log statements from push init AMD module
 * granular logs inside button click handler
 * add console.log trace to push init flow
 * move tutoring schedule to dedicated page; filter hidden courses
 * document private sessions feature in README
 * close issue on merge to master

---

## v4.5.0
# Added

 * merge dev into master (AI summary and quiz for GCS recordings, phpseclib 3.0.51)
 * AI summary and quiz generation for GCS recordings (#162)
 * add AI true/false quiz generation for GCS recordings
 * add AI summary generation for GCS recordings via Vertex AI Gemini
 * embed GCS recordings inline with <video> tag
 * add Google Storage service files to vendor
 * GCS integration for Jibri recordings with per-server toggle
 * delete physical Jibri recording file when removed from Moodle
 * enable live streaming on GCP servers with Jibri
 * enable live streaming for GCP servers when Jibri is ready
 * show warning badge on Jibri recordings when server may be offline
 * complete Jibri recording integration for GCP servers
 * add optional Jibri recording support for GCP servers (#145)
# Fixed

 * check quiz cmid existence before building buttons so generate button reappears immediately
 * reset ai_quiz_id if quiz cmid no longer exists so generate button reappears
 * set page=1 on all quiz slots so all questions appear on one page
 * hide AI buttons when content already generated; show error state for failed attempts
 * add quiz_sections row required by Moodle to display quiz questions
 * do not set name=null in quiz_grade_items insert (Moodle 5.x column is NOT NULL)
 * create quiz_grade_items entry and set quizgradeitemid in slots (Moodle 4.2+/5.x)
 * increase Vertex AI curl timeout to 300s for larger videos
 * create course module before quiz_slots so context is available for question_references
 * handle Moodle 5.x question_references and quiz_slots schema changes
 * pass course object (not cm) to course_add_cm_to_section
 * capture curl error details for better debugging
 * detect question_bank_entry vs question_bank_entries table (Moodle 4.x vs 5.x)
 * use gs:// URI for Vertex AI video access (handles large files correctly)
 * revert to v1 endpoint without thinkingConfig (worked for id=18)
 * move thinkingConfig inside generationConfig
 * use v1beta1 endpoint and thinkingBudget=0 for gemini-2.5-flash
 * use gemini-2.0-flash for video analysis (2.5-flash is thinking model with different constraints)
 * pass user language when queuing AI summary task
 * generate AI summary in site default language
 * use HTTPS URL instead of gs:// URI for Vertex AI video access
 * use gemini-2.5-flash model name for Vertex AI
 * use gemini-1.5-flash-001 model for broader Vertex AI availability
 * phpcs style fixes in generate_ai_summary task
 * attach compute service account to Jibri VMs so gsutil uses ADC
 * use Moodle file storage credentials for GCS object deletion
 * hide edit button for Jibri and GCS recordings
 * add Storage to apiclient-services and use namespaced class names
 * preserve GCS enable/disable button when JS updates action cell
 * catch invalid JSON token exception in deleterecordyoutube
 * make Jibri recording warning badge more discrete
 * make Jibri recording warning badge more discrete
 * fix PHP heredoc indentation in PYJITSICFG block
 * show Moodle-integrated streaming switch on GCP servers when Jibri ready
 * use Python to apply Jitsi Meet config changes instead of sed
 * add --disable-blink-features=AutomationControlled to suppress Chrome banner
 * suppress Chrome automation banner in Jibri recordings
 * read Jibri external IP dynamically from GCP metadata at recording time
 * add hiddenDomain at top-level config to hide Jibri from participants
 * hide Jibri recorder participant from Jitsi conference view
 * phpcs style fixes in lib.php and servermanagement.php
 * preserve Add Jibri button when JS updates action cell dynamically
 * phpcs style fixes and remove duplicate lang string
# Changed

 * merge master (phpseclib 3.0.51 bump) into dev; resolve version conflict
 * Merge feature/145-gcp-jibri-recording into dev

---

## v4.4.5
# Fixed

 * extract release notes correctly from CHANGES.md [skip ci]
# Changed

 * Merge pull request #165 from SergioComeron/dependabot/composer/api/phpseclib/phpseclib-3.0.51
 * bump phpseclib/phpseclib from 3.0.50 to 3.0.51 in /api
 * reschedule google/apiclient update to 1:00 UTC (3:00 Madrid) [skip ci]
 * remove notify-rebase-needed workflow [skip ci]
 * add stale workflow to auto-close inactive issues [skip ci]

---

## v4.4.4
# Changed

 * Merge pull request #159 from SergioComeron/chore/update-google-apiclient
 * update google/apiclient from v2.19.0 to v2.19.2

---

## v4.4.3
# Fixed

 * upgrade MySQL image to 8.4 for MOODLE_500_STABLE compatibility
# Changed

 * also run CI on push to dev branch

---

## v4.4.2
# Fixed

 * set max_input_vars=5000 for PHP in CI to meet Moodle requirement

---

## v4.4.1
# Fixed

 * install en_AU.UTF-8 locale and remove MOODLE_501_STABLE from CI matrix

---

## v4.4.0
# Added

 * auto-generate CHANGES.md entry on version bump
# Fixed

 * start JVB before Jicofo to prevent bridge unavailable race condition on boot
 * generate config.php via PHP to avoid heredoc indentation issues in CI
 * create moodledata directories before PHPUnit init in CI
 * add config.php creation step before PHPUnit init in CI
 * avoid template literals in YAML workflow to prevent syntax errors
 * sort interface names alphabetically in privacy provider
 * replace echo with mtrace and translate strings to English in cron_task_delete
# Changed

 * also run on pull requests to master
 * add tests for base64url, istimedout, generatecode, isoriginal, jitsi_supports and isdeletable
 * add MySQL to test matrix alongside PostgreSQL
 * test against Moodle 4.5, 5.0 and 5.1 using matrix strategy
 * add more lifecycle tests for timecreated, timemodified, course and independence
 * add lifecycle tests for add, update and delete instance
 * run checks on push to master instead of PRs
 * run checks only on PRs to master, not on every push

---

## v4.3.1
# Changed
 * CI/CD: replace github-tag-action with native git versioning to avoid tag conflicts
 * CI/CD: strip v prefix from plugin release string for moodle.org compatibility

---

## v4.3.0 (2026040501)
# Fixed
 * External invitations redirect to login for unauthenticated users on Moodle 5.0
 * Existing 8x8.vc recordings with no expiry updated via upgrade step
 * GCP server moderation: moderator added to JWT context.user, fix token_owner_party module and server config
 * GCP startup script re-ran on every reboot causing JWT credential mismatch and all users joining as moderators (issue #143)
 * PHP nowdoc indentation error in GCP startup script
 * Compact recording row: remove duplicate date, use Download label for 8x8 links
 * Dropbox config excluded for 8x8 servers and warning shown in settings
 * Room name not passed to Jitsi API for servers without JWT (meet.jit.si, type=0), causing users to land on Jitsi homepage instead of joining the correct room (issue #138)
# Added
 * **External/Dropbox recording link management** (issue #141): manually add and manage recording links for Dropbox and other external providers
 * Automatic recording link capture via Jitsi `recordingLinkAvailable` event for JaaS paid accounts
 * Force 24h expiry for 8x8.vc recording links when no TTL is provided by JaaS
 * Allow Dropbox recording config on JaaS servers
 * Session usage statistics page with date range filtering, monthly chart, top courses/categories, and CSV/Excel download
 * Chat and polls settings toggle
 * Transcription setting toggle
 * GitHub Actions workflow to auto-update google/apiclient
 * **Send user email to Jitsi** (issue #115): new admin setting (disabled by default) to pass the user's Moodle email to the Jitsi JWT. Declared in privacy provider for GDPR compliance.
# Changed
 * Compact single-line layout for non-embedded recording links; date shown as secondary text next to editable name
 * sessionusagestats link moved to top of settings page
 * Improved sessionusagestats UI and queries (monthly breakdown, top categories)
 * google/apiclient minimum version bumped to ^2.19.0
 * Security: updated phpseclib to 3.0.50 and firebase/php-jwt to v7.0.3
 * Remove require_login from formuniversal.php to allow unauthenticated access
 * Add note to README about jitsi-token-moderation-plugin requirement for JWT moderation on self-hosted servers (issue #133)

---

## v4.2.0 (2025012700)
# Fixed
 * Mobile app error
 * Cache error
# Added
 * Add channellast configuration
 * **GCP Auto-Managed Servers**: Create Jitsi servers in Google Cloud Platform with one click
 * Automatic VM provisioning with Debian 12
 * JWT authentication automatically configured
 * Static IP address management (automatic reservation and reuse)
 * Let's Encrypt SSL certificate provisioning
 * Real-time server status monitoring (Running, Stopped, Provisioning, Error)
 * Start/Stop VM instances from Moodle interface to save costs
 * Detailed provisioning progress modal with status updates
 * DNS configuration helper with copy-to-clipboard functionality
 * Automatic cleanup of failed provisioning attempts
 * **Improved Server Management Interface**:
 * Separated views: table view for listing servers, dedicated form view for add/edit
 * "Add new server" button in table view
 * Cancel button in form view for better navigation
 * Clearer visual organization
# Changed
 * Removed "Deprecated" settings section (watermark link and simultaneous cameras)
 * Server management page now shows only relevant content based on action (list or form)
# Limitations
 * ⚠️ **Recording not yet supported** on GCP auto-managed servers
 * Recording and live streaming buttons are disabled on servers created via GCP
 * For recording functionality, use self-hosted servers (Type 1) or 8x8 servers (Type 2)
 * Recording support planned for future releases (v4.3+)

---

## v4.0 ()
# Fixed
 * Code style corrections
 * Some errors in the exception strings.
# Changed
 * Server management. Stores and manages multiple Jitsi servers.
 * Upgrade google api php to 2.18.4.
 * Config parameters migration. 
# Aded
 * Add Google api compute.
 
---

## v3.5 (20025041400)
# Fixed
 * Escape single quotes in the username before creating the session. #134
# Changed
 * Upgrade google api php to 2.18.3
 * data-toggle deprecation
 * deprecation custom-switch
 * deprecation text-right
# Added
 * Course overview integration

## v3.4.13 (2025028601)
# Fixed
  * tokeninvitacion empty when restore.

---

## v3.4.12 (2025021600)
# Fixed
  * Fixes problem with tokeninvitacion
  
  ---

## v3.4.11 (2024120100)
# Fixed
  * Fixes issue where recordings in shared sessions were not displayed in secondary sessions
# Changed
  * New version Google api 2.18.2
  ---

## v3.4.10 (2024111800)
# Changed
  * Now the attendance report has a button to view reports for a specific day
# Fixed
  * Final deprecation of MESSAGE_DEFAULT_LOGGEDOFF / MESSAGE_DEFAULT_LOGGEDIN
  * Fixed problem with timeopen and timeclose on shared sessions

---

## v3.4.9 (2024100900)
## Added
	*	A button is added to generate the list of participants and attended minutes.
	*	A page with graphs and statistics is added.

---

## v3.4.8 (2024092600)
## Fixed
  * Update mod_form.php to add completion rules with suffix based on branch version #128
## Added
  * Add experimental function to share stream with users outside the moodle. 
  * Cache for getminutes functions
## Changed
  * Replace tabs with buttons in view.
---

## v3.4.5 (2024081300)
## Fixed
  * Fix inplace editable recordname in view_table.php #127

## v3.4.4 (2024050900)
## Fixed
  * Fixed problems new recordings table
   
 ---

## v3.4.3 (2024050900)
## Added
 * Breakoutroom options
## Changed
 * Improved adaptation when expanding the window.
 * New Google Api 2.16.0
 
 ---

## v3.4.2 (2024032100)
## Added
 * Attendance user list now linked with user profile
## Fixed
 * Fixes the problem that caused the search filters to not be respected when turning pages.
 * Fix error writing to the database when creating a new jitsi activity when inviteopcions is activated #126
 * Fix the URL is not valid when jitsi_id is first name + lasta name or alias #125
## Changed
 * New function normalizesessionname for normalize session name.

---

## v3.4.1 (2024022800)
### Added
 * Attendance user list now linked with user profile
 * Attendance info show minutes today
### Fixed
 * Fix problem with end date and start date on shared sessions
 * Show acces button on form universal when user is logged
 * Fix problem with search pagination when search with user or recorder filter
### Changed
 * New explication for external link on configuration page
 * Pagination for attendees table

---

## v3.4 (2023020900)
### Added
 * Add user and recorder filter for search recordings
 * Add latency parameter
 * New capability for view records. 
 * Add startwithaudiomuted and startwithvideomuted parameters
### Fixed
 * Private sessions error.
 * Url validation for username.
### Changed
 * New mode for share sessions on courses. Now if you want to share a session between two or more courses you have to copy the token that you will find on the configuration page and enter it in the course where you want to share it.
 * URL link for guest users now is on configuration page. 
 * New Google Api 2.15.3
 * Refactoring doembedable function

---

## v3.3.9 (2023102300)
### Added 
* Show course on search videos page
* Add max participants assistant in search result
* Add log url in error mail
* New set recordings not for kids #122. (Pay attention to this new parameter. Before this update the videos were marked as suitable for children. If you want to continue marking videos with this restriction, please activate this option. By default it is disabled.)
### Fixed
* Delete mod_jitsi_delete_recordsource service from services #121
* Index.php corrections. (visibility, table, etc...)
* Delete title and description for v4.0
* Fix for cross-version compatibility, the $flags parameter should be explicitly set
* Add boostrap video responsive for videos on search page
* Fix redirect to login page when enter with link.
* Fix problem when edit record title
* Fix error with str_replace. Replace numbers.
### Changed
* User on search page is firstname and lastname. Username is on tooltip
* Update records with no participants on recordings on air page
* Add footer for link pages if is loggedin and delete intro for 4
* Order at mod_jitsi_inplace_editable.
* Better presentation videos recording on search page

---

## v3.3.4 (2023062700)
### Added
* Round Robin: Add rotating shift queue for recordings. Recordings are now distributed among all session recordings if they are in the queue.
* Link to user profile on recording search page
* Mail to admin when doembeable get an error
### Fixed
* Fix problem with log error on doembedable function
* delete mod_jitsi_delete_recordsource service from services (#121)
### Changed
* Google api client to 2.15.0
* Search page for recordings now show thumbnails
* Remove heading for better appearence on moodle 4

## v3.3.3 (2023052400)
### Added
* Add page with search recordings for administrators

---

## v3.3.2 (2023050300)
### Added
* Add page with live recordings for administrators
* Recordings are locked by the user who started them. Preventing others from stopping them.
* IMPORTANT: new Scheduled tasks is enabled by default in order to delete recordings that are marked
  as deleted by teachers and new setting are included to set the retention period. Disable this task
  if you prefer to manually delete YouTube recordings.
* New section on settings for news and updates information.
* Max number of participants of a seession recorded is saved in source_record table.

### Fixed
* Fixed url for recordings to delete
* Fixed error with return create_stream function 

### Changed
* Pagination for the "Recordings available to delete" list.
* New view with tabs for recordings, help and participanting resume
* Recordings that don't have a link to the recording are not displayed on the jitsi page
* Google api 2.13.1 version
* Access buton now is primary button
* new getclientgoogleapi function to get the google api client
* Switch to record not visible for users without capability
* Help tab is always visible

---

## v3.3 (2022122300)
### Fixed
* Fix problem with timecreated when it's first time
* Solves problems with the French language.
### Changed
* Improvement in the counting of participants

---

## v3.3 (2022122300)
### Added
* New status field for better error handling in recordings
### Fixed
* Added timeclose and timeopen to coursemodule info
* Fixed validitytime check
### Changed
* New version Google api v.2.13.0

---

## v3.2.18 (2022111900)
### Added
* Whiteboard added
### Fixed
* Fixed double competibility output on view.php for moodles v>311
* Fixes issue where teachers couldn't assign capabilities
* #110 Plugin v.3.2.17 does not work when jitsi_password is configurated
### Changed
* Disables all invite functions from the app
* Embedable value based on youtube response

---

## v3.2.17 (2022110701)
### Added
* Add gues link information in mod_form and view page
* New capabilities deleterecord and editrecordname
### Fixed
* Fixed exception - Call to undefined method admin_settingpage::hide_if() on versions less than 37
* Fixed problems with special characteres for chrome 

---

## v3.2.16 (2022101700)
### Added
* Shows the author of a recording in the deleted list
* Add to log when user press button record, cam, microphone, share desktop and end button
* Send mails to admins when record fails
* Register participating when user logged enter with guest link
### Fixed 
* Removes warning when restoring with user data and no recordings
* When making a local recording, the session is being recorded banner is not displayed
* Remove unrecorded videos from jitsi (scheduled videos coming soon)
* Fixes issue where students were triggering the switch to record at 5 seconds
* Fixed Dom Focused problem when copy to clipboard on chrome
* Enable recording service with latest versions of jitsi 
### Changed
* Better handling of api requests
* Disable Grant Moderator button
* Disabled record button when teacher enter with guest link
 
---

## v3.2.11 (2022070601)
### Added
* When a teacher marks a video as deleted it should be hidden on youtube. #105
### Fixed 
* The message that the session has not started appears wrong when accessing through invite #102
* Jitsis with a lot of recordings takes a long time to load the access page #104 
* get_objectid_mapping function missing when importing logs #106
### Changed
* Data type mismatch in name field of jitsi_record table RDM #107

---

## v3.2.8 (2022061600)
### Added
* New version api google (v2.12.6)
### Fixed 
* Ilegal character with substr function #100
* Missing language string #81

---

## v3.2.7 (2022060100)
### Added
* New version api google (v2.12.4)
* Validate link invitation with startdate #98
* Added compatibility with 8x8 servers
### Changed
* jitsi_channellastcam deprecated

---

## v3.2.5 (2022041800)
### Changed
* Some strings to strings file
### Fixed
* Fixed 'core_completion\cm_completion_details' not found on moodle v<311 #93
* Fixed session with long names records #94

---

## v3.2.4 (2022041800)
### Changed
* Clean code api php Google. Lower size plugin
* Corrections moodle style guideliness
### Fixed
* Fixed destructure property on chrome

---

## v3.2.3 (2022041300)
### Fixed
* Remove mdl prefix in sql userconnected

---

## v3.2.2 (2022041300)

### Added
* Moodle 4.0 compatibility
### Fixed
* Remove mdl prefix in getminutes function

---

## v3.2.0 ()
### Added
* Multi-account support for recordings.
* Notification when the user enters a private session.
* Allows guest users in a session. These guests can be users with a site account or without an account.
* Show the number of participants in a session and show assistance report.
* Add activity completion with number of minutes in a session.
* Better moderation without tokens.
* Allows to hide the Raise Hand Button.
* Jitsi reactions.
* Participants panel.
### Changed
* The recording button is replaced by a switch
* Default cameras now are 15.
* Watermark link now are deprecated.
* Enable as default the jitsi_invitebuttons, jitsifinishandreturn, jitsi_blurbutton, jitsi_reactions and jitsi_shareyoutube options in config.
* Only users with mod/jitsi:record should be able to launch native drop box recordings.
* Better placed introduction text and help text.
* Minutes to acces now apply only for users with moderation capability.
* Update Google Api Client to Version 2.12.1
### Fixed
* Background options 
* Fixed problem mod_jitsi_external::create_link implementation is missing

---

## v3.1.2 (2021090100)
* Add validity time for link invitations

---

## v3.1.2 (2021072300)
* Fixed problem with Google API and https sites
