# Chamilo 3.0 – open-source LMS with native MCP server (PAuth2.1)

> Source: <https://github.com/chamilo/chamilo-lms/releases/tag/v3.0.0>
> Published: 2026-09-11 13:53:33+00:00

## What's Changed

- Display: Fix default home welcome visibility by [@christianbeeznest](https://github.com/christianbeeznest) in[#8182](https://github.com/chamilo/chamilo-lms/pull/8182)
- Course: Fix default home welcome visibility by [@christianbeeznest](https://github.com/christianbeeznest) in[#8184](https://github.com/chamilo/chamilo-lms/pull/8184)
- Internal: Use Request class instead of superglobals by [@AngelFQC](https://github.com/AngelFQC) in[#8186](https://github.com/chamilo/chamilo-lms/pull/8186)
- Plugin buycourses2 1 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8188](https://github.com/chamilo/chamilo-lms/pull/8188)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- Announcement: restore course_announcement_scheduled_by_date support by [@christianbeeznest](https://github.com/christianbeeznest) in[#8207](https://github.com/chamilo/chamilo-lms/pull/8207)
- Announcement: remove obsolete anonymous global visibility setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8208](https://github.com/chamilo/chamilo-lms/pull/8208)
- 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)
- Settings: remove obsolete settings and legacy mappings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8210](https://github.com/chamilo/chamilo-lms/pull/8210)
- 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)
- Learnpath: Reuse canonical learning_path folder by [@christianbeeznest](https://github.com/christianbeeznest) in[#8212](https://github.com/chamilo/chamilo-lms/pull/8212)
- 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)
- Learnpath: Disable forced SCORM debug logging by [@christianbeeznest](https://github.com/christianbeeznest) in[#8215](https://github.com/chamilo/chamilo-lms/pull/8215)
- 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)
- User: Respect open course access setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8217](https://github.com/chamilo/chamilo-lms/pull/8217)
- Learnpath: Fix LP files tab hierarchy flag by [@christianbeeznest](https://github.com/christianbeeznest) in[#8247](https://github.com/chamilo/chamilo-lms/pull/8247)
- Internal: Wire finished reminder setting to cron command by [@christianbeeznest](https://github.com/christianbeeznest) in[#8251](https://github.com/chamilo/chamilo-lms/pull/8251)
- Internal: Restore homepage course categories setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8253](https://github.com/chamilo/chamilo-lms/pull/8253)
- Internal: Restore core editor settings support in TinyMCE by [@christianbeeznest](https://github.com/christianbeeznest) in[#8271](https://github.com/chamilo/chamilo-lms/pull/8271)
- Migration: Add V210 migrations path for 2.1 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8272](https://github.com/chamilo/chamilo-lms/pull/8272)
- Internal: Remove dead legacy redirect_after_login logic by [@christianbeeznest](https://github.com/christianbeeznest) in[#8273](https://github.com/chamilo/chamilo-lms/pull/8273)
- 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)
- 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)
- Forum: Restore forum settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8283](https://github.com/chamilo/chamilo-lms/pull/8283)
- Learnpath: Make LP document folders collapsible by [@christianbeeznest](https://github.com/christianbeeznest) in[#8284](https://github.com/chamilo/chamilo-lms/pull/8284)
- Course: Support categorized course settings safely by [@christianbeeznest](https://github.com/christianbeeznest) in[#8288](https://github.com/chamilo/chamilo-lms/pull/8288)
- Gradebook: Restore gradebook settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8289](https://github.com/chamilo/chamilo-lms/pull/8289)
- Language: Restore language settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8290](https://github.com/chamilo/chamilo-lms/pull/8290)
- Internal: Restore mail settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8291](https://github.com/chamilo/chamilo-lms/pull/8291)
- Message: Restore session message timeframe setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8292](https://github.com/chamilo/chamilo-lms/pull/8292)
- User: Restore password reminder and chat profile settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8293](https://github.com/chamilo/chamilo-lms/pull/8293)
- User: Restore registration settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8294](https://github.com/chamilo/chamilo-lms/pull/8294)
- Internal: Restore webservice API key settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8295](https://github.com/chamilo/chamilo-lms/pull/8295)
- Internal: Restore external webservice settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8296](https://github.com/chamilo/chamilo-lms/pull/8296)
- User: Restore user workflow settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8305](https://github.com/chamilo/chamilo-lms/pull/8305)
- User: Restore skill assignment notification setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8306](https://github.com/chamilo/chamilo-lms/pull/8306)
- User: Restore skill badge notifications by [@christianbeeznest](https://github.com/christianbeeznest) in[#8307](https://github.com/chamilo/chamilo-lms/pull/8307)
- User: Restore security settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8310](https://github.com/chamilo/chamilo-lms/pull/8310)
- Internal: Restore custom platform settings behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8324](https://github.com/chamilo/chamilo-lms/pull/8324)
- Document: Consolidate API document downloads by [@christianbeeznest](https://github.com/christianbeeznest) in[#8325](https://github.com/chamilo/chamilo-lms/pull/8325)
- Session: Restore legacy session settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8327](https://github.com/chamilo/chamilo-lms/pull/8327)
- Learnpath: Restore LP availability visibility and prerequisite settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8329](https://github.com/chamilo/chamilo-lms/pull/8329)
- Learnpath: Restore SCORM legacy settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8332](https://github.com/chamilo/chamilo-lms/pull/8332)
- Learnpath: Restore legacy learning path settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8333](https://github.com/chamilo/chamilo-lms/pull/8333)
- Course: Restore per-tool course introduction by [@christianbeeznest](https://github.com/christianbeeznest) in[#8336](https://github.com/chamilo/chamilo-lms/pull/8336)
- Course: Restore tools shortcuts by [@christianbeeznest](https://github.com/christianbeeznest) in[#8337](https://github.com/chamilo/chamilo-lms/pull/8337)
- Admin: Hide disabled settings in sub-URLs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8338](https://github.com/chamilo/chamilo-lms/pull/8338)
- Assignment: Implement my_courses_show_pending_work setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8339](https://github.com/chamilo/chamilo-lms/pull/8339)
- Internal: Apply webservice API key settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8340](https://github.com/chamilo/chamilo-lms/pull/8340)
- Internal: Apply session SameSite setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8341](https://github.com/chamilo/chamilo-lms/pull/8341)
- User: Apply profile address setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8342](https://github.com/chamilo/chamilo-lms/pull/8342)
- Learnpath: Apply video context menu setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8343](https://github.com/chamilo/chamilo-lms/pull/8343)
- Course: Keep course home intro always available by [@christianbeeznest](https://github.com/christianbeeznest) in[#8344](https://github.com/chamilo/chamilo-lms/pull/8344)
- Exercise: Implement pending exercise attempts list for MyCourses by [@christianbeeznest](https://github.com/christianbeeznest) in[#8345](https://github.com/chamilo/chamilo-lms/pull/8345)
- Exercise: Add keep-alive ping during exercise attempts by [@christianbeeznest](https://github.com/christianbeeznest) in[#8346](https://github.com/chamilo/chamilo-lms/pull/8346)
- Exercise: Apply session filter setting to pending tests by [@christianbeeznest](https://github.com/christianbeeznest) in[#8347](https://github.com/chamilo/chamilo-lms/pull/8347)
- Learnpath: Restore learning path flow setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8348](https://github.com/chamilo/chamilo-lms/pull/8348)
- 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)
- Document: Support group document quota setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8350](https://github.com/chamilo/chamilo-lms/pull/8350)
- 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)
- 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)
- Course: Fix course creation capability pre-check fallback by [@christianbeeznest](https://github.com/christianbeeznest) in[#8356](https://github.com/chamilo/chamilo-lms/pull/8356)
- 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)
- Course: Improve course tool shortcuts visibility setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8358](https://github.com/chamilo/chamilo-lms/pull/8358)
- Course: Add teacher badge to course cards by [@christianbeeznest](https://github.com/christianbeeznest) in[#8359](https://github.com/chamilo/chamilo-lms/pull/8359)
- Admin: Fix tab persistence in user list by [@ywarnier](https://github.com/ywarnier) in[#8355](https://github.com/chamilo/chamilo-lms/pull/8355)
- Document: Restore cloud link support by [@christianbeeznest](https://github.com/christianbeeznest) in[#8362](https://github.com/chamilo/chamilo-lms/pull/8362)
- Document: Restore editable comments by [@christianbeeznest](https://github.com/christianbeeznest) in[#8364](https://github.com/chamilo/chamilo-lms/pull/8364)
- 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)
- 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)
- Tracking: Restore compact skill layout - refs BT#23429 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8375](https://github.com/chamilo/chamilo-lms/pull/8375)
- Plugin: Complete BuyCourses recurring services and VAT handling by [@christianbeeznest](https://github.com/christianbeeznest) in[#8374](https://github.com/chamilo/chamilo-lms/pull/8374)
- Plugin: Persist BuyCourses course creation display flag by [@christianbeeznest](https://github.com/christianbeeznest) in[#8376](https://github.com/chamilo/chamilo-lms/pull/8376)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- Usergroup: Migrate interfaces to Vue by [@ywarnier](https://github.com/ywarnier) in[#8416](https://github.com/chamilo/chamilo-lms/pull/8416)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- Social: Fix social group images in search results by [@christianbeeznest](https://github.com/christianbeeznest) in[#8433](https://github.com/chamilo/chamilo-lms/pull/8433)
- Internal: Handle expired sessions in Tour AJAX by [@christianbeeznest](https://github.com/christianbeeznest) in[#8434](https://github.com/chamilo/chamilo-lms/pull/8434)
- Internal: Handle invalid course context in CidReqListener by [@christianbeeznest](https://github.com/christianbeeznest) in[#8435](https://github.com/chamilo/chamilo-lms/pull/8435)
- Internal: Fix quarterly statistics AJAX loading by [@christianbeeznest](https://github.com/christianbeeznest) in[#8436](https://github.com/chamilo/chamilo-lms/pull/8436)
- Plugin: Adapt Zoom plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8439](https://github.com/chamilo/chamilo-lms/pull/8439)
- Plugin: Adapt MaintenanceMode plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8440](https://github.com/chamilo/chamilo-lms/pull/8440)
- Plugin: Improve plugin list filters by [@christianbeeznest](https://github.com/christianbeeznest) in[#8441](https://github.com/chamilo/chamilo-lms/pull/8441)
- Plugin: Adapt Redirection plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8442](https://github.com/chamilo/chamilo-lms/pull/8442)
- Plugin: Add verified plugin list filter by [@christianbeeznest](https://github.com/christianbeeznest) in[#8443](https://github.com/chamilo/chamilo-lms/pull/8443)
- Learnpath: Restore AI study helper for LP documents by [@christianbeeznest](https://github.com/christianbeeznest) in[#8445](https://github.com/chamilo/chamilo-lms/pull/8445)
- Plugin: Implement TopLinks course shortcuts integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8446](https://github.com/chamilo/chamilo-lms/pull/8446)
- Plugin: Avoid BuyCourses table lookup before plugin install by [@christianbeeznest](https://github.com/christianbeeznest) in[#8447](https://github.com/chamilo/chamilo-lms/pull/8447)
- Course: Enhance AI course analyzer with lesson context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8448](https://github.com/chamilo/chamilo-lms/pull/8448)
- Document: Make document autosave drafts collapsible by [@christianbeeznest](https://github.com/christianbeeznest) in[#8449](https://github.com/chamilo/chamilo-lms/pull/8449)
- Plugin: Fix Zoom course meeting invitation flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8451](https://github.com/chamilo/chamilo-lms/pull/8451)
- Course: Improve resource language advanced settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8452](https://github.com/chamilo/chamilo-lms/pull/8452)
- Plugin: Harden ExternalNotificationConnect plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8453](https://github.com/chamilo/chamilo-lms/pull/8453)
- Plugin: Adapt CourseHomeNotify to course home by [@christianbeeznest](https://github.com/christianbeeznest) in[#8456](https://github.com/chamilo/chamilo-lms/pull/8456)
- Plugin: Adapt CourseLegal course agreement flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8458](https://github.com/chamilo/chamilo-lms/pull/8458)
- Plugin: Update Static plugin compatibility by [@christianbeeznest](https://github.com/christianbeeznest) in[#8461](https://github.com/chamilo/chamilo-lms/pull/8461)
- Plugin: Integrate ShowUserInfo plugin by [@christianbeeznest](https://github.com/christianbeeznest) in[#8466](https://github.com/chamilo/chamilo-lms/pull/8466)
- Plugin: Integrate StudentFollowUp plugin by [@christianbeeznest](https://github.com/christianbeeznest) in[#8468](https://github.com/chamilo/chamilo-lms/pull/8468)
- 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)
- Plugin: Improve survey export plugins by [@christianbeeznest](https://github.com/christianbeeznest) in[#8471](https://github.com/chamilo/chamilo-lms/pull/8471)
- Plugin: Improve UserRemoteService plugin safety and UI by [@christianbeeznest](https://github.com/christianbeeznest) in[#8472](https://github.com/chamilo/chamilo-lms/pull/8472)
- Plugin: Improve MigrationMoodle plugin safety and task flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8473](https://github.com/chamilo/chamilo-lms/pull/8473)
- Plugin: Improve EmbedRegistry plugin safety by [@christianbeeznest](https://github.com/christianbeeznest) in[#8474](https://github.com/chamilo/chamilo-lms/pull/8474)
- Plugin: Improve SearchCourse plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8475](https://github.com/chamilo/chamilo-lms/pull/8475)
- Plugin: Improve Rss plugin region integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8476](https://github.com/chamilo/chamilo-lms/pull/8476)
- Plugin: Improve Dictionary plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8477](https://github.com/chamilo/chamilo-lms/pull/8477)
- Plugin: Improve GoogleMaps admin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8478](https://github.com/chamilo/chamilo-lms/pull/8478)
- Plugin: Improve BeforeLogin plugin integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8479](https://github.com/chamilo/chamilo-lms/pull/8479)
- Plugin: Improve CourseBlock course settings integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8480](https://github.com/chamilo/chamilo-lms/pull/8480)
- Plugin: Improve CustomFooter region integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8481](https://github.com/chamilo/chamilo-lms/pull/8481)
- Plugin: Improve CustomCertificate integration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8482](https://github.com/chamilo/chamilo-lms/pull/8482)
- Plugin: Improve NoSearchIndex plugin behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8484](https://github.com/chamilo/chamilo-lms/pull/8484)
- Plugin: Fix BBB stale meeting closure by [@christianbeeznest](https://github.com/christianbeeznest) in[#8485](https://github.com/chamilo/chamilo-lms/pull/8485)
- Plugin: Improve NotebookTeacher plugin behavior by [@christianbeeznest](https://github.com/christianbeeznest) in[#8488](https://github.com/chamilo/chamilo-lms/pull/8488)
- 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)
- Plugin: Improve Justification plugin management by [@christianbeeznest](https://github.com/christianbeeznest) in[#8492](https://github.com/chamilo/chamilo-lms/pull/8492)
- Plugin: Improve QuestionOptionsEvaluation plugin management by [@christianbeeznest](https://github.com/christianbeeznest) in[#8493](https://github.com/chamilo/chamilo-lms/pull/8493)
- 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)
- Plugin: Restore ExerciseSignature signing flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8495](https://github.com/chamilo/chamilo-lms/pull/8495)
- 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)
- install: Fix web installer migration flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8498](https://github.com/chamilo/chamilo-lms/pull/8498)
- Plugin: Fix GradingElectronic gradebook export flow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8505](https://github.com/chamilo/chamilo-lms/pull/8505)
- Plugin: Fix CheckExtraFieldAuthorCompany field detection by [@christianbeeznest](https://github.com/christianbeeznest) in[#8507](https://github.com/chamilo/chamilo-lms/pull/8507)
- Plugin: Adapt CleanDeletedFiles to new version storage by [@christianbeeznest](https://github.com/christianbeeznest) in[#8511](https://github.com/chamilo/chamilo-lms/pull/8511)
- Plugin: Improve Dashboard plugin admin overview by [@christianbeeznest](https://github.com/christianbeeznest) in[#8512](https://github.com/chamilo/chamilo-lms/pull/8512)
- Plugin: Adapt ExtraMenuFromWebservice to Vue topbar by [@christianbeeznest](https://github.com/christianbeeznest) in[#8514](https://github.com/chamilo/chamilo-lms/pull/8514)
- Plugin: Adapt Mobidico launcher to new version by [@christianbeeznest](https://github.com/christianbeeznest) in[#8516](https://github.com/chamilo/chamilo-lms/pull/8516)
- Plugin: Adapt ShowRegions to rendered Chamilo 2 regions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8517](https://github.com/chamilo/chamilo-lms/pull/8517)
- Plugin: Adapt HelloWorld plugin to Chamilo 2 regions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8518](https://github.com/chamilo/chamilo-lms/pull/8518)
- 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)
- Plugin: Apply resubscription check to admin session enrolment by [@christianbeeznest](https://github.com/christianbeeznest) in[#8521](https://github.com/chamilo/chamilo-lms/pull/8521)
- Plugin: Classify commercial and freemium plugins by [@christianbeeznest](https://github.com/christianbeeznest) in[#8522](https://github.com/chamilo/chamilo-lms/pull/8522)
- Document: Improve document editor defaults and option help by [@christianbeeznest](https://github.com/christianbeeznest) in[#8523](https://github.com/chamilo/chamilo-lms/pull/8523)
- Replace all axios calls with baseService utilities by [@AngelFQC](https://github.com/AngelFQC) in[#8506](https://github.com/chamilo/chamilo-lms/pull/8506)
- Ai helper: Add Claude AI provider support by [@christianbeeznest](https://github.com/christianbeeznest) in[#8525](https://github.com/chamilo/chamilo-lms/pull/8525)
- 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)
- 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)
- Internal: Remove duplicate student view switch by [@christianbeeznest](https://github.com/christianbeeznest) in[#8533](https://github.com/chamilo/chamilo-lms/pull/8533)
- 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)
- Introduce `CourseContextRoleListener` to dynamically assign contextual course roles by[@AngelFQC](https://github.com/AngelFQC) in[#8491](https://github.com/chamilo/chamilo-lms/pull/8491)
- 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)
- 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)
- Plugin: Add map provider support for social locations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8539](https://github.com/chamilo/chamilo-lms/pull/8539)
- Document: Fix document quota display and validation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8541](https://github.com/chamilo/chamilo-lms/pull/8541)
- Tracking: Fix my space report metrics by [@christianbeeznest](https://github.com/christianbeeznest) in[#8542](https://github.com/chamilo/chamilo-lms/pull/8542)
- Plugin: Improve dashboard admin overview by [@christianbeeznest](https://github.com/christianbeeznest) in[#8543](https://github.com/chamilo/chamilo-lms/pull/8543)
- Plugin: Fix plugin commercial classifications by [@christianbeeznest](https://github.com/christianbeeznest) in[#8544](https://github.com/chamilo/chamilo-lms/pull/8544)
- Plugin: Adapt external webservice menu to sidebar by [@christianbeeznest](https://github.com/christianbeeznest) in[#8545](https://github.com/chamilo/chamilo-lms/pull/8545)
- Exercise: Fix hotspot AJAX course context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8546](https://github.com/chamilo/chamilo-lms/pull/8546)
- Admin: Improve admin user authentication forms by [@christianbeeznest](https://github.com/christianbeeznest) in[#8547](https://github.com/chamilo/chamilo-lms/pull/8547)
- Admin: Always show session summary data to admins by [@christianbeeznest](https://github.com/christianbeeznest) in[#8550](https://github.com/chamilo/chamilo-lms/pull/8550)
- 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)
- 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)
- 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)
- Survey: Migrate survey tool to Vue and API by [@christianbeeznest](https://github.com/christianbeeznest) in[#8562](https://github.com/chamilo/chamilo-lms/pull/8562)
- 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)
- 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)
- 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)
- 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)
- Install: Fix upgrade installer old root path input by [@christianbeeznest](https://github.com/christianbeeznest) in[#8573](https://github.com/chamilo/chamilo-lms/pull/8573)
- Security: moodle import zip by [@AngelFQC](https://github.com/AngelFQC) in[#8574](https://github.com/chamilo/chamilo-lms/pull/8574)
- 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)
- 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)
- Security: Restrict allowed classes in Sequence::getUnSerializeGraph() by [@AngelFQC](https://github.com/AngelFQC) in[#8579](https://github.com/chamilo/chamilo-lms/pull/8579)
- Migration: Add legacy migration support structures by [@christianbeeznest](https://github.com/christianbeeznest) in[#8581](https://github.com/chamilo/chamilo-lms/pull/8581)
- Internal: Add Ricky legacy GradingElectronic data importer by [@christianbeeznest](https://github.com/christianbeeznest) in[#8582](https://github.com/chamilo/chamilo-lms/pull/8582)
- Plugin: Add BuyCourses service copy action by [@christianbeeznest](https://github.com/christianbeeznest) in[#8586](https://github.com/chamilo/chamilo-lms/pull/8586)
- Plugin: Add BuyCourses AI course benefits by [@christianbeeznest](https://github.com/christianbeeznest) in[#8587](https://github.com/chamilo/chamilo-lms/pull/8587)
- Plugin: Add BuyCourses course creation service translations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8588](https://github.com/chamilo/chamilo-lms/pull/8588)
- Plugin: Add BuyCourses service link copy action by [@christianbeeznest](https://github.com/christianbeeznest) in[#8589](https://github.com/chamilo/chamilo-lms/pull/8589)
- Plugin: Add BuyCourses monthly yearly service tabs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8590](https://github.com/chamilo/chamilo-lms/pull/8590)
- Plugin: Enforce AI token limits per user by [@christianbeeznest](https://github.com/christianbeeznest) in[#8591](https://github.com/chamilo/chamilo-lms/pull/8591)
- Plugin: Fix BuyCourses student catalog sections by [@christianbeeznest](https://github.com/christianbeeznest) in[#8592](https://github.com/chamilo/chamilo-lms/pull/8592)
- Plugin: Fix BuyCourses translated HTML descriptions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8596](https://github.com/chamilo/chamilo-lms/pull/8596)
- Plugin: Fix BuyCourses service availability checks by [@christianbeeznest](https://github.com/christianbeeznest) in[#8597](https://github.com/chamilo/chamilo-lms/pull/8597)
- Plugin: Fix BuyCourses purchase and course creation UI by [@christianbeeznest](https://github.com/christianbeeznest) in[#8598](https://github.com/chamilo/chamilo-lms/pull/8598)
- Plugin: Fix BuyCourses purchase and course limit bugs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8601](https://github.com/chamilo/chamilo-lms/pull/8601)
- 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)
- Plugin: Add BuyCourses empty catalog admin actions by [@christianbeeznest](https://github.com/christianbeeznest) in[#8603](https://github.com/chamilo/chamilo-lms/pull/8603)
- Plugin: Improve BuyCourses plugin translations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8604](https://github.com/chamilo/chamilo-lms/pull/8604)
- 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)
- 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)
- Forum: Organize state providers and processors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8612](https://github.com/chamilo/chamilo-lms/pull/8612)
- Forum: Restore basic forum settings by [@christianbeeznest](https://github.com/christianbeeznest) in[#8613](https://github.com/chamilo/chamilo-lms/pull/8613)
- Forum: Improve migration legacy to vue + API by [@christianbeeznest](https://github.com/christianbeeznest) in[#8614](https://github.com/chamilo/chamilo-lms/pull/8614)
- Survey: Organize state providers and processors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8615](https://github.com/chamilo/chamilo-lms/pull/8615)
- 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)
- 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)
- Security: harden user-import XML parsing against XXE by [@AngelFQC](https://github.com/AngelFQC) in[#8609](https://github.com/chamilo/chamilo-lms/pull/8609)
- 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)
- 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)
- 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)
- 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)
- Course: Hide empty state when sticky courses exist by [@christianbeeznest](https://github.com/christianbeeznest) in[#8628](https://github.com/chamilo/chamilo-lms/pull/8628)
- Admin: Fix admin dashboard assignment pages by [@christianbeeznest](https://github.com/christianbeeznest) in[#8629](https://github.com/chamilo/chamilo-lms/pull/8629)
- Internal: Move course report toolbar above title by [@christianbeeznest](https://github.com/christianbeeznest) in[#8630](https://github.com/chamilo/chamilo-lms/pull/8630)
- Admin: Fix admin question action links by [@christianbeeznest](https://github.com/christianbeeznest) in[#8631](https://github.com/chamilo/chamilo-lms/pull/8631)
- Admin: Fix admin question pagination and preview by [@christianbeeznest](https://github.com/christianbeeznest) in[#8632](https://github.com/chamilo/chamilo-lms/pull/8632)
- Search: Add pagination to content search results by [@christianbeeznest](https://github.com/christianbeeznest) in[#8633](https://github.com/chamilo/chamilo-lms/pull/8633)
- Search: Add Xapian pagination and restore webpack config by [@christianbeeznest](https://github.com/christianbeeznest) in[#8634](https://github.com/chamilo/chamilo-lms/pull/8634)
- Editor: Fix TinyMCE Firefox outline and spacing by [@christianbeeznest](https://github.com/christianbeeznest) in[#8635](https://github.com/chamilo/chamilo-lms/pull/8635)
- Display: Fix learner tracking profile responsive layout by [@christianbeeznest](https://github.com/christianbeeznest) in[#8637](https://github.com/chamilo/chamilo-lms/pull/8637)
- Display: Fix stable My courses sidebar loading state by [@christianbeeznest](https://github.com/christianbeeznest) in[#8638](https://github.com/chamilo/chamilo-lms/pull/8638)
- 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)
- 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)
- 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)
- 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)
- 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)
- Revert legacy Ricky DB migration support structures by [@christianbeeznest](https://github.com/christianbeeznest) in[#8644](https://github.com/chamilo/chamilo-lms/pull/8644)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- Security: Unauthenticated Disclosure of Private Course Template Content by [@AngelFQC](https://github.com/AngelFQC) in[#8658](https://github.com/chamilo/chamilo-lms/pull/8658)
- Security: Unauthenticated Template Deletion by [@AngelFQC](https://github.com/AngelFQC) in[#8657](https://github.com/chamilo/chamilo-lms/pull/8657)
- 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)
- 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)
- Bump actions/checkout from 6 to 7 by [@dependabot](https://github.com/dependabot) [bot] in[#8649](https://github.com/chamilo/chamilo-lms/pull/8649)
- 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)
- 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)
- Survey: Harden Vue writes and polish configuration UI by [@christianbeeznest](https://github.com/christianbeeznest) in[#8668](https://github.com/chamilo/chamilo-lms/pull/8668)
- Forum: Improve Vue form reply and thread parity by [@christianbeeznest](https://github.com/christianbeeznest) in[#8669](https://github.com/chamilo/chamilo-lms/pull/8669)
- 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)
- Forum: Improve default category and required errors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8679](https://github.com/chamilo/chamilo-lms/pull/8679)
- Plugin: CStudio: Improve editor access and navigation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8680](https://github.com/chamilo/chamilo-lms/pull/8680)
- 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)
- Plugin: BuyCourses: Link courses to service user limits by [@christianbeeznest](https://github.com/christianbeeznest) in[#8686](https://github.com/chamilo/chamilo-lms/pull/8686)
- 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)
- Fix oauth2 invalid state retry by [@AngelFQC](https://github.com/AngelFQC) in[#8687](https://github.com/chamilo/chamilo-lms/pull/8687)
- 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)
- Plugin: BuyCourses: Fix catalog labels and service states by [@christianbeeznest](https://github.com/christianbeeznest) in[#8688](https://github.com/chamilo/chamilo-lms/pull/8688)
- Plugin: BuyCourses: Improve paid course display and cleanup by [@christianbeeznest](https://github.com/christianbeeznest) in[#8691](https://github.com/chamilo/chamilo-lms/pull/8691)
- Plugin: BuyCourses: Improve selected service badge by [@christianbeeznest](https://github.com/christianbeeznest) in[#8692](https://github.com/chamilo/chamilo-lms/pull/8692)
- AI: Avoid duplicate generated image badge by [@christianbeeznest](https://github.com/christianbeeznest) in[#8693](https://github.com/chamilo/chamilo-lms/pull/8693)
- 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)
- Plugin: BuyCourses: Clarify upgrade pricing and duration rules by [@christianbeeznest](https://github.com/christianbeeznest) in[#8695](https://github.com/chamilo/chamilo-lms/pull/8695)
- Plugin: BuyCourses: Prefer highest active service by [@christianbeeznest](https://github.com/christianbeeznest) in[#8696](https://github.com/chamilo/chamilo-lms/pull/8696)
- 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)
- BuyCourses: add service sale audit trail by [@christianbeeznest](https://github.com/christianbeeznest) in[#8701](https://github.com/chamilo/chamilo-lms/pull/8701)
- BuyCourses: add service active state by [@christianbeeznest](https://github.com/christianbeeznest) in[#8702](https://github.com/chamilo/chamilo-lms/pull/8702)
- 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)
- Announcement: Migrate announcements to Vue and API Platform by [@christianbeeznest](https://github.com/christianbeeznest) in[#8703](https://github.com/chamilo/chamilo-lms/pull/8703)
- Learning path: fix item deletion indexing by [@christianbeeznest](https://github.com/christianbeeznest) in[#8706](https://github.com/chamilo/chamilo-lms/pull/8706)
- Search: harden Xapian indexing failures by [@christianbeeznest](https://github.com/christianbeeznest) in[#8707](https://github.com/chamilo/chamilo-lms/pull/8707)
- Course: show course details from catalogue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8708](https://github.com/chamilo/chamilo-lms/pull/8708)
- BuyCourses: fix missing coupon code warning by [@christianbeeznest](https://github.com/christianbeeznest) in[#8709](https://github.com/chamilo/chamilo-lms/pull/8709)
- Search: add Xapian rebuild command by [@christianbeeznest](https://github.com/christianbeeznest) in[#8710](https://github.com/chamilo/chamilo-lms/pull/8710)
- BuyCourses: document recurring services cron by [@christianbeeznest](https://github.com/christianbeeznest) in[#8711](https://github.com/chamilo/chamilo-lms/pull/8711)
- 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)
- 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)
- Course: validate duplicate course creation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8714](https://github.com/chamilo/chamilo-lms/pull/8714)
- Course Progress: complete Vue migration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8715](https://github.com/chamilo/chamilo-lms/pull/8715)
- Fix repository PHP code style by [@christianbeeznest](https://github.com/christianbeeznest) in[#8716](https://github.com/chamilo/chamilo-lms/pull/8716)
- Learnpath: Migrate legacy code to vue + Api symfony by [@christianbeeznest](https://github.com/christianbeeznest) in[#8667](https://github.com/chamilo/chamilo-lms/pull/8667)
- Wiki: Migrate legacy tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8717](https://github.com/chamilo/chamilo-lms/pull/8717)
- Notebook: Migrate legacy tool to Vue and Symfony by [@christianbeeznest](https://github.com/christianbeeznest) in[#8719](https://github.com/chamilo/chamilo-lms/pull/8719)
- Fix ECS issues in migrated tools by [@christianbeeznest](https://github.com/christianbeeznest) in[#8720](https://github.com/chamilo/chamilo-lms/pull/8720)
- Portfolio: Migrate legacy tool to Vue and Symfony by [@christianbeeznest](https://github.com/christianbeeznest) in[#8721](https://github.com/chamilo/chamilo-lms/pull/8721)
- Learnpath: Fix post-merge builder and runtime issues by [@christianbeeznest](https://github.com/christianbeeznest) in[#8724](https://github.com/chamilo/chamilo-lms/pull/8724)
- 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)
- Migration: complete Ticket Vue administration and parity by [@christianbeeznest](https://github.com/christianbeeznest) in[#8731](https://github.com/chamilo/chamilo-lms/pull/8731)
- Learnpath: Fix post-migration review observations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8732](https://github.com/chamilo/chamilo-lms/pull/8732)
- 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)
- AI: Add WYSIWYG translations with translate_html by [@christianbeeznest](https://github.com/christianbeeznest) in[#8734](https://github.com/chamilo/chamilo-lms/pull/8734)
- 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)
- 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)
- 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)
- Tools: Fix invalid introduction editor configuration by [@christianbeeznest](https://github.com/christianbeeznest) in[#8739](https://github.com/chamilo/chamilo-lms/pull/8739)
- 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)
- 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)
- Learning paths: Report SCORM upload limit errors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8744](https://github.com/chamilo/chamilo-lms/pull/8744)
- Exercise: Fix numeric string score formatting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8745](https://github.com/chamilo/chamilo-lms/pull/8745)
- Surveys: Expose invitation learning path context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8746](https://github.com/chamilo/chamilo-lms/pull/8746)
- API: Support JWT access for Chamilo Mobile by [@christianbeeznest](https://github.com/christianbeeznest) in[#8747](https://github.com/chamilo/chamilo-lms/pull/8747)
- API: support JWT learning path runtime writes by [@christianbeeznest](https://github.com/christianbeeznest) in[#8748](https://github.com/chamilo/chamilo-lms/pull/8748)
- 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)
- Sf7 ap4 migration by [@AngelFQC](https://github.com/AngelFQC) in[#8725](https://github.com/chamilo/chamilo-lms/pull/8725)
- Fix CI for php-8.3 + s7 + ap4 by [@AngelFQC](https://github.com/AngelFQC) in[#8749](https://github.com/chamilo/chamilo-lms/pull/8749)
- Learnpath: Migrate learning path final item runtime by [@christianbeeznest](https://github.com/christianbeeznest) in[#8750](https://github.com/chamilo/chamilo-lms/pull/8750)
- Fix Symfony container validation errors by [@christianbeeznest](https://github.com/christianbeeznest) in[#8751](https://github.com/chamilo/chamilo-lms/pull/8751)
- Security: Add File Integrity Monitoring page by [@ywarnier](https://github.com/ywarnier) in[#8752](https://github.com/chamilo/chamilo-lms/pull/8752)
- 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)
- 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)
- Learnpath: Fix certificate images in PDF export by [@christianbeeznest](https://github.com/christianbeeznest) in[#8757](https://github.com/chamilo/chamilo-lms/pull/8757)
- Internal: Remove legacy admin table by [@christianbeeznest](https://github.com/christianbeeznest) in[#8759](https://github.com/chamilo/chamilo-lms/pull/8759)
- Course: Restore course home tools and shortcuts by [@christianbeeznest](https://github.com/christianbeeznest) in[#8762](https://github.com/chamilo/chamilo-lms/pull/8762)
- Learnpath: Clarify learning path user access modes by [@christianbeeznest](https://github.com/christianbeeznest) in[#8763](https://github.com/chamilo/chamilo-lms/pull/8763)
- 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)
- Internal: Fix stale User admin association by [@christianbeeznest](https://github.com/christianbeeznest) in[#8767](https://github.com/chamilo/chamilo-lms/pull/8767)
- Internal: migrating PUT operations to PATCH by [@AngelFQC](https://github.com/AngelFQC) in[#8766](https://github.com/chamilo/chamilo-lms/pull/8766)
- 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)
- MCP: add course authoring and review workflow by [@christianbeeznest](https://github.com/christianbeeznest) in[#8770](https://github.com/chamilo/chamilo-lms/pull/8770)
- Exercise: Migrate legacy exercise tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8580](https://github.com/chamilo/chamilo-lms/pull/8580)
- Course: restore add teachers option mapping by [@christianbeeznest](https://github.com/christianbeeznest) in[#8773](https://github.com/chamilo/chamilo-lms/pull/8773)
- Mobile: add FCM device registration API by [@christianbeeznest](https://github.com/christianbeeznest) in[#8774](https://github.com/chamilo/chamilo-lms/pull/8774)
- Mobile: integrate messaging and assignment APIs by [@christianbeeznest](https://github.com/christianbeeznest) in[#8775](https://github.com/chamilo/chamilo-lms/pull/8775)
- 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)
- Ticket: Fix ticket assignee search and file information by [@christianbeeznest](https://github.com/christianbeeznest) in[#8781](https://github.com/chamilo/chamilo-lms/pull/8781)
- 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)
- Internal: Add resource language visibility setting by [@christianbeeznest](https://github.com/christianbeeznest) in[#8782](https://github.com/chamilo/chamilo-lms/pull/8782)
- Migration: support long resource titles by [@christianbeeznest](https://github.com/christianbeeznest) in[#8786](https://github.com/chamilo/chamilo-lms/pull/8786)
- MCP: complete follow-up tool improvements by [@christianbeeznest](https://github.com/christianbeeznest) in[#8787](https://github.com/chamilo/chamilo-lms/pull/8787)
- Migration: prepare long resource titles in V200 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8788](https://github.com/chamilo/chamilo-lms/pull/8788)
- Migration: add safe Ricky certificate processing  by [@christianbeeznest](https://github.com/christianbeeznest) in[#8789](https://github.com/chamilo/chamilo-lms/pull/8789)
- 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)
- Refactor: remove client-specific migration identifiers by [@christianbeeznest](https://github.com/christianbeeznest) in[#8791](https://github.com/chamilo/chamilo-lms/pull/8791)
- Security: add session expiration warning - refs BT#23459 by [@christianbeeznest](https://github.com/christianbeeznest) in[#8795](https://github.com/chamilo/chamilo-lms/pull/8795)
- 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)
- Security: make session expiration warning configurable by [@christianbeeznest](https://github.com/christianbeeznest) in[#8797](https://github.com/chamilo/chamilo-lms/pull/8797)
- Migration: remove audited quiz repair migrations by [@christianbeeznest](https://github.com/christianbeeznest) in[#8800](https://github.com/chamilo/chamilo-lms/pull/8800)
- 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)
- Resource file deletion via delete_variant by [@AngelFQC](https://github.com/AngelFQC) in[#8726](https://github.com/chamilo/chamilo-lms/pull/8726)
- 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)
- Exercise: honor category matrix question limits by [@christianbeeznest](https://github.com/christianbeeznest) in[#8802](https://github.com/chamilo/chamilo-lms/pull/8802)
- 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)
- 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)
- 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)
- Learning path: expose authorized SCORM runtime packages by [@christianbeeznest](https://github.com/christianbeeznest) in[#8809](https://github.com/chamilo/chamilo-lms/pull/8809)
- 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)
- 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)
- Security: Missing authorization on ContactCategory CRUD routes by [@AngelFQC](https://github.com/AngelFQC) in[#8807](https://github.com/chamilo/chamilo-lms/pull/8807)
- Ticket: restore teacher courses and course context by [@christianbeeznest](https://github.com/christianbeeznest) in[#8812](https://github.com/chamilo/chamilo-lms/pull/8812)
- Course: Migrate course users tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8813](https://github.com/chamilo/chamilo-lms/pull/8813)
- User: Migrate course sessions tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8815](https://github.com/chamilo/chamilo-lms/pull/8815)
- User: Migrate course classes tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8814](https://github.com/chamilo/chamilo-lms/pull/8814)
- Group: Migrate course groups tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8816](https://github.com/chamilo/chamilo-lms/pull/8816)
- 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)
- Course: Migrate course settings tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8820](https://github.com/chamilo/chamilo-lms/pull/8820)
- Admin: Migrate global question bank to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8821](https://github.com/chamilo/chamilo-lms/pull/8821)
- Course: Fix password-protected course entry test by [@christianbeeznest](https://github.com/christianbeeznest) in[#8764](https://github.com/chamilo/chamilo-lms/pull/8764)
- 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)
- [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)
- 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)
- 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)
- 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)
- 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)
- 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)
- Course: Migrate course reporting tool to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8828](https://github.com/chamilo/chamilo-lms/pull/8828)
- Admin: Fix document upload skip setting type by [@christianbeeznest](https://github.com/christianbeeznest) in[#8829](https://github.com/chamilo/chamilo-lms/pull/8829)
- CI: Replace Behat with Playwright by [@ywarnier](https://github.com/ywarnier) in[#8796](https://github.com/chamilo/chamilo-lms/pull/8796)
- 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)
- Reporting: Migrate global reporting suite to Vue by [@christianbeeznest](https://github.com/christianbeeznest) in[#8838](https://github.com/chamilo/chamilo-lms/pull/8838)
- Flushfix2 by [@ywarnier](https://github.com/ywarnier) in[#8836](https://github.com/chamilo/chamilo-lms/pull/8836)
- 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)
- 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)
- Internal: Fix unnecessary plugin requests by [@christianbeeznest](https://github.com/christianbeeznest) in[#8842](https://github.com/chamilo/chamilo-lms/pull/8842)
- Survey: Improve survey API error messages by [@christianbeeznest](https://github.com/christianbeeznest) in[#8844](https://github.com/chamilo/chamilo-lms/pull/8844)
- Editor: Hide personal files in course file manager by [@christianbeeznest](https://github.com/christianbeeznest) in[#8847](https://github.com/chamilo/chamilo-lms/pull/8847)
- Editor: Fix tiny filemanager navigation by [@christianbeeznest](https://github.com/christianbeeznest) in[#8848](https://github.com/chamilo/chamilo-lms/pull/8848)
- User: Fix reporting navigation for students by [@christianbeeznest](https://github.com/christianbeeznest) in[#8849](https://github.com/chamilo/chamilo-lms/pull/8849)
- Document: Fix learning paths folder access in documents by [@christianbeeznest](https://github.com/christianbeeznest) in[#8850](https://github.com/chamilo/chamilo-lms/pull/8850)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- #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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)

## New Contributors

- [@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)
- [@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)

**Full Changelog**: `v2.0.0...v3.0.0`
