Shamim Rezaie [Fri, 10 Apr 2026 07:11:16 +0000 (17:11 +1000)]
weekly release 5.0.6+
Shamim Rezaie [Fri, 10 Apr 2026 07:11:15 +0000 (17:11 +1000)]
NOBUG: Add upgrade notes
Anupama Sarjoshi [Wed, 14 Jan 2026 07:55:11 +0000 (13:25 +0530)]
MDL-86386 qbank_managecategories: Use batches to remove stale questions
Iterate through stale questions in batches using get_records_sql
to better handle large question banks and avoid memory or timeout
issues during processing.
Michael Hawkins [Mon, 10 Nov 2025 11:30:17 +0000 (19:30 +0800)]
MDL-88145 core: Update deprecated function in security helper unit test
Michael Hawkins [Mon, 10 Nov 2025 11:28:32 +0000 (19:28 +0800)]
MDL-88145 core: Security helper additional unit test and typo fix
Adds unit testing to incorrect call order for get_resolve_info() and
also fixes an incorrect bracket closure on an empty statement.
Paul Holden [Tue, 7 Apr 2026 19:11:45 +0000 (20:11 +0100)]
MDL-88390 repository: explicit string cast of file source data.
Brendan Heywood [Tue, 7 Apr 2026 13:49:04 +0000 (23:49 +1000)]
MDL-87778 tasks: Fix bug with deep linking to log page
Simon Parzer [Sat, 26 Apr 2025 14:32:15 +0000 (16:32 +0200)]
MDL-80496 filter_codehighlighter: add prism- prefix to CSS classes
Add CustomClass plugin to PrismJS
Update behat test
Brendan Heywood [Mon, 9 Feb 2026 23:12:07 +0000 (10:12 +1100)]
MDL-87903 core: Warm local hooks cache from shared cache
Huong Nguyen [Fri, 3 Apr 2026 02:23:33 +0000 (09:23 +0700)]
weekly release 5.0.6+
Huong Nguyen [Fri, 3 Apr 2026 02:23:33 +0000 (09:23 +0700)]
NOBUG: Add upgrade notes
Huong Nguyen [Fri, 3 Apr 2026 02:23:11 +0000 (09:23 +0700)]
NOBUG: Fixed SVG browser compatibility
AMOS bot [Fri, 3 Apr 2026 00:07:45 +0000 (00:07 +0000)]
Automatically generated installer lang files
Paul Holden [Tue, 3 Mar 2026 13:57:35 +0000 (13:57 +0000)]
MDL-88006 ai: normalise line breaks in AI response helper.
Match multiple instances of either CRLF, LF and/or BR tags, replace
them with double <br/> tags for consistent output.
Safat [Wed, 1 Apr 2026 12:02:58 +0000 (23:02 +1100)]
MDL-88092 core_h5p: Fix version conflict
AMOS bot [Thu, 2 Apr 2026 00:08:07 +0000 (00:08 +0000)]
Automatically generated installer lang files
Brendan Heywood [Thu, 18 Dec 2025 13:18:25 +0000 (00:18 +1100)]
MDL-87498 tool_task: Adhoc queue check ignores failed tasks
Co-authored-by: David Woloszyn <david.woloszyn@moodle.com>
Jun Pataleta [Thu, 15 Jan 2026 13:00:29 +0000 (21:00 +0800)]
MDL-77649 glossary: Add top spacing for fullsearch checkbox
This is to meet WCAG 2.2 AA Target size requirements found by
accessibility Behat tests.
Jun Pataleta [Thu, 15 Jan 2026 04:34:28 +0000 (12:34 +0800)]
MDL-77649 glossary: Query user record only when necessary
We should only be querying the user record only when we are displaying
an entry. If there's no entry to be shown, we do not need to query it.
Jun Pataleta [Tue, 23 Dec 2025 08:14:01 +0000 (16:14 +0800)]
MDL-77649 glossary: Use appropriate author lang string
* Create mod_glossary's own `bynameondate` lang string to avoid
violating component communication rules.
Jun Pataleta [Tue, 23 Dec 2025 08:45:45 +0000 (16:45 +0800)]
MDL-77649 glossary: Fix skipped heading levels
* And adjust Behat tests accordingly
Jun Pataleta [Thu, 15 Jan 2026 05:33:18 +0000 (13:33 +0800)]
MDL-77649 glossary: Set presentation role for entry tables
* And for entry formats that display a user picture, make the user
picture decorative only to avoid duplicate user profile links on
the page.
Jun Pataleta [Thu, 15 Jan 2026 05:31:51 +0000 (13:31 +0800)]
MDL-77649 glossary: Set presentation role for glossary functions
* Set the tables rendered by `glossary_print_entry_lower_section()` and
`glossary_print_entry_approval()` as decorative.
Jun Pataleta [Tue, 23 Dec 2025 01:50:05 +0000 (09:50 +0800)]
MDL-77649 glossary: Render category headers without using layout tables
AMOS bot [Wed, 1 Apr 2026 00:07:46 +0000 (00:07 +0000)]
Automatically generated installer lang files
Marcus Green [Sun, 15 Feb 2026 19:48:04 +0000 (20:48 +0100)]
MDL-68335 qbehaviour: read in settings.php files
Shamim Rezaie [Mon, 16 Mar 2026 05:33:08 +0000 (16:33 +1100)]
MDL-88092 core_h5p: Remove the h5plib_v127 plugin
The h5plib_v127 plugin can be removed because it has been replaced with
h5plib_v128, which is using the latest versions of the libraries.
Shamim Rezaie [Mon, 16 Mar 2026 05:27:59 +0000 (16:27 +1100)]
MDL-88092 core_h5p: Update editor lib with Moodle-specific adjustments
Shamim Rezaie [Mon, 16 Mar 2026 05:18:39 +0000 (16:18 +1100)]
MDL-88092 core_h5p: Upgrade joubel/editor library to moodle-1.27.2
This commit is upgrading the joubel/editor library to the one tagged as
moodle-1.27.2 (which interestingly has no difference to moodle-1.27.0).
Shamim Rezaie [Mon, 16 Mar 2026 05:09:25 +0000 (16:09 +1100)]
MDL-88092 core_h5p: Update core lib with Moodle-specific adjustments
Shamim Rezaie [Mon, 16 Mar 2026 04:44:48 +0000 (15:44 +1100)]
MDL-88092 core_h5p: Upgrade joubel/core library to v1.28.0
This commit is upgrading the joubel/core library to the one
tagged as 1.28.0 (which also increases the coreApi minorVersion).
That's why the previous commit was duplicating the existing h5plib_v127.
Shamim Rezaie [Mon, 16 Mar 2026 04:29:04 +0000 (15:29 +1100)]
MDL-88092 h5plib: Create first version of h5plib_v128
AMOS BEGIN
CPY [editor:a11ytitleshowlabel,h5plib_v127],[editor:a11ytitleshowlabel,h5plib_v128]
CPY [editor:a11ytitlehidelabel,h5plib_v127],[editor:a11ytitlehidelabel,h5plib_v128]
CPY [editor:atoz,h5plib_v127],[editor:atoz,h5plib_v128]
CPY [editor:add,h5plib_v127],[editor:add,h5plib_v128]
CPY [editor:addauthor,h5plib_v127],[editor:addauthor,h5plib_v128]
CPY [editor:addentity,h5plib_v127],[editor:addentity,h5plib_v128]
CPY [editor:addfile,h5plib_v127],[editor:addfile,h5plib_v128]
CPY [editor:addnewchange,h5plib_v127],[editor:addnewchange,h5plib_v128]
CPY [editor:addtitle,h5plib_v127],[editor:addtitle,h5plib_v128]
CPY [editor:addvideodescription,h5plib_v127],[editor:addvideodescription,h5plib_v128]
CPY [editor:avtablistlabel,h5plib_v127],[editor:avtablistlabel,h5plib_v128]
CPY [editor:belowmin,h5plib_v127],[editor:belowmin,h5plib_v128]
CPY [editor:cancel,h5plib_v127],[editor:cancel,h5plib_v128]
CPY [editor:cancellabel,h5plib_v127],[editor:cancellabel,h5plib_v128]
CPY [editor:changefile,h5plib_v127],[editor:changefile,h5plib_v128]
CPY [editor:changelanguage,h5plib_v127],[editor:changelanguage,h5plib_v128]
CPY [editor:changelibrary,h5plib_v127],[editor:changelibrary,h5plib_v128]
CPY [editor:changelogdescription,h5plib_v127],[editor:changelogdescription,h5plib_v128]
CPY [editor:close,h5plib_v127],[editor:close,h5plib_v128]
CPY [editor:commonfields,h5plib_v127],[editor:commonfields,h5plib_v128]
CPY [editor:commonfieldsdescription,h5plib_v127],[editor:commonfieldsdescription,h5plib_v128]
CPY [editor:confirmchangelibrary,h5plib_v127],[editor:confirmchangelibrary,h5plib_v128]
CPY [editor:confirmdeletechangelog,h5plib_v127],[editor:confirmdeletechangelog,h5plib_v128]
CPY [editor:confirmimageremoval,h5plib_v127],[editor:confirmimageremoval,h5plib_v128]
CPY [editor:confirmpastebuttontext,h5plib_v127],[editor:confirmpastebuttontext,h5plib_v128]
CPY [editor:confirmpastecontent,h5plib_v127],[editor:confirmpastecontent,h5plib_v128]
CPY [editor:confirmremoval,h5plib_v127],[editor:confirmremoval,h5plib_v128]
CPY [editor:confirmremoveauthor,h5plib_v127],[editor:confirmremoveauthor,h5plib_v128]
CPY [editor:contenttypebackbuttonlabel,h5plib_v127],[editor:contenttypebackbuttonlabel,h5plib_v128]
CPY [editor:contenttypecacheoutdated,h5plib_v127],[editor:contenttypecacheoutdated,h5plib_v128]
CPY [editor:contenttypecacheoutdateddesc,h5plib_v127],[editor:contenttypecacheoutdateddesc,h5plib_v128]
CPY [editor:contenttypedemobuttonlabel,h5plib_v127],[editor:contenttypedemobuttonlabel,h5plib_v128]
CPY [editor:contenttypedetailbuttonlabel,h5plib_v127],[editor:contenttypedetailbuttonlabel,h5plib_v128]
CPY [editor:contenttypegetbuttonlabel,h5plib_v127],[editor:contenttypegetbuttonlabel,h5plib_v128]
CPY [editor:contenttypeiconalttext,h5plib_v127],[editor:contenttypeiconalttext,h5plib_v128]
CPY [editor:contenttypeinstallbuttonlabel,h5plib_v127],[editor:contenttypeinstallbuttonlabel,h5plib_v128]
CPY [editor:contenttypeinstallerror,h5plib_v127],[editor:contenttypeinstallerror,h5plib_v128]
CPY [editor:contenttypeinstallsuccess,h5plib_v127],[editor:contenttypeinstallsuccess,h5plib_v128]
CPY [editor:contenttypeinstallingbuttonlabel,h5plib_v127],[editor:contenttypeinstallingbuttonlabel,h5plib_v128]
CPY [editor:contenttypelicensepaneltitle,h5plib_v127],[editor:contenttypelicensepaneltitle,h5plib_v128]
CPY [editor:contenttypenotinstalled,h5plib_v127],[editor:contenttypenotinstalled,h5plib_v128]
CPY [editor:contenttypenotinstalleddesc,h5plib_v127],[editor:contenttypenotinstalleddesc,h5plib_v128]
CPY [editor:contenttypeowner,h5plib_v127],[editor:contenttypeowner,h5plib_v128]
CPY [editor:contenttyperestricted,h5plib_v127],[editor:contenttyperestricted,h5plib_v128]
CPY [editor:contenttyperestricteddesc,h5plib_v127],[editor:contenttyperestricteddesc,h5plib_v128]
CPY [editor:contenttypesearchfieldplaceholder,h5plib_v127],[editor:contenttypesearchfieldplaceholder,h5plib_v128]
CPY [editor:contenttypesectionall,h5plib_v127],[editor:contenttypesectionall,h5plib_v128]
CPY [editor:contenttypeunsupportedapiversioncontent,h5plib_v127],[editor:contenttypeunsupportedapiversioncontent,h5plib_v128]
CPY [editor:contenttypeunsupportedapiversiontitle,h5plib_v127],[editor:contenttypeunsupportedapiversiontitle,h5plib_v128]
CPY [editor:contenttypeupdateavailable,h5plib_v127],[editor:contenttypeupdateavailable,h5plib_v128]
CPY [editor:contenttypeupdatebuttonlabel,h5plib_v127],[editor:contenttypeupdatebuttonlabel,h5plib_v128]
CPY [editor:contenttypeupdatesuccess,h5plib_v127],[editor:contenttypeupdatesuccess,h5plib_v128]
CPY [editor:contenttypeupdatingbuttonlabel,h5plib_v127],[editor:contenttypeupdatingbuttonlabel,h5plib_v128]
CPY [editor:contenttypeusebuttonlabel,h5plib_v127],[editor:contenttypeusebuttonlabel,h5plib_v128]
CPY [editor:contributetranslations,h5plib_v127],[editor:contributetranslations,h5plib_v128]
CPY [editor:copiedbutton,h5plib_v127],[editor:copiedbutton,h5plib_v128]
CPY [editor:copiedtoclipboard,h5plib_v127],[editor:copiedtoclipboard,h5plib_v128]
CPY [editor:copybutton,h5plib_v127],[editor:copybutton,h5plib_v128]
CPY [editor:copytoclipboard,h5plib_v127],[editor:copytoclipboard,h5plib_v128]
CPY [editor:createcontenttablabel,h5plib_v127],[editor:createcontenttablabel,h5plib_v128]
CPY [editor:currentmenuselected,h5plib_v127],[editor:currentmenuselected,h5plib_v128]
CPY [editor:editcopyright,h5plib_v127],[editor:editcopyright,h5plib_v128]
CPY [editor:editimage,h5plib_v127],[editor:editimage,h5plib_v128]
CPY [editor:editmode,h5plib_v127],[editor:editmode,h5plib_v128]
CPY [editor:enteraudiotitle,h5plib_v127],[editor:enteraudiotitle,h5plib_v128]
CPY [editor:enteraudiourl,h5plib_v127],[editor:enteraudiourl,h5plib_v128]
CPY [editor:enterfullscreenbuttonlabel,h5plib_v127],[editor:enterfullscreenbuttonlabel,h5plib_v128]
CPY [editor:entervideotitle,h5plib_v127],[editor:entervideotitle,h5plib_v128]
CPY [editor:entervideourl,h5plib_v127],[editor:entervideourl,h5plib_v128]
CPY [editor:errorcalculatingmaxscore,h5plib_v127],[editor:errorcalculatingmaxscore,h5plib_v128]
CPY [editor:errorcommunicatinghubcontent,h5plib_v127],[editor:errorcommunicatinghubcontent,h5plib_v128]
CPY [editor:errorcommunicatinghubtitle,h5plib_v127],[editor:errorcommunicatinghubtitle,h5plib_v128]
CPY [editor:errorheader,h5plib_v127],[editor:errorheader,h5plib_v128]
CPY [editor:errornotsupported,h5plib_v127],[editor:errornotsupported,h5plib_v128]
CPY [editor:errorparamsbroken,h5plib_v127],[editor:errorparamsbroken,h5plib_v128]
CPY [editor:errortoohighversion,h5plib_v127],[editor:errortoohighversion,h5plib_v128]
CPY [editor:example,h5plib_v127],[editor:example,h5plib_v128]
CPY [editor:exceedsmax,h5plib_v127],[editor:exceedsmax,h5plib_v128]
CPY [editor:exitfullscreenbuttonlabel,h5plib_v127],[editor:exitfullscreenbuttonlabel,h5plib_v128]
CPY [editor:expandcollapse,h5plib_v127],[editor:expandcollapse,h5plib_v128]
CPY [editor:filetolarge,h5plib_v127],[editor:filetolarge,h5plib_v128]
CPY [editor:fillinthefieldsbelow,h5plib_v127],[editor:fillinthefieldsbelow,h5plib_v128]
CPY [editor:gethelp,h5plib_v127],[editor:gethelp,h5plib_v128]
CPY [editor:h5pfileuploadservererrorcontent,h5plib_v127],[editor:h5pfileuploadservererrorcontent,h5plib_v128]
CPY [editor:h5pfileuploadservererrortitle,h5plib_v127],[editor:h5pfileuploadservererrortitle,h5plib_v128]
CPY [editor:h5pfilevalidationfailedcontent,h5plib_v127],[editor:h5pfilevalidationfailedcontent,h5plib_v128]
CPY [editor:h5pfilevalidationfailedtitle,h5plib_v127],[editor:h5pfilevalidationfailedtitle,h5plib_v128]
CPY [editor:h5pfilewrongextensioncontent,h5plib_v127],[editor:h5pfilewrongextensioncontent,h5plib_v128]
CPY [editor:h5pfilewrongextensiontitle,h5plib_v127],[editor:h5pfilewrongextensiontitle,h5plib_v128]
CPY [editor:height,h5plib_v127],[editor:height,h5plib_v128]
CPY [editor:hide,h5plib_v127],[editor:hide,h5plib_v128]
CPY [editor:hideimportantinstructions,h5plib_v127],[editor:hideimportantinstructions,h5plib_v128]
CPY [editor:hubpanellabel,h5plib_v127],[editor:hubpanellabel,h5plib_v128]
CPY [editor:illegaldecimalnumber,h5plib_v127],[editor:illegaldecimalnumber,h5plib_v128]
CPY [editor:imagelightboxprogress,h5plib_v127],[editor:imagelightboxprogress,h5plib_v128]
CPY [editor:imagelightboxtitle,h5plib_v127],[editor:imagelightboxtitle,h5plib_v128]
CPY [editor:importantinstructions,h5plib_v127],[editor:importantinstructions,h5plib_v128]
CPY [editor:insert,h5plib_v127],[editor:insert,h5plib_v128]
CPY [editor:invalidformat,h5plib_v127],[editor:invalidformat,h5plib_v128]
CPY [editor:language,h5plib_v127],[editor:language,h5plib_v128]
CPY [editor:librarymissing,h5plib_v127],[editor:librarymissing,h5plib_v128]
CPY [editor:licensecandistribute,h5plib_v127],[editor:licensecandistribute,h5plib_v128]
CPY [editor:licensecanholdliable,h5plib_v127],[editor:licensecanholdliable,h5plib_v128]
CPY [editor:licensecanmodify,h5plib_v127],[editor:licensecanmodify,h5plib_v128]
CPY [editor:licensecansublicense,h5plib_v127],[editor:licensecansublicense,h5plib_v128]
CPY [editor:licensecanusecommercially,h5plib_v127],[editor:licensecanusecommercially,h5plib_v128]
CPY [editor:licensecannotholdliable,h5plib_v127],[editor:licensecannotholdliable,h5plib_v128]
CPY [editor:licensedescription,h5plib_v127],[editor:licensedescription,h5plib_v128]
CPY [editor:licensefetchdetailsfailed,h5plib_v127],[editor:licensefetchdetailsfailed,h5plib_v128]
CPY [editor:licensemodalsubtitle,h5plib_v127],[editor:licensemodalsubtitle,h5plib_v128]
CPY [editor:licensemodaltitle,h5plib_v127],[editor:licensemodaltitle,h5plib_v128]
CPY [editor:licensemustincludecopyright,h5plib_v127],[editor:licensemustincludecopyright,h5plib_v128]
CPY [editor:licensemustincludelicense,h5plib_v127],[editor:licensemustincludelicense,h5plib_v128]
CPY [editor:licenseunspecified,h5plib_v127],[editor:licenseunspecified,h5plib_v128]
CPY [editor:listbelowmin,h5plib_v127],[editor:listbelowmin,h5plib_v128]
CPY [editor:listexceedsmax,h5plib_v127],[editor:listexceedsmax,h5plib_v128]
CPY [editor:listlabel,h5plib_v127],[editor:listlabel,h5plib_v128]
CPY [editor:loading,h5plib_v127],[editor:loading,h5plib_v128]
CPY [editor:loadingimageeditor,h5plib_v127],[editor:loadingimageeditor,h5plib_v128]
CPY [editor:logthischange,h5plib_v127],[editor:logthischange,h5plib_v128]
CPY [editor:loggedchanges,h5plib_v127],[editor:loggedchanges,h5plib_v128]
CPY [editor:maxscoresemanticsmissing,h5plib_v127],[editor:maxscoresemanticsmissing,h5plib_v128]
CPY [editor:metadata,h5plib_v127],[editor:metadata,h5plib_v128]
CPY [editor:metadatasharingandlicensinginfo,h5plib_v127],[editor:metadatasharingandlicensinginfo,h5plib_v128]
CPY [editor:missingproperty,h5plib_v127],[editor:missingproperty,h5plib_v128]
CPY [editor:missingtranslation,h5plib_v127],[editor:missingtranslation,h5plib_v128]
CPY [editor:newchangehasbeenlogged,h5plib_v127],[editor:newchangehasbeenlogged,h5plib_v128]
CPY [editor:newestfirst,h5plib_v127],[editor:newestfirst,h5plib_v128]
CPY [editor:nextimage,h5plib_v127],[editor:nextimage,h5plib_v128]
CPY [editor:nochangeshavebeenlogged,h5plib_v127],[editor:nochangeshavebeenlogged,h5plib_v128]
CPY [editor:nocontenttypesavailable,h5plib_v127],[editor:nocontenttypesavailable,h5plib_v128]
CPY [editor:nocontenttypesavailabledesc,h5plib_v127],[editor:nocontenttypesavailabledesc,h5plib_v128]
CPY [editor:nofollow,h5plib_v127],[editor:nofollow,h5plib_v128]
CPY [editor:notimageordimensionsfield,h5plib_v127],[editor:notimageordimensionsfield,h5plib_v128]
CPY [editor:numresults,h5plib_v127],[editor:numresults,h5plib_v128]
CPY [editor:numberfield,h5plib_v127],[editor:numberfield,h5plib_v128]
CPY [editor:ok,h5plib_v127],[editor:ok,h5plib_v128]
CPY [editor:onlynumbers,h5plib_v127],[editor:onlynumbers,h5plib_v128]
CPY [editor:or,h5plib_v127],[editor:or,h5plib_v128]
CPY [editor:orderitemdown,h5plib_v127],[editor:orderitemdown,h5plib_v128]
CPY [editor:orderitemup,h5plib_v127],[editor:orderitemup,h5plib_v128]
CPY [editor:outofstep,h5plib_v127],[editor:outofstep,h5plib_v128]
CPY [editor:pasteandreplacebutton,h5plib_v127],[editor:pasteandreplacebutton,h5plib_v128]
CPY [editor:pasteandreplacefromclipboard,h5plib_v127],[editor:pasteandreplacefromclipboard,h5plib_v128]
CPY [editor:pastebutton,h5plib_v127],[editor:pastebutton,h5plib_v128]
CPY [editor:pastecontent,h5plib_v127],[editor:pastecontent,h5plib_v128]
CPY [editor:pastecontentnotsupported,h5plib_v127],[editor:pastecontentnotsupported,h5plib_v128]
CPY [editor:pastecontentrestricted,h5plib_v127],[editor:pastecontentrestricted,h5plib_v128]
CPY [editor:pasteerror,h5plib_v127],[editor:pasteerror,h5plib_v128]
CPY [editor:pastefromclipboard,h5plib_v127],[editor:pastefromclipboard,h5plib_v128]
CPY [editor:pastenocontent,h5plib_v127],[editor:pastenocontent,h5plib_v128]
CPY [editor:pastetoonew,h5plib_v127],[editor:pastetoonew,h5plib_v128]
CPY [editor:pastetooold,h5plib_v127],[editor:pastetooold,h5plib_v128]
CPY [editor:popularfirst,h5plib_v127],[editor:popularfirst,h5plib_v128]
CPY [editor:previousimage,h5plib_v127],[editor:previousimage,h5plib_v128]
CPY [editor:proceedbuttonlabel,h5plib_v127],[editor:proceedbuttonlabel,h5plib_v128]
CPY [editor:readless,h5plib_v127],[editor:readless,h5plib_v128]
CPY [editor:readmore,h5plib_v127],[editor:readmore,h5plib_v128]
CPY [editor:recentlyusedfirst,h5plib_v127],[editor:recentlyusedfirst,h5plib_v128]
CPY [editor:reloadbuttonlabel,h5plib_v127],[editor:reloadbuttonlabel,h5plib_v128]
CPY [editor:removefile,h5plib_v127],[editor:removefile,h5plib_v128]
CPY [editor:removeimage,h5plib_v127],[editor:removeimage,h5plib_v128]
CPY [editor:removeitem,h5plib_v127],[editor:removeitem,h5plib_v128]
CPY [editor:requiredproperty,h5plib_v127],[editor:requiredproperty,h5plib_v128]
CPY [editor:resettooriginallabel,h5plib_v127],[editor:resettooriginallabel,h5plib_v128]
CPY [editor:savelabel,h5plib_v127],[editor:savelabel,h5plib_v128]
CPY [editor:savemetadata,h5plib_v127],[editor:savemetadata,h5plib_v128]
CPY [editor:screenshots,h5plib_v127],[editor:screenshots,h5plib_v128]
CPY [editor:scriptmissing,h5plib_v127],[editor:scriptmissing,h5plib_v128]
CPY [editor:searchresults,h5plib_v127],[editor:searchresults,h5plib_v128]
CPY [editor:selectfiletoupload,h5plib_v127],[editor:selectfiletoupload,h5plib_v128]
CPY [editor:selectlibrary,h5plib_v127],[editor:selectlibrary,h5plib_v128]
CPY [editor:semanticserror,h5plib_v127],[editor:semanticserror,h5plib_v128]
CPY [editor:show,h5plib_v127],[editor:show,h5plib_v128]
CPY [editor:showimportantinstructions,h5plib_v127],[editor:showimportantinstructions,h5plib_v128]
CPY [editor:tabtitlebasicfileupload,h5plib_v127],[editor:tabtitlebasicfileupload,h5plib_v128]
CPY [editor:tabtitleinputlinkurl,h5plib_v127],[editor:tabtitleinputlinkurl,h5plib_v128]
CPY [editor:textfield,h5plib_v127],[editor:textfield,h5plib_v128]
CPY [editor:thecontenttype,h5plib_v127],[editor:thecontenttype,h5plib_v128]
CPY [editor:thiswillpotentially,h5plib_v127],[editor:thiswillpotentially,h5plib_v128]
CPY [editor:title,h5plib_v127],[editor:title,h5plib_v128]
CPY [editor:toolong,h5plib_v127],[editor:toolong,h5plib_v128]
CPY [editor:tryagain,h5plib_v127],[editor:tryagain,h5plib_v128]
CPY [editor:tutorial,h5plib_v127],[editor:tutorial,h5plib_v128]
CPY [editor:unabletointerpreterror,h5plib_v127],[editor:unabletointerpreterror,h5plib_v128]
CPY [editor:unabletointerpretsolution,h5plib_v127],[editor:unabletointerpretsolution,h5plib_v128]
CPY [editor:unknownfieldpath,h5plib_v127],[editor:unknownfieldpath,h5plib_v128]
CPY [editor:uploadinstructionstitle,h5plib_v127],[editor:uploadinstructionstitle,h5plib_v128]
CPY [editor:uploadplaceholder,h5plib_v127],[editor:uploadplaceholder,h5plib_v128]
CPY [editor:uploadsuccess,h5plib_v127],[editor:uploadsuccess,h5plib_v128]
CPY [editor:uploadtablabel,h5plib_v127],[editor:uploadtablabel,h5plib_v128]
CPY [editor:uploadvideotitle,h5plib_v127],[editor:uploadvideotitle,h5plib_v128]
CPY [editor:uploading,h5plib_v127],[editor:uploading,h5plib_v128]
CPY [editor:uploadingthrobber,h5plib_v127],[editor:uploadingthrobber,h5plib_v128]
CPY [editor:usedforsearchingreportsandcopyrightinformation,h5plib_v127],[editor:usedforsearchingreportsandcopyrightinformation,h5plib_v128]
CPY [editor:videoquality,h5plib_v127],[editor:videoquality,h5plib_v128]
CPY [editor:videoqualitydefaultlabel,h5plib_v127],[editor:videoqualitydefaultlabel,h5plib_v128]
CPY [editor:videoqualitydescription,h5plib_v127],[editor:videoqualitydescription,h5plib_v128]
CPY [editor:warningchangebrowsingtoseeresults,h5plib_v127],[editor:warningchangebrowsingtoseeresults,h5plib_v128]
CPY [editor:warningnocontenttypesinstalled,h5plib_v127],[editor:warningnocontenttypesinstalled,h5plib_v128]
CPY [editor:warningupdateavailablebody,h5plib_v127],[editor:warningupdateavailablebody,h5plib_v128]
CPY [editor:warningupdateavailabletitle,h5plib_v127],[editor:warningupdateavailabletitle,h5plib_v128]
CPY [editor:width,h5plib_v127],[editor:width,h5plib_v128]
AMOS END
AMOS bot [Tue, 31 Mar 2026 00:07:46 +0000 (00:07 +0000)]
Automatically generated installer lang files
Huong Nguyen [Fri, 27 Mar 2026 08:40:52 +0000 (15:40 +0700)]
weekly release 5.0.6+
Huong Nguyen [Fri, 27 Mar 2026 08:40:51 +0000 (15:40 +0700)]
NOBUG: Add upgrade notes
Andi Permana [Fri, 20 Mar 2026 11:17:29 +0000 (18:17 +0700)]
MDL-87632 availability_completion: Fix subsection previous activity
When delegated sections (subsections) use 'Previous activity with completion'
restrictions, the previous activity was incorrectly calculated from the global
course iteration context instead of the subsection's local context.
Shamiso Jaravaza [Tue, 24 Feb 2026 17:15:50 +0000 (10:15 -0700)]
MDL-87957 mod_bigbluebuttonbn: Fix meeting events
Laurent David [Wed, 25 Mar 2026 10:12:45 +0000 (11:12 +0100)]
MDL-88285 core_courseformat: Dimmed styling to restricted sections
Christian Abila [Wed, 25 Mar 2026 06:36:42 +0000 (07:36 +0100)]
MDL-88012 core: Force unique MessageID when sending bulk mail
AMOS bot [Thu, 26 Mar 2026 00:07:45 +0000 (00:07 +0000)]
Automatically generated installer lang files
Hai Nguyen Van [Wed, 3 Dec 2025 10:28:29 +0000 (10:28 +0000)]
MDL-86298 filepicker: prevent renaming file to disallowed extensions
jfedericobn [Wed, 25 Mar 2026 13:56:29 +0000 (13:56 +0000)]
MDL-87509 mod_bigbluebuttonbn: Fix protected recording link bug
Paul Holden [Wed, 17 Dec 2025 16:16:00 +0000 (16:16 +0000)]
MDL-87471 tiny_autosave: use user context to retrieve draft files.
Muhammad Arnaldo [Wed, 25 Mar 2026 09:04:09 +0000 (16:04 +0700)]
MDL-88039 mathjax: Guard configure() against overwriting
Huong Nguyen [Wed, 25 Feb 2026 02:50:42 +0000 (09:50 +0700)]
MDL-87822 core_files: Fix breaking changes introduced by MDL-86802
David Woloszyn [Wed, 25 Mar 2026 06:38:48 +0000 (17:38 +1100)]
MDL-77558 mod_forum: Mark posts as read in forum grader
David Kelly [Wed, 21 May 2025 11:28:57 +0000 (12:28 +0100)]
MDL-85544 glossary: Use core_collator for formatted concept sorting
Paul Holden [Tue, 30 Dec 2025 12:24:07 +0000 (12:24 +0000)]
MDL-87560 assignsubmission_onlinetext: indicate truncated summary.
Only when the submission has been truncated should we show the
"View more" link, otherwise it appears to not do anything for already
short text.
Paul Holden [Thu, 12 Mar 2026 21:29:41 +0000 (21:29 +0000)]
MDL-86989 tool_lp: remove non-functional edit action as required.
meirzamoodle [Tue, 24 Mar 2026 07:39:44 +0000 (14:39 +0700)]
MDL-88279 core_session: fix cluster test retry count assertion
Update session_redis_cluster_test to expect 3 connection attempts
instead of 5, matching the $maxretries default value in redis.php.
David Woloszyn [Mon, 23 Mar 2026 02:37:15 +0000 (13:37 +1100)]
MDL-87626 core_search: Fix typo in input value check
Co-authored-by: Uli Wessmann
AMOS bot [Sat, 21 Mar 2026 00:07:49 +0000 (00:07 +0000)]
Automatically generated installer lang files
Luca Bösch [Mon, 26 Jan 2026 11:10:42 +0000 (12:10 +0100)]
MDL-87748 assign: format checkbox with Bootstrap classes.
Shamim Rezaie [Fri, 20 Mar 2026 04:11:21 +0000 (15:11 +1100)]
weekly release 5.0.6+
Shamim Rezaie [Fri, 20 Mar 2026 04:11:20 +0000 (15:11 +1100)]
NOBUG: Add upgrade notes
Stefan Hanauska [Sun, 9 Mar 2025 08:47:51 +0000 (09:47 +0100)]
MDL-84780 course: Disabled modules are not allowed
Luca Bösch [Mon, 8 Dec 2025 23:00:20 +0000 (00:00 +0100)]
MDL-87320 forum: Correctly escape group names.
Brendan Heywood [Thu, 19 Mar 2026 14:20:01 +0000 (01:20 +1100)]
MDL-87580 task: Fix task output autolinking
Jun Pataleta [Wed, 18 Mar 2026 09:41:19 +0000 (17:41 +0800)]
MDL-81241 theme_boost: Accessibility test for the footer region links
Jun Pataleta [Wed, 18 Mar 2026 09:37:57 +0000 (17:37 +0800)]
MDL-81241 theme_boost: Ensure footer links have sufficient spacing
Safat [Wed, 18 Mar 2026 13:33:17 +0000 (00:33 +1100)]
MDL-87959 tool_installaddon: Fix behats for activity chooser footer
Mark Sharp [Wed, 18 Mar 2026 15:45:07 +0000 (15:45 +0000)]
MDL-83459 mod_assign: change switchids to use cmid
Andi Permana [Wed, 4 Mar 2026 08:48:18 +0000 (15:48 +0700)]
MDL-87592 auth_email: preserve wantsurl through MFA email confirmation
Raquel Ortega [Wed, 4 Mar 2026 18:16:16 +0000 (19:16 +0100)]
MDL-66415 core_message: Improve bulk messaging result handling
Jun Pataleta [Tue, 17 Mar 2026 15:47:00 +0000 (23:47 +0800)]
MDL-85451 block_timeline: Add accessibility Behat test coverage
Jun Pataleta [Tue, 17 Mar 2026 15:46:39 +0000 (23:46 +0800)]
MDL-85451 block_timeline: Group the due date filter options
To ensure that the filter options for the day filter menu matches
the menu pattern and pass accessibility checks, we need to:
* Group the due date filter options, labelled by the "Due date"
"heading".
* Set the "Due date" heading with a presentation role to prevent
assistive technologies from announcing it when the user goes through
the menu options.
Jun Pataleta [Tue, 17 Mar 2026 15:10:15 +0000 (23:10 +0800)]
MDL-85451 block_timeline: Fix heading levels
David Carrillo [Mon, 16 Mar 2026 12:16:32 +0000 (13:16 +0100)]
MDL-88226 phpunit: Fix fragile tests using adhoc task manager
- Reset task manager state when resetting all data
- mod_quiz: Fix fragile adhoc task manager tests
- mod_assign: Fix fragile adhoc task manager tests
Paul Holden [Tue, 3 Mar 2026 13:06:16 +0000 (13:06 +0000)]
MDL-88076 tool_mfa: improved parsing of redirect exclusions config.
Ensure all permutations of EOL markers are covered/trimmed.
yusufwib01 [Fri, 13 Mar 2026 19:12:16 +0000 (02:12 +0700)]
MDL-87935 aiprovider_ollama: fix incorrect error response handling
Paul Holden [Fri, 13 Mar 2026 12:36:27 +0000 (12:36 +0000)]
MDL-88211 backup: remove redundant usage of task manager from tests.
The asynchronouse backup/restore tests are only concerned with testing
the implementation of the accompanying task class directly. When they
try to do so at a distance via the task manager API they introduce
random failures by failing to account for different queued tasks that
come from other components (e.g. Workplace).
Daniel Poggenpohl [Wed, 18 Jun 2025 15:51:56 +0000 (17:51 +0200)]
MDL-83096 mod_lti: Register view completion when launching in new window
Philipp Memmel [Fri, 13 Feb 2026 19:09:28 +0000 (20:09 +0100)]
MDL-86839 grunt: Make grunt watch respect --force option
Safat [Thu, 19 Feb 2026 03:18:19 +0000 (14:18 +1100)]
MDL-87959 admin: Add marketplace availability in notifications
Safat [Thu, 19 Feb 2026 03:17:40 +0000 (14:17 +1100)]
MDL-87959 tool_installaddon: Add support for marketplace
Jonathon Fowler [Fri, 28 Nov 2025 02:51:31 +0000 (12:51 +1000)]
MDL-82439 iplookup: catch and handle GeoIp2 exceptions
Paul Holden [Tue, 16 Dec 2025 11:24:46 +0000 (11:24 +0000)]
MDL-87331 course: treat return URL as local when editing course.
Albert Gasset [Thu, 12 Mar 2026 10:08:14 +0000 (11:08 +0100)]
MDL-87795 message_airnotifier: Handle 404 (unregistered token) responses
Paul Holden [Thu, 12 Mar 2026 09:16:14 +0000 (09:16 +0000)]
MDL-88197 customfield_number: observe required field configuration.
Huong Nguyen [Fri, 7 Nov 2025 07:48:40 +0000 (14:48 +0700)]
MDL-86843 tool_task: style tables correctly.
Andi Permana [Mon, 9 Mar 2026 04:12:06 +0000 (11:12 +0700)]
MDL-87548 repository_wikimedia: Handle HTTP 429 rate limiting
Huong Nguyen [Thu, 12 Mar 2026 03:47:50 +0000 (10:47 +0700)]
MDL-87708 tool_moodlenet: Remove post install task
Huong Nguyen [Thu, 12 Mar 2026 02:24:22 +0000 (09:24 +0700)]
MDL-87708 admin: Improve MoodleNet removal warnings message
Andi Permana [Fri, 6 Feb 2026 07:32:42 +0000 (14:32 +0700)]
MDL-87708 tool_moodlenet: Clean up moodle.net configs in stable
Part of MDL-87351
- Discourage tool_moodlenet unless pointing to custom installation
- Clear activity chooser footer if set to MoodleNet
- Cleanup happens for: moodle.net URL, www.moodle.net, or empty config
- Preserves custom/local MoodleNet installations
hieuvu [Tue, 23 Dec 2025 08:15:18 +0000 (15:15 +0700)]
MDL-87516 core_question: update behaviour when update question attempt.
Stefan Topfstedt [Thu, 12 Mar 2026 00:40:24 +0000 (17:40 -0700)]
MDL-88122 navigation: omit empty breadcrumb container in output.
Sara Arjona [Mon, 2 Mar 2026 10:44:54 +0000 (11:44 +0100)]
MDL-88109 router: Use unencoded URL for location redirect
Hai Nguyen Van [Mon, 24 Nov 2025 08:55:52 +0000 (08:55 +0000)]
MDL-86616 filepicker: link restrictions to input via aria-describedby
Iñigo Zendegi [Mon, 2 Jun 2025 15:38:08 +0000 (17:38 +0200)]
MDL-85637 question: Optimize max question version SQL query
Anupama Sarjoshi [Tue, 24 Feb 2026 08:36:52 +0000 (14:06 +0530)]
MDL-74519 badges: Fix date validation in course completion criteria
Ensures that badge awarding correctly evaluates the configured by-date
condition in course and course set completion criteria.
Co-authored by: Diego Campos
AMOS bot [Wed, 11 Mar 2026 00:09:28 +0000 (00:09 +0000)]
Automatically generated installer lang files
Jun Pataleta [Mon, 23 Feb 2026 10:22:21 +0000 (18:22 +0800)]
MDL-81608 quiz: Add `Add` menu spacing to prevent overlap
Jun Pataleta [Wed, 11 Feb 2026 10:15:31 +0000 (18:15 +0800)]
MDL-81608 quiz: Set more meaningful button labels
* Add/remove page break buttons
* Move question buttons
Jun Pataleta [Fri, 6 Feb 2026 11:20:29 +0000 (19:20 +0800)]
MDL-81608 core: Add alt text to the YUI spinner image
The accessibility Behat test added to the quiz editing page uncovered
that the loading spinner icon does not have an appropriate alt text.
Jun Pataleta [Fri, 6 Feb 2026 09:39:12 +0000 (17:39 +0800)]
MDL-81608 quiz: Adjust size and spacing for the quiz edit page buttons
* In order to meet WCAG 2.2 criterion for minimum target size and make
it easier for users who have mobility limitations to use the quiz
editing page, we need to use the Bootstrap icon button styles and
increase the size and the spacing for the following buttons:
* Add/remove page break button
* Lock/unlock question dependency button
* This commit also makes the icons within the buttons as decorative and
moves the accessible name to the button elements themselves via the
aria-label attribute.
* Adjust Behat tests for checking the dependency buttons.
* Add accessibility Behat coverage for the quiz edit page.
Jun Pataleta [Thu, 5 Feb 2026 06:14:47 +0000 (14:14 +0800)]
MDL-81608 core: Label YUI dragdrop handles appropriately
The YUI dragdrop handles rely on the button's title attribute for its
accessible label. We should label it appropriately using the
aria-label attribute.
Paul Holden [Mon, 9 Mar 2026 10:27:08 +0000 (10:27 +0000)]
MDL-88080 admin: initially focus the form element failing validation.
This appears to replicate what the ancient admin_externalpage_print_header
method did prior to being deprecated in
db785816, however its replacement
didn't support the same $focus argument - hence doing so manually now.
Paul Holden [Wed, 7 Jan 2026 10:38:39 +0000 (10:38 +0000)]
MDL-87605 editor_tiny: serve minified version of Javascript files.
Per documentation[1], serving the initial TinyMCE file minified induces
it to also serve other files (theme, plugin) in the same manner.
[1] https://www.tiny.cloud/docs/tinymce/5/integration-and-setup/#suffix
Paul Holden [Thu, 29 Jan 2026 17:10:20 +0000 (17:10 +0000)]
MDL-87803 blocks: set ARIA label to string content value.
Previously it was a string instance, which meant it wasn't encoded
correctly when used as part of the delete block confirmation.
Michael Hawkins [Fri, 6 Mar 2026 10:48:43 +0000 (18:48 +0800)]
MDL-86698 core: Update security.txt expiry