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 in#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 in#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 by@christianbeeznest in#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 by@christianbeeznest in#8379
- Admin: Add admin password strength checker - refs #8077 by@christianbeeznest in#8380
- User: Restore first login password change - refs #8078 by@christianbeeznest in#8381
- User: Fix password escaping in user emails - refs #6963 by@christianbeeznest in#8382
- Glossary: Generate glossary terms from documents - refs #8079 by@christianbeeznest in#8383
- Glossary: Improve glossary export downloads - refs #8080 by@christianbeeznest in#8384
- Course: Add selected text context to AI chat - refs #7372 by@christianbeeznest in#8385
- Glossary: Exclude existing terms when generating through AI - refs #8372 by@christianbeeznest in#8386
- Search: Improve search result thumbnails - refs #7268 by@christianbeeznest in#8387
- Survey: Fix survey question option layout - refs #6450 by@christianbeeznest in#8388
- User: Add crop and delete for profile photo - refs #5547 by@christianbeeznest in#8389
- Exercise: Add answer feedback to more question types - refs #2044 by@christianbeeznest in#8391
- User: Delete assignment files with users - refs #2596 by@christianbeeznest in#8392
- Social: Show friends posts on social wall - refs #2677 by@christianbeeznest in#8393
- Learnpath: Accept SCORM score after completed - refs #4595 by@christianbeeznest in#8394
- Gradebook: Improve gradebook score input layout - refs #8081 by@christianbeeznest in#8395
- Course: Add course tracking activity reports - refs #2239 by@christianbeeznest in#8396
- Course: Track direct course resource access - refs #7939 by@christianbeeznest in#8397
- Admin: Move activities audit to security block - refs #7322 by@christianbeeznest in#8398
- Tracking: Add reports registry framework - refs #7325 by@christianbeeznest in#8399
- Admin: Complete reports registry cleanup - refs #7325 by@christianbeeznest in#8400
- Ticket: Prevent autofocus on ticket reply form - refs BT#23432 by @christianbeeznest in#8401
- Skill: Add certificate search and skills menu links - refs #7629 by@christianbeeznest in#8404
- Bug : when reload page on quiz attempt, radio checked input are not displayed has checked. by @chamilo-uga in#8402
- Internal: Fix installer database password maxlength - refs #6915 by@christianbeeznest in#8407
- Exercise: Fix course copy quiz question category settings - refs #2351 by@christianbeeznest in#8408
- Group: Fix group auto-fill duplicate users - refs #2517 by@christianbeeznest in#8409
- Agenda: Fix agenda event time selection - refs #8086 by@christianbeeznest in#8410
- Session: Reimplement session result move tool - refs #7435 by@christianbeeznest in#8411
- Attendance: Reimplement official code settings in C2 - refs #7498 by@christianbeeznest in#8412
- Document: Add TinyMCE document autosave drafts - refs #2663 by@christianbeeznest in#8413
- Course: Add support for language in resources - resf #7244 by@christianbeeznest in#8414
- Internal: Fix mail template saving - resf #2941 by@christianbeeznest in#8415
- Usergroup: Migrate interfaces to Vue by @ywarnier in#8416
- Search: Add Xapian extraction for modern office files - resf #7267 by@christianbeeznest in#8417
- Search: Add AI media extraction to Xapian indexing - resf #7269 by@christianbeeznest in#8418
- Document: Add SVG drawing editor to documents - refs #8282 by@christianbeeznest in#8420
- Learnpath: Improve LP video next step overlay - refs #2668 by@christianbeeznest in#8421
- Learnpath: Improve learning path style - refs #7534 by@christianbeeznest in#8422
- Course: Add AI course analyzer proof of concept - refs #7310 by@christianbeeznest in#8424
- Plugin: Check OpenSSL availability for IMS/LTI keys - refs #7294 by@christianbeeznest in#8425
- Internal: Add NProgress for SPA route - refs #8142 by@christianbeeznest in#8426
- Course: Show course categories on Vue homepage - refs #5201 by@christianbeeznest in#8427
- Admin: Add usergroup members preview page - refs #6395 by@christianbeeznest in#8428
- Learnpath: Add advanced learning path access by date - refs #6346 by@christianbeeznest in#8429
- Course: Fix class-linked course group synchronization - refs #5774 by@christianbeeznest in#8430
- Usergroup: Improve class group course synchronization - refs #1710 by@christianbeeznest in#8431
- Plugin: Differentiate commercial plugins in admin - refs #7323 by@christianbeeznest in#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 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 in#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 by@christianbeeznest in#8526
- Course: Improve course and document UI behavior - refs #8450 by@christianbeeznest in#8527
- Internal: Remove duplicate student view switch by @christianbeeznest in#8533
- User: Fix login captcha activation and case handling - refs #8494 by@christianbeeznest in#8534
- Introduce
CourseContextRoleListenerto dynamically assign contextual course roles by@AngelFQC in#8491 - Learnpath: Fix LP item view initialization in student view - refs #8483 by@christianbeeznest in#8535
- Link: Improve link management navigation - refs #8532 by@christianbeeznest in#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 by@christianbeeznest in#8554
- Learnpath: Fix learning path visibility icon state - refs #8538 by@christianbeeznest in#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 by@christianbeeznest in#8566
- Internal: Improve personal file import dialog and folder actions - refs BT#23496 by @christianbeeznest in#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 ) by@AngelFQC in#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 by@christianbeeznest in#8626
- Assignment: Add submission preview action - refs #6558 by@christianbeeznest in#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 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 by@christianbeeznest in#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 by@christianbeeznest in#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 by@christianbeeznest in#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 in#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 by@christianbeeznest in#8712
- Plugin: BuyCourses: limit coupon applications for services - refs #8705 by@christianbeeznest in#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 by@christianbeeznest in#8733
- AI: Add WYSIWYG translations with translate_html by @christianbeeznest in#8734
- AI: Add terms and conditions translation - refs #8363 by@christianbeeznest in#8736
- Admin: Reuse installed version provider after removing installer - refs #8683 by@christianbeeznest in#8737
- Gradebook: Apply Arabic font to complete result chart - refs #2852 by@christianbeeznest in#8738
- Tools: Fix invalid introduction editor configuration by @christianbeeznest in#8739
- Internal: Standardize user-facing tutor terminology - refs #8390 by@christianbeeznest in#8740
- Rooms: Link rooms to sessions and attendances - refs #7541 by@christianbeeznest in#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 by@christianbeeznest in#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 by@christianbeeznest in#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 in#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 in#8792
- Exercise: Fix official code settings for exercise PDF exports and class user ordering - refs #7498 by@christianbeeznest in#8805
- Plugin: CStudio: Add AI-assisted content generation - refs #8785 by@christianbeeznest in#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 in#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 by@christianbeeznest in#8823
- [Needs DB change before merging] Work: #add parameter to add user fullname in submission download indi… by @NicoDucou in#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 [bot] in#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 by@christianbeeznest in#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 by@christianbeeznest in#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 in#8851
- Learnpath: Improve learning path student view and exercise workflow by @christianbeeznest inhttps://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 [bot] inhttps://github.com/chamilo/chamilo-lms/pull/8834
- Course: Fix moodle4 course export import by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8856
- Install: Add AI Act demo course to new installations by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8857
- Updater: support V300 migration namespace by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8858
- Internal: Restore MCP allowed roles value template by @krista445 inhttps://github.com/chamilo/chamilo-lms/pull/8843
- Security: harden PENS remote transport against SSRF by @krista445 inhttps://github.com/chamilo/chamilo-lms/pull/8846
- Plugin: OnlyOffice: restore modern document integrations by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8859
- OnlyOffice: allow document creation in course root by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8860
- Plugin: OnlyOffice: improve exercise editor integration by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8861
- Course: preserve settings in full MBZ restore by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8862
- Course: Moodle export: resolve stale learning path references by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8863
- Plugin: CStudio: align editor styling with Chamilo by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8864
- Plugin: CStudio: improve Chamilo visual integration by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8865
- Internal: Fix ai act multilingual content by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8866
- Install: update AI Act course backup by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8867
- Security: Require teacher rights to reorder course tools by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8868
- Security: Add central CSRF protection for API Platform and legacy AJAX by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8832
- Documents: restore embedded images in learning paths by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8869
- Security: Restrict SessionRelCourseRelUser API operations and scope its collection by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8870
- Security: Tie UserRelCourseVote writes to the voting user and scope its collection by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8871
- Security: Require teacher rights to reach the course settings form by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8872
- Security: Scope the UserRelUser collection to the caller's own relations by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8874
- Exercise: complete OnlyOffice editing and review - refs #7533 by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8876
- Security: Scope exercise results, tracking rows and user skills to their owner by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8875
- Security: Require course membership to read a student publication resource by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8877
- Security: Plugins: Validate the plugin name before using it to build a file path by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8879
- Security: Onlyoffice: Take the callback document path only from the signed hash by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8881
- Security: Onlyoffice: Restrict the callback download URL to the configured document server by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8880
- Learnpath: Fix lp prerequisite scores by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8882
- MCP: reduce registration log noise by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8883
- Course: backup: preserve root-level document files by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8884
- Course: backup: preserve normalized document paths by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8885
- Install: refresh demo course backups by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8886
- Course: import: resolve document sidecar path collisions by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8887
- Install: add demo courses on updates by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8888
- Ticket: fix reporter confirmation response - refs #8718 by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8889
- Admin: fix password checker bulk actions and speed - refs #8077 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8890
- UI: show flash messages after app is ready by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8891
- Reporting: route catalogue to modern reports - refs #7325 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8893
- Plugins: fix PHP 8.2 dynamic property deprecations by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8894
- Migration: normalize legacy quiz references by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8895
- Migration: Improve quiz migration links by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8896
- Admin: Fix report specific target contexts - refs #7325 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8899
- Admin: Fix common password scan in password strength checker by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8901
- Gradebook: migrate legacy tool to Vue and Symfony by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8873
- User: Fix ask for new password flow - refs #8078 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8902
- Security: sanitize chunk file name when finishing an exercise upload answer by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8898
- Security: whitelist ORDER BY direction in MySpace session overview export by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8897
- Security: check gradebook category write access against its own course by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8904
- Security: sanitize forum post body in legacy thread view by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8905
- Security: cast session id to integer in user export query by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8906
- Security: sanitize survey title in legacy survey list by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8907
- Migration: optimize legacy data migrations by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8910
- Migration: harden legacy reference and resource migrations by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8911
- Migration: harden legacy quiz reference normalization by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8912
- Migration: harden partial quiz schema upgrades by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8913
- Doc API operation query parameters by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8908
- Migration: harden large legacy upgrades by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8915
- Migration: bound remaining legacy ORM memory by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8916
- Reporting: open specific learning path reports - refs #7325 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8917
- Studentview param by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8914
- Plugin: BuyCourses: improve sales export report by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8918
- Install: restore demo course settings from MBZ by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8919
- AI: handle empty providers configuration by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8920
- LP: fix reporting menu item width by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8921
- Plugin: BBB: reconcile meetings ended outside Chamilo by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8922
- Internal: Make the student view button the single activation point by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8924
- Admin: Migrate admin statistics with legacy parity by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8926
- Internal: Fix the student view Playwright scenarios against the live UI by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8927
- Mobile API: improve message previews and course picture guidance by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8928
- Migration: install missing demo courses on update by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8929
- Mobile API: expose session course tracking metrics by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8930
- Exercise: accept completed Office document answers by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8931
- Plugin: BuyCourses: add upgrade CTAs for course limits by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8932
- Display: fix platform header logo sizing by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8936
- Ticket: separate active and closed tickets by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8940
- Security: Restrict session subscription creation to self-service student enrolment by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8933
- Security: Require edit permission on the resource node when adding a file variant by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8934
- Security: Gate social post attachment reads on the parent post permission by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8935
- Security: Make the personal file ownership filter a conjunction by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8937
- Security: Validate the learning path item before unlocking a hidden course resource by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8938
- Security: Require course membership for auto-generated survey invitations by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8939
- Security: Restrict the session course notification to managers and the session own students by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8941
- Security: Stop exposing the user current portal as a writable API field by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8942
- Security: Keep peer students from editing or deleting a submission by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8943
- Security: Require course edit rights to read a document template status by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8944
- Exercise: accept JSON file answers in runtime by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8946
- Security: Require the forum thread to belong to the course in the request by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8945
- MCP: add exercise question regression suite by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8949
- CI: Raise Psalm to errorLevel 6 by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8950
- MCP: use modern exercise learning path items by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8951
- MCP: Feature/mcp exercise topic regression suite by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8952
- Exercise: fix OnlyOffice runtime file handling by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8953
- Learnpath: Fix/scorm runtime upload errors by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8956
- Display: center platform header logo by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8957
- Learnpath: Add Articulate Rise progress fallback by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8958
- Working Playwright test suite by @ywarnier inhttps://github.com/chamilo/chamilo-lms/pull/8959
- Learnpath: Fix SCORM 1.2 incomplete status on finish by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8961
- Admin: improve users online statistics by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8962
- Learnpath: Respect SCORM completion-on-leave setting by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8963
- Learnpath: Detect Rise v2 wrapper package version by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8965
- Replace abandoned Azure Blob SDK with azure-oss/storage-blob-flysystem by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/8964
- AI: add Student Success AI Coach by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8966
- Security: recover remembered session before showing session lost by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8968
- Migration: fix demo course resource permissions by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8969
- Exercise: improve next question navigation icon by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8970
- AI: Make Grok text timeout configurable by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8971
- Admin: Fix online users presence tracking by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8972
- Editor: Fix hidden translated HTML content by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8973
- Mcp: Fix OAuth login redirect flow by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8974
- Gradebook: Fix Gradebook certificate template workflow by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8975
- Internal: Fix city extra field labels by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8978
- AI: Improve course analyzer navigation by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8979
- Gradebook: Fix Gradebook weight edit permissions by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8980
- Gradebook: Add default system document templates by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8981
- #8955 - Finalize Fill the blank question to fit 2.0.3 functionnalities by @chamilo-uga inhttps://github.com/chamilo/chamilo-lms/pull/8967
- Course: Fix Student Success AI Coach feedback by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8983
- Display: Fix course catalogue filter layout by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8984
- Admin: Fix default user creation settings by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8986
- Plugin: Fix IMS/LTI missing translations by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8987
- Internal: Update development and testing instructions by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8988
- AI tutor: add platform support mode by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8997
- Internal: Fix pre-Chamilo 3 content regressions by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8998
- AI tutor: improve course context and response feedback by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/8999
- AI tutor: improve context and conversation handling by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9002
- IA: Student success: localize pedagogical sources by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9003
- Branch: preserve coordinate precision by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9006
- MCP: add Student Success feedback tool by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9007
- Course: Save course AI analysis to messages by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9008
- Course: Fix AI chat exclusions in migrated tools by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9009
- Chat: Update AI tutor student guide reference by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9010
- Plugin: Fix CStudio right sidebar layout by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9011
- Exercise: Fix multiple answer dropdown selection - refs #8992 by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9012
- Exercise: Fix reading comprehension question parity - refs #8993 by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9013
- Course: Fix default selection for Yes/No extra fields by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9014
- Intenal: Fix ECS formatting in AI changes by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9015
- Clean and fix phpunit tests by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/9005
- Admin: Fix system status diagnostics by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9016
- Refactor/mcp document creation by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/9018
- Learnpath: Restore video runtime parity by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9019
- Exercise: Complete answer feedback parity - refs #2044 by@christianbeeznest inhttps://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 inhttps://github.com/chamilo/chamilo-lms/pull/8991
- Course: Show course room location on about page by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9022
- Internal: Harden automated update workflow - refs #5004 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9023
- Internal: Fix updater preflight continuity - refs #5004 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9025
- Internal: Fix updater prod container compatibility - refs #5004 by@christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9029
- Learnpath: Restore AI study helper in Vue runtime by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9032
- Internal: Track system update package metadata by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9034
- Course: stabilize resource language selection across course tools - refs #7156 by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9040
- Admin: fix duplicated slash in system status path by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9041
- Security: Bind the resource read fallback to real course access by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/9039
- Security: Check course edit rights on AI document endpoints by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/9038
- Install: support web upgrades from Chamilo 2.x by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9043
- Forum: Fix the deletion of a thread whose posts form a parent chain by @AngelFQC inhttps://github.com/chamilo/chamilo-lms/pull/9042
- Search: silence quiz indexing when Xapian is disabled by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9045
- Install: load exact locale translations in requirements by @christianbeeznest inhttps://github.com/chamilo/chamilo-lms/pull/9046
- Plugin: CStudio: fix legacy block icons in right palette by @christianbeeznest inhttps://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
source & further reading
github.com — original article
Show HN: See how much of your Claude, Codex, or Copilot subscription is left
190proof opinionated unified interface to interact with multiple AI providers
Show HN: Bastiontrace – Forensics for prompt-injected AI agents