{"slug": "chamilo-3-0-open-source-lms-with-native-mcp-server-pauth2-1", "title": "Chamilo 3.0 – open-source LMS with native MCP server (PAuth2.1)", "summary": "Chamilo 3.0 has been released as an open-source learning management system with a native MCP server and PAuth2.1 support, according to the project's changelog. The release includes fixes across display, course, document, announcement, and learnpath modules, along with BuyCourses plugin improvements and removal of obsolete settings. The addition of a native MCP server positions the LMS to integrate with AI tooling via the Model Context Protocol.", "body_md": "## What's Changed\n\n- Display: Fix default home welcome visibility by [@christianbeeznest](https://github.com/christianbeeznest) in[#8182](https://github.com/chamilo/chamilo-lms/pull/8182)\n- Course: Fix default home welcome visibility by [@christianbeeznest](https://github.com/christianbeeznest) in[#8184](https://github.com/chamilo/chamilo-lms/pull/8184)\n- Internal: Use Request class instead of superglobals by [@AngelFQC](https://github.com/AngelFQC) in[#8186](https://github.com/chamilo/chamilo-lms/pull/8186)\n- Plugin buycourses2 1 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8188](https://github.com/chamilo/chamilo-lms/pull/8188)\n- Plugin: Improve BuyCourses user service flow, validation and admin UX by [@christianbeeznest](https://github.com/christianbeeznest) in[#8199](https://github.com/chamilo/chamilo-lms/pull/8199)\n- Plugin: wrap all hardcoded UI strings in i18n calls across PHP and TPL files by [@christianbeeznest](https://github.com/christianbeeznest) in[#8200](https://github.com/chamilo/chamilo-lms/pull/8200)\n- Plugin: Fix service-based limits and admin course access by [@christianbeeznest](https://github.com/christianbeeznest) in[#8201](https://github.com/chamilo/chamilo-lms/pull/8201)\n- Document: Restore document.users_copy_files setting in modern Documents and Personal Files by [@christianbeeznest](https://github.com/christianbeeznest) in[#8202](https://github.com/chamilo/chamilo-lms/pull/8202)\n- Admin: Restore admin-only status settings in role-based user forms by [@christianbeeznest](https://github.com/christianbeeznest) in[#8204](https://github.com/chamilo/chamilo-lms/pull/8204)\n- Document: Use Symfony cache directory for temporary copy files by [@christianbeeznest](https://github.com/christianbeeznest) in[#8205](https://github.com/chamilo/chamilo-lms/pull/8205)\n- Admin: Implement career and promotion support in global agenda events  (setting allow_careers_in_global_agenda) by [@christianbeeznest](https://github.com/christianbeeznest) in[#8206](https://github.com/chamilo/chamilo-lms/pull/8206)\n- Announcement: restore course_announcement_scheduled_by_date support by [@christianbeeznest](https://github.com/christianbeeznest) in[#8207](https://github.com/chamilo/chamilo-lms/pull/8207)\n- Announcement: remove obsolete anonymous global visibility setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8208](https://github.com/chamilo/chamilo-lms/pull/8208)\n- Migration: Remove obsolete setting hide_global_announcements_when_not… by [@christianbeeznest](https://github.com/christianbeeznest) in[#8209](https://github.com/chamilo/chamilo-lms/pull/8209)\n- Settings: remove obsolete settings and legacy mappings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8210](https://github.com/chamilo/chamilo-lms/pull/8210)\n- Plugin: Fix BuyCourses course access and service limit flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8211](https://github.com/chamilo/chamilo-lms/pull/8211)\n- Learnpath: Reuse canonical learning_path folder by [@christianbeeznest](https://github.com/christianbeeznest) in[#8212](https://github.com/chamilo/chamilo-lms/pull/8212)\n- Internal: Avoid mkdir warning when Serializer cache already exists by [@christianbeeznest](https://github.com/christianbeeznest) in[#8214](https://github.com/chamilo/chamilo-lms/pull/8214)\n- Learnpath: Disable forced SCORM debug logging by [@christianbeeznest](https://github.com/christianbeeznest) in[#8215](https://github.com/chamilo/chamilo-lms/pull/8215)\n- Internal: Use course locale only for requests with course context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8216](https://github.com/chamilo/chamilo-lms/pull/8216)\n- User: Respect open course access setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8217](https://github.com/chamilo/chamilo-lms/pull/8217)\n- Learnpath: Fix LP files tab hierarchy flag by [@christianbeeznest](https://github.com/christianbeeznest) in[#8247](https://github.com/chamilo/chamilo-lms/pull/8247)\n- Internal: Wire finished reminder setting to cron command by [@christianbeeznest](https://github.com/christianbeeznest) in[#8251](https://github.com/chamilo/chamilo-lms/pull/8251)\n- Internal: Restore homepage course categories setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8253](https://github.com/chamilo/chamilo-lms/pull/8253)\n- Internal: Restore core editor settings support in TinyMCE by [@christianbeeznest](https://github.com/christianbeeznest) in[#8271](https://github.com/chamilo/chamilo-lms/pull/8271)\n- Migration: Add V210 migrations path for 2.1 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8272](https://github.com/chamilo/chamilo-lms/pull/8272)\n- Internal: Remove dead legacy redirect_after_login logic by [@christianbeeznest](https://github.com/christianbeeznest) in[#8273](https://github.com/chamilo/chamilo-lms/pull/8273)\n- Dropbox: Restore dropbox mailing option in modern Vue flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8274](https://github.com/chamilo/chamilo-lms/pull/8274)\n- Exercise: Restore exercise settings behavior in legacy quiz flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8281](https://github.com/chamilo/chamilo-lms/pull/8281)\n- Forum: Restore forum settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8283](https://github.com/chamilo/chamilo-lms/pull/8283)\n- Learnpath: Make LP document folders collapsible by [@christianbeeznest](https://github.com/christianbeeznest) in[#8284](https://github.com/chamilo/chamilo-lms/pull/8284)\n- Course: Support categorized course settings safely by [@christianbeeznest](https://github.com/christianbeeznest) in[#8288](https://github.com/chamilo/chamilo-lms/pull/8288)\n- Gradebook: Restore gradebook settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8289](https://github.com/chamilo/chamilo-lms/pull/8289)\n- Language: Restore language settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8290](https://github.com/chamilo/chamilo-lms/pull/8290)\n- Internal: Restore mail settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8291](https://github.com/chamilo/chamilo-lms/pull/8291)\n- Message: Restore session message timeframe setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8292](https://github.com/chamilo/chamilo-lms/pull/8292)\n- User: Restore password reminder and chat profile settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8293](https://github.com/chamilo/chamilo-lms/pull/8293)\n- User: Restore registration settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8294](https://github.com/chamilo/chamilo-lms/pull/8294)\n- Internal: Restore webservice API key settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8295](https://github.com/chamilo/chamilo-lms/pull/8295)\n- Internal: Restore external webservice settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8296](https://github.com/chamilo/chamilo-lms/pull/8296)\n- User: Restore user workflow settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8305](https://github.com/chamilo/chamilo-lms/pull/8305)\n- User: Restore skill assignment notification setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8306](https://github.com/chamilo/chamilo-lms/pull/8306)\n- User: Restore skill badge notifications by [@christianbeeznest](https://github.com/christianbeeznest) in[#8307](https://github.com/chamilo/chamilo-lms/pull/8307)\n- User: Restore security settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8310](https://github.com/chamilo/chamilo-lms/pull/8310)\n- Internal: Restore custom platform settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8324](https://github.com/chamilo/chamilo-lms/pull/8324)\n- Document: Consolidate API document downloads by [@christianbeeznest](https://github.com/christianbeeznest) in[#8325](https://github.com/chamilo/chamilo-lms/pull/8325)\n- Session: Restore legacy session settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8327](https://github.com/chamilo/chamilo-lms/pull/8327)\n- Learnpath: Restore LP availability visibility and prerequisite settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8329](https://github.com/chamilo/chamilo-lms/pull/8329)\n- Learnpath: Restore SCORM legacy settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8332](https://github.com/chamilo/chamilo-lms/pull/8332)\n- Learnpath: Restore legacy learning path settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8333](https://github.com/chamilo/chamilo-lms/pull/8333)\n- Course: Restore per-tool course introduction by [@christianbeeznest](https://github.com/christianbeeznest) in[#8336](https://github.com/chamilo/chamilo-lms/pull/8336)\n- Course: Restore tools shortcuts by [@christianbeeznest](https://github.com/christianbeeznest) in[#8337](https://github.com/chamilo/chamilo-lms/pull/8337)\n- Admin: Hide disabled settings in sub-URLs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8338](https://github.com/chamilo/chamilo-lms/pull/8338)\n- Assignment: Implement my_courses_show_pending_work setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8339](https://github.com/chamilo/chamilo-lms/pull/8339)\n- Internal: Apply webservice API key settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8340](https://github.com/chamilo/chamilo-lms/pull/8340)\n- Internal: Apply session SameSite setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8341](https://github.com/chamilo/chamilo-lms/pull/8341)\n- User: Apply profile address setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8342](https://github.com/chamilo/chamilo-lms/pull/8342)\n- Learnpath: Apply video context menu setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8343](https://github.com/chamilo/chamilo-lms/pull/8343)\n- Course: Keep course home intro always available by [@christianbeeznest](https://github.com/christianbeeznest) in[#8344](https://github.com/chamilo/chamilo-lms/pull/8344)\n- Exercise: Implement pending exercise attempts list for MyCourses by [@christianbeeznest](https://github.com/christianbeeznest) in[#8345](https://github.com/chamilo/chamilo-lms/pull/8345)\n- Exercise: Add keep-alive ping during exercise attempts by [@christianbeeznest](https://github.com/christianbeeznest) in[#8346](https://github.com/chamilo/chamilo-lms/pull/8346)\n- Exercise: Apply session filter setting to pending tests by [@christianbeeznest](https://github.com/christianbeeznest) in[#8347](https://github.com/chamilo/chamilo-lms/pull/8347)\n- Learnpath: Restore learning path flow setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8348](https://github.com/chamilo/chamilo-lms/pull/8348)\n- Session: Allow base course teachers to view session assignments by [@christianbeeznest](https://github.com/christianbeeznest) in[#8349](https://github.com/chamilo/chamilo-lms/pull/8349)\n- Document: Support group document quota setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8350](https://github.com/chamilo/chamilo-lms/pull/8350)\n- User: Enforce prevent_multiple_simultaneous_login on Symfony login by [@christianbeeznest](https://github.com/christianbeeznest) in[#8353](https://github.com/chamilo/chamilo-lms/pull/8353)\n- Admin: Allow admins to clear user active sessions - refs [#3405](https://github.com/chamilo/chamilo-lms/issues/3405) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8354](https://github.com/chamilo/chamilo-lms/pull/8354)\n- Course: Fix course creation capability pre-check fallback by [@christianbeeznest](https://github.com/christianbeeznest) in[#8356](https://github.com/chamilo/chamilo-lms/pull/8356)\n- Course: Apply max courses per user to course creation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8357](https://github.com/chamilo/chamilo-lms/pull/8357)\n- Course: Improve course tool shortcuts visibility setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8358](https://github.com/chamilo/chamilo-lms/pull/8358)\n- Course: Add teacher badge to course cards by [@christianbeeznest](https://github.com/christianbeeznest) in[#8359](https://github.com/chamilo/chamilo-lms/pull/8359)\n- Admin: Fix tab persistence in user list by [@ywarnier](https://github.com/ywarnier) in[#8355](https://github.com/chamilo/chamilo-lms/pull/8355)\n- Document: Restore cloud link support by [@christianbeeznest](https://github.com/christianbeeznest) in[#8362](https://github.com/chamilo/chamilo-lms/pull/8362)\n- Document: Restore editable comments by [@christianbeeznest](https://github.com/christianbeeznest) in[#8364](https://github.com/chamilo/chamilo-lms/pull/8364)\n- Auth: LDAP: enable extra field synchronisation - refs BT#22093 by [@NicoDucou](https://github.com/NicoDucou) in[#8370](https://github.com/chamilo/chamilo-lms/pull/8370)\n- Auth: Ldap: enable the use of ldaps configuration -refs BT#22093 by [@NicoDucou](https://github.com/NicoDucou) in[#8371](https://github.com/chamilo/chamilo-lms/pull/8371)\n- Tracking: Restore compact skill layout - refs BT#23429 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8375](https://github.com/chamilo/chamilo-lms/pull/8375)\n- Plugin: Complete BuyCourses recurring services and VAT handling by [@christianbeeznest](https://github.com/christianbeeznest) in[#8374](https://github.com/chamilo/chamilo-lms/pull/8374)\n- Plugin: Persist BuyCourses course creation display flag by [@christianbeeznest](https://github.com/christianbeeznest) in[#8376](https://github.com/chamilo/chamilo-lms/pull/8376)\n- Internal: Prevent autofocus on sortable pagination forms - refs BT#23432 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8377](https://github.com/chamilo/chamilo-lms/pull/8377)\n- Display: Improve course and session picture management - refs [#8331](https://github.com/chamilo/chamilo-lms/issues/8331) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8379](https://github.com/chamilo/chamilo-lms/pull/8379)\n- Admin: Add admin password strength checker - refs [#8077](https://github.com/chamilo/chamilo-lms/issues/8077) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8380](https://github.com/chamilo/chamilo-lms/pull/8380)\n- User: Restore first login password change - refs [#8078](https://github.com/chamilo/chamilo-lms/issues/8078) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8381](https://github.com/chamilo/chamilo-lms/pull/8381)\n- User: Fix password escaping in user emails - refs [#6963](https://github.com/chamilo/chamilo-lms/issues/6963) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8382](https://github.com/chamilo/chamilo-lms/pull/8382)\n- Glossary: Generate glossary terms from documents - refs [#8079](https://github.com/chamilo/chamilo-lms/issues/8079) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8383](https://github.com/chamilo/chamilo-lms/pull/8383)\n- Glossary: Improve glossary export downloads - refs [#8080](https://github.com/chamilo/chamilo-lms/issues/8080) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8384](https://github.com/chamilo/chamilo-lms/pull/8384)\n- Course: Add selected text context to AI chat - refs [#7372](https://github.com/chamilo/chamilo-lms/issues/7372) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8385](https://github.com/chamilo/chamilo-lms/pull/8385)\n- Glossary: Exclude existing terms when generating through AI - refs [#8372](https://github.com/chamilo/chamilo-lms/issues/8372) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8386](https://github.com/chamilo/chamilo-lms/pull/8386)\n- Search: Improve search result thumbnails - refs [#7268](https://github.com/chamilo/chamilo-lms/issues/7268) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8387](https://github.com/chamilo/chamilo-lms/pull/8387)\n- Survey: Fix survey question option layout - refs [#6450](https://github.com/chamilo/chamilo-lms/issues/6450) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8388](https://github.com/chamilo/chamilo-lms/pull/8388)\n- User: Add crop and delete for profile photo - refs [#5547](https://github.com/chamilo/chamilo-lms/issues/5547) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8389](https://github.com/chamilo/chamilo-lms/pull/8389)\n- Exercise: Add answer feedback to more question types - refs [#2044](https://github.com/chamilo/chamilo-lms/issues/2044) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8391](https://github.com/chamilo/chamilo-lms/pull/8391)\n- User: Delete assignment files with users - refs [#2596](https://github.com/chamilo/chamilo-lms/issues/2596) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8392](https://github.com/chamilo/chamilo-lms/pull/8392)\n- Social: Show friends posts on social wall - refs [#2677](https://github.com/chamilo/chamilo-lms/issues/2677) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8393](https://github.com/chamilo/chamilo-lms/pull/8393)\n- Learnpath: Accept SCORM score after completed - refs [#4595](https://github.com/chamilo/chamilo-lms/issues/4595) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8394](https://github.com/chamilo/chamilo-lms/pull/8394)\n- Gradebook: Improve gradebook score input layout - refs [#8081](https://github.com/chamilo/chamilo-lms/issues/8081) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8395](https://github.com/chamilo/chamilo-lms/pull/8395)\n- Course: Add course tracking activity reports - refs [#2239](https://github.com/chamilo/chamilo-lms/issues/2239) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8396](https://github.com/chamilo/chamilo-lms/pull/8396)\n- Course: Track direct course resource access - refs [#7939](https://github.com/chamilo/chamilo-lms/issues/7939) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8397](https://github.com/chamilo/chamilo-lms/pull/8397)\n- Admin: Move activities audit to security block - refs [#7322](https://github.com/chamilo/chamilo-lms/issues/7322) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8398](https://github.com/chamilo/chamilo-lms/pull/8398)\n- Tracking: Add reports registry framework - refs [#7325](https://github.com/chamilo/chamilo-lms/issues/7325) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8399](https://github.com/chamilo/chamilo-lms/pull/8399)\n- Admin: Complete reports registry cleanup - refs [#7325](https://github.com/chamilo/chamilo-lms/issues/7325) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8400](https://github.com/chamilo/chamilo-lms/pull/8400)\n- Ticket: Prevent autofocus on ticket reply form - refs BT#23432 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8401](https://github.com/chamilo/chamilo-lms/pull/8401)\n- Skill: Add certificate search and skills menu links - refs [#7629](https://github.com/chamilo/chamilo-lms/issues/7629) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8404](https://github.com/chamilo/chamilo-lms/pull/8404)\n- Bug : when reload page on quiz attempt, radio checked input are not displayed has checked. by [@chamilo-uga](https://github.com/chamilo-uga) in[#8402](https://github.com/chamilo/chamilo-lms/pull/8402)\n- Internal: Fix installer database password maxlength - refs [#6915](https://github.com/chamilo/chamilo-lms/issues/6915) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8407](https://github.com/chamilo/chamilo-lms/pull/8407)\n- Exercise: Fix course copy quiz question category settings - refs [#2351](https://github.com/chamilo/chamilo-lms/issues/2351) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8408](https://github.com/chamilo/chamilo-lms/pull/8408)\n- Group: Fix group auto-fill duplicate users - refs [#2517](https://github.com/chamilo/chamilo-lms/issues/2517) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8409](https://github.com/chamilo/chamilo-lms/pull/8409)\n- Agenda: Fix agenda event time selection - refs [#8086](https://github.com/chamilo/chamilo-lms/issues/8086) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8410](https://github.com/chamilo/chamilo-lms/pull/8410)\n- Session: Reimplement session result move tool - refs [#7435](https://github.com/chamilo/chamilo-lms/issues/7435) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8411](https://github.com/chamilo/chamilo-lms/pull/8411)\n- Attendance: Reimplement official code settings in C2 - refs [#7498](https://github.com/chamilo/chamilo-lms/issues/7498) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8412](https://github.com/chamilo/chamilo-lms/pull/8412)\n- Document: Add TinyMCE document autosave drafts - refs [#2663](https://github.com/chamilo/chamilo-lms/issues/2663) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8413](https://github.com/chamilo/chamilo-lms/pull/8413)\n- Course: Add support for language in resources - resf [#7244](https://github.com/chamilo/chamilo-lms/issues/7244) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8414](https://github.com/chamilo/chamilo-lms/pull/8414)\n- Internal: Fix mail template saving - resf [#2941](https://github.com/chamilo/chamilo-lms/issues/2941) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8415](https://github.com/chamilo/chamilo-lms/pull/8415)\n- Usergroup: Migrate interfaces to Vue by [@ywarnier](https://github.com/ywarnier) in[#8416](https://github.com/chamilo/chamilo-lms/pull/8416)\n- Search: Add Xapian extraction for modern office files - resf [#7267](https://github.com/chamilo/chamilo-lms/issues/7267) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8417](https://github.com/chamilo/chamilo-lms/pull/8417)\n- Search: Add AI media extraction to Xapian indexing - resf [#7269](https://github.com/chamilo/chamilo-lms/issues/7269) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8418](https://github.com/chamilo/chamilo-lms/pull/8418)\n- Document: Add SVG drawing editor to documents - refs [#8282](https://github.com/chamilo/chamilo-lms/issues/8282) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8420](https://github.com/chamilo/chamilo-lms/pull/8420)\n- Learnpath: Improve LP video next step overlay  - refs [#2668](https://github.com/chamilo/chamilo-lms/issues/2668) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8421](https://github.com/chamilo/chamilo-lms/pull/8421)\n- Learnpath: Improve learning path style - refs [#7534](https://github.com/chamilo/chamilo-lms/issues/7534) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8422](https://github.com/chamilo/chamilo-lms/pull/8422)\n- Course: Add AI course analyzer proof of concept - refs [#7310](https://github.com/chamilo/chamilo-lms/issues/7310) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8424](https://github.com/chamilo/chamilo-lms/pull/8424)\n- Plugin: Check OpenSSL availability for IMS/LTI keys - refs [#7294](https://github.com/chamilo/chamilo-lms/issues/7294) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8425](https://github.com/chamilo/chamilo-lms/pull/8425)\n- Internal: Add NProgress for SPA route loading - refs [#8142](https://github.com/chamilo/chamilo-lms/issues/8142) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8426](https://github.com/chamilo/chamilo-lms/pull/8426)\n- Course: Show course categories on Vue homepage - refs [#5201](https://github.com/chamilo/chamilo-lms/issues/5201) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8427](https://github.com/chamilo/chamilo-lms/pull/8427)\n- Admin: Add usergroup members preview page - refs [#6395](https://github.com/chamilo/chamilo-lms/pull/6395) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8428](https://github.com/chamilo/chamilo-lms/pull/8428)\n- Learnpath: Add advanced learning path access by date - refs [#6346](https://github.com/chamilo/chamilo-lms/issues/6346) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8429](https://github.com/chamilo/chamilo-lms/pull/8429)\n- Course: Fix class-linked course group synchronization - refs [#5774](https://github.com/chamilo/chamilo-lms/issues/5774) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8430](https://github.com/chamilo/chamilo-lms/pull/8430)\n- Usergroup: Improve class group course synchronization - refs [#1710](https://github.com/chamilo/chamilo-lms/issues/1710) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8431](https://github.com/chamilo/chamilo-lms/pull/8431)\n- Plugin: Differentiate commercial plugins in admin - refs [#7323](https://github.com/chamilo/chamilo-lms/issues/7323) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8432](https://github.com/chamilo/chamilo-lms/pull/8432)\n- Social: Fix social group images in search results by [@christianbeeznest](https://github.com/christianbeeznest) in[#8433](https://github.com/chamilo/chamilo-lms/pull/8433)\n- Internal: Handle expired sessions in Tour AJAX by [@christianbeeznest](https://github.com/christianbeeznest) in[#8434](https://github.com/chamilo/chamilo-lms/pull/8434)\n- Internal: Handle invalid course context in CidReqListener by [@christianbeeznest](https://github.com/christianbeeznest) in[#8435](https://github.com/chamilo/chamilo-lms/pull/8435)\n- Internal: Fix quarterly statistics AJAX loading by [@christianbeeznest](https://github.com/christianbeeznest) in[#8436](https://github.com/chamilo/chamilo-lms/pull/8436)\n- Plugin: Adapt Zoom plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8439](https://github.com/chamilo/chamilo-lms/pull/8439)\n- Plugin: Adapt MaintenanceMode plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8440](https://github.com/chamilo/chamilo-lms/pull/8440)\n- Plugin: Improve plugin list filters by [@christianbeeznest](https://github.com/christianbeeznest) in[#8441](https://github.com/chamilo/chamilo-lms/pull/8441)\n- Plugin: Adapt Redirection plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8442](https://github.com/chamilo/chamilo-lms/pull/8442)\n- Plugin: Add verified plugin list filter by [@christianbeeznest](https://github.com/christianbeeznest) in[#8443](https://github.com/chamilo/chamilo-lms/pull/8443)\n- Learnpath: Restore AI study helper for LP documents by [@christianbeeznest](https://github.com/christianbeeznest) in[#8445](https://github.com/chamilo/chamilo-lms/pull/8445)\n- Plugin: Implement TopLinks course shortcuts integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8446](https://github.com/chamilo/chamilo-lms/pull/8446)\n- Plugin: Avoid BuyCourses table lookup before plugin install by [@christianbeeznest](https://github.com/christianbeeznest) in[#8447](https://github.com/chamilo/chamilo-lms/pull/8447)\n- Course: Enhance AI course analyzer with lesson context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8448](https://github.com/chamilo/chamilo-lms/pull/8448)\n- Document: Make document autosave drafts collapsible by [@christianbeeznest](https://github.com/christianbeeznest) in[#8449](https://github.com/chamilo/chamilo-lms/pull/8449)\n- Plugin: Fix Zoom course meeting invitation flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8451](https://github.com/chamilo/chamilo-lms/pull/8451)\n- Course: Improve resource language advanced settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8452](https://github.com/chamilo/chamilo-lms/pull/8452)\n- Plugin: Harden ExternalNotificationConnect plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8453](https://github.com/chamilo/chamilo-lms/pull/8453)\n- Plugin: Adapt CourseHomeNotify to course home by [@christianbeeznest](https://github.com/christianbeeznest) in[#8456](https://github.com/chamilo/chamilo-lms/pull/8456)\n- Plugin: Adapt CourseLegal course agreement flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8458](https://github.com/chamilo/chamilo-lms/pull/8458)\n- Plugin: Update Static plugin compatibility by [@christianbeeznest](https://github.com/christianbeeznest) in[#8461](https://github.com/chamilo/chamilo-lms/pull/8461)\n- Plugin: Integrate ShowUserInfo plugin by [@christianbeeznest](https://github.com/christianbeeznest) in[#8466](https://github.com/chamilo/chamilo-lms/pull/8466)\n- Plugin: Integrate StudentFollowUp plugin by [@christianbeeznest](https://github.com/christianbeeznest) in[#8468](https://github.com/chamilo/chamilo-lms/pull/8468)\n- Plugin: Improve Learning Calendar plugin UI and agenda integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8470](https://github.com/chamilo/chamilo-lms/pull/8470)\n- Plugin: Improve survey export plugins by [@christianbeeznest](https://github.com/christianbeeznest) in[#8471](https://github.com/chamilo/chamilo-lms/pull/8471)\n- Plugin: Improve UserRemoteService plugin safety and UI by [@christianbeeznest](https://github.com/christianbeeznest) in[#8472](https://github.com/chamilo/chamilo-lms/pull/8472)\n- Plugin: Improve MigrationMoodle plugin safety and task flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8473](https://github.com/chamilo/chamilo-lms/pull/8473)\n- Plugin: Improve EmbedRegistry plugin safety by [@christianbeeznest](https://github.com/christianbeeznest) in[#8474](https://github.com/chamilo/chamilo-lms/pull/8474)\n- Plugin: Improve SearchCourse plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8475](https://github.com/chamilo/chamilo-lms/pull/8475)\n- Plugin: Improve Rss plugin region integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8476](https://github.com/chamilo/chamilo-lms/pull/8476)\n- Plugin: Improve Dictionary plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8477](https://github.com/chamilo/chamilo-lms/pull/8477)\n- Plugin: Improve GoogleMaps admin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8478](https://github.com/chamilo/chamilo-lms/pull/8478)\n- Plugin: Improve BeforeLogin plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8479](https://github.com/chamilo/chamilo-lms/pull/8479)\n- Plugin: Improve CourseBlock course settings integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8480](https://github.com/chamilo/chamilo-lms/pull/8480)\n- Plugin: Improve CustomFooter region integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8481](https://github.com/chamilo/chamilo-lms/pull/8481)\n- Plugin: Improve CustomCertificate integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8482](https://github.com/chamilo/chamilo-lms/pull/8482)\n- Plugin: Improve NoSearchIndex plugin behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8484](https://github.com/chamilo/chamilo-lms/pull/8484)\n- Plugin: Fix BBB stale meeting closure by [@christianbeeznest](https://github.com/christianbeeznest) in[#8485](https://github.com/chamilo/chamilo-lms/pull/8485)\n- Plugin: Improve NotebookTeacher plugin behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8488](https://github.com/chamilo/chamilo-lms/pull/8488)\n- Plugin: CStudio: Blank all unused files in plugin's vendor/jspdf lib … by [@ywarnier](https://github.com/ywarnier) in[#8489](https://github.com/chamilo/chamilo-lms/pull/8489)\n- Plugin: Improve Justification plugin management by [@christianbeeznest](https://github.com/christianbeeznest) in[#8492](https://github.com/chamilo/chamilo-lms/pull/8492)\n- Plugin: Improve QuestionOptionsEvaluation plugin management by [@christianbeeznest](https://github.com/christianbeeznest) in[#8493](https://github.com/chamilo/chamilo-lms/pull/8493)\n- Internal: API: Message: Replaces /api/messages/by-group/list?groupId=N endpoint with /usergroups/{usergroupId}/messages by [@AngelFQC](https://github.com/AngelFQC) in[#8454](https://github.com/chamilo/chamilo-lms/pull/8454)\n- Plugin: Restore ExerciseSignature signing flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8495](https://github.com/chamilo/chamilo-lms/pull/8495)\n- Plugin: Fix BBB recording dates and recording links rendering by [@christianbeeznest](https://github.com/christianbeeznest) in[#8496](https://github.com/chamilo/chamilo-lms/pull/8496)\n- install: Fix web installer migration flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8498](https://github.com/chamilo/chamilo-lms/pull/8498)\n- Plugin: Fix GradingElectronic gradebook export flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8505](https://github.com/chamilo/chamilo-lms/pull/8505)\n- Plugin: Fix CheckExtraFieldAuthorCompany field detection by [@christianbeeznest](https://github.com/christianbeeznest) in[#8507](https://github.com/chamilo/chamilo-lms/pull/8507)\n- Plugin: Adapt CleanDeletedFiles to new version storage by [@christianbeeznest](https://github.com/christianbeeznest) in[#8511](https://github.com/chamilo/chamilo-lms/pull/8511)\n- Plugin: Improve Dashboard plugin admin overview by [@christianbeeznest](https://github.com/christianbeeznest) in[#8512](https://github.com/chamilo/chamilo-lms/pull/8512)\n- Plugin: Adapt ExtraMenuFromWebservice to Vue topbar by [@christianbeeznest](https://github.com/christianbeeznest) in[#8514](https://github.com/chamilo/chamilo-lms/pull/8514)\n- Plugin: Adapt Mobidico launcher to new version by [@christianbeeznest](https://github.com/christianbeeznest) in[#8516](https://github.com/chamilo/chamilo-lms/pull/8516)\n- Plugin: Adapt ShowRegions to rendered Chamilo 2 regions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8517](https://github.com/chamilo/chamilo-lms/pull/8517)\n- Plugin: Adapt HelloWorld plugin to Chamilo 2 regions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8518](https://github.com/chamilo/chamilo-lms/pull/8518)\n- Plugin: Adapt ExtAuth logout behavior to Chamilo 2 Vue layout by [@christianbeeznest](https://github.com/christianbeeznest) in[#8519](https://github.com/chamilo/chamilo-lms/pull/8519)\n- Plugin: Apply resubscription check to admin session enrolment by [@christianbeeznest](https://github.com/christianbeeznest) in[#8521](https://github.com/chamilo/chamilo-lms/pull/8521)\n- Plugin: Classify commercial and freemium plugins by [@christianbeeznest](https://github.com/christianbeeznest) in[#8522](https://github.com/chamilo/chamilo-lms/pull/8522)\n- Document: Improve document editor defaults and option help by [@christianbeeznest](https://github.com/christianbeeznest) in[#8523](https://github.com/chamilo/chamilo-lms/pull/8523)\n- Replace all axios calls with baseService utilities by [@AngelFQC](https://github.com/AngelFQC) in[#8506](https://github.com/chamilo/chamilo-lms/pull/8506)\n- Ai helper: Add Claude AI provider support by [@christianbeeznest](https://github.com/christianbeeznest) in[#8525](https://github.com/chamilo/chamilo-lms/pull/8525)\n- Learnpath: Fix LP URL and media item rendering - refs [#8483](https://github.com/chamilo/chamilo-lms/issues/8483) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8526](https://github.com/chamilo/chamilo-lms/pull/8526)\n- Course: Improve course and document UI behavior - refs [#8450](https://github.com/chamilo/chamilo-lms/issues/8450) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8527](https://github.com/chamilo/chamilo-lms/pull/8527)\n- Internal: Remove duplicate student view switch by [@christianbeeznest](https://github.com/christianbeeznest) in[#8533](https://github.com/chamilo/chamilo-lms/pull/8533)\n- User: Fix login captcha activation and case handling - refs [#8494](https://github.com/chamilo/chamilo-lms/issues/8494) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8534](https://github.com/chamilo/chamilo-lms/pull/8534)\n- Introduce `CourseContextRoleListener` to dynamically assign contextual course roles by[@AngelFQC](https://github.com/AngelFQC) in[#8491](https://github.com/chamilo/chamilo-lms/pull/8491)\n- Learnpath: Fix LP item view initialization in student view - refs [#8483](https://github.com/chamilo/chamilo-lms/issues/8483) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8535](https://github.com/chamilo/chamilo-lms/pull/8535)\n- Link: Improve link management navigation - refs [#8532](https://github.com/chamilo/chamilo-lms/issues/8532) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8536](https://github.com/chamilo/chamilo-lms/pull/8536)\n- Plugin: Add map provider support for social locations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8539](https://github.com/chamilo/chamilo-lms/pull/8539)\n- Document: Fix document quota display and validation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8541](https://github.com/chamilo/chamilo-lms/pull/8541)\n- Tracking: Fix my space report metrics by [@christianbeeznest](https://github.com/christianbeeznest) in[#8542](https://github.com/chamilo/chamilo-lms/pull/8542)\n- Plugin: Improve dashboard admin overview by [@christianbeeznest](https://github.com/christianbeeznest) in[#8543](https://github.com/chamilo/chamilo-lms/pull/8543)\n- Plugin: Fix plugin commercial classifications by [@christianbeeznest](https://github.com/christianbeeznest) in[#8544](https://github.com/chamilo/chamilo-lms/pull/8544)\n- Plugin: Adapt external webservice menu to sidebar by [@christianbeeznest](https://github.com/christianbeeznest) in[#8545](https://github.com/chamilo/chamilo-lms/pull/8545)\n- Exercise: Fix hotspot AJAX course context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8546](https://github.com/chamilo/chamilo-lms/pull/8546)\n- Admin: Improve admin user authentication forms by [@christianbeeznest](https://github.com/christianbeeznest) in[#8547](https://github.com/chamilo/chamilo-lms/pull/8547)\n- Admin: Always show session summary data to admins by [@christianbeeznest](https://github.com/christianbeeznest) in[#8550](https://github.com/chamilo/chamilo-lms/pull/8550)\n- Plugin: Improve CStudio editor labels, tooltips and UI behavior - refs [#8552](https://github.com/chamilo/chamilo-lms/issues/8552) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8554](https://github.com/chamilo/chamilo-lms/pull/8554)\n- Learnpath: Fix learning path visibility icon state - refs [#8538](https://github.com/chamilo/chamilo-lms/issues/8538) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8556](https://github.com/chamilo/chamilo-lms/pull/8556)\n- Forum: Migrate forum tool to Vue and API Platform by [@christianbeeznest](https://github.com/christianbeeznest) in[#8560](https://github.com/chamilo/chamilo-lms/pull/8560)\n- Survey: Migrate survey tool to Vue and API by [@christianbeeznest](https://github.com/christianbeeznest) in[#8562](https://github.com/chamilo/chamilo-lms/pull/8562)\n- Admin: Fix course tool visibility settings - refs BT#23501 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8565](https://github.com/chamilo/chamilo-lms/pull/8565)\n- Internal: Enhance copy-paste blocking for TinyMCE editors - refs [#8564](https://github.com/chamilo/chamilo-lms/issues/8564) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8566](https://github.com/chamilo/chamilo-lms/pull/8566)\n- Internal: Improve personal file import dialog and folder actions - refs BT#23496 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8567](https://github.com/chamilo/chamilo-lms/pull/8567)\n- Internal: Admin: Only limit access URL management to having Global Ad… by [@NicoDucou](https://github.com/NicoDucou) in[#8572](https://github.com/chamilo/chamilo-lms/pull/8572)\n- Install: Fix upgrade installer old root path input by [@christianbeeznest](https://github.com/christianbeeznest) in[#8573](https://github.com/chamilo/chamilo-lms/pull/8573)\n- Security: moodle import zip by [@AngelFQC](https://github.com/AngelFQC) in[#8574](https://github.com/chamilo/chamilo-lms/pull/8574)\n- Security: SSRF via unprotected mPDF in legacy certificate generation ([GHSA-mw74-xqfh-r8gj](https://github.com/chamilo/chamilo-lms/security/advisories/GHSA-mw74-xqfh-r8gj) ) by[@AngelFQC](https://github.com/AngelFQC) in[#8577](https://github.com/chamilo/chamilo-lms/pull/8577)\n- Refactor: Reusable single-page PDF rendering method in PDF class by [@AngelFQC](https://github.com/AngelFQC) in[#8578](https://github.com/chamilo/chamilo-lms/pull/8578)\n- Security: Restrict allowed classes in Sequence::getUnSerializeGraph() by [@AngelFQC](https://github.com/AngelFQC) in[#8579](https://github.com/chamilo/chamilo-lms/pull/8579)\n- Migration: Add legacy migration support structures by [@christianbeeznest](https://github.com/christianbeeznest) in[#8581](https://github.com/chamilo/chamilo-lms/pull/8581)\n- Internal: Add Ricky legacy GradingElectronic data importer by [@christianbeeznest](https://github.com/christianbeeznest) in[#8582](https://github.com/chamilo/chamilo-lms/pull/8582)\n- Plugin: Add BuyCourses service copy action by [@christianbeeznest](https://github.com/christianbeeznest) in[#8586](https://github.com/chamilo/chamilo-lms/pull/8586)\n- Plugin: Add BuyCourses AI course benefits by [@christianbeeznest](https://github.com/christianbeeznest) in[#8587](https://github.com/chamilo/chamilo-lms/pull/8587)\n- Plugin: Add BuyCourses course creation service translations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8588](https://github.com/chamilo/chamilo-lms/pull/8588)\n- Plugin: Add BuyCourses service link copy action by [@christianbeeznest](https://github.com/christianbeeznest) in[#8589](https://github.com/chamilo/chamilo-lms/pull/8589)\n- Plugin: Add BuyCourses monthly yearly service tabs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8590](https://github.com/chamilo/chamilo-lms/pull/8590)\n- Plugin: Enforce AI token limits per user by [@christianbeeznest](https://github.com/christianbeeznest) in[#8591](https://github.com/chamilo/chamilo-lms/pull/8591)\n- Plugin: Fix BuyCourses student catalog sections by [@christianbeeznest](https://github.com/christianbeeznest) in[#8592](https://github.com/chamilo/chamilo-lms/pull/8592)\n- Plugin: Fix BuyCourses translated HTML descriptions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8596](https://github.com/chamilo/chamilo-lms/pull/8596)\n- Plugin: Fix BuyCourses service availability checks by [@christianbeeznest](https://github.com/christianbeeznest) in[#8597](https://github.com/chamilo/chamilo-lms/pull/8597)\n- Plugin: Fix BuyCourses purchase and course creation UI by [@christianbeeznest](https://github.com/christianbeeznest) in[#8598](https://github.com/chamilo/chamilo-lms/pull/8598)\n- Plugin: Fix BuyCourses purchase and course limit bugs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8601](https://github.com/chamilo/chamilo-lms/pull/8601)\n- Bump codecov/codecov-action from 5 to 7 by [@dependabot](https://github.com/dependabot) [bot] in[#8559](https://github.com/chamilo/chamilo-lms/pull/8559)\n- Plugin: Add BuyCourses empty catalog admin actions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8603](https://github.com/chamilo/chamilo-lms/pull/8603)\n- Plugin: Improve BuyCourses plugin translations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8604](https://github.com/chamilo/chamilo-lms/pull/8604)\n- Social: Fix personal files translated labels - refs BT#23496 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8606](https://github.com/chamilo/chamilo-lms/pull/8606)\n- Display: Close sidebar menu on mobile navigation - refs BT#23519 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8611](https://github.com/chamilo/chamilo-lms/pull/8611)\n- Forum: Organize state providers and processors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8612](https://github.com/chamilo/chamilo-lms/pull/8612)\n- Forum: Restore basic forum settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8613](https://github.com/chamilo/chamilo-lms/pull/8613)\n- Forum: Improve migration legacy to vue + API by [@christianbeeznest](https://github.com/christianbeeznest) in[#8614](https://github.com/chamilo/chamilo-lms/pull/8614)\n- Survey: Organize state providers and processors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8615](https://github.com/chamilo/chamilo-lms/pull/8615)\n- Internals: keep soft-deleted users out of the user-to-URL list by [@AngelFQC](https://github.com/AngelFQC) in[#8610](https://github.com/chamilo/chamilo-lms/pull/8610)\n- Security: stored XSS via language name in admin panel by [@AngelFQC](https://github.com/AngelFQC) in[#8607](https://github.com/chamilo/chamilo-lms/pull/8607)\n- Security: harden user-import XML parsing against XXE by [@AngelFQC](https://github.com/AngelFQC) in[#8609](https://github.com/chamilo/chamilo-lms/pull/8609)\n- Security: add CSRF tokens to gradebook delete/lock/form actions by [@AngelFQC](https://github.com/AngelFQC) in[#8625](https://github.com/chamilo/chamilo-lms/pull/8625)\n- Security: enforce CSRF token validation on state-changing admin endpoints by [@AngelFQC](https://github.com/AngelFQC) in[#8600](https://github.com/chamilo/chamilo-lms/pull/8600)\n- Assignment: Fix assignment attached document filtering - refs [#8557](https://github.com/chamilo/chamilo-lms/discussions/8557) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8626](https://github.com/chamilo/chamilo-lms/pull/8626)\n- Assignment: Add submission preview action - refs [#6558](https://github.com/chamilo/chamilo-lms/pull/6558) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8627](https://github.com/chamilo/chamilo-lms/pull/8627)\n- Course: Hide empty state when sticky courses exist by [@christianbeeznest](https://github.com/christianbeeznest) in[#8628](https://github.com/chamilo/chamilo-lms/pull/8628)\n- Admin: Fix admin dashboard assignment pages by [@christianbeeznest](https://github.com/christianbeeznest) in[#8629](https://github.com/chamilo/chamilo-lms/pull/8629)\n- Internal: Move course report toolbar above title by [@christianbeeznest](https://github.com/christianbeeznest) in[#8630](https://github.com/chamilo/chamilo-lms/pull/8630)\n- Admin: Fix admin question action links by [@christianbeeznest](https://github.com/christianbeeznest) in[#8631](https://github.com/chamilo/chamilo-lms/pull/8631)\n- Admin: Fix admin question pagination and preview by [@christianbeeznest](https://github.com/christianbeeznest) in[#8632](https://github.com/chamilo/chamilo-lms/pull/8632)\n- Search: Add pagination to content search results by [@christianbeeznest](https://github.com/christianbeeznest) in[#8633](https://github.com/chamilo/chamilo-lms/pull/8633)\n- Search: Add Xapian pagination and restore webpack config by [@christianbeeznest](https://github.com/christianbeeznest) in[#8634](https://github.com/chamilo/chamilo-lms/pull/8634)\n- Editor: Fix TinyMCE Firefox outline and spacing by [@christianbeeznest](https://github.com/christianbeeznest) in[#8635](https://github.com/chamilo/chamilo-lms/pull/8635)\n- Display: Fix learner tracking profile responsive layout by [@christianbeeznest](https://github.com/christianbeeznest) in[#8637](https://github.com/chamilo/chamilo-lms/pull/8637)\n- Display: Fix stable My courses sidebar loading state by [@christianbeeznest](https://github.com/christianbeeznest) in[#8638](https://github.com/chamilo/chamilo-lms/pull/8638)\n- Social: Fix folder label translation in personal files - refs BT#23496 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8639](https://github.com/chamilo/chamilo-lms/pull/8639)\n- Display: Close login sidebar on mobile navigation - refs BT#23519 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8640](https://github.com/chamilo/chamilo-lms/pull/8640)\n- Internal: Log task grading requests and disclose generated media by [@christianbeeznest](https://github.com/christianbeeznest) in[#8641](https://github.com/chamilo/chamilo-lms/pull/8641)\n- Learnpath: Fix undefined payload in LP advanced access delete by [@christianbeeznest](https://github.com/christianbeeznest) in[#8642](https://github.com/chamilo/chamilo-lms/pull/8642)\n- Bump the composer group across 1 directory with 5 updates by [@dependabot](https://github.com/dependabot) [bot] in[#8643](https://github.com/chamilo/chamilo-lms/pull/8643)\n- Revert legacy Ricky DB migration support structures by [@christianbeeznest](https://github.com/christianbeeznest) in[#8644](https://github.com/chamilo/chamilo-lms/pull/8644)\n- Security: enforce teacher-student enrollment check on student tracking page by [@AngelFQC](https://github.com/AngelFQC) in[#8602](https://github.com/chamilo/chamilo-lms/pull/8602)\n- Security: stored XSS via social group discussion thread title by [@AngelFQC](https://github.com/AngelFQC) in[#8595](https://github.com/chamilo/chamilo-lms/pull/8595)\n- Security: stored XSS in messages and social-group discussions via unsanitized v-html by [@AngelFQC](https://github.com/AngelFQC) in[#8594](https://github.com/chamilo/chamilo-lms/pull/8594)\n- Admin: Display single authentication method as read-only - refs [#8540](https://github.com/chamilo/chamilo-lms/issues/8540) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8648](https://github.com/chamilo/chamilo-lms/pull/8648)\n- Security: Fix IDOR and mass-assignment in PushSubscription API resource by [@AngelFQC](https://github.com/AngelFQC) in[#8651](https://github.com/chamilo/chamilo-lms/pull/8651)\n- Security: Path traversal + arbitrary file write via sub-language admin panel by [@AngelFQC](https://github.com/AngelFQC) in[#8652](https://github.com/chamilo/chamilo-lms/pull/8652)\n- Security: Exposed test token generation endpoint enables privilege escalation by [@AngelFQC](https://github.com/AngelFQC) in[#8654](https://github.com/chamilo/chamilo-lms/pull/8654)\n- Session: Fix user and class enrollment - refs [#8551](https://github.com/chamilo/chamilo-lms/issues/8551) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8655](https://github.com/chamilo/chamilo-lms/pull/8655)\n- Security: SSRF via mPDF/Dompdf in Wiki PDF export — route through the shared PDF class by [@AngelFQC](https://github.com/AngelFQC) in[#8593](https://github.com/chamilo/chamilo-lms/pull/8593)\n- Security: Remove path-traversal-prone placeholder endpoints in FileManagerController by [@AngelFQC](https://github.com/AngelFQC) in[#8653](https://github.com/chamilo/chamilo-lms/pull/8653)\n- Security: Unauthenticated Template Creation via /template/document-templates/create by [@AngelFQC](https://github.com/AngelFQC) in[#8659](https://github.com/chamilo/chamilo-lms/pull/8659)\n- Security: Unauthenticated Disclosure of Private Course Template Content by [@AngelFQC](https://github.com/AngelFQC) in[#8658](https://github.com/chamilo/chamilo-lms/pull/8658)\n- Security: Unauthenticated Template Deletion by [@AngelFQC](https://github.com/AngelFQC) in[#8657](https://github.com/chamilo/chamilo-lms/pull/8657)\n- Fix login as admin/hr + access to sessions report as HR by [@ywarnier](https://github.com/ywarnier) in[#8663](https://github.com/chamilo/chamilo-lms/pull/8663)\n- Security: Missing Source-Course Authorization in Course Maintenance Copy Endpoints by [@AngelFQC](https://github.com/AngelFQC) in[#8664](https://github.com/chamilo/chamilo-lms/pull/8664)\n- Bump actions/checkout from 6 to 7 by [@dependabot](https://github.com/dependabot) [bot] in[#8649](https://github.com/chamilo/chamilo-lms/pull/8649)\n- Security: Restrict Course Maintenance to teachers of the current course by [@AngelFQC](https://github.com/AngelFQC) in[#8665](https://github.com/chamilo/chamilo-lms/pull/8665)\n- Security: SQL Injection in ExtraField::get_where_clause() via unescaped array filter values by [@AngelFQC](https://github.com/AngelFQC) in[#8666](https://github.com/chamilo/chamilo-lms/pull/8666)\n- Survey: Harden Vue writes and polish configuration UI by [@christianbeeznest](https://github.com/christianbeeznest) in[#8668](https://github.com/chamilo/chamilo-lms/pull/8668)\n- Forum: Improve Vue form reply and thread parity by [@christianbeeznest](https://github.com/christianbeeznest) in[#8669](https://github.com/chamilo/chamilo-lms/pull/8669)\n- Internal: Add signed update package verification - refs [#5004](https://github.com/chamilo/chamilo-lms/issues/5004) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8531](https://github.com/chamilo/chamilo-lms/pull/8531)\n- Forum: Improve default category and required errors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8679](https://github.com/chamilo/chamilo-lms/pull/8679)\n- Plugin: CStudio: Improve editor access and navigation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8680](https://github.com/chamilo/chamilo-lms/pull/8680)\n- Plugin: BuyCourses: Use Chamilo language codes for translated HTML by [@christianbeeznest](https://github.com/christianbeeznest) in[#8684](https://github.com/chamilo/chamilo-lms/pull/8684)\n- Plugin: BuyCourses: Link courses to service user limits by [@christianbeeznest](https://github.com/christianbeeznest) in[#8686](https://github.com/chamilo/chamilo-lms/pull/8686)\n- Fix: show correct status label for all user types in user_information by [@addow](https://github.com/addow) in[#8676](https://github.com/chamilo/chamilo-lms/pull/8676)\n- Fix oauth2 invalid state retry by [@AngelFQC](https://github.com/AngelFQC) in[#8687](https://github.com/chamilo/chamilo-lms/pull/8687)\n- Fix: auto-retry OAuth2 flow on invalid state instead of showing error by [@addow](https://github.com/addow) in[#8674](https://github.com/chamilo/chamilo-lms/pull/8674)\n- Plugin: BuyCourses: Fix catalog labels and service states by [@christianbeeznest](https://github.com/christianbeeznest) in[#8688](https://github.com/chamilo/chamilo-lms/pull/8688)\n- Plugin: BuyCourses: Improve paid course display and cleanup by [@christianbeeznest](https://github.com/christianbeeznest) in[#8691](https://github.com/chamilo/chamilo-lms/pull/8691)\n- Plugin: BuyCourses: Improve selected service badge by [@christianbeeznest](https://github.com/christianbeeznest) in[#8692](https://github.com/chamilo/chamilo-lms/pull/8692)\n- AI: Avoid duplicate generated image badge by [@christianbeeznest](https://github.com/christianbeeznest) in[#8693](https://github.com/chamilo/chamilo-lms/pull/8693)\n- CI: Bump actions/cache from 5 to 6 by [@dependabot](https://github.com/dependabot) [bot] in[#8671](https://github.com/chamilo/chamilo-lms/pull/8671)\n- Plugin: BuyCourses: Clarify upgrade pricing and duration rules by [@christianbeeznest](https://github.com/christianbeeznest) in[#8695](https://github.com/chamilo/chamilo-lms/pull/8695)\n- Plugin: BuyCourses: Prefer highest active service by [@christianbeeznest](https://github.com/christianbeeznest) in[#8696](https://github.com/chamilo/chamilo-lms/pull/8696)\n- Course Description: migrate legacy tool to Vue and API Platform by [@christianbeeznest](https://github.com/christianbeeznest) in[#8697](https://github.com/chamilo/chamilo-lms/pull/8697)\n- BuyCourses: add service sale audit trail by [@christianbeeznest](https://github.com/christianbeeznest) in[#8701](https://github.com/chamilo/chamilo-lms/pull/8701)\n- BuyCourses: add service active state by [@christianbeeznest](https://github.com/christianbeeznest) in[#8702](https://github.com/chamilo/chamilo-lms/pull/8702)\n- Internal: Fix language flipping between SPA and legacy pages + tests for CourseFromRequestHelper by [@AngelFQC](https://github.com/AngelFQC) in[#8685](https://github.com/chamilo/chamilo-lms/pull/8685)\n- Announcement: Migrate announcements to Vue and API Platform by [@christianbeeznest](https://github.com/christianbeeznest) in[#8703](https://github.com/chamilo/chamilo-lms/pull/8703)\n- Learning path: fix item deletion indexing by [@christianbeeznest](https://github.com/christianbeeznest) in[#8706](https://github.com/chamilo/chamilo-lms/pull/8706)\n- Search: harden Xapian indexing failures by [@christianbeeznest](https://github.com/christianbeeznest) in[#8707](https://github.com/chamilo/chamilo-lms/pull/8707)\n- Course: show course details from catalogue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8708](https://github.com/chamilo/chamilo-lms/pull/8708)\n- BuyCourses: fix missing coupon code warning by [@christianbeeznest](https://github.com/christianbeeznest) in[#8709](https://github.com/chamilo/chamilo-lms/pull/8709)\n- Search: add Xapian rebuild command by [@christianbeeznest](https://github.com/christianbeeznest) in[#8710](https://github.com/chamilo/chamilo-lms/pull/8710)\n- BuyCourses: document recurring services cron by [@christianbeeznest](https://github.com/christianbeeznest) in[#8711](https://github.com/chamilo/chamilo-lms/pull/8711)\n- BuyCourses: restore cancelled service renewal - refs [#8704](https://github.com/chamilo/chamilo-lms/issues/8704) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8712](https://github.com/chamilo/chamilo-lms/pull/8712)\n- Plugin: BuyCourses: limit coupon applications for services - refs [#8705](https://github.com/chamilo/chamilo-lms/issues/8705) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8713](https://github.com/chamilo/chamilo-lms/pull/8713)\n- Course: validate duplicate course creation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8714](https://github.com/chamilo/chamilo-lms/pull/8714)\n- Course Progress: complete Vue migration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8715](https://github.com/chamilo/chamilo-lms/pull/8715)\n- Fix repository PHP code style by [@christianbeeznest](https://github.com/christianbeeznest) in[#8716](https://github.com/chamilo/chamilo-lms/pull/8716)\n- Learnpath: Migrate legacy code to vue + Api symfony by [@christianbeeznest](https://github.com/christianbeeznest) in[#8667](https://github.com/chamilo/chamilo-lms/pull/8667)\n- Wiki: Migrate legacy tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8717](https://github.com/chamilo/chamilo-lms/pull/8717)\n- Notebook: Migrate legacy tool to Vue and Symfony by [@christianbeeznest](https://github.com/christianbeeznest) in[#8719](https://github.com/chamilo/chamilo-lms/pull/8719)\n- Fix ECS issues in migrated tools by [@christianbeeznest](https://github.com/christianbeeznest) in[#8720](https://github.com/chamilo/chamilo-lms/pull/8720)\n- Portfolio: Migrate legacy tool to Vue and Symfony by [@christianbeeznest](https://github.com/christianbeeznest) in[#8721](https://github.com/chamilo/chamilo-lms/pull/8721)\n- Learnpath: Fix post-merge builder and runtime issues by [@christianbeeznest](https://github.com/christianbeeznest) in[#8724](https://github.com/chamilo/chamilo-lms/pull/8724)\n- Security: Stored XSS in course chat (sanitizer ran before Markdown) by [@AngelFQC](https://github.com/AngelFQC) in[#8727](https://github.com/chamilo/chamilo-lms/pull/8727)\n- Migration: complete Ticket Vue administration and parity by [@christianbeeznest](https://github.com/christianbeeznest) in[#8731](https://github.com/chamilo/chamilo-lms/pull/8731)\n- Learnpath: Fix post-migration review observations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8732](https://github.com/chamilo/chamilo-lms/pull/8732)\n- Learnpath: Add AI quick-test generation for documents - refs [#8730](https://github.com/chamilo/chamilo-lms/issues/8730) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8733](https://github.com/chamilo/chamilo-lms/pull/8733)\n- AI: Add WYSIWYG translations with translate_html by [@christianbeeznest](https://github.com/christianbeeznest) in[#8734](https://github.com/chamilo/chamilo-lms/pull/8734)\n- AI: Add terms and conditions translation - refs [#8363](https://github.com/chamilo/chamilo-lms/issues/8363) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8736](https://github.com/chamilo/chamilo-lms/pull/8736)\n- Admin: Reuse installed version provider after removing installer - refs [#8683](https://github.com/chamilo/chamilo-lms/issues/8683) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8737](https://github.com/chamilo/chamilo-lms/pull/8737)\n- Gradebook: Apply Arabic font to complete result chart - refs [#2852](https://github.com/chamilo/chamilo-lms/issues/2852) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8738](https://github.com/chamilo/chamilo-lms/pull/8738)\n- Tools: Fix invalid introduction editor configuration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8739](https://github.com/chamilo/chamilo-lms/pull/8739)\n- Internal: Standardize user-facing tutor terminology - refs [#8390](https://github.com/chamilo/chamilo-lms/issues/8390) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8740](https://github.com/chamilo/chamilo-lms/pull/8740)\n- Rooms: Link rooms to sessions and attendances - refs [#7541](https://github.com/chamilo/chamilo-lms/issues/7541) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8741](https://github.com/chamilo/chamilo-lms/pull/8741)\n- Learning paths: Report SCORM upload limit errors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8744](https://github.com/chamilo/chamilo-lms/pull/8744)\n- Exercise: Fix numeric string score formatting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8745](https://github.com/chamilo/chamilo-lms/pull/8745)\n- Surveys: Expose invitation learning path context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8746](https://github.com/chamilo/chamilo-lms/pull/8746)\n- API: Support JWT access for Chamilo Mobile by [@christianbeeznest](https://github.com/christianbeeznest) in[#8747](https://github.com/chamilo/chamilo-lms/pull/8747)\n- API: support JWT learning path runtime writes by [@christianbeeznest](https://github.com/christianbeeznest) in[#8748](https://github.com/chamilo/chamilo-lms/pull/8748)\n- Migration: add normalized LP completion fields - refs BT#23461 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8646](https://github.com/chamilo/chamilo-lms/pull/8646)\n- Sf7 ap4 migration by [@AngelFQC](https://github.com/AngelFQC) in[#8725](https://github.com/chamilo/chamilo-lms/pull/8725)\n- Fix CI for php-8.3 + s7 + ap4 by [@AngelFQC](https://github.com/AngelFQC) in[#8749](https://github.com/chamilo/chamilo-lms/pull/8749)\n- Learnpath: Migrate learning path final item runtime by [@christianbeeznest](https://github.com/christianbeeznest) in[#8750](https://github.com/chamilo/chamilo-lms/pull/8750)\n- Fix Symfony container validation errors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8751](https://github.com/chamilo/chamilo-lms/pull/8751)\n- Security: Add File Integrity Monitoring page by [@ywarnier](https://github.com/ywarnier) in[#8752](https://github.com/chamilo/chamilo-lms/pull/8752)\n- Internal: Apply ECS formatting to learning path final item by [@christianbeeznest](https://github.com/christianbeeznest) in[#8753](https://github.com/chamilo/chamilo-lms/pull/8753)\n- Internal: Use AccessDecisionManager instead of Security::isGranted in voters by [@AngelFQC](https://github.com/AngelFQC) in[#8756](https://github.com/chamilo/chamilo-lms/pull/8756)\n- Learnpath: Fix certificate images in PDF export by [@christianbeeznest](https://github.com/christianbeeznest) in[#8757](https://github.com/chamilo/chamilo-lms/pull/8757)\n- Internal: Remove legacy admin table by [@christianbeeznest](https://github.com/christianbeeznest) in[#8759](https://github.com/chamilo/chamilo-lms/pull/8759)\n- Course: Restore course home tools and shortcuts by [@christianbeeznest](https://github.com/christianbeeznest) in[#8762](https://github.com/chamilo/chamilo-lms/pull/8762)\n- Learnpath: Clarify learning path user access modes by [@christianbeeznest](https://github.com/christianbeeznest) in[#8763](https://github.com/chamilo/chamilo-lms/pull/8763)\n- Internal: Rename name fields to title - refs [#8326](https://github.com/chamilo/chamilo-lms/issues/8326) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8765](https://github.com/chamilo/chamilo-lms/pull/8765)\n- Internal: Fix stale User admin association by [@christianbeeznest](https://github.com/christianbeeznest) in[#8767](https://github.com/chamilo/chamilo-lms/pull/8767)\n- Internal: migrating PUT operations to PATCH by [@AngelFQC](https://github.com/AngelFQC) in[#8766](https://github.com/chamilo/chamilo-lms/pull/8766)\n- Ticket: Fix ticket creation validation and assignee fallback- refs [#8403](https://github.com/chamilo/chamilo-lms/issues/8403) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8771](https://github.com/chamilo/chamilo-lms/pull/8771)\n- MCP: add course authoring and review workflow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8770](https://github.com/chamilo/chamilo-lms/pull/8770)\n- Exercise: Migrate legacy exercise tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8580](https://github.com/chamilo/chamilo-lms/pull/8580)\n- Course: restore add teachers option mapping by [@christianbeeznest](https://github.com/christianbeeznest) in[#8773](https://github.com/chamilo/chamilo-lms/pull/8773)\n- Mobile: add FCM device registration API by [@christianbeeznest](https://github.com/christianbeeznest) in[#8774](https://github.com/chamilo/chamilo-lms/pull/8774)\n- Mobile: integrate messaging and assignment APIs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8775](https://github.com/chamilo/chamilo-lms/pull/8775)\n- Upgrade Doctrine ORM to 3.x ([#8723](https://github.com/chamilo/chamilo-lms/issues/8723) ) by[@AngelFQC](https://github.com/AngelFQC) in[#8772](https://github.com/chamilo/chamilo-lms/pull/8772)\n- Ticket: Fix ticket assignee search and file information by [@christianbeeznest](https://github.com/christianbeeznest) in[#8781](https://github.com/chamilo/chamilo-lms/pull/8781)\n- MCP: Add full OAuth2.1 server feature to enable auto-connect from MCP… by [@ywarnier](https://github.com/ywarnier) in[#8780](https://github.com/chamilo/chamilo-lms/pull/8780)\n- Internal: Add resource language visibility setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8782](https://github.com/chamilo/chamilo-lms/pull/8782)\n- Migration: support long resource titles by [@christianbeeznest](https://github.com/christianbeeznest) in[#8786](https://github.com/chamilo/chamilo-lms/pull/8786)\n- MCP: complete follow-up tool improvements by [@christianbeeznest](https://github.com/christianbeeznest) in[#8787](https://github.com/chamilo/chamilo-lms/pull/8787)\n- Migration: prepare long resource titles in V200 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8788](https://github.com/chamilo/chamilo-lms/pull/8788)\n- Migration: add safe Ricky certificate processing  by [@christianbeeznest](https://github.com/christianbeeznest) in[#8789](https://github.com/chamilo/chamilo-lms/pull/8789)\n- Migration: Fix Ricky exercise runtime and restore quiz question/answer relations - refs BT#23466 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8790](https://github.com/chamilo/chamilo-lms/pull/8790)\n- Refactor: remove client-specific migration identifiers by [@christianbeeznest](https://github.com/christianbeeznest) in[#8791](https://github.com/chamilo/chamilo-lms/pull/8791)\n- Security: add session expiration warning - refs BT#23459 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8795](https://github.com/chamilo/chamilo-lms/pull/8795)\n- Security: MessageAttachment API item GET missing message-ownership check (IDOR) by [@AngelFQC](https://github.com/AngelFQC) in[#8794](https://github.com/chamilo/chamilo-lms/pull/8794)\n- Security: make session expiration warning configurable by [@christianbeeznest](https://github.com/christianbeeznest) in[#8797](https://github.com/chamilo/chamilo-lms/pull/8797)\n- Migration: remove audited quiz repair migrations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8800](https://github.com/chamilo/chamilo-lms/pull/8800)\n- Security: predictable password reset / email confirmation tokens via api_get_unique_id() by [@AngelFQC](https://github.com/AngelFQC) in[#8793](https://github.com/chamilo/chamilo-lms/pull/8793)\n- Resource file deletion via delete_variant by [@AngelFQC](https://github.com/AngelFQC) in[#8726](https://github.com/chamilo/chamilo-lms/pull/8726)\n- Security: Authenticated arbitrary resource file read via mismatched resourceFileId by [@AngelFQC](https://github.com/AngelFQC) in[#8728](https://github.com/chamilo/chamilo-lms/pull/8728)\n- Exercise: honor category matrix question limits by [@christianbeeznest](https://github.com/christianbeeznest) in[#8802](https://github.com/chamilo/chamilo-lms/pull/8802)\n- Security: Reflected XSS via access_url_id/add_type attribute breakout in access_url edit admin pages by [@AngelFQC](https://github.com/AngelFQC) in[#8792](https://github.com/chamilo/chamilo-lms/pull/8792)\n- Exercise: Fix official code settings for exercise PDF exports and class user ordering - refs [#7498](https://github.com/chamilo/chamilo-lms/issues/7498) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8805](https://github.com/chamilo/chamilo-lms/pull/8805)\n- Plugin: CStudio: Add AI-assisted content generation - refs [#8785](https://github.com/chamilo/chamilo-lms/issues/8785) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8806](https://github.com/chamilo/chamilo-lms/pull/8806)\n- Learning path: expose authorized SCORM runtime packages by [@christianbeeznest](https://github.com/christianbeeznest) in[#8809](https://github.com/chamilo/chamilo-lms/pull/8809)\n- Learning path: allow ZIP output for SCORM runtime packages by [@christianbeeznest](https://github.com/christianbeeznest) in[#8810](https://github.com/chamilo/chamilo-lms/pull/8810)\n- Security: Stored XSS via inline HTML delivery of social post attachments by [@AngelFQC](https://github.com/AngelFQC) in[#8808](https://github.com/chamilo/chamilo-lms/pull/8808)\n- Security: Missing authorization on ContactCategory CRUD routes by [@AngelFQC](https://github.com/AngelFQC) in[#8807](https://github.com/chamilo/chamilo-lms/pull/8807)\n- Ticket: restore teacher courses and course context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8812](https://github.com/chamilo/chamilo-lms/pull/8812)\n- Course: Migrate course users tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8813](https://github.com/chamilo/chamilo-lms/pull/8813)\n- User: Migrate course sessions tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8815](https://github.com/chamilo/chamilo-lms/pull/8815)\n- User: Migrate course classes tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8814](https://github.com/chamilo/chamilo-lms/pull/8814)\n- Group: Migrate course groups tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8816](https://github.com/chamilo/chamilo-lms/pull/8816)\n- API Platform: read course context from CidReqHelper and declare cid/sid/gid in the operations (LearningPath, Portfolio, Forum, CourseInvitation, Ai, CalendarEvent) by [@AngelFQC](https://github.com/AngelFQC) in[#8818](https://github.com/chamilo/chamilo-lms/pull/8818)\n- Course: Migrate course settings tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8820](https://github.com/chamilo/chamilo-lms/pull/8820)\n- Admin: Migrate global question bank to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8821](https://github.com/chamilo/chamilo-lms/pull/8821)\n- Course: Fix password-protected course entry test by [@christianbeeznest](https://github.com/christianbeeznest) in[#8764](https://github.com/chamilo/chamilo-lms/pull/8764)\n- Settings: Add assignment download fullname option - refs [#8286](https://github.com/chamilo/chamilo-lms/issues/8286) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8823](https://github.com/chamilo/chamilo-lms/pull/8823)\n- [Needs DB change before merging] Work: #add parameter to add user fullname in submission download indi… by [@NicoDucou](https://github.com/NicoDucou) in[#8285](https://github.com/chamilo/chamilo-lms/pull/8285)\n- CI: fix special case behat tests and complete with test for existing … by [@NicoDucou](https://github.com/NicoDucou) in[#8825](https://github.com/chamilo/chamilo-lms/pull/8825)\n- Security: Skip unregistered roles in ResourceAclHelper instead of crashing by [@addow](https://github.com/addow) in[#8735](https://github.com/chamilo/chamilo-lms/pull/8735)\n- Fix six export endpoints returning HTTP 500 after the CidReqHelper migration by [@AngelFQC](https://github.com/AngelFQC) in[#8826](https://github.com/chamilo/chamilo-lms/pull/8826)\n- Bump guzzlehttp/guzzle from 7.14.2 to 7.15.3 in the composer group across 1 directory by [@dependabot](https://github.com/dependabot) [bot] in[#8827](https://github.com/chamilo/chamilo-lms/pull/8827)\n- Gradebook: Add customizable grading modes and forum participation scoring by [@AngelFQC](https://github.com/AngelFQC) in[#8583](https://github.com/chamilo/chamilo-lms/pull/8583)\n- Course: Migrate course reporting tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8828](https://github.com/chamilo/chamilo-lms/pull/8828)\n- Admin: Fix document upload skip setting type by [@christianbeeznest](https://github.com/christianbeeznest) in[#8829](https://github.com/chamilo/chamilo-lms/pull/8829)\n- CI: Replace Behat with Playwright by [@ywarnier](https://github.com/ywarnier) in[#8796](https://github.com/chamilo/chamilo-lms/pull/8796)\n- Plugin: CStudio: fix repeated section creation - refs [#8822](https://github.com/chamilo/chamilo-lms/issues/8822) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8837](https://github.com/chamilo/chamilo-lms/pull/8837)\n- Reporting: Migrate global reporting suite to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8838](https://github.com/chamilo/chamilo-lms/pull/8838)\n- Flushfix2 by [@ywarnier](https://github.com/ywarnier) in[#8836](https://github.com/chamilo/chamilo-lms/pull/8836)\n- Internal: Write resource tracking events inside the flush transaction by [@AngelFQC](https://github.com/AngelFQC) in[#8840](https://github.com/chamilo/chamilo-lms/pull/8840)\n- Plugin: CStudio: add Chamilo course content blocks - refs [#8824](https://github.com/chamilo/chamilo-lms/issues/8824) by[@christianbeeznest](https://github.com/christianbeeznest) in[#8841](https://github.com/chamilo/chamilo-lms/pull/8841)\n- Internal: Fix unnecessary plugin requests by [@christianbeeznest](https://github.com/christianbeeznest) in[#8842](https://github.com/chamilo/chamilo-lms/pull/8842)\n- Survey: Improve survey API error messages by [@christianbeeznest](https://github.com/christianbeeznest) in[#8844](https://github.com/chamilo/chamilo-lms/pull/8844)\n- Editor: Hide personal files in course file manager by [@christianbeeznest](https://github.com/christianbeeznest) in[#8847](https://github.com/chamilo/chamilo-lms/pull/8847)\n- Editor: Fix tiny filemanager navigation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8848](https://github.com/chamilo/chamilo-lms/pull/8848)\n- User: Fix reporting navigation for students by [@christianbeeznest](https://github.com/christianbeeznest) in[#8849](https://github.com/chamilo/chamilo-lms/pull/8849)\n- Document: Fix learning paths folder access in documents by [@christianbeeznest](https://github.com/christianbeeznest) in[#8850](https://github.com/chamilo/chamilo-lms/pull/8850)\n- Learnpath: Fix learning path prerequisites, auto-launch and exercise settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8851](https://github.com/chamilo/chamilo-lms/pull/8851)\n- Learnpath: Improve learning path student view and exercise workflow by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8855](https://github.com/chamilo/chamilo-lms/pull/8855)\n- Bump squizlabs/php_codesniffer from 3.13.5 to 3.13.6 in the composer group across 1 directory by [@dependabot](https://github.com/dependabot) [bot] in[https://github.com/chamilo/chamilo-lms/pull/8834](https://github.com/chamilo/chamilo-lms/pull/8834)\n- Course: Fix moodle4 course export import by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8856](https://github.com/chamilo/chamilo-lms/pull/8856)\n- Install: Add AI Act demo course to new installations by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8857](https://github.com/chamilo/chamilo-lms/pull/8857)\n- Updater: support V300 migration namespace by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8858](https://github.com/chamilo/chamilo-lms/pull/8858)\n- Internal: Restore MCP allowed roles value template by [@krista445](https://github.com/krista445) in[https://github.com/chamilo/chamilo-lms/pull/8843](https://github.com/chamilo/chamilo-lms/pull/8843)\n- Security: harden PENS remote transport against SSRF by [@krista445](https://github.com/krista445) in[https://github.com/chamilo/chamilo-lms/pull/8846](https://github.com/chamilo/chamilo-lms/pull/8846)\n- Plugin: OnlyOffice: restore modern document integrations by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8859](https://github.com/chamilo/chamilo-lms/pull/8859)\n- OnlyOffice: allow document creation in course root by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8860](https://github.com/chamilo/chamilo-lms/pull/8860)\n- Plugin: OnlyOffice: improve exercise editor integration by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8861](https://github.com/chamilo/chamilo-lms/pull/8861)\n- Course: preserve settings in full MBZ restore by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8862](https://github.com/chamilo/chamilo-lms/pull/8862)\n- Course: Moodle export: resolve stale learning path references by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8863](https://github.com/chamilo/chamilo-lms/pull/8863)\n- Plugin: CStudio: align editor styling with Chamilo by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8864](https://github.com/chamilo/chamilo-lms/pull/8864)\n- Plugin: CStudio: improve Chamilo visual integration by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8865](https://github.com/chamilo/chamilo-lms/pull/8865)\n- Internal: Fix ai act multilingual content by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8866](https://github.com/chamilo/chamilo-lms/pull/8866)\n- Install: update AI Act course backup by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8867](https://github.com/chamilo/chamilo-lms/pull/8867)\n- Security: Require teacher rights to reorder course tools by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8868](https://github.com/chamilo/chamilo-lms/pull/8868)\n- Security: Add central CSRF protection for API Platform and legacy AJAX by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8832](https://github.com/chamilo/chamilo-lms/pull/8832)\n- Documents: restore embedded images in learning paths by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8869](https://github.com/chamilo/chamilo-lms/pull/8869)\n- Security: Restrict SessionRelCourseRelUser API operations and scope its collection by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8870](https://github.com/chamilo/chamilo-lms/pull/8870)\n- Security: Tie UserRelCourseVote writes to the voting user and scope its collection by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8871](https://github.com/chamilo/chamilo-lms/pull/8871)\n- Security: Require teacher rights to reach the course settings form by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8872](https://github.com/chamilo/chamilo-lms/pull/8872)\n- Security: Scope the UserRelUser collection to the caller's own relations by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8874](https://github.com/chamilo/chamilo-lms/pull/8874)\n- Exercise: complete OnlyOffice editing and review - refs #7533 by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8876](https://github.com/chamilo/chamilo-lms/pull/8876)\n- Security: Scope exercise results, tracking rows and user skills to their owner by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8875](https://github.com/chamilo/chamilo-lms/pull/8875)\n- Security: Require course membership to read a student publication resource by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8877](https://github.com/chamilo/chamilo-lms/pull/8877)\n- Security: Plugins: Validate the plugin name before using it to build a file path by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8879](https://github.com/chamilo/chamilo-lms/pull/8879)\n- Security: Onlyoffice: Take the callback document path only from the signed hash by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8881](https://github.com/chamilo/chamilo-lms/pull/8881)\n- Security: Onlyoffice: Restrict the callback download URL to the configured document server by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8880](https://github.com/chamilo/chamilo-lms/pull/8880)\n- Learnpath: Fix lp prerequisite scores by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8882](https://github.com/chamilo/chamilo-lms/pull/8882)\n- MCP: reduce registration log noise by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8883](https://github.com/chamilo/chamilo-lms/pull/8883)\n- Course: backup: preserve root-level document files by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8884](https://github.com/chamilo/chamilo-lms/pull/8884)\n- Course: backup: preserve normalized document paths by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8885](https://github.com/chamilo/chamilo-lms/pull/8885)\n- Install: refresh demo course backups by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8886](https://github.com/chamilo/chamilo-lms/pull/8886)\n- Course: import: resolve document sidecar path collisions by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8887](https://github.com/chamilo/chamilo-lms/pull/8887)\n- Install: add demo courses on updates by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8888](https://github.com/chamilo/chamilo-lms/pull/8888)\n- Ticket: fix reporter confirmation response - refs #8718 by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8889](https://github.com/chamilo/chamilo-lms/pull/8889)\n- Admin: fix password checker bulk actions and speed - refs [#8077](https://github.com/chamilo/chamilo-lms/issues/8077) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8890](https://github.com/chamilo/chamilo-lms/pull/8890)\n- UI: show flash messages after app is ready by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8891](https://github.com/chamilo/chamilo-lms/pull/8891)\n- Reporting: route catalogue to modern reports - refs [#7325](https://github.com/chamilo/chamilo-lms/issues/7325) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8893](https://github.com/chamilo/chamilo-lms/pull/8893)\n- Plugins: fix PHP 8.2 dynamic property deprecations by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8894](https://github.com/chamilo/chamilo-lms/pull/8894)\n- Migration: normalize legacy quiz references by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8895](https://github.com/chamilo/chamilo-lms/pull/8895)\n- Migration: Improve quiz migration links by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8896](https://github.com/chamilo/chamilo-lms/pull/8896)\n- Admin: Fix report specific target contexts - refs [#7325](https://github.com/chamilo/chamilo-lms/issues/7325) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8899](https://github.com/chamilo/chamilo-lms/pull/8899)\n- Admin: Fix common password scan in password strength checker by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8901](https://github.com/chamilo/chamilo-lms/pull/8901)\n- Gradebook: migrate legacy tool to Vue and Symfony by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8873](https://github.com/chamilo/chamilo-lms/pull/8873)\n- User: Fix ask for new password flow - refs [#8078](https://github.com/chamilo/chamilo-lms/issues/8078) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8902](https://github.com/chamilo/chamilo-lms/pull/8902)\n- Security: sanitize chunk file name when finishing an exercise upload answer by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8898](https://github.com/chamilo/chamilo-lms/pull/8898)\n- Security: whitelist ORDER BY direction in MySpace session overview export by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8897](https://github.com/chamilo/chamilo-lms/pull/8897)\n- Security: check gradebook category write access against its own course by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8904](https://github.com/chamilo/chamilo-lms/pull/8904)\n- Security: sanitize forum post body in legacy thread view by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8905](https://github.com/chamilo/chamilo-lms/pull/8905)\n- Security: cast session id to integer in user export query by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8906](https://github.com/chamilo/chamilo-lms/pull/8906)\n- Security: sanitize survey title in legacy survey list by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8907](https://github.com/chamilo/chamilo-lms/pull/8907)\n- Migration: optimize legacy data migrations by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8910](https://github.com/chamilo/chamilo-lms/pull/8910)\n- Migration: harden legacy reference and resource migrations by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8911](https://github.com/chamilo/chamilo-lms/pull/8911)\n- Migration: harden legacy quiz reference normalization by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8912](https://github.com/chamilo/chamilo-lms/pull/8912)\n- Migration: harden partial quiz schema upgrades by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8913](https://github.com/chamilo/chamilo-lms/pull/8913)\n- Doc API operation query parameters by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8908](https://github.com/chamilo/chamilo-lms/pull/8908)\n- Migration: harden large legacy upgrades by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8915](https://github.com/chamilo/chamilo-lms/pull/8915)\n- Migration: bound remaining legacy ORM memory by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8916](https://github.com/chamilo/chamilo-lms/pull/8916)\n- Reporting: open specific learning path reports - refs [#7325](https://github.com/chamilo/chamilo-lms/issues/7325) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8917](https://github.com/chamilo/chamilo-lms/pull/8917)\n- Studentview param by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8914](https://github.com/chamilo/chamilo-lms/pull/8914)\n- Plugin: BuyCourses: improve sales export report by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8918](https://github.com/chamilo/chamilo-lms/pull/8918)\n- Install: restore demo course settings from MBZ by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8919](https://github.com/chamilo/chamilo-lms/pull/8919)\n- AI: handle empty providers configuration by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8920](https://github.com/chamilo/chamilo-lms/pull/8920)\n- LP: fix reporting menu item width by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8921](https://github.com/chamilo/chamilo-lms/pull/8921)\n- Plugin: BBB: reconcile meetings ended outside Chamilo by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8922](https://github.com/chamilo/chamilo-lms/pull/8922)\n- Internal: Make the student view button the single activation point by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8924](https://github.com/chamilo/chamilo-lms/pull/8924)\n- Admin: Migrate admin statistics with legacy parity by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8926](https://github.com/chamilo/chamilo-lms/pull/8926)\n- Internal: Fix the student view Playwright scenarios against the live UI by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8927](https://github.com/chamilo/chamilo-lms/pull/8927)\n- Mobile API: improve message previews and course picture guidance by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8928](https://github.com/chamilo/chamilo-lms/pull/8928)\n- Migration: install missing demo courses on update by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8929](https://github.com/chamilo/chamilo-lms/pull/8929)\n- Mobile API: expose session course tracking metrics by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8930](https://github.com/chamilo/chamilo-lms/pull/8930)\n- Exercise: accept completed Office document answers by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8931](https://github.com/chamilo/chamilo-lms/pull/8931)\n- Plugin: BuyCourses: add upgrade CTAs for course limits by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8932](https://github.com/chamilo/chamilo-lms/pull/8932)\n- Display: fix platform header logo sizing by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8936](https://github.com/chamilo/chamilo-lms/pull/8936)\n- Ticket: separate active and closed tickets by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8940](https://github.com/chamilo/chamilo-lms/pull/8940)\n- Security: Restrict session subscription creation to self-service student enrolment by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8933](https://github.com/chamilo/chamilo-lms/pull/8933)\n- Security: Require edit permission on the resource node when adding a file variant by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8934](https://github.com/chamilo/chamilo-lms/pull/8934)\n- Security: Gate social post attachment reads on the parent post permission by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8935](https://github.com/chamilo/chamilo-lms/pull/8935)\n- Security: Make the personal file ownership filter a conjunction by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8937](https://github.com/chamilo/chamilo-lms/pull/8937)\n- Security: Validate the learning path item before unlocking a hidden course resource by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8938](https://github.com/chamilo/chamilo-lms/pull/8938)\n- Security: Require course membership for auto-generated survey invitations by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8939](https://github.com/chamilo/chamilo-lms/pull/8939)\n- Security: Restrict the session course notification to managers and the session own students by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8941](https://github.com/chamilo/chamilo-lms/pull/8941)\n- Security: Stop exposing the user current portal as a writable API field by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8942](https://github.com/chamilo/chamilo-lms/pull/8942)\n- Security: Keep peer students from editing or deleting a submission by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8943](https://github.com/chamilo/chamilo-lms/pull/8943)\n- Security: Require course edit rights to read a document template status by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8944](https://github.com/chamilo/chamilo-lms/pull/8944)\n- Exercise: accept JSON file answers in runtime by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8946](https://github.com/chamilo/chamilo-lms/pull/8946)\n- Security: Require the forum thread to belong to the course in the request by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8945](https://github.com/chamilo/chamilo-lms/pull/8945)\n- MCP: add exercise question regression suite by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8949](https://github.com/chamilo/chamilo-lms/pull/8949)\n- CI: Raise Psalm to errorLevel 6 by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8950](https://github.com/chamilo/chamilo-lms/pull/8950)\n- MCP: use modern exercise learning path items by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8951](https://github.com/chamilo/chamilo-lms/pull/8951)\n- MCP: Feature/mcp exercise topic regression suite by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8952](https://github.com/chamilo/chamilo-lms/pull/8952)\n- Exercise: fix OnlyOffice runtime file handling by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8953](https://github.com/chamilo/chamilo-lms/pull/8953)\n- Learnpath: Fix/scorm runtime upload errors by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8956](https://github.com/chamilo/chamilo-lms/pull/8956)\n- Display: center platform header logo by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8957](https://github.com/chamilo/chamilo-lms/pull/8957)\n- Learnpath: Add Articulate Rise progress fallback by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8958](https://github.com/chamilo/chamilo-lms/pull/8958)\n- Working Playwright test suite by [@ywarnier](https://github.com/ywarnier) in[https://github.com/chamilo/chamilo-lms/pull/8959](https://github.com/chamilo/chamilo-lms/pull/8959)\n- Learnpath: Fix SCORM 1.2 incomplete status on finish by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8961](https://github.com/chamilo/chamilo-lms/pull/8961)\n- Admin: improve users online statistics by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8962](https://github.com/chamilo/chamilo-lms/pull/8962)\n- Learnpath: Respect SCORM completion-on-leave setting by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8963](https://github.com/chamilo/chamilo-lms/pull/8963)\n- Learnpath: Detect Rise v2 wrapper package version by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8965](https://github.com/chamilo/chamilo-lms/pull/8965)\n- Replace abandoned Azure Blob SDK with azure-oss/storage-blob-flysystem by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/8964](https://github.com/chamilo/chamilo-lms/pull/8964)\n- AI: add Student Success AI Coach by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8966](https://github.com/chamilo/chamilo-lms/pull/8966)\n- Security: recover remembered session before showing session lost by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8968](https://github.com/chamilo/chamilo-lms/pull/8968)\n- Migration: fix demo course resource permissions by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8969](https://github.com/chamilo/chamilo-lms/pull/8969)\n- Exercise: improve next question navigation icon by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8970](https://github.com/chamilo/chamilo-lms/pull/8970)\n- AI: Make Grok text timeout configurable by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8971](https://github.com/chamilo/chamilo-lms/pull/8971)\n- Admin: Fix online users presence tracking by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8972](https://github.com/chamilo/chamilo-lms/pull/8972)\n- Editor: Fix hidden translated HTML content by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8973](https://github.com/chamilo/chamilo-lms/pull/8973)\n- Mcp: Fix OAuth login redirect flow by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8974](https://github.com/chamilo/chamilo-lms/pull/8974)\n- Gradebook: Fix Gradebook certificate template workflow by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8975](https://github.com/chamilo/chamilo-lms/pull/8975)\n- Internal: Fix city extra field labels by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8978](https://github.com/chamilo/chamilo-lms/pull/8978)\n- AI: Improve course analyzer navigation by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8979](https://github.com/chamilo/chamilo-lms/pull/8979)\n- Gradebook: Fix Gradebook weight edit permissions by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8980](https://github.com/chamilo/chamilo-lms/pull/8980)\n- Gradebook: Add default system document templates by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8981](https://github.com/chamilo/chamilo-lms/pull/8981)\n- #8955 - Finalize Fill the blank question to fit 2.0.3 functionnalities by [@chamilo-uga](https://github.com/chamilo-uga) in[https://github.com/chamilo/chamilo-lms/pull/8967](https://github.com/chamilo/chamilo-lms/pull/8967)\n- Course: Fix Student Success AI Coach feedback by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8983](https://github.com/chamilo/chamilo-lms/pull/8983)\n- Display: Fix course catalogue filter layout by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8984](https://github.com/chamilo/chamilo-lms/pull/8984)\n- Admin: Fix default user creation settings by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8986](https://github.com/chamilo/chamilo-lms/pull/8986)\n- Plugin: Fix IMS/LTI missing translations by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8987](https://github.com/chamilo/chamilo-lms/pull/8987)\n- Internal: Update development and testing instructions by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8988](https://github.com/chamilo/chamilo-lms/pull/8988)\n- AI tutor: add platform support mode by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8997](https://github.com/chamilo/chamilo-lms/pull/8997)\n- Internal: Fix pre-Chamilo 3 content regressions by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8998](https://github.com/chamilo/chamilo-lms/pull/8998)\n- AI tutor: improve course context and response feedback by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/8999](https://github.com/chamilo/chamilo-lms/pull/8999)\n- AI tutor: improve context and conversation handling by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9002](https://github.com/chamilo/chamilo-lms/pull/9002)\n- IA: Student success: localize pedagogical sources by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9003](https://github.com/chamilo/chamilo-lms/pull/9003)\n- Branch: preserve coordinate precision by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9006](https://github.com/chamilo/chamilo-lms/pull/9006)\n- MCP: add Student Success feedback tool by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9007](https://github.com/chamilo/chamilo-lms/pull/9007)\n- Course: Save course AI analysis to messages by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9008](https://github.com/chamilo/chamilo-lms/pull/9008)\n- Course: Fix AI chat exclusions in migrated tools by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9009](https://github.com/chamilo/chamilo-lms/pull/9009)\n- Chat: Update AI tutor student guide reference by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9010](https://github.com/chamilo/chamilo-lms/pull/9010)\n- Plugin: Fix CStudio right sidebar layout by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9011](https://github.com/chamilo/chamilo-lms/pull/9011)\n- Exercise: Fix multiple answer dropdown selection - refs #8992 by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9012](https://github.com/chamilo/chamilo-lms/pull/9012)\n- Exercise: Fix reading comprehension question parity - refs #8993 by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9013](https://github.com/chamilo/chamilo-lms/pull/9013)\n- Course: Fix default selection for Yes/No extra fields by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9014](https://github.com/chamilo/chamilo-lms/pull/9014)\n- Intenal: Fix ECS formatting in AI changes by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9015](https://github.com/chamilo/chamilo-lms/pull/9015)\n- Clean and fix phpunit tests by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/9005](https://github.com/chamilo/chamilo-lms/pull/9005)\n- Admin: Fix system status diagnostics by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9016](https://github.com/chamilo/chamilo-lms/pull/9016)\n- Refactor/mcp document creation by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/9018](https://github.com/chamilo/chamilo-lms/pull/9018)\n- Learnpath: Restore video runtime parity by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9019](https://github.com/chamilo/chamilo-lms/pull/9019)\n- Exercise: Complete answer feedback parity - refs [#2044](https://github.com/chamilo/chamilo-lms/issues/2044) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9021](https://github.com/chamilo/chamilo-lms/pull/9021)\n- Drop three isset blocks in api_get_user_info_from_entity that assign a key to itself by [@darkdi](https://github.com/darkdi) in[https://github.com/chamilo/chamilo-lms/pull/8991](https://github.com/chamilo/chamilo-lms/pull/8991)\n- Course: Show course room location on about page by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9022](https://github.com/chamilo/chamilo-lms/pull/9022)\n- Internal: Harden automated update workflow - refs [#5004](https://github.com/chamilo/chamilo-lms/issues/5004) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9023](https://github.com/chamilo/chamilo-lms/pull/9023)\n- Internal: Fix updater preflight continuity - refs [#5004](https://github.com/chamilo/chamilo-lms/issues/5004) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9025](https://github.com/chamilo/chamilo-lms/pull/9025)\n- Internal: Fix updater prod container compatibility - refs [#5004](https://github.com/chamilo/chamilo-lms/issues/5004) by[@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9029](https://github.com/chamilo/chamilo-lms/pull/9029)\n- Learnpath: Restore AI study helper in Vue runtime by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9032](https://github.com/chamilo/chamilo-lms/pull/9032)\n- Internal: Track system update package metadata by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9034](https://github.com/chamilo/chamilo-lms/pull/9034)\n- Course: stabilize resource language selection across course tools - refs #7156 by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9040](https://github.com/chamilo/chamilo-lms/pull/9040)\n- Admin: fix duplicated slash in system status path by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9041](https://github.com/chamilo/chamilo-lms/pull/9041)\n- Security: Bind the resource read fallback to real course access by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/9039](https://github.com/chamilo/chamilo-lms/pull/9039)\n- Security: Check course edit rights on AI document endpoints by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/9038](https://github.com/chamilo/chamilo-lms/pull/9038)\n- Install: support web upgrades from Chamilo 2.x by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9043](https://github.com/chamilo/chamilo-lms/pull/9043)\n- Forum: Fix the deletion of a thread whose posts form a parent chain by [@AngelFQC](https://github.com/AngelFQC) in[https://github.com/chamilo/chamilo-lms/pull/9042](https://github.com/chamilo/chamilo-lms/pull/9042)\n- Search: silence quiz indexing when Xapian is disabled by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9045](https://github.com/chamilo/chamilo-lms/pull/9045)\n- Install: load exact locale translations in requirements by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9046](https://github.com/chamilo/chamilo-lms/pull/9046)\n- Plugin: CStudio: fix legacy block icons in right palette by [@christianbeeznest](https://github.com/christianbeeznest) in[https://github.com/chamilo/chamilo-lms/pull/9050](https://github.com/chamilo/chamilo-lms/pull/9050)\n\n## New Contributors\n\n- [@krista445](https://github.com/krista445) made their first contribution in[https://github.com/chamilo/chamilo-lms/pull/8843](https://github.com/chamilo/chamilo-lms/pull/8843)\n- [@darkdi](https://github.com/darkdi) made their first contribution in[https://github.com/chamilo/chamilo-lms/pull/8991](https://github.com/chamilo/chamilo-lms/pull/8991)\n\n**Full Changelog**: `v2.0.0...v3.0.0`", "url": "https://wpnews.pro/news/chamilo-3-0-open-source-lms-with-native-mcp-server-pauth2-1", "canonical_source": "https://github.com/chamilo/chamilo-lms/releases/tag/v3.0.0", "published_at": "2026-09-11 13:53:33+00:00", "updated_at": "2026-09-11 14:16:08.649092+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools"], "entities": ["Chamilo", "Chamilo 3.0", "MCP", "PAuth2.1", "BuyCourses", "Symfony", "SCORM"], "alternates": {"html": "https://wpnews.pro/news/chamilo-3-0-open-source-lms-with-native-mcp-server-pauth2-1", "markdown": "https://wpnews.pro/news/chamilo-3-0-open-source-lms-with-native-mcp-server-pauth2-1.md", "text": "https://wpnews.pro/news/chamilo-3-0-open-source-lms-with-native-mcp-server-pauth2-1.txt", "jsonld": "https://wpnews.pro/news/chamilo-3-0-open-source-lms-with-native-mcp-server-pauth2-1.jsonld"}}