Compare commits

...

1691 Commits

Author SHA1 Message Date
Huong Nguyen e1c3872f65 Moodle release 5.0.5 2026-02-06 09:16:50 +07:00
Huong Nguyen cbd5285963 NOBUG: Add upgrade notes 2026-02-06 09:16:50 +07:00
Mihail Geshoski 6dd7b7e490 weekly release 5.0.4+ 2026-02-05 20:23:41 +08:00
Mihail Geshoski 16b222ce6e NOBUG: Add upgrade notes 2026-02-05 20:23:41 +08:00
Mihail Geshoski 244efc0522 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2026-02-05 20:23:25 +08:00
Paul Holden 503411d6b6 MDL-87870 admin: tighten up validation of colour picker values. 2026-02-05 17:26:33 +07:00
Paul Holden 82f8c9f6c6 MDL-87870 filter_tex: escape background argument content. 2026-02-05 17:26:32 +07:00
Huong Nguyen dc74dfcac4 Merge branch 'MDL-87352-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2026-02-05 17:26:32 +07:00
Mihail Geshoski f9f0033ce4 Merge branch 'MDL-87258-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2026-02-05 17:26:32 +07:00
Jun Pataleta de33246b7b Merge branch 'MDL-87757-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2026-02-05 17:26:32 +07:00
yusufwib01 5d0eab1555 MDL-86785 tiny_equation: Add timeout handling for mimetex execution 2026-02-05 12:03:16 +08:00
Mihail Geshoski 05b4ca7dac Merge branch 'MDL-86437-500' of https://github.com/snake/moodle into MOODLE_500_STABLE 2026-02-05 12:03:16 +08:00
Huong Nguyen 40af5cd52d MDL-87843 filter_tex: Switch to use Colour picker setting
This will allow users to easily choose the background colour
and prevent invalid input values
2026-02-05 12:03:16 +08:00
Paul Holden ea1b0eb4e1 MDL-87612 repository: safer unserializing of file source data. 2026-02-05 12:03:16 +08:00
Mihail Geshoski 071504114a Merge branch 'MDL-87789-500' of https://github.com/snake/moodle into MOODLE_500_STABLE 2026-02-05 12:03:16 +08:00
Shamim Rezaie 77637bfb26 Merge branch 'MDL-86444_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2026-02-05 12:03:15 +08:00
Muhammad Arnaldo ed57a7c2c7 MDL-87757 block_myoverview: Remove navigation role and behat update
- Removal of the navigation role on main and zero-state template
- Add accessibility extra tests for the block_overview
2026-02-04 10:11:46 +07:00
Muhammad Arnaldo 1c17ab4277 MDL-87757 block_myoverview: fix the heading-order 2026-02-04 10:11:46 +07:00
Andi Permana 119cb76523 MDL-87352 admin: Add MoodleNet removal warnings 2026-02-04 10:06:33 +07:00
AMOS bot 2ae0229827 Automatically generated installer lang files 2026-02-04 00:07:38 +00:00
Jun Pataleta 5f7e9e3c6b Merge branch 'MDL-83984_500' of https://github.com/santoshndev/moodle into MOODLE_500_STABLE 2026-02-03 17:06:37 +08:00
Jake Dallimore 77ce015cc4 Merge branch 'MDL-85535-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2026-02-03 16:59:33 +08:00
Jun Pataleta de163f6f42 Merge branch 'MDL-87185-500' of https://github.com/durenadev/moodle into MOODLE_500_STABLE 2026-02-03 16:50:03 +08:00
Jun Pataleta f98ff41818 Merge branch 'MDL-87593-500-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_500_STABLE 2026-02-03 16:47:36 +08:00
Jun Pataleta e03bd88e9a Merge branch 'MDL-77162-filepicker-a11y-tab-order-repository-keyboard-selection-M5.0' of https://github.com/stopfstedt/moodle into MOODLE_500_STABLE 2026-02-03 16:44:05 +08:00
Jun Pataleta bd3bae8b9c Merge branch 'MDL-87694-course-participant-profile-missing-heading-M5.0' of https://github.com/stopfstedt/moodle into MOODLE_500_STABLE 2026-02-03 15:18:08 +08:00
Rajneel Totaram 47a7db0a69 MDL-87258 mod_lti: request access for PNA
Since Chrome 142, public servers accessing resources on local networks
gets blocked by default. Users need to allow access for such requests
to proceed.

This patch introduces a new config setting `ltiallowlocalnetwork`.
This determines if the local-network-access flag should be added to LTI
iframes so that Chrome users get prompted when a local network access
is being made.
2026-02-03 18:49:01 +12:00
Mihail Geshoski cd55b35362 Merge branch 'MDL-87606_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2026-02-03 14:22:36 +08:00
Mihail Geshoski 049c2636c0 Merge branch 'MDL-86609_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2026-02-03 14:10:55 +08:00
Mihail Geshoski 3e2824d0df Merge branch 'MOODLE_500_STABLE_MDL-84966' of https://github.com/niko-hoogeveen/moodle into MOODLE_500_STABLE 2026-02-03 13:44:57 +08:00
Mihail Geshoski 07109510c7 Merge branch 'MDL-85653_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2026-02-03 13:36:38 +08:00
Mihail Geshoski d8372d7ecd Merge branch 'MDL-87029-500' of https://github.com/cameron1729/moodle into MOODLE_500_STABLE 2026-02-03 13:26:55 +08:00
Huong Nguyen 91f05629cd Merge branch 'MDL-87334-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-02-03 11:07:50 +07:00
Huong Nguyen 431138556e Merge branch 'MDL-87289-500' of https://github.com/raortegar/moodle into MOODLE_500_STABLE 2026-02-03 10:43:59 +07:00
Huong Nguyen a7c18aaee7 Merge branch 'MDL-87396-500' of https://github.com/izendegi/moodle into MOODLE_500_STABLE 2026-02-03 10:37:16 +07:00
Huong Nguyen 94bc33b976 Merge branch 'MDL-87520-500-branch-number' of https://github.com/mudrd8mz/moodle into MOODLE_500_STABLE 2026-02-03 10:32:43 +07:00
Huong Nguyen c872aad808 Merge branch 'MDL-86905-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2026-02-03 10:27:12 +07:00
Huong Nguyen 00143faad5 Merge branch 'MDL-87675-500' of https://github.com/nvhai248/moodle into MOODLE_500_STABLE 2026-02-03 10:23:43 +07:00
AMOS bot d268a60e1e Automatically generated installer lang files 2026-02-03 00:07:52 +00:00
Stefan Topfstedt a23bd2ad53 MDL-87694 core: prevent empty heading in context header. 2026-02-02 10:38:14 -08:00
Stefan Topfstedt 4f2deeadf0 MDL-87694 profile: change page title to "Login required".
This realigns the page title with user/view.php.
2026-02-02 10:23:24 -08:00
Stefan Topfstedt 76cb6c49b0 MDL-87694 profile: set top level heading when accessed as guest user. 2026-02-02 10:13:40 -08:00
Jun Pataleta 35b132b2c2 MDL-87694 core: headinglevel display option for $OUTPUT->confirm()
`\core\output\core_renderer::confirm()`'s `$displayoptions` parameter
now also accepts a `headinglevel` option that developers can use to
specify the heading level of the confirmation's heading. If not
specified, the confirmation heading will be rendered in an `h4` tag.
2026-02-02 09:19:34 -08:00
cescobedo d70634a418 Merge branch 'MDL-87761-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2026-02-02 11:15:41 +01:00
Jun Pataleta 389c5e2eb5 MDL-86905 core: Use proper link markup for email links 2026-02-02 18:05:03 +08:00
Huong Nguyen d677363483 Merge branch 'MDL-78342-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2026-02-02 08:50:04 +07:00
Safat 0a1b2845a5 Merge branch 'MDL-86601-adhoc-index-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2026-02-02 12:13:00 +11:00
Cameron Ball 003fea1634 MDL-87029 quiz: Refetch attempts in overdue task to avoid stale submits
The update_overdue_attempts scheduled task iterated attempts from a recordset
and could act on stale attempt data if the web request finished an attempt
before cron processed it, causing duplicate submissions.

Change get_list_of_overdue_attempts() to return only attempt ids plus computed user
timeclose/timelimit, and refetch each attempt by id inside the task loop before
constructing quiz_attempt. This keeps quiz_attempt APIs unchanged and ensures cron
operates on current state
2026-01-31 15:38:43 +08:00
AMOS bot 24b230e284 Automatically generated installer lang files 2026-01-31 00:07:43 +00:00
David Mudrák 0f61bd060e MDL-87520 core: Fix interpretation of CFG->branch in update API client
Starting in version 3.10, Moodle started to use a different format for
the $CFG->branch that has not been fixed here. This is to make sure that
we request the correct version of the plugin.
2026-01-30 14:20:21 +01:00
Benjamin Walker 226aee577d MDL-86601 core_task: Add index for scheduled task lastruntime 2026-01-30 22:52:20 +10:00
Benjamin Walker 4a2cf5131b MDL-86601 core_task: Add index for large adhoc task queues 2026-01-30 22:52:19 +10:00
Sara Arjona 4f3ecdf095 MDL-87761 course: Add warning for phasing out subsection descriptions
The Description field within the Subsection edit form has been deprecated since Moodle 5.2 onwards (see MDL-87279).
To ensure a smooth transition and avoid data loss for our users, the XD team have prepared a solution to notify them
of this upcoming change in stable versions.
2026-01-30 12:25:55 +01:00
Iñigo Zendegi 12bcb9a569 MDL-87396 mod_assign: Add availability check to notifications 2026-01-30 12:02:12 +01:00
Paul Holden fb3e6c2e8c MDL-87334 course: looser check for empty return field editing course.
When the course format switcher reloads the form, the `$returnto`
parameter is of type string: "0", rather of type integer per initial
load.

In this case the `empty(...)` check is verifying all of empty string,
0 (integer) and "0" (string). Hurrah for PHP type checking.
2026-01-30 10:37:55 +00:00
Huong Nguyen 59fd844136 weekly release 5.0.4+ 2026-01-30 15:39:35 +07:00
Huong Nguyen f0d72a138f Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2026-01-30 15:39:24 +07:00
Andrew Nicols 8c50614860 NOBUG: Bump composer.lock 2026-01-30 13:07:12 +08:00
Daniel Ureña 18192b6ea0 MDL-87185 block_site_main_menu: Add required library 2026-01-29 13:12:52 +01:00
fgo c624f40635 MDL-86437 enrol_lti: Cast scoreGiven to float for LTI compliance
scoreGiven was being passed as a string (e.g. "8.0"), which caused
validation errors in some LMS implementations such as Rustici Engine.
According to the LTI specification, scoreGiven must be numeric if
present.

Co-authored-by: Jake Dallimore <jake@moodle.com>
2026-01-29 14:59:14 +08:00
Jake Dallimore ec28b3530a MDL-87789 libraries: patch lti1p3 for certification support
https://github.com/packbackbooks/lti-1-3-php-library/issues/169 blocks
us from using the new build.1edtech certification tooling. This issue
commits that fix as a library customisation/hack for stables, so the
suite can be used for annual/bi-annual re-certification.
2026-01-29 13:26:32 +08:00
Huong Nguyen bb4d7e6ee4 Merge branch 'MDL-87521_500' of https://github.com/timhunt/moodle into MOODLE_500_STABLE 2026-01-29 11:03:47 +07:00
Huong Nguyen 68398f16c7 Merge branch 'MDL-87087-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2026-01-29 11:01:41 +07:00
Huong Nguyen 68b06af0f8 Merge branch 'MDL-86994-500' of https://github.com/mioyu-ubiq/moodle into MOODLE_500_STABLE 2026-01-29 10:58:30 +07:00
Huong Nguyen 3481a9d19e Merge branch 'MDL-87018-500' of https://github.com/bhect0/moodle into MOODLE_500_STABLE 2026-01-29 10:55:12 +07:00
Huong Nguyen 9db5a7f3fe Merge branch 'MDL-87104-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-29 10:46:38 +07:00
Huong Nguyen 9f5fedee5f Merge branch 'MDL-87323-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-29 10:41:40 +07:00
Huong Nguyen 2d8d1e8dcf Merge branch 'MDL-86988-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-29 10:39:20 +07:00
Angelia Dela Cruz bd27e15147 MDL-87087 tool_dataprivacy: Test data request by authorized user 2026-01-29 11:09:13 +08:00
AMOS bot bcd7b651b8 Automatically generated installer lang files 2026-01-29 00:07:41 +00:00
David Mudrák 85c1213a5e MDL-87593 lang: Fix strings order 2026-01-28 21:45:08 +01:00
Tim Hunt 7ede51f863 MDL-87521 behat: better error reporting if an adhoc task fails 2026-01-28 14:58:49 +00:00
Paul Holden 2cc0ff9b26 Merge branch 'MDL-87437-500' of https://github.com/tasiobg/moodle into MOODLE_500_STABLE 2026-01-28 14:16:28 +00:00
Jun Pataleta 63cb8772ae Merge branch 'MDL-86639-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2026-01-28 16:17:18 +08:00
mioyu-ubiq 56ab46e236 MDL-86994 mod_assign: Behat to test permitted users can edit submission 2026-01-28 13:55:21 +08:00
Hai Nguyen Van 2b73a96232 MDL-87675 core: Add delay for displaying the YUI alert dialogue message
* Add a slight delay for displaying the message content of the YUI
alert dialogue's ARIA live container to allow screen readers to
announce the alert message accordingly.
2026-01-28 03:18:14 +00:00
David Mudrák 9b3f75c5c7 MDL-87593 lang: Use the fixed strings in tests 2026-01-27 21:44:46 +01:00
Helen Foster 408a058083 MDL-87593 lang: Import fixed English strings (en_fix) 2026-01-27 21:42:43 +01:00
Mark Johnson 4d89422fc8 MDL-87606 backup: Include child questions in backups
Since MDL-41924, because we are not always including the whole category
of each question being used in a backup, we have been missing some child
questions.

This expands the query selecting questions belonging to categories
where only annotated questions are being included, to also select any
children of those questions.
2026-01-27 14:53:37 +00:00
Paul Holden 215d9d623c MDL-87104 message: remove border from contact request sent profile info. 2026-01-27 10:26:07 +00:00
Raquel Ortega 986a201e6c MDL-87289 mod_forum: Disable mediaplugin filter in emails 2026-01-26 21:33:30 +01:00
Niko Hoogeveen 74c67b4f30 MDL-84966 core_question: Updated question bank tag filter
Fixes a bug where filtering questions by tag the 'NONE'
option was not being respected. Automated testing was also added
to cover tag filtering conditions in the question bank
2026-01-26 11:21:28 -05:00
Huong Nguyen efb090fa3f Merge branch 'MDL-84862-500-test' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2026-01-26 15:32:39 +07:00
Huong Nguyen 94db3eae21 weekly release 5.0.4+ 2026-01-26 10:39:17 +07:00
Huong Nguyen c7511914d4 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2026-01-26 10:39:05 +07:00
Héctor Benedicte 641bb41063 MDL-87018 qtype_essay: Add unit tests for un_summarise_response(). 2026-01-23 19:25:23 +01:00
AMOS bot 8c0d5df95b Automatically generated installer lang files 2026-01-23 00:07:58 +00:00
Safat 862d57ca12 Merge branch 'MDL-86527-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2026-01-22 15:40:02 +11:00
Huong Nguyen ac4a2a427f Merge branch 'MDL-87188-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-22 11:02:53 +07:00
Huong Nguyen f7892080c5 Merge branch 'MDL-87317-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2026-01-22 10:53:05 +07:00
Huong Nguyen 29cc6da010 Merge branch 'MDL-87318-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2026-01-22 10:46:28 +07:00
Huong Nguyen 8de8070c46 Merge branch 'MDL-86797-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-22 10:44:30 +07:00
Huong Nguyen b04d0c86f1 Merge branch 'MDL-87092-500' of https://github.com/Kredelirious/moodle into MOODLE_500_STABLE 2026-01-22 10:37:05 +07:00
Huong Nguyen 9fd37ca5c6 Merge branch 'MDL-87090-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2026-01-22 10:32:56 +07:00
Jun Pataleta 80ced0eddc Merge branch 'MDL-86136_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2026-01-22 08:32:34 +08:00
Jun Pataleta 238eb6b945 Merge branch 'MDL-87478_500' of https://github.com/mohdtahseen1/moodle into MOODLE_500_STABLE 2026-01-22 08:22:33 +08:00
Mark Johnson ca0efffb05 MDL-86136 question: Amend version restore test
Restoring a whole course will now restore the backed-up questions to a
new qbank instance. This means the test to restore versions was not
restoring the deleted versions to the original question bank entires,
but to a new question bank entry in the new qbank.

Updating the test to just backup and restore the quiz resolves this.
2026-01-21 09:30:07 +00:00
Mark Johnson 2785d6f2bd MDL-86136 qbank: Restore entire activity when it is in the backup
When restoring a backup containing a question bank, we were always
trying to match questions to an existing category on the target course
if once existed. This meant that when duplicating a qbank on the same
course, or importing the same qbank to another course multiple times,
only one of the restored qbanks would end up with questions in it.

This adds a mechanism to record any activities in the backup which
support `FEATURE_PUBLISHES_QUESTIONS`. Then when we restore the
questions, we check if we will be restoring the original activity they
belong to, and skip trying to match them to an existing category. This
means a new copy of each question will be created, and moved to the new
copy of the qbank once it is created.
2026-01-21 09:30:06 +00:00
Muhammad Arnaldo 1bf68468ef MDL-86527 behat: Avoid element-click-intercepted failures
Adjusts the window size to accommodate wide tables.
This ensures that columns which were previously clipped
are now visible and accessible to the Behat driver.
2026-01-21 15:05:12 +07:00
Muhammad Arnaldo 38375adf4d MDL-86527 behat: Fix random failures when toggling edit mode 2026-01-21 15:05:12 +07:00
Adrian Greeve 4e1053e6ce Merge branch 'MDL-87625-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2026-01-21 14:20:35 +08:00
Adrian Greeve 24c97bd603 Merge branch 'MDL-87659-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2026-01-21 13:15:07 +08:00
Andrew Nicols 8be48fd41e MDL-87659 core: Hide "Details" section of checks Table when there are none 2026-01-21 13:01:41 +08:00
Huong Nguyen 64f95b61c1 Merge branch 'MDL-79221-MOODLE_500_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_500_STABLE 2026-01-21 10:14:21 +07:00
Huong Nguyen 014580bbdd Merge branch 'MDL-51447-500' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_500_STABLE 2026-01-21 10:10:50 +07:00
AMOS bot 1bb491d769 Automatically generated installer lang files 2026-01-21 00:08:05 +00:00
Yusuf Wibisono fbc30b007b MDL-86639 groups: Wrap group names in grade report group selector 2026-01-21 03:34:57 +07:00
Ilya Tregubov f245bdaf24 Merge branch 'MDL-76975-500' of https://github.com/yerairogo/moodle into MOODLE_500_STABLE 2026-01-20 19:46:11 +02:00
Paul Holden 2b4d264cb1 MDL-86797 courseformat: account for hidden delegated section info. 2026-01-20 09:56:45 +00:00
Kim Jared Lucas 2a6955e490 MDL-87092 tool_uploaduser: suspend enrolments via CSV upload 2026-01-20 11:20:03 +08:00
Mihail Geshoski 0a30b72921 Merge branch 'MDL-87287_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2026-01-20 10:37:20 +08:00
AMOS bot 173f24702f Automatically generated installer lang files 2026-01-20 00:08:06 +00:00
Anupama Sarjoshi 1944075f31 MDL-51447 block_completionstatus: Show only user-visible activities
This change ensures that the completion details page displays only the
activities that are visible to the user on the course home page.
Activities that are hidden, unavailable or  located in hidden sections
are no longer shown in the completion details view.

Co-authored by: ewallah <info@ewallah.net>
2026-01-19 17:57:01 +05:30
Anupama Sarjoshi c4f303b42a MDL-51447 core_completion: Get visible activities with completion on 2026-01-19 17:57:01 +05:30
Simey Lameze b898bff306 MDL-87090 behat: improve new test 2026-01-19 14:13:16 +08:00
mioyu-ubiq 6b08248cfa MDL-87090 mod_assign : Teacher can override assignment deadlines 2026-01-19 14:13:14 +08:00
David Woloszyn fedc27f80e MDL-78342 core_table: Remove line break conversion in format_text 2026-01-19 13:07:56 +11:00
Mark Johnson 194caa005d MDL-86609 qbank_bulkmove: Select the current category by default 2026-01-16 14:36:20 +00:00
Nicolas Dunand bf73761ff8 MDL-86609 qbank_bulkmove: Target qbank categoryid fix. 2026-01-16 14:35:56 +00:00
Luca Bösch 781cdd65f4 MDL-87318 gradereport_grader: No over-thick table borders with BS 5. 2026-01-16 11:01:31 +01:00
Luca Bösch 0deaaf6e18 MDL-87317 report_progress: Striped hovering table rows with BS 5. 2026-01-16 11:00:37 +01:00
Jake Dallimore 3d8e9b8444 weekly release 5.0.4+ 2026-01-16 16:38:28 +08:00
Jake Dallimore 07c19b9ce7 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2026-01-16 16:38:22 +08:00
Paul Holden d33164d9c4 MDL-85300 grade: account for tooltip size in bulk move dialogue.
Now that it actually works, it obscures some elements required in
Behat scenarios. Resize the icon, and place it to the right.
2026-01-16 15:26:53 +08:00
Jake Dallimore 0f56b6d72b Merge branch 'MDL-87634-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Huong Nguyen b27b9b4031 Merge branch 'MDL-86802-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Jake Dallimore 8d12694488 Merge branch 'MDL-86423-500' of https://github.com/martygilbert/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Jake Dallimore fb293a5750 Merge branch 'MDL-87635-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Jake Dallimore 301e373ffa Merge branch 'MDL-86869_500-single-view-overload' of https://github.com/alexkeel/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Paul Holden b8bd4e8604 MDL-50364 forms: consistent access to language strings from JS. 2026-01-16 15:26:53 +08:00
Paul Holden 54b42e04af Merge branch 'MDL-50364-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Ilya Tregubov 80709ededb Merge branch 'MDL-85300-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Huong Nguyen 8af6c40ab0 Merge branch 'MDL-86017-500' of https://github.com/mijiaa/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Huong Nguyen 2bd3f9f058 Merge branch 'MDL-87070-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Huong Nguyen e9fbd3db48 Merge branch 'MDL-85431_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Huong Nguyen 7ccd3a62d9 Merge branch 'MDL-87443-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-16 15:26:53 +08:00
Huong Nguyen be210d1ed2 Merge branch 'MDL-87229-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2026-01-16 15:26:52 +08:00
Huong Nguyen b9d71a4a47 Merge branch 'MDL-87056-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-16 15:26:52 +08:00
Huong Nguyen 31fd12db29 Merge branch 'MDL-86565-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-16 15:26:52 +08:00
Huong Nguyen cf22cbe371 Merge branch 'MDL-87120-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2026-01-16 15:26:51 +08:00
Mark Johnson 855d0901ea MDL-85653 qbank_editquestion: Display static status when not editable 2026-01-14 15:42:40 +00:00
Mark Johnson 7bd7ca8d83 MDL-86444 questions: Fix question categories with incorrect top parents 2026-01-14 10:11:40 +00:00
Paul Holden ed571424f9 MDL-87634 core: exclude fixtures from Github actions "one-by-one" job.
This is consistent with the PHPUnit general configuration in 20aa9d05.
2026-01-14 09:25:34 +00:00
Yerai Rodríguez 5f075b79be MDL-76975 admin: Move AMD dependencies to data attribute to fix overflow
Since there is a 1024 length limit on arguments passed through
js_call_amd(), we pass it through a HTML element dataset to avoid
this limit.
2026-01-14 08:34:06 +01:00
Guest 5093d3bfe7 MDL-87478 mod_quiz: Make pre-create attempts work with previews 2026-01-13 15:10:45 +05:30
AMOS bot 22e13a4463 Automatically generated installer lang files 2026-01-13 00:08:00 +00:00
Andrew Nicols 072658a276 MDL-87625 core: Use the /r.php basepath to guess routes 2026-01-13 08:06:38 +08:00
Paul Holden d873307bf8 MDL-87635 backup: ensure required test libraries are loaded. 2026-01-12 17:22:26 +00:00
Simey Lameze 602e40f054 MDL-87088 behat: add missing @javascript tags to required tests 2026-01-12 13:37:59 +07:00
Angelia Dela Cruz 8507bc2716 MDL-87070 mod_glossary: Behat to confirm glossary autolinking works 2026-01-12 11:59:14 +08:00
Huong Nguyen 3e398810f2 Merge branch 'MDL-87088-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2026-01-12 09:53:25 +07:00
Huong Nguyen 1352482b39 Merge branch 'MDL-86058-allow-enable-disable-tasks-backport-MOODLE-500-STABLE' of https://github.com/duyhuynhdev/moodle into MOODLE_500_STABLE 2026-01-12 09:44:32 +07:00
Stefan Topfstedt 27a36e6fae MDL-77162 filepicker: default to selecting first repository available. 2026-01-09 08:14:14 -08:00
Paul Holden 4c4e77ba26 MDL-87443 reportbuilder: use Toast selector in Behat scenarios. 2026-01-09 12:08:19 +00:00
Paul Holden fdd9f2e022 MDL-87443 behat: define new Toast message named selector. 2026-01-09 12:08:19 +00:00
Mark Johnson cffa9a1008 MDL-87287 qbank_deletequestion: Update behat test for tag deletion
Now that deleting a tagged question correctly deletes it tag instances,
the tag is no longer available for re-selection after all the tagged
questions are deleted.
2026-01-09 10:42:39 +00:00
Mark Johnson 0ff87413b5 MDL-87287 mod_qbank: De-duplicate tags when migrating questions
In the migration from old-style question banks to mod_qbank, if a
question had the same tag from multiple contexts, when it was moved to
its new question bank context, the migration tried to set multiple tag
instances for the same tag to the same context, which caused a unique
key violation.

This add some checking to the
`question_move_question_tags_to_new_context` function to identify any
tag instances to be moved that will trigger this key violation, and
delte any duplicates before the move so we end up with a single instance
of the tag in the new context. This is done in a transaction that will
only be committed once the remaining tags have been moved.

This required adding the `tiuserid` field to the data returned by
`core_tag_tag::get_items_tag` so we can assemble the unique key without
having to do additional queries.

This also extends the test coverage for the `transfer_questions` task
to ensure tags are moved to the new contexts, and tags on stale questions
are deleted.
2026-01-09 10:42:07 +00:00
Mark Johnson 8bd6c40a0c MDL-87287 qbank_tagquestion: Remove all tags from deleted questions
When we deleted a question, we were including the userid of the user who
performed the delete when checking for question tags. This means that if
user A tagged the question, and user B deleted the question, it might
leave the tags behind.

This fixes the issue by deleting tags regardless of the user, and adds
an upgrade step to find and remove orphaned tag instances.
2026-01-09 10:42:07 +00:00
Tasio e95a118087 MDL-87437 course: Make course cached image entries domain-agnostic 2026-01-09 10:10:23 +01:00
Luca Bösch 80e0d1818a MDL-87229 course: Show nice "Other users" table in courses. 2026-01-09 07:12:42 +01:00
Jayce Birrell a38ed9f2a3 MDL-50364 forms: calendar header renderer uses translated months 2026-01-09 13:52:59 +10:30
Angelia Dela Cruz 3ff7a1a4b7 MDL-87088 core_grades: Behat to view grades from user menu 2026-01-09 10:40:30 +08:00
Huong Nguyen 9699514341 weekly release 5.0.4+ 2026-01-09 08:41:40 +07:00
Huong Nguyen c04d745016 NOBUG: Add upgrade notes 2026-01-09 08:41:40 +07:00
Jun Pataleta 4c2ac777f1 MDL-85535 forum: Render discussion navigation at the bottom only 2026-01-08 11:35:00 +08:00
Jun Pataleta b6f5584c4d MDL-85535 forum: Label discussion navigation 2026-01-08 11:35:00 +08:00
Marty cd80e0ae07 MDL-86423 mod_assign: Reduce duesoon/overdue notifications.
Students shouldn't receive overdue notifications if there is nothing to
submit in Moodle.

Students shouldn't receive due soon notifications if they a) already
have a grade or b) meet activity completion status.
2026-01-07 12:20:51 -05:00
Paul Holden 7a2a319bbd MDL-87120 course: observe activity dates display in course requests.
Upgrade step to ensure the default value for this field in the schema
matches the default value used in the interface itself.
2026-01-07 16:43:26 +00:00
Jun Pataleta f1784eba65 Merge branch 'MDL-86436-navigation-accessibility-page-heading-menu-visible-on-larger-screens-even-if-empty-M5.0' of https://github.com/stopfstedt/moodle into MOODLE_500_STABLE 2026-01-07 11:18:05 +08:00
Jun Pataleta c3114ff21a Merge branch 'MDL-87416-glossary-entry-page-title-missing-M5.0' of https://github.com/stopfstedt/moodle into MOODLE_500_STABLE 2026-01-07 11:13:54 +08:00
Santosh Nagargoje 4c53960c75 MDL-83984 core: Fixed subpanel show/hide issue 2026-01-06 16:19:21 +05:30
Adrian Greeve 9841148790 Merge branch 'MDL-87526-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2026-01-06 09:10:36 +08:00
Stefan Topfstedt fe15e9f6c3 MDL-87416 glossary: set page title on glossary entry details page. 2026-01-05 11:31:48 -08:00
Mark Johnson fbf2963387 MDL-85431 questions: Fix access checks on Question banks page
Users who could not manage activities on a course, but did have
permission to access particular question banks, could not access the
Question banks page.

This modifies the permission checks on that page to allow access if the
user can either manage activities, or has access to at least one
activity that publishes questions. Some additional changes to the output
were required to prevent non-editing users adding banks.

It also modifies the navigation hook to add the Question banks
navigation node if the user can access any activitiy that publishes
questions on the course. This is all based on cached modinfo and
permissions data so should remain performant.
2026-01-05 15:20:51 +00:00
Paul Holden fa94598fe0 Merge branch 'MDL-87288-500' of https://github.com/ilyatregubov/moodle into MOODLE_500_STABLE 2026-01-05 09:46:54 +00:00
Huong Nguyen 39ca46780a Merge branch 'MDL-81882-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-12-29 13:51:48 +07:00
Matt Porritt 926ac9ed31 MDL-84862 AI: Stop provider instance creataion when no provider plugins
Prevents calls to action to create an AI provider instance from
being displayed to users when there are no AI provider plugins
installed in the instance.

Co-Authored-By: Yusuf Wibisono <yusuf.wibisono@moodle.com>
2025-12-29 12:03:43 +07:00
Huong Nguyen 426ffb42da Merge branch 'MDL-87433-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-12-29 09:54:47 +07:00
yusufwib01 49dcdcadba MDL-81882 core: Optimize block instance deletion with batch processing
Improve upgrade execution by gathering block instance IDs upfront
and processing deletions of related records in context, block_positions, user_preferences, and block_instances tables in batches.
2025-12-29 09:30:48 +07:00
Muhammad Arnaldo 2482ea9af6 MDL-87433 course: Add sorting to get_nearest_editable_subcategory
Add ORDER BY to the query to ensure categories are returned in
consistent order. This fixes random test failures, especially
on PostgreSQL.
2025-12-24 16:14:26 +07:00
Alex Keel 09a7591042 MDL-86869 gradereport_singleview: Raises memory limit 2025-12-23 12:20:20 +00:00
Mihail Geshoski b81abb8578 Merge branch 'MDL-86798_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-12-23 16:11:38 +08:00
Andrew Nicols c9529535bb MDL-87526 core: Specify composer project type 2025-12-23 11:50:05 +08:00
Andrew Nicols 164376014e MDL-87526 core: Moodle provides moodle/lms 2025-12-23 11:50:05 +08:00
Mark Johnson 976456a6f1 MDL-86798 questions: Check original context is on the same site
When checking if the original context exists during a restore, we need
to check that we're looking at the context on the same site, not one on
a different site that happens to have the same ID.
2025-12-19 09:28:23 +00:00
Mark Johnson a364395d8e MDL-86798 questions: Track next version for question bank entries
This adds a new "nextversion" field to `question_bank_entries` to track
which version number the next version of the question should have. This
ensures that version numbers are not re-used if the latest version is
deleted.

To use this field, you must call
`\core_question\versions::get_next_version()`. This will initialise the
field to the correct value if it is currently null.

If you create a new version using this value, you must then call
`\core_question\versions::increment_next_version()` to increment the
counter.
2025-12-19 09:28:23 +00:00
Mark Johnson fb9f3ee58c MDL-86798 questions: Restore backups containing deleted versions
If the latest version of a question is deleted, and then a new one
created, the new one will currently re-use the version number of the
deleted version. If the original version was backed up before it was
deleted, then restored later, we end up with two questions in one
question bank entry that have the same version.

To resolve this, when restoring a question, we check if there is already
a version with the same version number, then bump it and any higher
versions up by 1. We also check for any references specifically using
these versions and bump those up by 1. Any references using "always
latest" will be fine, as the latest version will still be the latest.

Additionally, if deleting a version made it hidden, and the backup
contains the same version in "ready" state, restoring the backup will
restore it to "ready" state.
2025-12-19 09:26:15 +00:00
Huong Nguyen 6e82b46a48 weekly release 5.0.4+ 2025-12-19 09:04:41 +07:00
Ilya Tregubov 29e9471a66 MDL-87288 output: Fix pagination in small containers. 2025-12-18 09:37:49 +01:00
Huong Nguyen 6e1e877bb6 Merge branch 'MDL-87340-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-12-18 11:45:27 +08:00
Huong Nguyen b5d6d847cf Merge branch 'MDL-86420-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-12-18 11:45:27 +08:00
Huong Nguyen 02a6973793 Merge branch 'MDL-86086-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-12-18 11:45:27 +08:00
Huong Nguyen 2ceffeba8a Merge branch 'MDL-87094-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-12-18 11:45:27 +08:00
Mihail Geshoski f77a71f18f Merge branch 'MDL-72833_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-12-18 11:45:27 +08:00
Andi Permana 3df3f8c96c MDL-86086 theme_boost: Add visual distinction for readonly form inputs 2025-12-17 19:07:52 +07:00
Mihail Geshoski 627fdd0bfd Merge branch 'MDL-86416-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-12-17 12:15:05 +08:00
Paul Holden 5355c46c43 MDL-85300 output: ensure Bootstrap tooltips load for dynamic content.
Prior to this change, tooltips would only load for elements in the
initial page DOM without considering those elements subsequently added
dynamically (e.g. via AJAX).

Co-authored-by: Sebastian Gundersen <sebastian@sgundersen.com>
2025-12-16 13:30:20 +00:00
Alex Keel 48020125d1 MDL-86869 gradereport_singleview: Lower the max per page limit
Review actions
2025-12-15 14:48:36 +00:00
Amaia Anabitarte 8a9707b653 Merge branch 'MDL-87436-500' of https://github.com/laurentdavid/moodle into MOODLE_500_STABLE 2025-12-15 13:42:36 +01:00
Mark Johnson 9ad6d20b70 MDL-72833 quiz: Respect locale in maxmark setting
Editing maxmarks in quiz slots was not respecting the decimal separator
from the set language's locale, meaning if your language formats numbers
like 1,10 editing didn't work correctly.

This sets the correct parameter to ensure the locale is respected.
2025-12-15 11:46:52 +00:00
Jun Pataleta 3c56b3b7c0 Merge branch 'MDL-87341_500' of https://github.com/TomoTsuyuki/moodle into MOODLE_500_STABLE 2025-12-15 18:48:35 +08:00
Angelia Dela Cruz d6f5a3fa89 MDL-87094 core_course: Behat to restrict available activities/resources 2025-12-15 12:06:06 +08:00
Huong Nguyen e7f3feac7e Merge branch 'MOODLE_500_STABLE_MDL-73396' of https://github.com/niko-hoogeveen/moodle into MOODLE_500_STABLE 2025-12-15 08:55:46 +07:00
Huong Nguyen 08b7aafce2 Merge branch 'MDL-86679-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-12-15 08:47:53 +07:00
Tomo Tsuyuki 89b2aac22c MDL-87341 javascript: Fix aria label issue for navigation bar 2025-12-15 10:27:41 +11:00
Stefan Topfstedt d3500faa9b MDL-86436 navigation: hide empty page heading menu.
Co-authored-by: Jun Pataleta <jun@moodle.com>
2025-12-12 18:05:36 -08:00
Stefan Topfstedt 61b4aaf199 MDL-87415 profile: set page title when accessed as guest user. 2025-12-12 13:43:38 -08:00
Philipp Memmel 36caae7105 MDL-79221 core_grade: Fix fetching context for disabled mod plugins
Activity plugins that are disabled on the site are not included in
the modinfo cache. That's why their context must not be fetched via
modinfo cache.
2025-12-12 06:43:00 +01:00
Philipp Memmel 9af25198fd MDL-79221 core_completion: Do not update state for disabled plugins 2025-12-12 06:43:00 +01:00
Shamim Rezaie f878d036dd weekly release 5.0.4+ 2025-12-12 14:06:34 +11:00
Shamim Rezaie 9ccb749a18 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-12-12 14:06:24 +11:00
Mihail Geshoski a6d0cb3cc1 MDL-87412 qbank_managecategories: Use single quotes in scenario name 2025-12-12 09:46:25 +07:00
Huong Nguyen 40d438dac1 Merge branch 'MDL-84736-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-12-12 09:46:25 +07:00
Huong Nguyen 94b842021c Merge branch 'MDL-86830-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-12-12 09:46:25 +07:00
Huong Nguyen 7a567ed194 Merge branch 'MDL-86808-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-12-12 09:46:25 +07:00
Luca Bösch 5e6e675fb9 MDL-86677 mod_quiz: Make the attempt summary table striped 2025-12-12 09:46:24 +07:00
Mihail Geshoski 9054263ecd Merge branch 'MDL-87182-500' of https://github.com/srobotta/moodle into MOODLE_500_STABLE 2025-12-12 09:46:24 +07:00
Mihail Geshoski 0dbb57ece9 Merge branch 'MDL-87121_500' of https://github.com/santoshndev/moodle into MOODLE_500_STABLE 2025-12-12 09:46:24 +07:00
Mihail Geshoski b9be456bc6 Merge branch 'MDL-87412_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-12-12 09:46:24 +07:00
Mihail Geshoski 2c6fd6d4ac Merge branch 'MDL-87142-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-12-12 09:46:24 +07:00
Jun Pataleta 84c34ff230 Merge branch 'MDL-86807-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-12-12 09:46:24 +07:00
Jun Pataleta 06a0eb182b Merge branch 'MDL-86805-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-12-12 09:46:24 +07:00
Huong Nguyen c0fefda2fc Merge branch 'MDL-86593-500' of https://github.com/christianabila/moodle into MOODLE_500_STABLE 2025-12-12 09:46:24 +07:00
Muhammad Arnaldo be74828054 MDL-86420 enrol_database: avoid duplicate key violations 2025-12-11 10:25:24 +07:00
AMOS bot 984a280583 Automatically generated installer lang files 2025-12-11 00:08:02 +00:00
Niko Hoogeveen fb6a0f6444 MDL-73396 auth_oauth2: link non-suspended account on oauth login
Added checks to link non-suspended user accounts to OAuth2, when logging
in. Also added an additional check to prevent users from using OAuth2
to login if their account is suspended in Moodle.
2025-12-10 14:21:51 -05:00
Niko Hoogeveen 307ed32403 MDL-73396 core_user: prioritize active users when retrieving by email
Updated get_users_by_email() to return active users at the
start of the returned array, suspended users last.
2025-12-10 14:21:51 -05:00
Laurent David e30b97f3b8 MDL-87436 core_courseformat: Fix id collision when testing
* When testing using phpunit/sqlsrv the ids of sections and cm are colliding
so we need to make sure we separate them as a reference to a cm can be the
same as a reference to a section
2025-12-10 12:10:12 +01:00
Simey Lameze 187cc673c9 MDL-84736 behat: add custom step to edit a criterion
This commit also improves the existing tests and add a new scenario to
verify the 'Do not mark for regrade' behavior.
2025-12-09 17:23:21 +08:00
Angelia Dela Cruz 59bd9c5da6 MDL-84736 gradingform : Behat for editing guide with graded submissions 2025-12-09 17:23:20 +08:00
Stefan Topfstedt fa50aa22b9 MDL-86416 navigation: Render the more menu only when it's not empty
Co-authored-by: Jun Pataleta <jun@moodle.com>
2025-12-09 11:15:29 +08:00
Huong Nguyen 917b9a0e32 Merge branch 'MDL-87379_500' of https://github.com/santoshndev/moodle into MOODLE_500_STABLE 2025-12-09 09:28:29 +07:00
Mihail Geshoski 4388a17c2b Merge branch 'MDL-82281-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-12-09 09:45:59 +08:00
Mihail Geshoski 95bce73f7c Merge branch 'MDL-86677-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-12-09 09:29:03 +08:00
Mihail Geshoski a1390072c3 Merge branch 'mdl-87356_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-12-09 09:17:50 +08:00
Simey Lameze 8a3093377a MDL-87340 mod_quiz: make test_question_shuffle more robust
This commit improves test_question_shuffle by retrying if questions
remains in the same order after shuffling.
2025-12-09 07:34:12 +08:00
Stephan Robotta 8137ccc608 MDL-87182 quiz: no CBM metric when no data available 2025-12-08 08:46:02 +01:00
Muhammad Arnaldo becef1c899 MDL-86807 core_courseformat: RTL chevron in move activity modal 2025-12-08 11:50:37 +07:00
Andi Permana e9688d295f MDL-86830 calendar: Fix double encoding in event title attributes 2025-12-08 10:44:07 +07:00
Luca Bösch c3be940177 MDL-87142 question: dropdown-toggle class for question format select 2025-12-07 20:12:44 +01:00
Luca Bösch 9ae5248089 MDL-86677 mod_quiz: let the summary of attempt table be striped 2025-12-07 20:11:49 +01:00
Luca Bösch 580ab8704e MDL-82281 quiz: Amend test to circumvent modinfo cache fails. 2025-12-07 20:10:59 +01:00
Huong Nguyen a5b3ac7e43 Moodle release 5.0.4 2025-12-07 08:06:17 +07:00
Huong Nguyen a7bbd44304 NOBUG: Add upgrade notes 2025-12-07 08:06:16 +07:00
Andi Permana c15d798502 MDL-86805 courseindex: Fix RTL keyboard navigation in tree 2025-12-06 01:09:24 +07:00
Mark Johnson a4d8076384 MDL-87412 qbank_managecategories: Fix "new child" drop target
This fixes the CSS rule that reveals the "as new child of" drop target
shown when dragging a category over another category which has no
children.

We can't behat test the actual drag-drop reordering behaviour with behat
as reactive DragDrop components aren't testable, but we can trigger the
CSS to add a regression test for the drop target's appearance.
2025-12-05 14:18:20 +00:00
Santosh Nagargoje 8a23b61990 MDL-87379 theme_classic: Fixed mobile responsiveness issue 2025-12-05 15:25:33 +05:30
Muhammad Arnaldo e27fe53bc3 MDL-86808 theme_boost: misaligned footer popover in RTL
Limit the fallback placement vertically.
2025-12-05 16:28:00 +07:00
Andi Permana 65008c9e74 MDL-86679 core: Fix MS field mappings in upgrade script 2025-12-05 15:48:31 +07:00
Andi Permana 87eef1669d MDL-86679 oauth2: Support MS personal and work account names 2025-12-05 15:44:23 +07:00
Huong Nguyen 5a34bf72d6 weekly release 5.0.3+ 2025-12-05 08:08:56 +07:00
Huong Nguyen 3cf30be0f1 NOBUG: Add upgrade notes 2025-12-05 08:08:56 +07:00
Huong Nguyen 0c04f1921f MDL-81304 Performance: Add notes for CTE 2025-12-04 21:12:23 +07:00
Huong Nguyen b61eb194ef Merge branch 'MDL-87068-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-12-04 20:59:59 +07:00
Santosh Nagargoje 7cee7c5692 MDL-87121 quiz: Fixed random question performance issue 2025-12-04 17:27:37 +05:30
James C d36616757c MDL-87356 qtype_random: orphaned random questions should be deleted
This patch reinstates the task from MDL-63260 and MDL-66273.
2025-12-04 23:00:49 +13:00
Christian Abila 4d8bcbece8 MDL-86593 Course completion: Disabled modules not returned as criteria
- Filter out disabled modules
- Update get_criteria method signature
- Fix code style
2025-12-04 07:07:18 +01:00
Angelia Dela Cruz 1c9c017fa5 MDL-87068 contentbank_h5p: Behat for restoring course contentbank 2025-12-04 10:33:49 +08:00
Huong Nguyen ae27d04332 Merge branch 'MDL-83485-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-12-04 09:19:07 +07:00
Huong Nguyen 460089df2f Merge branch 'MDL-82232-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-12-04 09:13:09 +07:00
Huong Nguyen b33724c13e MDL-72744 table: Improve PHPUnit test 2025-12-04 08:57:58 +07:00
David Woloszyn 50b527ad2d MDL-72744 core_grades: Escape formulas when exporting spreadsheets 2025-12-04 08:57:58 +07:00
David Woloszyn bcf67dd1cb MDL-72744 dataformat: Escape formulas when exporting spreadsheets
Co-authored-by: Huong Nguyen <huongnv13@gmail.com>
2025-12-04 08:57:58 +07:00
Mihail Geshoski 09a76fcb45 Merge branch 'MDL-85534-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-12-04 09:45:20 +08:00
Huong Nguyen 05b0e7c0eb MDL-86087 core: Use correct required version 2025-12-04 08:36:40 +07:00
Mihail Geshoski 148a0c6459 Merge branch 'MDL-87299-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-12-04 09:22:12 +08:00
Mihail Geshoski 7e131d5b33 Merge branch 'MDL-87245-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-12-03 23:50:18 +08:00
Mihail Geshoski 9afb3db588 Merge branch 'MOODLE_500_STABLE_MDL-81304' of https://github.com/mattporritt/moodle into MOODLE_500_STABLE 2025-12-03 23:38:48 +08:00
Jun Pataleta b63c72dccd MDL-87245 scorm: Indicate when the SCORM package opens in a new window 2025-12-03 23:36:26 +08:00
Jun Pataleta 877e43b6ee MDL-87245 lang: Add a bracketed form of the opensinnewwindow lang string 2025-12-03 23:36:25 +08:00
Mihail Geshoski 18e8714eb4 Merge branch 'MDL-85858-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-12-03 23:28:37 +08:00
Jun Pataleta 1c9f9eed15 MDL-85534 forum: Set appropriate heading levels for the discussion page 2025-12-03 17:33:51 +08:00
Huong Nguyen a2d7d9bd05 Merge branch 'MDL-87091-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-12-03 16:11:33 +07:00
mioyu-ubiq 01ed555cad MDL-87091 behat: Test authloginviaemail setting behavior 2025-12-03 15:55:56 +08:00
Huong Nguyen e27c62ed44 MDL-87353 core: Safer unserializing of file references 2025-12-03 14:17:23 +08:00
Jun Pataleta b9465bbd1d Merge branch 'MDL-86087-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-12-03 14:10:04 +08:00
Stefan Hanauska 0722f5dc62 MDL-86960 mod_glossary: Check user 2025-12-03 13:42:17 +08:00
Stefan Hanauska 8f7d361597 MDL-86960 mod_data: Check user 2025-12-03 13:42:10 +08:00
Stefan Hanauska c05961c8da MDL-86960 mod_forum: Check user 2025-12-03 13:42:03 +08:00
Huong Nguyen 822dd5aeb7 Merge branch 'MDL-87339-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-12-03 12:15:02 +07:00
Jake Dallimore 60e6410c73 MDL-87286 enrol_lti: prevent suspended user account auth in legacy LTI 2025-12-03 15:50:09 +11:00
Jake Dallimore 6cf403f23e MDL-87286 auth_lti: prevent suspended user account auth in LTI1p3 2025-12-03 15:50:09 +11:00
Matt Porritt fbf71949dc MDL-81304 Performance: Improve performance of my courses.
Refactor get_nearest_editable_subcategory to improve performance.

This refactor maintains functionality and signature of
get_nearest_editable_subcategory but improves perofrmance
for varied datasets. This makes rendering of the
my courses page.
2025-12-03 15:49:41 +11:00
raortegar 83ee815775 MDL-87267 aiplacement_courseassist: Improve response formatting 2025-12-03 11:16:44 +07:00
Mihail Geshoski 672b2a9074 MDL-82808 assign: Use blindid during submission removal in blind marking 2025-12-03 03:14:20 +00:00
Rajneel Totaram bf6fb596dc MDL-82808 mod_assign: replace userid with blindid in anonymous marking 2025-12-03 03:14:20 +00:00
David Woloszyn 8565f480a3 MDL-86544 lib: Adjust checks on local URL params 2025-12-03 03:14:20 +00:00
Eric Merrill 8c9068eb5d MDL-80317 auth_oauth2: Restrict login redirect to local url 2025-12-03 03:14:20 +00:00
Stefan Hanauska 664191aa93 MDL-86507 badge: Check if role is assigned 2025-12-03 03:14:20 +00:00
David Woloszyn 9438f2af46 MDL-85557 tiny_equation: Sanitise equation preview input 2025-12-03 03:14:20 +00:00
yusufwib01 6d2eefe372 MDL-86326 auth: Enhance validation logic in resend_confirmation_email 2025-12-03 03:14:20 +00:00
Mihail Geshoski 545f94bbbc Merge branch 'MDL-86749_500' of https://github.com/santoshndev/moodle into MOODLE_500_STABLE 2025-12-03 11:06:23 +08:00
Huong Nguyen a0e4237954 Merge branch 'MDL-78442-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-12-03 09:55:53 +07:00
Mihail Geshoski a92402e067 Merge branch 'MDL-87066_cleanstring_500' of https://github.com/skodak/moodle into MOODLE_500_STABLE 2025-12-03 09:47:36 +08:00
Jun Pataleta b4a12fcc30 MDL-82232 behat: Fix breadcrumb navigation on Behat 2025-12-02 19:22:10 +08:00
Jun Pataleta 3140d11871 MDL-82232 core: Change the breadcrumb lang string to Breadcrumb 2025-12-02 19:22:10 +08:00
Andi Permana fe98642103 MDL-78442 antivirus_clamav: Try SCAN first, then INSTREAM as fallback 2025-12-02 15:46:43 +07:00
Andi Permana da7ce0c6e2 MDL-78442 tool_moodlenet: Fix directory path passed to antivirus scanner 2025-12-02 15:46:43 +07:00
Mihail Geshoski 9ff7da25f1 Merge branch 'MDL-86806-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-12-02 15:11:03 +08:00
Mihail Geshoski adbdfc59ca Merge branch 'MDL-86523-MOODLE_500_STABLE_invalidcategoryid' of https://github.com/loewis/moodle into MOODLE_500_STABLE 2025-12-02 15:03:57 +08:00
Mihail Geshoski 4425af045f Merge branch 'MDL-86844-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-12-02 14:50:31 +08:00
Mihail Geshoski 11d65e4c0b MDL-85405 core: Bump version to update cache 2025-12-02 14:27:50 +08:00
Mihail Geshoski 7fd581312c Merge branch 'MDL-85405_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-12-02 14:20:09 +08:00
Huong Nguyen f9ec46708e Merge branch 'MDL-84898-prohibitjoin-50' of https://github.com/leonstr/moodle into MOODLE_500_STABLE 2025-12-02 10:38:24 +07:00
Huong Nguyen bd4730f673 Merge branch 'MDL-86425-500' of https://github.com/sh-csg/moodle into MOODLE_500_STABLE 2025-12-02 10:32:39 +07:00
Huong Nguyen 47f6947f32 Merge branch 'MDL-87218-500-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_500_STABLE 2025-12-02 10:30:59 +07:00
Muhammad Arnaldo 1f68dba5c2 MDL-86806 core_courseformat: Fix RTL keyboard navigation
Ensure consistent navigation experience across LTR and
RTL interfaces in activity chooser.
2025-12-02 10:20:50 +07:00
David Mudrák 64e7610026 MDL-87218 lang: Use the fixed strings in tests, too 2025-12-01 19:46:29 +01:00
Helen Foster 44549616db MDL-87218 lang: Import fixed English strings (en_fix) 2025-12-01 19:46:29 +01:00
Jun Pataleta e3cc7953eb MDL-85858 mod_scorm: Fix Table of Contents toggle button's accessibility
* Set proper label via `aria-label`.
* Instead of changing the button's label to 'Show'/'Hide', set the
button's `aria-expanded` attribute accordingly.
* Remove unnecessary event handling for the toggle button when pressing
Enter or Space key. This is already natively supported and triggers
the click event.
* Adjust Behat tests accordingly.
2025-11-28 21:01:20 +08:00
Jun Pataleta 3902dd9df6 MDL-85858 mod_scorm: Use semantic heading for the Preview mode 2025-11-28 21:01:19 +08:00
Jun Pataleta 8b9a7fdb15 MDL-85858 mod_scorm: Set page and iframe titles for the SCORM player 2025-11-28 21:01:19 +08:00
Luca Bösch fbc330cf89 MDL-86844 qbank: style question bank table as in Moodle 4.5. 2025-11-28 10:40:16 +01:00
Huong Nguyen c4d054cfbf MDL-86087 core: Fix PHPUnit 11.5.43+ compatibility
Adjust tests to comply with updated PHPUnit lifecycle behaviour
 - Initialise typed test properties (e.g. core_session memcached test) or make them nullable
 - Add `isset()` checks to avoid accessing properties before initialisation
 - Ensure resetAfterTest() is called before modifying DB or `$USER`
2025-11-28 09:10:34 +07:00
Huong Nguyen d25846cb41 MDL-86087 core: Define environment requirements for Moodle 5.2 2025-11-28 09:10:34 +07:00
Paul Holden f2ca4d59b2 MDL-87339 hook: ensure cache directory present/writeable for use.
Avoids PHP warnings during Behat initialisation:

- file_put_contents(...): Failed to open stream: No such file or directory;
- rename(...): No such file or directory
2025-11-27 19:06:14 +00:00
Paul Holden 08d0f1021a MDL-87323 report_outline: fix report viewed event URL. 2025-11-27 17:28:56 +00:00
Mark Johnson 4317b656ae MDL-85405 course: Fix indentation and line wrapping 2025-11-27 15:13:46 +00:00
Luca Bösch d0c0e5a635 MDL-85405 modinfo: Don't show modules without FEATURE_CAN_DISPLAY
Question banks were displaying in places they shouldn't, because
FEATURE_CAN_DISPLAY wasn't fully implemented. This broadens its
usage in the following areas:

- Availability info - Not relevant to qbank. However you could feasibly
have some module which isn't shown to students, but the teacher can
use
  it to track completion, so dont display the link.
- Activities block - links to each activity's index page. We already
have
the Question banks page in the secondary nav. No need to have it here
too.
- Overview report - It doesn't make sense to display question banks
here,
  as they're not an activity students can participate in, they wont have
  dates etc.
- Externallib - Return with candisplay = false. The app needs to handle
  this correctly.
- Visibility options, moodleform_mod, modvisible and visibility
selector.
Not relevant for qbank since it doesn't include the standard
coursemodule
  options, but if an activity with without CAN_DISPLAY did display a
  visibility setting, "Hidden" should be the only option.
- Activity names filter - we dont want automatic links to question
banks.
2025-11-27 15:13:45 +00:00
Petr Skoda a16fc54eb3 MDL-87066 core: add upgrade note for clean_string() 2025-11-27 14:59:00 +01:00
Petr Skoda f00eecb062 MDL-87066 core: add clean_string() to solve double encoding in Mustache
The idea is to prevent double escaping in s()
and mustache.escape() by using numeric html
entities to sanitise result of format_string(),
get_string() and similar.
2025-11-27 14:59:00 +01:00
Luca Bösch a36c4548be MDL-87299 qtype_match: Remove Bootstrap 5 table borders. 2025-11-27 13:59:07 +01:00
Mihail Geshoski 299b171191 weekly release 5.0.3+ 2025-11-27 19:40:25 +08:00
Mihail Geshoski 446d364a02 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-11-27 19:40:11 +08:00
Stefan Hanauska 7bce94b05f MDL-86425 backup: Reset nullcontent flag in xml_writer 2025-11-27 06:11:56 +01:00
Jun Pataleta bcba5e2b27 MDL-83485 core: Add bottom margin on preference links
To meet the WCAG 2.2 Level AA requirement for minimum target size,
we need to add a bit of spacing between the links on the user
preferences page.

More information:
https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
2025-11-27 11:37:04 +08:00
Jun Pataleta 08564c803b MDL-83485 core: Add accessibility Behat coverage to the preferences page 2025-11-27 11:37:03 +08:00
Jun Pataleta 2fac37a527 MDL-83485 core: Fix heading level for preferences groups 2025-11-27 11:37:03 +08:00
Jun Pataleta 0d53dbc128 MDL-83485 core: Render preferences groups as lists 2025-11-27 11:37:03 +08:00
Andrew Nicols 3f64d0da2f Merge branch 'MDL-86255-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-27 11:11:06 +08:00
Andrew Nicols dcec803f0a Merge branch 'MDL-86955-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-27 11:08:30 +08:00
Jake Dallimore 707eef0930 Merge branch 'MDL-86840-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-11-27 09:43:58 +08:00
Paul Holden ae44f84ffa MDL-86988 mod_resource: ensure required library always present.
The `resourcelib` library is explicitly required by the modules
own local library, and neither the add/update methods use it
directly.
2025-11-26 15:11:12 +00:00
Paul Holden 773823a082 MDL-87188 gradereport_grader: prevent overlapping collapsed columns. 2025-11-26 11:40:35 +00:00
Mihail Geshoski 50cfa1884c Merge branch 'MDL-87259-500' of https://github.com/x-iy/moodle into MOODLE_500_STABLE 2025-11-26 18:02:27 +08:00
Mihail Geshoski 19c613902d Merge branch 'MDL-86668-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-11-26 17:51:36 +08:00
Mihail Geshoski 4893a3ca55 Merge branch 'MDL-86975-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-26 17:43:50 +08:00
Mihail Geshoski 09b4598628 Merge branch 'MDL-87149-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-11-26 17:30:00 +08:00
david adamson a9ab17b82e MDL-87259 course: Correct content item user cache key 2025-11-26 14:36:19 +11:00
Paul Holden b01cffa8c7 Merge branch 'MDL-87046-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-11-25 15:25:23 +00:00
Andrew Nicols 045967e885 MDL-86018 tool_xmldb: Check XML content in reconciler 2025-11-25 15:02:18 +00:00
Paul Holden a158a2043a Merge branch 'MDL-85306-500' of https://github.com/vinod404/moodle into MOODLE_500_STABLE 2025-11-25 14:38:05 +00:00
Andrew Nicols 880f41ef50 Merge branch 'MDL-86656-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-25 21:14:08 +08:00
Andrew Nicols a20783157a Merge branch 'MDL-86419-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-25 21:08:21 +08:00
Andrew Nicols 0edf1c226c Merge branch 'MDL-86279-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-25 21:04:36 +08:00
Andrew Nicols a8c5fd81c9 Merge branch 'MDL-87166-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-25 20:58:19 +08:00
Andrew Nicols e6f215292e Merge branch 'MDL-86765-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-25 20:52:26 +08:00
Leon Stringer d371441c62 MDL-84898 core: Improve prohibit performance
Change the query used to check if a user has a capability but is
assigned a role that prohibits that capability.  This is based on the
query added by Petr Skoda for MDL-57027.
2025-11-25 11:34:46 +00:00
Huong Nguyen 40544a33b5 Merge branch 'MDL-87017-500-frontpage-block-any-page' of https://github.com/danowar2k/moodle into MOODLE_500_STABLE 2025-11-25 10:42:18 +07:00
Huong Nguyen 88e4536aff Merge branch 'MDL-87194-500' of https://github.com/albertgasset/moodle into MOODLE_500_STABLE 2025-11-25 10:40:04 +07:00
Huong Nguyen db8823ef36 Merge branch 'MDL-86161-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-11-25 10:38:13 +07:00
Huong Nguyen 8318a966f5 Merge branch 'MDL-87031_500' of https://github.com/santoshndev/moodle into MOODLE_500_STABLE 2025-11-25 10:35:28 +07:00
Jun Pataleta ea032c7045 Merge branch 'MDL-86547-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-11-25 11:09:46 +08:00
Huong Nguyen d19fcae54b Merge branch 'MDL-85930-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-11-25 08:51:57 +07:00
Muhammad Arnaldo 53d459e674 MDL-86547 theme_boost: Override the code-color
Increase the contrast by overriding the existing code color to match the one on default.scss
2025-11-24 19:27:36 +07:00
Jun Pataleta 91fbd8048b Merge branch 'MDL-86547-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-11-24 15:55:19 +08:00
Muhammad Arnaldo 55c2214ee3 MDL-86547 theme_boost: Improve inline code contrast in editor
Changed the background color of highlighted inline code for better accessibility.
2025-11-24 14:26:15 +07:00
AMOS bot 25d176c1bb Automatically generated installer lang files 2025-11-23 00:08:22 +00:00
Santosh Nagargoje 83356beefa MDL-87031 gradereport: Fixed clear button issue 2025-11-21 23:37:09 +05:30
Martin v. Löwis aee6e963f2 MDL-86523 backup: update context only if also updating category. 2025-11-21 15:47:08 +01:00
Luca Bösch bb1926ee95 MDL-86668 course: Support filter in scale names. 2025-11-21 10:46:27 +01:00
Luca Bösch 78629fc48a MDL-86161 groups: Correct picture title and alt text. 2025-11-21 10:46:11 +01:00
Huong Nguyen 91febb5f8e weekly release 5.0.3+ 2025-11-21 14:33:34 +07:00
Huong Nguyen cafdda4428 NOBUG: Add upgrade notes 2025-11-21 14:33:34 +07:00
Mihail Geshoski 3503f27db7 Merge branch 'MDL-86984-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-11-21 08:11:18 +07:00
Mihail Geshoski ed5aa97fc9 Merge branch 'MDL-86069-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-21 08:11:18 +07:00
Mihail Geshoski ec879bb46b Merge branch 'MDL-87011-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-11-21 08:11:17 +07:00
Huong Nguyen 7336d00a9d Merge branch 'MDL-86323_500' of https://github.com/PhilippImhof/moodle into MOODLE_500_STABLE 2025-11-21 08:11:17 +07:00
Huong Nguyen f95ba7e3aa Merge branch 'MDL-87048-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-11-21 08:11:17 +07:00
Huong Nguyen 33216607a5 Merge branch 'MDL-84735-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-11-21 08:11:17 +07:00
Andrew Nicols a5a6c1f554 MDL-87046 core: Fix shutdown manager early return
If the `\core_shutdown_manager::initialize` method is called multiple
times, it should only succeed once.

Unfortunately whilst logging existed, the shutdown manager did not
actually exit.
2025-11-21 08:53:03 +08:00
Huong Nguyen d75c674d3a Merge branch 'MDL-85373-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-20 13:30:41 +07:00
Mihail Geshoski 21778ac0c0 Merge branch 'MDL-86967_500' of https://github.com/Chocolate-lightning/moodle into MOODLE_500_STABLE 2025-11-20 13:30:41 +07:00
Huong Nguyen c8cfd00a3f Merge branch 'MDL-86272-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-20 13:30:41 +07:00
Amaia Anabitarte 95a394d41b Merge branch 'MDL-87198-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-11-20 13:30:41 +07:00
Huong Nguyen 3fd6c503ce Merge branch 'MDL-82511-cache-cron-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-11-20 13:30:41 +07:00
Huong Nguyen aff6b93390 Merge branch '86320-fix-qr-code-unit-test-500' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_500_STABLE 2025-11-20 13:30:41 +07:00
Huong Nguyen 54683a0468 Merge branch 'MDL-86907-500' of https://github.com/mioyu-ubiq/moodle into MOODLE_500_STABLE 2025-11-20 13:30:41 +07:00
Huong Nguyen cbe8aca481 Merge branch 'MDL-72608-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-20 13:30:40 +07:00
Huong Nguyen f6f24f266d Merge branch 'MDL-85835-500' of https://github.com/plasger-uni-siegen/moodle into MOODLE_500_STABLE 2025-11-20 13:30:40 +07:00
Huong Nguyen fbcefd88b2 Merge branch 'MDL-86998-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-11-20 13:30:40 +07:00
Simey Lameze 0594d87148 MDL-87050 behat: use src for img xpath selector 2025-11-20 13:30:40 +07:00
Mihail Geshoski 00205a5453 Merge branch 'MDL-85049-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-11-20 13:30:40 +07:00
Mihail Geshoski 56d34f5a47 Merge branch 'MDL-86817_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-11-20 13:30:40 +07:00
Angelia Dela Cruz 323458a3a8 MDL-87048 tool_lp: Behat for synchronising cohort with learning plan 2025-11-20 10:10:31 +08:00
Angelia Dela Cruz 071658ba28 MDL-84735 gradingform: Behat for modifying marking guide criterion 2025-11-20 07:50:09 +08:00
Paul Holden c1860dad87 MDL-86272 tool_policy: verify current user before store policy agreed. 2025-11-18 11:47:59 +00:00
Santosh Nagargoje 6f62b7eaa5 MDL-86749 questions: Added index on hashcode column
Identified performance bottlenecks in clear_cached_data() from
mod/quiz/report/statistics/report.php. The delete_records() calls on
question_statistics, question_response_analysis, and quiz_statistics tables
use the hashcode column for filtering, which becomes inefficient with large
datasets.
2025-11-18 16:56:47 +05:30
Paul Holden 4e85aecde8 MDL-86565 courseformat: don't link to sections user cannot see. 2025-11-18 10:32:01 +00:00
Mathew May 0b6ac8dc94 MDL-86967 theme_classic: Correct orange & yellow vars + warning 2025-11-18 15:06:50 +08:00
Mathew May 40f7285bbb MDL-86967 theme_boost: Correct orange & yellow vars + warning 2025-11-18 15:06:45 +08:00
mioyu-ubiq fba03e9ee5 MDL-86907 mod_choice: Behat test for adding multiple choice responses 2025-11-18 15:01:54 +08:00
Mihail Geshoski 9e26d529c4 Merge branch 'MDL-86099_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-11-17 22:28:35 +08:00
Andi Permana b21e7b56a6 MDL-85930 tiny_media: Fix adding video from Youtube repo 2025-11-17 19:10:13 +07:00
Paul Holden f1d0e24258 MDL-86279 core: fix deprecation emitting/annotation in AWS helpers. 2025-11-17 11:01:03 +00:00
Paul Holden 6213577e08 MDL-86955 tool_task: ensure tasks are runnable in adhoc table output. 2025-11-17 10:56:49 +00:00
Huong Nguyen 06a1c95afa Merge branch 'MDL-85235-500' of https://github.com/safatshahin/moodle into MOODLE_500_STABLE 2025-11-17 16:02:01 +07:00
Huong Nguyen d3096b658b Merge branch 'MDL-87050-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-11-17 15:58:14 +07:00
Huong Nguyen eb07f79220 Merge branch 'MDL-87111-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-17 15:31:42 +07:00
Huong Nguyen 146c3da68f Merge branch 'MDL-86810-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-17 15:27:42 +07:00
Huong Nguyen c47d471e3b Merge branch 'MDL-86159-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-17 14:56:03 +07:00
Huong Nguyen df3ef9a8e7 Merge branch 'MDL-85764-quiz-notification-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-11-17 14:50:48 +07:00
vinod404 b362a6d1ed MDL-85306 core/toggle: Move tooltip/title to input to show tooltips.
The title and tooltip attributes are now moved to the input element, ensuring tooltips appear.
2025-11-17 12:14:16 +05:30
Jun Pataleta 83d2dc180f MDL-87149 mod_feedback: Accessibility Behat test coverage
* Check the accessibility of the questionnaire, especially when
there are dependent questions.
* Use generators for a more efficient and faster test execution.
2025-11-17 12:45:01 +08:00
Jun Pataleta a14c44374a MDL-87149 mod_feedback: Generate dependent questions
Allow the generator to create questions that depend on other questions.
2025-11-17 12:45:01 +08:00
Jun Pataleta e6d4f54e23 MDL-87149 theme_boost: Remove the .feedback_is_dependent class
It's no longer being used. So, just remove it.
2025-11-17 12:45:00 +08:00
Jun Pataleta ad733468ef MDL-87149 mod_feedback: Do not use .feedback_is_dependent anymore
Making a visual distinction for dependent questions compared to other
questions does not add much value in the perspective of users. We should
just stop adding the `.feedback_is_dependent` class for dependent
questions.
2025-11-17 12:45:00 +08:00
Huong Nguyen 3a7525ed2f Merge branch 'MDL-87107-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-11-17 09:09:02 +07:00
Mark Johnson 377bce2895 MDL-86099 questions: Check for empty bank names
If we call `question_bank_helper::create_default_open_instance` with an
empty `$bankname` parameter, it will currently create a new instance
with no name. This leads to exceptions being thrown when we try to load
the course it belongs to.

This adds some validation to ensure the name being passed is not empty.
Once the issue is resolved, and the bank is created with a proper name,
the course will work as normal.
2025-11-14 16:51:21 +00:00
Albert Gasset d0fdcd6528 MDL-87194 tool_mobile: Fix subscription requests 2025-11-14 16:17:03 +01:00
Albert Gasset 6e173777e9 MDL-87194 message_airnotifier: Fix access key requests 2025-11-14 16:16:54 +01:00
Sara Arjona 17d26daac7 MDL-87198 course_format: Consider section name visibility in Overview 2025-11-14 15:56:49 +01:00
Daniel Poggenpohl 3dfe385f07 MDL-87017 blocks: Provide page context to page_type_list functions
- The current context may be necessary when deleting a frontpage block displayed on every page with javascript disabled
- The current context may be necessary when a frontpage block is displayed on every page and the question bank is viewed
- Also handle a NULL currentcontext for question_page_type_list() correctly
2025-11-14 15:37:58 +01:00
Paul Holden bada9f3efa MDL-72608 output: define default popover region template lang string. 2025-11-14 13:04:50 +00:00
Paul Holden c0d57476a5 MDL-86419 enrol_ldap: define plugin's own copy of configuration strings.
AMOS BEGIN
 CPY [ignorehiddencourses,enrol_database],[ignorehiddencourses,enrol_ldap]
 CPY [ignorehiddencourses_desc,enrol_database],[ignorehiddencourses_desc,enrol_ldap]
AMOS END
2025-11-14 13:03:56 +00:00
Benjamin Walker 5afac60e42 MDL-85764 mod_quiz: Improve performance of quiz notifications task 2025-11-14 20:04:14 +10:00
Benjamin Walker 724e5b45e3 MDL-82511 cachestore_redis: Reduce blocking when finding keys 2025-11-14 20:03:43 +10:00
Benjamin Walker fd6b14286a MDL-82511 cache: Improve performance of cleanup in cache_cron_task 2025-11-14 20:03:43 +10:00
Paul Holden 2fada9ae2d MDL-86159 mod_bigbluebuttonbn: consistent/correct course name format. 2025-11-14 07:57:59 +00:00
Philipp Imhof edc2f17f54 MDL-86323 editor_tiny: allow svg attributes
Co-authored-by: Petr Skoda <commits@skodak.org>
2025-11-14 08:50:29 +01:00
Luca Bösch 0349b88a58 MDL-86984 book: remove borders in print page top table. 2025-11-13 17:06:59 +01:00
Luca Bösch 19df1c7ea2 MDL-85049 question: complete border around table row for newest question 2025-11-13 17:02:25 +01:00
Mihail Geshoski e6593a6e73 weekly release 5.0.3+ 2025-11-13 18:49:03 +08:00
Mark Johnson 458be6f714 MDL-86817 qbank: Prevent unique key violations during migration
When fixing categories with broken parents, if the resulting changes
would have led to categories with the same stamp or idnumber being in
the same context, the task failed due to violations of the unique keys
on contextid-stamp and contextid-idnumber.

This checks for violations before moving categories, and either
generates a new stamp or nulls the idnumber on the category being moved,
following the method used in MDL-85869.
2025-11-13 10:35:16 +00:00
Angelia Dela Cruz 1d8531f7d5 MDL-87050 mod_folder: Behat for preventing forced file downloads 2025-11-13 15:53:07 +08:00
Mihail Geshoski 1e2310781e Merge branch 'MDL-86397_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-11-13 12:16:20 +08:00
Huong Nguyen 8715e6ddab Merge branch 'MDL-86845-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-11-13 11:12:12 +07:00
Huong Nguyen 86574edf57 Merge branch 'MDL-86895-500' of https://github.com/mioyu-ubiq/moodle into MOODLE_500_STABLE 2025-11-13 10:44:05 +07:00
Huong Nguyen 739d59d8d3 Merge branch 'MDL-79249-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-11-13 10:20:36 +07:00
Huong Nguyen d51f19869f Merge branch 'MDL-87047-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-11-13 10:16:53 +07:00
Huong Nguyen 1cfae4692b Merge branch 'MDL-78973-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-11-13 08:52:54 +07:00
Huong Nguyen 904d4637ef Merge branch 'MDL-84967-M500_recordset-not-closed-in-core_analytics_local_analyser_by_course_get_analysables_iterator' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-11-13 08:47:36 +07:00
Huong Nguyen e72988cdf3 Merge branch 'MDL-82867-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-13 08:44:42 +07:00
Mark Johnson 8c35bcb50e MDL-86397 calendar: Filter user courses
In the calendar API, `raw_event_retrieval_strategy` accepts a list of
courses to return events for. If one or more users are also specified,
it will find the courses the are enrolled in, then call
`calendar_set_filters()` to return a sorted list of those courses, and
any groups within those courses that they can see events for. The list
of courses in then filtered to those passed to
`raw_event_retrieval_strategy`.

If the user is enrolled on lots of courses, but is only viewing the
caledar for one course, this results in a lot of redundant work to fetch
group data for their courses which is then not used. This either
involves a lot of extra complex queries, or results in an unncessary
cache hit for each course.

This change re-orders the code so that the list of enrolled courses is
filtered to just those courses being viewed, before it is passed to
`calendar_set_filters()`. This means we are only fetching group data for
those courses we will be showing events for.
2025-11-12 14:25:40 +00:00
Mihail Geshoski b00abeda20 Merge branch 'MDL-87130-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-12 17:26:23 +08:00
Mihail Geshoski c8b6f031cd Merge branch 'MDL-86963-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-11-12 17:15:00 +08:00
Mihail Geshoski 31b09beaa8 Merge branch 'MDL-85686-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-11-12 16:59:57 +08:00
Angelia Dela Cruz dca942ad3e MDL-87047 tool_lp: Behat optimisation 2025-11-12 16:37:50 +08:00
Mihail Geshoski eafa526b2b Merge branch 'MDL-86886-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-11-12 16:37:26 +08:00
Angelia Dela Cruz eb9e540a7f MDL-87047 tool_lp: Behat to complete a learning plan and alter it 2025-11-12 16:34:53 +08:00
Angelia Dela Cruz be198feadf MDL-86963 tool_lp: Behat to perform CRUD operations on competencies 2025-11-12 10:33:24 +08:00
Luca Bösch 80d90fd53d MDL-86845 admin: Striped hovering plugins + course format table w/ BS 5. 2025-11-12 00:22:01 +01:00
Safat e29cfb15d2 MDL-85235 tool_mobile: Implement the augmentation hooks for apps 2025-11-12 10:11:16 +11:00
Safat 79950edcd1 MDL-85235 tool_mobile: Add extend ios app banner hook 2025-11-12 10:11:03 +11:00
Paul Holden a32e1d6000 MDL-87130 dml: fix SQL debugging test assertions on Windows.
Ensure that the Windows directory separator ('\') isn't confused
for regular expression control character.
2025-11-11 15:50:41 +00:00
Jun Pataleta 8d4bef06c3 MDL-86840 forum: Add accessibility Behat coverage
* Add accessibility Behat coverage on the Advanced forum search page.
2025-11-11 21:14:11 +08:00
Jun Pataleta ccff76264a MDL-86840 forum: Do not use layout table for the search form 2025-11-11 21:14:10 +08:00
Jun Pataleta 73d4148143 MDL-86840 forum: Fix heading structure of search form 2025-11-11 21:14:10 +08:00
Paul Holden 84caa44014 MDL-86765 forms: disable calendar icon if element disabled.
This is similar to change in ec89abc5 which updated the icon state
if the corresponding checkbox was unchecked. Here we're doing the
same if the entire date/time element itself is disabled.
2025-11-11 12:49:46 +00:00
Paul Holden 365649a8b7 MDL-86656 task: remove spurious mtrace parameters in calling code.
Co-authored-by: Jason Lees <jlees@arden.ac.uk>
2025-11-11 12:48:16 +00:00
Paul Holden b6f7d9b192 MDL-87056 enrol: update instance modified date when toggling status. 2025-11-11 12:36:26 +00:00
Paul Holden 24523358c0 MDL-87111 filter_tex: remove border-radius of rendered expression. 2025-11-11 12:18:23 +00:00
Paul Holden 0352940fbf MDL-87166 communication: verify user feature support on user deletion. 2025-11-11 11:45:40 +00:00
Jun Pataleta 89951b89c5 MDL-86998 message: Fix accessibility issues in notification settings
* Fix missing labels for the checkboxes that enable notification plugins
* Add an accessible name for the Default notification preferences table
* Fix missing table header for the preference column of the Default
  notification preferences table.
* Accessibility Behat test coverage for the Notification settings
  admin page
* Remove the unnecessary title attributes for the visually hidden labels
2025-11-11 17:28:49 +08:00
Jun Pataleta 57c4780ead MDL-86998 message: Fix accessibility issues in notification preferences
* Fix missing column heading for the preference column
* Fix incorrect label for the toggle controls
* Make the preference name a table heading with a row scope so that the
  toggle controls will be programmatically associated to it.
* Apply a col scope for the processor column headings to
  programmatically associate the toggle controls to their respective
  columns.
2025-11-11 17:28:49 +08:00
Angelia Dela Cruz 234fd43581 MDL-86886 tool_lp: Behat to move and cross-reference competencies 2025-11-11 15:54:46 +08:00
Simon Plasger ba629c5b41 MDL-85835 TinyMCE: Fix not working tabs on TinyMCE in quiz mode 2025-11-11 07:32:13 +01:00
Angelia Dela Cruz 479738e0ff MDL-78973 Behat: Behat coverage for invalid file upload in data activity 2025-11-11 13:16:49 +08:00
Simey Lameze cd4c824f6e MDL-85686 mod_quiz: unit test coverage for questions shuffle 2025-11-11 11:18:04 +08:00
Mio Yu ccb3653e7e MDL-86895 core_grades: Behat to verify listing and grading submissions 2025-11-11 09:51:55 +08:00
Safat 5637b4f6ed MDL-85235 core: Add extend url hook 2025-11-10 22:07:39 +11:00
Safat 1eb3e7781d MDL-85235 tool_mobile: Make mobile manifest cookieless and cacheable 2025-11-10 22:07:39 +11:00
Huong Nguyen b6a4b81ae8 Merge branch 'MDL-85627-500' of https://github.com/jleyva/moodle into MOODLE_500_STABLE 2025-11-10 10:17:19 +07:00
Huong Nguyen c615ae3949 Merge branch 'MDL-86999-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-11-10 10:13:11 +07:00
Huong Nguyen bf52e60dce Merge branch 'MDL-81604-500' of https://github.com/t-schroeder/moodle into MOODLE_500_STABLE 2025-11-10 10:08:14 +07:00
Shamim Rezaie 04b7ec3506 Merge branch 'MDL-86965-500' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_500_STABLE 2025-11-10 13:44:24 +11:00
Luca Bösch b038b9ad2d MDL-86999 customfield: Striped hovering fields table with BS 5. 2025-11-07 13:11:19 +01:00
Andrew Nicols f3702d06e0 MDL-87107 core: Stop using MUC for hook manager caching 2025-11-07 17:19:09 +08:00
Huong Nguyen 7838e3f247 weekly release 5.0.3+ 2025-11-07 14:49:05 +07:00
Huong Nguyen 6f5c9fdcee NOBUG: Add upgrade notes 2025-11-07 14:49:05 +07:00
Huong Nguyen 758b273d33 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-11-07 14:48:54 +07:00
Huong Nguyen 32824dd691 Merge branch 'MDL-86701-500-fix' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-11-07 08:46:41 +07:00
Juan Leyva 5b1c5c47e5 MDL-85627 mod_bigbluebuttonbn: Remove unused class 2025-11-06 13:14:32 +01:00
Jun Pataleta d603e78896 MDL-86701 behat: Update Behat tests to press edit/delete buttons 2025-11-06 18:40:22 +08:00
Huong Nguyen 8c399ba7f9 MDL-69226 environment: filter extension required for 4.1 2025-11-06 18:21:33 +08:00
hieuvu adf6199966 MDL-86965 core_question: Fix get_bank_instances query. 2025-11-06 16:52:09 +07:00
Mihail Geshoski 2699e5f3c2 Merge branch 'MDL-87073-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-11-06 17:07:52 +08:00
Huong Nguyen cbe0abe1be MDL-87073 PHPUnit: Use non-DST timezone for comparing
Including in this commit
 - Use America/New_York instead of US/Eastern
2025-11-06 15:47:13 +07:00
Huong Nguyen 54272a7269 Merge branch 'MDL-86908-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-11-06 15:42:27 +07:00
Huong Nguyen 525c6541bc Merge branch 'MDL-87049-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-11-06 15:40:31 +07:00
Huong Nguyen b80d614961 Merge branch 'MDL-87079-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-11-06 15:37:29 +07:00
Jake Dallimore a8ad58cc07 Merge branch 'MDL-86379-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-11-06 14:30:05 +08:00
Mihail Geshoski 37c7760c98 Merge branch 'MDL-86010_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-11-06 11:53:07 +08:00
Huong Nguyen 2ab3f1088f Merge branch 'MDL-87019-redis-bloat-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-11-06 10:35:11 +07:00
Jake Dallimore cfa5f8a60d Merge branch 'MDL-86534-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-11-06 11:33:50 +08:00
Huong Nguyen 41ad1a67f9 Merge branch 'MDL-86701-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-11-06 10:27:21 +07:00
Huong Nguyen 2d17eeb6c8 Merge branch 'MDL-86332-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-06 10:20:33 +07:00
Huong Nguyen 6ab0bdd7f7 Merge branch 'mdl-85036_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-11-06 10:53:56 +08:00
Jake Dallimore f4f445d54a Merge branch 'MDL-87004_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-11-06 10:53:56 +08:00
Simey Lameze 280a604e4d MDL-87049 behat: read showcampaigncontent setting when running behat 2025-11-06 08:20:52 +08:00
Angelia Dela Cruz 95304962da MDL-87049 core: Behat to toggle campaign content banner display 2025-11-06 08:20:51 +08:00
AMOS bot 323ee9aa02 Automatically generated installer lang files 2025-11-06 00:07:58 +00:00
Angelia Dela Cruz 7ca19e9c32 MDL-86908 core_contentbank: Behat to set supported files of contentbank 2025-11-05 18:00:23 +08:00
Simey Lameze 8de0e64544 MDL-86379 mod_quiz: move create_test_quiz function into generator 2025-11-05 11:50:11 +08:00
Andrew Nicols 7e9255978b MDL-87079 core: Call existing pcntl handlers
Whilst `register_shutdown_function` works as a queue, `pcntl_signal`
does not.

To preserve the behaviour of existing signal handlers, as are typically
found in CLI wrappers like PHPUnit and Behat, we should store any
existing handler
2025-11-05 08:52:34 +08:00
Ilya Tregubov 33483246d1 Merge branch 'MDL-86953-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-04 16:46:33 +01:00
James C 69957f8a3b MDL-85036 completion: Properly initialize cm_info for user completion 2025-11-04 20:53:29 +13:00
Jake Dallimore 5b848f2964 Merge branch 'MDL-85391-m500' of https://github.com/NeillM/moodle into MOODLE_500_STABLE 2025-11-04 14:14:48 +08:00
Jake Dallimore ac3f6fc4d3 Merge branch 'MDL-86855-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-11-04 14:09:54 +08:00
Ilya Tregubov bd132c995d Merge branch 'MDL-86952-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-11-03 12:14:42 +01:00
Jun Pataleta c24afe888c MDL-86701 customfield: Better naming of custom field action buttons
Include the category and field names for accessible names of the delete
and action buttons to help assistive technology users better understand
the buttons' purpose.
2025-11-03 12:12:32 +08:00
Jun Pataleta c11f67bdb4 MDL-86701 customfield: Improve action buttons accessibility
* Use native HTML buttons for the edit and delete buttons. This provides
default button behaviours which helps keyboard users activate the
buttons using either the Space or Enter key.
* Move the accessible label out of the pix icon and to the action button
itself.
* Style buttons to ensure that they have a minimum clickable size of
24x24 pixels to sufficiently meet WCAG 2.2 SC 2.5.8 - Target Size
(Minimum) (Level AA).
2025-11-03 11:59:40 +08:00
Angelia Dela Cruz 2ca2aeaf03 MDL-79249 core_filepicker: Cancel file and folder upload using X button 2025-11-03 10:44:38 +08:00
Huong Nguyen 9a7a484e69 Merge branch 'MDL-69226-M500_verify-that-the-filter-php-extension-is-present' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-11-03 09:02:15 +07:00
AMOS bot fdc195ce67 Automatically generated installer lang files 2025-11-01 00:07:57 +00:00
Benjamin Walker 2530e564b1 MDL-87019 redis: Avoid storing userhashkey for non-login users 2025-10-31 16:20:34 +10:00
Huong Nguyen 8449b9ac6f Merge branch 'MDL-86235-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-10-31 09:34:55 +07:00
Mihail Geshoski 8316503864 weekly release 5.0.3+ 2025-10-30 18:11:16 +08:00
Mihail Geshoski 158fa68cdf Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-10-30 18:11:00 +08:00
Neill Magill ee5126a88e MDL-85391 course: Handle null course urls
Course urls may be null when navigation is set to true.

The return value from course_get_url being null was not being handled before
this change, which could lead to an exception causing the page not to load.

It also handles null urls in the course index in Boost so that they are
not a link to what ever the current page is.

If either the first or last section in a format did not a
return a url under the Classic theme there would still be
a link displayed with a link to the current page the user
is on.

After this change no link would be displayed in this case.
2025-10-29 08:16:34 +00:00
Huong Nguyen 88b6baa6af Merge branch 'mdl85075-50' of https://github.com/matthewhilton/moodle into MOODLE_500_STABLE 2025-10-29 09:31:20 +07:00
Mihail Geshoski 06463ce66a Merge branch 'MDL-86894-500' of https://github.com/Kredelirious/moodle into MOODLE_500_STABLE 2025-10-29 10:18:31 +08:00
Mihail Geshoski d3d2107e2c Merge branch 'MDL-82190-500' of https://github.com/danghieu1407/moodle into MOODLE_500_STABLE 2025-10-29 10:11:34 +08:00
Daniel Ziegenberg 4eded4dca4 MDL-69226 environment: filter extension required
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-10-28 19:31:14 +01:00
Kim Jared Lucas f9a738f3cf MDL-86894 mod_forum: Behat to verify default forum RSS settings 2025-10-28 13:02:58 +08:00
AMOS bot aacdf287f5 Automatically generated installer lang files 2025-10-28 00:09:47 +00:00
Rajneel Totaram eb3731e9b2 MDL-87011 mod_assign: Replace deprecated CSS style 2025-10-27 22:25:50 +12:00
Adrian Greeve 5190731af4 Merge branch 'MDL-85774-500-3' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-10-27 09:03:21 +08:00
Daniel Ziegenberg ab33219f38 MDL-84967 analytics: close recordset when it's not needed anymore
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-10-24 21:02:59 +02:00
ferran 5b5ef5c66f Merge branch 'MDL-86430-Bad-Display-Of-Scale-Grading-500' of https://github.com/birdy1976/moodle into MOODLE_500_STABLE 2025-10-24 12:15:36 +02:00
Andi Permana 2a4b767402 MDL-86235 core: Add table-hover class to admintable and generaltable 2025-10-24 15:50:06 +07:00
Mark Johnson da518313d6 MDL-87004 backup: Ensure backups include all random questions
Backing up quizzes containing random questions from multiple different
categories was only including one of the categories in the backup.

This was due to doing $array + $array instead of array_merge(), meaning
items in the second array with keys that were already present in the
first did not get added to the result.
2025-10-24 09:45:31 +01:00
Jun Pataleta d158fc8819 MDL-86855 qbank_columnsortorder: Render disabled columns as a list
* Lists must be marked up with the proper semantics.
2025-10-24 12:02:54 +08:00
Jun Pataleta 83ffdd7a71 MDL-86855 qbank_columnsortorder: Fix accessibility issues
* Fix empty column heading in admin settings page
* Add accessible labels for the move buttons
* Fix drag and drop Behat test
* Add accessibility Behat coverage
2025-10-24 12:02:54 +08:00
Huong Nguyen 1beae326aa weekly release 5.0.3+ 2025-10-24 11:00:15 +07:00
Huong Nguyen 89cd360c83 NOBUG: Add upgrade notes 2025-10-24 11:00:15 +07:00
Martin Vögeli 719921b93a MDL-86430 theme_boost: Fix display of scale grading when title too long 2025-10-23 17:14:51 +02:00
danghieu1407 9765721e10 MDL-82190 Quiz: Fix quiz preview crash on question version removal 2025-10-23 13:32:47 +07:00
Jun Pataleta 52ec42bb01 MDL-85774 login: Check for username/password fields before moving focus
When the login form is not shown but $CFG->loginautofocus is turned on,
we need to verify first that the username and password fields exist
before we move the focus. Otherwise, the JS will break.
2025-10-23 11:28:48 +08:00
Jun Pataleta 4c66cdde04 MDL-85774 login: Remove visually-hidden links
Visually hidden links on login error/info disrupt tab order. We must
remove them.

Instead, announce the div containing the login error/info messages on
page reload.

The visually hidden signup link has also been removed.
2025-10-23 11:28:48 +08:00
Huong Nguyen 5be6382221 Merge branch 'MDL-86986-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-10-23 09:57:31 +07:00
Huong Nguyen f50b0661ef Merge branch 'MDL-80524-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-23 09:29:27 +07:00
Mihail Geshoski 7b443d6bf0 Merge branch 'MOODLE_500_STABLE' of https://github.com/aneno-m-e/moodle into MOODLE_500_STABLE 2025-10-23 10:23:12 +08:00
Matthew Hilton bd500af20e MDL-85075 files: Use core security helper first 2025-10-23 12:21:17 +10:00
Andrew Nicols a429bfbdac Merge branch 'MDL-81804-500-first' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-10-23 09:12:45 +08:00
Amaia Anabitarte f8cc4eeea9 Merge branch 'MDL-86434-invalidusertitle-500' of https://github.com/leonstr/moodle into MOODLE_500_STABLE 2025-10-22 23:12:54 +02:00
Luca Bösch 635b7f6bdf MDL-81804 dml: Passing parameters with -c key=val on PostgreSQL.
Co-authored-by: Marcos Dos Santos De Oliveira <marcos.s.oliveira@fiesc.com.br>
2025-10-22 16:20:25 +02:00
Jun Pataleta ded6e7e9b2 MDL-86986 core: Add aria-label to the drag handle button 2025-10-22 20:14:38 +08:00
ferran 66a094dc77 Merge branch 'wip_MDL-86435_m50' of https://github.com/gjb2048/moodle into MOODLE_500_STABLE 2025-10-22 12:55:56 +02:00
Mihail Geshoski e9ad1731cb Merge branch 'MDL-85474_500' of https://github.com/jonof/moodle into MOODLE_500_STABLE 2025-10-22 16:46:56 +08:00
Paul Holden a3c171eeb8 MDL-80524 rating: preserve activity idnumber when adding rating.
See also e9a5485f for context regarding similar problem with grade
updates.

Co-authored-by: Julian Tovar
2025-10-22 09:43:39 +01:00
Mihail Geshoski 79cf123335 Merge branch 'MDL-86282-500' of https://github.com/srobotta/moodle into MOODLE_500_STABLE 2025-10-22 16:31:09 +08:00
Noemie Ariste 0fb17449f6 MDL-75764 mod_assign: remove capability check for bulk downloads 2025-10-22 16:50:14 +13:00
Mihail Geshoski 1e44685774 Merge branch 'MDL-86217-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-22 11:41:19 +08:00
Mihail Geshoski 8c2b54410e Merge branch 'MDL-86225-500' of https://github.com/josepico01/moodle into MOODLE_500_STABLE 2025-10-22 11:03:21 +08:00
Mihail Geshoski ba4ffb5881 Merge branch 'MDL-86063-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-22 10:21:45 +08:00
Huong Nguyen 2f4f624b19 Merge branch '83543-xls-form-500' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_500_STABLE 2025-10-22 09:12:55 +07:00
Huong Nguyen c8d7e0cf64 Merge branch '77137-proxybypass-on-multiple-curl-queries-500' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_500_STABLE 2025-10-22 09:07:17 +07:00
Paul Holden 84e9482367 MDL-86975 mod_book: fix alignment of chapter editing delete icon.
Mis-aligned since changes to previously used action icon in df486967.
2025-10-22 00:26:42 +01:00
Amaia Anabitarte 60950923a6 Merge branch 'MDL-85796-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-10-21 19:56:09 +02:00
Paul Holden fd5aa44763 MDL-86255 behat: implement methods to assert date/time field value. 2025-10-21 11:34:43 +01:00
Shamim Rezaie e36f16ec13 Merge branch 'MDL-85592-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-21 17:10:33 +11:00
Huong Nguyen 1125b4ada6 Merge branch 'MDL-85168-MOODLE_500_STABLE' of https://github.com/phmemmel/moodle into MOODLE_500_STABLE 2025-10-21 10:36:34 +07:00
Huong Nguyen 974b18b09e Merge branch 'MDL-85633-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-10-21 09:47:25 +07:00
Huong Nguyen e465d5432f Merge branch 'MDL-85511-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-10-21 09:44:49 +07:00
Huong Nguyen 5194cad1b5 Merge branch 'MDL-85287-m500' of https://github.com/sammarshallou/moodle into MOODLE_500_STABLE 2025-10-21 09:42:07 +07:00
Huong Nguyen 2849cf39dc Merge branch 'MDL-86559-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-10-21 09:39:32 +07:00
Jonathon Fowler 06417ba66a MDL-85474 assign: fix call to undefined 'view_error_page' method
And while doing so, fix $notices parameters that ought to be call-by-
reference to collect notices produced during calls to
process_submit_other_for_grading() and process_submit_for_grading().
2025-10-21 10:30:42 +10:00
Paul Holden cf8d527e11 Merge branch 'MDL-86455-500' of https://github.com/yerairogo/moodle into MOODLE_500_STABLE 2025-10-20 16:51:06 +01:00
Sara Arjona 4be1d94f50 Merge branch 'MDL-86598-500' of https://github.com/aanabit/moodle into MOODLE_500_STABLE 2025-10-20 16:59:08 +02:00
Amaia Anabitarte 50ee96071a MDL-86598 course: Render HTML in activity overview section name mustache 2025-10-20 16:16:52 +02:00
Amaia Anabitarte 7c767af54b Merge branch 'MDL-86011-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-10-20 16:01:45 +02:00
Amaia Anabitarte e5f5854999 Merge branch 'MDL-86912-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-10-20 13:33:44 +02:00
Luca Bösch 8c7fd86a7d MDL-85633 course: Move away from YUI navigation.
Co-authored-by: Mikel Martín Corrales <mikel@moodle.com>
2025-10-20 11:25:14 +02:00
sam marshall 227e4a4e28 MDL-85287 User tours: Avoid scrolling while backdrop is displayed
If the page scrolls while the backdrop is displayed, it looks
incorrect because the backdrop does not scroll with page content.
To avoid this, don't show the backdrop until scrolling has finished.
2025-10-20 09:58:30 +01:00
Sara Arjona df800f94e2 MDL-86912 assign: Prevent admin submitting unless enrolled as student 2025-10-20 09:47:27 +02:00
Sara Arjona ef2bce431e MDL-86912 assign: Adjust display of Status column in Overview 2025-10-20 09:47:27 +02:00
Luca Bösch 1003a27252 MDL-85511 course: back button for course management course search. 2025-10-20 08:03:57 +02:00
Mihail Geshoski 66ff71cbe8 Merge branch 'MDL-85696-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-10-20 10:28:03 +08:00
Huong Nguyen 96906b853e Merge branch 'mdl-85917_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-10-20 08:48:46 +07:00
Huong Nguyen 514417a376 Merge branch 'MDL-85975_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-10-20 08:45:59 +07:00
Paul Holden f9f4c49fd2 MDL-86063 customfield: internally validate numeric data in persistent.
Move previous validation from the data controller, added in 89dbe63d,
into the persistent class itself so that it can internally validate
itself rather than relying on callers.

This resolves problems with empty/null numeric fields contained within
course backups (e.g. during course copy).
2025-10-19 16:53:17 +01:00
Paul Holden 01a3c146c3 MDL-86217 badges: gracefully handle missing recipient data. 2025-10-19 16:50:16 +01:00
Gareth Barnard cf1e0e962f MDL-86435 course: i/groupn.svg is not the same size as other icons. 2025-10-17 16:49:24 +01:00
Paul Holden 5a3bcf7b82 MDL-86953 blocks: constrain block controls menu on narrow screens.
Extension of work in 93cadaba that constrained the dropdown menu,
we now set a breakpoint to account for overflowing when narrow.
2025-10-17 14:49:48 +01:00
Ilya Tregubov 520ae9c00d Merge branch 'MDL-80422-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-17 15:37:33 +02:00
Paul Holden 70f1993958 MDL-86952 output: truncate long text in drag/drop dialog options. 2025-10-17 14:12:31 +01:00
Paul Holden cdc9d7e3ff MDL-86952 output: truncate long text in modal/dialog title element. 2025-10-17 14:12:10 +01:00
Amaia Anabitarte 0306be834e Merge branch 'MDL-85887-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-17 13:47:48 +02:00
Paul Holden 95c789fc1d MDL-86810 completion: update module completion data correctly.
Ensure we check the correct field to determine form value.
2025-10-17 12:13:01 +01:00
Paul Holden f8f309800c MDL-85373 admin: update site installation page referenced favicon. 2025-10-17 12:06:27 +01:00
Angelia Dela Cruz 123b1a1193 MDL-85696 mod_quiz: Behat to attempt password and time restricted quiz 2025-10-17 16:19:36 +08:00
Huong Nguyen 7518095d59 Merge branch 'MDL-85418-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-17 10:28:04 +07:00
Huong Nguyen dd2de75ad4 Merge branch 'MDL-85312-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-17 10:19:09 +07:00
Andrew Nicols b286e6c65a Merge branch 'm500-86376' of https://github.com/danmarsden/moodle into MOODLE_500_STABLE 2025-10-17 11:04:40 +08:00
Andrew Nicols 611008d6eb Merge branch 'MDL-85366-500' of https://github.com/djarran/moodle into MOODLE_500_STABLE 2025-10-17 08:47:05 +08:00
Andrew Nicols 30a482b220 Merge branch 'MDL-86822-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-17 08:34:39 +08:00
Andrew Nicols 240ea09d61 Merge branch 'MDL-85554-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-17 08:27:42 +08:00
Andrew Nicols 7927f8d058 weekly release 5.0.3+ 2025-10-17 06:50:42 +08:00
Andrew Nicols 2e78b280b8 NOBUG: Add upgrade notes 2025-10-17 06:50:42 +08:00
Andrew Nicols fbfba415e6 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-10-17 06:50:21 +08:00
Paul Holden 39bfcbbc9a MDL-85554 user: fix class attribute spacing for profile categories.
Update to use non-aliased html_writer class.
2025-10-16 22:29:19 +01:00
Yerai Rodríguez 7dfbf9582f MDL-86455 forms: disable all modal submit buttons on button click
To provide visual feedback and prevent multiple clicks
on no-submit buttons, all submit buttons within a modal
form will be disabled once any of them is clicked.
2025-10-16 15:59:36 +02:00
Mihail Geshoski d8577022cd Merge branch 'MDL-85874_500' of https://github.com/cwarwicker/moodle into MOODLE_500_STABLE 2025-10-16 16:53:43 +08:00
Mihail Geshoski 29a1ccdcd0 Merge branch 'MDL-85729-group-images-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-10-16 16:14:09 +08:00
Jun Pataleta 7db7c26280 MDL-85796 core: Remove unnecessary title attribute on profile links
The title attribute with value "View profile" on profile links is
not necessary as the user's name on the link itself is sufficient
to convey the purpose of the link.
2025-10-16 15:51:01 +08:00
Dan Marsden fb9d6e718d MDL-86376 core: Make public static functions more resilient
a
2025-10-16 20:45:50 +13:00
Andrew Nicols 3b0a9293b3 Merge branch 'MDL-85348-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-16 13:48:50 +08:00
Andrew Nicols 209ea54fca Merge branch 'MDL-84745-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-16 13:44:36 +08:00
Andrew Nicols 360cb2d370 Merge branch 'MDL-85736-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-16 13:39:55 +08:00
Andrew Nicols 3b91765090 Merge branch 'MDL-86053-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-16 13:33:22 +08:00
Andrew Nicols 04b2b22112 Merge branch 'MDL-86293-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-16 13:25:01 +08:00
Andrew Nicols 4d135c1c53 Merge branch 'MDL-86648-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-16 13:15:20 +08:00
Mihail Geshoski cd8fbc5af0 Merge branch 'MDL-85988-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-10-16 10:38:12 +08:00
Jarad Barker da9daf4437 MDL-84483 core_files: Always fire after_file_created hook 2025-10-16 09:04:09 +07:00
Mihail Geshoski 7956cebf42 Merge branch 'MDL-85618-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-15 23:39:22 +08:00
hieuvu ef3cc1d8b9 MDL-86621 core_question: Add capability checking for question bank node 2025-10-15 23:18:58 +08:00
ferran b6a1859fea Merge branch 'MDL-86003-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-15 15:40:14 +02:00
ferran b820cade16 Merge branch 'MDL-85486-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-10-15 15:15:21 +02:00
ferran 8dd5b60a81 Merge branch 'MDL-66579-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-10-15 15:07:18 +02:00
Andrew Nicols 06c110488b Merge branch 'MDL-86369-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-15 17:12:58 +08:00
Andrew Nicols 2538b7df54 Merge branch 'MDL-86627-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-15 17:03:38 +08:00
Andrew Nicols f92d05c33e Merge branch 'MDL-86645-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-15 17:01:48 +08:00
Sara Arjona de47113316 Merge branch 'MDL-86879-500' of https://github.com/ferranrecio/moodle into MOODLE_500_STABLE 2025-10-15 11:00:04 +02:00
Andrew Nicols e3e6b67b07 Merge branch 'MDL-86646-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-15 16:57:31 +08:00
Andrew Nicols 1d7dc95e25 Merge branch 'MDL-86147-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-15 15:53:18 +08:00
Andrew Nicols 545e742dbf Merge branch 'MDL-86186-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-10-15 15:49:42 +08:00
Philipp Memmel d80cf37b0e MDL-81263 grunt: Respect local .eslintignore and .stylelintignore 2025-10-15 15:19:48 +08:00
Andrew Nicols 329ed8a83f Merge branch 'MDL-86767-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-10-15 15:13:29 +08:00
Andrew Nicols 93a62aae94 Merge branch '86322-fix-example-phpdoc-500' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_500_STABLE 2025-10-15 15:10:55 +08:00
Andrew Nicols 7e22374591 Merge branch 'MDL-85495-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-10-15 15:05:44 +08:00
Andrew Nicols f09e9afaad Merge branch 'MDL-86762-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-10-15 14:59:11 +08:00
Mihail Geshoski a0622c21ee Merge branch 'MDL-81514_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-10-15 11:05:39 +08:00
Mihail Geshoski b6c07ab1ed Merge branch 'MDL-86621-500' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_500_STABLE 2025-10-15 09:49:09 +08:00
AMOS bot ae942c292a Automatically generated installer lang files 2025-10-15 00:09:33 +00:00
Paul Holden 2a40043b1c MDL-86627 cohort: format name correctly in report entity column. 2025-10-14 15:04:58 +01:00
Mikel Martín 944d37ead3 MDL-85486 theme_boost: Fix single section page inplace editor
When course format is displayed as single section per page, the inplace editable
in the section page heading was incorrectly displaye, and the instructions panel
was not displayed.
Adding some specific styles to fix that behaviour.
2025-10-14 11:40:32 +02:00
Stephan Robotta a6d59403ec MDL-86282 navigation: Main navigation corrected for XMLDB tool 2025-10-14 10:50:14 +02:00
Sara Arjona aefaca7bd7 MDL-86011 feedback: Prevent admin answering unless enrolled as student 2025-10-14 07:09:58 +02:00
Sara Arjona 26eb19151e MDL-86011 feedback: Adjust display of Responded column in Overview 2025-10-13 17:08:11 +02:00
hieuvu d785312c06 MDL-86621 core_question: remove incorrect navigation nodes. 2025-10-13 15:05:26 +07:00
Andi Permana 4ea394146d MDL-86559 filter_activitynames: Fix auto links with double spaces 2025-10-13 11:48:28 +07:00
Julien Boulen 95d763d24f MDL-77137 filelib: Honour proxybypass option for multiple Curl queries 2025-10-12 22:16:58 +02:00
Julien Boulen 157e5af983 MDL-86320 core: Fix unit test qrcode_test 2025-10-12 21:55:21 +02:00
Julien Boulen aeb3794af4 MDL-86322 phpdoc: Fix the given example in the phpdoc 2025-10-12 21:49:15 +02:00
Julien Boulen 50d583d951 MDL-83543 core: Move download complete status handling to Excel library
When a form is validated, all validation buttons are automatically
locked to prevent them from being sent twice by mistake. When the form
returns a file instead of redirecting to a new HTML page, a mechanism
(\core_form\util::form_download_complete()) must be called to
reactivate the form's validation buttons.

This mechanism is called for CSV files (file lib/csvlib.class.php), but
not when downloading xls files. The mechanism is only called when
downloading grades in Excel format (file
grade/export/xls/grade_export_xls.php).

The patch proposes to call this mechanism globally for all Excel file
downloads (file lib/excellib.class.php), and not just for grade
downloads (file grade/export/xls/grade_export_xls.php).
2025-10-12 21:35:03 +02:00
ferran 06fef3b872 MDL-86879 core_course: optimise subsections loading 2025-10-10 14:08:25 +02:00
Jun Pataleta e040a192c0 MDL-85820 lib: Update pear/readme_moodle.txt 2025-10-10 11:01:51 +08:00
Tim Hunt af619f925b MDL-85820 formslib: don't add '-' to client-side valiation 2025-10-10 11:01:51 +08:00
Luca Bösch 8d7e88efff MDL-86767 forum: let forum use standard buttons. 2025-10-09 21:05:32 +02:00
Huong Nguyen 7abebfa820 weekly release 5.0.3+ 2025-10-09 21:59:44 +07:00
Huong Nguyen 9c9a144a7a Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-10-09 21:59:03 +07:00
Huong Nguyen 8bf9b64078 Merge branch 'MDL-86777-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-09 08:47:49 +07:00
Huong Nguyen 02b3d90ab1 Merge branch 'MDL-86736-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-09 08:43:52 +07:00
Huong Nguyen 7cdeda9093 Merge branch 'MDL-86654-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-10-09 08:41:33 +07:00
Huong Nguyen 6318c0bf80 Merge branch 'MDL-86575-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-09 08:20:33 +07:00
Huong Nguyen 962cabf1b2 Merge branch 'MDL-86574-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-09 08:15:21 +07:00
AMOS bot 3972f16c85 Automatically generated installer lang files 2025-10-09 00:09:12 +00:00
Rajneel Totaram 97284b10c7 MDL-85988 mod_book: Fix chapter content overlaps navigation buttons 2025-10-09 11:05:10 +12:00
Rajneel Totaram 86f293fb27 MDL-66579 mod_book: Make chapter numbering consistent 2025-10-09 10:18:59 +12:00
Mihail Geshoski 8e0c904526 Merge branch 'MDL-78495-500_exclude_badges_from_recyclebin' of https://github.com/sharpchi/moodle into MOODLE_500_STABLE 2025-10-08 23:39:26 +08:00
Paul Holden ebc79d11de MDL-82867 output: consistently space external link pixicon. 2025-10-08 16:17:56 +01:00
Mark Sharp 8533b0a132 MDL-78495 Badges: Exclude badges from recycle bin
- co-authored by: Sara Arjona

Add badges to recycle bin test
2025-10-08 11:04:48 +01:00
Mihail Geshoski e558a6bfaf Merge branch 'MDL-86382-MOODLE_500_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_500_STABLE 2025-10-08 13:35:51 +08:00
Mihail Geshoski 0f2443cddb Merge branch 'MDL-86300-500' of https://github.com/sh-csg/moodle into MOODLE_500_STABLE 2025-10-08 13:27:22 +08:00
Mihail Geshoski d2269b1a8b Merge branch 'mdl-83511_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-10-08 13:13:36 +08:00
Paul Holden 37be3e8bdd MDL-86332 completion: remove criteria only from current course on save. 2025-10-07 12:23:42 +01:00
Paul Holden 846b814f94 MDL-86069 blog: verify success state of RSS file before processing.
Avoids subsequent errors in the SimplePie library when trying to
process invalid feed content, triggering numerous PHP deprecation
notices.

See: https://github.com/simplepie/simplepie/issues/810
2025-10-07 12:19:27 +01:00
Jun Pataleta 000468f2d7 Merge branch 'MDL-86450-forum-accessibility-check-boxes-in-advanced-search-form-not-labeled-corrected-M5.0' of https://github.com/stopfstedt/moodle into MOODLE_500_STABLE 2025-10-07 14:07:39 +08:00
james-cnz e2a4283c3e MDL-85917 course: Relocate section title update code 2025-10-07 12:56:20 +13:00
Jun Pataleta ddeec0c02b MDL-86654 customfield: Show drag handles only when necessary
* Show category drag handles when there are 2 or more categories
* Show custom field drag handles when there are a total of 2 or more
fields on the page.
2025-10-06 16:01:46 +08:00
Paul Holden d1394d878b MDL-86777 customfield: show formatted category name in move dialog. 2025-10-06 08:11:12 +01:00
Muhammad Arnaldo 0e7b17b7bf MDL-85495 core_course/activitychooser: consistent starred state 2025-10-06 11:30:25 +07:00
James C 82643aadf9 MDL-83511 course: Add activities by section ID 2025-10-06 12:57:21 +13:00
Huong Nguyen 1b2d270397 Moodle release 5.0.3 2025-10-04 09:03:15 +07:00
Huong Nguyen dc1a579507 NOBUG: Add upgrade notes 2025-10-04 09:03:14 +07:00
AMOS bot ca3e9a2bbd Automatically generated installer lang files 2025-10-04 00:08:01 +00:00
Mark Johnson b6bb37d133 MDL-85975 backup: Handle nulls and arrays in restored questiondata
unset_excluded_fields() was using isset() to determine if the field
targeted for removal is present in the provided data structure. However,
isset() returns false if the field exists, but contains null. This means
the field will not be unset when it should be.

This resolves this by changing the isset() to a property_exists() check
for objects, and array_key_exists() check for arrays. It also expands
the function to properly handle arrays of arrays, or arrays of values,
which was not fully covered before and is used by some third-party
question types.
2025-10-03 15:48:13 +01:00
Paul Holden 63798cf9f3 MDL-80422 auth_oauth2: honour site/user preferred homepage post-login.
Co-authored-by: Markus Kwaśnicki <markus.kwasnicki@uni-mainz.de>
2025-10-03 14:19:22 +01:00
Shamim Rezaie 2800280c8f weekly release 5.0.2+ 2025-10-03 20:02:12 +10:00
Mihail Geshoski 19116f09d1 MDL-75087 mod_assign: Fix failing behat tests in classic 2025-10-03 14:22:12 +07:00
Paul Holden 31fb5cd4f5 MDL-86822 mod_h5pactivity: fix block page type list method parameters.
Similar was done before in 7a77493b.
2025-10-02 12:13:13 +01:00
Mihail Geshoski 9e8766590f MDL-75087 mod_assign: Fix failing unit test 2025-10-02 18:09:13 +07:00
Huong Nguyen f9b66b57df MDL-86762 repository_flickr: Fix Flickr fetching and downloading 2025-10-02 17:46:39 +07:00
Jayce Birrell 161837e393 MDL-86802 core: make CURLOPT_USERPWD optional for put()
Microsoft does not always allow an Authorization header when using PUT but the put() method sets one
by default - https://learn.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-1.0#remarks.
I've included an optional argument to prevent this, but the default
value will maintain the pre-existing logic to avoid other regressions.
2025-10-02 15:50:55 +09:30
Rajneel Totaram 36b84257fd MDL-75087 mod_assign: Respect assignment timer
This patch has better handling of timed assignments.
Users cannot directly access the submission page without
confirming to begin a timed assignment.
2025-10-02 11:04:08 +08:00
raortegar 26235b018f MDL-86253 mod_assign: Respect enrollment status in notifications 2025-10-02 08:15:12 +07:00
raortegar 022bfbfb56 MDL-86253 mod_quiz: Respect enrollment status in notifications 2025-10-02 08:15:12 +07:00
Mihail Geshoski 7c1276b014 Merge branch 'MDL-86791-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-10-02 00:24:25 +08:00
Jake Dallimore 5551ae8e6c Merge branch 'MDL-86413-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-10-01 19:54:26 +08:00
Jake Dallimore 90f29377d6 Merge branch 'MDL-86364-500' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-10-01 15:51:45 +08:00
Mihail Geshoski dd6c1b84fb MDL-86364 calendar: Fix calendar table styles 2025-10-01 14:39:03 +08:00
David Woloszyn 0aaacc446a MDL-86494 router: Display error details only when debugging is on 2025-10-01 06:24:16 +00:00
David Woloszyn a2c9b6cef7 MDL-86335 router: Hide detailed payload data for non-admins 2025-10-01 06:24:16 +00:00
yusufwib01 1390d0544a MDL-86353 mod_assign: Sync exception handling in PdfType and PdfReader 2025-10-01 06:24:16 +00:00
Paul Holden 8d1e4e53d3 MDL-85421 cohort: limit requests for all cohorts to system context. 2025-10-01 06:24:16 +00:00
Paul Holden a3f3636a04 MDL-86426 course: access checks in course overview fragment callback. 2025-10-01 06:24:16 +00:00
David Woloszyn f05afac26a MDL-86327 auth_webservice: Stricter check on login 2025-10-01 06:24:16 +00:00
yusufwib01 2cff8bf6a1 MDL-86261 calendar: Improve event form to show accessible groups 2025-10-01 06:24:16 +00:00
raortegar cc020510fe MDL-86334 tool_mfa: Improve multi-factor authentication validation. 2025-10-01 06:24:16 +00:00
Jake Dallimore 784b4793f0 Merge branch 'MDL-86800-500' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-10-01 14:21:34 +08:00
Mihail Geshoski bf51eae60e MDL-86392 theme_boost: Prevent bootstrap style reset on YUI DataTable 2025-10-01 13:57:41 +08:00
Mihail Geshoski 690d7483f5 Merge branch 'MDL-86162-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-10-01 13:42:53 +08:00
Mihail Geshoski bdfd09fd16 MDL-86800 report_outline: Fix incorrect table borders 2025-10-01 11:26:45 +08:00
Mihail Geshoski 7fab2bf446 MDL-86800 rating: Fix incorrect table borders 2025-10-01 11:26:45 +08:00
Mihail Geshoski 7ef1e09a87 MDL-86800 mod_workshop: Fix incorrect table borders 2025-10-01 11:26:45 +08:00
Mihail Geshoski 3eeb180502 MDL-86800 mod_scorm: Fix incorrect table borders 2025-10-01 11:26:45 +08:00
Mihail Geshoski 608042ed10 MDL-86800 mod_forum: Fix incorrect table borders 2025-10-01 11:26:44 +08:00
Mihail Geshoski ca572033a7 MDL-86800 mod_folder: Fix incorrect table borders 2025-10-01 11:26:44 +08:00
Mihail Geshoski f8c628459e MDL-86800 mod_data: Fix incorrect table borders 2025-10-01 11:26:44 +08:00
Mihail Geshoski 5391ca467a MDL-86800 profiling: Fix incorrect table borders 2025-10-01 11:26:44 +08:00
Mihail Geshoski 1c4a9a1944 MDL-86800 grade: Fix incorrect table borders 2025-10-01 11:26:43 +08:00
Mihail Geshoski a5159fea31 MDL-86800 block_rss_client: Fix incorrect table borders 2025-10-01 11:26:43 +08:00
Mihail Geshoski d152c7bed0 MDL-86800 block_completionstatus: Fix incorrect table borders 2025-10-01 11:26:43 +08:00
Mihail Geshoski 2aebabf132 MDL-86800 block_activity_results: Fix incorrect table borders 2025-10-01 11:26:43 +08:00
Mihail Geshoski 92670010cb MDL-86800 badges: Fix incorrect table borders 2025-10-01 11:26:43 +08:00
Mihail Geshoski e4b2899604 MDL-86800 tool_xmldb: Fix incorrect table borders 2025-10-01 11:26:42 +08:00
Mihail Geshoski 2006e87ae3 MDL-86800 tool_capability: Fix incorrect table borders 2025-10-01 11:26:42 +08:00
Mihail Geshoski 131586afe2 MDL-86800 mnet: Fix incorrect table borders 2025-10-01 11:26:42 +08:00
Jayce Birrell 7935afc657 MDL-86791 core_analytics: include filelib in processor 2025-10-01 11:40:36 +09:30
Huong Nguyen 0bcb02697a Merge branch 'MDL-85546-500' of https://github.com/raortegar/moodle into MOODLE_500_STABLE 2025-10-01 08:21:52 +07:00
Huong Nguyen c3bdb06c9e Merge branch 'MDL-86725-500' of https://github.com/stevandoMoodle/moodle into MOODLE_500_STABLE 2025-10-01 08:14:30 +07:00
Stefan Topfstedt 828708e376 MDL-86450 Forum: adds missing IDs to advanced search form elements. 2025-09-30 11:44:06 -07:00
Mihail Geshoski 48fec6e420 Merge branch 'MDL-86417_50' of https://github.com/andrewhancox/moodle into MOODLE_500_STABLE 2025-10-01 01:26:51 +08:00
raortegar b23112b7c4 MDL-85546 tool_mfa: Improve handling of require MFA conditions 2025-09-30 11:13:15 +02:00
Mihail Geshoski c421b3d856 Merge branch 'MDL-86688-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-09-30 11:19:26 +08:00
Stefan Hanauska 91e676ebde MDL-86300 backup: Save old id of top category
Co-authored-by: Paola Maneggia <paola.maneggia@isb.bayern.de>
2025-09-29 19:22:01 +02:00
Huong Nguyen e652e5b0aa Merge branch 'MDL-86667-500' of https://github.com/stevandoMoodle/moodle into MOODLE_500_STABLE 2025-09-29 13:36:46 +07:00
Stevani Andolo 75ddc0ea33 MDL-86725 grade_report: Fixed invisible search box on mobile view 2025-09-29 10:33:16 +08:00
Stevani Andolo 052d50f8a4 MDL-86667 registration: Unset fields after site being unregistered 2025-09-29 10:32:34 +08:00
Philipp Memmel cd54407e40 MDL-86382 qbank_bulkmove: Fix selecting placeholder in qbank selector
@Co-authored-by: Luca Bösch <luca.boesch@bfh.ch>
2025-09-26 13:54:57 +00:00
Luca Bösch 1894130564 MDL-86413 backup: Fix backup tables styles 2025-09-26 14:25:09 +02:00
cescobedo 237dfaa868 weekly release 5.0.2+ 2025-09-26 13:44:07 +02:00
cescobedo 2173e6d77f NOBUG: Add upgrade notes 2025-09-26 13:44:07 +02:00
cescobedo 7ae3e23570 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-09-26 13:43:53 +02:00
Sara Arjona 022e9bb53c MDL-86488 core: Fix to remove whitespaces 2025-09-26 13:19:36 +02:00
Paul Holden 19a794db63 MDL-86736 block_myoverview: remove stray template content.
Changes made in c530e4c4 left some stray elements in the templates,
which manifested themselves as displaying misplaced pipe characters
depending on unrelated site config (`$CFG->courselistshortnames`).
2025-09-26 11:41:49 +01:00
Jayce Birrell 6ed9af04eb MDL-86688 tool_brickfield: Include cmid in url to edit qbank 2025-09-26 17:48:42 +09:30
Huong Nguyen 605c6ac271 Merge branch 'MDL-86511-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-09-26 11:15:46 +07:00
Andi Permana 423f7fec62 MDL-86511 tiny_link: TinyMCE fails to insert a link using enter key 2025-09-26 11:13:27 +07:00
Mihail Geshoski a5132bc695 Merge branch 'MDL-86177-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-26 12:02:57 +08:00
Jun Pataleta f6c443393a Merge branch 'MDL-85684-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-26 11:31:03 +08:00
Huong Nguyen 0d39faed51 Merge branch 'mdl-84491_redis_connection_500' of https://github.com/ngandrass/moodle into MOODLE_500_STABLE 2025-09-26 10:20:51 +07:00
Mihail Geshoski e76b0ccb69 Merge branch 'MDL-85803-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-26 11:18:13 +08:00
Jun Pataleta 092250723d Merge branch 'MDL-86363-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-26 11:07:55 +08:00
Mihail Geshoski 97832a039c Merge branch 'MDL-86259-M500_transfer_question_categories-task-resilience' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-09-26 10:34:21 +08:00
Jun Pataleta 8354c16995 Merge branch 'MDL-86383-500-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_500_STABLE 2025-09-26 09:48:19 +08:00
Huong Nguyen 616341f6b3 Merge branch 'MDL-85419-500' of https://github.com/sharpchi/moodle into MOODLE_500_STABLE 2025-09-26 08:46:54 +07:00
Huong Nguyen 41db1fd9ae Merge branch 'MDL-80447-500-4' of https://github.com/raortegar/moodle into MOODLE_500_STABLE 2025-09-26 08:25:01 +07:00
Mark Johnson 8e004afafb MDL-81514 assign: Show non-participation groups in activity menu
This sets the flag in the activity menu for selecting the grade
summaries for each groups, to include non-participation groups as well.
2025-09-25 16:40:20 +01:00
Mark Johnson 7e0d7bf9b5 MDL-81514 assign: Enable filtering by non-participation groups
This adds non-participation groups to the group menu on the Submissions
screen, so that submissions can be filtered by these groups.
2025-09-25 16:40:20 +01:00
Mark Johnson 66328d8428 MDL-81514 groups: Add participationonly option to activity group menu
groups_print_activity_menu() and groups_get_activity_group() now include
an additional $participationonly parameter,
which is true by default. This can be set false when we want the user to
be able to select a non-participation group within
an activity, for example if a teacher wants to filter assignment
submissions by non-participation groups. It should never be
used when the menu is displayed to students, as this may allow them to
participate using non-participation groups.

groups_sort_menu_options() now has a $splitparticipation parameter,
which will split non-participation groups out into their own optgroup at
the end of the menu.
2025-09-25 16:40:20 +01:00
Paul Holden 195e0ac4c4 MDL-85803 mod_scorm: re-define language string for deleting attempts.
The previous version was re-purposed in 22cc9757 so lost meaning and
context elsewhere. Define new string for course reset elements.
2025-09-25 16:03:27 +01:00
Andrew Hancox 599c11c1b7 MDL-86417 quiz: Fix for legacy question_set_references on backup 2025-09-25 15:59:02 +01:00
Huong Nguyen a1d7a7e03b MDL-80447 repository_googledocs: Add missing fields 2025-09-25 15:34:56 +02:00
Huong Nguyen 9b0f8e110a MDL-80447 repository_googledocs: Switch to use core/pubsub 2025-09-25 15:34:56 +02:00
Tony Butler 86e8aaa9f6 MDL-58001 mod_assign: Return early if no grade items are available 2025-09-25 12:03:27 +02:00
Amaia Anabitarte 91d31e815a MDL-58001 core_grades: New is_gradable() function in gradelib
Backported from main, introduced in MDL-85837.
2025-09-25 12:03:21 +02:00
Mihail Geshoski 5ce8b33ea8 Merge branch 'MDL-86432-500' of https://github.com/timhunt/moodle into MOODLE_500_STABLE 2025-09-25 14:12:59 +08:00
Mihail Geshoski 2ced55d848 Merge branch 'MDL-86424-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-09-25 13:10:04 +08:00
Benjamin Walker 049b172e00 MDL-85729 group: Lazy load group image urls in search box 2025-09-25 14:25:10 +10:00
Jun Pataleta 13fffeebdb Merge branch 'MDL-86599_500' of https://github.com/timhunt/moodle into MOODLE_500_STABLE 2025-09-25 12:08:43 +08:00
Mihail Geshoski dceb85db15 Merge branch 'MDL-85675-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-09-25 11:54:22 +08:00
Mihail Geshoski 647980d1f9 Merge branch 'MDL-84085-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-25 09:58:22 +08:00
AMOS bot 2545cc4db6 Automatically generated installer lang files 2025-09-25 00:07:56 +00:00
Andrew Nicols c146d00c9f MDL-86432 qtype_ordering: Fix broken data provider 2025-09-24 17:52:06 +01:00
Andrew Nicols db8a5b2f7a MDL-86432 phpunit: Ensure that data providers do not modify state 2025-09-24 16:53:30 +01:00
Amaia Anabitarte f1cd14825e Merge branch 'MDL-86738-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-09-24 17:28:45 +02:00
Amaia Anabitarte 00cb0cdff3 Merge branch 'MDL-86488-500-2' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-24 17:17:55 +02:00
Sara Arjona cb44b19c2d MDL-86738 badges: Relocate upgrade notes from MDL-86174
The upgrade notes were incorrectly placed outside the .upgradenotes/ directory
in MDL-86174. This commit moves them to the correct location.
2025-09-24 13:11:10 +02:00
raortegar 18bea2a880 MDL-80447 repository_googledocs: Update Google Drive OAuth2 scope tests 2025-09-24 11:23:01 +02:00
raortegar 0ab1cc4f48 MDL-80447 repository_googledocs: Update Google Drive OAuth2 scope
Updated the Google Drive integration to use the drive.file scope instead
of the broader drive scope. This change removes support for shared drives,
which rely on full access. As a result, unit tests were updated to reflect
this behavior by bypassing shared drive checks and expectations.
2025-09-24 11:23:00 +02:00
raortegar be840bc26f MDL-80447 core_repository: Add upload button to filepicker repository 2025-09-24 11:22:09 +02:00
Mihail Geshoski 52899bd164 Merge branch 'MDL-83462-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-24 16:16:30 +08:00
Mihail Geshoski e807bf8d35 Merge branch 'MDL-86297-MOODLE_500_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_500_STABLE 2025-09-24 11:49:39 +08:00
Mihail Geshoski 9d4b2a8dd7 Merge branch 'MDL-85682-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-24 10:20:59 +08:00
David Mudrák 889c86ee3f MDL-86383 lang: Use the fixed strings in tests, too 2025-09-23 20:43:32 +02:00
Helen Foster 0cbb52b295 MDL-86383 lang: Import fixed English strings (en_fix) 2025-09-23 20:41:54 +02:00
Sara Arjona 089f43cfd8 weekly release 5.0.2+ 2025-09-23 17:21:03 +02:00
Sara Arjona c9af8f6768 NOBUG: Add upgrade notes 2025-09-23 17:21:03 +02:00
Huong Nguyen b2bf044363 Merge branch 'MDL-84504-maintenance-log-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-09-23 18:37:10 +08:00
Huong Nguyen ecb89f1e41 Merge branch 'MDL-86586-500-choice-dropdown' of https://github.com/sharpchi/moodle into MOODLE_500_STABLE 2025-09-23 08:43:27 +07:00
Sara Arjona 1c8c1d2b28 Merge branch 'MDL-86596-integration-500' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-09-22 10:12:47 +02:00
Paul Holden 3e5d11a046 MDL-86369 mod_scorm: fix attempt deletion behaviour on submit/redirect.
Standard after a POST submission is to redirect back to where user came
from (in this case), to avoid awkward page reload behaviour. Also fix
bug where deleting an attempt for a user, where the attempt didn't exist
would delete all attempts for that user.
2025-09-22 09:06:17 +01:00
Paul Holden d737b9ad07 MDL-86574 tool_cohortroles: format cohort data during privacy export. 2025-09-22 09:00:34 +01:00
Mihail Geshoski 53d06b4504 Merge branch 'MDL-86512-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-22 15:08:08 +08:00
Mihail Geshoski a245413353 MDL-86596 tool_profiling: Revert string removal without deprecation 2025-09-22 13:09:39 +08:00
Mihail Geshoski 506e9e10d0 Merge branch 'MDL-85766-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-22 10:56:54 +08:00
Huong Nguyen 949f9570a0 Merge branch 'MDL-84870-500' of https://github.com/andimendunia/moodle into MOODLE_500_STABLE 2025-09-22 08:28:36 +07:00
Huong Nguyen c856b78f05 Merge branch 'MDL-83066-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-22 08:24:18 +07:00
Brendan Heywood 86456b6f38 MDL-84504 cli: Add config logging for cli maintenance mode 2025-09-22 10:15:30 +10:00
Brendan Heywood a3209bb547 MDL-84504 core: Allow setting config and logging with one call 2025-09-22 10:15:17 +10:00
Mihail Geshoski 83ec402da6 Merge branch 'MDL-83080-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-21 22:48:10 +08:00
Mihail Geshoski 348c0c1899 Merge branch 'MDL-86596-500' of https://github.com/yerairogo/moodle into MOODLE_500_STABLE 2025-09-21 22:29:59 +08:00
Amaia Anabitarte 0eee5e17ff Merge branch 'MDL-86174-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-09-19 16:12:54 +02:00
Mark Sharp 72a2bc2962 MDL-86586 core_form: Fixed dropdown JS error if no element found 2025-09-19 14:41:15 +01:00
Sara Arjona 410e16bb89 MDL-86174 badges: Add Canvas Credentials paid plan alert 2025-09-19 15:34:30 +02:00
Luca Bösch d8b71caf11 MDL-86424 quiz: Question type icon square within add question in quiz. 2025-09-19 10:28:13 +01:00
Yerai Rodríguez d6714f3367 MDL-86596 Profiling: add breadcrumb node to profiling detail page
Boost theme removes the last item action.
This adds an extra node so the profile run details page breadcrumb is clickable in both Classic and Boost themes.
2025-09-19 10:53:26 +02:00
Huong Nguyen 11db03e2ae weekly release 5.0.2+ 2025-09-19 15:33:36 +07:00
Huong Nguyen 48b1491c02 NOBUG: Add upgrade notes 2025-09-19 15:33:36 +07:00
Huong Nguyen 67a2930cd8 MDL-80053 core_grade: Fix illegal whitespaces 2025-09-19 15:14:55 +07:00
Huong Nguyen 6ad7562f51 Merge branch 'MDL-83991_500' of https://github.com/panchalrohit/moodle into MOODLE_500_STABLE 2025-09-19 08:57:06 +07:00
Mihail Geshoski 7ab3565b4c Merge branch 'mdl-83857_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-09-19 09:54:02 +08:00
Huong Nguyen bf69f70d29 Merge branch 'MDL-86592-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-09-19 08:21:56 +07:00
Shamim Rezaie fbd05827c9 Merge branch 'MDL-86021-500' of https://github.com/laurentdavid/moodle into MOODLE_500_STABLE 2025-09-19 10:49:34 +10:00
James C f3b9b01401 MDL-83857 course: Use set_sectionid not num 2025-09-19 11:39:35 +12:00
Paul Holden e3a4f4faf2 Merge branch 'MDL-85616-500_glossary_undefined_variable' of https://github.com/davidherney/moodle into MOODLE_500_STABLE 2025-09-18 19:23:22 +01:00
Sara Arjona 3e72f5aad1 Merge branch 'MDL-86173-500' of https://github.com/aanabit/moodle into MOODLE_500_STABLE 2025-09-18 17:55:58 +02:00
Jun Pataleta 55968b2e35 MDL-86488 componentlibrary: Improved documentation for the action menu 2025-09-18 19:27:37 +08:00
Jun Pataleta 937115ff3a MDL-86488 mod_subsection: Click on the menu button itself, not the icon 2025-09-18 19:27:36 +08:00
Jun Pataleta ee2783a4c6 MDL-86488 behat: Click on the menu button itself, not the icon 2025-09-18 19:27:36 +08:00
Jun Pataleta e419d66acf MDL-86488 qbank_columnsortorder: Use action menu Behat steps 2025-09-18 19:27:36 +08:00
Jun Pataleta 11607a0a57 MDL-86488 behat: Update xpath for action menu trigger's label 2025-09-18 19:27:36 +08:00
Jun Pataleta 47493f3bba MDL-86488 mod_data: Fix Behat tests for checking action menu items 2025-09-18 19:27:36 +08:00
Jun Pataleta fd11665611 MDL-86488 mod_feedback: Move menu trigger label outside the pix icon
* The pix icons must be decorative, and the label be put within
the menu trigger itself as a visually hidden text.
* Also make the pix icons beside the action menu items as decorative.
2025-09-18 19:27:35 +08:00
ferran c568d9db64 MDL-86021 core_course: Sort modules in the course listing order
When sections contains submodules, the list of course modules should appear
in the right order (the order displayed in the course page)
2025-09-18 12:24:14 +02:00
Jun Pataleta e6c113e4a0 MDL-86488 grade: Move menu trigger label outside the pix icon
* The pix icons must be decorative, and the label be put within
the menu trigger itself as a visually hidden text.
2025-09-18 17:25:37 +08:00
Jun Pataleta 8674dac8da MDL-86488 course: Set action menu icon for category actions menu 2025-09-18 17:25:37 +08:00
Jun Pataleta cf41ddbfad MDL-86488 mod_lti: Move menu trigger label outside the pix icon 2025-09-18 17:25:36 +08:00
Jun Pataleta f1b25ca028 MDL-86512 mod_assign: Make the select column header name more accessible 2025-09-18 13:56:22 +08:00
David Herney 92f455dc9e MDL-85616 mod_glossary: The existence of the variable is controlled 2025-09-17 13:08:48 -05:00
Mihail Geshoski 2e468618c4 Merge branch 'MDL-80053-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-09-17 23:33:43 +08:00
Paul Holden d20833ddc0 Merge branch 'MDL-86454-500' of https://github.com/sh-csg/moodle into MOODLE_500_STABLE 2025-09-17 16:04:34 +01:00
Paul Holden 371b19bc2b MDL-86648 mod_assign: refer to selected user when calculating override.
The selected user is either that chosen for a new override, or the saved
value when editing/loading an existing override.
2025-09-17 15:37:43 +01:00
Amaia Anabitarte fc84a849d5 MDL-86173 grade: Checking the grade item is gradable 2025-09-17 16:16:56 +02:00
Paul Holden ca93788b50 Merge branch 'MDL-86431-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-09-17 12:39:06 +01:00
Paul Holden 39f1775180 Merge branch 'MDL-86541-500' of https://github.com/dfelipemonroy/moodle into MOODLE_500_STABLE 2025-09-17 11:52:55 +01:00
Amaia Anabitarte 9bfaabbe7b Merge branch 'MDL-86490-500-2' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-17 11:52:57 +02:00
Jun Pataleta e8dd16f7fd MDL-86488 output: Make the icon in action menu triggers decorative
* Set the action label properly.
* Set the kebab icon as a decorative icon.
* Move the title attribute to the menu button itself instead of the
kebab icon.
2025-09-17 15:16:34 +08:00
Andrew Nicols b2c991e3c9 MDL-86431 phpunit: Rename test teardown method 2025-09-17 13:58:16 +08:00
Conn Warwicker 39137cf98f MDL-85874 core_grade: Fix grade category toggle JS error. 2025-09-16 15:43:50 +01:00
Jun Pataleta 280d9de9c3 MDL-86512 core: Ensure bulk action selection count announcement
When the bulk actions are first rendered, the item count in the
aria-live region will not be announced by screen readers as aria-live
regions need to be present in the DOM and changed before screen readers
can announce their content.

This commit ensures that the item selection count will be announced
when the bulk actions get added to the DOM by calling
`updateBulkItemSelection()` after rendering the bulk actions HTML. This
removes the non-breaking space in the template, effectively causing a
change in DOM without affecting the visuals, and allowing screen readers
to announce the contents of the item count.
2025-09-16 22:39:00 +08:00
Jun Pataleta 09999184d4 MDL-86512 core: Assign status role for the number of selected items
Add a status role for the container containing the number of selected
items for bulk actions so that screen readers will announce this
number when an item gets selected for bulk action.
2025-09-16 22:39:00 +08:00
Jun Pataleta 678b4aa851 MDL-86490 tool: Click on the action link itself and not on its icon 2025-09-16 22:35:49 +08:00
Jun Pataleta 5bc4eb67b3 MDL-86490 output: Mark icon in action_icon as decorative 2025-09-16 22:35:49 +08:00
Huong Nguyen 93aa033801 weekly release 5.0.2+ 2025-09-16 20:58:40 +07:00
Paul Holden d9e0ff18c6 MDL-86646 gradereport_user: ensure table rowspan always populated. 2025-09-16 13:21:38 +01:00
Paul Holden 001d0f72a7 MDL-86645 grade: account for text grade types determining element icon. 2025-09-16 10:07:33 +01:00
David Woloszyn 8b1826591a MDL-86592 analytics: Modify processor checking in admin setting
Remove processor checks when calling write_setting. This prevents
configuration errors displaying when processors are not yet configured
when admin defaults are applied.
2025-09-16 15:02:42 +10:00
Jun Pataleta cdbe0ac5b2 Merge branch 'MDL-86495-500-patch' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-09-16 10:15:47 +08:00
Jayce 711c780fe4 MDL-80053 core_grade: fixed exception message appearing
- Fixing the exceptions shows an incorrectly formatted table
- The filler cell is only used to take space on the left rows but when the right rows are empty, it is not needed.
2025-09-16 11:29:24 +09:30
Mihail Geshoski 303eaaab75 Merge branch 'MDL-86558-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-09-16 09:55:46 +08:00
Huong Nguyen 93f7bc45bf MDL-86495 core: Improve PHPUnit for IPLookup 2025-09-16 08:47:28 +07:00
Amaia Anabitarte a9beb7258e Merge branch 'MDL-85541-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-15 14:56:56 +02:00
Amaia Anabitarte 1c29339b5c Merge branch 'MDL-86157-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-15 14:50:30 +02:00
Paul Holden 7804f01ad1 MDL-86157 mod_glossary: correctly format entry page title. 2025-09-15 12:00:40 +01:00
Paul Holden 1cdfee56d9 MDL-85418 user: prevent default click event/scroll in user sub-menus. 2025-09-15 10:41:23 +01:00
Paul Holden 3995498467 MDL-83080 message: handle core\url instance data as contexturl. 2025-09-15 10:40:23 +01:00
Paul Holden 1041103f2d MDL-86147 block_myoverview: consistent zero-state view styling.
Make the zero state template consistent with the populated course
template from 6415776d, specifically in regards to borders.
2025-09-15 10:39:36 +01:00
Shamim Rezaie c75a926f68 Merge branch 'MDL-86604-500' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-09-15 18:24:26 +10:00
Andi Permana e5b53cfe81 MDL-84870 core: Update security.txt expiry 2025-09-15 14:30:49 +07:00
Huong Nguyen 1adbdfced4 Merge branch 'MDL-79362-500' of https://github.com/abias/moodle into MOODLE_500_STABLE 2025-09-15 11:40:54 +07:00
Jun Pataleta af7ff3cacc Merge branch 'MDL-86495-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-09-15 10:25:34 +08:00
Tim Hunt 29d621c8fb MDL-86599 assignment: add hidden captions to the table in the assign UI
This helps screen-reader users trying to navigate quickly to the right table.
2025-09-12 15:31:03 +01:00
Paul Holden 0a92183a94 MDL-85887 tag: style search form using common Bootstrap controls. 2025-09-12 11:38:49 +01:00
Paul Holden 509c029923 MDL-84085 mod_h5pactivity: account for missing ra table join alias. 2025-09-12 11:38:18 +01:00
Shamim Rezaie 6bc92d4ba4 weekly release 5.0.2+ 2025-09-12 18:34:48 +10:00
Shamim Rezaie 4deced0a3e NOBUG: Add upgrade notes 2025-09-12 18:34:48 +10:00
Mihail Geshoski cd8b087792 MDL-86604 mod_feedback: Remove unwanted table borders 2025-09-11 23:43:25 +08:00
Mihail Geshoski f7bda3c089 MDL-86548 mod_glossary: Remove unwanted table borders 2025-09-11 23:43:24 +08:00
Mihail Geshoski e19d167738 MDL-86548 theme_boost: Option to avoid the _reboot.scss reset for tables
MDL-85659 introduced a reset of the Bootstrap _reboot.scss table styles.
This reset is applied to most tables (except those using the .table
class) and in some cases resulted in regressions such as unwanted
borders.
To address this, the .table-reboot class has been introduced as an
option to bypass the reset applied by MDL-85659 in undo.scss. Tables
affected by this regression can include this class, which is
intentionally styleless and preserves the original _reboot.scss styles
while preventing the addition of unwanted styling (borders).
2025-09-11 23:43:24 +08:00
Jun Pataleta 2c6ac63b02 Merge branch 'MDL-86294-M500_document-db-options' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-09-11 17:12:32 +08:00
Jake Dallimore 308cc2bd51 Merge branch 'MDL-86548-500' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-09-11 16:30:29 +08:00
Mihail Geshoski 3063e942f0 MDL-86548 mod_glossary: Remove unwanted table borders 2025-09-11 13:51:50 +08:00
Mihail Geshoski 095c638ca6 MDL-86548 theme_boost: Option to avoid the _reboot.scss reset for tables
MDL-85659 introduced a reset of the Bootstrap _reboot.scss table styles.
This reset is applied to most tables (except those using the .table
class) and in some cases resulted in regressions such as unwanted
borders.
To address this, the .table-reboot class has been introduced as an
option to bypass the reset applied by MDL-85659 in undo.scss. Tables
affected by this regression can include this class, which is
intentionally styleless and preserves the original _reboot.scss styles
while preventing the addition of unwanted styling (borders).
2025-09-11 13:51:49 +08:00
Paul Holden 5982990339 Merge branch 'MDL-86330-500' of https://github.com/yerairogo/moodle into MOODLE_500_STABLE 2025-09-10 16:26:44 +01:00
Paul Holden dd1d29ddae Merge branch 'MDL-86501-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-10 16:10:26 +01:00
Paul Holden ac818d5a8c Merge branch 'MDL-86447_MOODLE_500_STABLE' of https://github.com/dcmexy/moodle into MOODLE_500_STABLE 2025-09-10 15:49:56 +01:00
Mihail Geshoski e47a6356ad Merge branch 'MDL-86479-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-10 22:18:06 +08:00
Paul Holden aea9a49b28 Merge branch 'MDL-86489-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-10 15:04:06 +01:00
Diego Monroy 72940def9d MDL-86541 blocks: validate allowing block title to be '0' (zero). 2025-09-10 12:32:21 +02:00
Mihail Geshoski b3bedd324b Merge branch 'MDL-86498-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-10 17:44:24 +08:00
Amaia Anabitarte 9d078cd0bd Merge branch 'MDL-86531-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-09-10 10:37:53 +02:00
Jun Pataleta 3ec9e79d42 MDL-86501 form: Fix unit tests
The change in the calendar button from an `<a>` tag to a native
`<button>` tag means the `\HTML_QuickForm_group::getValue()` will have
a different result and the `test_onquickformevent()` tests must be
adjusted accordingly.
2025-09-10 11:28:06 +08:00
Huong Nguyen 0d3ecd8267 Merge branch 'MDL-84076-MOODLE_500_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_500_STABLE 2025-09-10 09:10:10 +07:00
Huong Nguyen c18ab7c188 Merge branch 'MDL-85270-m50' of https://github.com/micaherne/moodle into MOODLE_500_STABLE 2025-09-10 09:08:21 +07:00
Huong Nguyen 80ded1a69e Merge branch 'MDL-85266-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-10 09:05:43 +07:00
Paul Holden 31a633534c Merge branch 'MDL-86521-500' of https://github.com/abias/moodle into MOODLE_500_STABLE 2025-09-09 14:25:01 +01:00
Paul Holden 0df18c7432 Merge branch 'MDL-86499-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-09 14:15:33 +01:00
Paul Holden db2a0ea4aa Merge branch 'MDL-86501-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-09 14:01:01 +01:00
Jun Pataleta c8ac5fd27d MDL-86498 badges: Empty string for empty links 2025-09-09 18:18:29 +08:00
Jun Pataleta 6c06b5f1ef MDL-86498 badges: Add label for badge navigation url_select 2025-09-09 18:18:29 +08:00
Jun Pataleta f380f3f560 MDL-86498 badges: Accessibility coverage for badge details and overview 2025-09-09 18:18:29 +08:00
Jake Dallimore 5b1731077e weekly release 5.0.2+ 2025-09-09 15:06:18 +08:00
Jake Dallimore 77e643b914 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-09-09 15:06:12 +08:00
Huong Nguyen b71a12b73e Merge branch 'MDL-83003-M500_INFO-command-not-compatible-with-envoy-proxy-redis' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-09-09 09:28:51 +07:00
Huong Nguyen 3b4b80ba1e MDL-86495 core: Better errors handling for IP Lookup
- Since `Geoplugin` is not free anymore, a new admin setting called `GeoPlugin API key` has been added for user to input
  their API key if they still want to use `Geoplugin` service.
- The `iplookup_find_location()` method has been improved to handle error responses more effectively.
2025-09-09 08:44:53 +07:00
Rajneel Totaram 416992c5b2 MDL-86558 mod_quiz: Fix styles for sticky columns 2025-09-09 10:07:56 +12:00
Michael Aherne bfcc1cf4ec MDL-85270 output: Export url_select for template. 2025-09-08 10:24:13 +01:00
Mark Sharp e0f02aab9e MDL-85419 core_courseformat: Move event trigger to after cm cache purge 2025-09-08 10:01:03 +01:00
Huong Nguyen 3d67d7b889 Merge branch 'MDL-85335-500' of https://github.com/gbarat87/moodle into MOODLE_500_STABLE 2025-09-08 08:30:22 +07:00
Mihail Geshoski bcd723868f Merge branch 'MDL-86374-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-08 09:23:21 +08:00
Mihail Geshoski 128bcf4b9e Merge branch 'MDL-86317-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-09-08 09:17:12 +08:00
Paul Holden 028ed9c60e MDL-86575 cohort: format cohort names in external service return data. 2025-09-07 19:31:31 +02:00
Paul Holden bd0a861e5d MDL-86003 datafield_textarea: define missing media/subtitle options.
In order to insert multimedia using the editor, we need a "subtitle"
filepicker option.
2025-09-07 10:53:03 +02:00
AMOS bot e18a4d5d6f Automatically generated installer lang files 2025-09-06 00:08:01 +00:00
Huong Nguyen a2f7f13d7c weekly release 5.0.2+ 2025-09-05 23:53:53 +07:00
Huong Nguyen af08c2b925 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-09-05 23:53:42 +07:00
Philipp Memmel cbb7382c86 MDL-84076 core_templates: Avoid manipulation of template context object 2025-09-05 09:59:06 +02:00
Yerai Rodríguez f15afac206 MDL-86330 enrol: remove time rounding to avoid missing active enrolments
Rounding time could lead to newest enrolments being excluded, resulting in
these courses not appearing under the "My courses" tab in the Dashboard until the rounded time aligned with the actual time.

enrol_get_all_users_courses() now uses the PSR-20 clock to provide stable
and testable time values.
2025-09-05 08:21:32 +02:00
Huong Nguyen 3b8769886e Merge branch 'MDL-83628-m500' of https://github.com/sammarshallou/moodle into MOODLE_500_STABLE 2025-09-05 09:21:55 +07:00
Simey Lameze 03df64668d MDL-85675 behat: add timefinish to quiz attempt generator
Adds support for the timefinish attribute to the quiz attempt
generator allowing Behat scenarios to specify the exact completion
time of an attempt.

This is necessary to simulate a scenario where the student finished
the attempt few minutes ago for example.

This commit also adds two scenarios that automates MDLQA-307.
2025-09-05 10:09:28 +08:00
Mihail Geshoski 92d88969a0 Merge branch 'MDL-85869-M500' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-09-04 23:55:07 +08:00
Mihail Geshoski ed40f8f422 Merge branch 'MDL-74046-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-09-04 23:47:03 +08:00
ferran e50d272c5f Merge branch 'MDL-85416_500' of https://github.com/timhunt/moodle into MOODLE_500_STABLE 2025-09-04 16:31:25 +02:00
ferran 868659f644 Merge branch 'MDL-72956-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-04 16:10:19 +02:00
Huong Nguyen 101136c8b4 Merge branch 'MDL-86230-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-04 15:44:21 +07:00
Huong Nguyen e9ffc9458e Merge branch 'MDL-72511-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-09-04 15:42:09 +07:00
ferran ccb0099b13 Merge branch 'MDL-85641-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-09-04 10:11:15 +02:00
ferran 33a0aa6625 Merge branch 'MDL-86248-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-04 10:03:55 +02:00
Muhammad Arnaldo 77c9a9d83d MDL-74046 tool_lp: new-tab for competency frameworks repo link 2025-09-04 14:28:15 +07:00
Rajneel Totaram cfffecddb5 MDL-86317 core: Replace deprecated bootstrap class 2025-09-04 10:19:55 +12:00
Rajneel Totaram a0562f11d8 MDL-85641 mod_feedback: Use full width for reponses page 2025-09-04 09:58:31 +12:00
Leon Stringer 59bbfa4cc0 MDL-86434 core: Page title for invalid user ID 2025-09-03 16:14:01 +02:00
Alexander Bias 5d60bb2c4b MDL-86521 block_myoverview: Fix overflow of filter bar 2025-09-03 15:03:40 +02:00
Daniel Ziegenberg 0d89eada8b MDL-85869 qbank: Fix duplicate category stamps and idnumbers
Migrating from Moodle 4.5 to Moodle 5.0 the adhoc task
\mod_qbank\task\transfer_question_categories should transfer question
categories into new question bank instances.

The code for rescuing 'lost' categories where the linked contextid
no longer exists was failing. It moved all these categories to the
system context, which could lead to unique key violations.

To fix this, we check for duplicates, and if neccessary change the
stamp, or remove the idnumber. Since these questions were formerly
'lost', this is OK.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
Co-authored-by: Tim Hunt <T.J.Hunt@open.ac.uk>
2025-09-03 13:26:59 +02:00
Mikel Martín 52629d951c MDL-86531 course: Fix overview table overflow 2025-09-03 13:14:36 +02:00
Andrew Nicols f3c89b4ab3 MDL-86534 mod_forum: Only run bulk action JS if they are enabled 2025-09-03 12:46:08 +02:00
Paul Holden b8f7791612 Merge branch 'MDL-85619-500' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-09-03 12:38:31 +02:00
toanlamt e9e5c098e3 MDL-84982 tiny_media: Fix excessive data passed to the usedfiles JS file 2025-09-03 12:30:37 +02:00
Paul Holden df4f173fd9 Merge branch 'MDL-86187-MOODLE_500_STABLE' of https://github.com/phmemmel/moodle into MOODLE_500_STABLE 2025-09-03 12:16:17 +02:00
Daniel Ziegenberg 42f1ac842e MDL-86259 qbank: Make transfer_question_categories more resilient
Migrating from Moodle 4.5 to Moodle 5.0 queues an adhoc task
`\mod_qbank\task\transfer_question_categories` which is supposed to
spawn a lot of adhoc tasks `\mod_qbank\task\transfer_questions`.

However, the task `\mod_qbank\task\transfer_question_categories` is
built in a way that the adhoc tasks to spawn are stored in memory in an
array. So if the task at some point crashes which is not as unlikely as
one would think (temporary database connection loss, leftover rubbish in
question table, all kinds of possible errors, see MDL-86226 or
MDL-85869) all these `\mod_qbank\task\transfer_questions` tasks WILL NOT
BE SPAWNED ANYMORE leaving the whole platform in a mess from which you
will not be able to recover from: Question categories have been migrated
to new contexts, but the questions have not, because the adhoc tasks
never have been created.

We fix this by moving the creation of the adhoc tasks
`\mod_qbank\task\transfer_questions` inside the delegated database
transaction where the question categories are being moved. So after a
category is moved but before it get's deleted, we create the
corresponding `\mod_qbank\task\transfer_questions` task and queue it for
execution.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-09-03 10:02:42 +02:00
Mihail Geshoski 9fb8d2664c Merge branch 'MDL-82244-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-03 12:21:41 +08:00
Mihail Geshoski 854e8c7841 Merge branch 'MDL-73671-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-03 12:15:47 +08:00
Mihail Geshoski 351df6c160 Merge branch 'MDL-83474-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-03 12:08:07 +08:00
AMOS bot 478aae8790 Automatically generated installer lang files 2025-09-03 00:07:56 +00:00
ferran c89543f2cb Merge branch 'MDL-71786-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-09-02 17:03:42 +02:00
Tim Hunt f6c4de3c4c MDL-85416 assignment: fix date format in messages
For no very obvious reason, the date in the 'You have just
submitted your assignemnt' message was formatted differently
from the default display used on-screen.

This commit makes it consistent.
2025-09-02 15:33:43 +02:00
Michael Hawkins 4e5151db5f weekly release 5.0.2+ 2025-09-02 20:32:05 +08:00
Michael Hawkins 985563f5d8 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-09-02 20:31:38 +08:00
Mihail Geshoski 9c18bba7f5 Merge branch 'mdl-84975_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-09-02 09:44:26 +08:00
Mihail Geshoski e74db295a9 Merge branch 'MDL-85551_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-09-02 09:23:05 +08:00
Mihail Geshoski cd1ae95751 Merge branch 'MDL-86339-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-09-02 09:16:36 +08:00
Mihail Geshoski e3743c2b68 Merge branch 'MDL-86366-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-09-01 23:21:14 +08:00
Mihail Geshoski 8f07f08c91 Merge branch 'MDL-86362-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-09-01 23:11:22 +08:00
Paul Holden 3e56c24239 MDL-71786 mod_assign: shift activity grade reminder dates during reset.
Co-authored-by: aneno-m-e <43393997+aneno-m-e@users.noreply.github.com>
2025-09-01 17:07:03 +02:00
Paul Holden 80dd589366 MDL-73671 mod_forum: shift activity due/cutoff dates during reset. 2025-09-01 16:55:09 +02:00
Mihail Geshoski b25b9a5505 Merge branch 'MDL-85018_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-09-01 22:29:02 +08:00
Mihail Geshoski d83b4469f7 Merge branch 'MDL-73417-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-09-01 22:18:50 +08:00
Jun Pataleta b17e1036ff MDL-86501 form: Fix date selector calendar button mark up
* Make the calendar icon decorative.
* Mark up the calendar button accordingly:
  - Render it as a `<button type="button">`
  - Add label using `aria-label`.
  - Use a more suitable label of "Date picker" rather than "Calendar"
  - Add a `title` attribute to show a tooltip for sighted users.
  - Disable/enable it accordingly by setting/removing the `disabled`
    attribute.
2025-09-01 16:08:13 +08:00
Philipp Memmel 6b9b6ea399 MDL-86297 core_question: Fix limit when retrieving qbank instances 2025-09-01 08:43:46 +02:00
AMOS bot c5652816a2 Automatically generated installer lang files 2025-09-01 00:07:52 +00:00
Luca Bösch 57f15efcdb MDL-86366 quiz: Description shouldn't show each secure page, but title. 2025-08-31 17:29:42 +02:00
Luca Bösch 140ec8196d MDL-86362 questions: Fix question bank table styles 2025-08-30 14:59:58 +02:00
Paul Holden 3597ec7916 MDL-86177 task: ensure tasks are runnable in indicator output.
Also fix case where task indicator progress data no longer exists,
which lead to exceptions when encountered, breaking the gradebook.
2025-08-29 15:51:25 +01:00
Paul Holden 31518baf30 MDL-85266 tool_uploaduser: correctly key bulk users session array. 2025-08-29 15:50:08 +01:00
Jun Pataleta 208e2b68fa MDL-86479 course: Add accessibility coverage for course index options 2025-08-29 21:10:49 +08:00
cescobedo 3ca7c6bf32 weekly release 5.0.2+ 2025-08-29 15:00:54 +02:00
cescobedo a23ae5fd00 NOBUG: Add upgrade notes 2025-08-29 15:00:54 +02:00
Jun Pataleta fc7f5e6155 MDL-86489 mod_feedback: Add accessibility coverage for Questions tab
* Also fix the heading level issue found by the test.
2025-08-29 20:49:53 +08:00
Jun Pataleta 6529caf402 MDL-86499 core: Make table sort icons decorative 2025-08-29 12:24:36 +08:00
Huong Nguyen ba7aef3b44 Merge branch 'MDL-86343-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-29 11:03:57 +07:00
Huong Nguyen 453da3a159 Merge branch 'MDL-85743-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-29 11:00:43 +07:00
Mihail Geshoski 1cd2424b6d Merge branch 'MDL-83256-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-29 11:32:45 +08:00
Huong Nguyen 6754b63a6d Merge branch 'MDL-86452-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-08-29 08:46:14 +07:00
Huong Nguyen 314b56d36b Merge branch 'MDL-86301-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-08-29 08:41:22 +07:00
Paul Holden 03e50cb759 MDL-82244 course: use site default course visibility in external call. 2025-08-28 17:40:03 +01:00
Paul Holden 558fccee57 MDL-86248 theme_boost: consistently apply dropdown item spacing.
Replace previous ad-hoc fixes for active item spacing in dropdown
menu items.

Changes to Javascript are due to the following bug in our SCSS
compiler, preventing a simpler `&:has([...])` selector:

https://github.com/scssphp/scssphp/issues/606

Co-authored-by: Mikel Martín <mikel@moodle.com>
2025-08-28 16:56:44 +01:00
Amaia Anabitarte 63d5ead68c Merge branch 'MDL-86280-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-08-28 11:16:46 +02:00
Jun Pataleta 9af958b434 MDL-86489 mod_feedback: Mark required icon as decorative
* Set `alt` param as empty, but add `title` attribute for the sake of
sighted users.
* Add a visually hidden string that indicates the element is required.
2025-08-28 16:53:10 +08:00
Jun Pataleta 20148b07a5 MDL-86479 theme_boost: Fix a11y issues on the course index options
* Add aria-label for the options menu button.
* Add proper menu and menuitem roles for the options menu.
2025-08-28 13:44:36 +08:00
Andrew Nicols 303b8a4bc1 MDL-86452 core: Reset navigation data between tests 2025-08-28 13:13:05 +08:00
Stefan Hanauska 2c021bd81e MDL-86454 badges: Hide revoke button if not available 2025-08-27 10:09:13 +02:00
Rajneel Totaram 46892613b0 MDL-86339 qtype_numeric: Coding style improvements 2025-08-27 16:24:39 +12:00
Rajneel Totaram facdd9c203 MDL-86339 qtype_numeric: Display units dropdown on the same line 2025-08-27 16:24:39 +12:00
Dean Chimezie 81d2d088ef MDL-86447 tool_mfa: Restore setup lang string 2025-08-26 13:38:25 -04:00
Luca Bösch 14bf865905 MDL-86280 mod: Do not filter help text in activity chooser.
Co-authored-by: Ferran Recio <ferran@moodle.com>
2025-08-26 18:19:36 +02:00
cescobedo 5764f8ee38 weekly release 5.0.2+ 2025-08-26 15:53:51 +02:00
cescobedo c93b644c94 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-08-26 15:53:39 +02:00
Mihail Geshoski 576d0230a0 Merge branch 'MDL-85677-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-08-26 11:57:27 +08:00
Mihail Geshoski c8fd816a90 Merge branch 'MDL-85229-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-26 11:49:20 +08:00
Huong Nguyen 223b4065d5 Merge branch 'MDL-86315-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-08-26 09:23:25 +07:00
Simey Lameze d9bd1a8c0a MDL-85677 behat: test to verify SEB download link visibility 2025-08-26 09:13:27 +08:00
Mihail Geshoski 6b775cf705 Merge branch 'MDL-85676-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-08-26 00:43:58 +08:00
Andrew Nicols 55d7b7b935 MDL-86301 core: Create autoloadable externallib_testcase 2025-08-25 15:14:03 +08:00
Simey Lameze 71d66a1c5f MDL-85676 behat: validate SEB attempt message 2025-08-25 14:03:45 +08:00
AMOS bot 3f9923d756 Automatically generated installer lang files 2025-08-24 00:10:01 +00:00
Mihail Geshoski 3674a5854a weekly release 5.0.2+ 2025-08-22 20:40:04 +08:00
Mihail Geshoski 812e4d86c5 NOBUG: Add upgrade notes 2025-08-22 20:40:04 +08:00
Huong Nguyen 7b2049a602 MDL-73845 enrol_database: Fix MySQL issue 2025-08-22 13:00:30 +08:00
Huong Nguyen ecaf13fd45 Merge branch 'MDL-86231-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-08-22 08:46:49 +07:00
Paul Holden 36e4118e2d MDL-85592 output: export missing node sort attribute for template. 2025-08-21 13:06:24 +01:00
Paul Holden 1c4e61ec4a MDL-85618 filter_displayh5p: change regular expression delimeter.
Ensure we don't confuse the expression parser when supplied "Allowed
source" contains coincidental control characters in the URL, e.g. '/'
and '#'.

Note that `preg_quote(...)` isn't appropriate here, because the given
URL may indeed contain genuine control characters already.
2025-08-21 13:00:49 +01:00
Jun Pataleta c16b55dce9 MDL-81455 behat: Add accessibility coverage to default start page tests 2025-08-21 17:51:03 +08:00
Jun Pataleta 2d2fa81a6c Merge branch 'MDL-81455-500' of https://github.com/rajutm25/moodle into MOODLE_500_STABLE 2025-08-21 17:48:12 +08:00
Jun Pataleta aa7cc0f7a2 Merge branch 'MDL-86202-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-08-21 15:20:54 +08:00
Rajneel Totaram 0fb340f187 MDL-86202 mod_lesson: Use correct heading level 2025-08-21 18:39:19 +12:00
Mihail Geshoski a9c6cab95e Merge branch 'MDL-84850-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-21 11:46:20 +08:00
Huong Nguyen c77e19c8ac Merge branch 'MDL-86311-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-21 09:30:10 +07:00
Huong Nguyen b231e98b91 Merge branch 'MDL-80611-500' of https://github.com/marinaglancy/moodle into MOODLE_500_STABLE 2025-08-21 08:54:51 +07:00
Mihail Geshoski f905120964 Merge branch 'MDL-84739-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-20 17:23:51 +08:00
Paul Holden 7f18673266 MDL-85684 mod_assign: format course/assignment notification content. 2025-08-20 09:14:49 +01:00
Paul Holden 95a76b29a8 MDL-85348 cohort: disable report bulk deletion for managed cohorts. 2025-08-20 09:09:27 +01:00
Paul Holden 55b8c665e9 MDL-83474 webservice: fix empty/zero $itemid handling in text format. 2025-08-20 09:08:25 +01:00
Mihail Geshoski ad15f0f2b8 Merge branch 'MDL-86015-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-20 09:54:36 +08:00
Huong Nguyen a93baa4d34 Merge branch 'MDL-73845-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-08-20 08:41:36 +07:00
Paul Holden 85a64a433b MDL-86374 report_outline: use formatted activity name in report. 2025-08-20 00:37:00 +01:00
Paul Holden 984e1b8954 MDL-85743 user: correct debugging for missing user picture fields. 2025-08-19 17:12:33 +01:00
Paul Holden 8cd752c0df MDL-85736 core: don't double escape page URL in meta refresh tag.
Co-authored-by: Clay Cross <claycross@gmail.com>
2025-08-19 17:11:52 +01:00
Paul Holden 8284ea1914 MDL-84850 tag: ensure course tags enabled before adding to navigation. 2025-08-19 17:10:54 +01:00
Shamim Rezaie bb70c36bee weekly release 5.0.2+ 2025-08-20 00:45:36 +10:00
Shamim Rezaie b25db071d8 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-08-20 00:45:25 +10:00
rajutm25 60c5f790ed MDL-81455 core: Fix welcome message heading in dashboard
The welcome message on login was incorrectly replacing the dashboard
page header.The change ensures the welcome message appears as a
paragraph while maintaining the dashboard page heading.
2025-08-19 19:47:25 +05:30
Paul Holden 02f8a46063 MDL-86363 completion: ensure module viewed completion data is cleaned.
The privacy provider should ensure it removes said data consistently.
2025-08-19 11:17:28 +01:00
Mi Jia Looi 05bfc0432d MDL-73845 enrol_database: Add lock to prevent race condition 2025-08-19 15:33:03 +07:00
Paul Holden e908a04251 MDL-86311 core: ensure component is normalised prior to comparison. 2025-08-19 09:17:07 +01:00
Paul Holden 0182b73e82 MDL-86311 question: fixes for PHPUnit related warnings/notices.
* Correct component generator name;
* Add missing required object properties;
* Assert expected debugging messages
2025-08-19 09:16:53 +01:00
Paul Holden 531eb2f489 MDL-86311 phpunit: update default configuration to fail on warnings.
This restores pre-PHPUnit 10 behaviour, and ensures that warnings
emitted by PHP during test execution will cause the test to fail.
2025-08-19 09:16:36 +01:00
Jun Pataleta 9d6eb92b0a MDL-72511 calendar: Better calendar navigation labelling
* Make the accessible labels of the previous and next month links more
informative by indicating the name of the previous/next months.
* Make titles on the previous and next month links reflect the actual
month and show titles only when the calendar is rendered within a block.
This is because the title attribute is only used for the sake for
sighted users who may need to know the meaning of the previous/next
month links, especially when the calendar is displayed in compact form
where the previous/next month name is not shown.
2025-08-19 11:25:55 +08:00
Jun Pataleta ba51ff55bb MDL-72511 calendar: Fix month_mini navigation
* Hide arrow icons from assistive technologies.
* Add a more sensible aria-label for the previous/next
month links.
2025-08-19 11:25:55 +08:00
Huong Nguyen 729ddade19 Merge branch 'MDL-86109-500' of https://github.com/stevandoMoodle/moodle into MOODLE_500_STABLE 2025-08-19 09:53:38 +07:00
Mihail Geshoski f369e3ca75 Merge branch 'MDL-83772-500' of https://github.com/srobotta/moodle into MOODLE_500_STABLE 2025-08-19 10:27:49 +08:00
Paul Holden 7d11f4350d MDL-86343 reportbuilder: fix course groupmode column type value.
Per a3c386af, this column does not produce numeric output. Also cleanup
redundancy in the default branch of corresponding switch statement.
2025-08-18 17:05:34 +01:00
Paul Holden ad8919f266 MDL-84739 gradingform_rubric: consistently style rubric table icons. 2025-08-18 08:57:54 +01:00
Paul Holden 04e12674fa MDL-83256 user: account for course context instances of teacher fields. 2025-08-18 08:57:01 +01:00
Paul Holden 1921c75407 MDL-85229 mod_url: observe description appearance setting on display.
Correctly determine whether said description is in fact "empty".
2025-08-18 08:55:45 +01:00
Paul Holden 7a3eb1805b MDL-84745 cohort: capability check prior to bulk deletion button. 2025-08-18 08:51:05 +01:00
Paul Holden 30060fec33 MDL-83066 blocks: restore deletion warning for "sticky" blocks.
It was lost when switching to modal delete configuration in 529c5c2e.
2025-08-18 08:49:30 +01:00
Daniel Ziegenberg 3319f52182 MDL-86294 core: Document missing dboptions in config-dist.php
For the full list of database config settings, the config-dist.php file
referred to https://docs.moodle.org/en/Database_settings, which in turn
pointed back to
https://github.com/moodle/moodle/blob/master/config-dist.php. We should
not play hide and seek with our configuration options, so let's document
them.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-08-17 17:05:35 +02:00
AMOS bot 9b1aacec11 Automatically generated installer lang files 2025-08-16 00:07:57 +00:00
Paul Holden 2ec1d258ce MDL-86293 communication: queue/execute membership task if appropriate.
Avoid doing so if the current instance does not support user features.
2025-08-15 14:04:49 +01:00
Philipp Memmel 8960fc331f MDL-86187 core_ddl: Add reserved keywords for MySQL 8.4 2025-08-15 11:17:43 +00:00
Paul Holden 368af2780a MDL-86015 mod_assign: preserve advanced grading modal dropdown state.
Don't autoclose it when clicking inside the dropdown element. Fixes
change of behaviour during the Bootstrap 5 upgrade.
2025-08-15 11:07:39 +01:00
Paul Holden 3ad4e6bb69 MDL-86015 output: support autoclose behaviour in dropdown dialog. 2025-08-15 11:07:39 +01:00
Paul Holden ad9bb66f9e MDL-85682 mod_assign: account for absence of workflow select filter. 2025-08-15 10:48:15 +01:00
David Woloszyn 7f38d50aee MDL-86315 registration: Unset emails in hub when dependant value not set 2025-08-15 12:29:26 +10:00
Huong Nguyen 60e348ff05 weekly release 5.0.2+ 2025-08-15 09:26:41 +07:00
Huong Nguyen 66d863f09a Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-08-15 09:26:28 +07:00
Stevani Andolo 7431612b20 MDL-86109 tiny_media: Fix selected subtitles and captions language
Ensures the selected subtitle or caption language is correctly retained
and dispalyed.
2025-08-15 09:49:52 +08:00
Paul Holden 406bc9a9dd MDL-72956 mod_feedback: remove session access for started activities. 2025-08-14 11:27:35 +01:00
Rajneel Totaram 46565b8a67 MDL-73417 mod_assign: Remove duplicate array key 2025-08-14 14:34:33 +12:00
AMOS bot bbbc68d16b Automatically generated installer lang files 2025-08-14 00:08:04 +00:00
Paul Holden e65ccd7ea3 MDL-86053 mod_assign: account for lack of global scales in settings. 2025-08-13 10:15:08 +01:00
AMOS bot 9b5b77cf2d Automatically generated installer lang files 2025-08-13 00:08:05 +00:00
Mark Johnson ed6e1c2db9 MDL-85551 questions: Creating a default category with a questions mod
When a new module that publishes questions is created, it does not have
a default question category created until it is viewed. This means that
other parts of the system that want to use the bank while its empty
(such as bulk moving questions) cannot see it.

This adds a step to the common edit_module_post_actions() function so
that any module supporting the FEATURE_PUBLISHES_QUESTIONS feature will
have its default category created with the module instance.

This can be overridden by setting skipdefaultcategory to true
in the $moduleinfo argument to edit_post_module_actions().
2025-08-12 14:04:04 +01:00
Paul Holden c93da59bb5 MDL-85312 profilefield_menu: remove locked field option formatting.
We shouldn't be formatting the option key when setting constant
value, because that isn't formatted - only the option value is.
2025-08-12 08:34:33 +01:00
Mihail Geshoski aa6358a8f6 Merge branch 'MDL-85652-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-12 13:55:21 +08:00
guillaumebarat baac1c57b9 MDL-85335 cli: Allow uninstall of sub-plugin when parent missing 2025-08-12 15:04:32 +10:00
James C ed3000a3dc MDL-84975 course: Handle tags in section and activity move dialogues 2025-08-12 13:23:29 +12:00
Mark Johnson 5c3eb2c535 MDL-85018 questionlib: Update broken question test
A multianswer question with a missing database record no longer throws
an exception, so doesn't work for the "broken question" test, so switch
to ddwtos.
2025-08-11 10:09:11 +01:00
Mark Johnson f94db1c8e8 MDL-85018 qtype_multianswer: Prevent errors on backup/restore
If a multianswer question has its question_multianswer record missing
for some reason, attempting to backup and restore a bank containing the
question will result a dml_missing_record exception.

The qtype_multianswer::get_question_options() method already copes with
the sequence from this record being empty, so we can just remove the
MUST_EXIST check and let it fall back to that.
2025-08-11 10:09:11 +01:00
Paul Holden 0c8a596ba3 MDL-85541 gradereport_history: show user country value correctly. 2025-08-11 09:17:38 +01:00
Stephan Robotta 063beea7d2 MDL-83772 mod_data: Fixed autosave bug in text areas with same name 2025-08-11 08:52:11 +02:00
Jose Pico e419f36236 MDL-86225 plagiarism: Update data type from object to array 2025-08-11 16:06:26 +10:00
Mark Johnson 223da4833a MDL-86010 tool_lp: Test fetching evidence works after cm deletion 2025-08-08 16:03:11 +01:00
Michael Kotlyar 57b29b7a55 MDL-86010 competency: Delete competency evidence on cm delete
Evidence recorded against course module competencies was not deleted
with the course module. This led to errors when attempting to view the
competency record on a learning plan.

This change will delete associated evidence records with the cm, and
will clean up any existing orphaned records on upgrade.

Co-Authored-By: Mark Johnson <mark.johnson@catalyst-eu.net>
2025-08-08 16:03:11 +01:00
Andrew Nicols 134156a18a MDL-86231 behat: Support array callable syntax in execute method 2025-08-08 11:42:30 +08:00
Mihail Geshoski e27e1ed7bc Moodle release 5.0.2 2025-08-08 10:48:06 +08:00
Mihail Geshoski 7f9b287f42 NOBUG: Add upgrade notes 2025-08-08 10:48:06 +08:00
Sara Arjona 1295393145 weekly release 5.0.1+ 2025-08-07 16:45:05 +02:00
Sara Arjona 5bdb6936c8 NOBUG: Add upgrade notes 2025-08-07 16:45:04 +02:00
Sara Arjona 2b97cc0de3 NOBUG: Fixed file access permissions 2025-08-07 16:44:58 +02:00
Sara Arjona 9b5963b683 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-08-07 16:44:54 +02:00
Huong Nguyen 203f6bb20f Merge branch 'MDL-86004-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-08-07 14:09:21 +07:00
David Woloszyn aed28401be MDL-86004 core: Modify upgrade step for Microsoft endpoints
The upgrade step for Microsoft OAuth2 issuers has been modified
to address an oversight in MDL-84432. The upgrade now only updates
service base urls for multi-tenant issuers.

Co-authored-by: Raju Tummoji <raju.tummoji@moodle.com>
2025-08-07 16:54:50 +10:00
Ilya Tregubov 8ba7c1f0f3 Merge branch 'MDL-85260-500' of https://github.com/tasiobg/moodle into MOODLE_500_STABLE 2025-08-07 09:11:27 +03:00
Huong Nguyen dae9a97e9a Merge branch 'MDL-85718-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-08-07 12:21:39 +07:00
Huong Nguyen 40a5b8c018 Merge branch 'MDL-86205-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-08-07 12:14:57 +07:00
Huong Nguyen 5127c9c87c Merge branch 'MDL-85794-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-08-07 11:37:25 +07:00
Huong Nguyen 8597284d8a Merge branch 'MDL-85795-500-2' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-08-07 11:26:17 +07:00
Huong Nguyen efab967320 Merge branch 'MDL-84217-500' of https://github.com/stevandoMoodle/moodle into MOODLE_500_STABLE 2025-08-07 10:56:28 +07:00
Ilya Tregubov 14fa538ea3 MDL-63395 user: Fix profile visibility check.
It needs to be done in user_get_user_details as well.
2025-08-07 10:29:14 +07:00
Jun Pataleta a8c8fc5b31 MDL-86205 message: Close drawer when activating elements outside of it 2025-08-07 11:23:19 +08:00
Jun Pataleta 4d39f092f7 Merge branch 'MDL-85674-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-08-07 10:44:11 +08:00
Jun Pataleta b8cd47df05 Merge branch 'MDL-85701-500' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_500_STABLE 2025-08-07 10:39:01 +08:00
Jun Pataleta caf2a6f129 Merge branch 'MDL-78233-500' of https://github.com/Tasiobg/moodle into MOODLE_500_STABLE 2025-08-07 10:35:11 +08:00
Jun Pataleta 401720a4fb Merge branch 'MDL-85802-500' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-08-07 10:33:41 +08:00
Mihail Geshoski 3f7b1ab5b5 Merge branch 'MDL-79540_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-08-07 10:19:42 +08:00
Huong Nguyen 7884309434 Merge branch 'MDL-84010-m500' of https://github.com/sammarshallou/moodle into MOODLE_500_STABLE 2025-08-07 09:17:40 +07:00
AMOS bot 36557f6243 Automatically generated installer lang files 2025-08-07 00:07:59 +00:00
ferran 8ac53d5231 Merge branch 'MDL-86176-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-08-06 16:21:58 +02:00
Sara Arjona 7ca14924c4 MDL-86176 badges: Adjust badges due to Canvas Credentials changes
This change addresses necessary adjustments to how OBV2.0 badges are
sent to backpacks, specifically to ensure compatibility and correct
functionality following recent updates to Canvas Credentials' conditions.

It ensures our badge integration continues to operate smoothly despite
these external changes.
2025-08-06 15:04:51 +02:00
Jun Pataleta 7f4770736b MDL-85795 behat: Update button text used in search steps 2025-08-06 19:56:31 +08:00
Simey Lameze 6f2f617a17 MDL-85674 behat: replace multiple steps by a single table step 2025-08-06 18:20:19 +08:00
andelacruz 879fbe0083 MDL-85674 mod_grade: Behat test for multiple questions manual grading 2025-08-06 17:39:06 +08:00
Jun Pataleta 3629975896 Merge branch 'MDL-86095-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-08-06 15:41:15 +08:00
yusufwib01 6ea99ba11e MDL-85718 tiny_link: Improve image link behavior in TinyMCE 2025-08-06 14:31:09 +07:00
Rajneel Totaram 9d2d5ea984 MDL-86095 mod_book: Let screenreader know print book opens in new window 2025-08-06 18:16:00 +12:00
dustinhuynh 29d322526f MDL-86058 core_task: enable disable tasks with a pending upgrade 2025-08-06 15:47:41 +10:00
Sara Arjona d49a5649e2 Merge branch 'MDL-86098-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-08-06 06:53:49 +02:00
Huong Nguyen cbdeddcccf Merge branch 'MDL-85132_500_STABLE' of https://github.com/vladaskidanovas/moodle into MOODLE_500_STABLE 2025-08-06 10:54:12 +07:00
Huong Nguyen 575c22badb MDL-84464 report_log: Fix EOF 2025-08-06 10:38:04 +07:00
hieuvu f13043c44b MDL-85701 mod_quiz: Move delete activities before questions.
Make sure the question is not used when activities has been deleted.
2025-08-06 10:25:17 +07:00
Laurent David 84f558d47f MDL-84464 report_loglive: Hide report for teacher without groups 2025-08-06 10:15:25 +07:00
Laurent David 14c293058c MDL-84464 report_log: Hide report for teachers without groups
* Teachers without groups in SEPARATEGROUP mode should not see the report log page nor access it
2025-08-06 10:15:25 +07:00
Laurent David 47323247a4 MDL-84463 mod_feedback: Fix typo in behat test description 2025-08-06 01:34:17 +00:00
Laurent David 893e1c1005 MDL-84463 mod_feedback: Fix users in no group and email
* Non editing teachers in no group should not receive feedback emails
from students in no group
2025-08-06 01:34:17 +00:00
Laurent David 390333268c MDL-84463 mod_feedback: Fix show entries and nonrespondents
* Non editing teachers not in a groups should not see entries
from other users
2025-08-06 01:34:17 +00:00
raortegar 8fb680a4a8 MDL-85704 mod_bigbluebuttonbn: Update sesskey handling for compatibility 2025-08-06 01:34:17 +00:00
Huong Nguyen c7399d8aaf Merge branch 'MDL-85510-500' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_500_STABLE 2025-08-06 08:30:11 +07:00
Paul Holden 4c68ce0888 MDL-86230 admin: fix site registration link to Moodle app.
Broken by 5d316201.
2025-08-06 00:35:53 +01:00
Khoa Nguyen Dang e417341fe1 MDL-85510 Questions: clearfix from MDL-84708 affects spacing
Co-authored-by: Mikel Martín Corrales <mikel@moodle.com>
2025-08-05 15:54:20 +07:00
Stevani Andolo 87d95b7a12 MDL-84217 editor_tiny: Added 'img-fluid' class to dropped image files 2025-08-05 15:07:21 +08:00
sam marshall c7760d4ae5 MDL-84010 core_files: sync_external_file can cause infinite recursion 2025-08-05 07:48:36 +01:00
Mihail Geshoski 1f497d91ac Merge branch 'MDL-86001-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-05 11:43:18 +08:00
Mihail Geshoski 42a3afdd97 Merge branch 'MDL-85565_500' of https://github.com/PhilippImhof/moodle into MOODLE_500_STABLE 2025-08-05 11:36:18 +08:00
Mihail Geshoski 93d8ca693d Merge branch 'MDL-85492_500' of https://github.com/krisbax/moodle into MOODLE_500_STABLE 2025-08-05 11:21:19 +08:00
Huong Nguyen f8925dccfd Merge branch 'MDL-85338-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-08-05 09:10:58 +07:00
Huong Nguyen 380f5a89fc Merge branch 'MDL-85231-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-08-05 08:50:26 +07:00
Huong Nguyen 066c42f396 Merge branch 'MDL-86080-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-08-05 08:40:23 +07:00
Huong Nguyen d5e8fa372b Merge branch 'MDL-86043-500' of https://github.com/tasiobg/moodle into MOODLE_500_STABLE 2025-08-05 08:32:06 +07:00
Jun Pataleta 81af2286bf MDL-85795 message: Enclose the search widget in a group 2025-08-04 19:15:01 +08:00
Jun Pataleta 77065687fa MDL-85795 search: Enclose the search widget in a group 2025-08-04 19:15:00 +08:00
Simey Lameze cd2c6b7def MDL-86186 behat: enlarge window size before asserting 2025-08-04 11:27:21 +08:00
Shamim Rezaie f212c7f477 Merge branch 'MDL-85787-500-2' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-08-04 09:53:26 +10:00
Paul Holden 61cd9a2449 MDL-83462 mod_page: observe page description display in popup. 2025-08-01 17:04:17 +01:00
Jun Pataleta 565fe4bc07 MDL-85794 message: Set notification preferences controls within a group 2025-08-01 18:50:22 +08:00
Mihail Geshoski de28b775ad MDL-85802 mod_quiz: Fix double-escaping in notification content
Avoids double-escaping when filtering notification content. Adds
a unit test to validate the content filtering logic.
2025-08-01 18:50:06 +08:00
Iñigo Zendegi 0c7746bdea MDL-85802 mod_quiz: format course/quiz notification content. 2025-08-01 18:50:05 +08:00
Mikel Martín 5be547bd21 MDL-86080 theme_boost: Fix YUI tables styles
MDL-85659 generated a regression on YUI tables that are displayed
without borders. This patch improves the fix including YUI tables
as an exception too.
2025-08-01 08:49:47 +02:00
Jun Pataleta ad93f921e5 Merge branch 'MDL-85945-500-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_500_STABLE 2025-08-01 14:34:46 +08:00
Jun Pataleta 4998facd49 MDL-85231 message: Style the notification buttons consistently 2025-08-01 13:08:34 +08:00
Jun Pataleta 57e18d38d5 MDL-85231 message_popup: Add a close button on the notification popover
This follows the recommendation on the ARIA Authoring Practices Guide
(APG) for modal dialogues:
> It is strongly recommended that the tab sequence of all dialogs
> include a visible element with role button that closes the dialog,
such as a close icon or cancel button.

https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/
2025-08-01 13:08:34 +08:00
Laurent David 6470c5444d MDL-85231 message_popup: Add focustrap in message popup 2025-08-01 13:08:34 +08:00
Huong Nguyen 2b8ce68fd3 Merge branch 'MDL-86137-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-08-01 09:15:06 +07:00
David Mudrák adf34486b2 MDL-85945 lang: Use fixed strings in the tests, too 2025-07-31 17:00:29 +02:00
Helen Foster 0327b79d68 MDL-85945 lang: Import fixed English strings (en_fix) 2025-07-31 17:00:29 +02:00
Sara Arjona 34968cacf5 weekly release 5.0.1+ 2025-07-31 16:08:31 +02:00
Sara Arjona e17ca51752 NOBUG: Add upgrade notes 2025-07-31 16:08:30 +02:00
Sara Arjona 4885e99858 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-07-31 16:07:21 +02:00
Michael Hawkins 02353916b0 Merge branch 'MDL-85362-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-07-31 14:35:52 +08:00
Huong Nguyen 33fb09b447 Merge branch 'MDL-85967-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-07-31 10:51:38 +07:00
Huong Nguyen bf0f98505b Merge branch 'MDL-86062-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-07-31 10:20:57 +07:00
Huong Nguyen 130d1ff7b4 Merge branch 'MDL-84485-Select-webservice-in-wstoken-behat-breadcrumb-500' of https://github.com/farhan6318/moodle into MOODLE_500_STABLE 2025-07-31 10:17:47 +07:00
David Woloszyn ef99ad55eb MDL-85967 aiprovider_openai: Modify action config on upgrade 2025-07-31 13:12:53 +10:00
David Woloszyn 1cc02578c2 MDL-85967 aiprovider_openai: O1 model settings updated 2025-07-31 13:12:53 +10:00
David Woloszyn 9928d23bc0 MDL-85967 aiprovider_openai: Cast types to stored model settings 2025-07-31 13:12:53 +10:00
David Woloszyn 830c66e7ad MDL-85967 aiprovider_openai: Update param max_completion_tokens
AMOS BEGIN
  MOV [settings_max_tokens_help,aiprovider_openai],[settings_max_completion_tokens_help,aiprovider_openai]
AMOS END
2025-07-31 13:12:31 +10:00
Huong Nguyen 3b786b87c3 Merge branch 'MDL-85897-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-07-31 08:58:27 +07:00
AMOS bot c57f19419f Automatically generated installer lang files 2025-07-31 00:08:06 +00:00
Shamim Rezaie 92adb9005c Merge branch 'MDL-85295-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-07-31 02:43:33 +10:00
Shamim Rezaie c539d4bfb8 Merge branch 'MDL-72133-filter-deleted-logs-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-07-31 02:26:53 +10:00
Mihail Geshoski 72fea763a5 Merge branch 'MDL-86113-500' of https://github.com/snake/moodle into MOODLE_500_STABLE 2025-07-30 23:29:44 +08:00
Mihail Geshoski c50df31426 Merge branch 'MDL-85470-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-07-30 23:11:28 +08:00
Paul Holden 981870f7b1 MDL-86162 h5p: fix content type/library page table layout. 2025-07-30 15:40:43 +01:00
Tasio 1a6d4949cf MDL-86043 core: keep SQL consistent with other Moodle versions.
This change resolves issues with Oracle in Moodle 4.5. It has been ported to newer Moodle versions as it improves
the existing SQL and helps maintain consistency across different Moodle versions.
2025-07-30 16:18:41 +02:00
Paul Holden 85fe9d9239 MDL-85338 message: make messaging drawer responsive to sticky footer.
Co-authored-by: David Woloszyn <david.woloszyn@moodle.com>
2025-07-30 13:58:45 +01:00
Tasio b9ba50fbb6 MDL-86043 core: test for the task sending new users an email 2025-07-30 14:32:57 +02:00
Paul Holden 59e21e6b3d MDL-85766 block_glossary_random: reset keys of retrieved entries. 2025-07-30 13:05:04 +01:00
Jun Pataleta 62b1b3af74 Merge branch 'MDL-85995-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-07-30 17:10:14 +08:00
Mikel Martín 4c2dc280ef MDL-86137 core_role: Fix role tables styles 2025-07-30 10:42:37 +02:00
Mikel Martín 76251e49f4 MDL-86098 badges: Fix manage backpacks table styles 2025-07-30 09:20:29 +02:00
Andrew Nicols 7e7023923c MDL-86062 mod_choice: Stop calling get_string from lib.php 2025-07-30 13:58:40 +08:00
Andrew Nicols bf18273a08 MDL-85897 core: Move all deprecations to emit_deprecation 2025-07-30 13:53:27 +08:00
Andrew Nicols 18586a863d MDL-85897 core: Add emit_deprecation() method
This changeset adds a new `\core\deprecation::emit_deprecation` method
with the same signature as the `emit_deprecation_if_found()` method.

It is intended to be used in places where something is guaranteed to
have been deprecated, and will throw appropriate debugging if the
deprecated attribute is not found.

The `emit_deprecation_if_found()` method should still be used where the
item being checked is not known to be deprecated or not, for example in
calling code.
2025-07-30 13:53:21 +08:00
Huong Nguyen adb245071a Merge branch 'MDL-85590_fix_modal_backdrop_attachment_point_500' of https://github.com/MariaMozgunova/moodle into MOODLE_500_STABLE 2025-07-30 08:37:41 +07:00
Farhan Karmali d2fcaa515b MDL-84485 webservice: Add Behat step for mobile web service selection
This commit introduces a mandatory service selection step in our Behat tests
to ensure consistent behavior in environments with multiple third-party services.
2025-07-29 15:58:50 +05:30
Huong Nguyen 5a2127519d Merge branch 'MDL-85855-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-29 16:49:46 +07:00
Jun Pataleta c11f3c4f07 MDL-85470 badges: Add a11y Behat test for the manage badges page 2025-07-29 15:15:18 +08:00
Jun Pataleta 7ab43c028c MDL-85470 badges: Use badge:namewithimagelink column in badges table 2025-07-29 15:15:17 +08:00
Jun Pataleta 13c95e480e MDL-85470 reportbuilder: New column containing badge image, name, link 2025-07-29 15:15:17 +08:00
Jun Pataleta 6d6b7dc8b2 MDL-85787 course: Limit course index drag and drop to certain pages only
Only allow the drag and drop functionality in the course index on pages
that provide alternatives to move course items such as the course
homepage and the course section view pages.

This is to meet the WCAG 2.2 Level AA Success Criterion 2.5.7 for
dragging movements.
See: https://www.w3.org/WAI/WCAG22/Understanding/dragging-movements
2025-07-29 11:46:14 +08:00
Jayce Birrell 096be6d576 MDL-85698 core: combo box informs screen reader users 2025-07-29 10:50:16 +09:30
AMOS bot 4445d5f475 Automatically generated installer lang files 2025-07-28 13:17:04 +00:00
Maria Mozgunova e8f71adf00 MDL-85590 core: Fix modal backdrop attachment point for full screen 2025-07-28 10:46:58 +01:00
Benjamin Walker c9fe936e29 MDL-72133 report_log: Add fallback context display 2025-07-28 09:06:42 +10:00
Benjamin Walker ff8f5d06a5 MDL-72133 report_loglive: Display logs filtered by deleted course ids 2025-07-28 09:06:42 +10:00
Benjamin Walker 283f0855c0 MDL-72133 report_log: Display logs filtered by deleted course ids 2025-07-28 09:06:42 +10:00
Philipp Imhof 8c22b5537a MDL-85565 phpunit: check for <select> before <option>
Make sure that assert_select_options() will fail when the output does
not contain a <select> and therefore does not have the given options.
2025-07-25 13:13:09 +02:00
Jake Dallimore 3a7bdef5b6 MDL-86113 mod_lti: skip slow network calls during tests
This check exists to determine whether a given tool URL is a cartridge,
specifically when the URL does not end in .xml. It hits the URL to
determine this. In tests, we have many mock tool URLs, which won't
resolve, and running this code causes large hangs and random failures.
Any tests covering cartridge support still work fine, provided they
continue to use URLs ending in .xml; this change only skips the check
during tests for other non-xml URLs.
2025-07-25 16:39:26 +08:00
Michael Hawkins 5780da5481 weekly release 5.0.1+ 2025-07-25 12:14:11 +08:00
Michael Hawkins 3bcb3343da Merge branch 'MDL-83111-500' of https://github.com/sh-csg/moodle into MOODLE_500_STABLE 2025-07-24 12:01:01 +08:00
Huong Nguyen 2ccf85b0eb Merge branch 'MDL-86049-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-07-24 09:47:47 +07:00
Huong Nguyen 498c972374 Merge branch 'MDL-85504-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-07-24 09:43:59 +07:00
Huong Nguyen 8fecec1471 Merge branch 'MDL-85759-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-24 09:30:36 +07:00
Rajneel Totaram 2d93e34ef1 MDL-85995 mod_book: Make previous/next buttons accessible 2025-07-24 10:08:18 +12:00
Jun Pataleta e85f5beef6 MDL-85504 mod_feedback: Enhance the question edit form via JS
The drag handle and actions menu should not be within the accessible
labels of the question items. In order to enhance the question edit
form with these, they need to be rendered via JS outside of container
of the questions' accessible name.
2025-07-23 16:15:36 +08:00
Amaia Anabitarte c82ba0b35e Merge branch 'MDL-85989-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-07-23 10:13:33 +02:00
Jun Pataleta 2d0b20c180 MDL-85504 form: Legend's label template data should not be escaped
The label context data in the fieldset's legend tag should not be
escaped and allow raw HTML given that legend tags can contain
phrasing content and headings.

See developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/legend.
2025-07-23 16:09:20 +08:00
Huong Nguyen ced7437759 Merge branch 'MDL-60799_500' of https://github.com/jonof/moodle into MOODLE_500_STABLE 2025-07-23 09:03:36 +07:00
Huong Nguyen aa70d4652e Merge branch 'MDL-83996-readonly-false-positive-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-07-23 09:00:07 +07:00
Huong Nguyen cbe6e407ab Merge branch 'MDL-84787-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-23 08:51:31 +07:00
Huong Nguyen 8f1b1275f2 Merge branch 'MDL-85573-tool-brickfield-uninstall-500' of https://github.com/szymonk1101/moodle into MOODLE_500_STABLE 2025-07-23 08:33:44 +07:00
Shamim Rezaie bccd5d8a0b Merge branch 'MDL-85307-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-07-23 09:22:14 +10:00
Rohit Panchal c823bcc990 MDL-83991 tag: Optimized tag sql query 2025-07-23 01:04:42 +05:30
Mihail Geshoski 7066bc6e9a Merge branch 'MDL-86073-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-22 23:53:43 +08:00
Mihail Geshoski 9f9ac79d0a Merge branch 'MDL-85997-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-22 23:36:57 +08:00
Mihail Geshoski 1b4d6d8f26 Merge branch 'MDL-85038-M500_dml_missing_record_exception-when-running-mod_assign-task-send_assignment_due_soon_notification_to_user' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-07-22 23:29:17 +08:00
Mihail Geshoski 3394936d37 Merge branch 'MDL-83558-500' of https://github.com/andrewgos/moodle into MOODLE_500_STABLE 2025-07-22 13:54:24 +08:00
Huong Nguyen e8add02056 MDL-85362 core: Define environment requirements for Moodle 5.1 2025-07-22 10:53:25 +07:00
Mi Jia Looi f3fd9b1836 MDL-86017 mod_folder: Cast customdata to object in folder_cm_info_view() 2025-07-22 13:42:45 +10:00
Rajneel Totaram 8c0157a7e0 MDL-85295 qtype_ordering: render feedback properly
'answertext' is already passed through format_text(), so no need to escape it in the template.
2025-07-22 11:40:26 +12:00
Andrew Nicols e642fad70f MDL-86049 core: Do not use the component cache before purge
When trying to resolve a corrupt cache where it is not possible to
complete the Moodle setup/bootstrap, it is necessary to ignore the
current cache to load the cache purging infrastructure.
2025-07-21 12:25:26 +08:00
Benjamin Walker 859fb5a319 MDL-83996 sessions: Fix false positive read only sessions errors 2025-07-21 10:26:29 +10:00
Paul Holden 5062363f32 MDL-86073 reportbuilder: fix external assertions of button property.
The tests from c439e2d3 tried to assert they were empty, when in fact
they didn't exist at all. Caused PHPUnit warnings.
2025-07-18 18:54:40 +01:00
Mihail Geshoski d52b2568b0 weekly release 5.0.1+ 2025-07-18 14:52:33 +08:00
Mihail Geshoski 9a9adc8069 NOBUG: Add upgrade notes 2025-07-18 14:52:33 +08:00
Mihail Geshoski 7d66c0c37b Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-07-18 14:52:19 +08:00
Paul Holden 3d24c81e18 MDL-85944 block_myoverview: fix previously badly nested SCSS. 2025-07-17 15:24:45 +07:00
Mihail Geshoski b1f771062a Merge branch 'MDL-85055-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-07-17 12:15:30 +08:00
Huong Nguyen 0668e2186a Merge branch 'MDL-85050-500' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_500_STABLE 2025-07-17 10:24:29 +07:00
Huong Nguyen a2495a7e7d Merge branch 'MDL-85944-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-17 08:52:55 +07:00
Huong Nguyen 06c44dc7d2 Merge branch 'MDL-81384-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-17 08:43:58 +07:00
Shamim Rezaie ae14c21753 Merge branch 'MDL-73003-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-07-17 07:29:59 +10:00
Paul Holden 1ceae923f3 MDL-85055 task: correct use of DI provided frozen Clock API.
Fixes some of the usage introduced in tests as part of a35335a9.
2025-07-16 19:49:14 +01:00
Mihail Geshoski 241094d371 Merge branch 'MDL-77237-500' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-07-16 23:53:57 +08:00
Mihail Geshoski eac831f04f Merge branch 'MDL-84466_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-16 13:16:21 +08:00
Huong Nguyen f280d19a55 Merge branch 'MDL-85609-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-16 09:52:43 +07:00
Andrew Gosali 729b1753b5 MDL-83558 mod_forum: fix incorrect message on edge case scenario
(when student tries to see all participants on a forum with visible groups mode)
2025-07-15 22:45:55 +07:00
Mark Johnson 7b45a898b0 MDL-84466 question/qbank: Update pending transfer notification
This updates the logic and text of the notification that is shown while
the question transfer task is still pending, to include instances of the
new transfer_questions task. It also ensures the notification is shown
if a user tries to access the question editing screen from outside the
question bank.
2025-07-15 12:03:25 +01:00
Mark Johnson 60f58afc5f MDL-84466 qbank: Transfer question files and tags in separate tasks
On a large site, the task to transfer question categories to the new
mod_qbanks contexts could take a very long time, as of any transferred
categories contain questions using files, each file has to be updated
individually.

This change splits up the transfer into 2 stages. The first stage
(transfer_question_categories) updates the context IDs on each question
category and moves them to their new top category, then spawns an
instance of transfer_questions for each category that was moved.
transfer_questions then handles moving the files and tags for questions
in a single category at a time. This allows the transfer process to be
parallelised by using multi cron or ad-hoc task runners, so should speed
things up on larger sites.
2025-07-15 12:03:25 +01:00
Daniel Ziegenberg d0c9e9c208 MDL-85038 assignment: fix exception on sending assignment notification
When the assignment gets deleted between the creation of the ad-hoc task
mod_assign\task\send_assignment_due_soon_notification_to_user or
mod_assign\task\send_assignment_overdue_notification_to_user and its
execution, the ad-hoc task fails with a dml_missing_record_exception and
the task gets stuck.

In this case we do not want the task to fail and just return with an
appropriate mtrace.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-07-15 10:46:14 +02:00
meirzamoodle 86021f2698 MDL-77237 core: Suppress debugging during capabilities cleanup
To prevent the debugging messages from appearing during the upgrade,
I set a flag to hide them.

For the test file, I adjusted the parameters in
the unassign_capability() function, which seemed to be using
the parameter intended for assign_capability().
2025-07-15 14:33:26 +07:00
Paul Holden 18eb86b680 MDL-85944 block_myoverview: specific styling for "My courses" page. 2025-07-15 08:02:14 +01:00
Mihail Geshoski ceb7919450 Merge branch 'MDL-85257_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-15 11:22:36 +08:00
Mihail Geshoski b584feb11f Merge branch 'MDL-85246-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-07-15 11:11:54 +08:00
Huong Nguyen 59bfbfac49 Merge branch 'MDL-72582-MOODLE_500_STABLE' of https://github.com/tsmilan/moodle into MOODLE_500_STABLE 2025-07-15 10:07:50 +07:00
Huong Nguyen 1189b22417 Merge branch 'MDL-86016-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-07-15 09:56:33 +07:00
Huong Nguyen 90cfc6aaee Merge branch 'MDL-85040-500-new' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-07-15 09:42:22 +07:00
Mihail Geshoski ca2bbff2b3 Merge branch 'MDL-85754_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-15 10:31:41 +08:00
Mihail Geshoski 18a208be56 Merge branch 'MDL-84385-requireonce-500' of https://github.com/leonstr/moodle into MOODLE_500_STABLE 2025-07-15 09:41:45 +08:00
Andrew Nicols 946e3934a3 MDL-86016 core: Remove xmldb test in favour of unit test 2025-07-15 09:32:55 +08:00
Andrew Nicols 35e27f754e MDL-86016 tests: Make install.xml test less restrictive 2025-07-15 09:32:55 +08:00
Paul Holden ac432b5c14 MDL-81384 theme_boost: centre help icon margin/padding. 2025-07-14 21:32:26 +01:00
meirzamoodle 2a107a1306 MDL-85040 forms: Make required form icons decorative
The required icon in mforms is not necessary. The div containing it
already has a title attribute that enables mouse users to hover on the
icon and see its meaning.

Screen reader users will know whether a field is required or not via
the `aria-required` attribute.

Labelling the required icon via `aria-label` does not pass the
a11y audit.

Given these, it only makes sense to make the required icon decorative
for mforms.

Co-authored-by: Jun Pataleta <jun@moodle.com>
2025-07-14 14:23:45 +07:00
Huong Nguyen 3a116dddfa Merge branch 'MDL-85817-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-07-14 13:52:30 +07:00
AMOS bot 5582d18482 Automatically generated installer lang files 2025-07-12 00:07:58 +00:00
Paul Holden b64e870f28 MDL-86001 qbank_columnsortorder: populate preview data question text. 2025-07-11 15:23:41 +01:00
Paul Holden 1829c5e8b2 MDL-85997 output: require CLI library from corresponding renderer. 2025-07-11 11:59:33 +01:00
Mark Johnson 57553a1b19 MDL-79540 qbank_managecategories: Don't allow own child as parent
When we build the options for a question category selector, the
"nochildrenof" option isn't correctly compared to the category ID. This
means we can select a category's own children as its new parent.
2025-07-11 10:08:33 +01:00
Sara Arjona 16303a2dd2 MDL-85989 output: Fix choicelist when selected 0 is not first
Previously, when the selected value in a choicelist was 0 but not in
the first position, the behavior was incorrect.
This commit fixes that issue, ensuring the choicelist behaves as expected
regardless of the position of the 0 value.
2025-07-11 09:15:06 +02:00
Michael Hawkins 61af040cd5 weekly release 5.0.1+ 2025-07-11 12:48:56 +08:00
Michael Hawkins 96b1cd1700 NOBUG: Add upgrade notes 2025-07-11 12:48:56 +08:00
Leon Stringer 9ff8b12333 MDL-84385 mod_assign: Remove unneeded require_once 2025-07-10 09:27:48 +01:00
Mark Johnson 4eace2bee8 MDL-85257 mod_quiz: Dont show edit links when you dont have permission
The quiz editing page includes an edit link for each question, and a
badge for questions in a shared bank that links to that bank.

It is possible that the user viewing the quiz does not have access to
edit the question or view the question bank, which means these links are
broken.

This change only adds the links if the user has permission for the pages
they link to.
2025-07-10 09:16:44 +01:00
Huong Nguyen f7155bf7e9 Merge branch 'MDL-85863-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-07-10 10:46:39 +07:00
Mihail Geshoski 607a2f9c78 Merge branch 'MDL-85689-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-07-10 11:38:57 +08:00
Mark Johnson 3bc23527e7 MDL-85721 qtype_multianswer: Update find_duplicated_subquestions for Oracle compatibility 2025-07-10 10:28:48 +07:00
Mihail Geshoski c71ca318f5 MDL-84695 mod_qbank: Fix illegal whitespace 2025-07-10 11:08:27 +08:00
Mark Johnson dd87321d18 MDL-84695 mod_qbank: fix unit test for MS SQL server 2025-07-10 10:29:25 +08:00
Huong Nguyen e02277fa76 Merge branch 'MDL-85262-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-10 08:33:29 +07:00
Huong Nguyen 3a96c45fff Merge branch 'MDL-84901-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-10 08:25:38 +07:00
Mihail Geshoski e27a882ce7 Merge branch 'MDL-85939-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-09 23:25:46 +08:00
Mihail Geshoski 4d549717e0 Merge branch 'MDL-84255-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-07-09 23:18:21 +08:00
Rajneel Totaram b76b1a074a MDL-85246 mod_quiz: Fix quiz grade feedback
Using $CFG->recovergradesdefault and/or $gradeitem->refresh_grades()
are problematic when viewing a quiz. When reenrolling a user with
previous attempts, a teacher can choose not to recover the user's grades,
even when recovergradesdefault=true. This must be respected when
the user views the quiz. For site with recovergradesdefault=false,
the users always see a grade of 0, which is wrong.

This change shows the correct grade score and feedback to users and
avoids unintentionally recovering the grades.
2025-07-09 20:33:00 +12:00
Mihail Geshoski 577411727e MDL-85721 qtype_multianswer: Fix version bump 2025-07-09 11:38:03 +08:00
andelacruz 0b66b8db21 MDL-85689 mod_quiz: Behat for adding and deleting page from quiz 2025-07-09 10:20:45 +08:00
Mihail Geshoski 0d1f74f1e3 Merge branch 'MDL-85721_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-09 10:20:35 +08:00
Huong Nguyen 9f45c875e6 Merge branch 'MDL-85697-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-07-09 09:10:46 +07:00
Huong Nguyen b6d55490c3 Merge branch 'MDL-85779-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-09 09:06:10 +07:00
Paul Holden bf2f2174e4 MDL-85759 qbank_history: define core t/log fontawesome icon mapping.
Its lack of existence caused question action menu misalignment.
2025-07-08 18:05:48 +01:00
Paul Holden 265f24bd4f MDL-85939 qbank_columnsortorder: improve preview page table alignment. 2025-07-08 17:58:34 +01:00
Kristiina.Bax 9340119538 MDL-85492 report_questioninstances: sort qtypes in alphabetical order 2025-07-08 17:18:20 +01:00
Amaia Anabitarte 71cd06c57c Merge branch 'MDL-85659-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-07-08 17:36:20 +02:00
Mihail Geshoski 6e4e00b0fe Merge branch 'MDL-85069_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-08 22:28:36 +08:00
Mihail Geshoski 9416ffd303 Merge branch 'MDL-84695-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-07-08 22:21:25 +08:00
Mihail Geshoski c3c2b58a7f Merge branch 'MDL-85881_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-08 22:14:31 +08:00
Paul Holden f096b8a658 MDL-84901 auth: specific session start error language string. 2025-07-08 12:33:05 +01:00
Huong Nguyen becb2dfd80 Merge branch 'MDL-84976-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-07-08 18:13:38 +07:00
Huong Nguyen f3d15ba5fd Merge branch 'MDL-85037-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-08 18:08:52 +07:00
Mark Johnson d0a3348bf0 MDL-85754 quiz: Test for permission checks in "Add from question bank" 2025-07-08 12:01:44 +01:00
Mark Johnson 563280c99a MDL-85754 question: Don't show banks where user has no permission
The Switch Banks UI was listing all question banks on the course where
the use had the managecategory permission, plus the other banks they had
used recently.

This conflicted with the check when it tried to load a selected bank,
which checked the useall/usemine permissions. This could lead to errors
if this permission had been removed.

This applies consistent checks to both lists with the useall/usermine
permissions instead.
2025-07-08 12:01:43 +01:00
Mark Johnson 84d7c6ce6d MDL-85754 question: Only use current context in question_edit_contexts
Due to the changes in question sharing, it no longer makes sense to look
at parent contexts when establishing permissions in the question bank.

Questions now belong to a single activity module, and we should be able
to inherit and override permisions at that level like we do with any
other.

In the longer term, we probably want to replace question_edit_contexts
with something simpler, but for the time being this should apply the
correct permission checks where it's used without requiring a big
refactor of existing code.
2025-07-08 12:01:42 +01:00
Huong Nguyen a875d60beb Merge branch 'MDL-85947-M500_bump-GHA-ubuntu-24-04' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-07-08 17:35:07 +07:00
Mihail Geshoski 78cb9483b6 Merge branch 'MDL-41924_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-08 17:06:32 +08:00
andelacruz 4e09d3dd33 MDL-85697 mod_lesson: Behat for lesson group and user overrides 2025-07-08 16:41:01 +08:00
andelacruz 69ba3e7149 MDL-85697 mod_assign: Behat for assignment group and user overrides 2025-07-08 16:17:46 +08:00
andelacruz 09873ae9ce MDL-85697 mod_quiz: Behat for quiz group and user overrides 2025-07-08 16:17:46 +08:00
djarrancotleanu e00381381a MDL-85366 core: Add proper PHPMailer handling of .ics files 2025-07-08 17:07:07 +10:00
Luca Bösch ca806aaeaf MDL-84255 quiz: Show quiz title in heading in accessrule_seb layout. 2025-07-08 07:52:21 +02:00
Paul Holden 7074b2d85f MDL-85652 block_site_main_menu: correct page course comparison.
We can only use the "Add activity" control when on site page.
2025-07-07 17:04:21 +01:00
Daniel Ziegenberg 4be548dafc MDL-85947 ci: Bump GHA to Ubuntu 24.04
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-07-07 16:13:49 +02:00
yusufwib01 7ad990513b MDL-85863 user: Defer new-password email until after transaction commit 2025-07-07 21:03:26 +07:00
Trisha Milan 6c8921f730 MDL-72582 core_files: Add unit test for readfile_accel debugging output
Adds a unit test for the debugging message triggered when readfile_accel() detects
a non-empty output buffer. The readfile_accel() function directly manipulates the
output buffers, so calling it from within PHPUnit triggers an error like "Test code
or tested code closed output buffers other than its own".

As a workaround, the test runs a CLI script in a separate process, allowing buffer
behaviour to be isolated and debugging output to be captured for assertions.
2025-07-07 18:56:48 +10:00
Matt Rice 5b5b3367bb MDL-72582 core_files: Update readfile_accel error handling
Correct the error handling in readfile_accel to properly log errors when
working on a stored_file, rather than hiding the true error behind the
incorrect "Object of class stored_file could not be converted to
string."

Co-authored-by: Simey Lameze <simey@moodle.com>
Co-authored-by: Trisha Milan <trishamilan@catalyst-au.net>
2025-07-07 18:56:39 +10:00
Mikel Martín 5615a83e58 MDL-85659 theme_boost: Fix editor generated tables styles 2025-07-07 10:52:17 +02:00
Laurent David 742b352229 MDL-81702 core_message: Add focustrap and backdrop
* Add focustrap and backdrop to message drawer.
2025-07-07 07:09:02 +02:00
Laurent David 2d1268a5dd MDL-81702 theme_boost: Add focus lock to drawers
* Add focus lock to drawers for small screens
2025-07-07 07:09:01 +02:00
Laurent David 7212d35a88 MDL-81702 theme_boost: Remove site home link from drawers
* The site-home-link was added to all menu drawers and should
only be added to the main menu drawer (mobile version)
2025-07-07 07:09:01 +02:00
David Woloszyn 043caa723a MDL-85817 mod_assign: Update assignment SMS strings 2025-07-07 11:30:48 +10:00
Luca Bösch e2e5de61da MDL-84695 mod_qbank: More precise get_qbank_ids_of_type_in_course query. 2025-07-06 12:14:37 +02:00
Mihail Geshoski 0365910448 weekly release 5.0.1+ 2025-07-06 09:25:48 +08:00
Mihail Geshoski c31fd05b33 NOBUG: Add upgrade notes 2025-07-06 09:25:48 +08:00
Mihail Geshoski 22456ecb9b Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-07-06 09:25:34 +08:00
Mihail Geshoski 0739459df4 Merge branch 'MDL-85350_500' of https://github.com/PhilippImhof/moodle into MOODLE_500_STABLE 2025-07-05 20:13:13 +08:00
Mihail Geshoski a5d1f7638b Merge branch 'MDL-84487_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-05 20:13:13 +08:00
Mihail Geshoski c6e6c86753 Merge branch 'MDL-85200_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-05 20:13:13 +08:00
Mihail Geshoski a11ed5ab3c Merge branch 'MDL-85563-m500' of https://github.com/NeillM/moodle into MOODLE_500_STABLE 2025-07-05 20:13:13 +08:00
Mihail Geshoski 8fecd39ac1 Merge branch 'MDL-85210_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-07-05 20:13:13 +08:00
Mihail Geshoski dc15dee3ae Merge branch 'MDL-85432-500' of https://github.com/sh-csg/moodle into MOODLE_500_STABLE 2025-07-05 20:13:13 +08:00
Tim Schroeder f95266a84c MDL-81604 Files: Fix broken file serving w/ Apache + PHP-FPM + PHP >=8.1 2025-07-04 20:03:26 +02:00
Paul Holden 24419c84c6 MDL-85037 block_html: correct access checks for plugin file serving. 2025-07-04 08:55:52 +08:00
Mark Johnson 3094adbb91 MDL-41924 quiz: Annotate questions for backups
Find question bank entries for all questions referenced by a question
slot, and for all questions matching a question bank referenced used for
a random question, and record their IDs so they can be included in
backups.
2025-07-03 14:50:53 +01:00
Mark Johnson 006568435d MDL-41924 backup: Reduce questions included in backups
Historically, backups of an activity using questions would include all
questions for the entire context, where any question had been used. This
could lead to very large backup files, and exacerbated problems with
question duplication.

This changes the process for annotating categories to include in the
backup to find specific categories, rather than whole contexts. It
includes 3 groups of categories:
1. Those that belong to the backed up activity's context.
2. Those that contain a question used directly in a question_reference
belonging to the activity.
3. Those that contain a question used via a question_set_reference
belonging to the activity.
It also adds in any parent categories that are not included by the
above, so we have a complete hierarchy.

For group 1, the backup will include all questions belonging to these
categories, as before. For groups 2 and 3, it will only include
questions for question bank entries that have been annotated by the
activity.
2025-07-03 14:50:52 +01:00
Huong Nguyen ff520ebf34 Merge branch 'MDL-76342-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-07-03 09:07:36 +07:00
Huong Nguyen 9d14a3a81d Merge branch 'MDL-85769-500' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-07-03 09:05:13 +07:00
Mihail Geshoski d2a192eddb Merge branch 'patch/MDL-85666-500' of https://github.com/skodak/moodle into MOODLE_500_STABLE 2025-07-03 09:55:22 +08:00
Mark Johnson e4a39caeaa MDL-85069 qbank_bulkmove: Load banks and categories dynamically
The bulk move question dialogue presents 2 autocomplete fields for
selection of the target bank and category to move questions to. This was
loading all banks and categories the user could access, and filtering
categories based on the selected bank.

On large sites, this was not usable as there were too many banks and
categories to load leading to timeouts.

This refactors the dialogue to load just the current bank and cagtegory
initially, then load other options on demand via AJAX.
2025-07-02 10:59:05 +01:00
Mark Johnson b9b69a5e3e MDL-85069 question: Services for question bank and category search
This updates the core_question_search_shared_banks external function
with additional parameters to make it applicable outside of the "Switch
bank" dialogue in the quiz, with the corresponding changes to the
question_banks_datasource Javascript module, and unit test coverage.

It also adds a new \core_question\output\question_category_selector
class for rendering a select list of question categories, migrating
the logic used in qbank_managecategories to a core namespace. There
is a fragment callback for rendering this via AJAX.
2025-07-02 10:59:04 +01:00
Petr Skoda c652c8e4d3 MDL-85666 phpunit: add general plugin tests
This defines new group which can be used
to limit execution of these tests to one plugin only.

For example to execute all tests for Label module use:

phpunit --testsuite=mod_label_testsuite
phpunit --group=plugin_checks --filter=mod_label

or

phpunit --filter=mod_label
2025-07-02 07:12:33 +02:00
AMOS bot dd3379abf9 Automatically generated installer lang files 2025-07-02 00:09:57 +00:00
Mark Johnson 448223d32c MDL-85721 qtype_numerical: Prevent duplication on restore
If question_numerical record for a question has been deleted, when its
options are loaded its answers will not have a tolerance property. This
can lead to duplication.

Also, older questions may not have a question_numerical_options record.

To avoid this, we use 0 as a default tolerance for all answers if there
is no matching record, and do the same when reading the question
structure from backups. We also generate default values for the rest of
the options.
2025-07-01 11:52:48 +01:00
Mark Johnson 0105cdb0de MDL-85721 qtype: Cope with missing options records
If we restore a question (or any other) which has had its
qtype_xxx_options record deleted, we get a notification output when we
try to build the options.

This may be called from an AJAX request (such as when we duplicate a
quiz), and outputting the notification breaks the AJAX response.
Returning false also means we don't get the answers attached to the
questiondata options, so the structure doesn't match the restored data,
and we get duplication.

This emits the errors via debugging instead, which allows it to be
supressed or logged, and allows get_question_options() to continue
running.
2025-07-01 11:52:48 +01:00
Mark Johnson 4f196b4671 MDL-85721 qtype_multianswer: Clean up duplicate subquestions
This adds an ad-hoc task to clean up duplicate subquestions created by
the bug.

When the upgrade is run, it will run a query to check if any
subquestions have been duplicated (if there are multiple questions with
the same parent, text and stamp), and queue the cleanup task if there
are.

For each stamp identified, the task will find instances of the question
that are not referred to in their parent's sequence field, confirm that
they have 0 usages, and delete them.
2025-07-01 11:52:48 +01:00
Mark Johnson 64d721484a MDL-85721 qtype_multichoice: Generate default options on restore
qtype_multichoice::get_question_options() will create a default options
object if no qtype_multichoice_options record exists. This means if we
restore a backup containing a multichoice question without any options
(see previous commit), it will always create a duplicate.

This change generates a default set of options for the backupdata if
none exists, so the identity hash will match if the same question exists
in the database without options, and we dont get duplicates.
2025-07-01 11:46:27 +01:00
Mark Johnson 1f245b21c9 MDL-85721 qtype_multianswer: Don't delete qtype data for subquestions
Historically, multianswer would re-use question IDs from subquestions,
so it was necessary to delete qtype-specific data if the qtype changed.
Since versioning was introduced, editing creates new versions of the
qtype and subquestions. Deleting the data means the original versions of
the subquestions cannot function correctly, so we shouldn't do that
anymore.
2025-07-01 11:46:27 +01:00
Andrew Nicols 13ce5af041 Merge branch 'MDL-84531-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-07-01 17:36:07 +08:00
Mark Johnson 3f4478a7b7 MDL-85069 question: Fix return URL parameters after moving questions
When calling the core_question_move_questions external function, the
returned $returnurl paramater kept the original `cat`, `category` and
`lastchanged` parameters.

If the question was moved to another question bank, this meant the user
would be redirected to that bank, but the URL would still refer to the
category in the original bank. Opening the bulk move dialogue again
would then show the original bank and category selected by default, not
the current one.

This change ensures the cat parameter is updated to match the new
category, unsets the `category` parameter as it is redundant. If a single
question is moved, "lastchanged" is updated to that question, otherwise
it is unset.
2025-06-30 15:27:36 +01:00
Mark Johnson 043980d193 MDL-85069 qbank: Add tool_generator callback
This adds a callback for tool_generator and the required lang strings to
allow qbanks to be generated as part of test courses, by passing the
--additionalmodules=qbank argument to maketestcourse.php.
2025-06-30 15:27:35 +01:00
Neill Magill e7a72b4354 MDL-85563 phpunit: Clock API should always use Moodle system time
When using `clock::now()` the frozen cloxk and incrementing clock will now
always return a `DateTimeImmutable` that uses the configured Moodle system
time. In unit tests this will be Australia/Perth.

Before this change, it would sometimes be UCT.
2025-06-30 11:42:23 +01:00
Mark Johnson 22bfb8f591 MDL-85881 questions: Handle multi-byte names during migration
We were using strlen() instead of core_text::strlen() when checking the
length of a question bank name created during the migration. This meant
that multibyte strings were counted as being too long, even though they
were within the character limit.
2025-06-30 11:09:47 +01:00
Daniel Ziegenberg c4ee9493d8 MDL-83003 core: Add error check for envoy proxy
Checking the redis server version is also simplified; once ought to be
enough :)

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-06-30 09:32:21 +02:00
Paul Holden d2751479fc MDL-85779 block_timeline: fix/restore sort toggle dropdown behaviour.
Changes during Bootstrap upgrade, in conjunction with both 8a8c8ab2 and
0c586b41, caused the layout to deviate from that expected elsewhere for
managing of Bootstrap dropdown elements. Thus the dynamically chosen
item was no longer being shown as selected. Fix that here.
2025-06-29 23:17:17 +08:00
Huong Nguyen 3e6d669b34 weekly release 5.0.1+ 2025-06-29 16:18:33 +07:00
meirzamoodle 2be5e0551f MDL-85769 AI: Trap focus within AI drawer on smaller screens
Co-authored-by: Laurent David <laurent.david@moodle.com>
2025-06-28 10:55:18 +07:00
Paul Holden fac98622d3 MDL-85855 calendar: format course shortname attribute correctly. 2025-06-26 21:47:01 +08:00
Mark Johnson 734097729d MDL-84487 mod_quiz: Use modal form for editing random questions
Creating and editing random questions were using 2 different forms - one
dynamic form in a modal, and the other a regular form on a standalone
page. The "Switch bank" UI only works in a modal, so while it was
displayed on the edit page, it didn't function.

This combines the editing functionality with the existing modal form, so
the same UI can be used for both operations, and the "Switch bank"
functionality works.
2025-06-26 14:26:50 +01:00
Mihail Geshoski 0c8ff67983 Merge branch 'MDL-85665-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-06-26 10:45:10 +08:00
Huong Nguyen 938b63bc02 Merge branch 'MDL-83752-M500' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-06-26 09:19:34 +07:00
Huong Nguyen f1389b7961 Merge branch 'MDL-76414-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-06-26 08:29:39 +07:00
Huong Nguyen 89d4e6425f Merge branch 'MDL-85734-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-06-26 08:25:49 +07:00
Huong Nguyen 33a256386d Merge branch 'MDL-85466-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-06-26 08:22:20 +07:00
Huong Nguyen c0818ffcf4 Merge branch 'MDL-82109-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-26 08:19:47 +07:00
Jonathon Fowler 1a3a89b90f MDL-60799 enrol: update_instance() needs separate objects passed
Passing the same object means enrol_cohort does not recognise a change
in role when an edit or batch course upload operation is done.

 * enrol/editinstance.php was modifying $instance before passing it to
   enrol_plugin::update_instance() so the latter never sees a difference
   versus $data. This is redundant since update_instance() is doing the
   same thing a second time.
 * admin/tool/uploadcourse/classes/course.php is passing the same object
   as both arguments to enrol_plugin::update_instance().

There is an expectation that update_enrol_plugin_data() is to mutate its
$instance argument and then return it based on how derived classes in
enrol_guest and enrol_self behave, so cloning $instance within
update_enrol_plugin_data() before mutating it isn't an option.
2025-06-25 09:43:06 +10:00
andelacruz 9ddc63eb82 MDL-85665 mod_quiz: Behat to build quiz in single activity format course 2025-06-24 18:57:53 +08:00
Daniel Ziegenberg bb7eec3886 MDL-83752 workshop: Handle empty feedbackreviewer
Causes PHP warnings when null on PHP 8.1.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-06-24 12:41:39 +02:00
Huong Nguyen 9c5567cba2 Merge branch 'MDL-85683-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-24 09:21:13 +07:00
Huong Nguyen b76ea1942b Merge branch 'MDL-85644-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-24 09:20:00 +07:00
Huong Nguyen a74b536a12 Merge branch 'MDL-85407-50' of https://github.com/durenadev/moodle into MOODLE_500_STABLE 2025-06-24 09:16:53 +07:00
Luca Bösch ae930707d7 MDL-85734 calendar: support multilang group names. 2025-06-20 16:47:40 +02:00
Luca Bösch 746dcabe44 MDL-85466 course: space between number and course icon. 2025-06-20 16:47:13 +02:00
Huong Nguyen 46884140c3 weekly release 5.0.1+ 2025-06-20 15:14:19 +07:00
Huong Nguyen 677d0b3866 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-06-20 15:14:08 +07:00
Sara Arjona e1ab4f3ee9 Merge branch 'MDL-75947-integration-500-fix' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-06-19 17:22:03 +02:00
Mark Johnson 89a613460a MDL-85210 mod_qbank: Update question set references during upgrade
When moving question categories during the migration to mod_qbank, set
references using questions in those categories were not updated with the
new context.

Furthermore, since top categories from system, category and course
contexts are deleted and not moved, and set references that filtered
based on a top category were left pointing to a non-existant category.

This change updates set references using the top category to point to
the new top category where its subcategories are moved, and updates set
references for all subcategories to set the new context.
2025-06-19 12:43:38 +01:00
Mark Johnson a0dab33a23 MDL-85210 question: Update move_question_set_references
move_question_set_references expected the set reference to use the old
filter format.

This change converts the filter to the new format if required, before
updating the category and context ids.
2025-06-19 12:43:37 +01:00
Mihail Geshoski d5a747c507 MDL-75947 ltiservice_gradebookservices: Fix unit test
Fixes the test_sequential_score_posts() unit test in lineitem_test
by removing dynamic class property assignments, which were triggering
deprecation notices.
2025-06-19 16:24:41 +08:00
yusufwib01 5b2ec9c015 MDL-76414 navigation: Show 'Calendar' link in primary nav to guests 2025-06-19 13:13:49 +07:00
Jayce Birrell cb526af973 MDL-85307 filter_glossary: Do not filter concept
Filtering the concept here causes a recursive loop, disabling it here will prevent this.
2025-06-19 14:09:47 +09:30
Huong Nguyen a80fb1bbbb Merge branch 'MDL-85223-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-19 11:26:09 +07:00
Mihail Geshoski eefb11f3a9 Merge branch 'MDL-75947-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-06-19 12:19:18 +08:00
Huong Nguyen 644e986301 Merge branch 'MDL-85678-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-06-19 11:07:40 +07:00
Mihail Geshoski c1ee2623b7 Merge branch 'MDL-83487-500' of https://github.com/muhammadarnaldo/moodle into MOODLE_500_STABLE 2025-06-19 11:32:06 +08:00
Huong Nguyen ccaf7293a6 Merge branch 'MDL-85159-500' of https://github.com/stevandoMoodle/moodle into MOODLE_500_STABLE 2025-06-19 10:03:39 +07:00
yusufwib01 258ba46df7 MDL-76342 core_output: Wrap buttons below heading on small screens 2025-06-19 10:01:26 +07:00
Mihail Geshoski 2eb4929a34 Merge branch 'MDL-85514-500' of https://github.com/snake/moodle into MOODLE_500_STABLE 2025-06-19 10:59:53 +08:00
Jake Dallimore d18f7da487 MDL-85514 core_form: support 'in' rule for multiselects via subset of
The 'in' rule currently behaves the same way that 'eq' does when used
with multi-selects, which is not correct. It should be modelled by
checking whether the selected values are a subset of the rule values
(i.e. selected values are 'in' the rule values). This patch implements
that for core form rules as well as for the admin settings show/hide.
Several behat features are updated as well, because these were verifying
the incorrect behaviour for multi-select in rules.
2025-06-19 09:54:45 +08:00
Mihail Geshoski 5c1f21c234 Merge branch 'MDL-42263-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-06-18 16:18:24 +08:00
Jayce Birrell f7f35e15e6 MDL-73003 core_grades: Don't use 'scale' to determine grading method.
When a forum activity used a rubrics with a scale for grading, it was not treated as an advanced grading method, causing
the code to mishandle the grading object and not return any grades.
2025-06-18 16:51:25 +09:30
Huong Nguyen 88b1f459a7 Merge branch 'MDL-85742-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-06-18 10:11:06 +07:00
Huong Nguyen 5a1af882ab Merge branch 'MDL-84832-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-06-18 09:50:44 +07:00
Paul Holden b2d268a757 Merge branch 'MDL-85773-500' of https://github.com/sebastsg/moodle into MOODLE_500_STABLE 2025-06-17 11:08:45 +01:00
Sebastian Gundersen 31c51c1d0d MDL-85773 forms: Read-only selects must have static labels
This is to prevent labels with an invalid for attribute, referencing non-existing elements.
2025-06-17 11:43:46 +02:00
Tasio 007449c03f MDL-78233 accesslib: remove unreliable test
Co-authored-by: Marina Glancy <marina.glancy@gmail.com>
2025-06-17 10:32:14 +02:00
Mihail Geshoski ddcedb9982 Merge branch 'MDL-84978-500' of https://github.com/olivabigyo/moodle into MOODLE_500_STABLE 2025-06-17 15:16:24 +08:00
Mihail Geshoski a97e6ab834 Merge branch 'MDL-82797_500' of https://github.com/cwarwicker/moodle into MOODLE_500_STABLE 2025-06-17 15:00:50 +08:00
Luca Bösch 6da87980db MDL-85742 block_timeline: Fix active item indicator spacing 2025-06-17 07:02:53 +02:00
Marina Glancy 1ca95eeeb3 MDL-80611 general: do not translate url in help links 2025-06-16 18:09:16 +01:00
Paul Holden 6fa39fbfc6 MDL-85609 tool_mfa: fix user counting for factors in use table. 2025-06-16 13:03:36 +01:00
Jun Pataleta 4ecac80c91 MDL-85678 mod_feedback: a11y Behat coverage for Manage templates page 2025-06-16 13:51:11 +08:00
Jun Pataleta 60cc8cfd76 MDL-85678 mod_feedback: Fix a11y issues in the Manage templates page
- Fix the heading hierarchy.
- Add a visually-hidden column header for the actions column.
2025-06-16 13:51:11 +08:00
Jake Dallimore ba27489569 MDL-75947 ltiservice_gradebookservices: score->timestamp as dategraded
If this is not passed in to grade_update(), then it's not passed on to
update_raw_grade(), resulting in time() being used instead, which isn't
correct. The grade timemodified value should be set to the timestamp
provided by the tool in the score post JSON, not the time of the score
post itself.

Co-authored-by: Jayce Birrell <jayce.birrell@moodle.com>
2025-06-16 14:43:51 +09:30
Jake Dallimore 3dba1502c1 MDL-75947 ltiservice_gradebookservices: test sequential score posting
This tests highlights a problem with the score handling logic and
will currently fail. On score post, the current time is used for
grade->timemodified instead of the score->timestamp provided by the
tool in the POST JSON.
2025-06-16 14:43:51 +09:30
AMOS bot 1925c307b4 Automatically generated installer lang files 2025-06-15 00:09:55 +00:00
Mihail Geshoski a46fde054a weekly release 5.0.1+ 2025-06-13 14:43:27 +08:00
Mihail Geshoski 0c50167c4b NOBUG: Add upgrade notes 2025-06-13 14:43:27 +08:00
Paul Holden 6e5b925517 MDL-84531 core: default deprecated attribute $replacement to null. 2025-06-12 14:50:50 +01:00
Jun Pataleta 37b41eab86 Merge branch 'MDL-84752-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-12 17:15:39 +08:00
Paul Holden 9b7b841b75 MDL-84752 qtype_essay: create accessible min/max words form elements.
Because of historical requirements involving fieldsets in question
type forms (see 958e7671), we should use ARIA label attribute on
grouped elements rather than normal labels in order to make them
accessible.

Co-authored-by: Jun Pataleta <jun@moodle.com>
2025-06-12 10:11:41 +01:00
Jun Pataleta c0ae0c50fd Merge branch 'MDL-85700-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-06-12 17:05:59 +08:00
Huong Nguyen d6af4f24f5 MDL-72123 message: Add upgrade note 2025-06-12 17:05:59 +08:00
Huong Nguyen 55a481f052 Merge branch 'MDL-72123-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-06-12 17:05:58 +08:00
Huong Nguyen 5594d5e860 Merge branch 'MDL-84611-500' of https://github.com/sh-csg/moodle into MOODLE_500_STABLE 2025-06-12 08:37:22 +07:00
Mikel Martín 79f2234bdc MDL-85700 theme_boost: Fix singleselect spacing
- Fix single_select template adding gap between elements.
2025-06-11 13:52:09 +02:00
Justin Hunt 70778c49f5 MDL-82797 question engine: gift import fix 2025-06-11 12:03:44 +01:00
Stefan Hanauska 4568f58385 MDL-84611 blocks: Respect instance_allow_multiple() 2025-06-11 11:21:39 +02:00
Stefan Hanauska b5d4d5ed5c MDL-84611 block_html: Change tests to respect capabilities 2025-06-11 11:21:39 +02:00
Huong Nguyen 61be0ff0f9 Merge branch 'MDL-77964-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-11 14:08:40 +07:00
Huong Nguyen 88b45b4acc Merge branch 'MDL-85316-500-mysql-version' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-06-11 13:33:39 +07:00
Huong Nguyen 65b0d6356d Merge branch 'MDL-85274-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-06-11 13:30:08 +07:00
David Woloszyn e564114c63 MDL-85274 calendar: Duration limits added to forms 2025-06-11 14:30:00 +10:00
meirzamoodle 8bb9fe14ca MDL-85316 admin: Add environment check for AWS Aurora database 2025-06-11 10:16:21 +07:00
Philipp Imhof 9dde1fe9fe MDL-85350 questions: skip restore test for certain 3rd party plugins
The test_restore_course_with_same_stamp_questions() test assumes
that all question types using answers will also use the table
"question_answers" to store said answers. However, some 3rd party
qtypes might use custom tables and for those, the test would fail.
2025-06-06 15:56:08 +02:00
Mihail Geshoski ffb6475f6a Moodle release 5.0.1 2025-06-06 12:32:05 +08:00
Mihail Geshoski a237da2cd7 NOBUG: Add upgrade notes 2025-06-06 12:32:05 +08:00
Rajneel Totaram 33e190452b MDL-84976 tool_policy: noclean param was not set 2025-06-06 15:15:41 +12:00
yusufwib01 5517b264f3 MDL-72123 message: Hide add to contacts button if user not allowed 2025-06-06 08:28:56 +07:00
Paul Holden 71879d5688 MDL-85683 enrol: use formatted course name for notification context. 2025-06-06 00:22:07 +01:00
Szymon Karolczuk 84c4ca67f8 MDL-85573 tool_brickfield: fix uninstall code 2025-06-05 19:19:47 +02:00
Sara Arjona 5f0de664bd weekly release 5.0+ 2025-06-05 16:43:29 +02:00
Sara Arjona c32e894dc2 NOBUG: Add upgrade notes 2025-06-05 16:43:28 +02:00
Niels Gandraß 5fbde2c00c MDL-84491 core_session: Fix redis connection in CLI / scheduled task 2025-06-05 10:26:36 +02:00
Michael Hawkins a98bb76076 MDL-83762 core_files: Bind resolve IPs and ports to cURL calls 2025-06-05 12:09:36 +07:00
Michael Hawkins 6d240f17ae Merge branch 'MDL-85571-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-06-05 12:34:37 +08:00
Mihail Geshoski 5f265a8be5 Merge branch 'MDL-85645-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-06-05 12:31:56 +08:00
Mihail Geshoski 39fb6431d0 Merge branch 'MDL-85556_500_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_500_STABLE 2025-06-05 12:25:44 +08:00
Vincent Schneider 94d5d89e4b MDL-84518 course: improved course visibility state handling 2025-06-05 11:22:11 +07:00
Michael Hawkins 7db7444d53 Merge branch 'MDL-80380-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-06-05 12:19:35 +08:00
Jun Pataleta 9d8cf5fb22 Merge branch 'MDL-85450-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-06-05 12:15:48 +08:00
Huong Nguyen d0a00b74d8 MDL-80380 core_auth: Add upgrade note 2025-06-05 11:12:27 +07:00
Huong Nguyen 1db743ea9a MDL-80380 admin: Support Microsoft XOAUTH2 for outgoing email 2025-06-05 11:12:22 +07:00
Mihail Geshoski 971f1fc25f Merge branch 'MDL-69765-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-06-05 12:10:56 +08:00
Jun Pataleta 571990b7de Merge branch 'MDL-84941-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-05 12:08:39 +08:00
Mihail Geshoski 45ed9e9127 Merge branch 'MDL-85072-500' of https://github.com/olivabigyo/moodle into MOODLE_500_STABLE 2025-06-05 11:00:24 +07:00
Mihail Geshoski 1fbd0fd3ee Merge branch 'MDL-83654-500-5' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-06-05 11:00:24 +07:00
Mihail Geshoski 22f52b9b4a Merge branch 'MDL-85369_500' of https://github.com/agaranin/moodle into MOODLE_500_STABLE 2025-06-05 11:00:24 +07:00
Martin Gauk db8f7fc95a MDL-85488 mathjax: refactor loader to enhance configuration and loading 2025-06-05 11:00:24 +07:00
Mark Johnson 7ac6e421ab MDL-85323 core: Don't cache the login page 2025-06-05 11:00:12 +07:00
meirzamoodle 07a58bdb33 MDL-85375 libraries: Escaping a query parameter on pg_insert_id() 2025-06-05 01:34:18 +00:00
Vincent Schneider dfec066e2e MDL-84706 bigbluebuttonbn: improved authorization and mitigate CSRF risks 2025-06-05 01:34:18 +00:00
Huong Nguyen 847a39b6d5 MDL-79993 course: Fix PHPUnit failure 2025-06-05 01:34:18 +00:00
raortegar 4a2d2b54b2 MDL-79993 course: Improve user access to recent courses service 2025-06-05 01:34:18 +00:00
Vincent Schneider 7979e44436 MDL-84497 badges: fix missing action sesskey checks. 2025-06-05 01:34:18 +00:00
andelacruz e0e626f684 MDL-85645 mod_quiz: Behat to display questionbank name of quiz question. 2025-06-05 09:28:58 +08:00
Jun Pataleta 98a80ac3ca MDL-85239 mod_quiz: Use visually-hidden instead of deprecated sr-only 2025-06-05 09:26:07 +08:00
Jun Pataleta 0f8951ce28 Merge branch 'MDL-85239-500' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_500_STABLE 2025-06-05 09:22:50 +08:00
Jun Pataleta f26f018876 Merge branch 'MDL-84804-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-05 08:12:39 +08:00
Sara Arjona 637f6dc508 Merge branch 'MDL-82069-500' of https://github.com/aanabit/moodle into MOODLE_500_STABLE 2025-06-04 15:37:00 +02:00
Paul Holden 9bed548080 MDL-84804 output: amend page title when navigating dynamic tabs.
Prepend the current tab name to the page title, to ensure we can
easily identify the current page/tab and that it is both unique
and accessible.
2025-06-04 14:07:38 +01:00
Paul Holden 410747af21 MDL-84804 javascript: new module for manipulating the page title. 2025-06-04 14:07:21 +01:00
cescobedo e20e2c044b Merge branch 'MDL-85273-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-04 12:59:13 +02:00
Jun Pataleta 03b1a727b6 Merge branch 'MDL-85041-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-06-04 17:48:18 +08:00
Mihail Geshoski 8f8671022b MDL-85619 mod_assign: Preserve default modal behaviour on save
Removes the preventDefault() call that previously prevented the
save/cancel modal from automatically closing when the 'Save' action
is applied for a specific bulk action on the assignment submissions
page.
2025-06-04 17:34:47 +08:00
Jun Pataleta a92df9e0ee MDL-85041 core: Make methods calling announceChanges async as well 2025-06-04 17:33:18 +08:00
meirzamoodle 25f8dd9d63 MDL-85041 core: Improve autocomplete/tag a11y for assistive tech
- Updated autocomplete behavior to announce dynamic changes
via ARIA live regions
- Fixed focus management for keyboard and screen reader navigation
- Added proper role/aria tags for interactive tag components
2025-06-04 17:33:17 +08:00
Mark Johnson 898f4bd286 MDL-85200 mod_quiz: Improve efficience of populate_question_sources
This uses the contexts from the categories of questions in the quiz to
narrow down the list of course modules we are querying to just those we
will need.
2025-06-04 08:42:01 +01:00
Mark Johnson ce08706925 MDL-85200 mod_quiz: Expand behat test to cover shared bank display
This extends the existing behat test for adding a question from a shared
bank to confirm that the source bank is displayed with the question on
the Questions page.

The bank name is already passed through format_string() before being
passed to the template, so additional encoding by the template is not
necessary, hence the template has been changed to use triple braces.
2025-06-04 08:42:00 +01:00
Huong Nguyen 72c71a1f89 MDL-85571 mod_assign: Improve PHPUnit tests 2025-06-04 12:50:33 +07:00
raortegar a52d4ed032 MDL-85571 mod_assign: Add visibility check to due digest notification 2025-06-04 12:50:33 +07:00
Jun Pataleta c947a7c303 Merge branch 'MDL-85507-500-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_500_STABLE 2025-06-04 11:58:12 +08:00
Huong Nguyen 41c19a5e02 Merge branch 'MDL-84732-m500' of https://github.com/sammarshallou/moodle into MOODLE_500_STABLE 2025-06-04 10:53:19 +07:00
Mihail Geshoski 301ae93c4a Merge branch 'MDL-84432-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-06-04 10:47:05 +08:00
Huong Nguyen d207b50abf MDL-84432 core: Use discovery endpoint for Microsoft OAuth2 service
- Instead of creating the endpoints manually, use the OpenId
configuration endpoint to auto-configure endpoints
- Updates user field mappings so they map the new OpenId userinfo fields
2025-06-04 08:36:50 +07:00
Amaia Anabitarte c1552bc519 Merge branch 'MDL-85471-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-06-03 16:18:59 +02:00
cescobedo b2f4f7ab62 Merge branch 'MDL-85398-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-03 15:51:32 +02:00
Amaia Anabitarte 50d9f8f70e Merge branch 'MDL-85327-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-03 13:37:38 +02:00
cescobedo 9bc8fe3bc1 Merge branch 'MDL-85326-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-06-03 13:10:46 +02:00
Jun Pataleta a716da64af Merge branch 'MDL-85467-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-06-03 17:28:35 +08:00
Paul Holden 290104c964 MDL-85326 theme_boost: hide footer popover icon on small screens.
Fixes regression from add6f71d which forced `.btn-icon` display.

Co-authored-by: Mikel Martín <mikel@moodle.com>
2025-06-03 09:18:06 +01:00
Paul Holden 5487d418b6 MDL-85644 course: bottom margin for course category listing actions. 2025-06-02 23:03:00 +01:00
Rajneel Totaram a0c88aec39 MDL-85450 block_calendar_upcoming: Fix heading level 2025-06-03 09:39:18 +12:00
Mark Johnson dfd0dc28e8 MDL-85556 backup: Only update question refs in restored course
The previous query updated all question references matching the original
question bank entry, regardless of whether they were part of the restore
or not. When we are dealing with duplicated questions, this means we
could accidentally change question references in the backed-up course as
well as the restored one.

This change filters the references to ensure they exist in a context
within the restored course, before updating them.
2025-06-02 15:53:37 +01:00
Amaia Anabitarte 30b08ee83a Merge branch 'MDL-85412-500' of https://github.com/aanabit/moodle into MOODLE_500_STABLE 2025-06-02 13:24:17 +02:00
yusufwib01 e5da273f9a MDL-85467 core: Replace orphaned label with span for accessibility
This commit replaces orphaned labels with spans for improved
accessibility. It also updates the XPATH partial named selector
for select_menu fields to target span elements.
2025-06-02 13:45:03 +07:00
hieuvu c248e82b52 MDL-85239 mod_quiz: Add caption for Attempt tables. 2025-06-02 13:38:24 +07:00
Luca Bösch 6d2b25f10f MDL-69765 qtype_essay: Create temporary draft file area only one time. 2025-05-31 12:58:52 +02:00
Jun Pataleta 8d57b56b5a MDL-83654 qtype_match: Only add the question text to the first field
In order to avoid repetition of the question text as the user navigates
to each answer field in a matching question (e.g. by tabbing).
2025-05-31 09:25:22 +08:00
Jun Pataleta edcff12191 MDL-83654 qtype_match: Add presentation role to table-related elements
The question and answer are displayed on a layout table and
does not really help with accessibility. We need to set a
presentation role for the table-related elements.
2025-05-31 09:25:22 +08:00
Jun Pataleta 1229c2b1ef MDL-83654 qtype_match: Provide better information to answer fields
* In order to provide better context for screen reader users about the
answer fields in matching questions, the question text and the
corresponding item to be matched are included to the answer fields via
the aria-describedby attribute.
2025-05-31 09:25:22 +08:00
Amaia Anabitarte 7edec4866f MDL-85412 course: adding and removing elements feedback message 2025-05-30 16:42:43 +02:00
Sara Arjona 5c22b04af4 Merge branch 'MDL-85315-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-05-30 12:33:05 +02:00
Luca Bösch 01866455af MDL-85315 themes: align modal closing button. 2025-05-30 11:32:01 +02:00
vlad.kidanov 15e0fa6ecb MDL-85132 mod_glossary: Add missing end div for entrybox element. 2025-05-30 10:30:33 +01:00
Jun Pataleta b3619e08e4 MDL-84832 tiny_media: Announce when alt text maxlength is reached
Co-authored-by: Meirza <meirza.arson@moodle.com>
2025-05-30 17:09:26 +08:00
Michael Hawkins 1260cb24b8 weekly release 5.0+ 2025-05-30 16:28:46 +08:00
Michael Hawkins 77e0f0a889 NOBUG: Add upgrade notes 2025-05-30 16:28:46 +08:00
Michael Hawkins 9330731d93 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-05-30 16:28:24 +08:00
Artem Garanin 8fa9939614 MDL-85369 question: fix tag collection ID in legacy‑filter upgrade.
Use the actual tag collection for the 'question' tag area instead of
the default collection.
2025-05-29 14:08:42 -04:00
Paul Holden 373bc98921 MDL-85223 reportbuilder: initialize user entity filters just once. 2025-05-29 15:32:09 +01:00
Paul Holden b27318d022 MDL-77964 availability: avoid JS console errors when closing modal. 2025-05-29 10:15:25 +01:00
Michael Hawkins 89d34beece Merge branch 'MDL-84824-500' of https://github.com/stevandoMoodle/moodle into MOODLE_500_STABLE 2025-05-29 12:27:08 +08:00
Michael Hawkins 325f273ca9 Merge branch 'MDL-83448-500' of https://github.com/stevandoMoodle/moodle into MOODLE_500_STABLE 2025-05-29 12:18:32 +08:00
Michael Hawkins c471fa4986 Merge branch 'MDL-84996-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-05-29 12:09:55 +08:00
Michael Hawkins b4e3dca13f Merge branch 'MDL-85513-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-05-29 12:04:15 +08:00
Michael Hawkins 7310e7d908 Merge branch 'MDL-85552-500' of https://github.com/yusufwib01/moodle into MOODLE_500_STABLE 2025-05-29 11:59:47 +08:00
Michael Hawkins e14e0428db Merge branch 'MDL-85437-500' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-05-29 11:52:29 +08:00
Stevani Andolo 7f756ae983 MDL-84824 core_message: Fixed popup accessibility issue 2025-05-29 11:51:25 +08:00
Huong Nguyen 0e24a0400d Merge branch 'MDL-83044-500' of https://github.com/catalyst/moodle into MOODLE_500_STABLE 2025-05-29 10:27:10 +07:00
Huong Nguyen 1ad351d4a2 Merge branch 'MDL-85177-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-05-29 09:53:47 +07:00
Huong Nguyen 6c045bfefc Merge branch 'MDL-85525-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-05-29 09:51:44 +07:00
Huong Nguyen 47c8a3ad7e Merge branch 'MDL-85400-500' of https://github.com/lameze/moodle into MOODLE_500_STABLE 2025-05-29 08:59:42 +07:00
Huong Nguyen aae09ebb6b Merge branch 'MDL-85389-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-05-29 08:52:32 +07:00
AMOS bot 5feec7a0b0 Automatically generated installer lang files 2025-05-29 00:08:00 +00:00
andelacruz 28cf9407dd MDL-85525 mod_quiz: Behat test for quiz attempt page block display 2025-05-28 16:51:27 +08:00
andelacruz 06fd97cae1 MDL-85389 mod_lesson: Behat for filtering lesson reports/essays by group 2025-05-28 15:17:41 +08:00
sam marshall 82eecc9475 MDL-85400 PHPunit: Hard to test code that uses encryption
This change stops the encryption code setting created key files to
read-only during PHPunit runs, which means they will be safely
deleted when the system resets after a test.
2025-05-28 12:55:46 +08:00
meirzamoodle 499715e17e MDL-85437 AI: Move focus to the AI drawer 2025-05-28 11:31:06 +07:00
Mark Johnson 643eaa3418 MDL-85556 questions: Fix repeated_restore unit test
This unit test is meant to test restoring duplicated questions that
exist in a shared question bank. However, due to improvements in the
restore process from the introduction of mod_qbank, having the questions
in a bank that is not in the restored course means the questions don't
get restored at all, and we can't test that the process is working.

This changes the test to use a bank in the target course instead.
2025-05-27 10:46:44 +01:00
Jun Pataleta 181c55ad1c Merge branch 'MDL-84806-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-05-27 15:37:08 +08:00
Huong Nguyen cb7d72d31d Merge branch 'MDL-85169-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-05-27 09:16:03 +07:00
aya-saad1 a3d6763e71 MDL-42263 assign: Force language of email sent to graders
Co-authored-by: Jayce Birrell <jayce.birrell@moodle.com>
2025-05-27 10:14:38 +09:30
Alexander Van der Bellen 114ff5fa92 MDL-83044 core_block: Add return value check on form submission 2025-05-26 23:03:27 +08:00
ferran dda97bdbfc Merge branch 'MDL-84304-500' of https://github.com/laurentdavid/moodle into MOODLE_500_STABLE 2025-05-26 13:50:05 +02:00
Sara Arjona e5d7e554ab Merge branch 'MDL-85404-500' of https://github.com/ferranrecio/moodle into MOODLE_500_STABLE 2025-05-26 11:27:45 +02:00
cescobedo 35588bca41 Merge branch 'MDL-85435-500' of https://github.com/aanabit/moodle into MOODLE_500_STABLE 2025-05-26 10:01:08 +02:00
David Mudrák e4247c79a6 MDL-85507 lang: Use fixed strings in tests, too 2025-05-25 08:54:02 +02:00
Helen Foster 00b809dbc5 MDL-85507 lang: Import fixed English strings (en_fix) 2025-05-25 08:53:09 +02:00
sam marshall d21fcdee19 MDL-84732 Accessibility: Focus issue after closing nested modal 2025-05-23 15:47:12 +01:00
Luca Bösch a8b08ea6fc MDL-85177 quiz: style the question version pulldown nicely. 2025-05-23 06:43:18 +02:00
Huong Nguyen a52fbcced6 weekly release 5.0+ 2025-05-23 11:03:46 +07:00
Huong Nguyen c957b909aa Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-05-23 11:03:39 +07:00
David Woloszyn 86990aaab5 MDL-84806 tiny_aiplacement: Remove unused div and css 2025-05-23 12:36:46 +10:00
David Woloszyn 3cebd0e59a MDL-84806 tiny_aiplacement: Announce action results for accessibility
The generatetext.js and associated templates have been adjusted to
match more closely with the generate image files. The generate image
way of displaying content was better suited to aria.
2025-05-23 12:36:46 +10:00
yusufwib01 077fbd22cf MDL-85552 core: Make group selector label use normal font weight 2025-05-22 16:28:56 +07:00
Stevani Andolo 56a250792c MDL-83448 core_hub: Fixed registration check 2025-05-22 13:44:57 +08:00
Huong Nguyen ace36dc3df Merge branch 'MDL-84899-500' of https://github.com/laurentdavid/moodle into MOODLE_500_STABLE 2025-05-22 11:00:21 +07:00
Huong Nguyen e8b3c7174a Merge branch 'MDL-84793-m500' of https://github.com/sammarshallou/moodle into MOODLE_500_STABLE 2025-05-22 10:48:19 +07:00
Huong Nguyen 1edb106e9b Merge branch 'MDL-84918-500' of https://github.com/HuongNV13/moodle into MOODLE_500_STABLE 2025-05-22 10:34:23 +07:00
David Woloszyn abae164f41 MDL-84918 core: Add zend.exception_ignore_args environment check 2025-05-22 10:09:44 +07:00
Huong Nguyen c7912e21ba MDL-84918 core: Add initial environment requirements for Moodle 5.1 2025-05-22 10:08:46 +07:00
Huong Nguyen 7df8f6e430 Merge branch 'MDL-74900-500' of https://github.com/raortegar/moodle into MOODLE_500_STABLE 2025-05-22 09:37:14 +07:00
Huong Nguyen 475ef128ae Merge branch 'MDL-85193-500' of https://github.com/junpataleta/moodle into MOODLE_500_STABLE 2025-05-22 09:23:14 +07:00
Amaia Anabitarte 586ae425e6 MDL-85435 course: Render HTML in activity overview name mustache 2025-05-21 17:37:11 +02:00
Katalin Lukacs Toth b5a7a463c0 MDL-84978 mod_forum: Fix latest/earliest post id lookup in a discussion
This properly fixes the problems that commit 0f5a96f in MDL-80848 tried
to address.
2025-05-21 11:03:24 +02:00
Katalin Lukacs Toth 8f6e56173e MDL-85072 qtype_ordering: Fix XML export
Option fields should not be left empty.
2025-05-21 10:52:45 +02:00
Huong Nguyen a23635adc0 Merge branch 'MDL-84274-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-05-21 13:35:45 +07:00
raortegar bfdcf4b490 MDL-74900 core_course: Exception in module deletion if missing instance 2025-05-21 08:27:23 +02:00
Huong Nguyen 2e7c195aee Merge branch 'MDL-85311-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-05-21 10:23:04 +07:00
Huong Nguyen d7f7653a8e Merge branch 'MDL-84296-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-05-21 10:00:08 +07:00
Huong Nguyen 00652388c5 Merge branch 'MDL-85374-500' of https://github.com/andrewnicols/moodle into MOODLE_500_STABLE 2025-05-21 09:55:54 +07:00
AMOS bot 3c83131e34 Automatically generated installer lang files 2025-05-21 00:07:57 +00:00
Paul Holden ae1a251b3f MDL-82109 notes: include link to add site note if user has capability. 2025-05-20 13:18:30 +01:00
Andrew Nicols dff4bc87f5 MDL-85374 report_competency: Create custom step for setting autocomplete
The autocompletes used in the competency report have been bastardised to
redirect on selection. Unfortunately this also applies when when making
null-op changes like deleting the initial "Please select a value"
option.

The autocomplete code removes all current options before creating an
option, and because of this redirect the browser is redirecting before
the new value can be entered, but we retain a reference to the field as
`$this->field`, which is now stale.
2025-05-20 12:42:11 +08:00
Amaia Anabitarte 4a1395205f Merge branch 'MDL-85397-500' of https://github.com/tasiobg/moodle into MOODLE_500_STABLE 2025-05-19 12:43:35 +02:00
Amaia Anabitarte e534517f7f Merge branch 'MDL-85264-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-05-19 12:38:25 +02:00
Laurent David f17a871f1d MDL-84304 core_courseformat: Remove COMPLETION_COMPLETE_FAIL test
* Because we removed this status in mod_scorm, we cannot test it
anymore against any module as no module has custom_rules that leads
to COMPLETION_COMPLETE_FAIL
2025-05-19 11:56:40 +02:00
Laurent David ef5c806a70 MDL-84304 mod_scorm: Remove completion failed from behat test
* Now that we removed the COMPLETION_COMPLETE_FAIL status for scorm
behat tests needs to be updated
2025-05-19 11:56:40 +02:00
Magnus Samuelsson 4de4029044 MDL-84304 mod_scorm: Remove the COMPLETION_COMPLETE_FAIL status 2025-05-19 11:56:40 +02:00
Stevani Andolo db1932d9d7 MDL-85159 editory_tiny: Fix language list and track srclang a11y issue 2025-05-19 16:51:40 +08:00
Amaia Anabitarte 2a2e18461f MDL-82069 core_completion: Improve errors for multiple grading items 2025-05-19 09:32:59 +02:00
Jun Pataleta 44d1a98e70 MDL-85471 theme_boost: Dismiss tooltips on escape 2025-05-16 14:23:37 +08:00
Mihail Geshoski 328810e933 weekly release 5.0+ 2025-05-16 12:58:25 +08:00
Mihail Geshoski b6b043b147 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-05-16 12:57:31 +08:00
Muhammad Arnaldo 70f0b13a28 MDL-83487 mod_forum: retain upcoming posts in user digests 2025-05-16 11:54:17 +07:00
Paul Holden 1babb4f4c2 MDL-85513 output: centre chevron icons within collapsible section. 2025-05-15 23:20:09 +01:00
toanlamt 002d1171bd MDL-85050 Javascript: core/dropzone Fix link & box click event conflict 2025-05-15 15:04:54 +07:00
sam marshall b5bb67d1f1 MDL-84793 Behat: Allow CLI scripts to run on Behat instance 2025-05-15 08:50:30 +01:00
Stevani Andolo 89358f92fb MDL-84296 core_hub: Added detailed AI usage data to registration page 2025-05-15 16:52:26 +10:00
Huong Nguyen 17f6225bc4 Merge branch 'MDL-83350-500' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-05-15 12:02:14 +07:00
Huong Nguyen 77d63230a1 Merge branch 'MDL-84073-500' of https://github.com/sh-csg/moodle into MOODLE_500_STABLE 2025-05-15 11:57:21 +07:00
Huong Nguyen 43b4e56f8b Merge branch 'MDL-83943-500' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-05-15 11:45:27 +07:00
Huong Nguyen 40add60152 Merge branch 'MDL-85279-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-05-15 11:42:23 +07:00
Huong Nguyen 64e07e7afb Merge branch 'MDL-84009-500' of https://github.com/raortegar/moodle into MOODLE_500_STABLE 2025-05-14 21:51:53 +07:00
Huong Nguyen 1c67b54aa2 Merge branch 'MDL-84751-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-05-14 21:41:44 +07:00
Amaia Anabitarte 2099b2cafb Merge branch 'MDL-85167-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-05-14 21:41:44 +07:00
Amaia Anabitarte ef4af9dd82 Merge branch 'MDL-85205-500' of https://github.com/roland04/moodle into MOODLE_500_STABLE 2025-05-14 21:41:44 +07:00
Amaia Anabitarte 1c8d59349e Merge branch 'MDL-85360-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Sara Arjona ed999bea4b Merge branch 'MDL-85449-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Sara Arjona 1066601f0b Merge branch 'MDL-81436-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Sara Arjona b721f37d91 Merge branch 'MDL-81842-500' of https://github.com/laurentdavid/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Huong Nguyen b06bcdc209 Merge branch 'MDL-84128-500' of https://github.com/meirzamoodle/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Huong Nguyen 8e1c86a9a3 Merge branch 'MDL-85294-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Huong Nguyen b479e86c08 Merge branch 'MDL-85224_500' of https://github.com/PhilippImhof/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Huong Nguyen e927264c5a Merge branch 'MDL-85363-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Huong Nguyen 6effd2064a Merge branch 'MDL-84964-500' of https://github.com/Jayce0808/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
ferran b969f89b01 Merge branch 'MDL-85364-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
ferran 674a4c2a5f Merge branch 'mdl-84520_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Sara Arjona 549e311fee Merge branch 'MDL-85248-500' of https://github.com/albertgasset/moodle into MOODLE_500_STABLE 2025-05-14 21:41:43 +07:00
Tasio c312a9871c MDL-85397 theme: update reports to use container queries
With container queries, responsive design is no longer limited to the full browser width. For example, we can now display
the report in a compact side panel, and it will automatically adapt its styling to suit smaller spaces.
2025-05-14 15:50:03 +02:00
Tasio 9847d4484b MDL-85260 core: prevent background scrolling
After upgrading to Bootstrap 5 (Moodle v5), opening a modal no longer prevents the background content from scrolling.
This fix restores the intended behavior by mimicking Bootstrap 5's JavaScript logic that disables background scrolling
when a modal is open.
2025-05-14 15:36:00 +02:00
raortegar 0f244e11a0 MDL-84009 factor_webauthn: Add additional security keys 2025-05-14 11:18:07 +02:00
raortegar 7d794f8a3e MDL-84009 tool_mfa: Additional factor instances support 2025-05-14 11:18:07 +02:00
Paul Holden f8db554520 MDL-84996 enrol_manual: ensure externally supplied users are valid. 2025-05-14 09:55:48 +01:00
ferran 38b9eb2653 MDL-85404 format_social: allow subsections in social activities 2025-05-14 09:58:59 +02:00
andelacruz 94233d6242 MDL-85279 mod_assign: Renamed behat test to a more specific name 2025-05-14 15:11:42 +08:00
andelacruz e8580cf851 MDL-85279 mod_page: Fix behat to match the expected behaviour 2025-05-14 15:07:14 +08:00
Paul Holden bc1a8d0c5a MDL-85262 tool_task: switch next run time comparison in renderer.
If a task is "due", then next run time should be considered "ASAP".
2025-05-13 22:13:15 +01:00
Stefan Hanauska a246580a27 MDL-85432 mod_qbank: Don't support completion 2025-05-13 10:31:24 +02:00
Rajneel Totaram b407011b18 MDL-81436 theme: Fix scope of showmore button selector
Co-authored-by: Mikel Martín <mikel@moodle.com>
2025-05-13 17:33:18 +12:00
David Woloszyn 67d2b86614 MDL-84751 aiprovider_ollama: Fix settings help spacing 2025-05-13 13:52:50 +10:00
David Woloszyn 52e9b4cdbe MDL-84751 aiprovider_openai: Fix settings help spacing 2025-05-13 13:52:50 +10:00
meirzamoodle 7725baa9db MDL-83350 files: Avoid cacheing user and file repo files
Set the lifetime to zero for files referenced in
the local/internal repository (private files and file system),
because they should not be cached.

Add `no-store` to the cache-control to ensure resources are
never cached, always fetching the latest version.
2025-05-13 09:37:40 +07:00
Jun Pataleta 3f534cad09 Merge branch 'MDL-84817-500' of https://github.com/davewoloszyn/moodle into MOODLE_500_STABLE 2025-05-12 12:44:37 +08:00
Laurent David be1e8f8887 MDL-81842 formlibs: Change display in sticky footer
* Make sure that form elements that are inserted in the
sticky footer are not wrapped
2025-05-12 06:23:50 +02:00
Paul Holden edd0e76bd1 MDL-85449 block_myoverview: preserve documentation language params.
Fixes the link to Moodle docs from zero state.
2025-05-11 19:27:36 +01:00
AMOS bot f84f671994 Automatically generated installer lang files 2025-05-10 00:08:00 +00:00
Philipp Imhof 237f9bd7c0 MDL-85224 quiz: consider submitted state when filtering
In function quiz_report_grade_method_sql(), also consider the new state 'submitted' when filtering for FIRSTATTEMPT or LASTATTEMPT.
2025-05-09 17:59:33 +02:00
Mikel Martín 3f832fda4d MDL-85205 theme_boost: Fix incorrect uses of 'btn-link' class
Because btn-link relies on $link-hover-decoration variable, some incorrect
btn-link usages need to be fixed.
2025-05-09 13:57:53 +02:00
Mikel Martín fad9778f8b MDL-85205 theme_boost: Add link hover underline 2025-05-09 13:57:53 +02:00
Paul Holden 406980d1b1 MDL-85398 blocks: constrain width of block controls dropdown menu. 2025-05-09 12:52:45 +01:00
Mikel Martín 7b472fae76 MDL-85167 theme_boost: Fix tertiary navigation key listeners 2025-05-09 13:47:41 +02:00
Laurent David c6253c34bb MDL-84899 mod_forum: Fix summary report form change checker
* The forum summary report was not removing the right form
from the list of forms to check for changes.
2025-05-09 08:43:43 +02:00
Laurent David ee9cc3b397 MDL-84899 core_form: Fix unWatchForm in FormChangeChecker
* The unWatchForm as it stood was not removing the form from the list.
2025-05-09 08:43:43 +02:00
Luca Bösch bbcc5462af MDL-85363 quiz: style the question number inplace editable nicely. 2025-05-09 08:13:07 +02:00
Luca Bösch 5ab4641119 MDL-85294 qbank: Align header, buttons and switch in "Edit categories". 2025-05-09 08:13:01 +02:00
meirzamoodle efacf36423 MDL-83943 core_tag: Fix the broken user tag pagination 2025-05-09 12:49:48 +07:00
Philipp Memmel 2304462b47 MDL-85168 lib: Move courseid filter to participants_filter.js 2025-05-09 07:21:02 +02:00
meirzamoodle ffa4c0ea3f MDL-84128 core: Flip the image according to its orientation in PHP GD 2025-05-09 11:17:28 +07:00
Huong Nguyen 6999197243 weekly release 5.0+ 2025-05-09 09:50:13 +07:00
Huong Nguyen 4345819a25 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-05-09 09:50:05 +07:00
Stefan Hanauska 1540e90991 MDL-84073 blocks: Load invisible blocks 2025-05-08 14:36:54 +02:00
Daniel Ureña a1d74cde4b MDL-85407 mod_data: Fix unclosed HTML in list view 2025-05-08 11:06:22 +02:00
David Woloszyn 758a35058f MDL-84817 core_message: Fix display issues in drawer at 400% 2025-05-08 17:07:28 +10:00
Huong Nguyen 2654ce0457 Merge branch 'MDL-85341-500' of https://github.com/snake/moodle into MOODLE_500_STABLE 2025-05-08 10:52:31 +07:00
Huong Nguyen 4220abfd22 Merge branch 'MDL-85280-500' of https://github.com/abias/moodle into MOODLE_500_STABLE 2025-05-08 10:38:27 +07:00
danghieu1407 62c3325c06 MDL-84708 question: Fixing layout answer box issue causing images 2025-05-08 09:48:04 +07:00
Huong Nguyen cc63c27931 Merge branch 'MDL-84677-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-05-08 09:28:13 +07:00
Huong Nguyen b47fc4a266 Merge branch 'MDL-84597-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-05-08 09:05:05 +07:00
Huong Nguyen dad46b2976 Merge branch 'MDL-85220-500' of https://github.com/rjnl/moodle into MOODLE_500_STABLE 2025-05-08 08:59:02 +07:00
Huong Nguyen e14280bf94 Merge branch 'MDL-84654-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-05-08 08:44:13 +07:00
Amaia Anabitarte 685da75cd9 Merge branch 'MDL-85361-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-05-07 14:01:51 +02:00
Mikel Martín a6ce0dc708 MDL-83422 tiny_media: Fix modal footer layout 2025-05-07 13:51:26 +02:00
Jun Pataleta 0c8e1b6256 MDL-85193 course: Fix restore of backups with missing activity plugins
Show debugging instead of throwing an error when fetching an activity
icon from a missing activity plugin.
2025-05-07 18:10:25 +08:00
AMOS bot 5c89e91dad Automatically generated installer lang files 2025-05-07 00:07:53 +00:00
Angelia Dela Cruz 5b1761963c MDL-84654 mod_assign: Assignment additional files can be hidden 2025-05-06 12:41:47 +08:00
Huong Nguyen ebc9254a33 Merge branch 'MDL-85310-500' of https://github.com/andelacruz/moodle into MOODLE_500_STABLE 2025-05-06 10:31:59 +07:00
Sara Arjona f9dc580bb9 MDL-85364 block_social_activities: Move activities in mod pages too 2025-05-05 09:16:35 +02:00
Sara Arjona e1b0d8b770 MDL-85360 theme_boost: Fix active item indicator spacing
The fix in MDL-85017 covered the More menu; however, the secondary
navigation within the Single activity course format was not updated.
2025-05-05 08:38:02 +02:00
Sara Arjona 687857ea58 MDL-85361 block_social_activity: Fix inline editing text field 2025-05-04 19:37:40 +02:00
Paul Holden c3056486bf MDL-85264 javascript: reject promise when hiding saveCancel modal. 2025-05-02 17:30:09 +01:00
Paul Holden 5ee54fe953 MDL-85169 forms: focus grouped fields element based on parent data.
This fixes the previous attempt at focusing the first field within
grouped elements (aec60788) which inadvertently introduced duplicate
IDs.
2025-05-02 13:47:14 +01:00
Luca Bösch 1c0a30495c MDL-84677 backup: Filter course shortnames in copy progress viewer. 2025-05-02 08:51:34 +02:00
Huong Nguyen 69b36a36b4 weekly release 5.0+ 2025-05-02 09:16:13 +07:00
Huong Nguyen 4fb1ca66b4 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-05-02 09:16:07 +07:00
Jake Dallimore 9c31818311 MDL-85341 core: remove unnecessary sesskey from module controlmenu items
This impacts those items using basemodurl:
- edit item
- move item
neither of which need sesskey at this stage as changes aren't being made
yet.
2025-05-02 09:55:37 +08:00
Paul Holden 286e5f0a7d MDL-85273 output: fix custom menu dropdowns within "More" sub-menu.
Since move to BS5 data-* attributes in 0c586b41 trying to open custom
menu dropdowns that had been moved to the "More" sub-menu was broken.

It appears that Bootstrap now handles open/close for us automatically
(so we were effectively closing the menu immediately after Bootstrap
opened it).
2025-05-01 22:04:11 +01:00
Paul Holden aab3c0722f MDL-85327 admin: observe show/hide settings on category page.
Co-authored-by: Carlos Castillo <carlos.castillo@moodle.com>
2025-05-01 10:55:22 +01:00
Huong Nguyen 536391d442 Merge branch 'MDL-85178-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-05-01 11:02:47 +07:00
Huong Nguyen a6a6e54862 Merge branch 'MDL-85107-500' of https://github.com/ferranrecio/moodle into MOODLE_500_STABLE 2025-05-01 09:50:51 +07:00
Rajneel Totaram 9026613016 MDL-85311 mod_forum: Fix broken unread posts styles 2025-05-01 13:05:04 +12:00
AMOS bot 60fd449bc6 Automatically generated installer lang files 2025-05-01 00:07:59 +00:00
Angelia Dela Cruz 8982f5ee9e MDL-85310 qtype: Renamed duplicate scenario names to fix warning 2025-04-30 13:32:43 +08:00
Huong Nguyen 1b9dfd94c1 Merge branch 'MDL-85222-500' of https://github.com/tasiobg/moodle into MOODLE_500_STABLE 2025-04-30 10:05:39 +07:00
Huong Nguyen 684a9fc34b Merge branch 'MDL-85208-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-30 10:03:48 +07:00
Sara Arjona d26bcd0069 Merge branch 'MDL-84805-500' of https://github.com/aanabit/moodle into MOODLE_500_STABLE 2025-04-29 15:31:51 +02:00
Amaia Anabitarte f083271328 MDL-84805 badges: Titles must be unique 2025-04-29 11:14:31 +02:00
Rajneel Totaram e64903b7b2 MDL-85220 block_recentlyaccesseditems: Fix heading level 2025-04-29 10:11:23 +12:00
Paul Holden 6f14d54be9 MDL-84941 course: fix activity button label on end of section.
Where the button is rendered after all section content, we should
fix the ARIA label attribute to refer to the current section rather
than non-existing subsequent activity.
2025-04-28 11:22:56 +01:00
Sara Arjona 2a131a18c3 Merge branch 'MDL-84192-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-28 11:25:05 +02:00
Alexander Bias 896cff35f8 MDL-79362 auth_ldap: Close transaction when user fails to create 2025-04-28 10:55:39 +02:00
Paul Holden 2e90ab1ee8 MDL-84983 core: account for invalid locales in intl extension.
Recent PHP versions are now stricter on the `$locale` value passed
to `IntlDateFormatter` class and will throw exceptions for invalid
values (some of which may be present in our language packs).

See: https://github.com/php/php-src/issues/12912
2025-04-28 10:56:21 +07:00
Huong Nguyen 89285b7efc Merge branch 'MDL-84539-500' of https://github.com/andrewgos/moodle into MOODLE_500_STABLE 2025-04-28 08:59:27 +07:00
Paul Holden e8a93d6c63 MDL-84787 calendar: restore course-specific management page parameter. 2025-04-25 12:27:47 +01:00
Paul Holden daa6fe8af1 MDL-84597 blog: confirm blogs enabled prior to settings nav access. 2025-04-25 12:22:08 +01:00
Luca Bösch 6ad24df3d0 MDL-85178 quiz: style the question number inplace editable nicely. 2025-04-25 08:39:11 +02:00
Alexander Bias 9b7ac2d4d1 MDL-85280 communication: Adapt communication button style 2025-04-25 08:15:41 +02:00
Andrew Nicols 15ab527174 MDL-84421 tool_uploadcourse: Stop MUC caching enrol instances
We should not normally cache instances of a class. This can lead to poor
design to work around the limitations of PHP Serialization, and could
theoretically cause issues with PHP versions changing within a Moodle
version.
2025-04-25 09:10:09 +07:00
Huong Nguyen 5511a18ae5 weekly release 5.0+ 2025-04-24 22:05:39 +07:00
Huong Nguyen 9bd83512e6 NOBUG: Add upgrade notes 2025-04-24 22:05:38 +07:00
Huong Nguyen 32fa48c8c9 Merge branch 'install_500_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_500_STABLE 2025-04-24 22:05:23 +07:00
sam marshall ed19a42ddc MDL-83628 message: message_provider_uninstall slow
This function was slow because using case-insensitive LIKE on the large
user_preferences table means that Postgres does not use its index and
has to sequential-scan the table.
2025-04-24 13:05:40 +01:00
Paul Holden 34bdcdaa00 MDL-84192 course: update course information page language string.
The previous version used an incorrectly deprecated summary string.
2025-04-24 11:53:36 +01:00
Paul Holden 20fb7a4f1a MDL-84480 files: correct text formatting params when filtering files. 2025-04-24 07:31:17 +02:00
Nathan Nguyen ec4bfaf137 MDL-84233 core_user: fix unit test 2025-04-24 07:31:17 +02:00
Lars Bonczek 742b58fb04 MDL-83563 form: Fix hideIf and disabledIf dependent on multiselects 2025-04-24 07:31:17 +02:00
Huong Nguyen a440099d46 Merge branch 'MDL-84442-metadata-task-logs-MOODLE_500_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_500_STABLE 2025-04-24 07:31:17 +02:00
Huong Nguyen 13f476b154 Merge branch 'MDL-85202-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-24 07:31:16 +02:00
David Woloszyn 09b72f375e MDL-84274 tool_policy: Policy acceptance pages use secure layout 2025-04-24 12:00:03 +10:00
David Woloszyn 65a3bf07c4 MDL-84274 tool_mfa: Prevent tool_policy pages from redirecting 2025-04-24 12:00:03 +10:00
Paul Holden 03ee9f3c1d MDL-85264 output: fix form change checker when switching tabs.
During the Bootstrap 5.0 upgrade the event handling within dynamic
tabs appears to have changed such that the "click" event happens
too late for the form change checker module to determine whether
there were any "dirty" forms on the tab being switched from.

This is related to, although not specifically caused by, changes
made in 0c586b41.
2025-04-23 18:03:32 +01:00
Jayce a4f96dce4d MDL-84964 mod_glossary: min width only apply for large device 2025-04-23 10:01:53 +09:30
AMOS bot 62def094c8 Automatically generated installer lang files 2025-04-23 00:07:57 +00:00
Sara Arjona 01ae63ca47 Merge branch 'MDL-82658-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-22 16:46:29 +02:00
David Woloszyn 05f009fc14 MDL-84807 AI: Remove records on provider uninstall 2025-04-22 16:43:59 +02:00
Albert Gasset 997122cde0 MDL-85248 qtype_ddimageortext: Revert MDL-66584
This reverts commit d792c4916a.
2025-04-22 16:41:22 +02:00
Paul Holden 92a20551cf MDL-82658 mod_forum: calculate maxbytes correctly in reply handler. 2025-04-22 08:43:06 +01:00
Huong Nguyen 7582e6a677 Merge branch 'MDL-85182-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-04-22 10:09:07 +07:00
Brendan Heywood f3ab1afd05 MDL-84070 core: Fix race conditions setting user preferences 2025-04-22 08:39:17 +07:00
Benjamin Walker 9e34a5f4c0 MDL-84442 core_task: Add finalise log param to task failers 2025-04-22 09:26:56 +10:00
Andrew Gosali d4e9ca5712 MDL-84539 report_participation: use capability viewanonymousevents 2025-04-21 09:56:43 +07:00
Huong Nguyen c5d88c2426 Merge branch 'mdl-83262_500' of https://github.com/james-cnz/moodle into MOODLE_500_STABLE 2025-04-21 09:12:36 +07:00
AMOS bot 1eab163f65 Automatically generated installer lang files 2025-04-20 00:08:19 +00:00
AMOS bot edc2b3d49c Automatically generated installer lang files 2025-04-19 00:07:57 +00:00
Stefan Hanauska 3d6a0f5b73 MDL-83111 tool_recyclebin: Avoid null value 2025-04-18 07:15:56 +02:00
AMOS bot 408adbe49a Automatically generated installer lang files 2025-04-18 00:08:00 +00:00
Luca Bösch 97752da2a8 MDL-85182 block_myoverview: Fix choice active item indicator spacing 2025-04-17 17:09:09 +02:00
Sara Arjona ba42149eb1 weekly release 5.0+ 2025-04-17 14:29:57 +02:00
Sara Arjona ac88fe5b13 NOBUG: Add upgrade notes 2025-04-17 14:29:57 +02:00
Tasio 6d522be2cf MDL-85222 themes: Remove grey zebra-striping background on reports
Only removing the grey background in small sceens when
the table is displayed as an accordion

Co-authored-by: Mikel Martín Corrales <mikel@moodle.com>
2025-04-17 14:16:16 +02:00
Paul Holden 6f28ea370d MDL-84298 mod_assign: target only first label for grade popout button. 2025-04-17 10:52:39 +07:00
Huong Nguyen 4a37e4438a Merge branch 'MDL-84625-M500_close-recordset-in-core_analytics-model-add_prediction_ids' of https://github.com/ziegenberg/moodle into MOODLE_500_STABLE 2025-04-17 10:27:50 +07:00
Huong Nguyen 40b6c3233c Merge branch '83713-javascript-error-xml-grades-import-500' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_500_STABLE 2025-04-17 10:11:57 +07:00
Dagoberto Robayo 2a48472266 MDL-84232 mod_quiz: Avoid recover grades in quiz view page
- If Recover grades default is not enabled, quiz grades should not be recover.
2025-04-17 08:39:15 +07:00
James C 49eccd6af2 MDL-83262 course: Refresh all-sections toggler on section delete 2025-04-17 12:49:52 +12:00
Paul Holden 8968b682be MDL-85208 core: switch to ARIA attribute to label table headings.
Since ad14d58d visually hidden text within tables was displayed as
block elements, which introduced artificial line breaks in headings
for column names and sorting icons.

Co-authored-by: Mikel Martín <mikel@moodle.com>
2025-04-16 21:25:05 +01:00
Julien Boulen 388d53c3fe MDL-83713 form: Fix javascript selector on file picker
Co-authored-by: Meirza <meirza.arson@moodle.com>
2025-04-16 16:46:38 +02:00
Paul Holden a5588f890e MDL-84820 moodlenet: correct activity modal icon size/alignment. 2025-04-16 15:24:59 +02:00
Amaia Anabitarte c06bf3b038 MDL-85170 mod_choice: Remove the unnecessary ul closing tag 2025-04-16 15:12:14 +02:00
Sara Arjona 5a3e26b0f2 Merge branch 'MDL-82132-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-16 14:55:05 +02:00
Leon Stringer 2b05496629 MDL-83195 mod_assign: Individual grade release
Fix pushing individual grades into the gradebook (as opposed to the
batch release of grades) when "Allow partial release of grades while
marking anonymously" is enabled.

This change reworks MDL-73626's fix for the same issue for releasing
multiple grades in a batch operation.
2025-04-16 09:39:37 +07:00
Paul Holden e2f4f23f34 MDL-82132 user: less restrictive returning first/lastname details.
The `viewfullnames` capability check was overeager in restricting
the inclusion of user first and lastname properties in the returned
structure. Especially given that the same data was almost always
present in the fullname property of the same structure.
2025-04-15 16:05:39 +01:00
Paul Holden 5a28a54627 MDL-82132 user: re-factor code for generating dummy user fullname. 2025-04-15 16:05:28 +01:00
Sara Arjona 1e3f359acf Merge branch 'MDL-84149-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-15 16:44:58 +02:00
Paul Holden 14bf5bd303 MDL-84140 course: more resilient check for activity footer component. 2025-04-15 16:31:14 +02:00
Paul Holden 803b561f80 MDL-83990 course: ensure course start/end dates set in external call. 2025-04-15 16:18:40 +02:00
Paul Holden 2bafdb41ab MDL-83537 check: confirm presence of instance action link. 2025-04-15 16:09:22 +02:00
Jun Pataleta 18a588063e Merge branch 'MDL-83979-url-always-proxy' of https://github.com/brendanheywood/moodle into MOODLE_500_STABLE 2025-04-15 20:38:56 +08:00
Sara Arjona d5c3f2325d Merge branch 'MDL-55034-500' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-15 13:36:44 +02:00
Huong Nguyen afc530a43f Merge branch 'MDL-85207-500' of https://github.com/sarjona/moodle into MOODLE_500_STABLE 2025-04-15 18:30:34 +07:00
Paul Holden 1ba74349e7 MDL-78381 course: observe default "showactivitydates" in external call. 2025-04-15 11:36:49 +02:00
Paul Holden 0d9d1ff504 MDL-80337 availability: more robust checking for plugin class presence.
Co-authored-by: Dustin Brisebois <dustin.brisebois@lambdasolutions.net>
2025-04-15 11:30:30 +02:00
Sara Arjona fae86af494 MDL-85207 glossary: Add missing step for autolink behat test 2025-04-15 10:34:37 +02:00
Paul Holden e1c750b49d MDL-84149 gradereport_grader: better support for collapse preferences.
The privacy provider is now resilient against missing courses, and also
supports retrieving preferences from multiple courses for the user.
2025-04-15 07:32:15 +01:00
Huong Nguyen 11a31a6b2c Merge branch 'MDL-85179-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Huong Nguyen 68cdd9d50c Merge branch 'MDL-85195-500' of https://github.com/lucaboesch/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona e5b9a12966 Merge branch 'MDL-62230' of https://github.com/paulholden/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona 033447ee87 Merge branch 'MDL-81454-main' of https://github.com/daniil-berg/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona 7195df2ca1 Merge branch 'MDL-83550-main' of https://github.com/andrewgos/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona 17f0b61b1d Merge branch 'MDL-78886-main' of https://github.com/mwehr/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona bf943db69e Merge branch 'MDL-66584-master' of https://github.com/danghieu1407/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona 3b62816190 Merge branch 'MDL-84833-main' of https://github.com/ferranrecio/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona c9defe656a Merge branch 'MDL-79464-main' of https://github.com/mihailges/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Sara Arjona cc73f24d4f Merge branch 'MDL-84937' of https://github.com/jfederico/moodle into MOODLE_500_STABLE 2025-04-15 08:31:55 +02:00
Wehr Mario f098bcde4f MDL-78886 assignfeedback_editpdf: Fix broken next page button in PDFView
Credits go to Cédric Gerbault cdgerbault@gmail.com for providing the fix.
2025-04-15 08:31:53 +02:00
ferran 80af23cdd3 MDL-84833 course: completion feedback messages 2025-04-15 08:31:53 +02:00
jfederico 26f7f7ef21 MDL-84937 mdl_bigbluebuttonbn: Hide Settings for RecordingsOnly 2025-04-15 08:31:52 +02:00
Paul Holden 6a462b63f1 MDL-55034 blog: update external blog deletion to not leak sesskey. 2025-04-14 17:32:29 +01:00
Paul Holden ad48d8ee81 MDL-85202 core: update list of stale files for 5.0 release. 2025-04-14 17:07:59 +01:00
ferran 377e0b4e46 MDL-85107 calendar: fix humandate year display 2025-04-14 12:46:01 +02:00
Luca Bösch 561842d7fe MDL-85195 block_myoverview: colour the button as in Bootstrap 4. 2025-04-14 11:54:00 +02:00
Luca Bösch f02a3572e2 MDL-85179 mod_data: colour the buttons upon creation as in Bootstrap 4. 2025-04-14 11:36:09 +02:00
Daniel Ziegenberg f721c97a19 MDL-84625 analytics: close recordset when it's not needed anymore
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2025-04-14 10:05:36 +02:00
Jun Pataleta 6f6b960cf8 MDL-85187 upgrade: Add the 5.0.0 separation line to all upgrade scripts 2025-04-14 09:32:14 +07:00
James C 4e6310fbe8 MDL-84520 course: CM anchor scrolls to specified CM 2025-04-14 12:19:07 +12:00
Alec Gullon 7f708eaff9 MDL-79464 mod_assign: Limit user navigation if grading fails validation 2025-04-10 16:27:24 +08:00
Daniil Fajnberg b41bf2f579 MDL-81454 core: Remove incorrect @property-read annotation 2025-04-09 08:59:59 +02:00
danghieu1407 d792c4916a MDL-66584 qtype_ddimageortext: Move JSON data to data-attribute 2025-03-25 16:48:52 +07:00
Andrew Gosali f846c47ecf MDL-83550 gradingform_rubric: fix submit no grade when remark disabled 2025-03-17 14:49:35 +07:00
Paul Holden 0d487fd8de MDL-62230 mod_feedback: define exporter format for name/presentation. 2025-03-04 14:12:56 +00:00
Brendan Heywood edea4a41af MDL-83979 repository_url: Always use the proxy for url downloads 2024-12-11 13:35:01 +11:00
2427 changed files with 34003 additions and 9368 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ jobs:
chunk=$(((($count % $chunks)) + 1))
echo "$testname $testfile" >> ./chunk_$chunk.txt
done < <(grep "function test_" "${testfile}" | sed -r "s/^.*function (test_[a-zA-Z0-9_]+).*/\1/")
done < <(find . -name "*_test.php")
done < <(find . -name "*_test.php" -not -path "*/fixtures/*")
# Generate the matrix to run tests.
echo "matrix=$(ls -1 chunk_*.txt | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
echo "$count individual tests collected in $chunks files"
+3 -3
View File
@@ -19,7 +19,7 @@ env:
jobs:
Grunt:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Checking out code
@@ -61,12 +61,12 @@ jobs:
matrix:
include:
# MySQL builds always run with the lowest PHP supported version.
- os: ubuntu-22.04
- os: ubuntu-24.04
php: 8.2
extensions:
db: mysqli
# PostgreSQL builds always run with the highest PHP supported version.
- os: ubuntu-22.04
- os: ubuntu-24.04
php: 8.4
db: pgsql
+41 -2
View File
@@ -58,6 +58,31 @@ module.exports = grunt => {
}) + "\n");
};
/**
* Extracts ignore entries from a local ignore file.
*
* @param {string} componentPath the file path to the component, relative to the code base directory
* @param {string} ignoreFilePath the path to the ignore file
* @return {array} array of ignore paths to be included in the global ignore files
*/
const getEntriesFromLocalIgnoreFile = (componentPath, ignoreFilePath) => {
const ignorePaths = [];
if (grunt.file.exists(ignoreFilePath)) {
const ignoreFile = grunt.file.read(ignoreFilePath);
const entries = ignoreFile.split('\n');
entries.forEach(entry => {
entry = entry.trim();
if (entry.length > 0 && !entry.startsWith('#') && !entry.startsWith('!')) {
while (entry.startsWith('/')) {
entry = entry.substring(1);
}
ignorePaths.push(componentPath + '/' + entry);
}
});
}
return ignorePaths;
};
/**
* Generate ignore files (utilising thirdpartylibs.xml data)
*/
@@ -67,6 +92,20 @@ module.exports = grunt => {
// An array of paths to third party directories.
const thirdPartyPaths = ComponentList.getThirdPartyPaths();
const localStylelintIgnorePaths = [];
const localEslintIgnorePaths = [];
ComponentList.getComponentPaths(process.cwd() + '/').forEach(componentPath => {
const localEslintIgnorePath = process.cwd() + '/' + componentPath + '/.eslintignore';
const localEslintIgnoreEntries = getEntriesFromLocalIgnoreFile(componentPath, localEslintIgnorePath);
if (localEslintIgnoreEntries.length > 0) {
localEslintIgnorePaths.push(...localEslintIgnoreEntries);
}
const localStylelintIgnorePath = process.cwd() + '/' + componentPath + '/.stylelintignore';
const localStylelintIgnoreEntries = getEntriesFromLocalIgnoreFile(componentPath, localStylelintIgnorePath);
if (localStylelintIgnoreEntries.length > 0) {
localStylelintIgnorePaths.push(...localStylelintIgnoreEntries);
}
});
// Generate .eslintignore.
const eslintIgnores = [
@@ -77,7 +116,7 @@ module.exports = grunt => {
// Ignore all yui/src meta directories and build directories.
'*/**/yui/src/*/meta/',
'*/**/build/',
].concat(thirdPartyPaths);
].concat(thirdPartyPaths).concat(localEslintIgnorePaths);
grunt.file.write('.eslintignore', eslintIgnores.join('\n') + '\n');
// Generate .stylelintignore.
@@ -88,7 +127,7 @@ module.exports = grunt => {
'theme/classic/style/moodle.css',
'jsdoc/styles/*.css',
'admin/tool/componentlibrary/hugo/dist/css/docs.css',
].concat(thirdPartyPaths);
].concat(thirdPartyPaths).concat(localStylelintIgnorePaths);
grunt.file.write('.stylelintignore', stylelintIgnores.join('\n') + '\n');
phpcsIgnore(thirdPartyPaths);
+7
View File
@@ -0,0 +1,7 @@
issueNumber: MDL-87443
notes:
core:
- message: >-
There is a new Behat `toast_message` named selector to more easily
assert the presence of Toast messages on the page
type: improved
+254
View File
@@ -6,6 +6,260 @@ More detailed information on key changes can be found in the [Developer update n
The format of this change log follows the advice given at [Keep a CHANGELOG](https://keepachangelog.com).
## 5.0.5
### core
#### Changed
- `\core\output\core_renderer::confirm()`'s `$displayoptions` parameter now also accepts a `headinglevel` option that developers can use to specify the heading level of the confirmation's heading. If not specified, the confirmation heading will be rendered in an `h4` tag.
For more information see [MDL-87694](https://tracker.moodle.org/browse/MDL-87694)
### core_question
#### Fixed
- In order to prevent re-use of question version numbers after a version is deleted, the `nextversion` column was added to `question_bank_entries`. This serves as a counter incremented each time a version is created.
Do not query this field directly. Instead use `core_question\versions::get_next_version()` to read the value, which will initialise it based on the existing versions if it is not set yet. By default, it will increment the version number automatically, unless you pass `increment: false`. Because of this, it is advisable to call it inside a transaction, that is only committed after the version number is used in a `question_versions` record.
For more information see [MDL-86798](https://tracker.moodle.org/browse/MDL-86798)
## 5.0.4
### core
#### Added
- Added clean_string() that prevents double escaping in Mustache templates
For more information see [MDL-87066](https://tracker.moodle.org/browse/MDL-87066)
#### Changed
- The Hook Manager now uses localcache instead of caching via MUC.
For more information see [MDL-87107](https://tracker.moodle.org/browse/MDL-87107)
#### Fixed
- `restore_qtype_plugin::unset_excluded_fields` now returns the modified questiondata structure,
in order to support structures that contain arrays.
If your qtype plugin overrides `restore_qtype_plugin::remove_excluded_question_data` without
calling the parent method, you may need to modify your overridden method to use the returned
value.
For more information see [MDL-85975](https://tracker.moodle.org/browse/MDL-85975)
- When responding to pcntl signals, call existing signal handlers.
For more information see [MDL-87079](https://tracker.moodle.org/browse/MDL-87079)
### core_completion
#### Changed
- The `completion_info::clear_criteria` method takes an optional `$removetypecriteria` to determine whether to remove course type criteria from other courses that refer to the current course
For more information see [MDL-86332](https://tracker.moodle.org/browse/MDL-86332)
### core_course
#### Added
- The external function `core_course_get_course_contents` now includes the `candisplay` property for each returned module. If this is false, the module should not be displayed on the course page (for example, for question banks).
For more information see [MDL-85405](https://tracker.moodle.org/browse/MDL-85405)
### core_group
#### Added
- `groups_print_activity_menu()` and `groups_get_activity_group()` now include an additional `$participationonly` parameter, which is true by default. This can be set false when we want the user to be able to select a non-participation group within an activity, for example if a teacher wants to filter assignment submissions by non-participation groups. It should never be used when the menu is displayed to students, as this may allow them to participate using non-participation groups. Non-participation groups are labeled as such.
For more information see [MDL-81514](https://tracker.moodle.org/browse/MDL-81514)
### mod_glossary
#### Added
- Function mod_glossary_rating_can_see_item_ratings is now implemented for checking permissions to view ratings.
For more information see [MDL-86960](https://tracker.moodle.org/browse/MDL-86960)
## 5.0.3
### core
#### Added
- The Behat `::execute()` method now accepts an array-style callable in addition to the string `classname::method` format.
The following formats are now accepted:
```php
// String format:
$this->execute('behat_general::i_click_on', [...]);
// Array format:
$this->execute([behat_general::class,' i_click_on'], [...]);
```
For more information see [MDL-86231](https://tracker.moodle.org/browse/MDL-86231)
- The `\externallib_advanced_testcase` has been replaced by `\core_external\tests\externallib_testcase` and is now autoloadable.
For more information see [MDL-86283](https://tracker.moodle.org/browse/MDL-86283)
#### Changed
- The `\core\output\local\dropdown\dialog` class constructor now accepts a `$definition['autoclose']` parameter to define autoclose behaviour of the element
For more information see [MDL-86015](https://tracker.moodle.org/browse/MDL-86015)
- The default PHPUnit configuration now enables the following properties, ensuring PHP warnings will cause test failures (restoring pre-PHPUnit version 10 behaviour):
* `failOnDeprecation`
* `failOnWarning`
For more information see [MDL-86311](https://tracker.moodle.org/browse/MDL-86311)
### core_badges
#### Added
- A number of new static methods have been added to `core_badges\backpack_api` to support the new Canvas Credentials backpack provider. These methods allow you to retrieve lists of providers and regions, check if Canvas Credentials fields should be displayed, and get a region URL or API URL based on a given region ID. The new methods include `get_providers`, `get_regions`, `display_canvas_credentials_fields`, `get_region_url`, `get_region_api_url`, `get_regionid_from_url`, and `is_canvas_credentials_region`.
For more information see [MDL-86174](https://tracker.moodle.org/browse/MDL-86174)
### core_courseformat
#### Added
- Add a new modinfo::get_instance_of() to retrieve an instance of a cm via its name and instance id. Add a new modinfo::sort_cm_array() to sort an array of cms in their order of appearance in the course page. Replaces calls to get_course_and_cm_from_instance() and get_instances_of() whenever it was just used to retrieve a single instance of a cm.
For more information see [MDL-86021](https://tracker.moodle.org/browse/MDL-86021)
### core_grades
#### Added
- New 'is_gradable()' function has been created to return whether the item has any gradeitem that is GRADE_TYPE_VALUE or GRADE_TYPE_SCALE.
For more information see [MDL-85837](https://tracker.moodle.org/browse/MDL-85837)
- - New grade_item::is_gradable function has been created to return whether the grade item is GRADE_TYPE_VALUE or GRADE_TYPE_SCALE.
For more information see [MDL-86173](https://tracker.moodle.org/browse/MDL-86173)
### core_message
#### Added
- The `contexturl` property to `\core\message\message` instances can now contain `\core\url` values in addition to plain strings
For more information see [MDL-83080](https://tracker.moodle.org/browse/MDL-83080)
### theme_boost
#### Added
- Tables affected by unwanted styling (e.g., borders) from the reset of Bootstrap _reboot.scss styles can now opt out and preserve the original behavior by adding the styleless .table-reboot class.
For more information see [MDL-86548](https://tracker.moodle.org/browse/MDL-86548)
## 5.0.2
### core
#### Added
- Add a new method has_valid_group in \core\report_helper that will return true or false depending if the user has a valid group. This is mainly false in case the user is not in any group in SEPARATEGROUPS. Used in report_log and report_loglive
For more information see [MDL-84464](https://tracker.moodle.org/browse/MDL-84464)
#### Changed
- The `\core\attribute\deprecated` attribute constructor `$replacement` parameter now defaults to null, and can be omitted
For more information see [MDL-84531](https://tracker.moodle.org/browse/MDL-84531)
- Added a new `\core\deprecation::emit_deprecation()` method which should be used in places where a deprecation is known to occur. This method will throw debugging if no deprecation notice was found, for example:
```php
public function deprecated_method(): void {
\core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
}
```
For more information see [MDL-85897](https://tracker.moodle.org/browse/MDL-85897)
### core_message
#### Added
- The web service `core_message_get_member_info` additionally returns `cancreatecontact` which is a boolean value for a user's permission to add a contact.
For more information see [MDL-72123](https://tracker.moodle.org/browse/MDL-72123)
### core_question
#### Added
- The question backup API has been improved to only include questions that are actually used or owned by backed up activities.
Any activities that use question references should be supported automatically. Activities that use *question set references* (for example, random quiz questions) need to add a call to `backup_question_set_reference_trait::annotate_set_reference_bank_entries()` alongside the call to `backup_question_set_reference_trait::add_question_set_references()` in their backup step. See `backup_quiz_activity_structure_step::define_structure()` for an example.
For more information see [MDL-41924](https://tracker.moodle.org/browse/MDL-41924)
#### Changed
- `core_question_search_shared_banks` will now search all question banks, not just those outside the current course.
This makes the service usable in cases outside of the current "Switch banks" UI, which require searching all banks on the site.
It also makes the autocomplete in the "Switch banks" UI more consistent, as it was previously excluding some of the banks listed in the UI (Question banks in this course), but not others (Recently viewed question banks).
This change has also adds a 'requiredcapabilties' parameter to the function, which accepts an list of abbreviated capabilities for checking access against question banks before they are returned.
For more information see [MDL-85069](https://tracker.moodle.org/browse/MDL-85069)
- `question_edit_contexts` now only considers the provided context when checking permissions, rather than all parent contexts as well. As questions now exist only at the activity module context level, permissions can be inherited or overridden as normal for each question bank. The previous pattern of checking for a permission in any parent context circumvented the override system, and no longer makes sense.
For more information see [MDL-85754](https://tracker.moodle.org/browse/MDL-85754)
## 5.0.1
### core
#### Added
- - Added is_site_registered_in_hub method in lib/classes/hub/api.php to
check if the site is registered or not.
- Added get_secret method in lib/classes/hub/registration.php to get site's secret.
For more information see [MDL-83448](https://tracker.moodle.org/browse/MDL-83448)
- Added a new optional param to adhoc_task_failed and scheduled_task_failed to allow skipping log finalisation when called from a separate task.
For more information see [MDL-84442](https://tracker.moodle.org/browse/MDL-84442)
- There is a new `core/page_title` Javascript module for manipulating the current page title
For more information see [MDL-84804](https://tracker.moodle.org/browse/MDL-84804)
### core_auth
#### Added
- A new method called `get_additional_upgrade_token_parameters` has been added to `oauth2_client` class. This will allow custom clients to override this one and add their extra parameters for upgrade token request.
For more information see [MDL-80380](https://tracker.moodle.org/browse/MDL-80380)
### core_question
#### Fixed
- The unit test repeated\_restore\_test::test\_restore\_course\_with\_same\_stamp\_questions was passing incorrectly on 5.x for question types that use answers.
Maintainers of third-party question types may want to re-run the test with the fix in place, or if they have copied parts of this test as the basis of a test in their own plugin, review the changes and see if they should be reflected in their own test.
For more information see [MDL-85556](https://tracker.moodle.org/browse/MDL-85556)
### core_user
#### Added
- New method `\core_user::get_dummy_fullname(...)` for returning dummy user fullname comprised of configured name fields only
For more information see [MDL-82132](https://tracker.moodle.org/browse/MDL-82132)
## 5.0
### core
+4
View File
@@ -118,6 +118,10 @@ foreach ($settingspage->children as $childpage) {
}
$outputhtml .= html_writer::tag('div', '<!-- -->', array('class' => 'clearer'));
$outputhtml .= $setting->output_html($data);
if ($childpage->has_dependencies()) {
$context = ['dependencies' => json_encode($childpage->get_dependencies_for_javascript())];
echo $OUTPUT->render_from_template('core_admin/settings_showhide', $context);
}
}
$outputhtml .= html_writer::end_tag('fieldset');
}
@@ -0,0 +1,74 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\admin;
use admin_setting;
/**
* Render a notification as part of other admin settings.
*
* @package core_admin
* @subpackage admin
* @copyright 2025 Matt Porritt <matt.porritt@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_setting_notification extends admin_setting {
/**
* Constructor.
*
* @param string $name The name of the setting.
* @param string $notification The notification to display.
* @param string $type The type of notification.
* @param bool $cancelable Whether the notification can be canceled.
*/
public function __construct(
string $name,
/** @var string The notification to display. */
protected string $notification,
/** @var string The type of notification. */
protected string $type = 'info',
/** @var bool Whether the notification can be canceled. */
protected bool $cancelable = false
) {
$this->nosave = true;
parent::__construct($name, '', '', '');
}
#[\Override]
public function get_setting(): bool {
return true;
}
#[\Override]
public function get_defaultsetting(): bool {
return true;
}
#[\Override]
public function write_setting($data): string {
// Do not write any setting.
return '';
}
#[\Override]
public function output_html($data, $query = ''): string {
global $OUTPUT;
return $OUTPUT->notification($this->notification, $this->type, $this->cancelable);
}
}
+18 -9
View File
@@ -69,7 +69,7 @@ if ($options['enablelater']) {
}
$time = time() + ($options['enablelater']*60);
set_config('maintenance_later', $time);
set_config('maintenance_later', $time, null, true);
echo get_string('clistatusenabledlater', 'admin', userdate($time))."\n";
return 0;
@@ -77,23 +77,32 @@ if ($options['enablelater']) {
} else if ($options['enable']) {
if (file_exists("$CFG->dataroot/climaintenance.html")) {
// The maintenance is already enabled, nothing to do.
} else {
enable_cli_maintenance_mode();
exit(0);
}
enable_cli_maintenance_mode();
set_config('maintenance_enabled', 'cli mode', null, true);
if (isset($CFG->maintenance_later)) {
unset_config('maintenance_later', null, true);
}
set_config('maintenance_enabled', 0);
unset_config('maintenance_later');
echo get_string('sitemaintenanceoncli', 'admin')."\n";
exit(0);
} else if ($options['enableold']) {
set_config('maintenance_enabled', 1);
unset_config('maintenance_later');
set_config('maintenance_enabled', 1, null, true);
if (isset($CFG->maintenance_later)) {
unset_config('maintenance_later', null, true);
}
echo get_string('sitemaintenanceon', 'admin')."\n";
exit(0);
} else if ($options['disable']) {
set_config('maintenance_enabled', 0);
unset_config('maintenance_later');
if ($CFG->maintenance_enabled !== '0') {
set_config('maintenance_enabled', 0, null, true);
}
if (isset($CFG->maintenance_later)) {
unset_config('maintenance_later', null, true);
}
if (file_exists("$CFG->dataroot/climaintenance.html")) {
unlink("$CFG->dataroot/climaintenance.html");
}
+1
View File
@@ -24,6 +24,7 @@
*/
define('CLI_SCRIPT', true);
define('IGNORE_COMPONENT_CACHE', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
+5 -5
View File
@@ -125,11 +125,6 @@ if ($options['list']) {
exit(0);
}
if (moodle_needs_upgrading()) {
mtrace("Moodle upgrade pending, cannot manage tasks.");
exit(1);
}
if ($disable = $options['disable']) {
if (!$task = \core\task\manager::get_scheduled_task($disable)) {
mtrace("Task '$disable' not found");
@@ -157,6 +152,11 @@ if ($disable = $options['disable']) {
exit(1);
}
} else if ($execute = $options['execute']) {
if (moodle_needs_upgrading()) {
mtrace("Moodle upgrade pending, cannot execute tasks.");
exit(1);
}
if (!$task = \core\task\manager::get_scheduled_task($execute)) {
mtrace("Task '$execute' not found");
exit(1);
+3 -3
View File
@@ -158,13 +158,13 @@ if ($options['plugins']) {
if (is_null($plugin)) {
cli_writeln('Unknown plugin: ' . $component);
} else {
$pluginstring = $plugin->component . "\t" . $plugin->displayname;
$pluginstring = $component . "\t" . $plugin->displayname;
if ($pluginman->can_uninstall_plugin($plugin->component)) {
if ($pluginman->can_uninstall_plugin($component)) {
if ($options['run']) {
cli_writeln('Uninstalling: ' . $pluginstring);
$progress = new progress_trace_buffer(new text_progress_trace(), true);
$pluginman->uninstall_plugin($plugin->component, $progress);
$pluginman->uninstall_plugin($component, $progress);
$progress->finished();
cli_write($progress->get_buffer());
} else {
+412
View File
@@ -3835,6 +3835,7 @@
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="optional"/>
<PHP_EXTENSION name="exif" level="optional"/>
<PHP_EXTENSION name="filter" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
@@ -4411,6 +4412,7 @@
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
<PHP_EXTENSION name="filter" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
@@ -4607,6 +4609,7 @@
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
<PHP_EXTENSION name="filter" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
@@ -4716,6 +4719,7 @@
<VENDOR name="mysql" version="8.4" />
<VENDOR name="postgres" version="14" />
<VENDOR name="mssql" version="14.0" />
<VENDOR name="auroramysql" version="8.0" />
</DATABASE>
<PHP version="8.2.0" level="required">
</PHP>
@@ -4801,6 +4805,7 @@
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
<PHP_EXTENSION name="filter" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
@@ -4895,6 +4900,413 @@
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_async_backup" level="recommended">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_aurora_version" level="optional">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="5.1" requires="4.2.3">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="10.11.0" />
<VENDOR name="mysql" version="8.4" />
<VENDOR name="postgres" version="15" />
<VENDOR name="mssql" version="14.0" />
<VENDOR name="auroramysql" version="8.0" />
</DATABASE>
<PHP version="8.2.0" level="required">
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="required">
<FEEDBACK>
<ON_ERROR message="mbstringrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="required">
<FEEDBACK>
<ON_ERROR message="opensslrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlreader" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="required">
<FEEDBACK>
<ON_ERROR message="intlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
<PHP_EXTENSION name="filter" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="zend.exception_ignore_args" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingzendexceptionignoreargs" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbstorageengine" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_unoconv_version" level="optional">
<FEEDBACK>
<ON_CHECK message="unoconvwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_format" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfileformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_per_table" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfilepertable" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_large_prefix" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddblargeprefix" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_is_https" level="optional">
<FEEDBACK>
<ON_CHECK message="ishttpswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_incomplete_unicode_support" level="optional">
<FEEDBACK>
<ON_CHECK message="incompleteunicodesupport" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_sixtyfour_bits" level="required">
<FEEDBACK>
<ON_ERROR message="sixtyfourbitsrequired" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_max_input_vars" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_admin_dir_usage" level="optional">
<FEEDBACK>
<ON_CHECK message="iscustomadminwarnings" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_xmlrpc_usage" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mod_assignment" level="required">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_db_prefix_length" level="required">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_async_backup" level="recommended">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_aurora_version" level="optional">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="5.2" requires="4.4">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="10.11.0" />
<VENDOR name="mysql" version="8.4" />
<VENDOR name="postgres" version="16" />
<VENDOR name="mssql" version="15.0" />
<VENDOR name="auroramysql" version="8.0" />
</DATABASE>
<PHP version="8.3.0" level="required">
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="required">
<FEEDBACK>
<ON_ERROR message="mbstringrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="required">
<FEEDBACK>
<ON_ERROR message="opensslrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlreader" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="required">
<FEEDBACK>
<ON_ERROR message="intlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
<PHP_EXTENSION name="filter" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="zend.exception_ignore_args" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingzendexceptionignoreargs" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK function="\core\environment::check_composer_dependencies_installed" level="optional" />
<CUSTOM_CHECK function="\core\environment::check_composer_developer_dependencies_not_installed" level="optional" />
<CUSTOM_CHECK function="\core\environment::check_composer_dependencies_optimised" level="optional" />
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbstorageengine" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_unoconv_version" level="optional">
<FEEDBACK>
<ON_CHECK message="unoconvwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_format" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfileformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_per_table" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfilepertable" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_large_prefix" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddblargeprefix" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_is_https" level="optional">
<FEEDBACK>
<ON_CHECK message="ishttpswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_incomplete_unicode_support" level="optional">
<FEEDBACK>
<ON_CHECK message="incompleteunicodesupport" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_sixtyfour_bits" level="required">
<FEEDBACK>
<ON_ERROR message="sixtyfourbitsrequired" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_max_input_vars" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_admin_dir_usage" level="optional">
<FEEDBACK>
<ON_CHECK message="iscustomadminwarnings" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_xmlrpc_usage" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mod_assignment" level="required">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_db_prefix_length" level="required">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_async_backup" level="recommended">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_aurora_version" level="optional">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+1 -1
View File
@@ -121,7 +121,7 @@ $table = new html_table();
$table->head = [get_string('filter'), get_string('isactive', 'filters'),
get_string('order'), get_string('applyto', 'filters'), get_string('settings'), get_string('uninstallplugin', 'core_admin')];
$table->colclasses = array ('leftalign', 'leftalign', 'centeralign', 'leftalign', 'leftalign', 'leftalign');
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$table->id = 'filterssetting';
$table->data = [];
+16 -3
View File
@@ -916,8 +916,14 @@ if (empty($CFG->disabledevlibdirscheck) && (is_dir($CFG->dirroot.'/vendor') || i
// Check if the site is being foced onto ssl.
$overridetossl = !empty($CFG->overridetossl);
// Check if moodle campaign content setting is enabled or not.
$showcampaigncontent = !isset($CFG->showcampaigncontent) || $CFG->showcampaigncontent;
if (defined('BEHAT_SITE_RUNNING') && BEHAT_SITE_RUNNING) {
// We need to add this in order to be able to verify the showcampaigncontent setting behaviour during behat tests.
$showcampaigncontent = get_config('core', 'showcampaigncontent');
$showcampaigncontent = $showcampaigncontent === 'true';
} else {
// Check if moodle campaign content setting is enabled or not.
$showcampaigncontent = !isset($CFG->showcampaigncontent) || $CFG->showcampaigncontent;
}
// Encourage admins to enable the user feedback feature if it is not enabled already.
$showfeedbackencouragement = empty($CFG->enableuserfeedback);
@@ -931,6 +937,13 @@ $result = new environment_results('custom_checks');
$result = check_xmlrpc_usage($result);
$xmlrpcwarning = !is_null($result) ? get_string($result->getFeedbackStr(), 'admin') : '';
// Check whether MoodleNet features are enabled and warn about removal.
$moodlenetwarning = '';
$moodlenetenabled = get_config('tool_moodlenet', 'enablemoodlenet');
if ($moodlenetenabled) {
$moodlenetwarning = get_string('moodlenetremovalwarning', 'admin');
}
admin_externalpage_setup('adminnotifications');
$output = $PAGE->get_renderer('core', 'admin');
@@ -940,4 +953,4 @@ echo $output->admin_notifications_page($maturity, $insecuredataroot, $errorsdisp
$registered, $cachewarnings, $eventshandlers, $themedesignermode, $devlibdir,
$mobileconfigured, $overridetossl, $invalidforgottenpasswordurl, $croninfrequent,
$showcampaigncontent, $showfeedbackencouragement, $servicesandsupportcontent,
$xmlrpcwarning);
$xmlrpcwarning, $moodlenetwarning);
+4 -4
View File
@@ -98,10 +98,10 @@
echo $OUTPUT->header();
?>
<form method="post" action="index.php">
<table align="center" width="635" class="generaltable" border="0" cellpadding="5" cellspacing="0">
<table align="center" width="635" class="generaltable table table-hover" border="0" cellpadding="5" cellspacing="0">
<tr>
<td class="generalboxcontent">
<table cellpadding="9" cellspacing="0" >
<table cellpadding="9" cellspacing="0" class="table-reboot">
<tr valign="top">
<td colspan="2" class="header"><?php print_string('aboutyourhost', 'mnet'); ?></td>
</tr>
@@ -119,10 +119,10 @@
</table>
</form>
<form method="post" action="index.php">
<table align="center" width="635" class="generaltable" border="0" cellpadding="5" cellspacing="0">
<table align="center" width="635" class="generaltable table table-hover" border="0" cellpadding="5" cellspacing="0">
<tr>
<td class="generalboxcontent">
<table cellpadding="9" cellspacing="0" >
<table cellpadding="9" cellspacing="0" class="table-reboot">
<tr valign="top">
<td colspan="2" class="header"><?php print_string('expireyourkey', 'mnet'); ?></td>
</tr>
+1 -1
View File
@@ -54,7 +54,7 @@ $table = new html_table();
$table->head = array($txt->name, $txt->version, $txt->uninstall, $txt->settings);
$table->colclasses = array('mdl-left', 'mdl-align', 'mdl-align', 'mdl-align');
$table->data = array();
$table->attributes['class'] = 'manageplagiarismtable generaltable';
$table->attributes['class'] = 'manageplagiarismtable generaltable table table-hover';
// Iterate through auth plugins and add to the display table.
$authcount = count($plagiarismplugins);
+2
View File
@@ -23,6 +23,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('IGNORE_COMPONENT_CACHE', true);
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
+7 -5
View File
@@ -34,8 +34,10 @@ admin_externalpage_setup('registrationmoodleorg');
$unregistration = optional_param('unregistration', false, PARAM_BOOL);
$confirm = optional_param('confirm', false, PARAM_BOOL);
// Consider the site 'registered' if records exist locally and at the hub.
$siteisregistered = \core\hub\registration::is_registered() && core\hub\api::is_site_registered_in_hub();
if ($unregistration && \core\hub\registration::is_registered()) {
if ($unregistration && $siteisregistered) {
if ($confirm) {
require_sesskey();
\core\hub\registration::unregister(false, false);
@@ -60,7 +62,7 @@ if (!$returnurl = optional_param('returnurl', null, PARAM_LOCALURL)) {
$returnurl = $isinitialregistration ? '/admin/index.php' : '/admin/registration/index.php';
}
$siteregistrationform = new \core\hub\site_registration_form();
$siteregistrationform = new \core\hub\site_registration_form(null, ['registered' => $siteisregistered]);
$siteregistrationform->set_data(['returnurl' => $returnurl]);
if ($fromform = $siteregistrationform->get_data()) {
@@ -86,7 +88,7 @@ echo $OUTPUT->header();
// Current status of registration.
$notificationtype = \core\output\notification::NOTIFY_ERROR;
if (\core\hub\registration::is_registered()) {
if ($siteisregistered) {
$lastupdated = \core\hub\registration::get_last_updated();
if ($lastupdated == 0) {
$registrationmessage = get_string('pleaserefreshregistrationunknown', 'admin');
@@ -104,7 +106,7 @@ if (\core\hub\registration::is_registered()) {
}
// Heading.
if (\core\hub\registration::is_registered()) {
if ($siteisregistered) {
echo $OUTPUT->heading(get_string('registerwithmoodleorgupdate', 'core_hub'));
} else if ($isinitialregistration) {
echo $OUTPUT->heading(get_string('registerwithmoodleorgcomplete', 'core_hub'));
@@ -117,7 +119,7 @@ echo $renderer->moodleorg_registration_message();
$siteregistrationform->display();
if (\core\hub\registration::is_registered()) {
if ($siteisregistered) {
// Unregister link.
$unregisterhuburl = new moodle_url("/admin/registration/index.php", ['unregistration' => 1]);
echo html_writer::div(html_writer::link($unregisterhuburl, get_string('unregister', 'hub')), 'unregister mt-2');
+21 -4
View File
@@ -279,6 +279,7 @@ class core_admin_renderer extends plugin_renderer_base {
* @param bool $showfeedbackencouragement Whether the feedback encouragement content should be displayed or not.
* @param bool $showservicesandsupport Whether the services and support content should be displayed or not.
* @param string $xmlrpcwarning XML-RPC deprecation warning message.
* @param string $moodlenetwarning MoodleNet removal warning message.
*
* @return string HTML to output.
*/
@@ -288,7 +289,7 @@ class core_admin_renderer extends plugin_renderer_base {
$themedesignermode = false, $devlibdir = false, $mobileconfigured = false,
$overridetossl = false, $invalidforgottenpasswordurl = false, $croninfrequent = false,
$showcampaigncontent = false, bool $showfeedbackencouragement = false, bool $showservicesandsupport = false,
$xmlrpcwarning = '') {
$xmlrpcwarning = '', $moodlenetwarning = '') {
global $CFG;
$output = '';
@@ -313,6 +314,7 @@ class core_admin_renderer extends plugin_renderer_base {
$output .= $this->mobile_configuration_warning($mobileconfigured);
$output .= $this->forgotten_password_url_warning($invalidforgottenpasswordurl);
$output .= $this->mnet_deprecation_warning($xmlrpcwarning);
$output .= $this->moodlenet_removal_warning($moodlenetwarning);
$output .= $this->userfeedback_encouragement($showfeedbackencouragement);
$output .= $this->services_and_support_content($showservicesandsupport);
$output .= $this->campaign_content($showcampaigncontent);
@@ -1809,6 +1811,7 @@ class core_admin_renderer extends plugin_renderer_base {
$table = new html_table();
$table->id = 'plugins-control-panel';
$table->attributes['class'] = 'generaltable table table-striped table-hover';
$table->head = array(
get_string('displayname', 'core_plugin'),
get_string('version', 'core_plugin'),
@@ -2063,7 +2066,7 @@ class core_admin_renderer extends plugin_renderer_base {
get_string('status'),
);
$servertable->colclasses = array('centeralign name', 'centeralign info', 'leftalign report', 'leftalign plugin', 'centeralign status');
$servertable->attributes['class'] = 'table table-striped admintable environmenttable generaltable table-sm';
$servertable->attributes['class'] = 'table table-striped admintable environmenttable generaltable table-sm table-hover';
$servertable->id = 'serverstatus';
$serverdata = array('ok'=>array(), 'warn'=>array(), 'error'=>array());
@@ -2076,7 +2079,7 @@ class core_admin_renderer extends plugin_renderer_base {
get_string('status'),
);
$othertable->colclasses = array('aligncenter info', 'alignleft report', 'alignleft plugin', 'aligncenter status');
$othertable->attributes['class'] = 'table table-striped admintable environmenttable generaltable table-sm';
$othertable->attributes['class'] = 'table table-striped admintable environmenttable generaltable table-sm table-hover';
$othertable->id = 'otherserverstatus';
$otherdata = array('ok'=>array(), 'warn'=>array(), 'error'=>array());
@@ -2276,7 +2279,7 @@ class core_admin_renderer extends plugin_renderer_base {
public function moodleorg_registration_message() {
$a = new stdClass();
$a->moreinformation = '#id_sitestats'; // More information anchor.
$a->moodleapp = HUB_MOODLEORGHUBURL . '/solutions/moodle-app/';
$a->moodleapp = MOODLE_PRODUCTURL . '/solutions/moodle-app/';
$out = format_text(get_string('registerwithmoodleorginfo', 'core_hub', $a), FORMAT_MARKDOWN);
$out .= html_writer::link(
@@ -2325,6 +2328,20 @@ class core_admin_renderer extends plugin_renderer_base {
return $this->warning($xmlrpcwarning);
}
/**
* Display a warning about the removal of MoodleNet integration.
*
* @param string $moodlenetwarning The warning message
* @return string HTML to output.
*/
protected function moodlenet_removal_warning($moodlenetwarning) {
if (empty($moodlenetwarning)) {
return '';
}
return $this->warning($moodlenetwarning);
}
/**
* Renders the theme selector list.
*
+1 -1
View File
@@ -263,7 +263,7 @@ if (($action == 'edit') || ($action == 'new')) {
$table->colclasses = array('leftalign', 'centeralign', 'centeralign', 'centeralign', 'centeralign', 'centeralign');
$table->id = 'repositoriessetting';
$table->data = array();
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
// Get list of used plug-ins
$repositorytypes = repository::get_types();
+1 -1
View File
@@ -179,7 +179,7 @@ echo $OUTPUT->header();
<div>
<input type="hidden" name="sesskey" value="<?php p(sesskey()); ?>" />
<table class="generaltable generalbox groupmanagementtable boxaligncenter" summary="">
<table class="generaltable generalbox groupmanagementtable boxaligncenter table table-hover" summary="">
<tr>
<td id='existingcell'>
<p>
+2 -2
View File
@@ -228,7 +228,7 @@ if ($roleid) {
<form id="assignform" method="post" action="<?php echo $assignurl ?>"><div>
<input type="hidden" name="sesskey" value="<?php echo sesskey() ?>" />
<table id="assigningrole" summary="" class="admintable roleassigntable generaltable" cellspacing="0">
<table id="assigningrole" summary="" class="admintable roleassigntable generaltable table table-hover" cellspacing="0">
<tr>
<td id="existingcell">
<p><label for="removeselect"><?php print_string('extusers', 'core_role'); ?></label></p>
@@ -322,7 +322,7 @@ if ($roleid) {
$table->id = 'assignrole';
$table->head = array(get_string('role'), get_string('description'), get_string('userswiththisrole', 'core_role'));
$table->colclasses = array('leftalign role', 'leftalign', 'centeralign userrole');
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
if ($showroleholders) {
$table->headspan = array(1, 1, 2);
$table->colclasses[] = 'leftalign roleholder';
@@ -43,7 +43,7 @@ abstract class core_role_capability_table_base {
protected $id;
/** Added to the class="" attribute on output. */
protected $classes = array('rolecap table-hover');
protected $classes = ['rolecap table w-auto table-hover'];
/** Default number of capabilities in the table for the search UI to be shown. */
const NUM_CAPS_FOR_SEARCH = 12;
+1 -1
View File
@@ -153,7 +153,7 @@ require('managetabs.php');
$table = new html_table();
$table->colclasses = array('leftalign', 'leftalign', 'leftalign', 'leftalign');
$table->id = 'roles';
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$table->head = array(
get_string('role') . ' ' . $OUTPUT->help_icon('roles', 'core_role'),
get_string('description'),
+2 -4
View File
@@ -165,10 +165,8 @@ if (empty($SITE->fullname)) {
$PAGE->requires->js_call_amd('core_form/changechecker', 'watchFormById', ['adminsettings']);
if ($settingspage->has_dependencies()) {
$opts = [
'dependencies' => $settingspage->get_dependencies_for_javascript()
];
$PAGE->requires->js_call_amd('core/showhidesettings', 'init', [$opts]);
$context = ['dependencies' => json_encode($settingspage->get_dependencies_for_javascript())];
echo $OUTPUT->render_from_template('core_admin/settings_showhide', $context);
}
echo $OUTPUT->footer();
+18 -8
View File
@@ -32,19 +32,29 @@ if ($hassiteconfig) {
$providers->add(new admin_setting_heading('availableproviders',
get_string('availableproviders', 'core_ai'),
get_string('availableproviders_desc', 'core_ai')));
// Add call to action to add a new provider.
$providers->add(new \core_admin\admin\admin_setting_template_render(
name: 'addnewprovider',
templatename: 'core_ai/admin_add_provider',
context: ['addnewproviderurl' => new moodle_url('/ai/configure.php')]
));
$providers->add(new \core_ai\admin\admin_setting_provider_manager(
if (!empty(core_plugin_manager::instance()->get_plugins_of_type("aiprovider"))) {
// Add call to action to add a new provider.
$providers->add(new \core_admin\admin\admin_setting_template_render(
name: 'addnewprovider',
templatename: 'core_ai/admin_add_provider',
context: ['addnewproviderurl' => new moodle_url('/ai/configure.php')]
));
$providers->add(new \core_ai\admin\admin_setting_provider_manager(
'aiprovider',
\core_ai\table\aiprovider_management_table::class,
'manageaiproviders',
new lang_string('manageaiproviders', 'core_ai'),
));
));
} else {
$providers->add(new \core_admin\admin\admin_setting_notification(
name:'noproviderplugins',
notification: get_string('noproviderplugins', 'core_ai'),
type: 'danger'
));
}
$ADMIN->add('ai', $providers);
// Add settings page for AI placement settings.
+24 -6
View File
@@ -69,19 +69,37 @@ if ($hassiteconfig && \core_analytics\manager::is_analytics_enabled()) {
$ADMIN->add('analytics', $settings);
if ($ADMIN->fulltree) {
// Select the site prediction's processor.
$predictionprocessors = \core_analytics\manager::get_all_prediction_processors();
$predictors = array();
$predictors = [];
foreach ($predictionprocessors as $fullclassname => $predictor) {
$pluginname = substr($fullclassname, 1, strpos($fullclassname, '\\', 1) - 1);
$predictors[$fullclassname] = new lang_string('pluginname', $pluginname);
}
$settings->add(new \core_analytics\admin_setting_predictor('analytics/predictionsprocessor',
new lang_string('defaultpredictionsprocessor', 'analytics'), new lang_string('predictionsprocessor_help', 'analytics'),
\core_analytics\manager::default_mlbackend(), $predictors)
$settings->add(
new \core_analytics\admin_setting_predictor(
'analytics/predictionsprocessor',
new lang_string('defaultpredictionsprocessor', 'analytics'),
new lang_string('predictionsprocessor_help', 'analytics'),
\core_analytics\manager::default_mlbackend(),
$predictors,
)
);
// Warn if current processor is not configured.
// We are avoiding doing this check in write_config because it is likely the default
// mlbackend_python plugin is not configured and will output warnings during install.
$currentprocessor = get_config('analytics', 'predictionsprocessor');
if (!empty($currentprocessor)) {
$currentprocessor = new $currentprocessor;
$currentprocessorisready = $currentprocessor->is_ready();
if ($currentprocessorisready !== true) {
$settings->add(new admin_setting_description(
'processornotready',
'',
html_writer::tag('div', $currentprocessorisready, ['class' => 'alert alert-danger'])
));
}
}
// Log store.
$logmanager = get_log_manager();
+15
View File
@@ -65,6 +65,21 @@ if (($hassiteconfig || has_any_capability(array(
new lang_string('allowexternalbackpack', 'badges'),
new lang_string('allowexternalbackpack_desc', 'badges'), 1));
$defaultcanvasregions = [
'Australia|https://au.badgr.io|https://api.au.badgr.io/v2',
'Canada|https://ca.badgr.io|https://api.ca.badgr.io/v2',
'Europe|https://eu.badgr.io|https://api.eu.badgr.io/v2',
'Singapore|https://sg.badgr.io|https://api.sg.badgr.io/v2',
'United States|https://badgr.io|https://api.badgr.io/v2',
];
$globalsettings->add(new admin_setting_configtextarea(
'badges_canvasregions',
new lang_string('canvasregions', 'badges'),
new lang_string('canvasregions_desc', 'badges'),
implode("\n", $defaultcanvasregions),
PARAM_RAW,
));
$ADMIN->add('badges', $globalsettings);
$ADMIN->add('badges',
+8
View File
@@ -70,6 +70,14 @@ if ($hassiteconfig) {
$temp->add(new admin_setting_configtext('googlemapkey3', new lang_string('googlemapkey3', 'core_admin'),
new lang_string('googlemapkey3_help', 'core_admin'), '', PARAM_RAW, 60));
$temp->add(new admin_setting_configtext(
'geopluginapikey',
new lang_string('geopluginapikey', 'core_admin'),
new lang_string('geopluginapikey_desc', 'core_admin'),
'',
PARAM_TEXT,
));
}
$ADMIN->add('location', $temp);
@@ -0,0 +1,51 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_admin/settings_showhide
Passes the necessary data to show/hide dependant settings.
Context variables required for this template:
* dependencies - JSON-serialized data structure describing the dependencies between settings
Example context (json):
{
"dependencies": {
"s__setting1":{
"eq":[
[
"s__setting0"
]
]
},
"s__setting2":{
"eq":[
[
"s__setting1"
]
]
}
}
}
}}
<span id="settings-showhide-{{uniqid}}" data-dependencies="{{dependencies}}"></span>
{{#js}}
require(['core/showhidesettings'], function(ShowHideSettings) {
ShowHideSettings.init("settings-showhide-{{uniqid}}");
});
{{/js}}
+2 -1
View File
@@ -79,7 +79,7 @@ Feature: An administrator can browse user accounts
Scenario: Delete a user account
Given I navigate to "Users > Accounts > Browse list of users" in site administration
And I press "Delete" action in the "User One" report row
And I should see "Are you absolutely sure you want to completely delete the user User One" in the "Delete user" "dialogue"
And I should see "Are you sure you want to delete user User One" in the "Delete user" "dialogue"
And I click on "Delete" "button" in the "Delete user" "dialogue"
Then I should see "Deleted user User One"
And I should not see "User One" in the "reportbuilder-table" "table"
@@ -90,6 +90,7 @@ Feature: An administrator can browse user accounts
| username | firstname | lastname | email | confirmed |
| user3 | User | Three | three@example.com | 0 |
And I navigate to "Users > Accounts > Browse list of users" in site administration
And I change window size to "large"
Then I should see "Confirmation pending" in the "User Three" "table_row"
And I press "Resend confirmation email" action in the "User Three" report row
And I should see "Confirmation email sent successfully"
@@ -0,0 +1,17 @@
@core @core_admin
Feature: Toggle campaign banner visibility
In order to control the visibility of the campaign banner content
As an admin
I need to be able to disable the campaign banner display
Scenario Outline: Admin can disable the campaign banner display
Given the following config values are set as admin:
| showcampaigncontent | <showcampaigncontent> |
And I log in as "admin"
When I navigate to "Notifications" in site administration
Then "//iframe[@id='campaign-content']" "xpath_element" <display> exist
Examples:
| showcampaigncontent | display |
| true | should |
| false | should not |
+1 -1
View File
@@ -47,7 +47,7 @@ $table->head = array(
get_string('thirdpartylibrarylocation', 'core_admin'), get_string('license'));
$table->align = array('left', 'left', 'left', 'left');
$table->id = 'thirdpartylibs';
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$table->data = array();
foreach ($files as $component => $xmlpath) {
@@ -20,9 +20,9 @@ Feature: I can apply presets
And I navigate to "Plugins > Course formats > Manage course formats" in site administration
And "Disable" "icon" should exist in the "Social" "table_row"
And I navigate to "Plugins > Question behaviours > Manage question behaviours" in site administration
And "Enabled" "icon" should exist in the "Immediate feedback with CBM" "table_row"
And "Enabled" "link" should exist in the "Immediate feedback with CBM" "table_row"
And I navigate to "Plugins > Question types > Manage question types" in site administration
And "Enabled" "icon" should exist in the "Calculated multichoice" "table_row"
And "Enabled" "link" should exist in the "Calculated multichoice" "table_row"
When I navigate to "Site admin presets" in site administration
And I press "Review settings and apply" action in the "Starter" report row
And I should see "Setting changes"
@@ -111,9 +111,9 @@ Feature: I can apply presets
And I navigate to "Plugins > Course formats > Manage course formats" in site administration
And "Disable" "icon" should not exist in the "Social" "table_row"
And I navigate to "Plugins > Question behaviours > Manage question behaviours" in site administration
And "Enabled" "icon" should not exist in the "Immediate feedback with CBM" "table_row"
And "Enabled" "link" should not exist in the "Immediate feedback with CBM" "table_row"
And I navigate to "Plugins > Question types > Manage question types" in site administration
And "Enabled" "icon" should not exist in the "Calculated multichoice" "table_row"
And "Enabled" "link" should not exist in the "Calculated multichoice" "table_row"
Scenario: Re-applying Starter Moodle preset does not display setting changes
# Apply Starter preset.
@@ -27,9 +27,9 @@ Feature: I can revert changes after a load
And I navigate to "Plugins > Course formats > Manage course formats" in site administration
And "Disable" "icon" should not exist in the "Social" "table_row"
And I navigate to "Plugins > Question behaviours > Manage question behaviours" in site administration
And "Enabled" "icon" should not exist in the "Immediate feedback with CBM" "table_row"
And "Enabled" "link" should not exist in the "Immediate feedback with CBM" "table_row"
And I navigate to "Plugins > Question types > Manage question types" in site administration
And "Enabled" "icon" should not exist in the "Calculated multichoice" "table_row"
And "Enabled" "link" should not exist in the "Calculated multichoice" "table_row"
And I navigate to "Site admin presets" in site administration
And I press "Show version history" action in the "Starter" report row
When I click on "Restore this version" "link"
@@ -45,6 +45,6 @@ Feature: I can revert changes after a load
And I navigate to "Plugins > Course formats > Manage course formats" in site administration
And "Disable" "icon" should exist in the "Social" "table_row"
And I navigate to "Plugins > Question behaviours > Manage question behaviours" in site administration
And "Enabled" "icon" should exist in the "Immediate feedback with CBM" "table_row"
And "Enabled" "link" should exist in the "Immediate feedback with CBM" "table_row"
And I navigate to "Plugins > Question types > Manage question types" in site administration
And "Enabled" "icon" should exist in the "Calculated multichoice" "table_row"
And "Enabled" "link" should exist in the "Calculated multichoice" "table_row"
+4
View File
@@ -36,6 +36,10 @@ if (function_exists('opcache_reset')) {
define('CLI_SCRIPT', true);
define('CACHE_DISABLE_ALL', true);
// It makes no sense to use BEHAT_CLI for this script (the Behat launch scripts expect to start
// from the normal environment), so in case user has set tne environment variable, disable it.
putenv('BEHAT_CLI=0');
// Basic functions.
require_once(__DIR__ . '/../../../../lib/clilib.php');
require_once(__DIR__ . '/../../../../lib/behat/lib.php');
+4
View File
@@ -31,6 +31,10 @@ define('ABORT_AFTER_CONFIG', true);
define('CACHE_DISABLE_ALL', true);
define('NO_OUTPUT_BUFFERING', true);
// It makes no sense to use BEHAT_CLI for this script (the Behat launch scripts expect to start
// from the normal environment), so in case user has set tne environment variable, disable it.
putenv('BEHAT_CLI=0');
require_once(__DIR__ .'/../../../../config.php');
require_once(__DIR__.'/../../../../lib/clilib.php');
require_once(__DIR__.'/../../../../lib/behat/lib.php');
+4
View File
@@ -39,6 +39,10 @@ define('NO_OUTPUT_BUFFERING', true);
define('IGNORE_COMPONENT_CACHE', true);
define('ABORT_AFTER_CONFIG', true);
// It makes no sense to use BEHAT_CLI for this script (the Behat launch scripts expect to start
// from the normal environment), so in case user has set tne environment variable, disable it.
putenv('BEHAT_CLI=0');
require_once(__DIR__ . '/../../../../lib/clilib.php');
// CLI options.
+4
View File
@@ -33,6 +33,10 @@ if (isset($_SERVER['REMOTE_ADDR'])) {
die(); // No access from web!.
}
// It makes no sense to use BEHAT_CLI for this script (the Behat launch scripts expect to start
// from the normal environment), so in case user has set tne environment variable, disable it.
putenv('BEHAT_CLI=0');
// Basic functions.
require_once(__DIR__ . '/../../../../lib/clilib.php');
require_once(__DIR__ . '/../../../../lib/behat/lib.php');
@@ -87,7 +87,7 @@ abstract class answerbase extends base {
*/
#[\core\attribute\deprecated(null, since: '5.0', reason: 'This method should not be used', mdl: 'MDL-71378')]
public function find_system_areas(): ?\moodle_recordset {
\core\deprecation::emit_deprecation_if_present([self::class, __FUNCTION__]);
\core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
global $DB;
$params = [
'syscontext' => CONTEXT_SYSTEM,
@@ -111,7 +111,7 @@ abstract class base extends area_base {
*/
#[\core\attribute\deprecated(null, since: '5.0', reason: 'This method should not be used', mdl: 'MDL-71378')]
public function find_system_areas(): ?\moodle_recordset {
\core\deprecation::emit_deprecation_if_present([self::class, __FUNCTION__]);
\core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
global $DB;
$params = [
'syscontext' => CONTEXT_SYSTEM,
@@ -153,14 +153,20 @@ abstract class base extends area_base {
*/
public static function get_edit_url(\stdClass $componentinfo): \moodle_url {
$questionid = $componentinfo->itemid;
$context = \context::instance_by_id($componentinfo->contextid);
$cmid = $context->instanceid;
// Question answers are editable on main question page.
// Hence, use refid for these links.
if ($componentinfo->tablename === 'question_answers') {
$questionid = $componentinfo->refid;
}
// Default to SITEID if courseid is null, i.e. system or category level questions.
$thiscourseid = ($componentinfo->courseid !== null) ? $componentinfo->courseid : SITEID;
return new \moodle_url('/question/bank/editquestion/question.php', ['courseid' => $thiscourseid, 'id' => $questionid]);
return new \moodle_url(
'/question/bank/editquestion/question.php',
[
'id' => $questionid,
'cmid' => $cmid,
]
);
}
/**
+11 -2
View File
@@ -24,5 +24,14 @@
defined('MOODLE_INTERNAL') || die;
// Remove the 'enableaccessibilitytools' configuration setting in case of reinstall.
unset_config('enableaccessibilitytools');
/**
* Plugin uninstall code.
*
* @return true
*/
function xmldb_tool_brickfield_uninstall(): bool {
// Remove the 'enableaccessibilitytools' configuration setting in case of reinstall.
unset_config('enableaccessibilitytools');
return true;
}
+1 -1
View File
@@ -140,7 +140,7 @@ function print_report_tree($contextid, $contexts, $allroles) {
// If there are any role overrides here, print them.
if (!empty($contexts[$contextid]->rolecapabilities)) {
$rowcounter = 0;
echo '<table class="generaltable table-striped"><tbody>';
echo '<table class="generaltable table-striped table table-hover"><tbody>';
foreach ($allroles as $role) {
if (isset($contexts[$contextid]->rolecapabilities[$role->id])) {
$permission = $contexts[$contextid]->rolecapabilities[$role->id];
+1 -1
View File
@@ -86,7 +86,7 @@ class tool_capability_renderer extends plugin_renderer_base {
}
$table = new html_table();
$table->attributes['class'] = 'comparisontable';
$table->attributes['class'] = 'comparisontable table-reboot';
$table->head = array('&nbsp;');
foreach ($roles as $role) {
$url = new moodle_url('/admin/roles/define.php', array('action' => 'view', 'roleid' => $role->id));
@@ -0,0 +1,70 @@
<?php
// This file is part of Moodle - https://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <https://www.gnu.org/licenses/>.
namespace tool_capability;
// phpcs:disable moodle.PHPUnit.TestCaseProvider.dataProviderSyntaxMethodNotFound
/**
* Detect common problems in capability definitions of plugins.
*
* @group plugin_checks
* @package tool_capability
* @copyright 2025 Petr Skoda
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
final class plugin_checks_test extends \core\tests\plugin_checks_testcase {
/**
* Verify contents of plugin db/access.php file.
*
* @dataProvider all_plugins_provider
* @coversNothing
*
* @param string $component
* @param string $plugintype
* @param string $pluginname
* @param string $dir
*/
public function test_db_access_file(string $component, string $plugintype, string $pluginname, string $dir): void {
global $CFG;
$stringmanager = get_string_manager();
$corerolefile = "$CFG->dirroot/lang/en/role.php";
$langfile = "$dir/lang/en/$component.php";
$file = "$dir/db/access.php";
$capabilities = $this->fetch_array_from_file($file, 'capabilities');
if (!$capabilities) {
$this->expectNotToPerformAssertions();
return;
}
foreach ($capabilities as $capname => $capability) {
if ($plugintype === 'qbank' && str_starts_with($capname, 'moodle/question:')) {
// Question bank capabilities are irregular.
$strname = explode('/', $capname, 2)[1];
$this->assertTrue($stringmanager->string_exists($strname, 'core_role'),
"Missing capability name string '$strname' in $corerolefile");
continue;
}
$this->assertMatchesRegularExpression("|^$plugintype/$pluginname:[a-z0-9_]+$|", $capname);
$strname = substr($capname, strlen($plugintype) + 1);
$this->assertTrue($stringmanager->string_exists($strname, $component),
"Missing capability name string '$strname' in $langfile");
$this->assertSame($capname, clean_param($capname, PARAM_CAPABILITY));
}
}
}
@@ -166,10 +166,12 @@ class provider implements
// Retrieve the tool_cohortroles records created for the user.
$sql = "SELECT cr.id as cohortroleid,
cr.cohortid,
c.name as cohortname,
c.idnumber as cohortidnumber,
c.description as cohortdescription,
c.contextid as contextid,
c.description,
c.descriptionformat,
c.contextid,
r.shortname as roleshortname,
cr.userid as userid,
cr.timecreated as timecreated,
@@ -185,27 +187,39 @@ class provider implements
$cohortroles = $DB->get_records_sql($sql, $params);
foreach ($cohortroles as $cohortrole) {
$context = \context::instance_by_id($cohortrole->contextid);
// The tool_cohortroles data export is organised in:
// {User Context}/Cohort roles management/{cohort name}/{role shortname}/data.json.
$subcontext = [
get_string('pluginname', 'tool_cohortroles'),
$cohortrole->cohortname,
format_string($cohortrole->cohortname, options: ['context' => $context]),
$cohortrole->roleshortname
];
$data = (object) [
'cohortname' => $cohortrole->cohortname,
'cohortname' => format_string($cohortrole->cohortname, options: ['context' => $context]),
'cohortidnumber' => $cohortrole->cohortidnumber,
'cohortdescription' => $cohortrole->cohortdescription,
'cohortdescription' => format_text(
writer::with_context($context)->rewrite_pluginfile_urls(
$subcontext,
'cohort',
'description',
$cohortrole->cohortid,
$cohortrole->description,
),
$cohortrole->descriptionformat,
['context' => $context],
),
'roleshortname' => $cohortrole->roleshortname,
'userid' => transform::user($cohortrole->userid),
'timecreated' => transform::datetime($cohortrole->timecreated),
'timemodified' => transform::datetime($cohortrole->timemodified)
];
$context = \context::instance_by_id($cohortrole->contextid);
writer::with_context($context)->export_data($subcontext, $data);
writer::with_context($context)
->export_area_files($subcontext, 'cohort', 'description', $cohortrole->cohortid)
->export_data($subcontext, $data);
}
}
+3
View File
@@ -51,5 +51,8 @@ function xmldb_tool_cohortroles_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -39,7 +39,7 @@ The component output classes can render an action menu entirely in PHP. The step
The following code is a basic example of an action menu:
{{< php >}}
```php
/** @var core_renderer $output*/
$output = $PAGE->get_renderer('core');
@@ -54,11 +54,11 @@ $menu->add(new action_menu_link(
));
echo $output->render($menu);
{{< / php >}}
```
And this is the same example but passing the items in the creation:
{{< php >}}
```php
/** @var core_renderer $output*/
$output = $PAGE->get_renderer('core');
@@ -72,32 +72,64 @@ $menu = new action_menu([
]);
echo $output->render($menu);
{{< / php >}}
```
### Setup the menu trigger
By default, the action menu trigger is a cog icon. However, the class has methods to convert it to a kebab menu or even display any arbitrary content.
By default, the action menu trigger is a button that uses the `t/edit_menu` icon and is displayed with a caret. However, the class has methods to convert it to a kebab menu or even display any arbitrary content.
Example of a kebab menu:
#### Example of a kebab menu
{{< php >}}
```php
/** @var core_renderer $output*/
$output = $PAGE->get_renderer('core');
$menu = new action_menu();
$menu->set_kebab_trigger(get_string('edit'), $output);
$menu->set_additional_classes('fields-actions');
{{< / php >}}
```
Example of a custom trigger:
#### Customising the menu trigger
{{< php >}}
/** @var core_renderer $output*/
$output = $PAGE->get_renderer('core');
##### Trigger with a text label
```php
// This example displays an "Edit" label for the trigger.
$menu = new action_menu();
$menu->set_menu_trigger(get_string('edit'));
{{< / php >}}
```
##### Trigger with an icon
This example displays an icon for the trigger. When rendering the menu trigger button as an icon button, ensure that the icon is rendered as a decorative image. If you are using a `pix_icon`, pass an empty `$alt` parameter to make the icon decorative.
The accessible name of the icon button should be set within the button element itself. You can set an accessible name for the icon trigger button either by:
* Using the `::set_action_label()` method.
```php
$menu = new action_menu();
// Make sure the pix icon is rendered as a decorative image by passing an empty alt parameter.
$icon = $output->pix_icon('t/edit', '');
$menu->set_menu_trigger($icon);
$menu->set_action_label(get_string('edit'));
```
* Or alternatively, by adding a visually hidden text alongside the icon.
```php
$menu = new action_menu();
// Make sure the pix icon is rendered as a decorative image by passing an empty alt parameter.
$icon = $output->pix_icon('t/edit', '');
// Add a visually hidden text label for the trigger button.
$icon .= html_writer::span(get_string('edit'), 'visually-hidden');
$menu->set_menu_trigger($icon);
```
##### Removing the caret symbol
You may also remove the caret symbol by adding a `no-caret` class to the `triggerextraclasses` property.
```php
$menu->triggerextraclasses = 'no-caret';
```
### Add items
@@ -108,7 +140,7 @@ Secondary items: are displayed inside the action menu dropdown.
The item location must be configured before adding the element. The following example shows different ways to add primary and secondary menu items.
{{< php >}}
```php
// Primary items examples.
$menu->add(new action_menu_link(
new moodle_url($PAGE->url),
@@ -134,7 +166,7 @@ $menu->add(new action_menu_link_secondary(
new pix_icon('t/user', ''),
'Action link example',
));
{{< / php >}}
```
## Types of items
@@ -178,7 +210,7 @@ Construct params:
The following example creates a subpanel using a renderable choicelist instance:
{{< php >}}
```php
/** @var core_renderer $output*/
$output = $PAGE->get_renderer('core');
@@ -205,7 +237,7 @@ $menu->add(new core\output\local\action_menu\subpanel(
));
echo $output->render($menu);
{{< / php >}}
```
### HTML string
@@ -77,7 +77,7 @@ echo '<p><strong>Important note:</strong> actions menus are not prepared
to be displayed inside iframes. You may need to scroll to see the
action menu options.</p>';
echo $output->heading("Action menu default example", 4);
echo $output->heading("Action menu default example", 3);
$menu = new action_menu();
@@ -87,11 +87,11 @@ $menu->add($subpanel);
$menu->add($basicactionlink);
echo '<div class="border m-3 p-3 d-flex flex-row">';
echo '<div class="flex-fill">Example of default an action menu</div><div>';
echo '<div class="flex-fill">An action menu rendered without customisation</div><div>';
echo $OUTPUT->render($menu);
echo '</div></div>';
echo $output->heading("Kebab menu example", 4);
echo $output->heading("Kebab menu example", 3);
$menu = new action_menu();
$menu->set_kebab_trigger(get_string('edit'), $output);
@@ -106,11 +106,11 @@ $menu->add(new core\output\local\action_menu\subpanel(
$menu->add($basicactionlink);
echo '<div class="border m-3 p-3 d-flex flex-row">';
echo '<div class="flex-fill">Example of kebab menu</div><div>';
echo '<div class="flex-fill">An action menu with a kebab menu trigger button</div><div>';
echo $OUTPUT->render($menu);
echo '</div></div>';
echo $output->heading("Custom trigger menu example", 4);
echo $output->heading("Custom trigger menu examples", 3);
$menu = new action_menu();
$menu->set_menu_trigger(get_string('edit'));
@@ -124,11 +124,53 @@ $menu->add(new core\output\local\action_menu\subpanel(
$menu->add($basicactionlink);
echo '<div class="border m-3 p-3 d-flex flex-row">';
echo '<div class="flex-fill">Example of kebab menu</div><div>';
echo '<div class="flex-fill">An action menu with a menu trigger button with a custom text label</div><div>';
echo $OUTPUT->render($menu);
echo '</div></div>';
echo $output->heading("Primary actions menu example", 4);
$links = [
$basicactionlink,
$basicactionlink,
];
$moreicon = $OUTPUT->pix_icon('i/moremenu', '');
$editicon = $OUTPUT->pix_icon('t/edit', '');
$menu = new action_menu($links);
$menu->set_menu_trigger($moreicon);
$menu->set_action_label(get_string('moremenu'));
$menu->triggerattributes = [
'title' => get_string('moremenu'),
];
echo '<div class="border m-3 p-3 d-flex flex-row">';
echo '<div class="flex-fill">An action menu with only an icon for its custom menu trigger button</div>';
echo html_writer::div($OUTPUT->render($menu));
echo '</div>';
echo '<div class="border m-3 p-3 d-flex flex-row">';
echo '<div class="flex-fill">An action menu with only an icon for its custom menu trigger button with the caret removed</div>';
$menu->triggerextraclasses = 'no-caret';
echo html_writer::div($OUTPUT->render($menu));
echo '</div>';
$menu = new action_menu($links);
$menu->set_menu_trigger($editicon . ' ' . get_string('edit'));
echo '<div class="border m-3 p-3 d-flex flex-row">';
echo '<div class="flex-fill">An action menu with an icon and visible text for its custom menu trigger button</div>';
echo html_writer::div($OUTPUT->render($menu));
echo '</div>';
$menu = new action_menu($links);
$menu->set_menu_trigger($editicon . ' ' . html_writer::span(get_string('edit'), 'visually-hidden'));
echo '<div class="border m-3 p-3 d-flex flex-row">';
echo '<div class="flex-fill">An action menu with an icon and visually hidden text for its custom menu trigger button</div>';
echo html_writer::div($OUTPUT->render($menu));
echo '</div>';
echo $output->heading("Primary actions menu example", 3);
$menu = new action_menu();
$menu->set_menu_trigger(get_string('edit'));
+3
View File
@@ -36,5 +36,8 @@ function xmldb_tool_customlang_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -162,7 +162,7 @@ class data_requests_table extends table_sql {
*/
public function col_userid($data) {
$user = $data->foruser;
return html_writer::link($user->profileurl, $user->fullname, ['title' => get_string('viewprofile')]);
return html_writer::link($user->profileurl, $user->fullname);
}
/**
@@ -183,7 +183,7 @@ class data_requests_table extends table_sql {
*/
public function col_requestedby($data) {
$user = $data->requestedbyuser;
return html_writer::link($user->profileurl, $user->fullname, ['title' => get_string('viewprofile')]);
return html_writer::link($user->profileurl, $user->fullname);
}
/**
+3
View File
@@ -106,5 +106,8 @@ function xmldb_tool_dataprivacy_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -138,7 +138,7 @@
}}>
<td>{{typename}}</td>
<td>{{#userdate}} {{timecreated}}, {{#str}} strftimedatetime, core_langconfig {{/str}} {{/userdate}}</td>
<td><a href="{{requestedbyuser.profileurl}}" title="{{#str}}viewprofile{{/str}}">{{requestedbyuser.fullname}}</a></td>
<td><a href="{{requestedbyuser.profileurl}}">{{requestedbyuser.fullname}}</a></td>
<td>
<span class="badge {{statuslabelclass}}" title="{{statuslabeltitle}}">{{statuslabel}}</span>
</td>
@@ -62,7 +62,7 @@
</div>
<div class="flex-grow-1 ms-3">
<h4 class="mt-0 mb-1">
<a href="{{foruser.profileurl}}" title="{{#str}}viewprofile{{/str}}">{{foruser.fullname}}</a>
<a href="{{foruser.profileurl}}">{{foruser.fullname}}</a>
</h4>
<a href="mailto:{{foruser.email}}">{{foruser.email}}</a>
<div class="clearfix mt-1 mb-1">
@@ -76,7 +76,7 @@
</span>
<span class="float-start me-1">
<strong>{{#str}}requestbydetail, tool_dataprivacy{{/str}}</strong>
<span><a href="{{requestedbyuser.profileurl}}" title="{{#str}}viewprofile{{/str}}">{{requestedbyuser.fullname}}</a></span>
<span><a href="{{requestedbyuser.profileurl}}">{{requestedbyuser.fullname}}</a></span>
</span>
</div>
{{#canreview}}
@@ -0,0 +1,100 @@
@tool @tool_dataprivacy
Feature: Authorized users can request others personal data
In order to export or access another users data
As a designated role
I need the correct permissions
Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| user1 | User1 | One | user1@example.com |
| user2 | User2 | Two | user2@example.com |
| officer1 | Officer1 | One | officer1@example.com |
# Create Privacy Officer Role.
And the following "role" exists:
| shortname | privacyofficer |
| name | Privacy Officer |
| context_system | 1 |
| tool/dataprivacy:managedataregistry | allow |
| tool/dataprivacy:managedatarequests | allow |
| tool/dataprivacy:makedatarequestsforchildren | allow |
| moodle/site:configview | allow |
| moodle/category:viewhiddencategories | allow |
| moodle/course:viewhiddencourses | allow |
| moodle/course:viewhiddenactivities | allow |
| moodle/course:view | allow |
# Create Parent Role.
And the following "role" exists:
| shortname | parentrole |
| name | Parent Role |
| context_user | 1 |
| moodle/user:viewdetails | allow |
| moodle/user:viewalldetails | allow |
| moodle/user:readuserblogs | allow |
| moodle/user:readuserposts | allow |
| moodle/user:viewuseractivitiesreport | allow |
| moodle/user:editprofile | allow |
| tool/policy:acceptbehalf | allow |
| tool/dataprivacy:makedatarequestsforchildren | allow |
# Add permission to allow parent to make requests on behalf of child user.
And the following config values are set as admin:
| contactdataprotectionofficer | 1 | tool_dataprivacy |
And I log in as "admin"
@javascript
Scenario: Privacy officer can request for other user's personal data
Given I navigate to "Users > Permissions > Assign system roles" in site administration
# Assign Privacy Officer role to officer1.
And I follow "Privacy Officer"
And I set the field "addselect_searchtext" to "Officer1"
And I set the field "addselect" to "Officer1 One (officer1@example.com)"
And I press "Add"
# Navigate to home in order to navigate properly to Privacy settings.
And I am on site homepage
# Select Privacy officer in the Orivacy officer role mapping setting.
And I navigate to "Users > Privacy and policies > Privacy settings" in site administration
And I click on "Privacy Officer" "checkbox"
And I press "Save changes"
And I log in as "officer1"
And I navigate to "Users > Privacy and policies > Data requests" in site administration
# Create a new request as the designated privacy officer.
When I follow "New request"
And I set the field "User" to "User1 One"
And I set the field "Comment" to "User One data"
And I press "Save changes"
# Confirm that the new data request is successfully created for selected user with status "Awaiting approval".
Then the following should exist in the "generaltable" table:
| Type | User | Requested by | Status | Message |
| Export | User1 One | Officer1 One | Awaiting approval | User One data |
@javascript
Scenario: Parent user can request data on behalf of child user
Given I navigate to "Users > Accounts > Browse list of users" in site administration
And I follow "User1 One"
And I click on "Preferences" "link" in the ".profile_tree" "css_element"
# Assign user2 as parent for user1.
And I follow "Assign roles relative to this user"
And I follow "Parent"
And I set the field "Potential users" to "User2 Two (user2@example.com)"
And I click on "Add" "button" in the "#page-content" "css_element"
And I log in as "user2"
And I follow "Profile" in the user menu
And I follow "Data requests"
# As parent, create a data request for a child user.
And I follow "New request"
And I click on "User" "field"
When I type "User1 One"
# Confirm that only the parent's child users can be searched and selected.
Then I should see "User1 One"
And I type "User2 Two"
And I should see "No suggestions"
And I type "Officer1 One"
And I should see "No suggestions"
And I set the field "Search" to "User1"
And I set the field "Comment" to "This is a comment"
And I press "Save changes"
# Confirm that data request was successfully made by parent on behalf of child user.
And I should see "Your request has been submitted to the privacy officer"
And the following should exist in the "generaltable" table:
| Type | Requested by | Status | Message |
| Export all of my personal data (User1 One) | User2 Two | Awaiting approval | This is a comment |
@@ -80,7 +80,7 @@ class table implements \renderable {
'text-center',
];
$table->id = 'manage-licenses';
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$table->data = [];
$rownumber = 0;
@@ -137,7 +137,7 @@ class tool_log_setting_managestores extends admin_setting {
$table->colclasses = array('leftalign', 'centeralign', 'centeralign', 'centeralign', 'centeralign', 'centeralign',
'centeralign');
$table->id = 'logstoreplugins';
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$table->data = array();
// Iterate through store plugins and add to the display table.
+3
View File
@@ -41,5 +41,8 @@ function xmldb_tool_log_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -35,5 +35,8 @@ function xmldb_logstore_database_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -35,5 +35,8 @@ function xmldb_logstore_standard_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -28,10 +28,12 @@ use renderable;
use templatable;
use renderer_base;
use single_button;
use action_link;
use stdClass;
use moodle_url;
use context;
use context_system;
use core\output\local\properties\button;
use core_competency\api;
use core_competency\competency_framework;
use core_competency\external\competency_framework_exporter;
@@ -65,6 +67,8 @@ class manage_competency_frameworks_page implements renderable, templatable {
* @param context $pagecontext The page context
*/
public function __construct(context $pagecontext) {
global $OUTPUT;
$this->pagecontext = $pagecontext;
if (competency_framework::can_manage_context($this->pagecontext)) {
@@ -74,10 +78,13 @@ class manage_competency_frameworks_page implements renderable, templatable {
'get'
);
$this->navigation[] = $addpage;
$competenciesrepository = new single_button(
$icon = $OUTPUT->pix_icon('i/externallink', get_string('opensinnewwindow'), 'moodle', ['class' => 'ms-1']);
$competenciesrepository = new action_link(
new moodle_url('https://moodle.net/search', ['q' => 'competency frameworks']),
get_string('competencyframeworksrepository', 'tool_lp'),
'get'
get_string('competencyframeworksrepository', 'tool_lp') . $icon,
null,
['target' => '_blank', 'class' => button::SECONDARY->classes() . ' ms-sm-2'],
);
$this->navigation[] = $competenciesrepository;
}
@@ -49,7 +49,7 @@
}
}}
<span>
<a href="{{profileurl}}" title="{{#str}}viewprofile{{/str}}">
<a href="{{profileurl}}">
<img height="18" src="{{profileimageurlsmall}}" alt="">
<span>{{fullname}}</span>
{{#hasidentity}}
@@ -0,0 +1,77 @@
@tool @tool_lp @tool_lp_framework
Feature: Manage CRUD operations for competencies
In order to perform CRUD operations on competencies
As a manager
I need to be able to create, read, update and delete competencies
Background:
Given the following "core_competency > frameworks" exist:
| shortname | idnumber |
| CF1 | CF1 |
And the following "core_competency > competencies" exist:
| shortname | competencyframework | idnumber | description |
| C1 | CF1 | C1ID | C1 description |
And I log in as "admin"
And I navigate to "Competencies > Competency frameworks" in site administration
And I click on "CF1 (CF1)" "link"
@javascript
Scenario: Create a new competency
# Targets the `CF1` element to make `Add competency` button visible and accessible to avoid ambiguity with the other 'CF1' element on the screen.
Given I click on "//span[text()='CF1']" "xpath_element"
When I press "Add competency"
And I set the field "Name" to "C2"
And I set the field "Description" to "C2 description"
And I set the field "ID number" to "C2ID"
And I press "Save changes"
# Access the newly created competencies to ensure that correct information was registered.
Then "Competency created" "text" should exist
And "C2" "text" should appear after "C1" "text"
And I select "C2" of the competency tree
And "C2ID" "text" should exist
And "C2 description" "text" should exist
@javascript
Scenario: Read a competency
When I select "C1" of the competency tree
# Confirm that selected competency info displayed matches registered info.
Then "C1ID" "text" should exist
And "C1 description" "text" should exist
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
# Similar to the previous step, to avoid ambiguity with the competency framework "Edit", target css element with data-action=edit.
And I click on "[data-action=edit]" "css_element"
# Confirm that the details displayed when accessing edit screen values match registered data.
And the field "Name" matches value "C1"
And the field "Description" matches value "C1 description"
And the field "ID number" matches value "C1ID"
@javascript
Scenario: Update a competency
Given I select "C1" of the competency tree
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
# Similar to the previous step, to avoid ambiguity with the competency framework "Edit", target css element with data-action=edit.
When I click on "[data-action=edit]" "css_element"
And I set the field "Name" to "C2"
And I set the field "Description" to "C2 description"
And I set the field "ID number" to "C2ID"
And I press "Save changes"
Then "Competency updated" "text" should exist
And "C1" "text" should not exist
And "C2" "text" should exist
And I select "C2" of the competency tree
And "C2ID" "text" should exist
And "C1ID" "text" should not exist
And "C2 description" "text" should exist
And "C1 description" "text" should not exist
@javascript
Scenario: Delete a competency
Given I select "C1" of the competency tree
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
When I click on "Delete" "link"
And I click on "Delete" "button" in the "Confirm" "dialogue"
# Confirm that "C1" competency was successfully deleted.
Then "C1" "text" should not exist
@@ -0,0 +1,63 @@
@tool @tool_lp @tool_lp_framework
Feature: Move and cross-reference competencies
In order to move and cross-reference competencies
As a manager
I need to be open the competency's menu items.
Background:
Given the following "core_competency > frameworks" exist:
| shortname | idnumber |
| CF1 | CF1 |
And the following "core_competency > competencies" exist:
| shortname | competencyframework |
| C1 | CF1 |
| C2 | CF1 |
| C3 | CF1 |
| C4 | CF1 |
And I log in as "admin"
And I navigate to "Competencies > Competency frameworks" in site administration
And I click on "CF1 (CF1)" "link"
@javascript
Scenario: Move a competency using Move up/Move down menu items
Given I select "C1" of the competency tree
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
When I click on "Move down" "link"
Then "C1" "text" should appear after "C2" "text"
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
And I click on "Move up" "link"
And "C1" "text" should appear before "C2" "text"
@javascript
Scenario: Move a competency using Relocate menu item
Given I select "C3" of the competency tree
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
When I click on "Relocate" "link"
And I click on "C1" "text" in the "Move competency" "dialogue"
And I click on "Move" "button" in the "Move competency" "dialogue"
Then "C1" "text" should appear before "C3" "text"
And "C3" "text" should appear before "C2" "text"
And I select "C3" of the competency tree
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
# Similar to the previous step, to avoid ambiguity with the competency framework "Edit", target css element with data-action=edit.
And I click on "[data-action=edit]" "css_element"
And "C1" "text" should exist
And "No parent (top-level competency)" "text" should not exist
And I press "Cancel"
And "C1" "text" should appear before "C3" "text"
And "C3" "text" should appear before "C2" "text"
@javascript
Scenario: Cross-reference a competency
Given I select "C1" of the competency tree
# Targets the unique 'Edit' link needed to open the menu, avoiding ambiguity with the other 'Edit' link.
And I click on "//a[@href='#' and text()='Edit']" "xpath_element"
When I click on "Add cross-referenced competency" "link"
And I click on "C2" "text" in the "Competency picker" "dialogue"
And I click on "Add" "button" in the "Competency picker" "dialogue"
Then "Cross-referenced competencies:" "text" should exist
And I should see "C2 cmp2"
@@ -46,11 +46,11 @@ Feature: See the competencies for an activity on the course competencies page.
When I follow "Competencies"
Then I should see "Test-Comp1"
And I should see "Test-Comp2"
And I set the field "Filter competencies by resource or activity" to "PageName1"
And I set the competency filter "Filter competencies by resource or activity" to "PageName1"
And I press the enter key
And I should see "Test-Comp1"
And I should not see "Test-Comp2"
And I set the field "Filter competencies by resource or activity" to "PageName2"
And I set the competency filter "Filter competencies by resource or activity" to "PageName2"
And I press the enter key
And I should not see "Test-Comp1"
And I should not see "Test-Comp2"
+71 -23
View File
@@ -16,16 +16,10 @@ Feature: Manage plan workflow
| usermanageownplan | User manage own plan role | user |
| manageplan | Manager all plans role | manager |
And the following "role capabilities" exist:
| role | moodle/competency:planmanageowndraft | moodle/competency:planmanageown |
| usermanageowndraftplan | allow | |
| usermanageownplan | allow | allow |
| manageplan | allow | allow |
And the following "role capability" exists:
| role | manageplan |
| moodle/competency:planmanage | allow |
| moodle/competency:planview | allow |
| moodle/competency:planreview | allow |
| moodle/competency:planrequestreview | allow |
| role | moodle/competency:planmanageowndraft | moodle/competency:planmanageown | moodle/competency:planmanage | moodle/competency:planview | moodle/competency:planreview | moodle/competency:planrequestreview |
| usermanageowndraftplan | allow | | | | | |
| usermanageownplan | allow | allow | | | | |
| manageplan | allow | allow | allow | allow | allow | allow |
And the following "role assigns" exist:
| user | role | contextlevel | reference |
| user1 | usermanageowndraftplan | System | |
@@ -53,8 +47,7 @@ Feature: Manage plan workflow
| lp | System | 1 | my-index | content |
Scenario: User can manages his own plan draft
Given I log in as "user1"
And I follow "Profile" in the user menu
Given I am on the "user1" "user > profile" page logged in as user1
When I follow "Learning plans"
Then I should see "List of learning plans"
And I should see "Test-Plan1"
@@ -63,11 +56,9 @@ Feature: Manage plan workflow
And I should see "Waiting for review"
And I click on "Cancel review" of edit menu in the "Test-Plan1" row
And I should see "Draft"
And I log out
Scenario: User can manages his own plan
Given I log in as "user2"
And I follow "Profile" in the user menu
Given I am on the "user2" "user > profile" page logged in as user2
When I follow "Learning plans"
Then I should see "List of learning plans"
And I should see "Test-Plan2"
@@ -82,11 +73,11 @@ Feature: Manage plan workflow
And I should see "Active"
And I click on "Complete this learning plan" of edit menu in the "Test-Plan2" row
And I click on "Complete this learning plan" "button" in the "Confirm" "dialogue"
And I wait until the page is ready
And I should see "Complete"
And I click on "Reopen this learning plan" of edit menu in the "Test-Plan2" row
And I click on "Reopen this learning plan" "button" in the "Confirm" "dialogue"
And I should see "Active"
And I log out
Scenario: Manager can see learning plan with status waiting for review
Given the following "core_competency > plans" exist:
@@ -96,7 +87,6 @@ Feature: Manage plan workflow
When I log in as "manager1"
Then I should see "Test-Plan3"
And I should not see "Test-Plan4"
And I log out
Scenario: Manager can start review of learning plan with status waiting for review
Given the following "core_competency > plans" exist:
@@ -108,7 +98,6 @@ Feature: Manage plan workflow
And I should see "Test-Plan3"
When I follow "Start review"
Then I should see "In review"
And I log out
Scenario: Manager can reject a learning plan with status in review
Given the following "core_competency > plans" exist:
@@ -121,7 +110,6 @@ Feature: Manage plan workflow
And I should see "In review"
When I follow "Finish review"
Then I should see "Draft"
And I log out
Scenario: Manager can accept a learning plan with status in review
Given the following "core_competency > plans" exist:
@@ -134,7 +122,6 @@ Feature: Manage plan workflow
And I should see "In review"
When I follow "Make active"
Then I should see "Active"
And I log out
Scenario: Manager send back to draft an active learning plan
Given the following "core_competency > plans" exist:
@@ -150,7 +137,6 @@ Feature: Manage plan workflow
And I follow "Learning plans"
Then I should see "Draft"
And I should not see "Active"
And I log out
Scenario: Manager change an active learning plan to completed
Given the following "core_competency > plans" exist:
@@ -169,7 +155,6 @@ Feature: Manage plan workflow
And I follow "Learning plans"
Then I should see "Complete"
And I should not see "Active"
And I log out
Scenario: Manager reopen a complete learning plan
Given the following "core_competency > plans" exist:
@@ -187,4 +172,67 @@ Feature: Manage plan workflow
And I follow "Learning plans"
Then I should see "Active"
And I should not see "Complete"
And I log out
Scenario: Student learning plan derived from templates can be completed
Given the following "core_competency > templates" exist:
| shortname |
| LPT1 |
And the following "core_competency > template_competencies" exist:
| template | competency |
| LPT1 | Test-Comp1 |
And I log in as "admin"
And I navigate to "Competencies > Learning plan templates" in site administration
# Select 1 user to assign to create learning plans for using template.
And I click on ".template-userplans" "css_element" in the "LPT1" "table_row"
And I set the field "Select users" to "user1"
And I press "Create learning plans"
And I click on "LPT1" "link" in the "LPT1" "table_row"
When I click on "Complete this learning plan" "link"
And I click on "Complete this learning plan" "button" in the "Confirm" "dialogue"
# Add a short wait to ensure the page has loaded before checking that "Complete" "text" exists.
And I wait until the page is ready
# Confirm that student's learning plan template is marked as Completed.
Then "Complete" "text" should exist
And "Reopen this learning plan" "link" should exist
Scenario: Learning plan template updates are not reflected on plans already completed
Given the following "core_competency > templates" exist:
| shortname |
| LPT1 |
And the following "core_competency > template_competencies" exist:
| template | competency |
| LPT1 | Test-Comp1 |
And I log in as "admin"
And I navigate to "Competencies > Learning plan templates" in site administration
# Select 2 users to assign to create learning plans for using template.
And I click on ".template-userplans" "css_element" in the "LPT1" "table_row"
And I set the field "Select users" to "user1"
And I press "Create learning plans"
And I set the field "Select users" to "user2"
And I press "Create learning plans"
# Complete the learning plan for User 1.
And I click on "LPT1" "link" in the "User 1" "table_row"
And I click on "Complete this learning plan" "link"
And I click on "Complete this learning plan" "button" in the "Confirm" "dialogue"
# Add another competency to the learning plan template.
And the following "core_competency > template_competencies" exist:
| template | competency |
| LPT1 | Test-Comp2 |
# Navigate back to the list of Learning plan templates in order to access User 1's learning plan.
And I navigate to "Competencies > Learning plan templates" in site administration
And I click on ".template-userplans" "css_element" in the "LPT1" "table_row"
# Confirm that only the first competency is reflected on User 1's learning plan since it's already completed.
When I click on "LPT1" "link" in the "User 1" "table_row"
Then "Test-Comp2" "link" should not exist
And "Test-Comp2" "text" should not exist
And "Test-Comp1" "link" should exist
And "Test-Comp1" "text" should exist
# Navigate back to list of Learning plan templates in order to access User 2's learning plan.
And I navigate to "Competencies > Learning plan templates" in site administration
And I click on ".template-userplans" "css_element" in the "LPT1" "table_row"
# Confirm that both competencies are reflected on User 2's learning plan since it's not yet completed.
And I click on "LPT1" "link" in the "User 2" "table_row"
And "Test-Comp2" "link" should exist
And "Test-Comp2" "text" should exist
And "Test-Comp1" "link" should exist
And "Test-Comp1" "text" should exist
@@ -0,0 +1,60 @@
@tool @tool_lp @core_cohort
Feature: Cohorts can be synchronized with learning plans
In order to create learning plans for cohort members
As an admin
I need to be able to synchronise cohorts with learning plans
Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| user1 | User | One | user1@example.com |
| user2 | User | Two | user2@example.com |
And the following "cohorts" exist:
| name | idnumber |
| Cohort 1 | CH1 |
And the following "cohort members" exist:
| user | cohort |
| user1 | CH1 |
| user2 | CH1 |
And the following "core_competency > frameworks" exist:
| shortname | idnumber |
| CF1 | CF1 |
And the following "core_competency > competencies" exist:
| shortname | competencyframework | idnumber |
| C1 | CF1 | C1 |
And the following "core_competency > templates" exist:
| shortname |
| LPT1 |
And the following "core_competency > template_competencies" exist:
| template | competency |
| LPT1 | C1 |
@javascript
Scenario: Cohorts can be synchronised with learning plans
Given I log in as "admin"
# Navigate to the list of learning plan templates in order to add cohorts.
And I navigate to "Competencies > Learning plan templates" in site administration
When I click on "Add cohorts to sync" of edit menu in the "LPT1" row
And I set the field "Select cohorts to sync" to "Cohort 1"
And I press "Add cohorts"
And I wait until the page is ready
# Confirm that 2 learning plans were created for members of the cohort.
Then "2 learning plans were created" "text" should exist
# Confirm current screen is still "Cohorts synced to this learning plan template screen"
And "Cohorts synced to this learning plan template" "text" should exist
# Confirm that the cohort is now added to the learning plan template.
And the following should exist in the "generaltable" table:
| Name | Cohort ID |
| Cohort 1 | CH1 |
# Navigate back to the list of learning plan templates to view updated list.
And I navigate to "Competencies > Learning plan templates" in site administration
# Confirm that the added cohort and learning plans are now reflected on the list of Learning plan templates.
And the following should exist in the "generaltable" table:
| Name | Category | Cohorts | Learning plans |
| LPT1 | System | 1 | 2 |
And I click on ".template-userplans" "css_element" in the "LPT1" "table_row"
# Confirm that learning plans were created for all cohort members.
And the following should exist in the "generaltable" table:
| Name | First name / Last name | Email address |
| LPT1 | User One | user1@example.com |
| LPT1 | User Two | user2@example.com |
+75
View File
@@ -17,6 +17,7 @@
namespace tool_lp;
use core_competency\api;
use core_competency\competency;
use core_external\external_api;
use externallib_advanced_testcase;
@@ -432,6 +433,80 @@ final class externallib_test extends externallib_advanced_testcase {
$this->assertEquals('A', $summary->usercompetencysummary->evidence[1]->gradename);
}
/**
* Evidence stored against a course module competency is deleted if the CM is deleted.
* @covers \tool_lp\external::data_for_user_competency_summary_in_plan
*/
public function test_data_for_user_competency_summary_in_plan_deleted_cm(): void {
$this->setUser($this->creator);
$dg = $this->getDataGenerator();
$lpg = $dg->get_plugin_generator('core_competency');
$f1 = $lpg->create_framework();
$c1 = $lpg->create_competency(['competencyframeworkid' => $f1->get('id')]);
$c2 = $lpg->create_competency(['competencyframeworkid' => $f1->get('id')]);
$tpl = $lpg->create_template();
$lpg->create_template_competency(['templateid' => $tpl->get('id'), 'competencyid' => $c1->get('id')]);
$lpg->create_template_competency(['templateid' => $tpl->get('id'), 'competencyid' => $c2->get('id')]);
$plan = $lpg->create_plan(['userid' => $this->user->id, 'templateid' => $tpl->get('id'), 'name' => 'Evil']);
$course = $dg->create_course();
$assign1 = $dg->create_module('assign', ['course' => $course->id]);
$assign2 = $dg->create_module('assign', ['course' => $course->id]);
$lpg->create_course_module_competency(['competencyid' => $c1->get('id'), 'cmid' => $assign1->cmid]);
$lpg->create_course_module_competency(['competencyid' => $c2->get('id'), 'cmid' => $assign1->cmid]);
api::add_evidence(
$this->user->id,
$c1->get('id'),
\core\context\module::instance($assign1->cmid),
competency::OUTCOME_COMPLETE,
'evidence_competencyrule',
'core_competency',
);
api::add_evidence(
$this->user->id,
$c2->get('id'),
\core\context\module::instance($assign2->cmid),
competency::OUTCOME_COMPLETE,
'evidence_competencyrule',
'core_competency',
);
// Confirm we have evidence for 2 course module competencies.
$summary1 = external::data_for_user_competency_summary_in_plan($c1->get('id'), $plan->get('id'));
$this->assertEquals('Evil', $summary1->plan->name);
$this->assertEquals(
get_string('evidence_competencyrule', 'core_competency'),
$summary1->usercompetencysummary->evidence[0]->description
);
$summary2 = external::data_for_user_competency_summary_in_plan($c2->get('id'), $plan->get('id'));
$this->assertEquals('Evil', $summary2->plan->name);
$this->assertEquals(
get_string('evidence_competencyrule', 'core_competency'),
$summary2->usercompetencysummary->evidence[0]->description
);
// Delete one course module.
course_delete_module($assign1->cmid);
// The evidence for the deleted course module should have been deleted. Other evidence should remain.
$summary1 = external::data_for_user_competency_summary_in_plan($c1->get('id'), $plan->get('id'));
$this->assertEquals('Evil', $summary1->plan->name);
$this->assertFalse(array_key_exists(0, $summary1->usercompetencysummary->evidence));
$summary2 = external::data_for_user_competency_summary_in_plan($c2->get('id'), $plan->get('id'));
$this->assertEquals('Evil', $summary2->plan->name);
$this->assertEquals(
get_string('evidence_competencyrule', 'core_competency'),
$summary2->usercompetencysummary->evidence[0]->description
);
}
public function test_data_for_user_competency_summary(): void {
$this->setUser($this->creator);
+1 -1
View File
@@ -56,7 +56,7 @@ class tool_messageinbound_renderer extends plugin_renderer_base {
$enabled,
$edit,
);
$table->attributes['class'] = 'admintable generaltable messageinboundhandlers';
$table->attributes['class'] = 'admintable generaltable messageinboundhandlers table table-hover';
$yes = get_string('yes');
$no = get_string('no');
+11
View File
@@ -169,6 +169,17 @@ switch ($action) {
echo $OUTPUT->heading(get_string('managefactor', 'factor_' . $factorobject->name));
echo $OUTPUT->active_factors($factor);
echo $OUTPUT->single_button($returnurl, get_string('back'));
// Displays a setup additional button in case it is needed.
if ($factorobject->show_additional_setup_button()) {
echo $OUTPUT->single_button(
url: new \moodle_url('action.php', ['action' => 'setup', 'factor' => $factor]),
label: $factorobject->get_additional_setup_string(),
method: 'post',
options: ['type' => 'primary'],
);
}
// JS for modal confirming replace and revoke actions.
$PAGE->requires->js_call_amd('tool_mfa/confirmation_modal', 'init', [$context->id]);
@@ -433,6 +433,18 @@ abstract class object_factor_base implements object_factor {
return $this->has_setup();
}
/**
* Returns true if a button should be shown to add factors of the same kind on the preferences page.
* For example, give user's the ability to set up multiple security keys.
*
* Override in child class if necessary.
*
* @return bool
*/
public function show_additional_setup_button(): bool {
return false;
}
/**
* Returns true if a factor requires input from the user to verify.
*
@@ -590,6 +602,18 @@ abstract class object_factor_base implements object_factor {
return get_string('setupfactor', 'tool_mfa');
}
/**
* Gets the string for additional setup button on preferences page.
* If the user has the ability to set up multiple security keys.
*
* Override in child class if necessary.
*
* @return string
*/
public function get_additional_setup_string(): string {
return get_string('setupfactorbuttonadditional', 'tool_mfa');
}
/**
* Gets the string for manage button on preferences page.
*
+25 -27
View File
@@ -50,7 +50,7 @@ class manager {
],
'tool_mfa' => [
'guidance',
]
],
];
/**
@@ -74,7 +74,7 @@ class manager {
get_string('achievedweight', 'tool_mfa'),
get_string('status'),
];
$table->attributes['class'] = 'admintable generaltable table table-bordered';
$table->attributes['class'] = 'admintable generaltable table table-bordered table-hover';
$table->colclasses = [
'text-end',
'',
@@ -441,6 +441,21 @@ class manager {
$url = new \moodle_url($url);
}
// Admin not setup.
if (!empty($CFG->adminsetuppending)) {
return self::NO_REDIRECT;
}
// Honor prevent_redirect.
if ($preventredirect) {
return self::NO_REDIRECT;
}
// Login as.
if (\core\session\manager::is_loggedinas()) {
return self::NO_REDIRECT;
}
// Check for pluginfile.php urls.
$pluginfileurl = new \moodle_url('/pluginfile.php');
if ($url->compare($pluginfileurl)) {
@@ -485,22 +500,6 @@ class manager {
}
}
// Admin not setup.
if (!empty($CFG->adminsetuppending)) {
return self::NO_REDIRECT;
}
// Initial installation.
// We get this for free from get_plugins_with_function.
// Upgrade check.
// We get this for free from get_plugins_with_function.
// Honor prevent_redirect.
if ($preventredirect) {
return self::NO_REDIRECT;
}
// User not properly setup.
if (user_not_fully_set_up($USER)) {
return self::NO_REDIRECT;
@@ -516,11 +515,6 @@ class manager {
return self::NO_REDIRECT;
}
// Login as.
if (\core\session\manager::is_loggedinas()) {
return self::NO_REDIRECT;
}
// Site policy.
if (isset($USER->policyagreed) && !$USER->policyagreed) {
$manager = new \core_privacy\local\sitepolicy\manager();
@@ -530,12 +524,16 @@ class manager {
}
}
// Site policies from tool_policy.
$policyviewurl = new \moodle_url('/admin/tool/policy/view.php');
$policyindexurl = new \moodle_url('/admin/tool/policy/index.php');
if ($policyviewurl->compare($url, URL_MATCH_BASE) || $policyindexurl->compare($url, URL_MATCH_BASE)) {
return self::NO_REDIRECT;
}
// WS/AJAX check.
// Prevents any potential bypassing of multi-factor authentication.
if (WS_SERVER || AJAX_SCRIPT) {
if (isset($SESSION->mfa_pending) && !empty($SESSION->mfa_pending)) {
// Allow AJAX and WS, but never from auth.php.
return self::NO_REDIRECT;
}
return self::REDIRECT_EXCEPTION;
}
+15 -15
View File
@@ -147,7 +147,7 @@ class renderer extends \plugin_renderer_base {
*/
#[\core\attribute\deprecated(null, reason: 'It is no longer used', since: '4.4', mdl: 'MDL-79920', final: true)]
public function setup_factor(): void {
\core\deprecation::emit_deprecation_if_present([self::class, __FUNCTION__]);
\core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
}
/**
@@ -174,7 +174,7 @@ class renderer extends \plugin_renderer_base {
$table = new \html_table();
$table->id = 'active_factors';
$table->attributes['class'] = 'generaltable table table-bordered';
$table->attributes['class'] = 'generaltable table table-bordered table-hover';
$table->head = [
$headers->devicename,
$headers->added,
@@ -348,7 +348,7 @@ class renderer extends \plugin_renderer_base {
$table = new \html_table();
$table->head = $displaynames;
$table->align = $colclasses;
$table->attributes['class'] = 'generaltable table table-bordered w-auto';
$table->attributes['class'] = 'generaltable table table-bordered w-auto table-hover';
$table->attributes['style'] = 'width: auto; min-width: 50%; margin-bottom: 0;';
// Manually handle Total users and MFA users.
@@ -358,7 +358,7 @@ class renderer extends \plugin_renderer_base {
WHERE deleted = 0
AND suspended = 0
GROUP BY auth";
$allusersinfo = $DB->get_records_sql($alluserssql, []);
$allusersinfo = $DB->get_records_sql_menu($alluserssql);
$noncompletesql = "SELECT u.auth, COUNT(u.id)
FROM {user} u
@@ -367,7 +367,7 @@ class renderer extends \plugin_renderer_base {
AND (mfaa.lastverified < ?
OR mfaa.lastverified IS NULL)
GROUP BY u.auth";
$noncompleteinfo = $DB->get_records_sql($noncompletesql, [$lookback, $lookback]);
$noncompleteinfo = $DB->get_records_sql_menu($noncompletesql, [$lookback, $lookback]);
$nologinsql = "SELECT auth, COUNT(id)
FROM {user}
@@ -375,7 +375,7 @@ class renderer extends \plugin_renderer_base {
AND suspended = 0
AND lastlogin < ?
GROUP BY auth";
$nologininfo = $DB->get_records_sql($nologinsql, [$lookback]);
$nologininfo = $DB->get_records_sql_menu($nologinsql, [$lookback]);
$mfauserssql = "SELECT auth,
COUNT(DISTINCT tm.userid)
@@ -385,7 +385,7 @@ class renderer extends \plugin_renderer_base {
AND u.deleted = 0
AND u.suspended = 0
GROUP BY u.auth";
$mfausersinfo = $DB->get_records_sql($mfauserssql, [$lookback]);
$mfausersinfo = $DB->get_records_sql_menu($mfauserssql, [$lookback]);
$factorsusedsql = "SELECT CONCAT(u.auth, '_', tm.factor) as id,
COUNT(*)
@@ -396,7 +396,7 @@ class renderer extends \plugin_renderer_base {
AND u.suspended = 0
AND (tm.revoked = 0 OR (tm.revoked = 1 AND tm.timemodified > ?))
GROUP BY CONCAT(u.auth, '_', tm.factor)";
$factorsusedinfo = $DB->get_records_sql($factorsusedsql, [$lookback, $lookback]);
$factorsusedinfo = $DB->get_records_sql_menu($factorsusedsql, [$lookback, $lookback]);
// Auth rows.
$authtypes = get_enabled_auth_plugins(true);
@@ -405,10 +405,10 @@ class renderer extends \plugin_renderer_base {
$row[] = \html_writer::tag('b', $authtype);
// Setup the overall totals columns.
$row[] = $allusersinfo[$authtype]->count ?? '-';
$row[] = $mfausersinfo[$authtype]->count ?? '-';
$row[] = $noncompleteinfo[$authtype]->count ?? '-';
$row[] = $nologininfo[$authtype]->count ?? '-';
$row[] = $allusersinfo[$authtype] ?? '-';
$row[] = $mfausersinfo[$authtype] ?? '-';
$row[] = $noncompleteinfo[$authtype] ?? '-';
$row[] = $nologininfo[$authtype] ?? '-';
// Create a running counter for the total.
$authtotal = 0;
@@ -418,7 +418,7 @@ class renderer extends \plugin_renderer_base {
if (!empty($column)) {
// Get the information from the data key.
$key = $authtype . '_' . $column;
$count = $factorsusedinfo[$key]->count ?? 0;
$count = $factorsusedinfo[$key] ?? 0;
$authtotal += $count;
$row[] = $count ? format_float($count, 0) : '-';
@@ -461,7 +461,7 @@ class renderer extends \plugin_renderer_base {
$table = new \html_table();
$table->attributes['class'] = 'generaltable table table-bordered w-auto';
$table->attributes['class'] = 'generaltable table table-bordered w-auto table-hover';
$table->attributes['style'] = 'width: auto; min-width: 50%';
$table->head = [
@@ -513,7 +513,7 @@ class renderer extends \plugin_renderer_base {
global $DB;
$table = new \html_table();
$table->attributes['class'] = 'generaltable table table-bordered w-auto';
$table->attributes['class'] = 'generaltable table table-bordered w-auto table-hover';
$table->attributes['style'] = 'width: auto; min-width: 50%';
$table->head = [
'userid' => get_string('userid', 'grades'),
@@ -131,7 +131,7 @@ class admin_setting_managemfa extends \core_admin\table\plugin_management_table
$txt = get_strings(['combination', 'totalweight'], 'tool_mfa');
$table = new \html_table();
$table->id = 'mfacombinations';
$table->attributes['class'] = 'admintable generaltable table table-bordered';
$table->attributes['class'] = 'admintable generaltable table table-bordered table-hover';
$table->head = [$txt->combination, $txt->totalweight];
$table->data = [];
@@ -54,5 +54,8 @@ function xmldb_factor_auth_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -28,6 +28,6 @@ $string['pluginname'] = 'Authentication type';
$string['privacy:metadata'] = 'The Authentication type factor plugin does not store any personal data.';
$string['settings:description'] = 'Automatically verify users based on their authentication type.';
$string['settings:goodauth'] = 'Factor authentication types';
$string['settings:goodauth_help'] = 'Select all authentication types to use as a factor for MFA. Any types not selected will not be treated as a FAIL in MFA.';
$string['settings:goodauth_help'] = 'Select all authentication types that will gain the points from this factor. Other authentication types will not be treated as a fail in MFA, but will not gain this factor\'s weight points.';
$string['settings:shortdescription'] = 'Allow users to bypass extra authentication steps based on their authentication type.';
$string['summarycondition'] = 'has an authentication type of {$a}';
@@ -53,5 +53,8 @@ function xmldb_factor_email_upgrade($oldversion): bool {
upgrade_plugin_savepoint(true, 2024122400, 'factor', 'email');
}
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -96,5 +96,8 @@ function xmldb_factor_sms_upgrade(int $oldversion): bool {
upgrade_plugin_savepoint(true, 2025040700, 'factor', 'sms');
}
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -195,7 +195,7 @@ class factor extends object_factor_base {
$manualtable = new \html_table();
$manualtable->id = 'manualattributes';
$manualtable->attributes['class'] = 'generaltable table table-bordered table-sm w-auto';
$manualtable->attributes['class'] = 'generaltable table table-bordered table-sm w-auto table-hover';
$manualtable->attributes['style'] = 'width: auto;';
$manualtable->data = [
[get_string('setupfactor:key', 'factor_totp'), $secret],
@@ -42,5 +42,8 @@ function xmldb_factor_totp_upgrade($oldversion): bool {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -73,7 +73,7 @@ $string['setupfactor:instructionsverification'] = '3. Enter the verification cod
$string['setupfactor:intro'] = 'To set up this method, you need to have a device with an authenticator app. If you don\'t have an app, you can download one. For example, <a href="https://2fas.com/" target="_blank">2FAS Auth</a>, <a href="https://freeotp.github.io/" target="_blank">FreeOTP</a>, Google Authenticator, Microsoft Authenticator or Twilio Authy.';
$string['setupfactor:key'] = 'Secret key: ';
$string['setupfactor:link'] = 'Or enter details manually.';
$string['setupfactor:link_help'] = 'If you are on a mobile device and already have an authenticator app installed this link may work. Note that using TOTP on the same device as you login on can weaken the benefits of MFA.';
$string['setupfactor:link_help'] = 'If you are on a mobile device and already have an authenticator app installed this link may work. Note that using TOTP on the same device as you log in on can weaken the benefits of MFA.';
$string['setupfactor:linklabel'] = 'Open app already installed on this device';
$string['setupfactor:mode'] = 'Mode:';
$string['setupfactor:mode:timebased'] = 'Time-based';
@@ -111,6 +111,15 @@ class factor extends object_factor_base {
return true;
}
/**
* Returns true if an additional setup button should be shown on the preferences page.
*
* @return bool
*/
public function show_additional_setup_button(): bool {
return true;
}
/**
* WebAuthn factor implementation.
*
@@ -151,6 +160,15 @@ class factor extends object_factor_base {
return get_string('setupfactorbutton', 'factor_webauthn');
}
/**
* Gets the string for additional setup button on preferences page.
*
* @return string
*/
public function get_additional_setup_string(): string {
return get_string('setupfactorbuttonadditional', 'factor_webauthn');
}
/**
* Gets the string for manage button on preferences page.
*
@@ -56,6 +56,7 @@ $string['settings:userverification'] = 'User verification';
$string['settings:userverification_help'] = 'Serves to ensure the person authenticating is in fact who they say they are. User verification can take various forms, such as password, PIN, fingerprint, etc.';
$string['setupfactor'] = 'Set up security key';
$string['setupfactorbutton'] = 'Set up';
$string['setupfactorbuttonadditional'] = 'Add security key';
$string['setupfactor:instructionsregistersecuritykey'] = '2. Register a security key.';
$string['setupfactor:instructionssecuritykeyname'] = '1. Give your key a name.';
$string['setupfactor:intro'] = 'A security key is a physical device that you can use to authenticate yourself. Security keys can be USB tokens, Bluetooth devices, or event built-in fingerprint scanners on your phone or computer.';
+2
View File
@@ -149,7 +149,9 @@ $string['settings:redir_exclusions'] = 'URLS which should not redirect the MFA c
$string['settings:redir_exclusions_help'] = 'Each new line is a relative URL from the siteroot for which the MFA check will not redirect from';
$string['settings:weight'] = 'Factor weight';
$string['settings:weight_help'] = 'The weight of this factor if passed. A user needs at least 100 points to log in.';
$string['setup'] = 'Setup';
$string['setupfactor'] = 'Set up factor';
$string['setupfactorbuttonadditional'] = 'Add additional factor';
$string['state:fail'] = 'Fail';
$string['state:locked'] = 'Locked';
$string['state:neutral'] = 'Neutral';
@@ -32,6 +32,7 @@ Feature: Set up and manage user factors
And I click on "Cancel" "button"
And I click on "Manage security key" "button"
And I should see "Manage security key"
And I should see "Add security key"
@javascript
Scenario: I can revoke a factor only when there is more than one active factor
@@ -78,3 +79,15 @@ Feature: Set up and manage user factors
And I click on "Replace" "button" in the "MacBook" "table_row"
When I click on "Yes, replace" "button" in the "Replace 'MacBook' security key?" "dialogue"
Then I should see "Replace security key"
Scenario: I can add a new factor instance on the manage factor page
Given the following config values are set as admin:
| enabled | 1 | factor_webauthn |
And the following "tool_mfa > User factors" exist:
| username | factor | label |
| admin | webauthn | MacBook |
And I follow "Preferences" in the user menu
And I click on "Multi-factor authentication preferences" "link"
And I click on "Manage security key" "button"
When I click on "Add security key" "button"
Then I should see "Set up security key"
+1 -1
View File
@@ -817,7 +817,7 @@ class api {
$credentials[] = ['type' => 'airnotifieraccesskey', 'value' => $CFG->airnotifieraccesskey];
}
if (\core\hub\registration::is_registered()) {
$credentials[] = ['type' => 'siteid', 'value' => $CFG->siteidentifier];
$credentials[] = ['type' => 'siteid', 'value' => \core\hub\registration::get_secret()];
}
// Generate a hash key for validating that the request is coming from this site via WS.
$key = complex_random_string(32);
+35 -15
View File
@@ -16,7 +16,10 @@
namespace tool_mobile;
use core\hook\output\extend_url;
use html_writer;
use moodle_url;
use tool_mobile\local\hooks\before_extend_ios_app_banner;
/**
* Allows plugins to add any elements to the footer.
@@ -35,22 +38,39 @@ class hook_callbacks {
\core\hook\output\before_standard_head_html_generation $hook,
): void {
global $CFG, $PAGE;
// Smart App Banners meta tag is only displayed if mobile services are enabled and configured.
if (!empty($CFG->enablemobilewebservice)) {
$mobilesettings = get_config('tool_mobile');
if (!empty($mobilesettings->enablesmartappbanners)) {
if (!empty($mobilesettings->iosappid)) {
$hook->add_html(
'<meta name="apple-itunes-app" content="app-id=' . s($mobilesettings->iosappid) . ', ' .
'app-argument=' . $PAGE->url->out() . '"/>'
);
}
// Only emit mobile app metadata when mobile services are enabled + configured.
if (empty($CFG->enablemobilewebservice)) {
return;
}
$mobilesettings = get_config('tool_mobile');
if (empty($mobilesettings->enablesmartappbanners)) {
return;
}
// IOS with hook-based app id and argument augmentation.
if (!empty($mobilesettings->iosappid)) {
$appid = (string)$mobilesettings->iosappid;
$appargument = $PAGE->url->out();
// Hook to allow modification of ios smart app banner fields.
$ioshook = new before_extend_ios_app_banner($appid, $appargument);
\core\di::get(\core\hook\manager::class)->dispatch($ioshook);
$appid = $ioshook->get_appid();
$appargument = $ioshook->get_appargument();
// Add the meta tag.
$hook->add_html(
'<meta name="apple-itunes-app" content="app-id=' . s($appid) .
', app-argument=' . s($appargument) . '"/>'
);
}
if (!empty($mobilesettings->androidappid)) {
$mobilemanifesturl = "$CFG->wwwroot/$CFG->admin/tool/mobile/mobile.webmanifest.php";
$hook->add_html('<link rel="manifest" href="' . $mobilemanifesturl . '" />');
}
}
// Android with hook-based URL augmentation.
if (!empty($mobilesettings->androidappid)) {
$url = new moodle_url('/admin/tool/mobile/mobile.webmanifest.php');
$urlhook = new extend_url($url);
\core\di::get(\core\hook\manager::class)->dispatch($urlhook);
$url = $urlhook->get_url();
// Add the link tag.
$hook->add_html('<link rel="manifest" href="' . $url->out(false) . '" />');
}
}
@@ -0,0 +1,78 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_mobile\local\hooks;
/**
* Allow adjustment of ios smart app banner fields.
*
* @package tool_mobile
* @copyright 2025 Safat Shahin <safat.shahin@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
#[\core\attribute\label('Allow adjustment of ios smart app banner fields')]
#[\core\attribute\tags('mobile')]
final class before_extend_ios_app_banner {
/**
* Create a new instance of the hook.
*
* @param string $appid The app id for the ios smart banner
* @param string $appargument The app argument for the ios smart banner
*/
public function __construct(
/** @var string $appid The app id for the ios smart banner */
private string $appid,
/** @var string $appargument The app argument for the ios smart banner */
private string $appargument,
) {
}
/**
* Get the appid.
*
* @return string
*/
public function get_appid(): string {
return $this->appid;
}
/**
* Set the appid.
*
* @param string $appid
*/
public function set_appid(string $appid): void {
$this->appid = $appid;
}
/**
* Get the appargument.
*
* @return string
*/
public function get_appargument(): string {
return $this->appargument;
}
/**
* Set the appargument.
*
* @param string $appargument
*/
public function set_appargument(string $appargument): void {
$this->appargument = $appargument;
}
}
+3
View File
@@ -41,5 +41,8 @@ function xmldb_tool_mobile_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -28,10 +28,13 @@
*/
define('NO_DEBUG_DISPLAY', true);
define('NO_MOODLE_COOKIES', true);
require_once(__DIR__ . '/../../../config.php');
header('Content-Type: application/json; charset: utf-8');
header('Cache-Control: public, max-age=' . HOURSECS . ', no-transform');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + HOURSECS) . ' GMT');
$mobilesettings = get_config('tool_mobile');
// Display manifest contents only if all the required conditions are met.
+3
View File
@@ -41,5 +41,8 @@ function xmldb_tool_monitor_upgrade($oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -86,7 +86,7 @@ class import_backup_helper {
}
[$filepath, $filename] = $this->remoteresource->download_to_requestdir();
\core\antivirus\manager::scan_file($filepath, $filename, true);
\core\antivirus\manager::scan_file($filepath . DIRECTORY_SEPARATOR . $filename, $filename, true);
// Check the final size of file against the user upload limits.
$localsize = filesize(sprintf('%s/%s', $filepath, $filename));
@@ -78,7 +78,7 @@ class import_strategy_file implements import_strategy {
// Download the file into a request directory and scan it.
[$filepath, $filename] = $resource->download_to_requestdir();
avmanager::scan_file($filepath, $filename, true);
avmanager::scan_file($filepath . DIRECTORY_SEPARATOR . $filename, $filename, true);
// Check the final size of file against the user upload limits.
$localsize = filesize(sprintf('%s/%s', $filepath, $filename));
+3
View File
@@ -41,5 +41,8 @@ function xmldb_tool_moodlenet_upgrade(int $oldversion) {
// Automatically generated Moodle v4.5.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -38,6 +38,9 @@ $string['defaultmoodlenet_desc'] = 'The URL of the MoodleNet instance available
$string['defaultmoodlenetname'] = "MoodleNet instance name";
$string['defaultmoodlenetnamevalue'] = 'MoodleNet Central';
$string['defaultmoodlenetname_desc'] = 'The name of the MoodleNet instance available via the activity chooser.';
$string['removalwarning_feature'] = 'If you need to continue using MoodleNet, contact your site administrator about setting up a self-hosted MoodleNet instance.';
$string['removalwarning_service'] = 'After the date, you will no longer be able to browse or add content from MoodleNet Central.';
$string['removalwarning_title'] = 'The MoodleNet service will be shut down on 20 April 2026.';
$string['enablemoodlenet'] = 'Enable MoodleNet integration (inbound)';
$string['enablemoodlenet_desc'] = 'If enabled, a user with the capability to create and manage activities can browse MoodleNet via the activity chooser and import MoodleNet resources into their course. In addition, a user with the capability to restore backups can select a backup file on MoodleNet and restore it into Moodle.';
$string['errorduringdownload'] = 'An error occurred while downloading the file: {$a}';
@@ -27,8 +27,16 @@
<div class="content text-start mb-5 px-5 py-4" data-region="chooser-option-summary-content-container">
<div data-region="moodle-net">
<div class="overlay-icon-container z-index-1 d-none" data-region="spinner"></div>
<img class="w-25 mb-4" aria-hidden="true" src="{{{img}}}">
<img class="w-25 mb-4" alt="" aria-hidden="true" src="{{{img}}}">
<p>{{#str}} instancedescription, tool_moodlenet {{/str}}</p>
{{! Removal warning - always visible when MoodleNet integration is enabled }}
<div class="alert alert-warning w-75 mx-auto mb-3" role="alert">
<strong>{{#str}}removalwarning_title, tool_moodlenet{{/str}}</strong>
<p class="mb-1">{{#str}}removalwarning_service, tool_moodlenet{{/str}}</p>
<p class="mb-0">{{#str}}removalwarning_feature, tool_moodlenet{{/str}}</p>
</div>
<p class="w-75 mx-auto mb-1 mt-5">{{#str}} connectandbrowse, tool_moodlenet {{/str}}</p>
<a class="btn btn-secondary d-block w-75 mx-auto mb-4"
data-action="browse"
@@ -129,6 +129,7 @@ class issuer extends persistent {
\core\oauth2\issuer::EVERYWHERE => get_string('issueruseineverywhere', 'tool_oauth2'),
\core\oauth2\issuer::LOGINONLY => get_string('issueruseinloginonly', 'tool_oauth2'),
\core\oauth2\issuer::SERVICEONLY => get_string('issueruseininternalonly', 'tool_oauth2'),
\core\oauth2\issuer::SMTPWITHXOAUTH2 => get_string('issueruseinsmtpwithoauth', 'tool_oauth2'),
];
$mform->addElement('select', 'showonloginpage', get_string('issuerusein', 'tool_oauth2'), $options);
$mform->addHelpButton('showonloginpage', 'issuerusein', 'tool_oauth2');
@@ -138,6 +139,13 @@ class issuer extends persistent {
$mform->addRule('loginpagename', get_string('maximumchars', '', 255), 'maxlength', 255, 'client');
$mform->addHelpButton('loginpagename', 'issuerloginpagename', 'tool_oauth2');
$mform->hideIf('loginpagename', 'showonloginpage', 'eq', \core\oauth2\issuer::SERVICEONLY);
$mform->hideIf('loginpagename', 'showonloginpage', 'eq', \core\oauth2\issuer::SMTPWITHXOAUTH2);
// Connected email for XOAUTH2.
$mform->addElement('text', 'systememail', get_string('issuersmtpsystememail', 'tool_oauth2'));
$mform->setType('systememail', PARAM_EMAIL);
$mform->addHelpButton('systememail', 'issuersmtpsystememail', 'tool_oauth2');
$mform->hideIf('systememail', 'showonloginpage', 'ne', \core\oauth2\issuer::SMTPWITHXOAUTH2);
// Login scopes.
$mform->addElement('text', 'loginscopes', get_string('issuerloginscopes', 'tool_oauth2'));
@@ -60,7 +60,7 @@ class renderer extends plugin_renderer_base {
get_string('systemauthstatus', 'tool_oauth2') . ' ' . $this->help_icon('systemaccountconnected', 'tool_oauth2'),
get_string('edit'),
];
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$data = [];
$index = 0;
@@ -86,7 +86,8 @@ class renderer extends plugin_renderer_base {
$namecell->header = true;
// Login issuer.
if ((int)$issuer->get('showonloginpage') == issuer::SERVICEONLY) {
if ((int)$issuer->get('showonloginpage') == issuer::SERVICEONLY ||
(int)$issuer->get('showonloginpage') == issuer::SMTPWITHXOAUTH2) {
$loginissuer = $this->pix_icon('no', get_string('notloginissuer', 'tool_oauth2'), 'tool_oauth2');
$logindisplayas = '';
} else {
@@ -230,7 +231,7 @@ class renderer extends plugin_renderer_base {
get_string('url'),
get_string('edit'),
];
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$data = [];
$index = 0;
@@ -289,7 +290,7 @@ class renderer extends plugin_renderer_base {
get_string('userfieldinternalfield', 'tool_oauth2'),
get_string('edit'),
];
$table->attributes['class'] = 'admintable generaltable';
$table->attributes['class'] = 'admintable generaltable table table-hover';
$data = [];
$index = 0;
+4 -1
View File
@@ -89,13 +89,16 @@ $string['issuershowonloginpage'] = 'Show on login page';
$string['issuerrequireconfirmation_help'] = 'Require that all users verify their email address before they can log in with OAuth. This applies to newly created accounts as part of the login process, or when an existing Moodle account is connected to an OAuth login via matching email addresses.';
$string['issuerrequireconfirmation'] = 'Require email verification';
$string['issuers'] = 'Issuers';
$string['issuersmtpsystememail'] = 'SMTP email';
$string['issuersmtpsystememail_help'] = 'If specified, this email will be used to connect a system account for sending email via SMTP. This is required for some OAuth 2 services (e.g. Microsoft). Please check the documentation for your OAuth 2 service to see if this is required.';
$string['issuersservicesallow'] = 'Allow services';
$string['issuersservicesnotallow'] = 'Do not allow services';
$string['issuerusein'] = 'This service will be used';
$string['issuerusein_help'] = 'OAuth 2 services can be used for internal services, on the login page, or both, if required.';
$string['issuerusein_help'] = 'OAuth 2 services can be used for internal services, on the login page, SMTP with XOAUTH2, or both login page and internal services, if required.';
$string['issueruseineverywhere'] = 'Login page and internal services';
$string['issueruseininternalonly'] = 'Internal services only';
$string['issueruseinloginonly'] = 'Login page only';
$string['issueruseinsmtpwithoauth'] = 'SMTP with XOAUTH2 only';
$string['issuerusedforlogin'] = 'Login';
$string['issuerusedforinternal'] = 'Internal services';
$string['linkedin_service'] = 'LinkedIn';
@@ -54,13 +54,18 @@ Feature: Basic OAuth2 functionality
And I should see "Testing service"
And "Allow login" "icon" should exist in the "Testing service" "table_row"
And "Allow services" "icon" should exist in the "Testing service" "table_row"
And I should see "-" in the "Testing service" "table_row"
And "Service discovery successful" "icon" should exist in the "Testing service" "table_row"
And I click on "Configure endpoints" "link" in the "Testing service" "table_row"
And I should see "authorization_endpoint"
And I should not see "discovery_endpoint"
And I should see "discovery_endpoint"
And I should see "device_authorization_endpoint"
And I navigate to "Server > OAuth 2 services" in site administration
And I click on "Configure user field mappings" "link" in the "Testing service" "table_row"
And I should see "firstname" in the "givenName" "table_row"
And I should see "firstname" in the "given_name" "table_row"
And I should see "lastname" in the "family_name" "table_row"
And I should see "idnumber" in the "sub" "table_row"
And I should see "email" in the "email" "table_row"
And I should see "lang" in the "locale" "table_row"
And I navigate to "Server > OAuth 2 services" in site administration
And I click on "Edit" "link" in the "Testing service" "table_row"
And I set the following fields to these values:

Some files were not shown because too many files have changed in this diff Show More