integration.git
5 hours agoweekly release 5.2dev main
Jake Dallimore [Fri, 6 Mar 2026 04:09:59 +0000 (12:09 +0800)]
weekly release 5.2dev

5 hours agoNOBUG: Add upgrade notes
Jake Dallimore [Fri, 6 Mar 2026 04:09:59 +0000 (12:09 +0800)]
NOBUG: Add upgrade notes

5 hours agoMerge branch 'install_main' of https://git.in.moodle.com/amosbot/moodle-install
Jake Dallimore [Fri, 6 Mar 2026 04:09:45 +0000 (12:09 +0800)]
Merge branch 'install_main' of https://git.in.moodle.com/amosbot/moodle-install

5 hours agoMDL-87264 core_question: fix upgrade notes missing type declaration
Jake Dallimore [Fri, 6 Mar 2026 03:40:23 +0000 (11:40 +0800)]
MDL-87264 core_question: fix upgrade notes missing type declaration

7 hours agoMerge branch 'MDL-87922-main' of https://github.com/meirzamoodle/moodle
Adrian Greeve [Thu, 5 Mar 2026 04:59:47 +0000 (12:59 +0800)]
Merge branch 'MDL-87922-main' of https://github.com/meirzamoodle/moodle

7 hours agoMerge branch 'MDL-87759-main-new' of https://github.com/meirzamoodle/moodle
Andrew Nicols [Thu, 5 Mar 2026 04:04:22 +0000 (12:04 +0800)]
Merge branch 'MDL-87759-main-new' of https://github.com/meirzamoodle/moodle

7 hours agoMerge branch 'MDL-86154_main' of https://github.com/marxjohnson/moodle
Jake Dallimore [Thu, 5 Mar 2026 03:55:18 +0000 (11:55 +0800)]
Merge branch 'MDL-86154_main' of https://github.com/marxjohnson/moodle

7 hours agoMerge branch 'MDL-87045-main-minimal' of https://github.com/andrewnicols/moodle
Adrian Greeve [Thu, 5 Mar 2026 03:19:01 +0000 (11:19 +0800)]
Merge branch 'MDL-87045-main-minimal' of https://github.com/andrewnicols/moodle

7 hours agoMerge branch 'MDL-88009-main' of https://github.com/andrewnicols/moodle
Adrian Greeve [Thu, 5 Mar 2026 02:46:57 +0000 (10:46 +0800)]
Merge branch 'MDL-88009-main' of https://github.com/andrewnicols/moodle

7 hours agoMerge branch 'MDL-87950-main' of https://github.com/andrewnicols/moodle
Adrian Greeve [Thu, 5 Mar 2026 02:27:09 +0000 (10:27 +0800)]
Merge branch 'MDL-87950-main' of https://github.com/andrewnicols/moodle

7 hours agoMerge branch 'MDL-87657' of https://github.com/paulholden/moodle
Huong Nguyen [Thu, 5 Mar 2026 02:22:36 +0000 (09:22 +0700)]
Merge branch 'MDL-87657' of https://github.com/paulholden/moodle

7 hours agoMerge branch 'MDL-87553-main' of https://github.com/muhammadarnaldo/moodle
Huong Nguyen [Thu, 5 Mar 2026 02:18:45 +0000 (09:18 +0700)]
Merge branch 'MDL-87553-main' of https://github.com/muhammadarnaldo/moodle

7 hours agoMerge branch 'MDL-87264_main' of https://github.com/marxjohnson/moodle
Mihail Geshoski [Thu, 5 Mar 2026 01:53:12 +0000 (09:53 +0800)]
Merge branch 'MDL-87264_main' of https://github.com/marxjohnson/moodle

7 hours agoMerge branch 'MDL-86691_main' of https://github.com/marxjohnson/moodle
Mihail Geshoski [Thu, 5 Mar 2026 01:43:48 +0000 (09:43 +0800)]
Merge branch 'MDL-86691_main' of https://github.com/marxjohnson/moodle

7 hours agoMerge branch 'MDL-87571-main' of https://github.com/aanabit/moodle
Sara Arjona [Wed, 4 Mar 2026 13:53:07 +0000 (14:53 +0100)]
Merge branch 'MDL-87571-main' of https://github.com/aanabit/moodle

7 hours agoMerge branch 'MDL-87949' of https://github.com/paulholden/moodle
Jun Pataleta [Wed, 4 Mar 2026 13:26:39 +0000 (21:26 +0800)]
Merge branch 'MDL-87949' of https://github.com/paulholden/moodle

7 hours agoMerge branch 'MDL-79574' of https://github.com/paulholden/moodle
Ilya Tregubov [Wed, 4 Mar 2026 11:55:01 +0000 (12:55 +0100)]
Merge branch 'MDL-79574' of https://github.com/paulholden/moodle

7 hours agoMerge branch 'MDL-88003-main' of https://github.com/sarjona/moodle
Sara Arjona [Wed, 4 Mar 2026 11:15:12 +0000 (12:15 +0100)]
Merge branch 'MDL-88003-main' of https://github.com/sarjona/moodle

7 hours agoMerge branch 'MDL-87451' of https://github.com/paulholden/moodle
Sara Arjona [Wed, 4 Mar 2026 09:38:43 +0000 (10:38 +0100)]
Merge branch 'MDL-87451' of https://github.com/paulholden/moodle

7 hours agoMerge branch 'MDL-87981-main' of https://github.com/laurentdavid/moodle
Sara Arjona [Wed, 4 Mar 2026 09:36:41 +0000 (10:36 +0100)]
Merge branch 'MDL-87981-main' of https://github.com/laurentdavid/moodle

7 hours agoMerge branch 'MDL-87979-main' of https://github.com/laurentdavid/moodle
Sara Arjona [Wed, 4 Mar 2026 07:29:18 +0000 (08:29 +0100)]
Merge branch 'MDL-87979-main' of https://github.com/laurentdavid/moodle

7 hours agoMerge branch 'MDL-78476' of https://github.com/paulholden/moodle
Huong Nguyen [Wed, 4 Mar 2026 02:29:27 +0000 (09:29 +0700)]
Merge branch 'MDL-78476' of https://github.com/paulholden/moodle

29 hours agoMDL-87759 js: integrate esbuild with Grunt for React
meirzamoodle [Wed, 4 Mar 2026 02:45:40 +0000 (09:45 +0700)]
MDL-87759 js: integrate esbuild with Grunt for React

Introduces the tooling to discover, build, and watch TypeScript/TSX React
source files across Moodle core and plugin components.

Build pipeline (.esbuild/)
- build.mjs: entry point; generates TS path aliases then runs all component
  builds; accepts --dev flag for development mode; throws on build failure
- generate-aliases.mjs: scans component metadata to produce
  tsconfig.aliases.json (@moodle/lms/<component>/* paths); skips rewrite
  when content is unchanged
- plugin/plugincomponents.mjs: single source of all React build logic:
  - buildPluginComponents(isDev): discovers and builds all components in
    parallel via a single glob (public/**/js/react/src/**/*.{ts,tsx});
    throws on any failure
  - watchComponents(isDev, onRebuild): starts esbuild in native watch mode
    using a shared incremental context; calls onRebuild with rebuilt source
    paths after each change so callers can run follow-up tasks (e.g. lint)
  - createBuildConfig(isDev): shared esbuild options (bundle, esm,
    jsx:automatic, minify/sourcemap/jsxDev per mode); define derived
    internally from isDev
  - resolveComponentPaths(entry): exported src->build path mapping so both
    full and single-file builders use the same resolution logic
  - React, ReactDOM and @moodle/lms/* marked external via inline array;
    no custom esbuild plugin needed

Grunt integration (.grunt/)
- tasks/react.js: single react task with three modes:
  - grunt react        — production build
  - grunt react:dev    — development build (sourcemaps, no minification)
  - grunt react:watch  — esbuild native watch; uses esbuild's own
    context.watch() rather than grunt-contrib-watch so the incremental
    build graph is preserved across rebuilds; ESLint runs in check-only
    mode after each change to avoid re-triggering esbuild
- tasks/javascript.js: loads react.js and includes react in the js task
  chain alongside amd and yui; all JS pipeline orchestration in one place
- tasks/startup.js: includes js/react/src/** in the startup file glob
- tasks/eslint.js: adds react ESLint target (fix: true) for source linting
- components.js: adds getReactTsSrcGlobList() for watch file patterns
- Gruntfile.js: exposes reactSrc glob and inReact flag in moodleEnv;
  react task is not loaded directly — javascript.js owns that

Config / deps
- tsconfig.json: base TypeScript config; extends tsconfig.aliases.json
- tsconfig.aliases.json: initial generated @moodle/lms/* path mappings
- .eslintrc: adds react ESLint overrides for TypeScript/TSX files
- package.json: adds esbuild and @typescript-eslint/parser

31 hours agoMDL-87045 core: Add initial OpenTelemetry solution
Andrew Nicols [Fri, 25 Jul 2025 10:17:24 +0000 (18:17 +0800)]
MDL-87045 core: Add initial OpenTelemetry solution

This commit provides changes required for our Open Telemetry
integration.

There are relatively few changes to the code itself, as most changes are
performed by Composer packages which inspect Moodle from outside, as is
typical with Open Telemetry.

The changes that we do have here are:

- introduction of a `\core\telemetry` class to provide helper methods
  for:

  - fetching the Trace ID of the current request's root span
  - fetching the Trace Parent ID of the current request's root span
  - checking if Open Telemetry is available
  - Recording Throwables

- Recording Throwables from the exception handler
- Display the Trace ID in the page footer
- Adding the Trace Parent ID to the rendered page metadata
- Add the Trace parent ID to requests made using the `core/fetch` and
  `core/ajax` modules.

31 hours agoMDL-87045 core: Move shutdown manager earlier in init
Andrew Nicols [Thu, 9 Oct 2025 22:23:14 +0000 (06:23 +0800)]
MDL-87045 core: Move shutdown manager earlier in init

The shutdown manager was previously instantiated fairly late on in the
bootstrap process, after many files were already included, and after the
`ABORT_AFTER_CONFIG` early exit.

This meant that it was not possible to register shutdown handlers
automatically on some early-init components, such as the observability
API.

To allow the shutdown handler to be processed earlier in the Moodle
bootstrap we need to:

- stop assuming that the `debugging` method is available` as this is
  loaded later;
- stop assuming that `$OUTPUT` and `$DB` are available
- allow its initialisation status to be checked so that an the
  `ABORT_AFTER_CONFIG` behaviour does not lead to warnings about
  multiple instantiations of the handler.

31 hours agoMDL-87950 core: Remove manual includes of third-party libs
Andrew Nicols [Wed, 4 Mar 2026 07:25:45 +0000 (15:25 +0800)]
MDL-87950 core: Remove manual includes of third-party libs

32 hours agoMDL-87922 core: Add ES module importmap infrastructure for React
meirzamoodle [Wed, 4 Mar 2026 08:44:36 +0000 (15:44 +0700)]
MDL-87922 core: Add ES module importmap infrastructure for React

Introduces the server-side infrastructure to serve React-based ES modules
and expose them to the browser via a native import map.

* Add `core\output\requirements\import_map` — a JsonSerializable registry
  that is the single source of truth for specifier → URL and specifier →
  filesystem path mappings. Built-in entries cover `react`, `react/`,
  `react-dom`, `@moodlehq/design-system`, and `@moodle/lms/`. Additional
  entries can be registered from a `pre_render` hook via `add_import()`.

* Add `core\route\controller\esm_controller` — serves ESM requests under
  `/esm/{revision}/{scriptpath}`. All resolution is delegated to
  `import_map::get_path_for_script()`. Valid revisions get long-lived
  immutable cache headers with ETag; revision `-1` gets short-lived headers.

* Add `core\param::ESM_PATH` for validating ESM script paths.

* Add PHPUnit tests for `import_map` and `esm_controller`.

Co-Authored-By: Andrew Nicols <andrew@nicols.co.uk>
45 hours agoMDL-87571 course: Previous of first activity
Amaia Anabitarte [Tue, 3 Mar 2026 17:09:43 +0000 (18:09 +0100)]
MDL-87571 course: Previous of first activity

47 hours agoMDL-88003 course: Skip plugins without FEATURE_CAN_DISPLAY in navigation
Sara Arjona [Tue, 3 Mar 2026 15:36:16 +0000 (16:36 +0100)]
MDL-88003 course: Skip plugins without FEATURE_CAN_DISPLAY in navigation

2 days agoMDL-87981 mod_feedback: Fix description placement
Laurent David [Tue, 3 Mar 2026 11:38:03 +0000 (12:38 +0100)]
MDL-87981 mod_feedback: Fix description placement

2 days agoMDL-88009 theme_boost: Disable input sanitisation for footer
Andrew Nicols [Thu, 19 Feb 2026 06:35:04 +0000 (14:35 +0800)]
MDL-88009 theme_boost: Disable input sanitisation for footer

The footer popover contains content that we have curated from a range of
places and which does not include user-provided content. It should be
safe to use the content unsanitised.

2 days agoMDL-87950 core: Updating coding style on \core\component
Andrew Nicols [Tue, 24 Feb 2026 00:48:02 +0000 (08:48 +0800)]
MDL-87950 core: Updating coding style on \core\component

2 days agoMDL-87950 core: Add Moodle libraries to composer.json
Andrew Nicols [Fri, 13 Feb 2026 06:49:10 +0000 (14:49 +0800)]
MDL-87950 core: Add Moodle libraries to composer.json

This change copies all third-party libraries into the composer.json file
at the exact same version that they exist in Moodle.

Only dependencies without any form of customisation have been included.
A small number of dependencies have been modified and these are not
included.

Note: This includes a change to thirdpartylibs.xml to correct a
typo.

2 days agoMDL-87950 core: Bump symfony/deprecation-contracts
Andrew Nicols [Thu, 19 Feb 2026 08:23:53 +0000 (16:23 +0800)]
MDL-87950 core: Bump symfony/deprecation-contracts

This is just a metadata bump with no other changes required.

2 days agoMDL-87950 core: Do not block insecure packages
Andrew Nicols [Thu, 19 Feb 2026 09:21:31 +0000 (17:21 +0800)]
MDL-87950 core: Do not block insecure packages

This is a temporary state until we stop pinning insecure packages.

2 days agoMDL-87950 core: Composer files should only be loaded if not included
Andrew Nicols [Wed, 11 Feb 2026 07:28:54 +0000 (15:28 +0800)]
MDL-87950 core: Composer files should only be loaded if not included

Composer supports the automatic inclusion of files in its
`composer.json::files` array. To mimic this in Moodle we have a
`$composerautoloadfiles` array in our component autoloader, and at the
time that we register out autoloader we include all of these files.

As we migrate to using Composer for all of our third-party dependencies
we will have a period where they are defined both in Composer, and also
still exist in Moodle.

To support this use-case we need to make Moodle aware that some packages
may be depended upon by Composer and include the same function
definitions.

2 days agoMDL-87553 admin: Consolidate login settings into dedicated admin page
Muhammad Arnaldo [Thu, 19 Feb 2026 07:08:53 +0000 (14:08 +0700)]
MDL-87553 admin: Consolidate login settings into dedicated admin page

Creates new "Login" category and moves login-related settings
into a unified loginsettings page.

2 days agoMerge branch 'MDL-85322-main' of https://github.com/durenadev/moodle
Huong Nguyen [Wed, 4 Mar 2026 02:19:20 +0000 (09:19 +0700)]
Merge branch 'MDL-85322-main' of https://github.com/durenadev/moodle

2 days agoMerge branch 'MDL-86112' of https://github.com/jonof/moodle
Huong Nguyen [Wed, 4 Mar 2026 01:52:49 +0000 (08:52 +0700)]
Merge branch 'MDL-86112' of https://github.com/jonof/moodle

2 days agoMerge branch 'MDL-87905-main' of https://github.com/sammarshallou/moodle
Huong Nguyen [Wed, 4 Mar 2026 01:49:51 +0000 (08:49 +0700)]
Merge branch 'MDL-87905-main' of https://github.com/sammarshallou/moodle

2 days agoAutomatically generated installer lang files
AMOS bot [Wed, 4 Mar 2026 00:08:00 +0000 (00:08 +0000)]
Automatically generated installer lang files

2 days agoMDL-85322 block_html: trust dashboard content in WS context
Daniel Ureña [Tue, 20 Jan 2026 13:42:17 +0000 (14:42 +0100)]
MDL-85322 block_html: trust dashboard content in WS context

2 days agoMerge branch 'MDL-88021-main' of https://github.com/junpataleta/moodle
Huong Nguyen [Tue, 3 Mar 2026 10:28:42 +0000 (17:28 +0700)]
Merge branch 'MDL-88021-main' of https://github.com/junpataleta/moodle

2 days agoMDL-87979 core_course: No separator for manual completion
Laurent David [Tue, 3 Mar 2026 10:05:01 +0000 (11:05 +0100)]
MDL-87979 core_course: No separator for manual completion

3 days agoMerge branch 'MDL-87980-main' of https://github.com/laurentdavid/moodle
Sara Arjona [Tue, 3 Mar 2026 09:30:16 +0000 (10:30 +0100)]
Merge branch 'MDL-87980-main' of https://github.com/laurentdavid/moodle

3 days agoMerge branch 'MDL-87315_main' of https://github.com/marxjohnson/moodle
Mihail Geshoski [Tue, 3 Mar 2026 08:36:49 +0000 (16:36 +0800)]
Merge branch 'MDL-87315_main' of https://github.com/marxjohnson/moodle

3 days agoMDL-78476 notes: use standard text editor for editing note content.
Paul Holden [Thu, 6 Jun 2024 09:00:18 +0000 (10:00 +0100)]
MDL-78476 notes: use standard text editor for editing note content.

Also allows for storage/embedding of files attached to the editor.

3 days agoMDL-87545 behat: add missing step to enable my home
Simey Lameze [Tue, 3 Mar 2026 05:50:45 +0000 (13:50 +0800)]
MDL-87545 behat: add missing step to enable my home

3 days agoMerge branch 'MDL-87867-main' of https://github.com/andrewnicols/moodle
Safat [Tue, 3 Mar 2026 06:27:18 +0000 (17:27 +1100)]
Merge branch 'MDL-87867-main' of https://github.com/andrewnicols/moodle

3 days agoMDL-87867 core: Correct core/deprecated logic
Andrew Nicols [Tue, 3 Mar 2026 05:52:23 +0000 (13:52 +0800)]
MDL-87867 core: Correct core/deprecated logic

- For final deprecations always show the alert
- For non-final deprecations show the alert:
  - when `emit` is set to `true` (default value); and
  - the deprecation has not been ignored in the `config.php` by the
    site; and
  - either:
    - developer mode is set; or
    - it is a behat site.

3 days agoMerge branch 'MDL-88030-main' of https://github.com/HuongNV13/moodle
Safat [Tue, 3 Mar 2026 03:49:07 +0000 (14:49 +1100)]
Merge branch 'MDL-88030-main' of https://github.com/HuongNV13/moodle

3 days agoMerge branch 'MDL-82731-main' of https://github.com/raortegar/moodle
Safat [Tue, 3 Mar 2026 03:11:00 +0000 (14:11 +1100)]
Merge branch 'MDL-82731-main' of https://github.com/raortegar/moodle

3 days agoMerge branch 'MDL-87867-main' of https://github.com/andrewnicols/moodle
Safat [Tue, 3 Mar 2026 02:54:52 +0000 (13:54 +1100)]
Merge branch 'MDL-87867-main' of https://github.com/andrewnicols/moodle

3 days agoMerge branch 'MDL-87545-main-v2' of https://github.com/andimendunia/moodle
Huong Nguyen [Tue, 3 Mar 2026 01:40:13 +0000 (08:40 +0700)]
Merge branch 'MDL-87545-main-v2' of https://github.com/andimendunia/moodle

3 days agoMDL-86112 courseformat: avoid a JS error modal when marking as done
Jonathon Fowler [Fri, 15 Aug 2025 05:35:24 +0000 (15:35 +1000)]
MDL-86112 courseformat: avoid a JS error modal when marking as done

When viewing an "available but not shown" cm with self-completion set,
then clicking the 'Mark as done' button in the activity header.

3 days agoMerge branch 'MDL-87993-main' of https://github.com/junpataleta/moodle
Huong Nguyen [Tue, 3 Mar 2026 01:35:55 +0000 (08:35 +0700)]
Merge branch 'MDL-87993-main' of https://github.com/junpataleta/moodle

3 days agoMerge branch 'MDL-87945' of https://github.com/paulholden/moodle
Huong Nguyen [Tue, 3 Mar 2026 01:33:19 +0000 (08:33 +0700)]
Merge branch 'MDL-87945' of https://github.com/paulholden/moodle

3 days agoMerge branch 'MDL-60912-main' of https://github.com/AnupamaSarjoshi/moodle
Huong Nguyen [Tue, 3 Mar 2026 01:30:36 +0000 (08:30 +0700)]
Merge branch 'MDL-60912-main' of https://github.com/AnupamaSarjoshi/moodle

3 days agoMerge branch 'MDL-87933' of https://github.com/paulholden/moodle
Huong Nguyen [Tue, 3 Mar 2026 01:25:35 +0000 (08:25 +0700)]
Merge branch 'MDL-87933' of https://github.com/paulholden/moodle

3 days agoMerge branch 'MDL-86932-main' of https://github.com/durenadev/moodle
cescobedo [Mon, 2 Mar 2026 18:07:59 +0000 (19:07 +0100)]
Merge branch 'MDL-86932-main' of https://github.com/durenadev/moodle

3 days agoMerge branch 'MDL-87574-main' of https://github.com/sarjona/moodle
Sara Arjona [Mon, 2 Mar 2026 16:50:01 +0000 (17:50 +0100)]
Merge branch 'MDL-87574-main' of https://github.com/sarjona/moodle

3 days agoMerge branch 'MDL-87573-main' of https://github.com/sarjona/moodle
Sara Arjona [Mon, 2 Mar 2026 16:37:24 +0000 (17:37 +0100)]
Merge branch 'MDL-87573-main' of https://github.com/sarjona/moodle

3 days agoMDL-87574 course: Handle restricted sections in next/previous nav
Sara Arjona [Mon, 23 Feb 2026 13:49:02 +0000 (14:49 +0100)]
MDL-87574 course: Handle restricted sections in next/previous nav

Consider restricted sections in the linear navigation.

3 days agoMerge branch 'MDL-87570-main' of https://github.com/laurentdavid/moodle
Sara Arjona [Mon, 2 Mar 2026 16:17:06 +0000 (17:17 +0100)]
Merge branch 'MDL-87570-main' of https://github.com/laurentdavid/moodle

3 days agoMDL-87570 core_course: Next for final course activity
Laurent David [Mon, 16 Feb 2026 10:49:07 +0000 (11:49 +0100)]
MDL-87570 core_course: Next for final course activity

3 days agoMDL-87867 core: Update deprecated JS to use core/deprecated
Andrew Nicols [Thu, 5 Feb 2026 08:15:48 +0000 (16:15 +0800)]
MDL-87867 core: Update deprecated JS to use core/deprecated

3 days agoMDL-87867 core: Add core/deprecated AMD module
Andrew Nicols [Thu, 5 Feb 2026 06:44:52 +0000 (14:44 +0800)]
MDL-87867 core: Add core/deprecated AMD module

3 days agoMerge branch 'MDL-87690' of https://github.com/yerairogo/moodle
Paul Holden [Mon, 2 Mar 2026 11:55:36 +0000 (11:55 +0000)]
Merge branch 'MDL-87690' of https://github.com/yerairogo/moodle

3 days agoMDL-82731 aiprovider_awsbedrock: add to standard plugin list.
Raquel Ortega [Mon, 2 Mar 2026 09:45:02 +0000 (10:45 +0100)]
MDL-82731 aiprovider_awsbedrock: add to standard plugin list.

3 days agoMDL-82731 AI: Provider Plugin - AWS Bedrock
Raquel Ortega [Mon, 19 Jan 2026 12:17:38 +0000 (13:17 +0100)]
MDL-82731 AI: Provider Plugin - AWS Bedrock

Add a provider plugin that supports AI models from AWS bedrock.
Supports both text and image models.
Co-authored-by: Matt Porritt <mattporritt@users.noreply.github.com>
Co-authored-by: Safat Shahin <safatshahin@users.noreply.github.com>
3 days agoMDL-86932 mod_choice: Add userresponse field to get_choice_results WS
Daniel Ureña [Sat, 18 Oct 2025 05:53:01 +0000 (07:53 +0200)]
MDL-86932 mod_choice: Add userresponse field to get_choice_results WS

4 days agoMDL-86691 questions: Fix incorrect set reference category contexts
Mark Johnson [Thu, 26 Feb 2026 09:28:51 +0000 (09:28 +0000)]
MDL-86691 questions: Fix incorrect set reference category contexts

During the upgrade to 5.x, question categories are moved to new
mod_qbank module contexts, and any set references using those categories
are updated using `move_question_set_references()`. However, this
function wasn't updating the `cat` arribute of the set reference's
filter condition, leaving it pointing at the original context ID.

This change update `move_question_set_references()` so that when a set
reference is moved (during the 5.x upgrade, or otherwise) the `cat`
parameter will be updated correctly.

For sites that have already gone through the 5.x upgrade, this fix also
adds a CLI script to find and fix incorrect question_set_reference
records. I considered adding this as an upgrade step, but it potentially
has a lot of records to check, and it's redundant if the site is being
upgraded to 5.x with this fix already in place.

4 days agoMDL-87573 course: Handle restricted modules in next/previous nav
Sara Arjona [Tue, 24 Feb 2026 14:02:50 +0000 (15:02 +0100)]
MDL-87573 course: Handle restricted modules in next/previous nav

6 days agoMDL-87264 qbank_managecategories: Move categories between banks
Mark Johnson [Mon, 24 Nov 2025 10:12:02 +0000 (10:12 +0000)]
MDL-87264 qbank_managecategories: Move categories between banks

This restores the ability to move an entire category to a different
context,
which now means a different activity module.

The feature is accessed via the Move option in the category's action
menu,
which now has a "Switch bank" option like the "add from question bank"
UI
in the quiz.

When a category is moved to a different context, it will disappear from
the current page, and a link to the destination bank is displayed.

6 days agoMDL-87264 qbank_managecategories: Remove multiple context support
Mark Johnson [Thu, 20 Nov 2025 13:40:52 +0000 (13:40 +0000)]
MDL-87264 qbank_managecategories: Remove multiple context support

Since 5.0 we can no longer have categories in contexts above modules, so
there is no need to support multiple contexts in the question bank
category management UI.

6 days agoMDL-87264 questions: Add category route
Mark Johnson [Wed, 21 Jan 2026 15:03:49 +0000 (15:03 +0000)]
MDL-87264 questions: Add category route

6 days agoMDL-87264 questions: Make bank switcher more generic
Mark Johnson [Thu, 20 Nov 2025 13:40:34 +0000 (13:40 +0000)]
MDL-87264 questions: Make bank switcher more generic

Currently, the question bank switcher assumes its being displayed
inside a quiz. This means it can't easily be reused in other
activities, or outside activity contexts.

This change makes the inclusion and display of an activity's
question bank on the list of available banks optional, and
removes any references to the quiz.

6 days agoMDL-87264 router: Add course and coursemodule query parameters
Andrew Nicols [Mon, 19 Jan 2026 02:23:14 +0000 (10:23 +0800)]
MDL-87264 router: Add course and coursemodule query parameters

6 days agoMDL-87690 customfield: Feature to convert CF category to shared category
Yerai Rodríguez [Thu, 15 Jan 2026 15:22:27 +0000 (16:22 +0100)]
MDL-87690 customfield: Feature to convert CF category to shared category

This feature adds the ability to convert an existing custom field
category to a shared custom field category via adding a button to the
custom field management interface.

6 days agoMDL-86154 questions: Delete unused questions after restore
Mark Johnson [Tue, 6 Jan 2026 16:08:07 +0000 (16:08 +0000)]
MDL-86154 questions: Delete unused questions after restore

After restoring an activity using shared questions without the question
bank they belong to, we may have left over question categories in the
target course context. These were being deleted, but any questions they
contained weren't.

This replaces the bulk delete of question category records with a call
to `question_category_delete_safe()` for each category, which will also
delete the questions they contain.

6 days agoMDL-87545 tool_mobile: expose enablemyhome via webservices
Andi Permana [Tue, 10 Feb 2026 03:07:55 +0000 (10:07 +0700)]
MDL-87545 tool_mobile: expose enablemyhome via webservices

6 days agoMDL-87545 core: route homepage selection with enablemyhome
Andi Permana [Tue, 27 Jan 2026 06:46:34 +0000 (13:46 +0700)]
MDL-87545 core: route homepage selection with enablemyhome

MDL-87545 core: add unit coverage for homepage defaults

MDL-87545 core: update behat expectations for homepage options

6 days agoMDL-87545 core: add enablemyhome config and upgrade step
Andi Permana [Tue, 27 Jan 2026 06:46:25 +0000 (13:46 +0700)]
MDL-87545 core: add enablemyhome config and upgrade step

6 days agoMDL-87315 backup: Update set reference question category ID on restore.
Mark Johnson [Mon, 26 Jan 2026 15:57:27 +0000 (15:57 +0000)]
MDL-87315 backup: Update set reference question category ID on restore.

When a question bank is restored along with a quiz that uses a random question from that bank,
the set reference for the random question should now point to the category in the restored bank,
rather than original.

This uses the question bank context IDs recorded using the method added in MDL-86136
to decide if the set reference's question context is being restored, and update it
accordingly.

This required adding a new restore step in the restore_root_task, since when a restore is
performed asynchronously, the temp IDs table is deleted after the prechecks are performed
when the task is queued. Adding this step allows the IDs to be recorded again when the restore
runs.

6 days agoMDL-87690 customfield: Added new partial named selector for CF category
Yerai Rodríguez [Tue, 27 Jan 2026 13:31:26 +0000 (14:31 +0100)]
MDL-87690 customfield: Added new partial named selector for CF category

6 days agoMDL-87980 mod_assign: Fix empty description display
Laurent David [Mon, 23 Feb 2026 14:07:17 +0000 (15:07 +0100)]
MDL-87980 mod_assign: Fix empty description display

6 days agoMDL-79574 reportbuilder: consistent application of column indexes.
Paul Holden [Tue, 30 Dec 2025 10:30:12 +0000 (10:30 +0000)]
MDL-79574 reportbuilder: consistent application of column indexes.

No longer reliant on persistent record indexing (whose behaviour
has now changed), we are now explicit in setting each column index
within reports.

6 days agoMDL-79574 core: updates to component API that retrieve persistents.
Paul Holden [Mon, 5 Jan 2026 11:56:43 +0000 (11:56 +0000)]
MDL-79574 core: updates to component API that retrieve persistents.

Where the API previously returned the results of `::get_records()` call
then preserve existing behaviour of zero-based index. Update any tests
that call this method directly in order to perform assertions.

6 days agoMDL-79574 core: index returned persistent instances on record ID.
Paul Holden [Tue, 17 Dec 2024 14:55:17 +0000 (14:55 +0000)]
MDL-79574 core: index returned persistent instances on record ID.

6 days agoMDL-87451 reportbuilder: pass existing entity instances in method calls.
Paul Holden [Mon, 5 Jan 2026 13:04:19 +0000 (13:04 +0000)]
MDL-87451 reportbuilder: pass existing entity instances in method calls.

6 days agoMDL-87451 reportbuilder: accept entity instances when adding elements.
Paul Holden [Fri, 12 Dec 2025 15:47:52 +0000 (15:47 +0000)]
MDL-87451 reportbuilder: accept entity instances when adding elements.

Where the report already has an instance of the entity, it should be
able to just pass that, avoiding a lookup of the same.

7 days agoMerge branch 'MDL-87967' of https://github.com/paulholden/moodle
Ilya Tregubov [Fri, 27 Feb 2026 08:04:43 +0000 (09:04 +0100)]
Merge branch 'MDL-87967' of https://github.com/paulholden/moodle

7 days agoMerge branch 'MDL-29421' of https://github.com/paulholden/moodle
Ilya Tregubov [Fri, 27 Feb 2026 07:51:57 +0000 (08:51 +0100)]
Merge branch 'MDL-29421' of https://github.com/paulholden/moodle

7 days agoweekly release 5.2dev
Huong Nguyen [Fri, 27 Feb 2026 02:38:14 +0000 (09:38 +0700)]
weekly release 5.2dev

7 days agoNOBUG: Add upgrade notes
Huong Nguyen [Fri, 27 Feb 2026 02:38:14 +0000 (09:38 +0700)]
NOBUG: Add upgrade notes

7 days agoNOBUG: Fixed SVG browser compatibility
Huong Nguyen [Fri, 27 Feb 2026 02:38:02 +0000 (09:38 +0700)]
NOBUG: Fixed SVG browser compatibility

7 days agoMerge branch 'install_main' of https://git.in.moodle.com/amosbot/moodle-install
Huong Nguyen [Fri, 27 Feb 2026 02:38:01 +0000 (09:38 +0700)]
Merge branch 'install_main' of https://git.in.moodle.com/amosbot/moodle-install

7 days agoAutomatically generated installer lang files
AMOS bot [Fri, 27 Feb 2026 00:07:51 +0000 (00:07 +0000)]
Automatically generated installer lang files

8 days agoMDL-87905 Behat: pause incorrectly thinks terminal not interactive
sam marshall [Mon, 9 Feb 2026 12:02:21 +0000 (12:02 +0000)]
MDL-87905 Behat: pause incorrectly thinks terminal not interactive

When run from behat/cli/run.php, the pause command may fail because
it thinks the terminal is not interactive, even if the input and
output is passed through from an interactive terminal run.

8 days agoMDL-60912 core_completion: Fix course completion percentage calculation
Anupama Sarjoshi [Fri, 16 Jan 2026 14:23:17 +0000 (19:53 +0530)]
MDL-60912 core_completion: Fix course completion percentage calculation

This change ensures that course completion percentage calculations
include only completion activities visible to the user on the course
home page. Hidden or unavailable activities, and those in hidden
sections, are no longer included in the calculation.