Compare commits

...

299 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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 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
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
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
Paul Holden 1babb4f4c2 MDL-85513 output: centre chevron icons within collapsible section. 2025-05-15 23:20:09 +01: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
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
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
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
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
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 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
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
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
490 changed files with 4940 additions and 1144 deletions
+43
View File
@@ -6,6 +6,49 @@ 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.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()) {
$opts = ['dependencies' => $childpage->get_dependencies_for_javascript()];
$PAGE->requires->js_call_amd('core/showhidesettings', 'init', [$opts]);
}
}
$outputhtml .= html_writer::end_tag('fieldset');
}
+197
View File
@@ -4897,4 +4897,201 @@
</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="14" />
<VENDOR name="mssql" version="14.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_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_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+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');
+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');
+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;
}
+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;
}
+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;
}
+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;
}
@@ -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"
+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.
*
+7
View File
@@ -530,6 +530,13 @@ 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.
if (WS_SERVER || AJAX_SCRIPT) {
if (isset($SESSION->mfa_pending) && !empty($SESSION->mfa_pending)) {
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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.';
+1
View File
@@ -150,6 +150,7 @@ $string['settings:redir_exclusions_help'] = 'Each new line is a relative URL fro
$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['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"
+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
@@ -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;
}
+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;
}
@@ -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'));
@@ -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 {
+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,17 @@ 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 "givenname" "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:
+4
View File
@@ -34,6 +34,10 @@ if (function_exists('opcache_reset')) {
define('IGNORE_COMPONENT_CACHE', true);
// It makes no sense to use BEHAT_CLI for this script (you cannot initialise PHPunit starting from
// the Behat environment), so in case user has set tne environment variable, disable it.
putenv('BEHAT_CLI=0');
require_once(__DIR__.'/../../../../lib/clilib.php');
require_once(__DIR__.'/../../../../lib/phpunit/bootstraplib.php');
require_once(__DIR__.'/../../../../lib/testing/lib.php');
+4
View File
@@ -30,6 +30,10 @@ if (isset($_SERVER['REMOTE_ADDR'])) {
define('IGNORE_COMPONENT_CACHE', true);
// It makes no sense to use BEHAT_CLI for this script (you cannot initialise PHPunit starting from
// the Behat environment), so in case user has set tne environment variable, disable it.
putenv('BEHAT_CLI=0');
require_once(__DIR__.'/../../../../lib/clilib.php');
require_once(__DIR__.'/../../../../lib/phpunit/bootstraplib.php');
require_once(__DIR__.'/../../../../lib/testing/lib.php');
+3
View File
@@ -42,5 +42,8 @@ function xmldb_tool_policy_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;
}
+1 -1
View File
@@ -58,7 +58,7 @@ $agreedocs = array_values(array_unique($agreedocs));
$declinedocs = array_values(array_unique($declinedocs));
$PAGE->set_context(context_system::instance());
$PAGE->set_pagelayout('standard');
$PAGE->set_pagelayout('secure');
$PAGE->set_url('/admin/tool/policy/index.php');
$PAGE->set_popup_notification_allowed(false);
@@ -304,3 +304,12 @@ Feature: Viewing acceptances reports and accepting on behalf of other users
And I log out
When I log in as "user1"
Then I should see "Calendar"
Scenario: Policy acceptance is prioritised when MFA is enabled
Given the following config values are set as admin:
| enabled | 1 | tool_mfa |
And I log in as "user1"
And I press "Next"
And I set the field "I agree to the This site policy" to "1"
When I press "Next"
Then I should see "2-step verification"
@@ -290,9 +290,6 @@ Feature: User must accept policy managed by this plugin when logging in and sign
And I set the field "I agree to the This privacy policy." to "0"
Then I should see "Please agree to the following policies:"
And I should see "Before continuing you need to acknowledge all these policies."
# Confirm that user can not browse the site (edit their profile).
When I follow "Profile" in the user menu
Then I should see "Please agree to the following policies:"
Scenario: Accept policy on login, accept all policies
Given the following config values are set as admin:
+1 -1
View File
@@ -47,7 +47,7 @@ $numpolicy = optional_param('numpolicy', null, PARAM_INT);
$totalpolicies = optional_param('totalpolicies', null, PARAM_INT);
$PAGE->set_context(context_system::instance());
$PAGE->set_pagelayout('standard');
$PAGE->set_pagelayout('secure');
$viewpage = new page_viewdoc($policyid, $versionid, $returnurl, $behalfid, $manage, $numpolicy, $totalpolicies);
+3
View File
@@ -58,5 +58,8 @@ function xmldb_tool_recyclebin_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2024111500, 'tool', 'recyclebin');
}
// Automatically generated Moodle v5.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -6
View File
@@ -177,12 +177,7 @@ class tool_uploadcourse_helper {
* @return enrol_plugin[]
*/
public static function get_enrolment_plugins() {
$cache = cache::make('tool_uploadcourse', 'helper');
if (($enrol = $cache->get('enrol')) === false) {
$enrol = enrol_get_plugins(false);
$cache->set('enrol', $enrol);
}
return $enrol;
return enrol_get_plugins(false);
}
/**
+3
View File
@@ -52,5 +52,8 @@ function xmldb_tool_usertours_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;
}
@@ -373,7 +373,7 @@ class aiprovider_management_table extends flexible_table implements dynamic_tabl
'role' => 'button',
'aria-label' => get_string('moveitemup', 'core', $row->name),
'title' => get_string('moveitemup', 'core', $row->name),
'class' => 'btn btn-link btn-icon',
'class' => 'btn btn-link',
]),
);
} else {
@@ -396,7 +396,7 @@ class aiprovider_management_table extends flexible_table implements dynamic_tabl
'role' => 'button',
'aria-label' => get_string('moveitemdown', 'core', $row->name),
'title' => get_string('moveitemdown', 'core', $row->name),
'class' => 'btn btn-link btn-icon',
'class' => 'btn btn-link',
]),
);
} else {
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,3 +1,3 @@
define("aiplacement_courseassist/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={ELEMENTS:{AIDRAWER:"#ai-drawer",AIDRAWER_BODY:"#ai-drawer .ai-drawer-body",PAGE:"#page",MAIN_REGION:'[role="main"]',AIDRAWER_CLOSE:"#ai-drawer-close",RESPONSE:".course-assist-response"},ACTIONS:{SUMMARY:'.course-assist-controls [data-action="summarise"]',EXPLAIN:'.course-assist-controls [data-action="explain"]',RETRY:'.course-assist-controls [data-action="retry"]',DECLINE:'.ai-policy-block [data-action="decline"]',ACCEPT:'.ai-policy-block [data-action="accept"]',REGENERATE:'.course-assist-controls [data-action="regenerate"]',CANCEL:'.course-assist-controls [data-action="cancel"]'}},_exports.default}));
define("aiplacement_courseassist/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={ELEMENTS:{AIDRAWER:"#ai-drawer",AIDRAWER_BODY:"#ai-drawer .ai-drawer-body",PAGE:"#page",MAIN_REGION:'[role="main"]',AIDRAWER_CLOSE:"#ai-drawer-close",RESPONSE:".course-assist-response",JUMPTO:'.course-assist-controls [data-region="jumpto"]',ACTION:'.course-assist-controls [data-input-type="action"]'},ACTIONS:{SUMMARY:'.course-assist-controls [data-action="summarise"]',EXPLAIN:'.course-assist-controls [data-action="explain"]',RETRY:'.course-assist-controls [data-action="retry"]',DECLINE:'.ai-policy-block [data-action="decline"]',ACCEPT:'.ai-policy-block [data-action="accept"]',REGENERATE:'.course-assist-controls [data-action="regenerate"]',CANCEL:'.course-assist-controls [data-action="cancel"]'}},_exports.default}));
//# sourceMappingURL=selectors.min.js.map
@@ -1 +1 @@
{"version":3,"file":"selectors.min.js","sources":["../src/selectors.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Define all of the selectors we will be using on the AI Course assistant.\n *\n * @module aiplacement_courseassist/selectors\n * @copyright 2024 Huong Nguyen <huongnv13@gmail.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n ELEMENTS: {\n AIDRAWER: '#ai-drawer',\n AIDRAWER_BODY: '#ai-drawer .ai-drawer-body',\n PAGE: '#page',\n MAIN_REGION: '[role=\"main\"]',\n AIDRAWER_CLOSE: '#ai-drawer-close',\n RESPONSE: '.course-assist-response',\n },\n ACTIONS: {\n SUMMARY: '.course-assist-controls [data-action=\"summarise\"]',\n EXPLAIN: '.course-assist-controls [data-action=\"explain\"]',\n RETRY: '.course-assist-controls [data-action=\"retry\"]',\n DECLINE: '.ai-policy-block [data-action=\"decline\"]',\n ACCEPT: '.ai-policy-block [data-action=\"accept\"]',\n REGENERATE: '.course-assist-controls [data-action=\"regenerate\"]',\n CANCEL: '.course-assist-controls [data-action=\"cancel\"]',\n }\n};\n"],"names":["ELEMENTS","AIDRAWER","AIDRAWER_BODY","PAGE","MAIN_REGION","AIDRAWER_CLOSE","RESPONSE","ACTIONS","SUMMARY","EXPLAIN","RETRY","DECLINE","ACCEPT","REGENERATE","CANCEL"],"mappings":"oLAsBe,CACXA,SAAU,CACNC,SAAU,aACVC,cAAe,6BACfC,KAAM,QACNC,YAAa,gBACbC,eAAgB,mBAChBC,SAAU,2BAEdC,QAAS,CACLC,QAAS,oDACTC,QAAS,kDACTC,MAAO,gDACPC,QAAS,2CACTC,OAAQ,0CACRC,WAAY,qDACZC,OAAQ"}
{"version":3,"file":"selectors.min.js","sources":["../src/selectors.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Define all of the selectors we will be using on the AI Course assistant.\n *\n * @module aiplacement_courseassist/selectors\n * @copyright 2024 Huong Nguyen <huongnv13@gmail.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n ELEMENTS: {\n AIDRAWER: '#ai-drawer',\n AIDRAWER_BODY: '#ai-drawer .ai-drawer-body',\n PAGE: '#page',\n MAIN_REGION: '[role=\"main\"]',\n AIDRAWER_CLOSE: '#ai-drawer-close',\n RESPONSE: '.course-assist-response',\n JUMPTO: '.course-assist-controls [data-region=\"jumpto\"]',\n ACTION: '.course-assist-controls [data-input-type=\"action\"]',\n },\n ACTIONS: {\n SUMMARY: '.course-assist-controls [data-action=\"summarise\"]',\n EXPLAIN: '.course-assist-controls [data-action=\"explain\"]',\n RETRY: '.course-assist-controls [data-action=\"retry\"]',\n DECLINE: '.ai-policy-block [data-action=\"decline\"]',\n ACCEPT: '.ai-policy-block [data-action=\"accept\"]',\n REGENERATE: '.course-assist-controls [data-action=\"regenerate\"]',\n CANCEL: '.course-assist-controls [data-action=\"cancel\"]',\n }\n};\n"],"names":["ELEMENTS","AIDRAWER","AIDRAWER_BODY","PAGE","MAIN_REGION","AIDRAWER_CLOSE","RESPONSE","JUMPTO","ACTION","ACTIONS","SUMMARY","EXPLAIN","RETRY","DECLINE","ACCEPT","REGENERATE","CANCEL"],"mappings":"oLAsBe,CACXA,SAAU,CACNC,SAAU,aACVC,cAAe,6BACfC,KAAM,QACNC,YAAa,gBACbC,eAAgB,mBAChBC,SAAU,0BACVC,OAAQ,iDACRC,OAAQ,sDAEZC,QAAS,CACLC,QAAS,oDACTC,QAAS,kDACTC,MAAO,gDACPC,QAAS,2CACTC,OAAQ,0CACRC,WAAY,qDACZC,OAAQ"}
@@ -58,6 +58,9 @@ const AICourseAssist = class {
this.aiDrawerElement = document.querySelector(Selectors.ELEMENTS.AIDRAWER);
this.aiDrawerBodyElement = document.querySelector(Selectors.ELEMENTS.AIDRAWER_BODY);
this.pageElement = document.querySelector(Selectors.ELEMENTS.PAGE);
this.jumpToElement = document.querySelector(Selectors.ELEMENTS.JUMPTO);
this.actionElement = document.querySelector(Selectors.ELEMENTS.ACTION);
this.aiDrawerCloseElement = this.aiDrawerElement.querySelector(Selectors.ELEMENTS.AIDRAWER_CLOSE);
this.lastAction = '';
this.responses = new Map();
@@ -75,6 +78,7 @@ const AICourseAssist = class {
e.preventDefault();
this.openAIDrawer();
this.lastAction = 'summarise';
this.actionElement.focus();
const isPolicyAccepted = await this.isPolicyAccepted();
if (!isPolicyAccepted) {
// Display policy.
@@ -89,6 +93,7 @@ const AICourseAssist = class {
e.preventDefault();
this.openAIDrawer();
this.lastAction = 'explain';
this.actionElement.focus();
const isPolicyAccepted = await this.isPolicyAccepted();
if (!isPolicyAccepted) {
// Display policy.
@@ -111,6 +116,21 @@ const AICourseAssist = class {
this.closeAIDrawer();
}
});
// Focus on the AI drawer's close button when the jump-to element is focused.
this.jumpToElement.addEventListener('focus', () => {
this.aiDrawerCloseElement.focus();
});
// Focus on the action element when the AI drawer container receives focus.
this.aiDrawerElement.addEventListener('focus', () => {
this.actionElement.focus();
});
// Remove active from the action element when it loses focus.
this.actionElement.addEventListener('blur', () => {
this.actionElement.classList.remove('active');
});
}
/**
@@ -212,10 +232,13 @@ const AICourseAssist = class {
// Close message drawer if it is shown.
MessageDrawerHelper.hide();
this.aiDrawerElement.classList.add('show');
this.aiDrawerElement.setAttribute('tabindex', 0);
this.aiDrawerBodyElement.setAttribute('aria-live', 'polite');
if (!this.pageElement.classList.contains('show-drawer-right')) {
this.addPadding();
}
this.jumpToElement.setAttribute('tabindex', 0);
this.jumpToElement.focus();
}
/**
@@ -223,10 +246,21 @@ const AICourseAssist = class {
*/
closeAIDrawer() {
this.aiDrawerElement.classList.remove('show');
this.aiDrawerElement.setAttribute('tabindex', -1);
this.aiDrawerBodyElement.removeAttribute('aria-live');
if (this.pageElement.classList.contains('show-drawer-right') && this.aiDrawerBodyElement.dataset.removepadding === '1') {
this.removePadding();
}
this.jumpToElement.setAttribute('tabindex', -1);
// We can enforce a focus-visible state on the focus element using element.focus({focusVisible: true}).
// Unfortunately, this feature isn't supported in all browsers, only Firefox provides support for it.
// Therefore, we will apply the active class to the action element and set focus on it.
// This action will make the action element appear focused.
// When the action element loses focus,
// we will remove the active class at {@see registerEventListeners()}
this.actionElement.classList.add('active');
this.actionElement.focus();
}
/**
@@ -28,6 +28,8 @@ export default {
MAIN_REGION: '[role="main"]',
AIDRAWER_CLOSE: '#ai-drawer-close',
RESPONSE: '.course-assist-response',
JUMPTO: '.course-assist-controls [data-region="jumpto"]',
ACTION: '.course-assist-controls [data-input-type="action"]',
},
ACTIONS: {
SUMMARY: '.course-assist-controls [data-action="summarise"]',
@@ -39,6 +39,8 @@
data-bs-toggle="tooltip"
data-bs-placement="right"
aria-controls="ai-drawer"
data-input-type="action"
data-bs-delay="200"
>
{{^isdropdown}}
{{> aiplacement_courseassist/sparkles_icon }}
@@ -40,7 +40,7 @@
]
}
}}
<div {{#isdropdown}}id="#ai-features"{{/isdropdown}}
<div {{#isdropdown}}id="ai-features"{{/isdropdown}}
class="course-assist-controls py-3">
{{#isdropdown}}
{{> aiplacement_courseassist/actions_dropdown }}
@@ -50,4 +50,5 @@
{{> aiplacement_courseassist/action_button }}
{{/actions}}
{{/isdropdown}}
{{> core_message/message_jumpto }}
</div>
@@ -45,6 +45,7 @@
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
data-input-type="action"
>
{{> aiplacement_courseassist/sparkles_icon }}
{{#str}} aifeatures, aiplacement_courseassist {{/str}}
@@ -29,7 +29,7 @@
"contextid": "1"
}
}}
<div class="ai-drawer" id="ai-drawer">
<div class="ai-drawer" id="ai-drawer" tabindex="-1">
<div class="ai-drawer-header">
<button id="ai-drawer-close" class="btn ai-drawer-button" type="button">
{{#pix}} e/cancel, core {{/pix}}
+4 -2
View File
@@ -103,7 +103,8 @@ class hook_listener {
if ($model == 'custom') {
$mform->addElement('header', 'modelsettingsheader', get_string('settings', 'aiprovider_ollama'));
$mform->addElement('html', get_string('settings_help', 'aiprovider_ollama'));
$settingshelp = \html_writer::tag('p', get_string('settings_help', 'aiprovider_ollama'));
$mform->addElement('html', $settingshelp);
$mform->addElement(
'textarea',
'modelextraparams',
@@ -117,7 +118,8 @@ class hook_listener {
if ($targetmodel) {
if ($targetmodel->has_model_settings()) {
$mform->addElement('header', 'modelsettingsheader', get_string('settings', 'aiprovider_ollama'));
$mform->addElement('html', get_string('settings_help', 'aiprovider_ollama'));
$settingshelp = \html_writer::tag('p', get_string('settings_help', 'aiprovider_ollama'));
$mform->addElement('html', $settingshelp);
$targetmodel->add_model_settings($mform);
}
}
+4 -2
View File
@@ -82,7 +82,8 @@ class hook_listener {
if ($model == 'custom') {
$mform->addElement('header', 'modelsettingsheader', get_string('settings', 'aiprovider_openai'));
$mform->addElement('html', get_string('settings_help', 'aiprovider_openai'));
$settingshelp = \html_writer::tag('p', get_string('settings_help', 'aiprovider_openai'));
$mform->addElement('html', $settingshelp);
$mform->addElement(
'textarea',
'modelextraparams',
@@ -96,7 +97,8 @@ class hook_listener {
if ($targetmodel) {
if ($targetmodel->has_model_settings()) {
$mform->addElement('header', 'modelsettingsheader', get_string('settings', 'aiprovider_openai'));
$mform->addElement('html', get_string('settings_help', 'aiprovider_openai'));
$settingshelp = \html_writer::tag('p', get_string('settings_help', 'aiprovider_openai'));
$mform->addElement('html', $settingshelp);
$targetmodel->add_model_settings($mform);
}
}
@@ -66,7 +66,7 @@ $string['settings_frequency_penalty'] = 'frequency_penalty';
$string['settings_frequency_penalty_help'] = 'The frequency penalty adjusts how often words are repeated. The higher the penalty, the less repetitions in the generated text.';
$string['settings_help'] = 'Adjust the settings below to customise how requests are sent to OpenAI.';
$string['settings_max_tokens'] = 'max_tokens';
$string['settings_max_tokens_help'] = 'The maximum number of tokens to generate in the response';
$string['settings_max_tokens_help'] = 'The maximum number of tokens used in the generated text.';
$string['settings_presence_penalty'] = 'presence_penalty';
$string['settings_presence_penalty_help'] = 'The presence penalty encourages the model to use new words by increasing the likelihood of choosing words it hasn\'t used before. A higher value makes the generated text more diverse, while a lower value allows more repetition.';
$string['settings_top_p'] = 'top_p';
+1
View File
@@ -1925,6 +1925,7 @@ class model {
$uniqueid = $this->get_time_splitting()->append_rangeindex($dbprediction->sampleid, $dbprediction->rangeindex);
$predictionrecords[$uniqueid]->id = $dbprediction->id;
}
$dbpredictions->close();
}
return $predictionrecords;
+8
View File
@@ -1,5 +1,13 @@
# core_auth (subsystem / plugintype) Upgrade notes
## 5.0.1
### 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)
## 5.0
### Removed
+3
View File
@@ -40,5 +40,8 @@ function xmldb_auth_db_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
@@ -40,5 +40,8 @@ function xmldb_auth_email_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
@@ -40,5 +40,8 @@ function xmldb_auth_ldap_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
@@ -41,5 +41,8 @@ function xmldb_auth_lti_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
@@ -40,5 +40,8 @@ function xmldb_auth_manual_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
@@ -40,5 +40,8 @@ function xmldb_auth_none_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
@@ -41,5 +41,8 @@ function xmldb_auth_oauth2_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
@@ -40,5 +40,8 @@ function xmldb_auth_shibboleth_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;
}
+5
View File
@@ -117,6 +117,11 @@ abstract class frontend {
foreach ($enabled as $plugin => $info) {
// Create plugin front-end object.
$class = '\availability_' . $plugin . '\frontend';
if (!class_exists($class)) {
continue;
}
/** @var \core_availability\frontend $frontend */
$frontend = new $class();
// Add to array of required YUI modules.
+2 -3
View File
@@ -792,11 +792,10 @@ abstract class info {
// plugin could also rely on the completion plugin.
$pluginmanager = \core_plugin_manager::instance();
$enabled = $pluginmanager->get_enabled_plugins('availability');
$componentparams = new \stdClass();
foreach ($enabled as $plugin => $info) {
// Use the static method.
/** @var \core_availability\condition $class */
$class = '\availability_' . $plugin . '\condition';
if ($class::completion_value_used($course, $cmid)) {
if (class_exists($class) && $class::completion_value_used($course, $cmid)) {
return true;
}
}
+2 -2
View File
@@ -220,9 +220,9 @@ class tree extends tree_node {
// First see if it's a condition. These have a defined type.
if (isset($child->type)) {
// Look for a plugin of this type.
/** @var \core_availability\condition $classname */
$classname = '\availability_' . $child->type . '\condition';
if (!array_key_exists($child->type, $enabled)) {
if (!array_key_exists($child->type, $enabled) || !class_exists($classname)) {
if ($lax) {
// On load of existing settings, ignore if class
// doesn't exist.
+23 -2
View File
@@ -5487,18 +5487,39 @@ class restore_move_module_questions_categories extends restore_execution_step {
$originalcontext = context::instance_by_id($contextid, IGNORE_MISSING);
if ($originalcontext && has_capability('mod/qbank:view', $originalcontext)) {
$originalquestions = get_questions_category(question_get_top_category($contextid), false);
$targetcoursecontext = context_course::instance($this->get_courseid());
foreach ($originalquestions as $originalquestion) {
$backupids = restore_dbops::get_backup_ids_record(
$this->get_restoreid(),
'question',
$originalquestion->id,
);
// Restored question references will point to the restored copy of the question. Select question references
// that point to that restored copy, only if they are within the target course's context, so we can update
// them to point to the original question.
$conpathlike = $DB->sql_like('con.path', '?');
$references = $DB->get_records_sql(
"SELECT qr.id, qr.questionbankentryid
FROM {question_references} qr
JOIN {context} con ON qr.usingcontextid = con.id
JOIN {question_versions} qv ON qv.questionbankentryid = qr.questionbankentryid
WHERE qv.questionid = ?
AND {$conpathlike}",
[
$backupids->newitemid,
$targetcoursecontext->path . '/%',
],
);
if (empty($references)) {
continue;
}
[$refin, $refparams] = $DB->get_in_or_equal(array_keys($references));
$DB->set_field_select(
'question_references',
'questionbankentryid',
$DB->get_field('question_versions', 'questionbankentryid', ['questionid' => $backupids->itemid]),
'questionbankentryid = (SELECT questionbankentryid FROM {question_versions} WHERE questionid = ?)',
[$backupids->newitemid],
'id ' . $refin,
$refparams,
);
}
continue;
+3 -2
View File
@@ -1104,8 +1104,9 @@ class core_backup_renderer extends plugin_renderer_base {
$sourceurl = new \moodle_url('/course/view.php', array('id' => $copy->sourceid));
$tablerow = array(
html_writer::link($sourceurl, $copy->source),
$copy->destination,
html_writer::link($sourceurl, format_string($copy->source, true,
['context' => context_course::instance($copy->sourceid)])),
format_string($copy->destination, true, ['context' => context_course::instance($copy->sourceid)]),
userdate($copy->timecreated),
get_string($copy->operation),
$this->get_status_display($copy->status, $copy->backupid, $copy->restoreid, $copy->operation)
+3 -1
View File
@@ -40,6 +40,7 @@ if (empty($CFG->enablebadges)) {
}
$badge = new badge($badgeid);
$context = $badge->get_context();
$title = [get_string('alignment', 'badges'), $badge->name];
$navurl = new moodle_url('/badges/index.php', ['type' => $badge->type]);
require_capability('moodle/badges:configuredetails', $context);
@@ -50,6 +51,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$course = get_course($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', ['type' => $badge->type, 'id' => $badge->courseid]);
$PAGE->set_pagelayout('standard');
navigation_node::override_active_url($navurl);
@@ -63,7 +65,7 @@ $currenturl = new moodle_url('/badges/alignment.php', ['id' => $badge->id]);
$PAGE->set_context($context);
$PAGE->set_url($currenturl);
$PAGE->set_heading($heading);
$PAGE->set_title($badge->name);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->navbar->add($badge->name);
$output = $PAGE->get_renderer('core', 'badges');
+1 -1
View File
@@ -56,7 +56,7 @@ if ($action == 'delete' && $confirm && confirm_sesskey()) {
} else {
$msg = get_string('sitebackpacknotdeleted', 'badges');
}
} else if ($action == 'moveup' || $action == 'movedown') {
} else if (($action == 'moveup' || $action == 'movedown') && confirm_sesskey()) {
// If no backpack has been selected, there isn't anything to move.
if (empty($id)) {
redirect($url);
+3 -1
View File
@@ -38,6 +38,7 @@ if (empty($CFG->enablebadges)) {
$badge = new badge($badgeid);
$context = $badge->get_context();
$title = [get_string('bcriteria', 'badges'), $badge->name];
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type));
require_capability('moodle/badges:configurecriteria', $context);
@@ -49,6 +50,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$course = get_course($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type, 'id' => $badge->courseid));
$PAGE->set_pagelayout('standard');
navigation_node::override_active_url($navurl);
@@ -63,7 +65,7 @@ $currenturl = new moodle_url('/badges/criteria.php', array('id' => $badge->id));
$PAGE->set_context($context);
$PAGE->set_url($currenturl);
$PAGE->set_heading($heading);
$PAGE->set_title($badge->name);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->navbar->add($badge->name, $currenturl);
$output = $PAGE->get_renderer('core', 'badges');
+4 -2
View File
@@ -41,6 +41,7 @@ require_login();
$return = new moodle_url('/badges/criteria.php', array('id' => $badgeid));
$badge = new badge($badgeid);
$title = [get_string('addcriterion', 'badges'), $badge->name];
$context = $badge->get_context();
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type));
@@ -65,6 +66,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$course = get_course($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type, 'id' => $badge->courseid));
$PAGE->set_pagelayout('standard');
navigation_node::override_active_url($navurl);
@@ -78,7 +80,7 @@ $urlparams = array('badgeid' => $badgeid, 'edit' => $edit, 'type' => $type, 'cri
$PAGE->set_context($context);
$PAGE->set_url('/badges/criteria_settings.php', $urlparams);
$PAGE->set_heading($heading);
$PAGE->set_title($badge->name);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->navbar->add($badge->name, new moodle_url('overview.php', array('id' => $badge->id)))
->add(get_string('bcriteria', 'badges'), new moodle_url('criteria.php', ['id' => $badge->id]))
->add(get_string('criteria_' . $type, 'badges'));
@@ -119,4 +121,4 @@ if (!empty($addcourse)) {
echo $OUTPUT->header();
$mform->display();
echo $OUTPUT->footer();
echo $OUTPUT->footer();
+5 -1
View File
@@ -56,8 +56,10 @@ if (!empty($badgeid)) {
// Check capabilities.
$context = $badge->get_context();
if ($action == 'message') {
$title = [get_string('configuremessage', 'badges'), $badge->name];
require_capability('moodle/badges:configuremessages', $context);
} else {
$title = [get_string('badgedetails', 'badges'), $badge->name];
require_capability('moodle/badges:configuredetails', $context);
}
@@ -78,6 +80,7 @@ if (!empty($badgeid)) {
$params = ['courseid' => $courseid];
$badgename = get_string('create', 'badges');
$title = [$badgename];
// Check capabilities.
require_capability('moodle/badges:createbadge', $context);
@@ -94,6 +97,7 @@ $navurl = new moodle_url('/badges/index.php', ['type' => $badge->type]);
if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', ['type' => $badge->type, 'id' => $badge->courseid]);
$PAGE->set_pagelayout('incourse');
navigation_node::override_active_url($navurl);
@@ -108,7 +112,7 @@ $currenturl = new moodle_url('/badges/edit.php', $params);
$PAGE->set_context($context);
$PAGE->set_url($currenturl);
$PAGE->set_heading($heading);
$PAGE->set_title($badgename);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->add_body_class('limitedwidth');
$PAGE->navbar->add($badgename);
+3 -1
View File
@@ -39,6 +39,7 @@ if (empty($CFG->enablebadges)) {
$badge = new badge($badgeid);
$context = $badge->get_context();
$title = [get_string('bendorsement', 'badges'), $badge->name];
$navurl = new moodle_url('/badges/index.php', ['type' => $badge->type]);
require_capability('moodle/badges:configuredetails', $context);
@@ -49,6 +50,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$course = get_course($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', ['type' => $badge->type, 'id' => $badge->courseid]);
$PAGE->set_pagelayout('standard');
navigation_node::override_active_url($navurl);
@@ -62,7 +64,7 @@ $currenturl = new moodle_url('/badges/endorsement.php', ['id' => $badgeid]);
$PAGE->set_context($context);
$PAGE->set_url($currenturl);
$PAGE->set_heading($heading);
$PAGE->set_title($badge->name);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->navbar->add($badge->name);
$output = $PAGE->get_renderer('core', 'badges');
+3 -1
View File
@@ -39,6 +39,7 @@ if (empty($CFG->enablebadges)) {
$badge = new badge($badgeid);
$context = $badge->get_context();
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type));
$title = [$badge->name];
if ($badge->type == BADGE_TYPE_COURSE) {
if (empty($CFG->badges_allowcoursebadges)) {
@@ -47,6 +48,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$course = get_course($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type, 'id' => $badge->courseid));
$PAGE->set_pagelayout('standard');
@@ -62,7 +64,7 @@ $currenturl = new moodle_url('/badges/overview.php', array('id' => $badge->id));
$PAGE->set_context($context);
$PAGE->set_url($currenturl);
$PAGE->set_heading($heading);
$PAGE->set_title($badge->name);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->navbar->add($badge->name);
require_capability('moodle/badges:viewbadges', $context);
+3 -1
View File
@@ -40,6 +40,7 @@ if (empty($CFG->enablebadges)) {
$badge = new badge($badgeid);
$context = $badge->get_context();
$title = [get_string('awards', 'badges'), $badge->name];
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type));
require_capability('moodle/badges:viewawarded', $context);
@@ -51,6 +52,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$course = get_course($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', array('type' => $badge->type, 'id' => $badge->courseid));
$PAGE->set_pagelayout('standard');
navigation_node::override_active_url($navurl);
@@ -63,7 +65,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
$PAGE->set_context($context);
$PAGE->set_url('/badges/recipients.php', ['id' => $badgeid]);
$PAGE->set_heading($heading);
$PAGE->set_title($badge->name);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->navbar->add($badge->name);
/** @var core_badges_renderer $output */
+3 -1
View File
@@ -41,6 +41,7 @@ if (empty($CFG->enablebadges)) {
$badge = new badge($badgeid);
$context = $badge->get_context();
$title = [get_string('relatedbages', 'badges'), $badge->name];
$navurl = new moodle_url('/badges/index.php', ['type' => $badge->type]);
require_capability('moodle/badges:configuredetails', $context);
@@ -51,6 +52,7 @@ if ($badge->type == BADGE_TYPE_COURSE) {
require_login($badge->courseid);
$course = get_course($badge->courseid);
$heading = format_string($course->fullname, true, ['context' => $context]);
$title[] = $heading;
$navurl = new moodle_url('/badges/index.php', ['type' => $badge->type, 'id' => $badge->courseid]);
$PAGE->set_pagelayout('standard');
@@ -65,7 +67,7 @@ $currenturl = new moodle_url('/badges/related.php', ['id' => $badge->id]);
$PAGE->set_context($context);
$PAGE->set_url($currenturl);
$PAGE->set_heading($heading);
$PAGE->set_title($badge->name);
$PAGE->set_title(implode(\moodle_page::TITLE_SEPARATOR, $title));
$PAGE->navbar->add($badge->name);
$output = $PAGE->get_renderer('core', 'badges');
$msg = optional_param('msg', '', PARAM_TEXT);
@@ -56,13 +56,13 @@
<td> {{{backpackweburl}}} </td>
<td>
{{#canmoveup}}
<a href="{{baseurl}}?id={{id}}&action=moveup">{{#pix}}t/up, core,{{#str}}moveup{{/str}}{{/pix}}</a>
<a href="{{baseurl}}?id={{id}}&sesskey={{sesskey}}&action=moveup">{{#pix}}t/up, core,{{#str}}moveup{{/str}}{{/pix}}</a>
{{/canmoveup}}
{{^canmoveup}}
{{#pix}}spacer, moodle{{/pix}}
{{/canmoveup}}
{{#canmovedown}}
<a href="{{baseurl}}?id={{id}}&action=movedown">{{#pix}}t/down, core,{{#str}}movedown{{/str}}{{/pix}}</a>
<a href="{{baseurl}}?id={{id}}&sesskey={{sesskey}}&action=movedown">{{#pix}}t/down, core,{{#str}}movedown{{/str}}{{/pix}}</a>
{{/canmovedown}}
{{^canmovedown}}
{{#pix}}spacer, moodle{{/pix}}
+3
View File
@@ -55,5 +55,8 @@ function xmldb_block_badges_upgrade($oldversion, $block) {
// 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
@@ -55,5 +55,8 @@ function xmldb_block_calendar_month_upgrade($oldversion, $block) {
// 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
@@ -55,5 +55,8 @@ function xmldb_block_calendar_upcoming_upgrade($oldversion, $block) {
// 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;
}
+1 -1
View File
@@ -95,7 +95,7 @@ class fetch_addable_blocks extends external_api {
}
// Firstly, we need to load all currently existing page blocks to later determine which blocks are addable.
$page->blocks->load_blocks(false);
$page->blocks->load_blocks(true);
$page->blocks->create_all_block_instances();
$addableblocks = $page->blocks->get_addable_blocks();
+3
View File
@@ -56,5 +56,8 @@ function xmldb_block_completionstatus_upgrade($oldversion, $block) {
// 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
@@ -56,5 +56,8 @@ function xmldb_block_course_summary_upgrade($oldversion, $block) {
// 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;
}
+5
View File
@@ -441,6 +441,11 @@ class block_edit_form extends \core_form\dynamic_form {
$blockregion = $this->optional_param('blockregion', null, PARAM_TEXT);
$newblock = $this->page->blocks->add_block_at_end_of_default_region($this->block->name(),
empty($blockregion) ? null : $blockregion);
if (empty($newblock)) {
return;
}
$this->page->blocks->load_blocks();
$newblock = $this->page->blocks->find_instance($newblock->instance->id);
$newdata = $this->prepare_defaults($newblock->instance);
+3
View File
@@ -55,5 +55,8 @@ function xmldb_block_feedback_upgrade($oldversion, $block) {
// 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
@@ -41,5 +41,8 @@ function xmldb_block_html_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;
}
+1 -1
View File
@@ -591,7 +591,7 @@ class main implements renderable, templatable {
if ($CFG->coursecreationguide) {
// Add quickstart guide link.
$quickstart = new \moodle_url($CFG->coursecreationguide, ['lang' => current_language()]);
$docparams = [
$docparams += [
'quickhref' => $quickstart->out(),
'quicktitle' => get_string('viewquickstart', 'block_myoverview'),
'quicktarget' => '_blank',
+3
View File
@@ -41,5 +41,8 @@ function xmldb_block_myoverview_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;
}
+2 -2
View File
@@ -5,8 +5,8 @@
}
.block_myoverview .whitebutton .btn-secondary {
background: white;
border-color: var(--primary);
color: var(--primary);
border-color: var(--bs-primary);
color: var(--bs-primary);
}
.page-mycourses .block_myoverview .block-controls {
@@ -25,7 +25,7 @@
}
}}
<div class="ms-auto dropdown">
<button class="btn btn-link btn-icon coursemenubtn"
<button class="btn btn-icon coursemenubtn aabtn"
type="button"
data-bs-toggle="dropdown"
aria-haspopup="true"
@@ -38,7 +38,7 @@
{{< core_course/coursecards }}
{{$menu}}
<div class="card-footer menu border-0 bg-white ms-auto">
<div class="card-footer menu border-0 bg-white ms-auto p-2">
{{> block_myoverview/course-action-menu }}
</div>
{{/menu}}
+3
View File
@@ -63,5 +63,8 @@ function xmldb_block_navigation_upgrade($oldversion, $block) {
// 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
@@ -55,5 +55,8 @@ function xmldb_block_recent_activity_upgrade($oldversion, $block) {
// 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;
}
@@ -55,5 +55,8 @@ function xmldb_block_recentlyaccesseditems_upgrade($oldversion, $block) {
// 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;
}
@@ -51,7 +51,7 @@
{{{icon}}}
</div>
<div class="w-100 line-height-3 text-truncate ms-2">
<h6 class="mb-0 text-truncate"><span class="clickable">{{{name}}}</span></h6>
<h4 class="mb-0 text-truncate h6"><span class="clickable">{{{name}}}</span></h4>
<small class="text-truncate mb-0">{{{coursename}}}</small>
</div>
</div>

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