Compare commits

..

1168 Commits

Author SHA1 Message Date
Huong Nguyen 02e8cebdd2 Moodle release 4.4.5 2024-12-06 13:13:12 +07:00
Huong Nguyen 024051b719 weekly release 4.4.4+ 2024-12-05 22:32:58 +07:00
Sara Arjona 6423996066 Merge branch 'MDL-75610-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-12-05 16:13:21 +01:00
Jun Pataleta 490e544204 MDL-75610 core: Revert the addition of .upgradenotes
Upgrade notes generated by the `upgradenotes` tool is only available
from Moodle 4.5. For 4.4 and below, we should still update the
appropriate upgrade.txt file.
2024-12-05 21:34:05 +08:00
Huong Nguyen 62395a5aca MDL-83921 competency: Update unit tests with latest changes 2024-12-05 18:37:08 +08:00
Huong Nguyen 41ed00e59a MDL-82379 core_user: Move email change token to user private access key 2024-12-05 13:38:21 +08:00
Huong Nguyen ba74b9be02 Merge branch 'MDL-83606-404' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_404_STABLE 2024-12-05 12:10:07 +07:00
Jun Pataleta 16f8d04930 Merge branch 'MDL-83727-404' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_404_STABLE 2024-12-05 12:36:00 +08:00
Huong Nguyen b389ec0b8b Merge branch 'MDL-83641-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-12-05 11:29:30 +07:00
Huong Nguyen 1c8ac6a361 MDL-83921 competency: Bump version 2024-12-05 11:21:32 +07:00
Michael Hawkins c748e7d7e9 MDL-83921 competency: Match web service capability check with page check 2024-12-05 11:21:23 +07:00
Jun Pataleta fcff77046d Merge branch 'MDL-83823-404-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_404_STABLE 2024-12-05 11:48:39 +08:00
Huong Nguyen d01b671f2d Merge branch 'MDL-83584-m404' of https://github.com/sammarshallou/moodle into MOODLE_404_STABLE 2024-12-05 10:13:00 +07:00
Huong Nguyen 2d35e0a180 Merge branch 'MDL-83223-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-12-05 10:08:58 +07:00
Huong Nguyen a8b11d8923 MDL-82963 Tag: Improve validation for users tagged with sepecified tag 2024-12-05 11:03:13 +08:00
Jun Pataleta 6cc0eabc7e Merge branch 'MDL-83844-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-12-05 10:35:36 +08:00
Jun Pataleta 4a1811b769 Merge branch 'MDL-83710-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-12-05 09:55:13 +08:00
Helen Foster ffabf0b4b9 MDL-83823 lang: Import fixed English strings (en_fix) 2024-12-04 20:26:09 +01:00
meirzamoodle 5e078e4a78 MDL-83223 core: Use capture with addEventListener to intercept events
The issue is that Bootstrap’s dropdown component likely stops
event propagation after the first click to manage its own
dropdown behavior. This prevents your click event handler from
running on subsequent clicks.

To fix this, we can handle the event before Bootstrap’s code stops
the propagation by using capture option with addEventListener.
2024-12-04 10:37:02 +07:00
Laurent David 77c39c40e3 MDL-82757 mod_data: Improve group access handling
* Improved handling of group access to ensure correct visibility of records.
2024-12-04 02:51:26 +00:00
Jun Pataleta 8ec9af05b5 MDL-61316 core: Fix session gc unit tests 2024-12-04 02:51:26 +00:00
meirzamoodle 0ecdb05ab9 MDL-61316 core: Removed 5x multiplier from guest session expiration 2024-12-04 02:51:26 +00:00
Mark Johnson 54bc7d8197 MDL-83357 question: Fix filter cleaning in page links 2024-12-04 02:51:26 +00:00
Mark Johnson ea3848abe8 MDL-83357 question: Additional cleaning of filter params 2024-12-04 02:51:26 +00:00
Huong Nguyen 5f0201bd79 Merge branch 'MDL-82946-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-12-04 09:39:43 +07:00
Angelia Dela Cruz 363941c247 MDL-82946 qbank: Behat coverage for questions bulk actions 2024-12-03 10:36:29 +08:00
Huong Nguyen 60e0905018 Merge branch 'MDL-83128-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-12-03 09:32:43 +07:00
Paul Holden 987b7ef10d MDL-83641 cohort: allow 'includes' option be specified in form element. 2024-12-02 10:58:50 +00:00
Paul Holden fdb5d897de MDL-83844 mod_scorm: avoid SQL reserved words retrieving SCO timing. 2024-12-02 10:47:47 +00:00
Jun Pataleta 02d5efc450 Merge branch 'MDL-83648_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-12-02 17:24:32 +08:00
Huong Nguyen 4b2a950d08 Merge branch 'MDL-83711-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-12-02 14:19:46 +07:00
Shamim Rezaie 899b4fa1f4 Merge branch 'MDL-75610_404_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_404_STABLE 2024-12-02 15:24:44 +11:00
Huong Nguyen 9ce7e40f2e Merge branch 'MDL-83778-404' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_404_STABLE 2024-12-02 10:44:38 +07:00
Huong Nguyen 84459c1ebf Merge branch 'MDL-83670-m404' of https://github.com/sammarshallou/moodle into MOODLE_404_STABLE 2024-12-02 10:31:06 +07:00
Huong Nguyen 495654b92b Merge branch 'MDL-82657_404_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_404_STABLE 2024-12-02 10:17:49 +07:00
Tim Hunt 6535a96989 MDL-83648 javascript dialogues: fix responsive behaviour
visibilityChanged in the dialogue base class does important things.
Therefore if ajaxException and exception also want to do something
else in response to the visibleChange event, it should use a
different method name, rather than a name that collides with the
base class method.
2024-11-29 17:05:14 +00:00
Luca Bösch 8628fc8664 MDL-83711 quiz: Quiz navigation profile pic not linking in secure mode 2024-11-29 14:25:49 +01:00
Sara Arjona 7da8af1006 weekly release 4.4.4+ 2024-11-29 12:37:03 +01:00
Khoa Nguyen 4bce55d783 MDL-83727 question: Core question privacy provider misuses lazy-loading 2024-11-29 10:55:39 +07:00
Khoa Nguyen e9cfb0ad02 MDL-83778 quiz: prevent page caching for quiz view page 2024-11-28 16:42:46 +07:00
Jun Pataleta 73a35edc24 MDL-83470 environment: Put back Oracle support for now
Even though Oracle support is planned to be dropped for 5.0, the
actual issue that drops it (MDL-83172) has not yet landed. So, it's
better to keep this in environment.xml for now and defer its removal
from environment.xml in MDL-83172.
2024-11-28 16:05:59 +07:00
Jun Pataleta 83c6906e75 Merge branch 'MDL-82475-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-11-28 13:19:08 +08:00
Huong Nguyen 3637e3db9f Merge branch 'MDL-83776-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-11-28 12:00:31 +07:00
Jun Pataleta 30d8c900a9 Merge branch 'MDL-83759-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-11-28 12:28:54 +08:00
Jun Pataleta 1d5e6e4e5d Merge branch 'MDL-83412-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-11-28 12:12:08 +08:00
Huong Nguyen 276c40500c Merge branch 'MDL-83470-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-11-28 11:03:57 +07:00
Jun Pataleta e7556aa106 MDL-83412 core: Coding style fixes 2024-11-28 11:55:26 +08:00
Andrew Nicols 68c96a97b9 MDL-83412 calendartype_gregorian: Use core_date
Update timestamp_to_date_string to use core_date.
2024-11-28 11:55:25 +08:00
Andrew Nicols 213b37077c MDL-83412 core: Use LLL/LLLL for standalone Month names
We currently use MMM and MMMM which mean 'month in year', however in
some locales this is context-specific and should only be used in
conjunction with a day, for example "10 October 2024".

LLL and LLLL are for "stand-alone on the in year" and should be used
when a month is used without a day.
2024-11-28 11:55:25 +08:00
Huong Nguyen e75b7d1e0d Merge branch 'MDL-63264-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-11-28 10:46:58 +07:00
Huong Nguyen 7a77eb18c3 Merge branch 'MDL-83653_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-11-28 10:21:43 +07:00
Huong Nguyen 5d5d2f8f49 Merge branch 'MDL-82931-MOODLE_404_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_404_STABLE 2024-11-28 09:44:27 +07:00
Huong Nguyen da00d28c2c Merge branch 'MDL-83661-404' of https://github.com/ferranrecio/moodle into MOODLE_404_STABLE 2024-11-28 09:39:16 +07:00
Huong Nguyen e778888ed2 Merge branch 'MDL-82932-MOODLE_404_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_404_STABLE 2024-11-28 09:28:29 +07:00
Huong Nguyen b058b6681c Merge branch 'MDL-83643-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-11-28 09:21:16 +07:00
Jun Pataleta e2928d531e Merge branch 'MDL-83211-m404' of https://github.com/sammarshallou/moodle into MOODLE_404_STABLE 2024-11-27 23:28:46 +08:00
Jun Pataleta c3184e070a Merge branch 'MDL-83788-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-11-27 16:19:30 +08:00
Huong Nguyen cd7f36d194 Merge branch 'MDL-83658-MOODLE_404_STABLE' of https://github.com/praxisdigital/moodle into MOODLE_404_STABLE 2024-11-27 09:51:28 +07:00
Andrew Nicols 6f97d3a89f MDL-83788 mod_glossary: Correct assertions for assertArrayHasKey 2024-11-27 13:26:01 +11:00
Mark Johnson 4da7e5dec3 MDL-82657 qbank_managecategories: Check "includesubcategories" on reload
The "includesubcategories" parameter is passed in the URL as lowercase,
but the Javascript was looking for "includeSubcategories" in camel case.
This meant it was always being set as false (unchecked) even when the
URL said it was true.

This fixes the casing in the Javascript, and adds a behat test to
confirm the fix.
2024-11-26 13:29:02 +00:00
Shamim Rezaie 35b9ad6bbf Merge branch 'MDL-77957-404-test2' of https://github.com/rezaies/moodle into MOODLE_404_STABLE 2024-11-26 20:59:43 +11:00
Bastian Schmidt-Kuhl af68f3ca28 MDL-77957 theme_boost: Fix drawer not closing on mobile if it has focus 2024-11-26 20:52:17 +11:00
Huong Nguyen ecf91e296e Merge branch 'mdl-82762_404_wip' of https://github.com/james-cnz/moodle into MOODLE_404_STABLE 2024-11-26 12:10:51 +07:00
Huong Nguyen ef09179d1e Merge branch 'MDL-83795-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-11-26 12:03:22 +07:00
Khoa Nguyen 1ab37f0e63 MDL-83606 Question bank: Delete questions to fit one page causes errors. 2024-11-26 11:17:49 +07:00
Mikel Martín 286c3367c2 MDL-83759 theme_boost: Fix user navigation items height 2024-11-25 12:05:32 +01:00
Huong Nguyen d514c32c71 Merge branch 'MDL-83704-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-11-25 10:15:52 +07:00
Paul Holden 1d192cf19d MDL-83128 blocks: consistently style/align block list icons. 2024-11-22 16:22:06 +00:00
Paul Holden d805dde928 MDL-63264 enrol: retrieve additional welcome message contact data.
The `maildisplay` field is required to determine from whom to send
the welcome message.

Co-authored-by: Zak Risha <zjrisha@gmail.com>
2024-11-22 16:17:50 +00:00
Jun Pataleta 86e2e5882e MDL-83795 courseformat: Move upgrade notes to upgrade.txt 2024-11-22 23:53:34 +08:00
Jun Pataleta 505987af6c weekly release 4.4.4+ 2024-11-22 22:26:55 +08:00
Paul Holden 558b5aa693 MDL-83776 customfield_text: correct link field URL encoding. 2024-11-21 09:53:49 +00:00
Jun Pataleta 888a4f23bb MDL-83470 core: Define environment requirements for Moodle 5.0 2024-11-21 17:35:23 +08:00
Andrew Nicols e871b6fc71 Merge branch 'MDL-83551-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-11-21 12:26:12 +08:00
Huong Nguyen d032d75641 Merge branch 'MDL-83747-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-11-21 11:08:56 +07:00
Huong Nguyen 43a90e8197 Merge branch 'MDL-83048_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-11-21 11:01:48 +07:00
Andrew Nicols 25657e4be2 Merge branch 'MDL-83501-url-encode-nginx-paths-MOODLE_404_STABLE' of https://github.com/rajandangi/moodle into MOODLE_404_STABLE 2024-11-21 11:48:31 +08:00
Andrew Nicols 2f27619ffe Merge branch 'MDL-83226-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-11-21 11:45:11 +08:00
Philipp Memmel 80a77e7c74 MDL-82931 mod_data: Harden parsing of content format 2024-11-20 21:23:06 +01:00
Paul Holden 761f169185 Merge branch 'MDL-83570-404-fix' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-11-20 12:25:07 +00:00
Jun Pataleta a3b50194ee MDL-83570 tiny_recordrtc: Use the correct upgrade_plugin_savepoint()
And move the release upgrade line comment before the upgrade step.
2024-11-20 18:17:17 +08:00
Huong Nguyen 752b45d421 Merge branch 'MDL-83570-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-11-20 16:11:35 +07:00
Frederik Milling Pytlick 7d3a4aa37d MDL-83658 core: Fix reactive debug tool logging
Fixed issue where the reactive debug panel does not log a transaction,
if the events fired are exactly the same as the previous ones.
2024-11-20 08:16:33 +01:00
meirzamoodle 55fb142c2f MDL-83570 tiny_recordrtc: Turn the audio bitrate input to Select field
The current code may have a bug. If users set the audio bit rate to
a non-supported value, such as 1000,
Firefox will display an error in the console,
while Chrome will create the recorded audio file successfully,
but it will have no sound. I tested this on Ubuntu 24.04.

The minimum bit rate threshold varies depending on the audio format.
During my tests with Firefox version 131.0.3, which uses
the audio/Ogg format, I found that the minimum supported value
is 24000. In Chrome 129.0.6668.70, which uses the audio/MP4 format,
the minimum supported value is 2400.

Due to these differences, I decided to change the input from
a text field to a select field, offering options that support both
Ogg and MP4 audio formats.

The database conversion for the old value has been provided in
the lib/db/upgrade.php. The script will find the closest match to
the current data and update it accordingly.
2024-11-20 10:08:10 +07:00
Jun Pataleta d4a98e6cfb Merge branch 'MDL-81521-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-11-19 15:15:25 +08:00
Huong Nguyen 97b1dd2f2f Merge branch 'MDL-83610-404' of https://github.com/marinaglancy/moodle into MOODLE_404_STABLE 2024-11-19 09:28:58 +07:00
Jun Pataleta 626ea71299 MDL-83747 mod_data: Add accessible name for delcheck checkboxes 2024-11-18 19:39:13 +08:00
Marina Glancy 98975c118e MDL-83610 behat: allow to set date fields in groups 2024-11-18 10:37:17 +00:00
Jun Pataleta 90409e8fa0 Merge branch 'MDL-83502-404' of https://github.com/ferranrecio/moodle into MOODLE_404_STABLE 2024-11-18 14:37:06 +08:00
Andrew Nicols d7898ee7da MDL-81521 mod_quiz: Fix attempt walkthrough tests 2024-11-18 10:24:55 +08:00
Andrew Nicols c6942c9bb7 MDL-81521 core: Update all possibly data providers to be static
Note: Some data providers could not be automatically be converted to
being static. These will be handled in a separate issue.
2024-11-18 10:24:55 +08:00
sam marshall 38688c0be6 MDL-83211 core_search: Indexing can miss items due to race condition
Changes search indexing so that (except for test scripts) each indexing
run indexes only items up to 5 seconds ago, and the following indexing
will start from the same point. This ensures all items are indexed,
even if an item is written to the database one or two seconds after its
timecreated value.
2024-11-15 09:34:44 +00:00
Mark Johnson a88cbdae73 MDL-75610 theme: Allow the activity title in Boost theme's secure layout 2024-11-15 08:32:57 +00:00
Mark Johnson ec498ce036 MDL-75610 output: Fix title display logic in activity header
The display logic for including the title in the activity header was
such that the title would only display if both the theme default and the
layout option for 'notitle' were undefined or false. It was not possible
to a theme to have 'notitle' default to true, but have a layout override
that as false to display the title.

This change re-writes the is_title_allowed method to encapsulte the new
logic, first checking if the current layout has the option set and using
that, and if not falling back to the theme default if that is set. If
neither is set, the title is displayed.

This also tweaks moodle_page::magic_get_layout_options to ensure the
theme is initialised before trying to return the layout options.
2024-11-15 08:32:56 +00:00
Jun Pataleta 5f85ba1793 Merge branch 'MDL-82877-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-11-15 13:31:31 +08:00
Huong Nguyen 63205f03bb weekly release 4.4.4+ 2024-11-15 09:21:36 +07:00
Jun Pataleta b820c1c5c3 Merge branch 'MDL-80926-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-11-14 12:05:17 +08:00
Jun Pataleta 482d0cc1dc Merge branch 'MDL-74836_404_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_404_STABLE 2024-11-14 10:46:12 +08:00
Paul Holden 195a4ce781 MDL-83710 report_questioninstances: fix missing type query params. 2024-11-13 21:16:05 +00:00
James C 785d70c2d7 MDL-82762 course: Prevent "undefined" being added to course index 2024-11-14 10:14:17 +13:00
Wiktor Wandachowicz ab25803907 MDL-83048 mod_quiz: Fixed use of grade_out_of and plugin renderer 2024-11-13 17:14:03 +00:00
Huong Nguyen 1a88833799 Merge branch 'MDL-83185-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-11-13 14:27:46 +07:00
Huong Nguyen 8e6355fc8c Merge branch 'MDL-80689_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-11-13 14:01:03 +07:00
Andrew Nicols 00fc817923 MDL-83704 core: Stop loading subplugins files to uninstall
The list of subplugin types was loaded from the json/php subplugins
file, but then the actual list of subplugins was loaded from the cache
in the component, rendering any benefit of using the source json/php as
pointless.
2024-11-13 10:26:21 +08:00
Andrew Nicols c8f0796ca6 MDL-83704 core: Stop loading subplugins files to fetch caps
This information is heavily cached in the component class. This should
be used wherever possible rather than checking on disk.
2024-11-13 10:17:32 +08:00
Simey Lameze afe848bcc6 MDL-83643 behat: make manual completion scenario names unique 2024-11-13 07:18:01 +08:00
Simey Lameze 89e18f1381 MDL-83551 behat: make duplicated scenario names unique 2024-11-13 06:50:56 +08:00
Nexterday 200fb340e6 MDL-74836 theme: Display activity header on secure layouts 2024-11-11 15:15:54 +00:00
Philipp Memmel 364c27227a MDL-82932 mod_data: Fix export with userdata of deleted users 2024-11-11 12:38:54 +01:00
Tim Hunt a70bbb3628 MDL-83653 file manager: report ajax errors
This is for things like when you click on a file, and then click on
the delete button, and an error happens then. Previously that was
ignored.
2024-11-08 17:14:41 +00:00
sam marshall 5bbe044927 MDL-83670 availability_group: With hidden groups, can throw warning 2024-11-08 11:59:00 +00:00
ferran a85c93018a MDL-83661 core_courseformat: fix drop file modal
When the user drags and drops a file into a course section that can
create more than one type of activity (for example a zip file) the modal
had repeated form elements ids. Now every radio option has its own id.
2024-11-08 11:45:58 +01:00
Huong Nguyen 3f9b9363d0 weekly release 4.4.4+ 2024-11-08 13:56:42 +07:00
Huong Nguyen 805ff1806a MDL-82335 qbank_columnsortorder: Fix upgrade code coding style 2024-11-08 09:04:55 +07:00
sam marshall 6ba656e2f5 MDL-83584 report_log: Group filter can get list of all users in system 2024-11-07 09:39:46 +00:00
Huong Nguyen 91d352a085 MDL-82335 qbank_columnsortorder: Cleanup upgrade code 2024-11-07 13:40:01 +07:00
Huong Nguyen 27073a36b6 Merge branch 'MDL-83619-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-11-07 11:05:52 +07:00
Huong Nguyen e1b6c9be56 Merge branch 'MDL-83611-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-11-07 11:02:35 +07:00
Huong Nguyen fee929cdaf Merge branch 'MDL-82335_404' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_404_STABLE 2024-11-07 09:31:58 +07:00
Huong Nguyen a3a1e2184d Merge branch 'MDL-83316-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-11-07 09:27:04 +07:00
Simey Lameze 2245a4c0bc MDL-83316 behat: remove duplicated Then from new test 2024-11-07 07:49:12 +08:00
sam marshall 803f72ef0f MDL-83316 Behat: New step allows system clock change 2024-11-07 07:48:02 +08:00
Jun Pataleta 5ad4c9cf3b Merge branch 'mdl-83497_404' of https://github.com/james-cnz/moodle into MOODLE_404_STABLE 2024-11-06 22:38:45 +08:00
Anupama Sarjoshi 21fc25e46c MDL-82335 qbank_columnsortorder: Fix upgrading issue
When upgraded to Moodle 4.4 or higher, for qbank_columnsortorder
the colsize values in the config_plugins were getting incorrectly set,
resulting in errors accessing the question bank. Changes done to fix
this code and to remove the corrupted colsize value from
config_plugins table.
2024-11-06 13:31:02 +00:00
Jun Pataleta 962d7cfa55 Merge branch 'MDL-76563-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-11-06 17:29:34 +08:00
Simey Lameze 37319d2c88 MDL-80926 behat: fix random and improve h5p completion test 2024-11-06 13:37:05 +08:00
Simey Lameze be5b800a80 MDL-83611 behat: increase window size to avoid randoms 2024-11-05 13:21:33 +08:00
Simey Lameze c3bc783ff4 MDL-83619 behat: enable bbb module early in the test 2024-11-05 10:23:34 +08:00
Paul Holden 58c98e14d9 MDL-82877 customfield: pass correct instanceid for restore structure. 2024-11-04 15:32:14 +00:00
Paul Holden ad201ba85a MDL-83226 customfield: set backup/restore configuration defaults. 2024-11-04 15:29:17 +00:00
Laurent David 3203fb9ae7 MDL-83185 core_courseformat: Refresh cache on group change
* When we add users to a group (or remove them), we should refresh
the course index cache so it stays in sync with what the user
can actually see.
2024-11-04 06:15:25 +01:00
ferran 84c2589c42 MDL-83185 core_courseformat: Allow global state cache invalidation 2024-11-04 06:15:25 +01:00
Huong Nguyen 99b5729824 weekly release 4.4.4+ 2024-11-01 14:29:24 +07:00
Huong Nguyen 3134bf772a Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-11-01 14:29:22 +07:00
Tim Hunt db03f2a58e MDL-80689 filepicker: better reporting of incorrect file type
Before this change, file type errors were reported like system errors. Now,
they are reported in a plain dialoue, which is more like how it works for
drag-drop upload.

Also, before this, after an upload errors, you were left with a blank
filepicker dialogue. Now, the upload form is redisplayed.
2024-10-31 11:39:16 +00:00
Tim Hunt 78cbc7cb16 MDL-80689 behat: add a transformation to get dirroot 2024-10-31 11:39:15 +00:00
Tim Hunt b784c144f8 MDL-80689 form behat: move fixture file to the expected place 2024-10-31 11:39:15 +00:00
Huong Nguyen 94ab19f544 Merge branch 'MDL-82911-404-fix' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-10-31 14:14:46 +07:00
Simey Lameze 438ef558cf MDL-82911 behat: change future times example to minutes 2024-10-31 14:15:48 +08:00
Huong Nguyen 16c1a0494c Merge branch 'MDL-82911-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-10-31 11:23:00 +07:00
Huong Nguyen 9b0b39065c Merge branch 'MDL-83414-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-10-31 11:23:00 +07:00
Huong Nguyen 8b0afe2984 Merge branch 'MDL-82989-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-10-31 11:22:59 +07:00
Jun Pataleta 6fa7222f0f Merge branch 'MDL-82809-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-10-31 11:22:59 +07:00
Huong Nguyen f616472d63 Merge branch 'MDL-82988-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-10-31 11:22:59 +07:00
Angelia Dela Cruz cc33999469 MDL-83414 core_grades: Behat to test custom scale display 2024-10-31 09:46:39 +08:00
Angelia Dela Cruz 4736294b35 MDL-82911 mod_bigbluebuttonbn: Behat for BBB open and close date time 2024-10-29 12:09:41 +08:00
AMOS bot cc86aa7f8d Automatically generated installer lang files 2024-10-29 00:07:50 +00:00
meirzamoodle 2f5145d704 MDL-82989 communication_matrix: Apply helper to mock http_client 2024-10-27 15:55:05 +07:00
Andrew Nicols e62acd23e0 MDL-82989 PHPUnit: Add helper to mock http_client 2024-10-27 15:55:05 +07:00
meirzamoodle 5bd5d08f7e MDL-82988 general: Apply helper to get path to fixture 2024-10-27 15:45:19 +07:00
Andrew Nicols 7bec161984 MDL-82988 PHPUnit: Add helper to get path to fixture 2024-10-27 15:45:19 +07:00
Huong Nguyen f960ce6d5b weekly release 4.4.4+ 2024-10-25 08:36:04 +07:00
Huong Nguyen 9ade28a977 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-10-25 08:36:01 +07:00
Mikel Martín 93821b6024 MDL-76563 theme: Change SCSS variable value
Change the value of the $pink SCSS colour variable so it is
colour contrast accessible on white backgrounds.
2024-10-24 13:27:57 +02:00
Jun Pataleta 731d5cc8b3 Merge branch 'MDL-82548-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-10-24 12:18:11 +08:00
Jun Pataleta 2bb85117e3 Merge branch 'MDL-83423-404' of https://github.com/snake/moodle into MOODLE_404_STABLE 2024-10-24 12:13:28 +08:00
Huong Nguyen dced24e7c3 Merge branch 'MDL-83432-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-10-24 10:13:29 +07:00
Huong Nguyen 62d0705cc1 Merge branch 'MDL-83504-404' of https://github.com/marinaglancy/moodle into MOODLE_404_STABLE 2024-10-24 09:45:06 +07:00
AMOS bot 62778bb1aa Automatically generated installer lang files 2024-10-24 00:08:14 +00:00
Jun Pataleta 3d05070094 Merge branch 'MDL-81308-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-10-23 18:15:28 +08:00
Jun Pataleta 7b007b32af Merge branch 'MDL-83463-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-10-23 14:35:39 +08:00
Andrew Nicols 564de9d4a7 MDL-81308 core: Use a helper for consecutive invocation counts 2024-10-23 14:17:37 +08:00
Andrew Nicols da7c5d98ec MDL-81308 core: Update tests to not use withConsecutive 2024-10-23 14:17:36 +08:00
Jun Pataleta ff51c0bbf6 Merge branch 'MDL-83472-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-10-22 15:55:59 +08:00
Marina Glancy 33bc3cd98c MDL-83504 user: reset preference cache in unittests 2024-10-21 16:04:43 +01:00
ferran dd2c9b56bf MDL-83502 course: fix chrome file dropping in course page 2024-10-21 11:40:42 +02:00
rajandangi a3bcf54428 MDL-83501 core: URL encode paths for Nginx X-Accel-Redirect 2024-10-21 19:49:27 +10:30
James C fb6ea9b0d6 MDL-83497 course: Preserve move section dialogue info HTML 2024-10-19 16:19:37 +13:00
Paul Holden 599a3be74f MDL-83432 enrol: fix arguments to enrolment test generator. 2024-10-18 15:12:52 +01:00
Paul Holden 23a60a1220 MDL-83432 enrol_manual: reference correct role in welcome message. 2024-10-18 15:12:52 +01:00
Shamim Rezaie b097840e33 weekly release 4.4.4+ 2024-10-18 23:28:57 +11:00
Shamim Rezaie 04e7c65f0c Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-10-18 23:28:55 +11:00
Jun Pataleta 7e3638ff2e Merge branch 'MDL-83457-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-10-17 12:23:24 +08:00
Jun Pataleta 540fda4055 Merge branch 'MDL-83443-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-10-17 12:17:38 +08:00
Jun Pataleta f44da13380 Merge branch 'MDL-83367-404' of https://github.com/dravek/moodle into MOODLE_404_STABLE 2024-10-17 12:08:52 +08:00
Jun Pataleta c8d55cdc52 Merge branch 'MDL-81450-MOODLE_404_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_404_STABLE 2024-10-17 12:05:10 +08:00
Huong Nguyen d87999b89a Merge branch 'MDL-82580-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-10-17 10:49:26 +07:00
Jun Pataleta 6e617b9e46 Merge branch 'MDL-83143-404' of https://github.com/safatshahin/moodle into MOODLE_404_STABLE 2024-10-17 11:47:16 +08:00
Jun Pataleta 5a237cfef2 Merge branch 'MDL-82838-404' of https://github.com/justusdieckmann/moodle into MOODLE_404_STABLE 2024-10-17 10:54:39 +08:00
Huong Nguyen e05af64ecf Merge branch 'MDL-75724-404_toolbrickfield_tableheadercheck' of https://github.com/brickfield/moodle into MOODLE_404_STABLE 2024-10-17 09:44:43 +07:00
Jun Pataleta 1427cd178c Merge branch 'MDL-83002-404' of https://github.com/marinaglancy/moodle into MOODLE_404_STABLE 2024-10-16 20:32:28 +08:00
Paul Holden 6f6eae5d67 MDL-83472 phpunit: add void return type to test methods.
See also 01148a0816 from MDL-81522.
2024-10-16 13:04:13 +01:00
Paul Holden f442e8d5ad MDL-82809 reportbuilder: always apply conditions to custom report.
Including those that are otherwise unavailable to the current user,
ensuring that they are always applied when viewing report output.
2024-10-16 10:51:52 +01:00
Philipp Memmel 0ccc87c617 MDL-81450 mod_forum: Reduce size of file icon in HTML mails
@Co-authored-by: Mateusz Walczak
2024-10-16 11:32:48 +02:00
Paul Holden 92b27a6f07 MDL-82475 reportbuilder: account for duplicate profile field names.
Long-term, it would be better to not allow this scenario to happen
at all but until then we'll have to work around it (see MDL-73461).
2024-10-16 09:33:22 +01:00
Paul Holden 07bc841860 MDL-82809 reportbuilder: load custom/profile fields consistently.
Ensure that provided columns and filters for each use appropriate
checks to determine their availability (based on user permissions,
etc), rather than conditionally adding them to the entity.
2024-10-16 09:11:20 +01:00
Huong Nguyen 0282a557d0 Merge branch 'MDL-82793-MOODLE_404_STABLE' of https://github.com/phmemmel/moodle into MOODLE_404_STABLE 2024-10-16 09:26:49 +07:00
Philipp Memmel d506b8f6e2 MDL-82793 core: Make modal execute JS from template
Co-authored-by: Huong Nguyen <huongnv13@gmail.com>
2024-10-15 20:52:27 +02:00
Paul Holden 34495e01fc MDL-83463 backup: ensure defaults for course file inclusion are read. 2024-10-15 12:27:17 +01:00
Jun Pataleta cd06961249 Merge branch 'MDL-83070_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-10-15 19:09:14 +08:00
Huong Nguyen 7cdc137d8a Merge branch 'MDL-82429-404' of https://github.com/x-iy/moodle into MOODLE_404_STABLE 2024-10-15 16:25:11 +07:00
Mikel Martín 8a6d6ef675 MDL-83457 mod_feedback: Fix get_incomplete_users early return type
Fix 'feedback_get_incomplete_users' early return when there are no users with
the 'mod/feedback:complete' capability from 'false' to an empty array. That
will follow the function signature.
2024-10-15 09:57:06 +02:00
Jun Pataleta b2cf67e4f5 Merge branch 'MDL-83253-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-10-15 11:44:36 +08:00
Jake Dallimore 62a0b21d27 MDL-83423 mod_lti: fix JWK decoding when multiple keys missing alg
Related to MDL-77077, but was a case missed there. Now, any unusable
keys (i.e. can't be used during the JWT decode), are dropped from the
keyset if they don't have the 'alg' prop, preventing a 'missing alg'
exception during keyset parsing. Since these cannot be used during
decode, these aren't needed anyway.
2024-10-15 09:12:21 +08:00
AMOS bot cee330362c Automatically generated installer lang files 2024-10-15 00:09:32 +00:00
Michael Pound 9e7d54ebe6 MDL-75724 tool_brickfield: Ensuring correct table headers pass checks. 2024-10-14 16:56:52 +00:00
AMOS bot b51456d83a Automatically generated installer lang files 2024-10-13 00:07:52 +00:00
Paul Holden 847ab7d072 MDL-83443 enrol: use defined role name in welcome message. 2024-10-11 14:35:28 +01:00
Jake Dallimore b48e64e2a1 weekly release 4.4.4+ 2024-10-11 10:55:06 +08:00
Jake Dallimore 71e219b7db Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-10-11 10:55:05 +08:00
Safat aa0fbc3f08 MDL-83143 core_communication: Behat coverage for default to course name 2024-10-11 11:02:08 +11:00
Safat 9ef5476361 MDL-83143 core_course: Add course name as default for empty room name 2024-10-11 11:02:08 +11:00
Safat 2c363085af MDL-83143: core_communication: Fix variable name typos 2024-10-11 11:02:07 +11:00
Jun Pataleta 75573d11e9 Merge branch 'MDL-82813-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-10-10 12:04:15 +08:00
Huong Nguyen 35ca0b0616 Merge branch 'MDL-82570-404' of https://github.com/vietlx426/moodle-1 into MOODLE_404_STABLE 2024-10-10 10:52:51 +07:00
Huong Nguyen 1ff3797d8d Merge branch 'MDL-83255-MOODLE_404_STABLE' of https://github.com/TobiGa/moodle into MOODLE_404_STABLE 2024-10-10 10:11:40 +07:00
Jun Pataleta 666fffc680 Merge branch 'MDL-82912-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-10-10 10:35:07 +08:00
Jun Pataleta 6bbb0de4eb Merge branch 'MDL-82812_404_toolbrickfieldfaicons' of https://github.com/brickfield/moodle into MOODLE_404_STABLE 2024-10-10 10:13:44 +08:00
Angelia Dela Cruz 79dcd64b34 MDL-82912 mod_workshop: Behat to view assessment after workshop close 2024-10-09 16:42:30 +08:00
Huong Nguyen 13e5a55ae9 Merge branch 'MDL-83331_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-10-09 14:47:14 +07:00
AMOS bot e5b03f9fb9 Automatically generated installer lang files 2024-10-09 00:09:23 +00:00
Max Larkin 9a72cc8837 MDL-82812 tool_brickfield: Ignore fa icons 2024-10-08 13:02:23 +01:00
Huong Nguyen 756a559024 Merge branch 'MDL-70180-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-10-08 09:36:38 +07:00
AMOS bot 0685bfdb24 Automatically generated installer lang files 2024-10-08 00:07:46 +00:00
david adamson 6f73e436fb MDL-82429 tool_brickfield: Process calculated fontsizes 2024-10-08 09:32:57 +11:00
Tim Hunt b72b37c974 MDL-83331 behat: enable navigation direct to mod/.../index.php 2024-10-07 12:05:19 +01:00
Tobias Garske dc2b113bca MDL-83255 core_course: Fix activitychooser recommended tab navigation 2024-10-07 08:24:31 +00:00
Tim Hunt a9d4d93b74 MDL-83070 question restore: recode links in hints 2024-10-07 08:53:58 +01:00
Jun Pataleta d7e3bea9fa Moodle release 4.4.4 2024-10-05 14:46:37 +08:00
AMOS bot f67240b70b Automatically generated installer lang files 2024-10-05 00:07:47 +00:00
Huong Nguyen 5ce118a9c5 weekly release 4.4.3+ 2024-10-04 20:48:10 +07:00
Huong Nguyen cc27af1b7f Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-10-04 20:48:08 +07:00
David Carrillo 2128d39ed7 MDL-83367 tasks: Apply trim() to pathtophp setting
- It fixes the problem that when "pathtophp" setting is stored with
whitespaces, the "Run now" button will still show up in the tasks list,
but the task will never run
2024-10-04 15:36:31 +02:00
AMOS bot 3b8f6dee80 Automatically generated installer lang files 2024-10-04 00:07:45 +00:00
Marina Glancy 6c113ddc35 MDL-83002 theme_boost: tell behat to wait when initialising drawers 2024-10-03 15:52:13 +01:00
Michael Hawkins b08fbf57fd MDL-83352 message: Update usercantbemessaged string 2024-10-03 17:46:34 +07:00
vietlx426 fce950a59a MDL-82570 themes: Help boxes not accessible if selected consecutively 2024-10-03 16:27:29 +07:00
Jun Pataleta 54e9ee4a9e Merge branch 'MDL-83238-404-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_404_STABLE 2024-10-03 16:02:02 +08:00
David Carrillo ba131ff29d MDL-83179 badges: Get type and courseid from context instead of params 2024-10-03 08:12:10 +08:00
David Mudrák 6e61b34ac2 MDL-83238 lang: Fix the changed strings in the tests, too 2024-10-02 22:04:50 +02:00
Helen Foster 06666c60f5 MDL-83238 lang: Import fixed English strings (en_fix) 2024-10-02 22:04:50 +02:00
Shamim Rezaie a0c341d039 Merge branch 'MDL-83332-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-10-03 02:24:09 +10:00
Paul Holden 6e77a2070d MDL-83180 reportbuilder: correct access check for viewing schedules. 2024-10-02 16:49:26 +08:00
meirzamoodle 366d82ccd7 MDL-83332 environment: Reverts the slashargument removal on MDL-62640
We are encountering Behat failures on MacOS and possibly Windows.

This reverts commit 3202109780.
2024-10-02 13:29:14 +07:00
David Carrillo c75ec7503c MDL-83178 reportbuilder: correct access check to view badge recipients 2024-10-02 13:58:07 +08:00
Jun Pataleta 0f62b3d370 Merge branch 'm44-md83163' of https://github.com/danmarsden/moodle into MOODLE_404_STABLE 2024-10-02 12:31:22 +08:00
Dan Marsden 3100b07fb6 MDL-83310 course: remove hard-coded list of course formats from test. 2024-10-02 08:50:06 +13:00
Paul Holden 4a68972a4a MDL-83181 reportbuilder: ensure audience correctness before delete. 2024-10-01 12:41:17 +00:00
Paul Holden 1a219492f7 MDL-82386 block_rss_client: user access checks for feed edit/delete. 2024-10-01 12:41:17 +00:00
Huong Nguyen d8de6025b2 weekly release 4.4.3+ 2024-10-01 19:33:00 +07:00
Mikel Martín bdd79633d3 MDL-82548 courseformat: Fix courseindex cm anchors
In the course index the course modules links had incorrenct "href" (only the anchor) when
being displayed in a page different than course page. This patch regenerates the href for
cms in the course index when needed.
2024-10-01 11:01:48 +02:00
Jun Pataleta 823e8d94de Merge branch 'MDL-83264-404-1' of https://github.com/mihailges/moodle into MOODLE_404_STABLE 2024-10-01 12:47:13 +08:00
Mihail Geshoski 54da83f40a MDL-83264 mod_quiz: Return the correct name for top categories 2024-10-01 09:43:13 +08:00
Shamim Rezaie 759bf6e3b6 Merge branch 'MDL-81590-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-09-30 23:01:29 +10:00
Huong Nguyen e3460d67f3 weekly release 4.4.3+ 2024-09-27 18:44:03 +07:00
Huong Nguyen a99970eeb5 NOBUG: Fixed SVG browser compatibility 2024-09-27 18:44:01 +07:00
Huong Nguyen 96321d7b45 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-09-27 18:44:00 +07:00
Jun Pataleta 971fd1cf26 MDL-81590 core: Build the context path without using DIRECTORY_SEPARATOR 2024-09-27 15:44:37 +08:00
Jun Pataleta c187fde227 Merge branch 'MDL-80929-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-27 12:40:18 +08:00
Huong Nguyen 7df5aeed41 Merge branch 'MDL-83205-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-09-27 11:27:05 +07:00
Huong Nguyen 21e23bef57 Merge branch 'MDL-82483-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-27 11:15:54 +07:00
Jun Pataleta 04d887ec89 Merge branch 'MDL-82602-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-27 12:10:46 +08:00
Huong Nguyen 12c97671bc Merge branch 'MDL-80974-MOODLE_404_STABLE' of https://github.com/sh-csg/moodle into MOODLE_404_STABLE 2024-09-27 11:08:52 +07:00
Jun Pataleta 3a1d250c27 Merge branch 'MDL-82973-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-27 12:06:01 +08:00
Jun Pataleta 3dadbe85af Merge branch 'MDL-83163-m404' of https://github.com/sammarshallou/moodle into MOODLE_404_STABLE 2024-09-27 11:59:25 +08:00
Andrew Nicols 9f3174a32d Merge branch 'MDL-83094-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-27 11:05:55 +08:00
Jun Pataleta bba5ec68ec Merge branch 'MDL-81157-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-27 10:28:24 +08:00
Jun Pataleta 7b354279c7 Merge branch 'MDL-82581-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-27 10:10:45 +08:00
AMOS bot 78380cc2a3 Automatically generated installer lang files 2024-09-27 00:07:45 +00:00
Andrew Nicols 0feec6d5f0 Merge branch 'MDL-83268-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-09-26 22:07:53 +08:00
Sara Arjona 03edcc984e MDL-83268 core_h5p: Fix version number 2024-09-26 16:02:17 +02:00
Andrew Nicols 264e5dcb44 Merge branch 'MDL-83268-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-09-26 21:32:37 +08:00
Sara Arjona 2f5e3d13b2 MDL-83268 core_h5p: Fix required Moodle version 2024-09-26 15:25:42 +02:00
Andrew Nicols 26d77f3735 Merge branch 'MDL-83268-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-09-26 21:06:53 +08:00
Jun Pataleta 4d1919014f Merge branch 'MDL-79288-404_blockaccessreview_colourcontrastcheck' of https://github.com/brickfield/moodle into MOODLE_404_STABLE 2024-09-26 19:45:02 +08:00
Sara Arjona 2fad1f88f1 MDL-83268 core_h5p: Remove unused font files
In https://h5ptechnology.atlassian.net/browse/HFP-4105, the
fonts/h5p-core-29.svg was merged with some conflicts.
Looking at the patch there, it seems all the h5p-core-29* fonts
can be removed because the ones used by the library are the
h5p-core-30-*.

I haven't added a note in the upgrade because it seems an error
on their release process (so I don't think it's worth adding
a note because it should be fixed in future releases).
2024-09-26 10:35:26 +02:00
Sara Arjona 0bcf1e2dcc MDL-83268 core_h5p: Remove the h5plib_v126 plugin
The h5plib_v126 plugin can be removed because it has been replaced
with h5plib_v127, which is using the latest versions of the
libraries.
2024-09-26 10:35:26 +02:00
Sara Arjona 76ed1fd12a MDL-83268 core_h5p: Add editor lib changes after upgrading it 2024-09-26 10:35:26 +02:00
Sara Arjona d205a07d40 MDL-83268 core_h5p: Upgrade editor lib to 1.27
This commit is upgrading the joubel/editor library to the one
tagged as moodle-1.27.0 (which also increases the coreApi minorVersion).
2024-09-26 10:35:25 +02:00
Sara Arjona 5670b0932c MDL-83268 core_h5p: Add core lib changes after upgrading it 2024-09-26 10:35:25 +02:00
Sara Arjona 67cec533ea MDL-83268 core_h5p: Upgrade core lib to 1.27
This commit is upgrading the joubel/core library to the one
tagged as moodle-1.27.0 (which also increases the coreApi minorVersion).
That's why the previous commit was duplicating the existing
h5plib_v126.
2024-09-26 10:35:25 +02:00
Sara Arjona 1550715d9b MDL-83268 h5plib: Create first version of h5plib_v127
AMOS BEGIN
  CPY [editor:a11ytitleshowlabel,h5plib_v126],[editor:a11ytitleshowlabel,h5plib_v127]
  CPY [editor:a11ytitlehidelabel,h5plib_v126],[editor:a11ytitlehidelabel,h5plib_v127]
  CPY [editor:atoz,h5plib_v126],[editor:atoz,h5plib_v127]
  CPY [editor:add,h5plib_v126],[editor:add,h5plib_v127]
  CPY [editor:addauthor,h5plib_v126],[editor:addauthor,h5plib_v127]
  CPY [editor:addentity,h5plib_v126],[editor:addentity,h5plib_v127]
  CPY [editor:addfile,h5plib_v126],[editor:addfile,h5plib_v127]
  CPY [editor:addnewchange,h5plib_v126],[editor:addnewchange,h5plib_v127]
  CPY [editor:addtitle,h5plib_v126],[editor:addtitle,h5plib_v127]
  CPY [editor:addvideodescription,h5plib_v126],[editor:addvideodescription,h5plib_v127]
  CPY [editor:avtablistlabel,h5plib_v126],[editor:avtablistlabel,h5plib_v127]
  CPY [editor:belowmin,h5plib_v126],[editor:belowmin,h5plib_v127]
  CPY [editor:cancel,h5plib_v126],[editor:cancel,h5plib_v127]
  CPY [editor:cancellabel,h5plib_v126],[editor:cancellabel,h5plib_v127]
  CPY [editor:changefile,h5plib_v126],[editor:changefile,h5plib_v127]
  CPY [editor:changelanguage,h5plib_v126],[editor:changelanguage,h5plib_v127]
  CPY [editor:changelibrary,h5plib_v126],[editor:changelibrary,h5plib_v127]
  CPY [editor:changelogdescription,h5plib_v126],[editor:changelogdescription,h5plib_v127]
  CPY [editor:close,h5plib_v126],[editor:close,h5plib_v127]
  CPY [editor:commonfields,h5plib_v126],[editor:commonfields,h5plib_v127]
  CPY [editor:commonfieldsdescription,h5plib_v126],[editor:commonfieldsdescription,h5plib_v127]
  CPY [editor:confirmchangelibrary,h5plib_v126],[editor:confirmchangelibrary,h5plib_v127]
  CPY [editor:confirmdeletechangelog,h5plib_v126],[editor:confirmdeletechangelog,h5plib_v127]
  CPY [editor:confirmimageremoval,h5plib_v126],[editor:confirmimageremoval,h5plib_v127]
  CPY [editor:confirmpastebuttontext,h5plib_v126],[editor:confirmpastebuttontext,h5plib_v127]
  CPY [editor:confirmpastecontent,h5plib_v126],[editor:confirmpastecontent,h5plib_v127]
  CPY [editor:confirmremoval,h5plib_v126],[editor:confirmremoval,h5plib_v127]
  CPY [editor:confirmremoveauthor,h5plib_v126],[editor:confirmremoveauthor,h5plib_v127]
  CPY [editor:contenttypebackbuttonlabel,h5plib_v126],[editor:contenttypebackbuttonlabel,h5plib_v127]
  CPY [editor:contenttypecacheoutdated,h5plib_v126],[editor:contenttypecacheoutdated,h5plib_v127]
  CPY [editor:contenttypecacheoutdateddesc,h5plib_v126],[editor:contenttypecacheoutdateddesc,h5plib_v127]
  CPY [editor:contenttypedemobuttonlabel,h5plib_v126],[editor:contenttypedemobuttonlabel,h5plib_v127]
  CPY [editor:contenttypedetailbuttonlabel,h5plib_v126],[editor:contenttypedetailbuttonlabel,h5plib_v127]
  CPY [editor:contenttypegetbuttonlabel,h5plib_v126],[editor:contenttypegetbuttonlabel,h5plib_v127]
  CPY [editor:contenttypeiconalttext,h5plib_v126],[editor:contenttypeiconalttext,h5plib_v127]
  CPY [editor:contenttypeinstallbuttonlabel,h5plib_v126],[editor:contenttypeinstallbuttonlabel,h5plib_v127]
  CPY [editor:contenttypeinstallerror,h5plib_v126],[editor:contenttypeinstallerror,h5plib_v127]
  CPY [editor:contenttypeinstallsuccess,h5plib_v126],[editor:contenttypeinstallsuccess,h5plib_v127]
  CPY [editor:contenttypeinstallingbuttonlabel,h5plib_v126],[editor:contenttypeinstallingbuttonlabel,h5plib_v127]
  CPY [editor:contenttypelicensepaneltitle,h5plib_v126],[editor:contenttypelicensepaneltitle,h5plib_v127]
  CPY [editor:contenttypenotinstalled,h5plib_v126],[editor:contenttypenotinstalled,h5plib_v127]
  CPY [editor:contenttypenotinstalleddesc,h5plib_v126],[editor:contenttypenotinstalleddesc,h5plib_v127]
  CPY [editor:contenttypeowner,h5plib_v126],[editor:contenttypeowner,h5plib_v127]
  CPY [editor:contenttyperestricted,h5plib_v126],[editor:contenttyperestricted,h5plib_v127]
  CPY [editor:contenttyperestricteddesc,h5plib_v126],[editor:contenttyperestricteddesc,h5plib_v127]
  CPY [editor:contenttypesearchfieldplaceholder,h5plib_v126],[editor:contenttypesearchfieldplaceholder,h5plib_v127]
  CPY [editor:contenttypesectionall,h5plib_v126],[editor:contenttypesectionall,h5plib_v127]
  CPY [editor:contenttypeunsupportedapiversioncontent,h5plib_v126],[editor:contenttypeunsupportedapiversioncontent,h5plib_v127]
  CPY [editor:contenttypeunsupportedapiversiontitle,h5plib_v126],[editor:contenttypeunsupportedapiversiontitle,h5plib_v127]
  CPY [editor:contenttypeupdateavailable,h5plib_v126],[editor:contenttypeupdateavailable,h5plib_v127]
  CPY [editor:contenttypeupdatebuttonlabel,h5plib_v126],[editor:contenttypeupdatebuttonlabel,h5plib_v127]
  CPY [editor:contenttypeupdatesuccess,h5plib_v126],[editor:contenttypeupdatesuccess,h5plib_v127]
  CPY [editor:contenttypeupdatingbuttonlabel,h5plib_v126],[editor:contenttypeupdatingbuttonlabel,h5plib_v127]
  CPY [editor:contenttypeusebuttonlabel,h5plib_v126],[editor:contenttypeusebuttonlabel,h5plib_v127]
  CPY [editor:contributetranslations,h5plib_v126],[editor:contributetranslations,h5plib_v127]
  CPY [editor:copiedbutton,h5plib_v126],[editor:copiedbutton,h5plib_v127]
  CPY [editor:copiedtoclipboard,h5plib_v126],[editor:copiedtoclipboard,h5plib_v127]
  CPY [editor:copybutton,h5plib_v126],[editor:copybutton,h5plib_v127]
  CPY [editor:copytoclipboard,h5plib_v126],[editor:copytoclipboard,h5plib_v127]
  CPY [editor:createcontenttablabel,h5plib_v126],[editor:createcontenttablabel,h5plib_v127]
  CPY [editor:currentmenuselected,h5plib_v126],[editor:currentmenuselected,h5plib_v127]
  CPY [editor:editcopyright,h5plib_v126],[editor:editcopyright,h5plib_v127]
  CPY [editor:editimage,h5plib_v126],[editor:editimage,h5plib_v127]
  CPY [editor:editmode,h5plib_v126],[editor:editmode,h5plib_v127]
  CPY [editor:enteraudiotitle,h5plib_v126],[editor:enteraudiotitle,h5plib_v127]
  CPY [editor:enteraudiourl,h5plib_v126],[editor:enteraudiourl,h5plib_v127]
  CPY [editor:enterfullscreenbuttonlabel,h5plib_v126],[editor:enterfullscreenbuttonlabel,h5plib_v127]
  CPY [editor:entervideotitle,h5plib_v126],[editor:entervideotitle,h5plib_v127]
  CPY [editor:entervideourl,h5plib_v126],[editor:entervideourl,h5plib_v127]
  CPY [editor:errorcalculatingmaxscore,h5plib_v126],[editor:errorcalculatingmaxscore,h5plib_v127]
  CPY [editor:errorcommunicatinghubcontent,h5plib_v126],[editor:errorcommunicatinghubcontent,h5plib_v127]
  CPY [editor:errorcommunicatinghubtitle,h5plib_v126],[editor:errorcommunicatinghubtitle,h5plib_v127]
  CPY [editor:errorheader,h5plib_v126],[editor:errorheader,h5plib_v127]
  CPY [editor:errornotsupported,h5plib_v126],[editor:errornotsupported,h5plib_v127]
  CPY [editor:errorparamsbroken,h5plib_v126],[editor:errorparamsbroken,h5plib_v127]
  CPY [editor:errortoohighversion,h5plib_v126],[editor:errortoohighversion,h5plib_v127]
  CPY [editor:example,h5plib_v126],[editor:example,h5plib_v127]
  CPY [editor:exceedsmax,h5plib_v126],[editor:exceedsmax,h5plib_v127]
  CPY [editor:exitfullscreenbuttonlabel,h5plib_v126],[editor:exitfullscreenbuttonlabel,h5plib_v127]
  CPY [editor:expandcollapse,h5plib_v126],[editor:expandcollapse,h5plib_v127]
  CPY [editor:filetolarge,h5plib_v126],[editor:filetolarge,h5plib_v127]
  CPY [editor:fillinthefieldsbelow,h5plib_v126],[editor:fillinthefieldsbelow,h5plib_v127]
  CPY [editor:gethelp,h5plib_v126],[editor:gethelp,h5plib_v127]
  CPY [editor:h5pfileuploadservererrorcontent,h5plib_v126],[editor:h5pfileuploadservererrorcontent,h5plib_v127]
  CPY [editor:h5pfileuploadservererrortitle,h5plib_v126],[editor:h5pfileuploadservererrortitle,h5plib_v127]
  CPY [editor:h5pfilevalidationfailedcontent,h5plib_v126],[editor:h5pfilevalidationfailedcontent,h5plib_v127]
  CPY [editor:h5pfilevalidationfailedtitle,h5plib_v126],[editor:h5pfilevalidationfailedtitle,h5plib_v127]
  CPY [editor:h5pfilewrongextensioncontent,h5plib_v126],[editor:h5pfilewrongextensioncontent,h5plib_v127]
  CPY [editor:h5pfilewrongextensiontitle,h5plib_v126],[editor:h5pfilewrongextensiontitle,h5plib_v127]
  CPY [editor:height,h5plib_v126],[editor:height,h5plib_v127]
  CPY [editor:hide,h5plib_v126],[editor:hide,h5plib_v127]
  CPY [editor:hideimportantinstructions,h5plib_v126],[editor:hideimportantinstructions,h5plib_v127]
  CPY [editor:hubpanellabel,h5plib_v126],[editor:hubpanellabel,h5plib_v127]
  CPY [editor:illegaldecimalnumber,h5plib_v126],[editor:illegaldecimalnumber,h5plib_v127]
  CPY [editor:imagelightboxprogress,h5plib_v126],[editor:imagelightboxprogress,h5plib_v127]
  CPY [editor:imagelightboxtitle,h5plib_v126],[editor:imagelightboxtitle,h5plib_v127]
  CPY [editor:importantinstructions,h5plib_v126],[editor:importantinstructions,h5plib_v127]
  CPY [editor:insert,h5plib_v126],[editor:insert,h5plib_v127]
  CPY [editor:invalidformat,h5plib_v126],[editor:invalidformat,h5plib_v127]
  CPY [editor:language,h5plib_v126],[editor:language,h5plib_v127]
  CPY [editor:librarymissing,h5plib_v126],[editor:librarymissing,h5plib_v127]
  CPY [editor:licensecandistribute,h5plib_v126],[editor:licensecandistribute,h5plib_v127]
  CPY [editor:licensecanholdliable,h5plib_v126],[editor:licensecanholdliable,h5plib_v127]
  CPY [editor:licensecanmodify,h5plib_v126],[editor:licensecanmodify,h5plib_v127]
  CPY [editor:licensecansublicense,h5plib_v126],[editor:licensecansublicense,h5plib_v127]
  CPY [editor:licensecanusecommercially,h5plib_v126],[editor:licensecanusecommercially,h5plib_v127]
  CPY [editor:licensecannotholdliable,h5plib_v126],[editor:licensecannotholdliable,h5plib_v127]
  CPY [editor:licensedescription,h5plib_v126],[editor:licensedescription,h5plib_v127]
  CPY [editor:licensefetchdetailsfailed,h5plib_v126],[editor:licensefetchdetailsfailed,h5plib_v127]
  CPY [editor:licensemodalsubtitle,h5plib_v126],[editor:licensemodalsubtitle,h5plib_v127]
  CPY [editor:licensemodaltitle,h5plib_v126],[editor:licensemodaltitle,h5plib_v127]
  CPY [editor:licensemustincludecopyright,h5plib_v126],[editor:licensemustincludecopyright,h5plib_v127]
  CPY [editor:licensemustincludelicense,h5plib_v126],[editor:licensemustincludelicense,h5plib_v127]
  CPY [editor:licenseunspecified,h5plib_v126],[editor:licenseunspecified,h5plib_v127]
  CPY [editor:listbelowmin,h5plib_v126],[editor:listbelowmin,h5plib_v127]
  CPY [editor:listexceedsmax,h5plib_v126],[editor:listexceedsmax,h5plib_v127]
  CPY [editor:listlabel,h5plib_v126],[editor:listlabel,h5plib_v127]
  CPY [editor:loading,h5plib_v126],[editor:loading,h5plib_v127]
  CPY [editor:loadingimageeditor,h5plib_v126],[editor:loadingimageeditor,h5plib_v127]
  CPY [editor:logthischange,h5plib_v126],[editor:logthischange,h5plib_v127]
  CPY [editor:loggedchanges,h5plib_v126],[editor:loggedchanges,h5plib_v127]
  CPY [editor:maxscoresemanticsmissing,h5plib_v126],[editor:maxscoresemanticsmissing,h5plib_v127]
  CPY [editor:metadata,h5plib_v126],[editor:metadata,h5plib_v127]
  CPY [editor:metadatasharingandlicensinginfo,h5plib_v126],[editor:metadatasharingandlicensinginfo,h5plib_v127]
  CPY [editor:missingproperty,h5plib_v126],[editor:missingproperty,h5plib_v127]
  CPY [editor:missingtranslation,h5plib_v126],[editor:missingtranslation,h5plib_v127]
  CPY [editor:newchangehasbeenlogged,h5plib_v126],[editor:newchangehasbeenlogged,h5plib_v127]
  CPY [editor:newestfirst,h5plib_v126],[editor:newestfirst,h5plib_v127]
  CPY [editor:nextimage,h5plib_v126],[editor:nextimage,h5plib_v127]
  CPY [editor:nochangeshavebeenlogged,h5plib_v126],[editor:nochangeshavebeenlogged,h5plib_v127]
  CPY [editor:nocontenttypesavailable,h5plib_v126],[editor:nocontenttypesavailable,h5plib_v127]
  CPY [editor:nocontenttypesavailabledesc,h5plib_v126],[editor:nocontenttypesavailabledesc,h5plib_v127]
  CPY [editor:nofollow,h5plib_v126],[editor:nofollow,h5plib_v127]
  CPY [editor:notimageordimensionsfield,h5plib_v126],[editor:notimageordimensionsfield,h5plib_v127]
  CPY [editor:numresults,h5plib_v126],[editor:numresults,h5plib_v127]
  CPY [editor:numberfield,h5plib_v126],[editor:numberfield,h5plib_v127]
  CPY [editor:ok,h5plib_v126],[editor:ok,h5plib_v127]
  CPY [editor:onlynumbers,h5plib_v126],[editor:onlynumbers,h5plib_v127]
  CPY [editor:or,h5plib_v126],[editor:or,h5plib_v127]
  CPY [editor:orderitemdown,h5plib_v126],[editor:orderitemdown,h5plib_v127]
  CPY [editor:orderitemup,h5plib_v126],[editor:orderitemup,h5plib_v127]
  CPY [editor:outofstep,h5plib_v126],[editor:outofstep,h5plib_v127]
  CPY [editor:pasteandreplacebutton,h5plib_v126],[editor:pasteandreplacebutton,h5plib_v127]
  CPY [editor:pasteandreplacefromclipboard,h5plib_v126],[editor:pasteandreplacefromclipboard,h5plib_v127]
  CPY [editor:pastebutton,h5plib_v126],[editor:pastebutton,h5plib_v127]
  CPY [editor:pastecontent,h5plib_v126],[editor:pastecontent,h5plib_v127]
  CPY [editor:pastecontentnotsupported,h5plib_v126],[editor:pastecontentnotsupported,h5plib_v127]
  CPY [editor:pastecontentrestricted,h5plib_v126],[editor:pastecontentrestricted,h5plib_v127]
  CPY [editor:pasteerror,h5plib_v126],[editor:pasteerror,h5plib_v127]
  CPY [editor:pastefromclipboard,h5plib_v126],[editor:pastefromclipboard,h5plib_v127]
  CPY [editor:pastenocontent,h5plib_v126],[editor:pastenocontent,h5plib_v127]
  CPY [editor:pastetoonew,h5plib_v126],[editor:pastetoonew,h5plib_v127]
  CPY [editor:pastetooold,h5plib_v126],[editor:pastetooold,h5plib_v127]
  CPY [editor:popularfirst,h5plib_v126],[editor:popularfirst,h5plib_v127]
  CPY [editor:previousimage,h5plib_v126],[editor:previousimage,h5plib_v127]
  CPY [editor:proceedbuttonlabel,h5plib_v126],[editor:proceedbuttonlabel,h5plib_v127]
  CPY [editor:readless,h5plib_v126],[editor:readless,h5plib_v127]
  CPY [editor:readmore,h5plib_v126],[editor:readmore,h5plib_v127]
  CPY [editor:recentlyusedfirst,h5plib_v126],[editor:recentlyusedfirst,h5plib_v127]
  CPY [editor:reloadbuttonlabel,h5plib_v126],[editor:reloadbuttonlabel,h5plib_v127]
  CPY [editor:removefile,h5plib_v126],[editor:removefile,h5plib_v127]
  CPY [editor:removeimage,h5plib_v126],[editor:removeimage,h5plib_v127]
  CPY [editor:removeitem,h5plib_v126],[editor:removeitem,h5plib_v127]
  CPY [editor:requiredproperty,h5plib_v126],[editor:requiredproperty,h5plib_v127]
  CPY [editor:resettooriginallabel,h5plib_v126],[editor:resettooriginallabel,h5plib_v127]
  CPY [editor:savelabel,h5plib_v126],[editor:savelabel,h5plib_v127]
  CPY [editor:savemetadata,h5plib_v126],[editor:savemetadata,h5plib_v127]
  CPY [editor:screenshots,h5plib_v126],[editor:screenshots,h5plib_v127]
  CPY [editor:scriptmissing,h5plib_v126],[editor:scriptmissing,h5plib_v127]
  CPY [editor:searchresults,h5plib_v126],[editor:searchresults,h5plib_v127]
  CPY [editor:selectfiletoupload,h5plib_v126],[editor:selectfiletoupload,h5plib_v127]
  CPY [editor:selectlibrary,h5plib_v126],[editor:selectlibrary,h5plib_v127]
  CPY [editor:semanticserror,h5plib_v126],[editor:semanticserror,h5plib_v127]
  CPY [editor:show,h5plib_v126],[editor:show,h5plib_v127]
  CPY [editor:showimportantinstructions,h5plib_v126],[editor:showimportantinstructions,h5plib_v127]
  CPY [editor:tabtitlebasicfileupload,h5plib_v126],[editor:tabtitlebasicfileupload,h5plib_v127]
  CPY [editor:tabtitleinputlinkurl,h5plib_v126],[editor:tabtitleinputlinkurl,h5plib_v127]
  CPY [editor:textfield,h5plib_v126],[editor:textfield,h5plib_v127]
  CPY [editor:thecontenttype,h5plib_v126],[editor:thecontenttype,h5plib_v127]
  CPY [editor:thiswillpotentially,h5plib_v126],[editor:thiswillpotentially,h5plib_v127]
  CPY [editor:title,h5plib_v126],[editAMOS END
  or:title,h5plib_v127]
  CPY [editor:toolong,h5plib_v126],[editor:toolong,h5plib_v127]
  CPY [editor:tryagain,h5plib_v126],[editor:tryagain,h5plib_v127]
  CPY [editor:tutorial,h5plib_v126],[editor:tutorial,h5plib_v127]
  CPY [editor:unabletointerpreterror,h5plib_v126],[editor:unabletointerpreterror,h5plib_v127]
  CPY [editor:unabletointerpretsolution,h5plib_v126],[editor:unabletointerpretsolution,h5plib_v127]
  CPY [editor:unknownfieldpath,h5plib_v126],[editor:unknownfieldpath,h5plib_v127]
  CPY [editor:uploadinstructionstitle,h5plib_v126],[editor:uploadinstructionstitle,h5plib_v127]
  CPY [editor:uploadplaceholder,h5plib_v126],[editor:uploadplaceholder,h5plib_v127]
  CPY [editor:uploadsuccess,h5plib_v126],[editor:uploadsuccess,h5plib_v127]
  CPY [editor:uploadtablabel,h5plib_v126],[editor:uploadtablabel,h5plib_v127]
  CPY [editor:uploadvideotitle,h5plib_v126],[editor:uploadvideotitle,h5plib_v127]
  CPY [editor:uploading,h5plib_v126],[editor:uploading,h5plib_v127]
  CPY [editor:uploadingthrobber,h5plib_v126],[editor:uploadingthrobber,h5plib_v127]
  CPY [editor:usedforsearchingreportsandcopyrightinformation,h5plib_v126],[editor:usedforsearchingreportsandcopyrightinformation,h5plib_v127]
  CPY [editor:videoquality,h5plib_v126],[editor:videoquality,h5plib_v127]
  CPY [editor:videoqualitydefaultlabel,h5plib_v126],[editor:videoqualitydefaultlabel,h5plib_v127]
  CPY [editor:videoqualitydescription,h5plib_v126],[editor:videoqualitydescription,h5plib_v127]
  CPY [editor:warningchangebrowsingtoseeresults,h5plib_v126],[editor:warningchangebrowsingtoseeresults,h5plib_v127]
  CPY [editor:warningnocontenttypesinstalled,h5plib_v126],[editor:warningnocontenttypesinstalled,h5plib_v127]
  CPY [editor:warningupdateavailablebody,h5plib_v126],[editor:warningupdateavailablebody,h5plib_v127]
  CPY [editor:warningupdateavailabletitle,h5plib_v126],[editor:warningupdateavailabletitle,h5plib_v127]
  CPY [editor:width,h5plib_v126],[editor:width,h5plib_v127]
AMOS END
2024-09-26 10:35:25 +02:00
Jun Pataleta 81e23f4c02 Merge branch 'MDL-83263-404' of https://github.com/mihailges/moodle into MOODLE_404_STABLE 2024-09-26 16:28:47 +08:00
Michael Pound d8a9c0b987 MDL-79288 block_accessreview: Improve heatmap colour contrast. 2024-09-26 08:10:53 +00:00
Andrew Nicols a89faaf6e5 MDL-83253 core: Ignore invalid components for deprecated cap info
When checking for deprecated capabilty info, if a component is invalid,
skip loading of that component.
2024-09-26 15:17:40 +08:00
Huong Nguyen 881d5fb544 Merge branch 'MDL-62640-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-09-26 11:07:20 +07:00
Cameron Ball 3f8ed2a39c MDL-82298 navigation: Update behat tests for theme_classic 2024-09-26 11:14:53 +08:00
Jun Pataleta e1f3a16764 Merge branch 'MDL-83235-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-26 09:25:41 +08:00
Sara Arjona 8cb9876cf8 Merge branch 'MDL-83173-404' of https://github.com/stevandoMoodle/moodle into MOODLE_404_STABLE 2024-09-25 17:11:36 +02:00
Andrew Nicols 24dadc7a7f Merge branch 'MDL-82298-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-09-25 22:55:25 +08:00
Andrew Nicols 1cc03ca6b9 MDL-82298 navigation: Update behat tests 2024-09-25 22:38:20 +08:00
Karjun Loong 35fd32ffb4 MDL-82298 navigation: Add behat tests for secondary menu navigation 2024-09-25 22:38:20 +08:00
Jose 5a010c604d MDL-82298 navigation: Add setting data-disableactive on moremenu items
This setting will avoid conflicts between checkmark and
bfcache. The removed function added as part of the MDL-77732
is no longer required as the behaviour on the menu items (including the
secondary navigation) is not altered anymore by the menuItemHelper function
(menu_navigation file).
2024-09-25 22:38:19 +08:00
Mihail Geshoski a646166319 MDL-83263 grade: Handle undefined array key on grade override revert 2024-09-25 17:27:13 +08:00
Huong Nguyen 6d65eb3a1f Merge branch 'MDL-72856-M404' of https://github.com/michael-milette/moodle into MOODLE_404_STABLE 2024-09-25 08:58:20 +07:00
Sara Arjona 9a19ddfef4 weekly release 4.4.3+ 2024-09-24 16:51:58 +02:00
Stevani Andolo ffaed1fc50 MDL-83173 course: Fixed overlaps courses cards three dots 2024-09-24 09:51:59 +08:00
Shamim Rezaie 2c111a05ea Merge branch 'MDL-77625_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-09-24 02:53:19 +10:00
Bas Brands e2712c4065 MDL-70180 theme_boost: Allow form autoselect modal overflow
Co-authored-by: Mikel Martín <mikel@moodle.com>
2024-09-23 15:07:34 +02:00
Paul Holden 6865cf828b MDL-83235 qbank_columnsortorder: correct config retrieval ordering.
There is a unique index on plugin/name, so having a trailing order
clause on value would produce no effect. We also cannot order by
CLOB fields on Oracle, lest it complain loudly.
2024-09-23 08:56:38 +01:00
meirzamoodle 3202109780 MDL-62640 environment: Remove the deprecated slash argument check 2024-09-23 13:04:30 +07:00
Sara Arjona 0cd33e81ce Merge branch 'MDL-81612_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-09-23 07:36:18 +02:00
Huong Nguyen f5f2e79a72 Merge branch 'MDL-83204-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-09-23 11:12:45 +07:00
Paul Holden 4a4a42cdce MDL-82580 report_log: preserve filter by individual user. 2024-09-20 20:54:15 +01:00
Paul Holden c36fe51c48 MDL-82581 mod_label: avoid overflowing length of label name. 2024-09-20 19:26:56 +01:00
Sara Arjona 11fc78ed62 weekly release 4.4.3+ 2024-09-20 16:36:04 +02:00
Sara Arjona a635c64779 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-09-20 16:35:58 +02:00
Ilya Tregubov ff4f52ddcf Merge branch 'MDL-82663-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-20 10:17:24 +08:00
Huong Nguyen 3342532dfa Merge branch 'MDL-82740-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-09-20 08:44:20 +07:00
Ilya Tregubov 931ac8545a Merge branch 'MDL-74188-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-20 09:39:37 +08:00
Ilya Tregubov 4eed515242 Merge branch 'MDL-82488-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-20 09:25:13 +08:00
Sara Arjona 32162a7fe4 Merge branch 'MDL-83050-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-09-19 17:06:05 +02:00
Tim Hunt bc8b2d8b63 MDL-81612 assign: show current value when editing a student's extension
Also, if there is not currently an extension set, the set extension form
will default to whatever is the latest out of the due date, the cut-off date
and midnight tonight (in the server time-zone).
2024-09-19 16:02:12 +01:00
Tim Hunt ba94804e81 MDL-81612 assign: test generation of extensions
Also, some other improvements.

* In Behat you can now use either idnumber of name to identify an
  assignment you are generating things for.
* create_submission generator methods now wants the cmid in $data['cmid']
  not the confusingly named 'assignid'. The old name is accepted, but
  generates a debugging warning. (That will fail the test, but in a way
  that explains how to fix it.)
2024-09-19 16:02:12 +01:00
Jun Pataleta ad913b65ee MDL-82740 core: Check for monologo icons in theme overrides 2024-09-19 20:48:48 +08:00
Paul Holden 90fd319190 MDL-82813 group: correctly format group description property. 2024-09-19 13:44:58 +01:00
Laurent David 289f2b427a MDL-83050 core_courseformat: Fix index highlight for collapsed section
* Collapsed sections on course index is not highlighting the correct
element when scrolling over subelements.
2024-09-19 12:01:02 +02:00
Mikel Martín ae73896f2b MDL-83204 tool_policy: Fix footer link spacing 2024-09-19 11:28:37 +02:00
Mikel Martín 42be864b55 MDL-83204 tool_mobile: Fix footer link spacing 2024-09-19 11:28:36 +02:00
Huong Nguyen 7fbbd368f6 Merge branch 'MDL-83199-404' of https://github.com/mihailges/moodle into MOODLE_404_STABLE 2024-09-19 15:40:30 +07:00
Ilya Tregubov 003d6ee817 Merge branch 'MDL-82909-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-19 15:08:32 +08:00
Ilya Tregubov 084dbef995 Merge branch 'MDL-82494-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-19 14:05:19 +08:00
Andrew Nicols ecceaffca1 MDL-83205 core: Ensure that redis lock expiry is valid
PHP allows the specification of invalid values for `max_execution_time`,
including negative values. These should be normalised the same way that
an empty (unlimited) value is.
2024-09-19 13:36:52 +08:00
Ilya Tregubov b0600e2954 Merge branch 'MDL-81987_404_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_404_STABLE 2024-09-19 12:50:33 +08:00
Huong Nguyen 0df6fd6b43 Merge branch 'MDL-83122-404' of https://github.com/safatshahin/moodle into MOODLE_404_STABLE 2024-09-19 10:39:35 +07:00
Jun Pataleta e66e5955e7 MDL-79628 core: Add upgrade notes for the navigation_cache changes 2024-09-19 11:11:31 +08:00
Jun Pataleta d73ad2127e Merge branch 'MDL-79628-move-navcache-to-muc-feature-MOODLE_404_STABLE' of https://github.com/rajandangi/moodle into MOODLE_404_STABLE 2024-09-19 11:10:06 +08:00
Jun Pataleta fdb513461b Merge branch 'MDL-80965-404-behat-fix' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-09-19 08:41:05 +08:00
AMOS bot 0e69b95fbb Automatically generated installer lang files 2024-09-19 00:09:33 +00:00
Simey Lameze 3792869ef7 MDL-80965 behat: remove wrong tag from step 2024-09-19 07:49:22 +08:00
Sara Arjona a290cc77a3 Merge branch 'MDL-74917-404-wrong-post-actions-list-in-statslib' of https://github.com/melanietreitinger/moodle into MOODLE_404_STABLE 2024-09-18 17:19:14 +02:00
Mihail Geshoski 5ec04e7808 MDL-83199 core: Adjust the padding for the bulk actions content area 2024-09-18 17:30:22 +08:00
Huong Nguyen f129cbbe62 Merge branch 'MDL-81278-404' of https://github.com/mickhawkins/moodle into MOODLE_404_STABLE 2024-09-18 16:08:46 +07:00
Ilya Tregubov 9317b4d86e Merge branch 'MDL-80965-404' of https://github.com/ilyatregubov/moodle into MOODLE_404_STABLE 2024-09-18 15:33:21 +08:00
Ilya Tregubov 86a71669ee MDL-80965 mod_quiz: Code style fixes. 2024-09-18 15:29:49 +08:00
Luca Bösch 76d79b57c4 MDL-80965 mod_quiz: Put back random q category on the question page. 2024-09-18 15:29:49 +08:00
AMOS bot 6aa7832084 Automatically generated installer lang files 2024-09-18 00:07:44 +00:00
Paul Holden fbc8123eb4 MDL-82973 tool_usertours: add missing filelib library require. 2024-09-17 16:49:14 +01:00
Sara Arjona a4dd8fedf0 Merge branch 'MDL-82389-404' of https://github.com/ssj365/moodle into MOODLE_404_STABLE 2024-09-17 17:31:47 +02:00
Julien fc1e46db15 MDL-77625 question restore: test restoring a quiz into a course twice
The verifies that the previous two commits are doing the right thing.
2024-09-17 16:17:36 +01:00
Tim Hunt 26af25312c MDL-77625 question restore: fix restore of existing questions
Continuing from the last commit, the code to restore question
bank entries, versions and questions, was not taking note of
whether the first stage had indentified questions that did not
need to be restored. This is tricky, but the mapping can only be
worked out for questions, but in the backup file, the questions are
inside the question_bank_entries, and versions, so we encounter
those first.

Now, the code just saves the QBE and QV when it encounters them,
and then does all the processing when it gets to the question,
correctly taking note of whether each question should be restored or not.
In cases where a particular question does not need to be restored,
we still set up the corresponding mappings.
2024-09-17 16:17:35 +01:00
Tim Hunt 64c54d9510 MDL-77625 question restore: fix pre-parsing of questions
Restore of categories and questions happens in several phases.
First, the file is scanned for which questions and categories
it contains, to work out if these are new questions which need
to be restored, or if they already exist in the database in a
place that can be used.

That code had not been updated to cope with the Moodle 4.0
versioning changes, so it is updated here (while still keeping
the code to cope with the old backup format.)
2024-09-17 16:17:34 +01:00
Sara Arjona 62c4f8a76c weekly release 4.4.3+ 2024-09-17 15:09:23 +02:00
Safat 237a803050 MDL-83122 core_communication: Fix exception for delete user hook 2024-09-17 16:08:06 +10:00
sam marshall 32ac490e77 MDL-83163 core_course: Fresh install fails if dependency on format
If any plugin had dependency on a course format, Moodle fresh install
showed dependency errors (even though course format exists).
2024-09-16 15:44:25 +01:00
Jun Pataleta 54b01d1943 Merge branch 'MDL-83127-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-09-16 15:59:01 +08:00
Sara Arjona 8069aeec1e Merge branch 'MDL-82875_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-09-16 09:44:07 +02:00
Michael Hawkins e715380d4b MDL-81278 core: Update security.txt expiry 2024-09-16 14:50:32 +08:00
Paul Holden 20c681e5f8 MDL-81157 files: consistent repository button styling on small screen. 2024-09-15 11:13:03 +01:00
Paul Holden cfcaf488be MDL-82909 theme_boost: ensure we target immediate loading icon only.
Ignoring those used within inplace editable components in the table.
2024-09-15 11:11:44 +01:00
Paul Holden 2a65efd9a3 MDL-82909 javascript: replace custom loading icon with existing module. 2024-09-15 11:11:44 +01:00
Tim Hunt 46748714da MDL-82875 question export: test for not exporting hidden questions 2024-09-13 16:04:16 +01:00
Vithusha Kethiri 846e242aec MDL-82875 qbank_export: Fix removing hidden questions from the export 2024-09-13 16:04:16 +01:00
Sara Arjona 49d8babe8b weekly release 4.4.3+ 2024-09-13 13:20:49 +02:00
Sara Arjona 5102249c52 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-09-13 13:20:45 +02:00
Luca Bösch 37f5141f60 MDL-83127 qtype_ordering: handle NULL in question_hints table entries. 2024-09-13 12:07:57 +02:00
Paul Holden b9e73bd65e MDL-83094 customfield: align persistent definitions with DB schema.
Where the field/category tables allow nulls, the definition within
each corresponding persistent should match.
2024-09-12 17:36:59 +01:00
Melanie Treitinger 4a0cb6e1b5 MDL-74917 core: fix typo in function stats_get_post_actions
Fix phpunit test and apply coding guidelines.
2024-09-12 10:53:16 +02:00
Paul Holden bfe4d189cb MDL-82602 webservice: correct config link to enable for mobile. 2024-09-12 08:05:06 +01:00
Jun Pataleta 4058934644 Merge branch 'mdl-83046_404' of https://github.com/james-cnz/moodle into MOODLE_404_STABLE 2024-09-12 13:40:33 +08:00
Huong Nguyen ca8e5915e6 Merge branch 'MDL-82545_404_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_404_STABLE 2024-09-12 10:46:52 +07:00
Huong Nguyen 2247cd68a4 Merge branch 'MDL-82959-MOODLE_404_STABLE' of https://github.com/sh-csg/moodle into MOODLE_404_STABLE 2024-09-12 10:35:11 +07:00
james-cnz 36c8faede8 MDL-83046 course: Add non-delegated sections before delegated ones 2024-09-12 12:11:31 +12:00
AMOS bot 31e1e17590 Automatically generated installer lang files 2024-09-12 00:07:43 +00:00
Shamiso.Jaravaza d79acfdd59 MDL-82389 mod_bigbluebuttonbn: Fix disablenotes 2024-09-11 09:34:34 -06:00
Huong Nguyen bc1324af4d Merge branch 'MDL-68676-404' of https://github.com/rhell4/moodle into MOODLE_404_STABLE 2024-09-11 15:50:10 +07:00
Huong Nguyen 367d1c7cb7 Merge branch 'MDL-75692-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-09-11 15:45:21 +07:00
Jun Pataleta 8346e2b912 Merge branch 'MDL-82270-extra_backslash-404' of https://github.com/mathbruyen/moodle into MOODLE_404_STABLE 2024-09-11 15:53:46 +08:00
Jun Pataleta 09274be2e0 Merge branch 'MDL-82492-404' of https://github.com/vladaskidanovas/moodle into MOODLE_404_STABLE 2024-09-11 15:36:45 +08:00
Huong Nguyen d8f262e0b5 Merge branch 'MDL-79020-404' of https://github.com/ferranrecio/moodle into MOODLE_404_STABLE 2024-09-11 09:19:22 +07:00
AMOS bot 692f8031bf Automatically generated installer lang files 2024-09-11 00:07:49 +00:00
Huong Nguyen f86b97fdd6 weekly release 4.4.3+ 2024-09-10 20:03:01 +07:00
Laurent David faf0e0654d MDL-75692 core_h5p: Debounce resize events
* Make sure that we don't call the resize event too often to
avoid infinite loop when content is auto resizing (fonts for example)
2024-09-10 11:32:00 +02:00
Huong Nguyen bc3050ad0c Merge branch 'MDL-83047-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-09-10 10:47:24 +07:00
Huong Nguyen 2412b1278b Merge branch 'MDL-83038-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-10 09:34:28 +07:00
Jun Pataleta cb6904b002 MDL-83047 theme_boost: Add upgrade note for theme plugins 2024-09-10 10:33:30 +08:00
Sara Arjona 2cf32c40e9 Merge branch 'MDL-83037-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-09 17:21:59 +02:00
Jun Pataleta a4ee77a654 MDL-83047 theme_boost: Apply background colour only on select layouts
* Apply the styling of `background-color` for `.page-header-headings`
only in the maintenance and secure layouts.
2024-09-09 17:01:11 +08:00
Huong Nguyen 15e04d6651 Merge branch 'MDL-82860-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-09-09 14:32:20 +07:00
meirzamoodle 8ccba0808b MDL-82860 atto_link: Set value as default to avoid unexpected behaviour 2024-09-09 08:11:56 +07:00
Jun Pataleta 9ecb8de2bb weekly release 4.4.3+ 2024-09-07 06:45:35 +08:00
Stefan Hanauska 851c6d00b6 MDL-82959 tool_recyclebin: Avoid null value for forcedsettings 2024-09-06 19:47:31 +02:00
Paul Holden 864bbf86db MDL-83038 mod_quiz: use dummy URL in quiz grading page external call. 2024-09-06 12:26:11 +01:00
Paul Holden 08127c83a7 MDL-83037 badges: ensure image is specified in Behat test generator. 2024-09-06 11:25:35 +01:00
ferranrecio c4f9163dc0 MDL-79020 core_courseformat: hide completion edit link in bulk edit 2024-09-06 11:11:16 +02:00
Jun Pataleta dfaa31d4f0 Merge branch 'MDL-63399-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-09-06 12:29:21 +08:00
Simey Lameze f62ef26f37 MDL-63399 behat: update existing tests to use the better download steps
Co-authored-by: Tim Hunt <T.J.Hunt@open.ac.uk>
2024-09-06 12:14:33 +08:00
Simey Lameze 3dc10958bc MDL-63399 behat: new steps to verify downloads
Co-authored-by: Tim Hunt <T.J.Hunt@open.ac.uk>
2024-09-06 12:06:44 +08:00
Huong Nguyen 7901350509 Merge branch 'MDL-82948-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-09-06 11:01:14 +07:00
Huong Nguyen 298810e993 Merge branch 'MDL-82677-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-09-06 10:50:55 +07:00
rajandangi 3c04cc40d0 MDL-79628 navigation: Refactor navigation_cache to use MUC 2024-09-06 09:44:47 +09:30
Huong Nguyen 125db05313 Merge branch 'MDL-80946_MOODLE_404_STABLE' of https://github.com/michaelkotlyar/moodle into MOODLE_404_STABLE 2024-09-05 15:53:59 +07:00
Michael Kotlyar c34b5f79cd MDL-80946 quizaccess_seb: Remove invalidkeys text if not using SEB. 2024-09-05 09:07:38 +01:00
Huong Nguyen e4b96893b8 Merge branch 'MDL-81909-404' of https://github.com/rezaies/moodle into MOODLE_404_STABLE 2024-09-05 14:49:53 +07:00
Shamim Rezaie 452d92d9bb MDL-81909 mod_assign: fix test_attempt_reopen_method_untilpass 2024-09-05 03:27:03 +10:00
Michael Milette e55e9974b8 MDL-72856 lib: Only inject one robots/noindex in head of Additional HTML 2024-09-04 12:32:01 -04:00
Sara Arjona fd5c2b3aa4 Merge branch 'MDL-82995_MOODLE_404_STABLE_feedback_broken_audio_video' of https://github.com/JordanKrauseDE/moodle into MOODLE_404_STABLE 2024-09-04 12:59:10 +02:00
JordanKrauseDE 1fd5899e70 MDL-82995 feedback: fixed audio and video width 2024-09-04 09:27:40 +02:00
Huong Nguyen b9a191dda8 Merge branch 'MDL-80225-404' of https://github.com/ssj365/moodle into MOODLE_404_STABLE 2024-09-04 09:30:04 +07:00
Paul Holden 89506cd08d MDL-80929 customfield: observe backup/restore settings to include. 2024-09-03 13:56:27 +01:00
Paul Holden e8c5f37306 MDL-80929 restore: consistent settings definition for custom fields. 2024-09-03 13:49:56 +01:00
Jun Pataleta 6a7b69a30a weekly release 4.4.3+ 2024-09-03 20:05:13 +08:00
Mathieu Bruyen ddbc161632 MDL-82270 tool_policy: fix guest policy template markup.
Remove extra backslash producing invalid markup in consent banner.
2024-09-03 09:47:28 +02:00
Jun Pataleta 4b6b859ca0 Merge branch 'MDL-82957-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-09-03 11:42:24 +08:00
Jun Pataleta 66896b275a Merge branch 'MDL-82804-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-03 10:32:18 +08:00
Jun Pataleta 2558c6a9b9 Merge branch 'MDL-82717-404' of https://github.com/liamgm/moodle into MOODLE_404_STABLE 2024-09-03 10:29:25 +08:00
Jun Pataleta 890f2e7c57 MDL-82255 editor_tiny: No need for extra styles for RTL 2024-09-02 16:55:53 +08:00
Jun Pataleta eb05d37e5b Merge branch 'MDL-82255-404' of https://github.com/raortegar/moodle into MOODLE_404_STABLE 2024-09-02 16:01:50 +08:00
Ilya Tregubov b85b5dd74e Merge branch 'MDL-82220-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-09-02 10:10:03 +08:00
Paul Holden 230831bc70 MDL-82494 user: correct profile field name formatting method.
Add optional `$escape` parameter to allow for unescaped return.
2024-08-30 09:48:08 +01:00
Paul Holden 60e11dc998 MDL-82488 customfield: allow for unescaped field formatted names.
Resolves double encoding of the same in Report builder editor.
2024-08-30 09:44:41 +01:00
Mikel Martín 88730f6a8d MDL-82957 course: Fix section bulk actions alignment 2024-08-30 09:14:19 +02:00
Huong Nguyen c1d466b911 Moodle release 4.4.3 2024-08-30 13:51:03 +07:00
Paul Holden cd69894e95 MDL-82804 badges: define no results notice inside report instances.
When doing so from calling code, the property is not persisted when
filtering/paging (or any AJAX interaction); instead, it should be
set from within the report instance itself.
2024-08-29 16:37:58 +01:00
Huong Nguyen 13561f5881 weekly release 4.4.2+ 2024-08-29 18:09:57 +07:00
Paul Holden c83eaf4066 MDL-82483 tag: update the max length constant to match schema. 2024-08-29 10:38:00 +01:00
Liam Moran e78fe25155 MDL-82717 enrol_lti: Make contextmembershipsurl property immutable
The contextmembershipsurl property on the nrsp_info object is itself
an object of type moodle_url so its getter should return a copy
of the moodle_url object instead of a reference to the class-internal
object. This commit adds a test for get_context_memberships_url and
updates the getter so the property is immutable.
2024-08-29 03:44:54 -05:00
Paul Holden a31041ef7b MDL-82365 mod_lesson: stricter equality checks of activity password. 2024-08-29 16:12:16 +08:00
Jun Pataleta 5f1db200b1 MDL-82948 theme_boost: Make <blockquote>'s border a bit darker 2024-08-29 16:04:31 +08:00
raortegar c5ef86c3bf MDL-82255 editor_tiny: Style blockquote in editor 2024-08-29 09:20:46 +02:00
Huong Nguyen 098013a01d Merge branch 'MDL-82718-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-29 11:08:46 +07:00
Huong Nguyen ec63b8f289 Merge branch 'MDL-82446-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-29 11:05:14 +07:00
Jun Pataleta b3cea552a2 Merge branch 'MDL-82651-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-08-29 11:59:35 +08:00
Jun Pataleta 9777b29452 Merge branch 'MDL-82802-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-29 11:40:00 +08:00
Ilya Tregubov 081dc58c6f MDL-82882 mod_quiz: Code style fixes 2024-08-29 11:28:03 +08:00
Ilya Tregubov a650045e23 Merge branch 'MDL-82882_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-08-29 11:24:44 +08:00
Huong Nguyen 1396072aa3 MDL-82790 filter_tidy: Fix coding style 2024-08-29 10:19:31 +07:00
Huong Nguyen 8864cfdcb8 Merge branch 'MDL-82790-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-08-29 10:04:55 +07:00
Ilya Tregubov 727cedf0be Merge branch 'MDL-82810_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-08-29 10:57:13 +08:00
Huong Nguyen d45bc875af Merge branch 'MDL-82898-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-08-29 09:50:14 +07:00
Paul Holden d09d4730d9 MDL-76962 auth_oauth2: users can only delete their own linked logins. 2024-08-29 10:32:16 +08:00
Stefan Hanauska faac67e2ea MDL-80974 enrol: Set category context for enrol form 2024-08-28 12:33:40 +02:00
Simey Lameze 57fcc42a49 MDL-82651 behat: remove unnecessary steps 2024-08-28 13:51:24 +08:00
Simey Lameze be680afe3e MDL-82651 behat: wait for button to exist before clicking 2024-08-28 13:51:23 +08:00
Angelia Dela Cruz e1d69f2347 MDL-82898 enrol_self: Behat to test student enrolment using key 2024-08-28 11:34:55 +08:00
Paul Holden 8caac3da44 MDL-82663 user: fix check for current user removing own enrolment.
We only need to remove the current user from selection if they were
ever part of the selection originally.
2024-08-27 16:55:20 +01:00
Paul Holden c0a69e036e MDL-82718 tiny_media: fix error string loading for invalid image. 2024-08-27 09:21:38 +01:00
Marina Glancy aca6d79b91 MDL-82567 core: Add has_capability method
Co-authored-by: David Woloszyn <david.woloszyn@moodle.com>
Co-authored-by: Jun Pataleta <jun@moodle.com>
2024-08-26 04:01:20 +00:00
Huong Nguyen a2c405ba5f MDL-69684 session_redis: Improve upgrade note 2024-08-26 10:57:52 +07:00
Huong Nguyen f200548361 MDL-69684 session_redis: Improve PHPUnit test 2024-08-26 10:57:29 +07:00
Huong Nguyen 1ff829a4f0 Merge branch 'MDL-69684-M404_its-possible-to-hold-a-redis-session-lock-forever' of https://github.com/ziegenberg/moodle into MOODLE_404_STABLE 2024-08-26 10:54:10 +07:00
Shamim Rezaie 607cf7fff1 Merge branch 'MDL-82006-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-24 16:21:26 +10:00
Sara Arjona f714dbee87 weekly release 4.4.2+ 2024-08-23 16:03:51 +02:00
Tim Hunt 72ba0759fc MDL-82882 quiz: add before/after for attempt_summary_information 2024-08-23 12:53:37 +01:00
Jake Dallimore 0ada05c99f Merge branch 'MDL-82787-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-08-23 11:51:23 +08:00
Jake Dallimore a5c0090669 Merge branch 'MDL-82863-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-08-23 10:43:37 +08:00
Jun Pataleta 31d7689f7f Merge branch 'MDL-79215-MOODLE_404_STABLE' of https://github.com/MichaelReyesCatcan/moodle into MOODLE_404_STABLE 2024-08-22 23:57:30 +08:00
KarlReyesCatalyst 86a5027502 MDL-79215 lib/graphlib: Typecasting round() function to INT. 2024-08-22 10:20:47 -04:00
Sara Arjona 36002cf5e7 MDL-82863 tool_generator: Add missing BEHAT_TEST constant
The tool_generator now defines the BEHAT_TEST constant to ensure
that Behat generators are consistently utilized.
2024-08-22 13:23:46 +02:00
Mark Johnson 67674462dd MDL-82545 gradereport_grader: Limit grades per page
This replaces the limit on the number of students per page with a number
of grades per page, to take into account the number of grade items on a
course.
2024-08-22 11:04:20 +01:00
Shamiso.Jaravaza f354ba61e6 MDL-80225 mod_bigbluebuttonbn: Fix missing recordings 2024-08-21 21:02:54 -06:00
Huong Nguyen 778a1c3546 Merge branch 'MDL-82841-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-08-22 08:43:37 +07:00
Sara Arjona 19666984de Merge branch 'MDL-82695_404_STABLE' of https://github.com/andrewhancox/moodle into MOODLE_404_STABLE 2024-08-21 16:07:47 +02:00
Sara Arjona 268b9dadfd Merge branch 'MDL-82655-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-08-21 15:54:19 +02:00
Andrew Hancox e3b1909b2b MDL-82695 qtype_multianswer: Fix div by zero in compute_final_grade 2024-08-21 13:47:18 +01:00
Angelia Dela Cruz da1346752d MDL-82841 mod_workshop: Behat for submissions with set # of attachments 2024-08-21 19:00:23 +08:00
Huong Nguyen 50bbd580ac Merge branch 'MDL-82110-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-08-21 17:43:40 +07:00
Angelia Dela Cruz 6367ed9300 MDL-82655 mod_workshop: Behat test for manual and random allocation 2024-08-21 17:27:14 +08:00
Jun Pataleta 8684982cfe Merge branch 'MDL-78785_404_toolbrickfield_rgbcolorcontrasts' of https://github.com/brickfield/moodle into MOODLE_404_STABLE 2024-08-21 11:49:34 +08:00
Andrew Nicols 59a80f598b MDL-82787 behat: Correct stop of webdriver on failure 2024-08-21 08:46:07 +08:00
Sara Arjona 181f00f36e weekly release 4.4.2+ 2024-08-20 20:15:56 +02:00
Sara Arjona 38aaac7af6 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-08-20 20:15:53 +02:00
Justus Dieckmann a7f5c1eb05 MDL-82838 tool_mfa: Prevent accidental resubmission of token 2024-08-20 16:44:24 +02:00
Andrew Nicols fb7ef63350 MDL-82110 core: Remove debugging for unmigrated hooks in unit tests 2024-08-20 20:28:49 +08:00
Andrew Nicols 2d51edb610 MDL-82790 filter_tidy: Disable the tidy filter
This behaves very poorly and for most users has been silently not
working for many years.

When we stopped it from silently failing we discovered a number of
issues that it causes, for example:
- MDL-61117
- MDL-82790
2024-08-20 20:15:06 +08:00
vlad.kidanov 1ba60572b3 MDL-82492 gradereport_grader: Grader report HTML output optimization 2024-08-20 10:34:29 +01:00
Sara Arjona 24e196b63d Merge branch 'MDL-82455-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-19 16:45:58 +02:00
AMOS bot 944e9d5fdc Automatically generated installer lang files 2024-08-19 00:07:46 +00:00
Karen Holland b28424638c MDL-78785 tool_brickfield: Processing rgb & rgba color contrasts
Including rgb(), rgba() processing for colour contrast checking.
  Including review requests :void and @covers for phpunit testing.
2024-08-16 17:33:47 +00:00
Tim Hunt d580889967 MDL-82810 question bank: stop action menu from getting truncated 2024-08-16 13:35:50 +01:00
Paul Holden c804789bbb MDL-74188 notes: consistent formatting of text content.
Each method of adding notes, either via UI or external service (via
course participant actions), defined the format of the content
different from one another. Neither of those formats were correct.
2024-08-16 10:20:01 +01:00
Paul Holden ddd99c03d2 MDL-82220 group: check valid mapping when restoring custom fields. 2024-08-16 10:09:04 +01:00
Paul Holden 8aa860d7b7 MDL-82220 backup: ensure correct group/ing custom fields are included.
We should include only the custom field values that belong to those
groups and/or groupings that are being backed up.
2024-08-16 10:09:04 +01:00
Huong Nguyen d559cde424 weekly release 4.4.2+ 2024-08-16 08:38:37 +07:00
Paul Holden fafeeda7e1 MDL-82455 badges: link report recipients count to appropriate page. 2024-08-15 21:40:41 +01:00
Paul Holden ef70a58aed MDL-82006 reportbuilder: move filter Behat scenarios inside component. 2024-08-15 13:15:26 +01:00
Paul Holden d82ea0f211 MDL-82802 tool_xmldb: allow numeric characters in table names. 2024-08-15 12:00:40 +01:00
Huong Nguyen 96cf22c819 Merge branch 'MDL-82724-MOODLE_404_STABLE' of https://github.com/phmemmel/moodle into MOODLE_404_STABLE 2024-08-15 10:59:48 +07:00
Jun Pataleta 833b48fc75 Merge branch 'MDL-82782-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-08-15 11:51:57 +08:00
Jun Pataleta a1b390bd4f Merge branch 'MDL-82798-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-08-15 11:13:54 +08:00
Huong Nguyen cc9b202deb Merge branch 'MDL-82758-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-08-15 09:37:47 +07:00
Huong Nguyen f2e657fc42 MDL-82798 qtype_ddmarker: Fix Behat failure 2024-08-15 09:17:13 +07:00
Jun Pataleta d94e170007 Merge branch 'MDL-82792-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-08-15 10:14:49 +08:00
Jun Pataleta d430695693 Merge branch 'MDL-82668-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-08-14 23:26:32 +08:00
Jun Pataleta 36030e92d7 Merge branch 'MDL-82747-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-08-14 23:04:52 +08:00
Daniel Ziegenberg 0d0cdaeecf MDL-69684 session: Redis session locks set with expiry atomically
Co-Authored-By: Jamie Chapman-Brown <jamie.chapman-brown@agilicus.com>
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2024-08-14 17:03:17 +02:00
Andrew Nicols dc9b44f531 MDL-82747 core: Register composer autoload files
Unfortunately PHP does not provide any means to autoload the files that
a functions is located in, even if they are in an namespace.

To work around this, Composer makes use of an `autoload.files` section
in the `composer.json` file. Shortly after the Composer autoloader is
registered with the `spl_autoload_register` call it also includes any
files listed in this section.

Moodle does not do this and really we should be doing so.

This change adds a section to the autoloader registration method which
loads all of the files defined in any third-party library included in
our `lib` directory which contains any `composer.json` file with such a
stanza.
2024-08-14 21:59:53 +08:00
Andrew Nicols 2243d1b395 MDL-82747 core: Provide a standard way to register the Autoloader 2024-08-14 21:59:52 +08:00
Andrew Nicols c0a2c4bfd8 MDL-82782 behat: Support runtime scaling of Behat windows 2024-08-14 21:48:44 +08:00
Sara Arjona 49a95e4cef MDL-82792 h5p: Fix random behat failures
We've started seeing various failures in Firefox and Classic.
Increasing the default window size fixes them.
2024-08-14 12:18:23 +02:00
Andrew Nicols d1d01d2cdb MDL-82668 core: Move phpstorm meta to di.php 2024-08-14 16:32:40 +08:00
Daniil Fajnberg cef371bcac MDL-82668 core: Use a .phpstorm.meta.php directory instead of a file
Allow developers to add their own metadata overrides
2024-08-14 16:32:40 +08:00
Sara Arjona 60dafdf7c1 Merge branch 'mdl-82214-m404' of https://github.com/NeillM/moodle into MOODLE_404_STABLE 2024-08-13 16:08:14 +02:00
Sara Arjona 9e351777b1 Merge branch 'MDL-82502-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-13 13:14:58 +02:00
Ilya Tregubov 0620ca406c Merge branch 'MDL-64675-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-13 10:44:17 +08:00
Ilya Tregubov cc2edf3b8c Moodle release 4.4.2 2024-08-10 14:54:49 +08:00
Jun Pataleta 7376b6deca MDL-82758 gha: Remove reference to the master branch 2024-08-09 16:15:03 +08:00
Jun Pataleta 7052d36f7c Merge branch 'MDL-82599-404-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_404_STABLE 2024-08-09 11:19:01 +08:00
Ilya Tregubov 04479a6a3c weekly release 4.4.1+ 2024-08-09 09:34:20 +08:00
Huong Nguyen 3521b24e51 MDL-82745 filter_tex: Improve PHPUnit test 2024-08-08 21:03:58 +08:00
Mark Johnson b5519852fc MDL-81987 redis: Set connection and read timeouts to 10 seconds
This allows the site to continue operating in case of degraded
performance, rather than throwing exceptions.
2024-08-08 13:17:03 +01:00
Michael Hawkins bdfa441f00 MDL-82745 filter_tex: Improve filter deny list 2024-08-08 11:40:11 +07:00
Michael Hawkins 6728d1ccc0 MDL-82576 qtype_calculated: Improve formula regexes 2024-08-08 11:11:28 +07:00
Ilya Tregubov 40d1da51bb Merge branch 'MDL-82608-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-08 11:09:24 +08:00
Ilya Tregubov c52869afbe Merge branch 'MDL-82605-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-08 11:03:30 +08:00
Safat 18d4531ad4 MDL-82395 tool_xmldb: Table layout update 2024-08-08 10:00:43 +07:00
Jun Pataleta 62aab40860 Merge branch 'MDL-82560-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-08-08 10:45:01 +08:00
Paul Holden b4525ba984 MDL-79373 admin: ensure all current password configs are defined.
Ensure the admin preset export tool has an accurate record of each,
to be observed as sensitive settings when creating an export.
2024-08-08 09:22:20 +07:00
Angelia Dela Cruz 7b16b52ffe MDL-82560 mod_forum: Test that students can only start one discussion 2024-08-08 10:22:17 +08:00
Andrew Nicols ff93557b40 Merge branch 'MDL-80593-404-alt' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-08-08 10:19:43 +08:00
Huong Nguyen 48e8e6f434 Merge branch 'MDL-82177_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-08-08 09:11:00 +07:00
Huong Nguyen ecc5f367ef Merge branch 'MDL-82592_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-08-08 09:02:09 +07:00
Huong Nguyen 850b4a5f56 Merge branch 'MDL-82669-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-08 08:58:43 +07:00
Jun Pataleta 91eae783fc Merge branch 'MDL-77784-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-08 09:56:07 +08:00
Huong Nguyen 912817f097 Merge branch 'mdl-826620-44' of https://github.com/matthewhilton/moodle into MOODLE_404_STABLE 2024-08-08 08:41:25 +07:00
Ilya Tregubov 36412a5fea Merge branch 'MDL-82209-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-08 09:22:12 +08:00
Ilya Tregubov a7f19c9072 Merge branch 'MDL-82525-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-08 08:27:15 +08:00
Ilya Tregubov 4bc773ad03 Merge branch 'MDL-82208-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-08 08:18:04 +08:00
Paul Holden cb05767ce1 MDL-64675 mod_feedback: better detection of last page break element.
Inform user when a page break item cannot be added.
2024-08-07 16:57:44 +01:00
Jun Pataleta 4973da2768 Merge branch 'MOODLE_404_MDL-82518' of https://github.com/danielneis/moodle into MOODLE_404_STABLE 2024-08-07 17:12:08 +08:00
Paul Holden aa145e2669 MDL-82633 mod_quiz: filter user visible overrides in external methods. 2024-08-07 16:08:16 +08:00
Paul Holden bdc4367460 MDL-82633 mod_quiz: re-factor visibility check for overrides. 2024-08-07 16:08:16 +08:00
Ilya Tregubov fc467246b4 Merge branch 'MDL-81830-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-07 15:28:02 +08:00
Paul Holden ee502bf6b5 MDL-81394 restore: format backup file metadata details safely. 2024-08-07 14:04:30 +08:00
Ilya Tregubov ee6e605770 MDL-79541 gradereport_user: Fix indentation in Behat. 2024-08-07 04:13:49 +00:00
Huong Nguyen 2d953eb291 MDL-81718 core_grades: Fix Behat failures 2024-08-07 04:13:49 +00:00
raortegar 6e7faf5854 MDL-81718 core: Improve localstorage validation 2024-08-07 04:13:49 +00:00
Paul Holden 50569e6f4a MDL-82558 h5p: escape template error/exception content. 2024-08-07 04:13:49 +00:00
Paul Holden 23a61db0f0 MDL-82392 blocks: consistent cleaning of block instance names. 2024-08-07 04:13:49 +00:00
Paul Holden d3d580671a MDL-82261 mod_feedback: ensure only non-respondents can be messaged. 2024-08-07 04:13:49 +00:00
Paul Holden 8304649791 MDL-82390 badges: correct context check when deleting badges. 2024-08-07 04:13:49 +00:00
meirzamoodle c8c3b17cd2 MDL-82136 curl: Send credentials to redirect URL if allowed
Curl has the option CURLOPT_UNRESTRICTED_AUTH. If true, curl will send
the credentials to a different host. If false, they will not be sent.

CURLOPT_UNRESTRICTED_AUTH can only work if the CURLOPT_FOLLOWLOCATION
option is true. The filelib forces the CURLOPT_FOLLOWLOCATION option
to be false, because all redirects are emulated at the PHP level. So,
in this case, the CURLOPT_UNRESTRICTED_AUTH option is only being used
in our logic and will not work as you might expect it to.

This patch works almost the same as CURLOPT_UNRESTRICTED_AUTH in ideal
conditions. It will check whether the host is different. If so, the
system will check what value CURLOPT_UNRESTRICTED_AUTH has. If it is
not specified, then by default, it will be false. If false, then
credentials will not be sent.
2024-08-07 04:13:49 +00:00
Paul Holden 3e5569a61a MDL-82262 mod_feedback: fix broken bulk message sesskey checks. 2024-08-07 04:13:49 +00:00
Paul Holden 80782f8907 MDL-64984 mod_glossary: capability check when restoring global type. 2024-08-07 04:13:49 +00:00
David Woloszyn 51af50ade5 MDL-81951 communication_matrix: Fix suspended users ignored bug 2024-08-07 04:13:49 +00:00
David Woloszyn b683a38423 MDL-81951 communication_matrix: New trait for power levels
A more reliable way of obtaining room power levels is now used in the
new trait get_room_power_levels_v3. This makes
get_room_powerlevels_from_sync_v3 less needed, but not necessarily
redundant. The names of the containing methods have been adjusted to
make better sense of which trait they belong to.
2024-08-07 04:13:49 +00:00
Ilya Tregubov 54dc1112cb MDL-79541 core_grades: Add missing user info to search services.
Seems just fullname is not enough. So added all name fields.
2024-08-07 04:13:49 +00:00
Ilya Tregubov 421c0608e8 MDL-79541 core_grades: Hidden user fields check for search.
If some user profile fields are hidden on some grade reports
users without permission were able to see those.
2024-08-07 04:13:49 +00:00
Huong Nguyen 7678c3f41c Merge branch 'MDL-82643-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-07 10:45:41 +07:00
Huong Nguyen a3573087d1 Merge branch 'MDL-82611-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-07 10:25:18 +07:00
Huong Nguyen f809e209e3 Merge branch 'MDL-82620-404' of https://github.com/ericmerrill/moodle into MOODLE_404_STABLE 2024-08-07 10:20:38 +07:00
Jun Pataleta 59a377abbe Merge branch 'MDL-82606_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-08-07 11:12:05 +08:00
Philipp Memmel ac7cecfb37 MDL-82724 editor_tiny: Harden check for quicktoolbar and contextmenu 2024-08-06 16:47:22 +02:00
Tim Hunt 83a24b0e9f MDL-82606 filterlib: pass a row limit to recordset for performance
On Postgres, at least, get_recordset_sql performs signficantly worse
if you don't pass a limit. So, we add a limit to the query, but one
that in enormously too large, so it should never have an effect.
(And, there is code to check we never hit the limit, to avoid subtle bugs.)
2024-08-06 10:47:24 +01:00
Jun Pataleta 7ffbd04d35 Merge branch 'MDL-82344-404' of https://github.com/snake/moodle into MOODLE_404_STABLE 2024-08-06 17:26:44 +08:00
Jun Pataleta 19284518d1 Merge branch 'MDL-79568-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-08-06 17:20:26 +08:00
Neill Magill cb8578e93f MDL-82214 admin: Settings should not change when in read only mode
Before this change if some settings were:

* read only
* visible on a settings page
* are set or have values selected

when the settings page was saved the setting would be set tobe empty,
because the hidden input remained on the page, while the other inputs
where not posted to Moodle.
2024-08-06 09:53:34 +01:00
Paul Holden 217f5d8f8d MDL-82446 files: pleasantly style the filepicker modal containers. 2024-08-05 08:40:35 +01:00
Paul Holden dec2143d73 MDL-79568 javascript: remove lang parameter from legacy string calls. 2024-08-05 08:33:19 +01:00
Ilya Tregubov abd4203547 Merge branch 'MDL-82171-muc-sited-MOODLE_404_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_404_STABLE 2024-08-05 11:18:59 +08:00
Shamim Rezaie 28922ba889 Merge branch 'MDL-82384-MOODLE_404_STABLE' of https://github.com/jwcatau/moodle into MOODLE_404_STABLE 2024-08-03 23:55:36 +10:00
Daniel Neis Araujo b67fb190b9 MDL-82518 core_user: Fix regression introduced by MDL-80271 2024-08-02 14:46:51 -03:00
David Mudrák 1e0f46a125 MDL-82599 lang: Use the fixed strings in tests, too 2024-08-02 17:44:42 +02:00
Helen Foster 1abeac9ba4 MDL-82599 lang: Import fixed English strings (en_fix) 2024-08-02 17:42:52 +02:00
Paul Holden 84c134f7c0 MDL-82669 mod_assign: remove Atto reliance workaround for Behat.
See 8fe80e743c for context, and 802ff3e2e3 for additonal comments.
2024-08-02 10:33:34 +01:00
Paul Holden aa8f7a6a39 MDL-82669 editor: remove reliance on Atto editor in Behat scenarios. 2024-08-02 10:33:34 +01:00
Jun Pataleta 731e8a1e01 MDL-82677 theme: Set a background colour for page heading
* Set a background colour for the .page-header-headings class.
* Assign the .page-header-headings class to the maintenance mode
template's page header div.
2024-08-02 17:25:21 +08:00
Paul Holden 2937e90bc7 MDL-82502 courseformat: align module action capability checks.
The "Hide/Show/Duplicate" actions should be considered self-contained,
and not also require "manageactivities" capability (per existing docs)
in addition to the specific capability that controls the action itself.

Also ensure the "Duplicate" capability checks are in the course context.
2024-08-02 10:01:16 +01:00
Paul Holden 01971bc9a4 MDL-82608 mod_data: null content checks when editing fields. 2024-08-02 09:57:37 +01:00
Paul Holden 09fae09cd5 MDL-82605 contentbank: pre-load contexts for options list.
Prevents additional DB reads per category/course, which can be
potentially expensive on large sites.
2024-08-02 09:50:17 +01:00
Ilya Tregubov e0381615aa weekly release 4.4.1+ 2024-08-02 09:30:45 +08:00
Ilya Tregubov 349916ae5f Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-08-02 09:30:42 +08:00
Matthew Hilton 5168d9c97b MDL-82662 login: load library with require_once 2024-08-02 10:52:57 +10:00
Paul Holden fc38c5c7e7 MDL-77784 quiz_grading: editor agnostic Behat scenario steps. 2024-08-01 14:17:15 +01:00
James Williams 3ab8986eb0 MDL-82384 core: Alter logic to only purge muc OR course caches. 2024-08-01 18:53:18 +10:00
Huong Nguyen be4d15a856 Merge branch 'MDL-80064-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-08-01 10:41:43 +07:00
Huong Nguyen 495f38ff3f Merge branch 'MDL-82598-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-08-01 10:26:52 +07:00
Huong Nguyen 0fe19ee1dc MDL-80593 core: Make Modal to work with Debug Template Info mode 2024-08-01 10:18:18 +07:00
Huong Nguyen ef3d7a9d18 MDL-80017 core_grades: Move upgrade note 2024-08-01 09:15:26 +07:00
Huong Nguyen 1970d836c6 Merge branch 'MDL-80017-404' of https://github.com/jleyva/moodle into MOODLE_404_STABLE 2024-08-01 09:12:12 +07:00
Ilya Tregubov 96f76208d1 Merge branch 'MDL-81689_MOODLE_404_STABLE' of https://github.com/rzhtwberlin/moodle into MOODLE_404_STABLE 2024-08-01 09:59:26 +08:00
Jun Pataleta 2fb409a999 Merge branch 'MDL-82286-404' of https://github.com/daledavies/moodle into MOODLE_404_STABLE 2024-08-01 09:47:11 +08:00
AMOS bot 86afac09e9 Automatically generated installer lang files 2024-08-01 00:07:35 +00:00
Sara Arjona 45fbccf625 Merge branch 'MDL-72876-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-07-31 17:15:19 +02:00
Sara Arjona 2c2cda1660 Merge branch 'MDL-82397-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-07-31 16:59:27 +02:00
Sara Arjona e6176d6dba Merge branch 'MDL-82596-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-31 16:46:06 +02:00
Dale Davies 0be064b328 MDL-82286 quiz_accessrule: Add SEB config test for floating point number
This tests several variations of SEB config files, to ensure Moodle
is able to parse them and generate a config key hash that matches
what SEB expects.

Additional values have been added to the unencrypted_win_233.seb
config file to cover the existence of floating point values,
ensuring they are serialized correctly. The config hash value
has been updated in real_ck_hash_provider to reflect the change.

Also added coverage information to the test case class docblock.
2024-07-31 11:17:26 +01:00
Jun Pataleta 5b68c82eb2 Merge branch 'MDL-82187-single-button-404' of https://github.com/djarran/moodle into MOODLE_404_STABLE 2024-07-31 17:21:32 +08:00
Paul Holden 94bcaa0d4f MDL-82208 block_starredcourses: avoid double encoding course name. 2024-07-31 08:47:23 +01:00
Simey Lameze 971b7b6eb7 MDL-82598 behat: improve example submission test 2024-07-31 09:05:07 +08:00
AMOS bot ad698059ae Automatically generated installer lang files 2024-07-31 00:07:32 +00:00
Paul Holden 1114ab3822 MDL-82643 enrol_self: clarify validation of notification threshold. 2024-07-30 15:48:07 +01:00
Tim Hunt adf336cbf2 MDL-82177 file upload: default to path '/'when things go wrong
This 'fix' is basically a work-around, but one that is already used in
some places. Now it is used in all similar places.

Exactly what causes the current file path in a file manager to become
unset is still unclear to me, but it seems to be an obscure race
condition that is very hard to reproduce.

However, when it happens, currently we are effectively defaulting to
path '/undefined/'. Using '/' is never worse, and is infinitely better
in the case where the filepicker does not allow folders to be used
(which includes important cases like essay questions in a quiz, which
some people use for exams!). In that case, falling back to non-top-level
path leads to dataloss.

Also, this is all historic JavaScript which will get replaced in the
grand de-YUI-fication, so I think a pragmatic fix is justified here.
2024-07-30 15:07:02 +01:00
Jun Pataleta b150085bb1 MDL-72876 theme_classic: Enclose welcome message in Bootstrap card 2024-07-30 19:40:21 +08:00
meirzamoodle f0dd2ae1f5 MDL-80064 authentication: password can be null
The Open ID Connect plugin uses null for the password,
which makes the internal password update fail to proceed.
Allowing null resolved the problem.

As a note, there is a potential issue if the authentication method has
a false return for the prevent_local_password because it will trigger
the hash_internal_user_password() where  the $password can not be null.
Since this only addresses the oauth2 issue, we should ignore it.
2024-07-29 15:50:08 +07:00
Paul Holden fd63451ecc MDL-82525 user: correct course parameter for course profile page. 2024-07-29 09:22:03 +01:00
Paul Holden 3d40c9bc47 MDL-81830 calendar: handle clearing of group type course element. 2024-07-29 09:20:49 +01:00
Paul Holden b540ab944c MDL-82209 calendar: consistent event action icon hovering.
* Apply hover on the icons, rather than the outer container;
* Make hover colour and text decoration appropriate for the icon
2024-07-29 09:19:35 +01:00
Jake Dallimore d34d87f45a MDL-82344 mod_lti: relax content selection validation in instance form
This was added in MDL-78916 in 4.3 but makes configuring a generic
launch to the default tool URL impossible, since a content item must be
selected. This fix:
- Makes this element optional again, which allows teachers to choose
whether a given instance launches into selected content, or launches
the default tool URL.
- Changes the style to btn-secondary, given it's now optional again
2024-07-29 13:06:11 +08:00
Andrew Nicols abd665d545 Merge branch 'MDL-82250-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-07-29 11:47:56 +08:00
Ilya Tregubov 5bcdefb516 Merge branch 'MDL-80345-404' of https://github.com/MartinGauk/moodle into MOODLE_404_STABLE 2024-07-29 11:33:22 +08:00
Paul Holden d69212b895 MDL-82596 behat: switch manual private files upload to generator. 2024-07-28 19:16:57 +01:00
Paul Holden 0223b0fefb MDL-82596 behat: tidy up existing usage of private files generator.
Filename is no longer required (since 83db25c330), given it never
did anything so can be removed. Requiring the "Private files" block
also isn't necessary since original switch to generator methods.
2024-07-28 19:13:39 +01:00
Paul Holden 3452312c8c MDL-82611 mod_assign: capability check before exporting grade link. 2024-07-26 21:20:40 +01:00
Eric Merrill e884c04350 MDL-82620 completion: Make enrol duration comp happen at the right time 2024-07-26 14:11:53 -04:00
Luca Bösch a1dcb85347 MDL-82397 block_recentlyaccesseditems: Assure space between items. 2024-07-26 18:23:48 +02:00
Tim Hunt ed179a8d7f MDL-82592 quiz grades: 'setup for sections' handling of descriptions 2024-07-26 13:07:21 +01:00
Johannes Burk 30bae49637 MDL-81689 tests: Check task DB record for nextruntime 2024-07-26 10:36:29 +02:00
Johannes Burk 0ae247b51f MDL-81689 tasks: add unit test to check for the bug 2024-07-26 10:36:29 +02:00
Jun Pataleta d8a1a67fd7 weekly release 4.4.1+ 2024-07-26 13:35:36 +08:00
Jun Pataleta acbfa5e1a3 NOBUG: Fixed SVG browser compatibility 2024-07-26 13:35:34 +08:00
Jun Pataleta 408154a1b6 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-07-26 13:35:33 +08:00
Jun Pataleta f91d479407 Merge branch 'MDL-82373-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-07-26 13:20:45 +08:00
Andrew Nicols 09b9c2a5b9 MDL-82373 core_message: Make message drawer router behat-aware
The drawer router was modifying the DOM in a variety of ways and hiding
content, without any pendingJS checks. As a result, there were cases
where a part of the UI was not visible, but had been rendered and was in
the DOM.

This change wraps the router Go method in a pendingJS call that only
resolves when the router transition completes.

Additionally the lazy load manager had a similar issue.
2024-07-26 12:45:30 +08:00
Juan Leyva 8d12c2a15e MDL-80017 core_grades: Fix return type for itemname 2024-07-25 11:16:52 +02:00
Huong Nguyen a358040701 Merge branch 'MDL-82527-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-25 10:48:50 +07:00
Huong Nguyen a03674de6f Merge branch 'MDL-82530-spelling-404' of https://github.com/leonstr/moodle into MOODLE_404_STABLE 2024-07-25 10:41:38 +07:00
Huong Nguyen b3dbeeecf7 Merge branch 'MDL-82328-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-25 10:36:01 +07:00
Jun Pataleta e18333d842 Merge branch 'MDL-82373-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-07-25 11:31:43 +08:00
Huong Nguyen 67b21bbc99 Merge branch 'MDL-58287-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-25 10:29:43 +07:00
Jun Pataleta d81770cdbe Merge branch 'MDL-77706-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-07-25 11:02:46 +08:00
Huong Nguyen 688ee9e9d1 Merge branch 'MDL-82553-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-07-25 09:17:26 +07:00
Shamim Rezaie 42cc612a5e Merge branch 'MDL-82540-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-07-25 12:07:24 +10:00
Shamim Rezaie fa8b74b5eb Merge branch 'MDL-82551-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-07-25 11:52:59 +10:00
Huong Nguyen ffc32f80a5 Merge branch 'MDL-82554-MOODLE_404_STABLE' of https://github.com/micaherne/moodle into MOODLE_404_STABLE 2024-07-25 08:50:32 +07:00
Huong Nguyen 3da6a04461 Merge branch 'MDL-82451-404' of https://github.com/aanabit/moodle into MOODLE_404_STABLE 2024-07-25 08:43:49 +07:00
Huong Nguyen eac19ef151 Merge branch 'MDL-82422-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-07-25 08:36:46 +07:00
AMOS bot 37a95f12e7 Automatically generated installer lang files 2024-07-25 00:08:08 +00:00
Amaia Anabitarte 727c4c5a6e MDL-82451 course: Switch hide/show icons for section action menu 2024-07-24 12:17:45 +02:00
Jun Pataleta a52f92a82c Merge branch 'MDL-81803-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-24 16:57:50 +08:00
Jun Pataleta 067818c2e6 Merge branch 'MDL-82289-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-24 15:05:32 +08:00
Angelia Dela Cruz d7d19fe136 MDL-82422 mod_workshop: Behat for how strict assessment comparison is 2024-07-24 13:44:36 +08:00
Huong Nguyen 28a7d39b2a Merge branch 'MDL-82528-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-24 12:00:09 +07:00
Michael Aherne da95f8d083 MDL-82554 question: Allow null createdby in question_has_capability_on. 2024-07-23 10:47:07 +01:00
Simey Lameze b1297a80df MDL-82250 core: add web installer test workflow 2024-07-23 13:33:03 +08:00
Jun Pataleta cbafc55078 MDL-82553 behat: Run accessibility tests using WCAG 2.2 success criteria 2024-07-22 14:37:49 +08:00
Jun Pataleta b7bd55bc82 MDL-82551 core: Set welcome message heading to level 1 2024-07-22 14:21:02 +08:00
Huong Nguyen aafb937adf Merge branch 'MDL-82481-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-22 10:40:44 +07:00
Huong Nguyen 95d011dcf1 Merge branch 'MDL-82193-404' of https://github.com/ericmerrill/moodle into MOODLE_404_STABLE 2024-07-22 09:39:46 +07:00
Ilya Tregubov c930111e17 Merge branch 'MDL-82499-MOODLE_404_STABLE' of https://github.com/micaherne/moodle into MOODLE_404_STABLE 2024-07-22 09:42:53 +08:00
djarrancotleanu f0c5d668e9 MDL-82187 core: Add default type for single button in template 2024-07-22 08:48:26 +10:00
AMOS bot a061f1b4c2 Automatically generated installer lang files 2024-07-21 00:07:43 +00:00
Paul Holden 2299b73307 MDL-58287 courseformat: ensure all format plugins are returned. 2024-07-19 15:23:37 +01:00
Paul Holden 85c7dcaf05 MDL-82528 courseformat: switch to existing group action icon.
Use a version that already exists in our fontawesome mapping so it
can be consistently styled/overridden.
2024-07-19 12:54:42 +01:00
Sara Arjona 8d30ff7575 Merge branch 'MDL-81119-forced-config-MOODLE_404_STABLE' of https://github.com/bwalkerl/moodle into MOODLE_404_STABLE 2024-07-19 12:37:16 +02:00
Jun Pataleta 2e8bf841c6 MDL-82540 core: Use an empty check for $CFG->debugdisplay 2024-07-19 16:25:12 +08:00
Benjamin Walker d5b719f6a0 MDL-81119 tool_recyclebin: Stop overriding unrelated forced config 2024-07-19 14:37:23 +10:00
Ilya Tregubov d7cb2a66cd weekly release 4.4.1+ 2024-07-19 09:30:25 +08:00
Leon Stringer e96db7beec MDL-82530 core: Fix spelling 2024-07-18 14:51:00 +01:00
Paul Holden 44801c448c MDL-82481 customfield_select: return field options pre-formatted. 2024-07-18 14:03:18 +01:00
Paul Holden 904222b6f2 MDL-82481 reportbuilder: re-use existing method for field options. 2024-07-18 14:03:18 +01:00
Paul Holden f1bc96a8ab MDL-82527 h5p: improve editor Behat scenarios for embedding content.
* Move the shared drag fixture out of the Atto plugin;
* Switch to using faster generators for populating private files;
* Clarify required fields for private files generator
2024-07-18 09:37:47 +01:00
Jun Pataleta d0ce8e8d62 Merge branch 'MDL-82505-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-07-18 12:50:57 +08:00
Jun Pataleta c2f3e98cea Merge branch 'MDL-75864-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-07-18 12:47:50 +08:00
Huong Nguyen 266c8b73b0 MDL-82505 calendar: more precise matching of calendar day partial
The partial name selector points to the parent element,
but the Javascript code monitors the child element.
We need to make it consistent
2024-07-18 11:37:07 +07:00
Andrew Nicols 00ce502c67 Merge branch 'MDL-82309-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-18 11:58:45 +08:00
Ilya Tregubov 38ab94e04b Merge branch 'MDL-82445-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-07-18 11:37:02 +08:00
Andrew Nicols dc6db54e99 Merge branch 'MDL-81932-404' of https://github.com/safatshahin/moodle into MOODLE_404_STABLE 2024-07-18 11:29:01 +08:00
Huong Nguyen d45422ccbf Merge branch 'MDL-82192-404' of https://github.com/ericmerrill/moodle into MOODLE_404_STABLE 2024-07-18 10:27:17 +07:00
Andrew Nicols c1b4d24095 Merge branch 'MDL-81272-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-07-18 11:22:10 +08:00
Andrew Nicols e05fa63684 MDL-82445 filter_tidy: Ensure locale does not change when using Tidy 2024-07-18 11:00:42 +08:00
Andrew Nicols 03f840b4f2 MDL-82445 core: Create locale helper utility 2024-07-18 11:00:42 +08:00
Ilya Tregubov fbd674e81b Merge branch 'MDL-82090-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-18 10:39:49 +08:00
Ilya Tregubov 1291503846 Merge branch 'MDL-82444-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-18 10:32:55 +08:00
Huong Nguyen 21fc6a3016 Merge branch 'MDL-82467-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-18 09:19:51 +07:00
Sara Arjona 23f0ec2766 Merge branch 'MDL-82353-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-07-17 17:07:53 +02:00
Paul Holden b99a81af8e MDL-82499 question: test for invalid question in capability check. 2024-07-17 09:57:42 +01:00
Andrew Nicols 908488e472 MDL-82373 contentbank: Pause in Behat before interacting with h5p
It seems that the loading of the h5p content upsets other interactions
with the page in Firefox as it loads. Unfortunately I haven't found a
reliable way to handle this with pendingJS yet.

This is the poor man's fix and we should find a better solution.
2024-07-17 13:28:57 +08:00
Andrew Nicols 7fdb644bd1 MDL-82373 question: Make window larger in behat tests
I would suggest that this is a stop gap to solve some failing tests. We
really need to look at whether we can improve the usability of this
interface on smaller displays as a longer-term fix.
2024-07-17 13:28:56 +08:00
Andrew Nicols 70204fd73c MDL-82373 core_grades: Address random failures when editing gradebook 2024-07-17 13:28:56 +08:00
Andrew Nicols 389e4fc011 MDL-82373 behat: Wait for alerts before accepting/dismissing them 2024-07-17 13:28:56 +08:00
Andrew Nicols ed4a47302e MDL-82373 core: Make CollapsibleRegion more tolerant to behat 2024-07-17 13:28:55 +08:00
Andrew Nicols 0f0710a249 MDL-82373 tool_usertours: Ensure that behat waits for tours to show/hide 2024-07-17 13:28:55 +08:00
Andrew Nicols 42511349ae MDL-82373 behat: Stop killing the entire Behat run on driver error
If there's a driver error, for example from a step taking too long, then
this kills the entire Behat run and we have to start from scratch.

This change instead throws away the original connection and starts a new
one to try and continue the test.
2024-07-17 13:28:55 +08:00
Andrew Nicols 32f1542b5e MDL-82373 behat: Stop calling ensure_node_is_visible before click
W3C WebDriver Element::Click, Element::Clear, and Element::SendKeys all
state that the WebDriver implementation (chromedriver, geckodriver,
edgedriver) should scroll the element into view if it is not already
visible.

It is wrong for us to check if the element is visible or not before
calling these as it may not be but will during the click/clear/type
event.
2024-07-17 13:28:55 +08:00
Andrew Nicols 78bcf355c6 MDL-82373 mod_lesson: Fix failing behat tests for Selenium 4
Recent versions of Chrome do not re-render the page but return previous
page state from cache. The page state had the Submit button disabled
before navigating away.

Refreshing the page addresses this.
2024-07-17 13:28:54 +08:00
Brendan Heywood 31e0fd81a7 MDL-82171 core: Rewarm bootstrap.php after a cache purge 2024-07-17 15:16:12 +10:00
Ilya Tregubov 7a21be49f9 Merge branch 'MDL-82002-404' of https://github.com/durenadev/moodle into MOODLE_404_STABLE 2024-07-17 11:04:55 +08:00
Michael Aherne 43b3bda115 MDL-82499 question: Fail if questionid does not exist. 2024-07-16 14:59:55 +01:00
Dale Davies 088c523df0 MDL-82286 core: Set serialize_precision to current PHP default 2024-07-16 10:01:57 +01:00
Angelia Dela Cruz 4af5185587 MDL-82353 gradingform: Behat to verify marking guide can be set to draft 2024-07-16 16:46:51 +08:00
Andrew Nicols b2018b2fbc MDL-77706 atto_link: Work around Mozilla bug 1906559
This upstream bug prevents creation of an anchor with a hyperlink where
the content has a block-like display.

The workaround is to wrap the content in a span, set the display to
inline, call the `createLink` command on the span, move the content out
of the span, and then remove it.

This is only done for Firefox-based browsers.
2024-07-16 15:37:46 +08:00
Ilya Tregubov 25f4874743 Merge branch 'MDL-82282-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-16 09:26:20 +08:00
Ilya Tregubov 3ff165b4c5 Merge branch 'MDL-82319-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-07-16 09:21:58 +08:00
Ilya Tregubov 1d51af0f8e Merge branch 'MDL-73662-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-16 09:15:50 +08:00
Paul Holden aa550ddea6 MDL-82467 completion: simplify field SQL for completion columns.
For columns whose values can be represented purely in SQL, we don't
need to/shouldn't select extra data because it confuses the column
output during aggregation for numeric/boolean columns.
2024-07-15 13:34:55 +01:00
Huong Nguyen 978ada1047 MDL-81272 calendar: Improve permission check for separate group mode 2024-07-15 15:46:55 +07:00
Andrew Nicols 8b7270f9b1 MDL-66903 core: Check PHPUNIT_TEST defined before using 2024-07-15 13:45:36 +07:00
Huong Nguyen 8741181a5b Merge branch 'MDL-66903-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-07-15 13:22:02 +07:00
Laurent David e7065ad471 MDL-82319 core_courseformat: Remove redundant lock icon in section 2024-07-15 06:33:31 +02:00
Andrew Nicols d36cf65ef3 MDL-66903 core: Introduce \core_component::reset to replace hacks
Traditionally we have done this using reflection and it would be better
to do this in a 'proper' fashion in case we ever need to change how it
works.
2024-07-15 12:22:19 +08:00
Andrew Nicols 39d46917bb MDL-66903 testing: Helper to load fixture files 2024-07-15 12:22:17 +08:00
Andrew Nicols 6b3d8fd889 MDL-66903 testing: Add support for a \tests\ namespace during tests
This commit:
- introduces a \tests\ sub-namespace for use in unit tests only
- the path to this the tests/classes directory of the owning parent
- files here are excluded from unit test runs

This is agreed per policy in MDL-80855.
2024-07-15 12:21:54 +08:00
Andrew Nicols b15b73848a MDL-66903 testing: Fix whitespace 2024-07-15 12:21:06 +08:00
Andrew Nicols 6cd08cc382 MDL-66903 testing: Reset CFG and component after test
This change moves the reset of global test state to the finally section
rather than doing it only if the test passes.

Previously if a test which modifies the `core_component` internals
failed, it would not reset the internal state and impact subsequent
tests.
2024-07-15 12:21:06 +08:00
Eric Merrill b1a6791aa2 MDL-82193 scorm: Don't store header with multiline AICC content 2024-07-12 15:35:35 -04:00
Paul Holden 384300011c MDL-82444 core: skip environment test on optional plugin extensions. 2024-07-12 13:49:54 +01:00
Paul Holden 57fc94747d MDL-82444 filter_tidy: advertise required PHP extension. 2024-07-12 13:34:06 +01:00
Paul Holden 9956e9ff31 MDL-73662 mod_quiz: fix initialization arguments to close button.
Co-authored-by: Sergio Rabellino <rabellino@di.unito.it>
2024-07-12 13:18:10 +01:00
Paul Holden 8601c56964 MDL-81803 tool_dataprivacy: observe disabled expiration time.
A non-positive integer value should indicate "No time limit".
2024-07-12 11:04:59 +01:00
Daniel Ureña 9f1ab61160 MDL-82002 Media: Video embedding from the app is styled properly. 2024-07-12 11:22:07 +02:00
Huong Nguyen 4197e50fec weekly release 4.4.1+ 2024-07-12 08:42:06 +07:00
Huong Nguyen 23ba4d1792 Merge branch 'MDL-82245-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-11 11:14:07 +07:00
Jun Pataleta 17e5aaa5be Merge branch 'MDL-81265-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-07-11 12:08:52 +08:00
Jun Pataleta dd998e8d88 MDL-81265 mod_workshop: Verify "Setup phase" heading with "should exist" 2024-07-11 11:58:39 +08:00
Laurent David 1bfd61c0fd MDL-81265 mod_workshop: Fix accessibility issues
* Page title should be h2
* Contrasts in the table headers (for submission, assessment and grading)
should be 4:1 at least
2024-07-11 11:58:39 +08:00
Andrew Nicols 95274afe55 Merge branch 'MDL-78936-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-07-11 11:53:21 +08:00
Andrew Nicols 8d1bf9d92d Merge branch 'MDL-82431-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-11 11:46:26 +08:00
Huong Nguyen 799e5c9ecc Merge branch 'MDL-79717-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-11 09:35:15 +07:00
Huong Nguyen 1d20be4c3d Merge branch 'MDL-76654-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-07-11 09:19:40 +07:00
Paul Holden ed5fde9c1f MDL-82431 phpunit: correct unit test filename and classname.
Standardise the same test cases, e.g. make final, covers notation,
static data providers, namespaces, etc.

Once the tests run, a couple of them failed. They required changes
to assertions to make them pass.
2024-07-10 19:06:17 +01:00
Sara Arjona 45d839a7c8 Merge branch 'MDL-82391-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-10 18:05:53 +02:00
Jun Pataleta 0ebbf88990 Merge branch 'MDL-82417-404' of https://github.com/davewoloszyn/moodle into MOODLE_404_STABLE 2024-07-10 22:16:11 +08:00
Paul Holden 2196813e1e MDL-79717 phpunit: ensure unique data provider keys in tests.
Duplicate data provider keys were overwriting and/or duplicating
one another, leading to some cases being skipped.

Other "duplicate array key" errors were picked up by `phpcs` in
this dragnet across all tests, which have also been fixed.
2024-07-10 14:08:52 +01:00
Huong Nguyen 562b9775b2 Merge branch 'MDL-82308_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-07-10 14:57:24 +07:00
Ilya Tregubov cbe78bb3a6 Merge branch 'MDL-82323-striptags_error-404' of https://github.com/leonstr/moodle into MOODLE_404_STABLE 2024-07-10 12:18:40 +08:00
Huong Nguyen 8cfc9387f2 Merge branch 'MDL-68211-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-07-10 09:07:49 +07:00
Huong Nguyen 0ea950e710 Merge branch 'MDL-82236-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-07-10 09:04:14 +07:00
Tim Hunt 077f535912 MDL-82401 quiz: editing modals must be removed on close 2024-07-10 08:58:13 +07:00
Sara Arjona e1816e9af1 Merge branch 'MDL-81349-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-09 18:14:44 +02:00
Paul Holden 5ca387bef3 MDL-82391 courseformat: correct selector element section URLs.
It's required by themes that don't use the course index component,
e.g. Classic theme.
2024-07-09 14:45:22 +01:00
Sara Arjona 27cd5596e7 Merge branch 'MDL-82360-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-09 15:30:14 +02:00
Sara Arjona a10c074f54 Merge branch 'MDL-77834-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-09 15:22:13 +02:00
Sara Arjona ba80f884f7 Merge branch 'MDL-81991-404-alt' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-07-09 13:07:47 +02:00
Sara Arjona 54ec6416b4 Merge branch 'MDL-78388-404' of https://github.com/djarran/moodle into MOODLE_404_STABLE 2024-07-09 11:47:34 +02:00
Sara Arjona 83bec3bdb5 Merge branch 'MDL-66251-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-07-09 10:36:36 +02:00
Paul Holden 8a325684d0 MDL-82309 comment: preserve link text property during AJAX requests.
We really only need to update the count value that follows the link
text content, so do that rather than overwriting the entire thing.
2024-07-09 09:17:17 +01:00
Sara Arjona 8704a69aed Merge branch 'MDL-80947-404' of https://github.com/stevandoMoodle/moodle into MOODLE_404_STABLE 2024-07-09 10:03:09 +02:00
Sara Arjona d6fbf5661a Merge branch 'MDL-82310-404' of https://github.com/ferranrecio/moodle into MOODLE_404_STABLE 2024-07-09 08:54:54 +02:00
Angelia Dela Cruz 6a33cb3e08 MDL-82236 mod_data: Behat to display DB activity entry rating 2024-07-09 14:53:06 +08:00
Sara Arjona cd2d47dafc Merge branch 'MDL-81296-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-07-09 08:50:36 +02:00
David Woloszyn 1be7820208 MDL-82417 admin: Clarify signoutofotherservices strings 2024-07-09 13:58:14 +10:00
Angelia Dela Cruz f297094295 MDL-81296 mod_data: Behat test for data activity readonly availability 2024-07-09 11:38:35 +08:00
Paul Holden 0aeff04c0a MDL-82328 auth_oauth2: don't load custom profile field data too early.
By prematurely loading custom profile data in the constructor, under
specific circumstances it would happen before the page was fully
initialised which meant that any attempt at applying filters when
formatting profile field data would result in thrown exception.
2024-07-08 08:55:55 +01:00
Simey Lameze 959963e1e4 MDL-76654 behat: fixes and improvements to self assessment test 2024-07-08 11:22:08 +08:00
Angelia Dela Cruz 7acefc469c MDL-76654 behat: Coverage for workshop self-assessment 2024-07-08 11:22:08 +08:00
meirzamoodle 3ae349b86e MDL-66251 form: Hiding and disabling static elements.
Added functionality to locate static text elements within the form,
improving the ability to target and manipulate the static elements for
hiding and disabling purposes.
2024-07-08 09:17:26 +07:00
Stevani Andolo 3413c90bd2 MDL-80947 communication_customlink: Check before customlink update 2024-07-08 07:21:15 +08:00
Sara Arjona 41a5833327 MDL-68211 feedback: Export percentage format
The feedback was exporting the percentage in the Analysis file using
a wrong value for the format, so instead of having only 2 decimals,
the number was not formatted.
2024-07-05 10:13:46 +02:00
Ilya Tregubov 9557a52569 weekly release 4.4.1+ 2024-07-05 09:02:00 +08:00
Huong Nguyen f41181c894 Merge branch 'MDL-80907-404-take-2' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-07-04 21:43:53 +07:00
Huong Nguyen ff3fb00a96 MDL-80907 qtype_ordering: Fix incorrect Behat column selectors 2024-07-04 21:24:12 +07:00
Paul Holden 7f45da44ed MDL-82289 mod_feedback: correct comparison of current $course. 2024-07-04 10:28:49 +01:00
Sara Arjona d9a761f6ee Merge branch 'MDL-80907-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-07-04 11:19:45 +02:00
Paul Holden 771694018e MDL-82282 question: consider only editable flags in JS module. 2024-07-04 10:19:30 +01:00
Paul Holden eafd1bcb17 MDL-82090 completion: account for alternate gradepass form fields.
Some modules (e.g. Workshop) have "*gradepass" fields for each grade
item, which should be accounted for when trying to freeze them.
2024-07-04 10:17:34 +01:00
Huong Nguyen 7065a3dca0 MDL-80907 behat: Fix incorrect column selectors 2024-07-04 15:16:45 +07:00
Safat 5bc2479793 MDL-81932 communication_customlink: Fix behat tests 2024-07-04 17:10:19 +10:00
Safat 70d257fc5b MDL-81932 communication_matrix: Fix behat tests 2024-07-04 17:10:19 +10:00
Safat 3423dd2245 MDL-81932 core_communication: Fix communication provider change issue 2024-07-04 17:10:19 +10:00
Huong Nguyen a0a2015027 Merge branch 'MDL-80907-404' of https://github.com/marinaglancy/moodle into MOODLE_404_STABLE 2024-07-04 11:13:38 +07:00
Ilya Tregubov 96f2686d47 Merge branch 'MDL-63670-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-07-04 10:57:37 +08:00
Ilya Tregubov 5bbd628f49 Merge branch 'MDL-82315-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-04 10:39:02 +08:00
Ilya Tregubov aad75c1072 Merge branch 'MDL-82024-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-04 09:50:53 +08:00
ferranrecio c35610502f MDL-82310 backup: fix delegated section restore 2024-07-03 18:26:01 +02:00
Sara Arjona f35b8e6651 Merge branch 'MDL-82100-404' of https://github.com/danghieu1407/moodle into MOODLE_404_STABLE 2024-07-03 17:14:17 +02:00
Jun Pataleta 5be8cf7ba8 Merge branch 'MDL-31192-M404_colored-box-with-pre-tag-function-generates-a-warning' of https://github.com/ziegenberg/moodle into MOODLE_404_STABLE 2024-07-03 15:13:04 +08:00
Hieu Nguyen Dang b3b8f520e9 MDL-82100 Quiz\report: Show customised question numbers 2024-07-03 13:48:49 +07:00
Sara Arjona a25eb4cb95 Merge branch 'MDL-82363-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-07-03 08:23:43 +02:00
lameze f4f7f83ce5 NOBUG: Increase file size to avoid random failures 2024-07-03 13:40:22 +08:00
Huong Nguyen f312621f0d MDL-82363 Calendar: Responsiveness improvement for calendar block
Hide the month name if the screen is too small
2024-07-03 11:02:36 +07:00
djarrancotleanu 6ad723885c MDL-78388 course: Copy permissions when duplicating module 2024-07-03 13:49:00 +10:00
Shamim Rezaie 2119c703d2 Merge branch 'MDL-82329-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-07-03 04:06:50 +10:00
Paul Holden 42938d2dd4 MDL-82360 courseformat: remove console upload error string debugging. 2024-07-02 15:55:27 +01:00
Paul Holden 462357ebf0 MDL-77834 mod_feedback: consistent HTML decoding of answer data.
Restores functionality from 72629ee8c0 that went missing along the way.
2024-07-01 16:22:00 +01:00
Luca Bösch a79853672e MDL-81959 qtype_multianswer: Margin between checkboxes and text 2024-07-01 16:16:13 +02:00
Paul Holden 75b3607fc3 MDL-81349 group: case-sensitive name validation when editing. 2024-07-01 09:41:43 +01:00
Huong Nguyen f142770c37 Merge branch 'MDL-79758_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-07-01 14:25:16 +07:00
Huong Nguyen cf92d64a57 Merge branch 'MDL-79971-404' of https://github.com/aanabit/moodle into MOODLE_404_STABLE 2024-07-01 14:16:45 +07:00
Huong Nguyen 6771eb805b Merge branch 'MDL-79796_404' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_404_STABLE 2024-07-01 14:10:08 +07:00
Huong Nguyen 6c7121254d Merge branch 'MDL-73091-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-07-01 14:05:36 +07:00
Leon Stringer f523a01673 MDL-82323 core: Fix get_striptags must be bool
If an exception occurs during install $CFG->formatstringstriptags may
not be populated, if so fall back to a default value.
2024-06-28 10:23:49 +01:00
Paul Holden 75791eabea MDL-82245 restore: use translated lang string in page heading. 2024-06-28 10:03:09 +01:00
Amaia Anabitarte 2c804c3ab2 MDL-79971 completion: Don't assume a completed activity is viewed 2024-06-28 10:16:28 +02:00
Paul Holden 044e924d8a MDL-82329 course: consistent section permalink on view/section pages. 2024-06-28 08:59:54 +01:00
Paul Holden 6b01e331e6 MDL-82315 backup: account for null course section sequence value. 2024-06-27 23:34:48 +01:00
Sara Arjona 87d7ac1f81 weekly release 4.4.1+ 2024-06-27 16:36:48 +02:00
Sara Arjona 09c7a41d7f Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-06-27 16:36:45 +02:00
Stephan Robotta 219d5bfb44 MDL-79758 qbank: add filter in pagination links
Contains some minor tweaks by Tim Hunt <T.J.Hunt@open.ac.uk>.
2024-06-27 09:22:31 +01:00
Huong Nguyen 32d08ee47f Merge branch 'MDL-62958-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-27 11:05:03 +07:00
Huong Nguyen ef45ffc444 Merge branch 'MDL-82251-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-27 10:56:26 +07:00
Huong Nguyen 52cbcdbca7 Merge branch 'MDL-82008-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-06-27 10:26:47 +07:00
Jun Pataleta 97c21add9e Merge branch 'MDL-79809-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-06-27 11:01:33 +08:00
Andrew Nicols 15d331c058 MDL-63670 core_message: Tests should not use another testcase as base 2024-06-27 08:55:33 +08:00
Tim Hunt 2ac781b76d MDL-82308 forms: set a nice default size for multi-selects
This is a backport of MDL-81515.
2024-06-26 13:24:24 +01:00
Sara Arjona 6d4ea3f3c2 Merge branch 'MDL-80625-404' of https://github.com/ssj365/moodle into MOODLE_404_STABLE 2024-06-26 12:14:56 +02:00
Sara Arjona b0b17142c7 Merge branch 'MDL-80344-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-26 12:11:17 +02:00
Huong Nguyen 306b5289a7 MDL-81991 core: Reload accessdata for dirty users in CLI mode 2024-06-26 16:27:46 +07:00
Huong Nguyen 99ae088704 MDL-78936 editor_tiny: Disable quickbars for small target
The quickbars selection toolbar is not displayed correctly
if the target element is too small. We will wait for it
to be fixed in the future before we re-enable it in Moodle
2024-06-26 10:16:52 +07:00
Ilya Tregubov 7605966155 Merge branch 'MDL-82233-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-06-26 10:24:02 +08:00
Ilya Tregubov 0f7d291b9c Merge branch 'MDL-82167-404' of https://github.com/ferranrecio/moodle into MOODLE_404_STABLE 2024-06-26 10:19:59 +08:00
Sara Arjona ff2164fd3d Merge branch 'MDL-79231-404' of https://github.com/davewoloszyn/moodle into MOODLE_404_STABLE 2024-06-25 16:13:01 +02:00
Sara Arjona b1072fc937 Merge branch 'MDL-82160-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-06-25 16:00:06 +02:00
Huong Nguyen 81900583fe Merge branch 'MDL-82277-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-25 13:53:54 +07:00
Wolfgang Reichert 9dde27f0bb MDL-73091 core_badges: Avoid undefined variable notice in review
* Fix review method for award_criteria_courseset when courseset is empty
* Add unit tests for coverage of the award_criteria_courseset class

@co-authored jz-reichert@web.de
2024-06-25 08:47:34 +02:00
Huong Nguyen 40ffccc33b Merge branch 'MDL-82200_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-06-25 09:13:43 +07:00
Huong Nguyen 1975be2909 Merge branch 'MDL-80061-404' of https://github.com/ssj365/moodle into MOODLE_404_STABLE 2024-06-25 09:07:21 +07:00
Paul Holden 160617d2d5 MDL-82024 format_topics: toggle un/highlight section icon correctly. 2024-06-24 19:48:48 +01:00
Paul Holden 2b42e986e3 MDL-82277 mod_h5pactivity: less fragile error Behat step assertion.
Avoids frequent failures related to iframe resizing/timing.
2024-06-24 15:55:58 +01:00
Paul Holden e9683d416f MDL-62958 admin: ensure uploaded plugin directory structure present.
Including any empty directories, which would cause validation to
subsequently fail when they were skipped.

Co-authored-by: Leon Stringer <leon.stringer@ntlworld.com>
2024-06-24 12:47:38 +01:00
Huong Nguyen 85c8395e52 MDL-79809 environment: Moodle 4.5 requirements 2024-06-24 09:37:15 +07:00
Rossco Hellmans 375c921a69 MDL-68676 mod_assign: check accessallgroups in can_edit_submission()
In can_edit_submission() when the assign group mode is SEPARATEGROUPS
check if the user has the moodle/site:accessallgroups capability before
checking if they are a shared groupmember. Due to the teamsubmission
setting students might not be in a group but can still submit, which
means they are not returned in get_shared_group_members().
2024-06-22 13:44:59 +10:00
AMOS bot fa80a0b8a5 Automatically generated installer lang files 2024-06-22 00:14:10 +00:00
Daniel Ziegenberg 10eead2473 MDL-31192 core_webservice: do not render div inside span
`<span>` tags only permit "phrasing content" but `<div>` (and also the
`<ins>` tag) are flow content. So, switching to div all along.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2024-06-21 16:32:35 +02:00
Martin Gauk f341c774de MDL-80345 core_lock: deal with hash collisions in postgres_lock_factory 2024-06-21 13:42:59 +02:00
Mikel Martín 731bf1cb78 MDL-82160 renderer: Add render_context_header method to core_renderer
In MDL-81597 the original render_context_header method was removed and converted to a template.
That caused a regression, so this patch adds the method again but using the new template.
2024-06-21 11:55:56 +02:00
Luca Bösch 18bf9704e7 MDL-82008 backup: Format 'Continue' and 'Cancel' button to have a margin 2024-06-21 09:37:02 +02:00
Sara Arjona cd781ab1b7 weekly release 4.4.1+ 2024-06-20 16:30:56 +02:00
Sara Arjona 7ec026173e Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-06-20 16:30:51 +02:00
Paul Holden ce6b2f77c9 MDL-82251 customfield: correct field management icon sizes. 2024-06-20 09:55:18 +01:00
David Woloszyn d3078a3f53 MDL-79231 core_theme: Fix Tiny menu in fullscreen mode modals 2024-06-20 14:32:57 +10:00
David Woloszyn d5be1b502f MDL-79231 mod_assign: Fix Tiny menu in fullscreen mode 2024-06-20 14:32:57 +10:00
Huong Nguyen a74b702a23 Merge branch 'MDL-78773-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-20 11:06:22 +07:00
Jun Pataleta 4246ca2fbf Merge branch 'MDL-82246-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-06-20 11:41:49 +08:00
Huong Nguyen 931f11899a Merge branch 'MDL-82202-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-20 10:21:13 +07:00
Andrew Nicols f3ade2b67a MDL-82246 tiny_recordrtc: Correct string name for insecure alert title 2024-06-20 10:58:13 +08:00
Huong Nguyen a1334d14d7 Merge branch 'MDL-81761-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-20 09:54:48 +07:00
Huong Nguyen c2cd21be15 Merge branch 'MDL-82169-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-20 09:19:45 +07:00
AMOS bot 3fb33d314e Automatically generated installer lang files 2024-06-20 00:16:24 +00:00
Sara Arjona e075cb4c1d Merge branch 'MDL-81534-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-19 16:49:56 +02:00
Sara Arjona 7cb072b11e Merge branch 'MDL-81857-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-19 15:53:02 +02:00
Sara Arjona d84efee3e2 Merge branch 'MDL-82181-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-19 15:42:27 +02:00
Sara Arjona 5fbdb37d60 Merge branch 'MDL-81730-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-19 13:31:39 +02:00
meirzamoodle f8eecf37d9 MDL-75864 cache: Change key prefix in cache_cron_task
Currently, the cache_cron_task is set to look for 'sess_' as a key prefix,
which is not used in any code. As a result, sessions that have exceeded the timeout are never deleted.

The proposed patch involves changing the prefix to the LASTACCESS key prefix and
fixing the return value of get_many in the Redis cache so that it can return the required keys.

Co-authored-by: Renaud Lemaire <rlemaire@cblue.be>
2024-06-19 13:42:50 +07:00
Sara Arjona 4bdf820437 Merge branch 'MDL-77665-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-06-19 07:35:22 +02:00
Huong Nguyen d59f7a04f0 Merge branch 'MDL-81249-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-06-19 09:18:33 +07:00
Andrew Nicols 1d753e37af Merge branch 'MDL-81644-404-new' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-06-18 23:25:33 +08:00
Andrew Nicols 77c9660195 Merge branch 'MDL-81431-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-06-18 22:50:44 +08:00
Andrew Nicols 877e585704 Merge branch 'MDL-81739-404' of https://github.com/davewoloszyn/moodle into MOODLE_404_STABLE 2024-06-18 22:34:10 +08:00
Sara Arjona f64d94dd62 MDL-82233 badges: Display awarded users only when it applies
The message with the number of uses who have awarded a badge
were displayed always (even when the badge was disabled).
2024-06-18 16:06:49 +02:00
Angelia Dela Cruz f6f6475b8e MDL-81249 gradingform: Behat test that grades are retained 2024-06-18 18:07:47 +08:00
Angelia Dela Cruz e877329be1 MDL-81249 gradingform: Enhance Behat test for deleting marking guide 2024-06-18 17:46:26 +08:00
Huong Nguyen 26824c239e Merge branch 'MDL-82148_404' of https://github.com/stronk7/moodle into MOODLE_404_STABLE 2024-06-18 16:27:43 +07:00
Shamim Rezaie 6aa18b9c05 Merge branch 'mdl-78080-404-split' of https://github.com/james-cnz/moodle into MOODLE_404_STABLE 2024-06-18 16:06:10 +10:00
lameze d348237022 MDL-81431 behat: set grade item checkboxes one at the time 2024-06-18 13:58:16 +08:00
Paul Holden 114ddf489e MDL-82202 course: correct last access report entity column callback.
Ensure it works when being aggregated.
2024-06-17 14:27:09 +01:00
Laurent David f78c93e325 MDL-77665 mod_h5pactivity: Improve generator package upload
* Allow the specification of the username in order to set the owner
of the H5P file package when creating a new H5P instance.
2024-06-17 06:32:13 +02:00
Laurent David 941c866216 MDL-77665 core_h5p: Allow deployment if user has been deleted
* If user has been deleted we consider that the content can be deployed
by a user who can deploy other packages
* Add behat test to cover for this use case
* Fix the content bank generator as it was failing to upload the content
as the given user
2024-06-17 06:32:13 +02:00
James C d9ba8ea3f3 MDL-78080 course: Duplicate section: Duplicate by section id, not num 2024-06-17 12:36:04 +12:00
James C 6e41020e44 MDL-78080 course: Duplicate section: No duplicate option for section 0 2024-06-17 12:36:04 +12:00
James C 2be9aaf311 MDL-78080 course: Duplicate section: Don't copy deleted activities 2024-06-17 12:36:04 +12:00
James C ac65869391 MDL-78080 course: Duplicate section: Copy section summary files 2024-06-17 12:35:38 +12:00
James C f7184f748f MDL-78080 course: Duplicate section: Copy custom section options 2024-06-17 12:32:47 +12:00
James C 40995c1030 MDL-78080 course: Duplicate section: Fix course_update_section params 2024-06-17 12:32:15 +12:00
Eloy Lafuente (stronk7) 202c58888a MDL-82148 phpunit: Remove all cases of multiple @coversDefaultClass
Only one by class is allowed (to be used as shortcut exclusively).
2024-06-14 16:05:15 +02:00
Tim Hunt 6d35be2af2 MDL-82200 inplace editable: fix background of the help text 2024-06-14 12:59:37 +01:00
Anupama Sarjoshi 754768bad3 MDL-79796 quiz: Preview icon should be visible in question bank pop-up 2024-06-14 11:50:53 +01:00
Ilya Tregubov fbed8034eb weekly release 4.4.1+ 2024-06-14 08:57:00 +08:00
Eric Merrill 73713bd675 MDL-82192 scorm: Correct field names for AICC ExitAu 2024-06-13 18:38:49 -04:00
Jun Pataleta 347ade6e68 Merge branch 'MDL-81287-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-13 12:03:21 +08:00
Jun Pataleta ece31e87a6 Merge branch 'MDL-82178_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-06-13 12:00:35 +08:00
Huong Nguyen 7b3d547f4a Merge branch 'MDL-81577-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-13 10:55:57 +07:00
Huong Nguyen 89d93d2632 Merge branch 'MDL-82184-dbcollation-comment-404' of https://github.com/leonstr/moodle into MOODLE_404_STABLE 2024-06-13 10:19:37 +07:00
Huong Nguyen d1f4ca4505 Merge branch 'MDL-81781-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-13 10:13:00 +07:00
Huong Nguyen f5a2ddef9f Merge branch 'MDL-69514-404' of https://github.com/pedrojordao/moodle into MOODLE_404_STABLE 2024-06-13 09:54:11 +07:00
Jun Pataleta 533deb42af Merge branch 'MDL-79885-404' of https://github.com/Chocolate-lightning/moodle into MOODLE_404_STABLE 2024-06-13 10:37:39 +08:00
Huong Nguyen 15b422f3a7 Merge branch 'MDL-82162-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-06-13 09:14:05 +07:00
Mathew May 17f080683d MDL-79885 qtype_ordering: Add learner behat testing 2024-06-13 10:11:10 +08:00
Huong Nguyen 9874249ad1 Merge branch 'MDL-82155-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-13 09:03:12 +07:00
Shamiso.Jaravaza 7fae6efbd8 MDL-80061 mod_bigbluebuttonbn: Change filter field
* Change dismissed recording time filter from timecreated to timemodified
2024-06-12 13:52:05 -06:00
Leon Stringer e4a8fd37f0 MDL-82184 database: Revise dbcollation comment 2024-06-12 18:15:30 +01:00
Paul Holden c8bdae260b MDL-82181 tiny_media: correctly determine whether to show dropzone. 2024-06-12 14:19:47 +01:00
Tim Hunt 200eb30225 MDL-82178 quiz graded notification: fix capability check
Also improve the scheduled task logging
2024-06-12 12:40:26 +01:00
Huong Nguyen d3890caed1 Merge branch 'MDL-81332-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-06-12 13:15:44 +07:00
Jun Pataleta 3f1f6192ea Merge branch 'MDL-81355-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-06-12 10:38:11 +08:00
Michael Aherne bf51502049 MDL-81355 phpdoc: Fix incorrect phpdocs on block_base. 2024-06-12 10:32:42 +08:00
Huong Nguyen 0d1cbfb3b7 Merge branch 'MDL-82001-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-12 09:01:39 +07:00
Huong Nguyen 6d717d9c8a Merge branch 'MDL-81522_404' of https://github.com/stronk7/moodle into MOODLE_404_STABLE 2024-06-12 08:46:59 +07:00
Paul Holden 4d4efaa72c MDL-82169 user: remove access to non-existent $options array. 2024-06-11 21:25:59 +01:00
ferranrecio b2ce12db1d MDL-82167 core: fix reactive debug panel 2024-06-11 16:16:25 +02:00
Sara Arjona 96c159f032 MDL-82162 tool: Switch to admin when executing runtestscenario by CLI
When the runtestscenario is executed via CLI, generators requiring a valid
$USER will fail.
This patch switches to the admin user, consistent with the approach used
in other simlar CLI scripts.
2024-06-11 13:27:18 +02:00
Ilya Tregubov c260c622b9 Merge branch 'MDL-81510-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-06-11 18:59:32 +08:00
Laurent David 71f5eee793 MDL-81510 core_courseformat: Fix activity highlight in index
* When directly accessing the module with the #module-xxx anchor
we should highlight the module as the current page item.
2024-06-11 12:47:38 +02:00
Eloy Lafuente (stronk7) 2a86638a15 MDL-81522 phpunit: Add a few non-void return types to tests
This is the final (3rd) commit, where we are adding missing
return types to a few tests (using @depends) which return
types are non-void, but something really returned (for consume
by the dependent test).
2024-06-11 12:18:05 +02:00
Eloy Lafuente (stronk7) 091b458c52 MDL-81522 phpunit: Add missing void return type to all tests #2
This commit includes more changes, all them also adding the :void
return type to unit tests missing them.

The difference is that all these changes, while also detected
perfectly by the moodle.PHPUnit.TestReturnType sniff, were not
auto-fixed (like the previous commit ones), because all them
do include some "return" statement and, for safety, we don't
fix them.

All the cases have been visually inspected and confirmed that
the existing "return" statements always belong to anon
functions within the test body and not the test own return statement.
2024-06-11 12:18:05 +02:00
Eloy Lafuente (stronk7) 1093256560 MDL-81522 phpunit: Add missing void return type to all tests
While this change is not 100% required now, it's good habit
and we are checking for it since Moodle 4.4.

All the changes in this commit have been applied automatically
using the moodle.PHPUnit.TestReturnType sniff and are, exclusively
adding the ": void" return types when missing.
2024-06-11 12:18:04 +02:00
Huong Nguyen 7b6070003a MDL-68540 tool_usertours: Remove hideif workaround
We don't need to use the group element to use hideif
for text editor element anymore
2024-06-11 15:32:47 +07:00
Huong Nguyen d376d8cdbf Merge branch 'MDL-68540-404' of https://github.com/davewoloszyn/moodle into MOODLE_404_STABLE 2024-06-11 15:32:23 +07:00
Angelia Dela Cruz 5541cd1af9 MDL-81332 core_course: Behat test for grade and activity reports display 2024-06-11 16:17:00 +08:00
Jun Pataleta dd345ab8ee Merge branch 'MDL-81428-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-06-11 13:41:49 +08:00
David Woloszyn 90c5adee7c MDL-68540 form: Correctly target editors in node tree
This fix solves the hideIf and disabledIf form conditions that were not
correctly targetting the editor due to a name attribute mismatch.
2024-06-11 13:06:12 +10:00
Paul Holden d5395c4f47 MDL-82155 core: define/correct third party library names. 2024-06-10 19:52:08 +01:00
Shamiso.Jaravaza 84a3e73aa0 MDL-80625 mod_bigbluebuttonbn: Fix param name 2024-06-10 10:13:35 -06:00
Pedro Jordao c0a966d944 MDL-69514 Core: Close popover when modal is closed
Currently in Firefox, if we opened a popover that was inside a modal
and closed the modal by pressing the ESC key, the popover remained on
the screen. With this change, we will ensure that popovers are closed
when the modal is closed.
2024-06-10 12:14:44 -03:00
Sara Arjona 844247aecf Merge branch 'MDL-81949-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-10 16:46:38 +02:00
Sara Arjona 90f138fced Merge branch 'MDL-81678-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-10 16:39:16 +02:00
Sara Arjona 6a46e9524b Merge branch 'MDL-70972-MOODLE_404_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_404_STABLE 2024-06-10 12:33:26 +02:00
Huong Nguyen 21b4aac782 MDL-81428 theme_boost: Match .disabled opacity with .text-muted 2024-06-10 17:08:22 +07:00
Huong Nguyen 83b9f0e29d MDL-81428 core: Display the correct status for the contact request 2024-06-10 17:08:22 +07:00
Ilya Tregubov 6d4a0cbcb2 Merge branch 'MDL-81510-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-06-10 13:31:56 +08:00
Paul Holden 06b9cbdefd MDL-81949 tool_replace: prompt user for unrecognised CLI parameters. 2024-06-07 11:41:03 +01:00
Paul Holden 2b4769bb73 MDL-81678 enrol: don't escape course name in welcome message. 2024-06-07 11:39:43 +01:00
Paul Holden e858c2e747 MDL-78773 report_stats: improve display of mode selection element.
Make use of existing theme selectors for navigation elements to style.
2024-06-07 11:34:17 +01:00
Paul Holden 222fb603c0 MDL-81781 report_log: escape description selectively on display/export.
Per cd85e090f3 all content was escaped, however we should only do that
when displaying the value in browser or exporting to file format which
supports HTML.
2024-06-07 11:30:18 +01:00
Paul Holden f2dbbfe66e MDL-81781 dataformat: public helper method to get writer instance. 2024-06-07 11:30:18 +01:00
Meirza 821f2a390c MDL-81644 calendar: The behaviour of event dates in the block calendar
There is a difference in the behaviour of the calendar block when it is on the calendar page and when it is not.
On the calendar page, when the user clicks on the date or link next/previous month or day name in the calendar block,
it will have the effect of changing the URL, which should not happen.

The patch also includes hiding popover after the user clicks the day number. When the user clicks on the date or
is focused on the date and then presses enter on the keyboard, the popover does not automatically close.
To fix this, I added an event type, "click", to be attached to the hidePopover function and added conditioning to
the target element when there was a "click" event.

An additional step was added to the Behat calendar for the click event to ease the testing process.

For the popover, I set the "animation" to false to avoid the random Behat failure caused by the slow animation.
2024-06-07 14:45:24 +07:00
Laurent David ac692ebbf6 MDL-81510 core_courseformat: Do not reset the scroll position
* Revert the change made in MDL-75762 which would wait and change
  course index selection depending on the actual scroll position
2024-06-07 09:39:32 +02:00
Laurent David 40960e49bc MDL-81510 core_courseformat: Expand course section to show activity
* When a course activity is specified via an anchor in the URL we
should expand the course content containing the activity
* When we point to a specific activity via an anchor in the URL we should
expand the course index (section) surrounding the actitity.
2024-06-07 09:39:32 +02:00
Andrew Nicols db07c09afc Moodle release 4.4.1 2024-06-07 14:55:41 +08:00
Jun Pataleta 70c8bfa038 weekly release 4.4+ 2024-06-06 22:30:32 +08:00
Jun Pataleta ccca8adbc1 NOBUG: Fixed file access permissions 2024-06-06 22:30:32 +08:00
Jun Pataleta 7e01d53de3 Merge branch 'MDL-81750-404' of https://github.com/davewoloszyn/moodle into MOODLE_404_STABLE 2024-06-06 22:06:30 +08:00
Jun Pataleta 3317a05ec9 Merge branch 'MDL-82045-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-06-06 22:06:29 +08:00
Leon Stringer b0dddbb02a MDL-81146 forms: Disable submit buttons in Chrome 2024-06-06 22:06:29 +08:00
Huong Nguyen 322dae8b9c MDL-81875 mod_data: Fix incorrect version number 2024-06-06 22:06:29 +08:00
Andrew Nicols f6be7e2a3e Merge branch 'MDL-81794-404' of https://github.com/meirzamoodle/moodle into MOODLE_404_STABLE 2024-06-06 22:06:29 +08:00
Huong Nguyen aca5d1d5c6 Merge branch 'MDL-81875-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-06-06 22:06:29 +08:00
Huong Nguyen 07367f22f1 Merge branch 'MDL-81749-404' of https://github.com/aanabit/moodle into MOODLE_404_STABLE 2024-06-06 22:06:28 +08:00
Huong Nguyen 0c47aa6a92 Merge branch 'MDL-81989-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-06-06 22:06:28 +08:00
meirzamoodle e23f603c41 MDL-81890 assign: confirm_sesskey fixed in view_fix_rescaled_null_grades 2024-06-06 22:06:28 +08:00
meirzamoodle 9af9711c0a MDL-81890 enrol_lti: Fix sesskey checks 2024-06-06 22:06:28 +08:00
meirzamoodle 30fadc3686 MDL-81890 course: Fix sesskey checks 2024-06-06 22:06:28 +08:00
meirzamoodle 756090ed79 MDL-81890 tool_moodlenet: Fix sesskey checks 2024-06-06 22:06:27 +08:00
Jun Pataleta 2630591338 MDL-81631 backup: Simplify logic using null coalescing operator 2024-06-06 22:06:27 +08:00
Jun Pataleta e00e4487a4 Merge branch 'MDL-81631_404' of https://github.com/santoshndev/moodle into MOODLE_404_STABLE 2024-06-06 22:06:27 +08:00
Jun Pataleta 64f1fd7d7b Merge branch 'MDL-81894-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-06-06 22:06:27 +08:00
Jun Pataleta 09b06bdb28 Merge branch 'MDL-78198-404' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-06-06 22:06:27 +08:00
Huong Nguyen 9e1723f4b8 Merge branch 'MDL-81865-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-06-06 22:06:26 +08:00
Jun Pataleta 3b4e2ae357 Merge branch 'MDL-82086-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-06 22:06:26 +08:00
Huong Nguyen d35b9dc7bb Merge branch 'MDL-81397-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-06 22:06:26 +08:00
Paul Holden 500cec5757 MDL-81778 mod_bigbluebuttonbn: access checks when getting meeting URL. 2024-06-06 22:06:26 +08:00
Stevani Andolo 891e9994b4 MDL-81412 calendar: Sanitise calendar event names 2024-06-06 22:05:53 +08:00
Paul Holden 1bff691a64 MDL-81857 user: don't check whether address is an identity field.
It can never be selected as one, so the previous comparison could
never pass.
2024-06-06 08:58:42 +01:00
David Woloszyn 1913cdb088 MDL-81739 tiny_noautolink: Remove URL checking when preventing auto-link 2024-06-06 15:06:04 +10:00
Andrew Nicols 83b3ee6212 MDL-82045 course: Destroy copy course modal instead of hiding it 2024-06-06 10:04:10 +08:00
Andrew Nicols 253c16b64d MDL-81894 core: system_clock should use the server timezone 2024-06-06 00:18:52 +08:00
Paul Holden 2ed6a57f36 MDL-80344 calendar: correct no subscriptions language string use.
Ensure expected parameters are present; avoid string concatenation.
2024-06-05 15:52:18 +01:00
Amaia Anabitarte af96d4eebe MDL-81749 core_completion: Let custom rules to return failed state 2024-06-05 15:55:28 +02:00
lameze 4e6de24f31 MDL-81989 install: remove unnecessary closing div tags 2024-06-05 14:02:56 +08:00
Paul Holden 7d1563333b MDL-82055 output: replace usage of named templatable interface.
It's not available during, and breaks, site installation. The output
class doesn't necessarily need it in 78db6bbce8, so switch to simple
templatable interface instead.
2024-06-05 14:02:54 +08:00
Cameron Ball f7988538b2 MDL-81774 curl: Strip auth headers when redirecting to different host 2024-06-05 02:41:19 +00:00
Jun Pataleta 6ba71820b1 Merge branch 'MDL-81982-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-06-05 10:29:17 +08:00
David Mudrák 61c5863b1a MDL-81982 lang: Fix strings order
Fixes the strings order in files where CI has detected the wrong order
of modified strings.
2024-06-05 10:25:06 +08:00
David Mudrák 0091b1a153 MDL-81982 lang: Use fixed strings in tests, too 2024-06-05 10:25:06 +08:00
Helen Foster b12afc89e4 MDL-81982 lang: Import fixed English strings (en_fix) 2024-06-05 10:25:06 +08:00
Huong Nguyen 844aef124c Merge branch 'MDL-81970-plagiarism_upgrade_txt-404' of https://github.com/leonstr/moodle into MOODLE_404_STABLE 2024-06-05 09:13:49 +07:00
Huong Nguyen 476a8fcb72 Merge branch 'MDL-81751-MOODLE_404_STABLE' of https://github.com/durzo/moodle into MOODLE_404_STABLE 2024-06-05 08:56:10 +07:00
David Woloszyn fe22fe1c83 MDL-81750 form: Add selector to match filemanager in group 2024-06-05 09:34:57 +10:00
Laurent David cb9527cd4f MDL-81875 mod_data: Revert database autolink removal
Autolinks are used in the database for text fields via
the auto-linking filter.
The revert is partial here because of changes made
in MDL-70384 to all field forms/templates

This reverts commit 42edaba5 from MDL-80949
2024-06-04 16:09:31 +02:00
Paul Holden e71fc4ff3b MDL-82086 theme_boost: consistent selector for textarea form controls.
In a similar vein to 31f6039635, we shouldn't assume form controls are
always descendents of `.mform` (e.g. the messaging drawer input).
2024-06-04 14:37:37 +01:00
Paul Holden 89fae608a6 MDL-81397 courseformat: define section editing capabilities.
This ensures consistency for current page instance, when rendering
content in response to fragment AJAX requests.
2024-06-04 09:00:17 +01:00
Philipp Memmel 2692097272 MDL-70972 format_singleactivity: Apply new behavior to behat test 2024-06-04 06:36:49 +00:00
Philipp Memmel 11ca67f853 MDL-70972 format_singleactivity: Show activities when creating course
Co-authored-by: Laurent David <lmedavid@gmail.com>
2024-06-04 06:36:49 +00:00
Huong Nguyen 34bcb7e70e Merge branch 'MDL-81936-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-04 13:16:01 +07:00
Huong Nguyen 608f7d6aa0 Merge branch 'MDL-81955-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-04 10:33:46 +07:00
Andrew Nicols c43d07d0cf Merge branch 'MDL-80208-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-04 11:07:20 +08:00
Juan Leyva ad46a97f53 MDL-80959 tool_mobile: Use different user keys for QR and auto login 2024-06-04 10:33:40 +08:00
Andrew Nicols da4e626ffa Merge branch 'MDL-82047-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-04 10:29:18 +08:00
Andrew Nicols cb4904ea25 Merge branch 'MDL-82055-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-06-04 09:50:36 +08:00
Paul Holden 4d5289e599 MDL-81534 tool_generator: standardize user creation language string. 2024-06-03 09:43:15 +01:00
Huong Nguyen 0efd3066a2 Merge branch 'MDL-81544-404' of https://github.com/rezaies/moodle into MOODLE_404_STABLE 2024-06-03 12:05:35 +07:00
Huong Nguyen 002b1aed6a Merge branch 'MDL-73735-M404_duplicate-line-course-rest-php' of https://github.com/ziegenberg/moodle into MOODLE_404_STABLE 2024-06-03 11:53:25 +07:00
Huong Nguyen c73c1bafc1 Merge branch 'MDL-82009-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-06-03 11:36:47 +07:00
Sara Arjona e56c732209 MDL-82009 course: Course blocks should be displayed in section page too 2024-05-31 15:16:55 +02:00
Paul Holden cff22cd5ab MDL-82055 output: replace usage of named templatable interface.
It's not available during, and breaks, site installation. The output
class doesn't necessarily need it in 78db6bbce8, so switch to simple
templatable interface instead.
2024-05-31 13:04:30 +01:00
Sara Arjona 2ec3b297d7 Merge branch 'MDL-81850-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-31 10:44:41 +02:00
Ilya Tregubov 1e480e2851 Merge branch 'MDL-77685-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-31 09:04:44 +08:00
Luca Bösch a22d64816d MDL-81865 mod_quiz: Display modal for 'Add random question' as mform.
This is a backport of MDL-81713.
2024-05-30 21:56:03 +02:00
Paul Holden 89d9032e4d MDL-81577 mod: correct arguments when formatting text for RSS. 2024-05-30 19:17:27 +01:00
Paul Holden f540fab1dc MDL-82047 analytics: remove 32-bit integer checks for maximum time. 2024-05-30 19:00:25 +01:00
Paul Holden a49c099ae5 MDL-82001 mod_quiz: respect user language in draft save message text. 2024-05-30 16:04:58 +01:00
Sara Arjona 1291869f90 weekly release 4.4+ 2024-05-30 17:00:26 +02:00
Jun Pataleta 7a420b6a34 Merge branch 'MDL-80831-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-05-30 18:25:50 +08:00
Huong Nguyen ff963d9feb MDL-80831 core: Add missing classname for privacy url 2024-05-30 17:17:13 +07:00
Paul Holden ad693b830a MDL-81850 availability_group: correctly retrieve groups for given user. 2024-05-30 10:15:47 +01:00
Huong Nguyen c2b0463539 Merge branch 'MDL-80973-404' of https://github.com/jleyva/moodle into MOODLE_404_STABLE 2024-05-30 10:38:06 +07:00
Andrew Nicols f0445d5cac MDL-68262 assignfeedback_editpdf: Correct args to make_request_directory 2024-05-30 09:54:08 +07:00
Sara Arjona 2debc731ef Merge branch 'MDL-81983_404' of https://github.com/lostrogit/moodle into MOODLE_404_STABLE 2024-05-29 14:07:31 +02:00
Sara Arjona 56aaf7a998 Merge branch 'MDL-81901-progress-cli-MOODLE_404_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_404_STABLE 2024-05-29 13:32:31 +02:00
Sara Arjona 86cb89c5fc Merge branch 'MDL-80911-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-05-29 13:19:22 +02:00
Jun Pataleta 9a75b24e1c Merge branch 'MDL-81779-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-29 17:02:01 +08:00
Andrew Nicols b19ce46723 MDL-68262 assignfeedback_editpdf: Update unit test for latest coding style 2024-05-29 16:19:41 +08:00
Andrew Nicols 370843c967 MDL-68262 assignfeedback_editpdf: Switch to request dirs 2024-05-29 16:19:41 +08:00
Andrew Nicols da15787ed0 Merge branch 'MDL-80831-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-05-29 14:27:20 +08:00
Jun Pataleta 801a2b9497 MDL-80831 theme: Set a vertical padding for footer links
This is to increase the target size of links within the footer and
meet WCAG 2.2 Level AA Success Criterion 2.5.8
2024-05-29 10:40:11 +08:00
Jun Pataleta 7a5bdf76b6 MDL-80831 gradereport_grader: Remove unnecessary setting of aria-hidden
- If an element is being hidden visually with `display: none;` (e.g. by
using the class `.d-none`), there's no need to set `aria-hidden` because
it is already hidden from the accessibility tree.
- Setting `aria-hidden=false` is also not recommended and it's better to
remove the `aria-hidden` attribute instead of setting it to false.
2024-05-29 10:40:11 +08:00
Jun Pataleta 63f7c6cc6a MDL-80831 behat: Re-enable target-size rule for accessibility tests 2024-05-29 10:40:11 +08:00
Brendan Heywood b35b012e9e MDL-81901 core: Fix progress bar bug in cli in non tty mode 2024-05-29 11:15:05 +10:00
Andrew Nicols 0204fbb810 Merge branch 'MDL-82015-404' of https://github.com/ak4t0sh/moodle into MOODLE_404_STABLE 2024-05-29 09:11:05 +08:00
Andrew Nicols 5cf7efb761 Merge branch 'MDL-81597-404' of https://github.com/roland04/moodle into MOODLE_404_STABLE 2024-05-28 23:49:59 +08:00
Andrew Nicols 2016d4c6dd MDL-81733 mod_lesson: Coding style fixes 2024-05-28 23:45:50 +08:00
Andrew Nicols aae18f59aa Merge branch 'MDL-81733-404' of https://github.com/izendegi/moodle into MOODLE_404_STABLE 2024-05-28 23:45:47 +08:00
Mikel Martín 4d23fe8a58 MDL-81597 theme_boost: Fix header bar alignment
- Refactot context_header class to implement named templatable so
render_context_header in core and theme_boost can be removed
- Refactor context_header to use templates
- Fix context header layout and styles
2024-05-28 16:33:21 +02:00
Arnaud Trouvé fcfcdd6508 MDL-82015 mod_bigbluebuttonbn: Fix date formatting during import 2024-05-28 15:24:26 +02:00
Andrew Nicols 45808a99b4 Merge branch 'MDL-82004-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-28 14:31:42 +08:00
Andrew Nicols e4acde27c9 Merge branch 'MDL-81822-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-28 14:05:58 +08:00
Andrew Nicols 5182b60391 Merge branch 'MDL-81870-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-28 14:00:15 +08:00
Huong Nguyen 23ab7d4973 Merge branch 'MDL-78768-M404_import-multiple-new-grade-items' of https://github.com/ziegenberg/moodle into MOODLE_404_STABLE 2024-05-28 12:32:26 +07:00
Andrew Nicols af8f13bac5 MDL-81897 tool_mobile: Coding style fix 2024-05-28 11:41:16 +08:00
Andrew Nicols e5b2b5e0ba Merge branch 'MDL-81897-404' of https://github.com/jleyva/moodle into MOODLE_404_STABLE 2024-05-28 11:40:53 +08:00
Andrew Nicols 9a6b07f0de Merge branch 'MDL-81757-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-28 10:25:26 +08:00
Andrew Nicols 11e53bf4b0 Merge branch 'MDL-81698_404' of https://github.com/stronk7/moodle into MOODLE_404_STABLE 2024-05-28 10:12:50 +08:00
Huong Nguyen 176caab765 Merge branch 'MDL-81915_404' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_404_STABLE 2024-05-28 08:57:45 +07:00
Andrew Nicols bd03886512 Merge branch 'MDL-78942-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-28 09:17:28 +08:00
Juan Leyva 6f6d2d9a0f MDL-80973 tool_policy: Fix edge case 2024-05-27 17:20:22 +02:00
Mikel Martín e6af0ea94e MDL-81597 renderer: Add page getter method to renderer_base 2024-05-27 13:27:05 +02:00
Eloy Lafuente (stronk7) 86b45212e8 MDL-81698 phpunit: Convert some skipped tests into useful ones
After some tests, it seems that we can safely cover
phpunit_util::reset_all_data() executing it within
own basic_test self tests.

That way we can confirm that the reset code is doing its job
and detecting unexpected changes at various levels (database,
globals, ...).

Note that, in order to catch the E_USER_WARNINGS, for PHPUnit 9.6
and up, we have to convert them to exceptions, because the notice/
warning/error expectations have been deprecated and will be removed
in PHPUnit 10. So we are using a trick, already used also by
advanced_test. And, no matter that we are repeating the trick
a few times, that's ok in order to have all its uses controlled.
2024-05-25 17:19:52 +02:00
Eloy Lafuente (stronk7) b2a485e244 MDL-81698 phpunit: Apply various fixes towards 1by1 execution
The changes here are heterogeneous:
- Include stuff that is not available (other test has included it).
  Sometimes local to a unit test, others in setupBeforeClass() or
  globally, ... depends on every case.
- Rename some tests (namespaces, test name, ...) towards getting it
  running.
- Amend small bits here and there.

Important note: I've left any "cosmetic" warning out from the
changes, only a few errors (like long array syntax) have been fixed.
2024-05-25 17:19:52 +02:00
Eloy Lafuente (stronk7) 80f521eed0 MDL-81698 phpunit: Uncomment some tests and make them skipped
There are a few tests in core that are commented since the
beginning. That's not useful at all, so with this commit we
are un-commenting them instead.

Note that this is an initial step to have them back with skipped
outcome. Later in this issue we'll decide about to keep them or
completely remove them (each test can have a different outcome).
2024-05-25 17:19:51 +02:00
Eloy Lafuente (stronk7) f14fdf23e3 MDL-81698 phpunit: New workflow to run tests 1by1 @ GitHub
This workflow just finds all the individual
tests available in core (all the test_ methods
in _test.php file) and runs them one by one,
with a total isolation, because each one is
executed by a different PHPUnit invocation..

Any test ending with error, will be reported
as part of the output.

Note that we are not using PHPUnit's own
isolation here, just running them one by one.
2024-05-25 17:19:51 +02:00
Anupama Sarjoshi 25724ebfbb MDL-81915 admin: Fix test_admin_output_new_settings_by_page unit test 2024-05-24 11:24:32 +01:00
Iñigo Zendegi c73623506d MDL-81733 lesson: Support filters on lesson activity link 2024-05-24 09:42:57 +02:00
meirzamoodle 7450f0e33f MDL-81794 cachestore_redis: Fix the TLS issue on the Redis 2024-05-24 14:28:10 +07:00
meirzamoodle 55163a6ba9 MDL-81794 core: Fix the TLS issue on the Redis 2024-05-24 14:28:10 +07:00
Ilya Tregubov 4e04339cbd weekly release 4.4+ 2024-05-24 10:51:59 +08:00
Andrew Nicols bf3562d13e MDL-78198 file: Stop sending the Accept-Charset header in curl
See notes on:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Charset

Warning: Do not use this header. Browsers omit this header and servers
should ignore it.

The Accept-Charset request HTTP header was a header that advertised a
client's supported character encodings. It is no longer widely used.

UTF-8 is well-supported and the overwhelmingly preferred choice for
character encoding. To guarantee better privacy through less
configuration-based entropy, all browsers omit the Accept-Charset
header.
2024-05-23 22:18:08 +08:00
Paul Holden aca3ad2008 MDL-82004 assignsubmission_onlinetext: no concatenation in lang strings. 2024-05-23 13:08:22 +01:00
Paul Holden f34e050e9b MDL-81870 core: re-factor duplicate plugin savepoint implementations. 2024-05-23 09:09:26 +01:00
Paul Holden c2eb42fc7b MDL-81870 core: validate component during upgrade task savepoint. 2024-05-23 09:04:24 +01:00
Huong Nguyen 625e015ff8 Merge branch 'MDL-81407_404' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_404_STABLE 2024-05-23 10:38:42 +07:00
Huong Nguyen 9d74cebd74 Merge branch 'MDL-81992_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-05-23 09:45:26 +07:00
Huong Nguyen 64ad970e5e Merge branch 'MDL-81862-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-23 08:47:48 +07:00
Tim Hunt f0fb54d907 MDL-81992 question bank: disable create question button until ready
Previously, you could click the button before it was ready, and that
just led to an error, which was very silly usability.
2024-05-22 16:26:05 +01:00
Paul Holden 5da8226f72 MDL-80208 cachestore_redis: ensure empty set many with TTL don't throw. 2024-05-21 22:36:46 +01:00
Santosh Nagargoje 2fcd7f93b9 MDL-81631 backup: Added null parameter fix 2024-05-21 17:06:21 +05:30
Daniel Ziegenberg 9b30118456 MDL-73735 course: remove duplicate line of code
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
Co-authored-by: Davo Smith <davo.smith@synergy-learning.com>
2024-05-21 13:30:24 +02:00
Huong Nguyen dd87304fcf Merge branch 'MDL-81652-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-05-21 17:33:50 +07:00
Huong Nguyen b08fbf99db Merge branch 'MDL-76765-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-05-21 17:29:22 +07:00
Carlos Castillo b3f708d4d1 MDL-81983 admin: Remove double capability check 2024-05-21 12:14:21 +02:00
Huong Nguyen 4572a114a9 Merge branch 'MDL-81538-404' of https://github.com/rezaies/moodle into MOODLE_404_STABLE 2024-05-21 16:31:51 +07:00
Paul Holden c889381be2 MDL-81862 mod_assign: add activity field files for backup/restore. 2024-05-21 09:06:01 +01:00
Ilya Tregubov 1e07a5eef6 Merge branch 'MDL-81318-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-21 12:49:20 +08:00
Shamim Rezaie 2c40c8554b Merge branch 'MDL-80599-404-2' of https://github.com/ilyatregubov/moodle into MOODLE_404_STABLE 2024-05-21 14:23:15 +10:00
Huong Nguyen 955f4f3bb7 Merge branch 'MDL-81948-404' of https://github.com/ferranrecio/moodle into MOODLE_404_STABLE 2024-05-21 10:03:12 +07:00
Huong Nguyen 1dca48371d Merge branch 'MDL-81904-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-21 09:43:45 +07:00
Huong Nguyen c0b9a52430 Merge branch 'MDL-80583-404' of https://github.com/stevandoMoodle/moodle into MOODLE_404_STABLE 2024-05-21 09:24:34 +07:00
Luca Bösch 462b8f9861 MDL-76765 qtype_ddmarker: Show multiple tries options correctly. 2024-05-20 22:13:40 +02:00
Luca Bösch 242ab5d5aa MDL-76765 question: Show multiple tries options correctly. 2024-05-20 22:13:39 +02:00
Luca Bösch bf8a28b220 MDL-81652 qtype_multianswer: Tackle Bootstrap 5 compatibility. 2024-05-20 21:30:18 +02:00
Paul Holden 20d6ffb9ee MDL-81730 assignsubmission_file: deterministic submission file order. 2024-05-20 20:16:18 +01:00
Paul Holden a76a1e3f5c MDL-81822 tool_licensemanager: slightly relax license shortname type.
The "*-4.0" license versions could not be managed currently.
2024-05-20 17:44:47 +01:00
Paul Holden fbd18d8ead MDL-81761 gradingform_guide: remove duplicate click of frequent comment. 2024-05-20 17:40:45 +01:00
Leon Stringer 78b3369ca0 MDL-81970 plagiarism: Callbacks wrong way round 2024-05-20 11:01:33 +01:00
Stevani Andolo 2f0513b91c MDL-80583 communication_matrix: Ignore unreachable matrix server 2024-05-20 16:46:58 +08:00
Paul Holden b25405fd56 MDL-81904 mod_feedback: show export questions only if any present. 2024-05-20 09:27:38 +01:00
Huong Nguyen 5565f47e9b MDL-80911 Course: Fix missing required files 2024-05-20 10:08:02 +07:00
Huong Nguyen 2848c7d6be Merge branch 'MDL-81929-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-20 09:20:11 +07:00
Anupama Sarjoshi 4e151ddf30 MDL-81407 qbank_columnsortorder: Fix error displaying hiddencols
When the question custom fields were deleted, if there were any
hidden columns in qbank Column sort order referring those fields they
were throwing 'Custom field does not exist' exception. Changes done to
ignore such fields and display valid hiddencols, as these references
were breaking the qbank Column sort order and Question bank pages.
2024-05-19 08:58:45 +01:00
Daniel Ziegenberg 4b9de301c3 MDL-78768 grade: fix import multiple new grade items
Prior to this change, when importing grades from .csv (or another
method) and you choose to map the grades to a 'New grade item', you get
the following error message:
```
"Mapping collision detected - two fields maps to the same grade item
new."
```
A workaround existed that required users to import one column at a time,
which was cumbersome.

This change fixes importing multiple new grade items and adds a behat
test.

Co-authored-by: hehe009 <max_kan@hotmail.com>
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2024-05-17 21:22:09 +02:00
Paul Holden dbffeb334b MDL-81955 assignfeedback_editpdf: ensure ghostscript present in tests. 2024-05-17 10:25:27 +01:00
ferranrecio 165709ff7d MDL-81948 theme: fix fallback layout logic
Finding the page layout fallback was trying to get a default layout from
the ancient theme called "base". This default theme do not exists
anymore and defining a wrong layout in a theme is a code mistake that
should not be bypassed.
2024-05-17 10:43:35 +02:00
Ilya Tregubov 0a75d57b13 MDL-80599 enrol_guest: Support password update in csv course upload 2024-05-17 11:01:22 +08:00
Ilya Tregubov 3182c71093 MDL-80599 enrol_self: Support password update in csv course upload 2024-05-17 11:01:22 +08:00
Ilya Tregubov 56fb55683a MDL-80599 core: Refactor enrol methods
Move update instance logic to its own method and cover with tests.
Also update enrol plugins to work woth new methods.
2024-05-17 11:01:22 +08:00
Ilya Tregubov 78229db6a1 MDL-80599 enrol_self: Check group key regardless of policy used
Password policy is not connected to using of group key enrolment
2024-05-17 11:01:22 +08:00
Paul Holden d04044bb0a MDL-81936 editor_tiny: handle default filepicker/draftitem config.
If they aren't passed in editor options config, ensure they still
observe the registered option processor (type) for each.
2024-05-16 18:49:46 +01:00
Jordan Tomkinson c1b4ccc4c6 MDL-81751 ddl: new reserved keywords in Aurora MySQL database engine 2024-05-16 13:41:29 +01:00
Paul Holden 5db3c95e29 MDL-81929 user: reset the selected bulk action when nothing selected.
In the case of bulk user actions that are implemented via Javascript,
we should ensure that once they are complete the selected action is
reset to its default state of "Choose..." so that it can be selected
again.
2024-05-16 13:00:26 +01:00
Huong Nguyen bcae2164ac weekly release 4.4+ 2024-05-16 18:25:19 +07:00
Huong Nguyen 207eed1190 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-05-16 18:25:16 +07:00
Huong Nguyen c948d9e40e Merge branch 'MDL-81598-404' of https://github.com/laurentdavid/moodle into MOODLE_404_STABLE 2024-05-16 09:51:05 +07:00
Huong Nguyen 9ccdee7687 Merge branch 'MDL-81543-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-16 09:38:53 +07:00
Huong Nguyen 1a3e68a956 Merge branch 'MDL-79838-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-05-16 09:21:54 +07:00
Paul Holden dfde819c8b MDL-81287 mod_forum: observe default discussion paging value. 2024-05-15 13:23:17 +01:00
Paul Holden ffe67fc6df MDL-81318 assignsubmission_onlinetext: ignore blank content download. 2024-05-15 09:33:18 +01:00
Angelia Dela Cruz 8a60437bea MDL-79838 mod_h5pactivity: Behat for H5P activity grade settings control 2024-05-15 14:33:21 +08:00
Shamim Rezaie c62143a5df Merge branch 'MDL-81530-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-05-15 15:12:59 +10:00
Huong Nguyen 691f2c8950 Merge branch 'MDL-51360-404-2' of https://github.com/ilyatregubov/moodle into MOODLE_404_STABLE 2024-05-15 10:44:18 +07:00
Ilya Tregubov 6ae2c78e9f Merge branch 'MDL-70441-404-fix' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-05-15 09:30:40 +08:00
Simey Lameze 7a4ea4dd65 MDL-70441 mod_assign: change condition to check if variable is not empty 2024-05-15 09:15:16 +08:00
Shamim Rezaie 217a7af933 MDL-81544 theme_boost: Don't change the display of .visibleifjs elements 2024-05-15 04:13:24 +10:00
Sara Arjona df176b292a Merge branch 'MDL-81805-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-05-14 17:05:38 +02:00
Juan Leyva fa5a564a17 MDL-81897 tool_mobile: Force partitioned cookies on inapp browser 2024-05-14 13:44:15 +02:00
Ilya Tregubov dd1d91486d Merge branch 'MDL-70441-404' of https://github.com/kevpercy/moodle into MOODLE_404_STABLE 2024-05-14 14:09:05 +08:00
David Balch f9ab045794 MDL-70441 assign: Freeze workflow states not available to user.
Prior to this, a custom grader role that has mod/assign:grade but not
mod/assign:releasegrades or mod/assign:managegrades would see a select
with only the states available to them - not the current state, and
could reset a grade from released to Not marked/In marking/Marking
completed.
2024-05-14 12:55:00 +08:00
Huong Nguyen 32bf836fec Merge branch 'MDL-81434-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-14 08:52:47 +07:00
Paul Holden e205d5accc MDL-81543 qtype_calculated: correct component of language string. 2024-05-13 10:43:44 +01:00
Laurent David 9febdf9b0f MDL-81598 theme_boost: Fix quiz review options tooltips 2024-05-13 08:26:29 +02:00
Ilya Tregubov ce8695ff1f Merge branch 'MDL-81867-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-13 09:29:09 +08:00
AMOS bot 3e80d6ee79 Automatically generated installer lang files 2024-05-12 00:14:32 +00:00
Paul Holden 513bafbcfd MDL-81867 qbank_columnsortorder: correct/cleanup previous upgrade step. 2024-05-10 09:16:46 +01:00
Ilya Tregubov 7fc818ebb8 MDL-51360 core_grades: Improve documentation of grade_get_grades(). 2024-05-10 09:17:03 +08:00
Ilya Tregubov 0219831af4 MDL-51360 mod_quiz: Don't do full course recalculation.
It seems it was never needed. We only need to know if just one
grade is overridden and its value.
2024-05-10 09:17:03 +08:00
Ilya Tregubov 477aa7c750 weekly release 4.4+ 2024-05-10 09:09:33 +08:00
Paul Holden 47e844d0f4 MDL-81757 editor_tiny: preserve unicode character escape in errors.
Removing backslashes from the XHR response led to errors including
unicode escape codes being broken.
2024-05-09 20:13:14 +01:00
Amaia Anabitarte c44c1b5345 MDL-81601 core_course: Add course index completion status behats 2024-05-09 19:43:20 +08:00
Jun Pataleta 28e9e58577 Merge branch 'MDL-81713-404' of https://github.com/junpataleta/moodle into MOODLE_404_STABLE 2024-05-09 12:02:19 +08:00
Jun Pataleta 6a628bcd3a MDL-81713 mod_quiz: Use accessible fieldset name for Behat test 2024-05-09 11:56:22 +08:00
Luca Bösch 10e44e40d9 MDL-81713 mod_quiz: Add random question 'Parent category' help icon. 2024-05-09 11:56:09 +08:00
Jun Pataleta a625583b11 Merge branch 'MDL-80972-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-05-09 11:43:23 +08:00
info@eWallah.net 810ab99d7d MDL-80972 behat: Behat check_server_status can provide better info. 2024-05-09 11:07:31 +08:00
Huong Nguyen 82a76a1b69 Merge branch 'MDL-81423_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-05-09 09:55:24 +07:00
Huong Nguyen ddca055e0d Merge branch 'MDL-80453-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-05-09 09:47:55 +07:00
Ilya Tregubov b0a11d12ca Merge branch 'MDL-81601-404' of https://github.com/aanabit/moodle into MOODLE_404_STABLE 2024-05-09 10:46:17 +08:00
Huong Nguyen 996564f803 Merge branch 'MDL-79702-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-05-09 09:33:39 +07:00
Paul Holden 2512e6b09e MDL-77685 grade: remove Behat specific report rendering hacks.
These changes follow the same approach as that taken elsewhere in
the Gradebook in 3643f48e0f.
2024-05-08 12:29:43 +01:00
Angelia Dela Cruz d5d6b0f7f9 MDL-80453 mod_glossary: Behat for different glossary format display 2024-05-08 17:26:13 +08:00
Amaia Anabitarte 52b4f3bb1d MDL-81601 core_course: Fix course index completion status 2024-05-08 08:25:57 +02:00
Marina Glancy ad9d4bb4af MDL-80907 various: fixes to incorrect column selectors in behat 2024-05-07 19:28:46 +01:00
Marina Glancy 569d9dfe39 MDL-80907 behat: be more precise in selecting table rows 2024-05-07 19:28:37 +01:00
Paul Holden 1c2f5dc1df MDL-81434 reportbuilder: ensure filter/condition parameter uniqueness.
This change fixes an edge case that could be triggered by creating a
custom report that contained a filter instance that was active as both
a filter and condition, where the filter instance provides parameters
to it's SQL fragment.

There is only one such filter present currently with which we can test
this, see 2f9001cbe9.
2024-05-07 15:03:16 +01:00
Paul Holden 75d95bc4b8 Merge branch 'MDL-81764_404' of https://github.com/lostrogit/moodle into MOODLE_404_STABLE 2024-05-07 14:43:03 +01:00
Paul Holden a6c17af4c7 Merge branch 'MDL-81776-404' of https://github.com/dravek/moodle into MOODLE_404_STABLE 2024-05-07 14:33:10 +01:00
Huong Nguyen 7ac2d7f598 MDL-81530 editor_tiny: Better browsers compatibility
The TinyMCE.remove() function is killing other events on Firefox
We need to modify the setupForElementId() to make TinyMCE to
remove itself outside of the event loop
2024-05-07 14:21:22 +07:00
Simey Lameze c4533967d1 MDL-81805 behat: remove unnecessary @javascript from tests 2024-05-07 09:10:19 +08:00
Paul Holden 5bd4a81e09 MDL-81779 theme_boost: more liberal selector for form-control elements.
There are various pages (e.g. many related to permissions), where the
form element is not a descendent of `.mform` - so the previous selector
never matched them and led to unstyled inputs.

Co-authored-by: Mikel Martín <mikel@moodle.com>
2024-05-06 20:34:41 +01:00
Simey Lameze 72f0a11f0d MDL-79702 behat: improvements and fixes to new tests
This commit adds the handling of tags as string separated by comma
to forum and glossary modules.
2024-05-06 20:02:23 +08:00
Angelia Dela Cruz 7b873db958 MDL-79702 core_tag: Behat for activity tags deletion during course reset 2024-05-06 20:02:23 +08:00
Huong Nguyen b83cd14d25 Merge branch 'MDL-80589-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-05-06 09:37:09 +07:00
Ilya Tregubov 4b0ca64617 Merge branch 'MDL-81656-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-06 09:55:34 +08:00
David Carrillo 7741ae3094 MDL-81776 reportbuilder: Check tagarea enabled when check availability
- When checking availability for a column/filter we need to assert
tagarea is enabled because it can return also null value.
2024-05-03 12:22:46 +02:00
Tim Hunt aa1dc46bc8 MDL-81423 assign: improve valdation message for submissionstatement 2024-05-03 10:33:46 +01:00
Shamim Rezaie 27dd2e751f MDL-81538 theme_boost: Fix popover arrow direction in RTL 2024-05-03 13:03:30 +10:00
Ilya Tregubov f88dbfcafc weekly release 4.4+ 2024-05-03 08:22:32 +08:00
Ilya Tregubov aaf45097b7 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-05-03 08:22:29 +08:00
AMOS bot adb0352ef4 Automatically generated installer lang files 2024-05-03 00:10:48 +00:00
Carlos Castillo da4486b202 MDL-81764 reportbuilder: Include full name filter to Users system report 2024-05-02 13:56:47 +02:00
Simey Lameze 778470818a MDL-80589 behat: fixes and improvements to new tests 2024-05-02 13:33:44 +08:00
Angelia Dela Cruz 4625eeb998 MDL-80589 qtype_numerical: Behat to add, edit, preview numeric question 2024-05-02 13:33:44 +08:00
Huong Nguyen 4e7d555c18 Merge branch 'MDL-81587_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-05-02 09:37:58 +07:00
Huong Nguyen 8b7f262aca Merge branch 'MDL-81611_404_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_404_STABLE 2024-05-02 09:02:11 +07:00
Huong Nguyen d33dd13fd5 Merge branch 'MDL-79851-404' of https://github.com/lameze/moodle into MOODLE_404_STABLE 2024-05-01 16:10:54 +07:00
Angelia Dela Cruz a548bccf18 MDL-79851 mod_h5pactivity: Behat for h5p activity access control 2024-05-01 14:26:10 +08:00
Huong Nguyen 9977c07a69 Merge branch 'MDL-81621-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-05-01 10:59:03 +07:00
Sara Arjona eedb5fde7a Merge branch 'MDL-81724-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-30 16:38:04 +02:00
Tim Hunt eabc15f983 MDL-81587 quiz: fix layout of the add/edit random UI
Some of the removed CSS seems no longer relevant now that we have
customisation options for the layout of the question bank.
2024-04-30 15:25:11 +01:00
Sara Arjona 18ac43934a Merge branch 'MDL-78889-404' of https://github.com/ilyatregubov/moodle into MOODLE_404_STABLE 2024-04-30 16:05:12 +02:00
Sara Arjona 35914200b5 MDL-80571 tiny_premium: Fix version 2024-04-30 15:45:39 +02:00
Sara Arjona 48c064505e Merge branch 'MDL-81632-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-30 15:09:34 +02:00
Sara Arjona 417fbe1534 Merge branch 'MDL-80571-404' of https://github.com/davewoloszyn/moodle into MOODLE_404_STABLE 2024-04-30 15:05:56 +02:00
Paul Holden c70ceb5f7b MDL-81724 editor_tiny: remove whitespace from block formats syntax.
Ensures that the values are subsequently translated correctly. Workaround
for upstream bug: https://github.com/tinymce/tinymce/pull/9599

Co-authored-by: Andrew Nicols <andrew@nicols.co.uk>
2024-04-30 09:26:17 +01:00
Huong Nguyen c4735904e5 Merge branch 'MDL-79149-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-30 11:48:13 +07:00
Huong Nguyen 0792e7bdd9 Merge branch 'MDL-81717-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-04-30 11:38:11 +07:00
Huong Nguyen eaf09ebbc4 Merge branch 'MDL-81707-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-30 10:14:44 +07:00
Ilya Tregubov d620ee8cdf Merge branch 'MDL-77272-404' of https://github.com/SergioComeron/moodle into MOODLE_404_STABLE 2024-04-30 10:18:21 +08:00
Huong Nguyen f7124a4a95 MDL-81610 course: Update upgrade.txt 2024-04-30 09:12:17 +07:00
Huong Nguyen 34f1f22b00 Merge branch 'MDL-81610_404_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_404_STABLE 2024-04-30 09:01:19 +07:00
David Woloszyn a95ac513bf MDL-80571 tiny_premium: Premium plugins can be individually enabled 2024-04-30 09:40:42 +10:00
Sara Arjona a829242d47 MDL-81717 h5p: Improve robustness content type fetching
Strengthen code to ensure retrieval of all content types, despite
failures.
2024-04-29 12:33:38 +02:00
Paul Holden 2479bc2042 MDL-81707 availability_grade: fix alignment of condition checkboxes. 2024-04-29 10:38:41 +01:00
Paul Holden 67376511ac MDL-81656 h5p: correct content editing URL parameter handling. 2024-04-29 09:22:21 +01:00
Paul Holden b65b4892ae MDL-81621 mod_bigbluebuttonbn: remove reflection setAccessible call.
See 361dfe8145 for context.
2024-04-29 09:21:19 +01:00
Ilya Tregubov be159037d4 MDL-78889 gradereport_user: Fix pass/fail icon for totals
When the category has a 'grade to pass' set, the pass/fail icon
was displayed even when the category total grade values was hidden.
2024-04-29 14:44:28 +08:00
Ilya Tregubov eccadb67b7 MDL-81380 qbank_columnsortorder: Add type and return value hint 2024-04-29 10:47:59 +08:00
Ilya Tregubov 94d8b7f040 Merge branch 'MDL-81380_404' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_404_STABLE 2024-04-29 10:47:06 +08:00
Huong Nguyen c6bf1efac6 Merge branch 'MDL-80849-404' of https://github.com/davewoloszyn/moodle into MOODLE_404_STABLE 2024-04-29 08:55:27 +07:00
Ilya Tregubov 50c7842d73 Merge branch 'MDL-80597-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-29 09:46:14 +08:00
Ilya Tregubov 48597285cd Merge branch 'MDL-81697-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-29 09:22:27 +08:00
David Woloszyn e13fe01c7b MDL-80849 communication_matrix: Prevent numeric usernames 2024-04-29 10:49:32 +10:00
Anupama Sarjoshi 1542a9f9e1 MDL-81380 qbank_columnsortorder: Add upgrade.php
Before Moodle 4.3, config_plugins settings for qbank_columnsortorder
(disabledcol, enabledcol) had a value like
qbank_statistics\columns\facility_index,
qbank_statistics\columns\discriminative_efficiency, ...
In Moodle 4.3, the values are stored as
qbank_statistics\columns\facility_index-facility_index.
So updating the old values to match the new format.
2024-04-26 17:12:45 +01:00
Paul Holden 310b932482 MDL-79149 report_participation: more resilient activity access test.
Use the "Forum" module rather than the "Book" module, because the latter
emits two events when a student views it - if these two events happened
either side of a single second, then the report  would count two distinct
views (when it was trying to assert only one).
2024-04-26 16:08:11 +01:00
Paul Holden edf923e38e MDL-80597 mod_quiz: simplify filtering by tags Behat assertions.
The initial filtering for category was redundant, as it's applied
by default. While present it also caused reproducible failures on
CI due to timing issues when trying to apply multiple filters.
2024-04-26 10:27:06 +01:00
Huong Nguyen 95a5cb8038 Merge branch 'MDL-78433-404' of https://github.com/aanabit/moodle into MOODLE_404_STABLE 2024-04-26 16:19:53 +07:00
Huong Nguyen 771786ad4d Merge branch 'MDL-81641_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-04-26 16:03:54 +07:00
Sara Arjona 5f6b32c4cb Merge branch 'MDL-81581_404' of https://github.com/stronk7/moodle into MOODLE_404_STABLE 2024-04-26 10:48:29 +02:00
Sara Arjona 8ee732f391 Merge branch 'MDL-77445-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-04-26 10:40:29 +02:00
Paul Holden 21e6eea20e MDL-81697 qtype_ordering: correctly reference feedback file areas. 2024-04-25 21:38:15 +01:00
Eloy Lafuente (stronk7) 1dbc78253c MDL-81581 phpunit: Apply the new method to all remaining cases
After discussing it in the issue, we have agreed to apply
the new phpunit_util::normalise_line_endings() method to
all the remaining cases (within tests!) where the manual
replacement was being done. This commits achieves that.

Note that I've looked for both str_replace() and preg_replace()
cases, but only the former had cases worth converting. All the
later ones are different and cannot be replaced by the new
utility method.
2024-04-25 18:52:25 +02:00
Eloy Lafuente (stronk7) c9d48f6f25 MDL-81581 phpunit: Create the normalise_line_endings() method
And apply it to all the obvious places related with the issue.

Note that surely there are way more in code base, but it's
out of scope for this issue.
2024-04-25 18:52:25 +02:00
Eloy Lafuente (stronk7) 894ee17f53 MDL-81581 phpunit: Move multiple assert_same_xml() to common one 2024-04-25 18:52:25 +02:00
Mark Johnson cbdfc83b69 MDL-81610 course: Optimise core_courseformat\external\get_state
core_courseformat\external\get_state calls export_for_tempalte for each
course module, which in turn calls completion_info::is_tracked_user()
for the current user on the current course. The result of this call will
be the same for every course module, so does not need to be called what
may be several hundred times.

This change allows the result of is_tracked_user to be passed to the cm
state object, then calls it once and passes it to each cm's object. If
it is not passed in, it will be computed on demand as before.
2024-04-25 16:15:21 +01:00
Mark Johnson 6c484f9fc8 MDL-81611 assign: Close session early in gradingpanel fragment 2024-04-25 16:14:26 +01:00
SergioComeron 6de35b2623 MDL-77272 report: Enable module level report options 2024-04-25 17:13:03 +02:00
Sara Arjona f0c1a3789d weekly release 4.4+ 2024-04-25 15:43:27 +02:00
Sara Arjona 8f0f474882 Merge branch 'install_404_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_404_STABLE 2024-04-25 15:43:24 +02:00
Philipp Imhof 452cf5c72d MDL-80087 Questions: warn if preload_all_step_users was not called
Co-authored-by: Tim Hunt <T.J.Hunt@open.ac.uk>
2024-04-25 09:37:47 +07:00
Paul Holden dd88b540c2 MDL-81632 block_recentlyaccesseditems: deterministic item ordering.
Behat tests of this functionality could trigger the unlikely (in real
world usage) scenario where a user has an identical "timeaccess" value
for multiple course activities.

This led to random failures in said tests when the DB ordered items in
apparently random order, where the "timeaccess" value was equal.
2024-04-24 20:57:36 +01:00
Sara Arjona 6a04c121af Merge branch 'MDL-77998-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-04-24 14:47:59 +02:00
Angelia Dela Cruz 83eb2a624c MDL-77998 Behat: Add behat coverage for preferences navigation 2024-04-24 19:38:50 +08:00
Huong Nguyen 1d6bee488d Merge branch 'MDL-81627_404' of https://github.com/timhunt/moodle into MOODLE_404_STABLE 2024-04-24 15:26:05 +07:00
Tim Hunt 14574fdb56 MDL-81301 quiz: improve performance of deleting a quiz 2024-04-24 15:19:23 +07:00
Angelia Dela Cruz aa213563e7 MDL-77445 Behat: Coverage for activity chooser navigation 2024-04-24 15:38:05 +08:00
Jun Pataleta 1d01c74390 Merge branch 'MDL-81570-404' of https://github.com/sarjona/moodle into MOODLE_404_STABLE 2024-04-24 14:40:39 +08:00
ferranrecio 0e70a88d03 MDL-81575 core_courseformat: fix interactive section visibility badge 2024-04-24 12:37:32 +08:00
Jun Pataleta 49b666b670 Merge branch 'MDL-81567-404' of https://github.com/lucaboesch/moodle into MOODLE_404_STABLE 2024-04-24 12:21:59 +08:00
Mikel Martín 4c1beb921f MDL-81460 theme_boost: Fix loading spinner wobbles 2024-04-24 12:11:01 +08:00
Huong Nguyen dcb43cf3b0 Merge branch 'MOODLE_404_MDL-81613' of https://github.com/danielneis/moodle into MOODLE_404_STABLE 2024-04-24 09:59:59 +07:00
Huong Nguyen aa71fcfb7f Merge branch 'MDL-81564-404' of https://github.com/HuongNV13/moodle into MOODLE_404_STABLE 2024-04-24 08:58:03 +07:00
Laurent David 53557c3be1 MDL-81564 mod_data: Remove duplicate error messages
* When a field is missing the error is duplicated for all field
subsequently added to the database
2024-04-24 08:54:58 +07:00
Ilya Tregubov 16f7008c68 Merge branch 'MDL-81274-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-24 09:44:17 +08:00
Huong Nguyen 291a5449eb Merge branch 'MDL-80107-404' of https://github.com/andelacruz/moodle into MOODLE_404_STABLE 2024-04-24 08:35:50 +07:00
Angelia Dela Cruz 42d52002ee MDL-80107 gradingform: Behat test for defining marking guide 2024-04-24 09:03:58 +08:00
Tim Hunt c9b7b67fad MDL-81641 question: fix random question loader draft state tests 2024-04-23 18:25:24 +01:00
Daniel Neis Araujo 8a2929c1a9 MDL-81613 report_log: fix user fullname export for log report 2024-04-23 14:05:07 -03:00
Amaia Anabitarte 8f53f30e02 MDL-78433 course: Remove duplicated course search form 2024-04-23 16:23:13 +02:00
Sara Arjona 9ea7607613 Merge branch 'MDL-81209-main' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-04-23 15:36:42 +02:00
Sara Arjona 26a607e8a3 Merge branch 'MDL-81578-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-23 15:13:46 +02:00
Sara Arjona 4378d1dadc Merge branch 'MDL-81457-main' of https://github.com/andrewnicols/moodle into MOODLE_404_STABLE 2024-04-23 14:57:03 +02:00
Sara Arjona 582eb88404 MDL-81570 tiny_premium: Add missing lang string 2024-04-23 12:43:40 +02:00
Sara Arjona ec0e1d74a0 Merge branch 'MDL-81603-404' of https://github.com/paulholden/moodle into MOODLE_404_STABLE 2024-04-23 12:38:44 +02:00
Tim Hunt 82eacb2e48 MDL-81627 quiz restore: fix restore of grade item for each slot 2024-04-23 11:34:16 +01:00
Jun Pataleta 8b976e77ce MDL-81616 upgrade: add the 4.4.0 separation line to all upgrade scripts 2024-04-23 15:24:02 +10:00
Paul Holden cab8184fcb MDL-81274 mod_data: observe current approved value on record import. 2024-04-22 12:48:54 +01:00
Paul Holden 7b18faed92 MDL-78942 tool_mfa: replace deprecated coding standards annotation.
Replace with equivalent `phpcs` annotation as appropriate, same as
done previously in a5c91474ee (see that commit for further context).
2024-04-22 12:29:15 +01:00
Paul Holden 4adb2a7695 MDL-81578 user: disable form change checker for bulk user actions.
When bulk user actions are used from the "Browse users" report.
2024-04-22 12:22:57 +01:00
Paul Holden 410b333e47 MDL-81603 reportbuilder: don't rely on real entity in datasource test. 2024-04-22 11:24:10 +01:00
AMOS bot a8908c1a50 Automatically generated installer lang files 2024-04-22 00:10:33 +00:00
Luca Bösch b0fec7d82b MDL-81567 mod_quiz: Adopt edit section title pencil icons size. 2024-04-20 23:05:11 +02:00
14733 changed files with 544164 additions and 610319 deletions
+1 -3
View File
@@ -1,5 +1,3 @@
**/yui/build/** -diff
**/amd/build/** -diff
**.js.map -diff
**-min.js -diff
**.min.js -diff
lib/dml/oci_native_moodle_package.sql text eol=lf
+1 -1
View File
@@ -1,2 +1,2 @@
# Primary donations pages.
custom: ["https://moodle.com/donations/", "https://fund.moodle.org"]
custom: ["https://moodle.com/donations/", moodle.org]
+1 -1
View File
@@ -45,7 +45,7 @@ $CFG->admin = 'admin';
$CFG->directorypermissions = 0777;
// Debug options - possible to be controlled by flag in future.
$CFG->debug = (E_ALL); // DEBUG_DEVELOPER.
$CFG->debug = (E_ALL | E_STRICT); // DEBUG_DEVELOPER.
$CFG->debugdisplay = 1;
$CFG->debugstringids = 1; // Add strings=1 to url to get string ids.
$CFG->perfdebug = 15;
+2 -2
View File
@@ -85,7 +85,7 @@ jobs:
- name: Setting up DB pgsql
uses: m4nu56/postgresql-action@v1
with:
postgresql version: 14
postgresql version: 13
postgresql db: test
postgresql user: test
postgresql password: test
@@ -93,7 +93,7 @@ jobs:
- name: Setting up PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.4
php-version: 8.3
ini-values: max_input_vars=5000
coverage: none
+8 -11
View File
@@ -15,11 +15,11 @@ on:
default: ''
env:
php: 8.4
php: 8.3
jobs:
Grunt:
runs-on: ubuntu-24.04
runs-on: ubuntu-22.04
steps:
- name: Checking out code
@@ -61,13 +61,13 @@ jobs:
matrix:
include:
# MySQL builds always run with the lowest PHP supported version.
- os: ubuntu-24.04
php: 8.2
- os: ubuntu-22.04
php: 8.1
extensions:
db: mysqli
# PostgreSQL builds always run with the highest PHP supported version.
- os: ubuntu-24.04
php: 8.4
- os: ubuntu-22.04
php: 8.3
db: pgsql
steps:
@@ -76,7 +76,7 @@ jobs:
uses: moodlehq/mysql-action@v1
with:
collation server: utf8mb4_bin
mysql version: 8.4
mysql version: 8.0
mysql database: test
mysql user: test
mysql password: test
@@ -88,7 +88,7 @@ jobs:
if: ${{ matrix.db == 'pgsql' }}
uses: m4nu56/postgresql-action@v1
with:
postgresql version: 14
postgresql version: 13
postgresql db: test
postgresql user: test
postgresql password: test
@@ -122,6 +122,3 @@ jobs:
dbtype: ${{ matrix.db }}
phpunit_options: ${{ secrets.phpunit_options }}
run: vendor/bin/phpunit $phpunit_options ${{ inputs.phpunit_extra_options }}
- name: Git status
run: git status
+1 -1
View File
@@ -10,7 +10,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest]
php: [8.2, 8.4]
php: [8.1, 8.3]
steps:
- name: Construct repository URL
run: echo "REPOSITORY_URL=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}" >> $GITHUB_ENV
+6 -6
View File
@@ -8,7 +8,7 @@ on:
required: false
default: ''
env:
php: 8.4
php: 8.3
jobs:
Grunt:
@@ -51,7 +51,7 @@ jobs:
matrix:
include:
- os: windows-latest
php: 8.4
php: 8.3
# Ideally we should use mysql/mariadb, but they are 4x slower without tweaks and configuration
# so let's run only postgres (1.5h vs 6h) only, If some day we want to improve the mysql runs,
# this is the place to enable them.
@@ -59,16 +59,16 @@ jobs:
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium, zip
- os: windows-latest
php: 8.2
php: 8.1
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium, zip
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: shogo82148/actions-setup-mysql@v1
with:
mysql-version: 8.4
mysql-version: 8.0
user: test
password: test
@@ -128,7 +128,7 @@ jobs:
- name: Setting up redis service
run: |
choco install redis --version 5.0.7 --no-progress
choco install redis-64 --version 3.0.503 --no-progress
nssm install redis redis-server
nssm start redis
-2
View File
@@ -58,5 +58,3 @@ moodle-plugin-ci.phar
.hugo_build.lock
phpcs.xml
jsconfig.json
UPGRADING-CURRENT.md
.phpunit.cache
+11 -49
View File
@@ -40,20 +40,9 @@ const fetchComponentData = () => {
if (!Object.entries(componentData).length) {
componentData.subsystems = {};
componentData.pathList = [];
componentData.components = {};
componentData.standardComponents = {};
// Fetch the component definiitions from the distributed JSON file.
const components = JSON.parse(fs.readFileSync(`${gruntFilePath}/lib/components.json`));
const pluginData = JSON.parse(fs.readFileSync(`${gruntFilePath}/lib/plugins.json`));
componentData.pluginTypes = components.plugintypes;
const standardPlugins = Object.entries(pluginData.standard).map(
([pluginType, pluginNames]) => {
return pluginNames.map(pluginName => `${pluginType}_${pluginName}`);
}
).reduce((acc, val) => acc.concat(val), []);
// Build the list of moodle subsystems.
componentData.subsystems.lib = 'core';
@@ -66,19 +55,8 @@ const fetchComponentData = () => {
}
}
// The list of components includes the list of subsystems.
componentData.components = {...componentData.subsystems};
const subpluginAdder = (subpluginType, subpluginTypePath) => {
glob.sync(`${subpluginTypePath}/*/version.php`).forEach(versionPath => {
const componentPath = fs.realpathSync(path.dirname(versionPath));
const componentName = path.basename(componentPath);
const frankenstyleName = `${subpluginType}_${componentName}`;
componentData.components[`${subpluginTypePath}/${componentName}`] = frankenstyleName;
componentData.pathList.push(componentPath);
});
};
// The list of components incldues the list of subsystems.
componentData.components = componentData.subsystems;
// Go through each of the plugintypes.
Object.entries(components.plugintypes).forEach(([pluginType, pluginTypePath]) => {
@@ -95,36 +73,20 @@ const fetchComponentData = () => {
if (fs.existsSync(subPluginConfigurationFile)) {
const subpluginList = JSON.parse(fs.readFileSync(fs.realpathSync(subPluginConfigurationFile)));
if (subpluginList.subplugintypes) {
Object.entries(subpluginList.subplugintypes).forEach(([subpluginType, subpluginTypePath]) => {
subpluginAdder(
subpluginType,
`${pluginTypePath}/${componentName}/${subpluginTypePath}`
);
Object.entries(subpluginList.plugintypes).forEach(([subpluginType, subpluginTypePath]) => {
glob.sync(`${subpluginTypePath}/*/version.php`).forEach(versionPath => {
const componentPath = fs.realpathSync(path.dirname(versionPath));
const componentName = path.basename(componentPath);
const frankenstyleName = `${subpluginType}_${componentName}`;
componentData.components[`${subpluginTypePath}/${componentName}`] = frankenstyleName;
componentData.pathList.push(componentPath);
});
} else if (subpluginList.plugintypes) {
Object.entries(subpluginList.plugintypes).forEach(([subpluginType, subpluginTypePath]) => {
subpluginAdder(subpluginType, subpluginTypePath);
});
}
});
}
});
});
// Create a list of the standard subsystem and plugins.
componentData.standardComponents = Object.fromEntries(
Object.entries(componentData.components).filter(([, name]) => {
if (name === 'core' || name.startsWith('core_')) {
return true;
}
return standardPlugins.indexOf(name) !== -1;
})
);
componentData.componentMapping = Object.fromEntries(
Object.entries(componentData.components).map(([path, name]) => [name, path])
);
}
return componentData;
-138
View File
@@ -1,138 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import * as Components from '../../components.js';
const componentData = Components.fetchComponentData();
/**
* The standard components shipped with core Moodle.
*
* @type {Object}
*/
export const standardComponents = componentData.standardComponents;
/**
* All components of the current Moodle instance.
*
* @type {Object}
*/
export const allComponents = componentData.components;
/**
* Get all components of the current Moodle instance.
*
* @returns {Array}
*/
export const getAllComponents = () => {
let components = new Map(Object.entries(componentData.pluginTypes).map(([value, path]) => ([path,{
path,
value,
name: `${value} (plugin type)`,
}])));
Object
.entries(componentData.components)
.filter(([path, value]) => Object.values(componentData.standardComponents).includes(value))
.forEach(([path, value]) => {
const entry = {
path,
value,
name: value,
};
if (Object.values(componentData.subsystems).includes(value)) {
if (components.has(path)) {
entry.name = `${value} (subsystem / plugintype)`;
} else {
entry.name = `${value} (subsystem)`;
}
}
components.set(path, entry);
});
return Array.from(components.values());
};
/**
* Whether the specified component is a standard component shipped with core Moodle.
*
* @param {string} componentName
* @returns {boolean}
*/
export const isStandardComponent = (componentName) => {
if (Object.values(componentData.standardComponents).includes(componentName)) {
return true;
}
if (Object.keys(componentData.pluginTypes).includes(componentName)) {
return true;
}
return false;
};
export const rewritePlugintypeAsSubsystem = (componentName) => {
if (Object.keys(componentData.pluginTypes).includes(componentName)) {
const pluginTypePath = componentData.pluginTypes[componentName];
if (Object.keys(componentData.subsystems).includes(pluginTypePath)) {
return true;
}
}
return false;
};
/**
* Whether the specified component is a community component.
*
* @param {string} componentName
* @returns {boolean}
*/
export const isCommunityComponent = (componentName) => {
if (isStandardComponent(componentName)) {
return false;
}
return Object.values(componentData.components).indexOf(componentName) !== -1;
};
/**
* Sort method for components.
*
* This method sorts components putting `core` first, followed by core subsystems, then everything else.
*
* @param {String} a
* @param {String} b
* @returns {Number}
*/
export const sortComponents = (a, b) => {
// Always put 'core' first.
if (a === 'core') {
return -1;
} else if (b === 'core') {
return 1;
}
// Put core subsystems next.
if (a.startsWith('core_') && !b.startsWith('core_')) {
return -1;
} else if (b.startsWith('core_') && !a.startsWith('core_')) {
return 1;
}
// Sort alphabetically for everything else.
return a.localeCompare(b);
};
-85
View File
@@ -1,85 +0,0 @@
#!/usr/bin/env node
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import inquirer from 'inquirer';
import chalk from 'chalk';
import { createNote } from './note.mjs';
import { getInitialValues } from './helpers.mjs';
import * as Prompts from './prompts.mjs';
import logger from './logger.mjs';
export default async (options) => {
// Processs the initial values.
const initialValues = getInitialValues(options);
// Fetch information.
const messages = [];
const { issueNumber } = await inquirer.prompt([
Prompts.getIssuePrompt(),
], initialValues);
let selection = {};
let notePath;
do {
selection = {};
selection = await inquirer.prompt([
Prompts.getComponentsPrompt(),
Prompts.getTypePrompt(),
Prompts.getMessagePromptInput(),
], initialValues);
if (selection.message === '') {
selection = Object.assign(
selection,
await inquirer.prompt([
Prompts.getMessagePromptEditor(),
]),
);
}
logger.info(`
Creating upgrade note with the following options:
- Issue: ${chalk.bold(issueNumber)}
- Component: ${chalk.bold(selection.components)}
- Type: ${chalk.bold(selection.type)}
- Message:
${chalk.bold(selection.message)}
`);
messages.push({
components: [selection.components],
type: selection.type,
message: selection.message,
});
// Save the note so far.
if (notePath) {
await createNote(issueNumber, messages, notePath);
logger.info(`Updated note at: ${chalk.underline(chalk.bold(notePath))}`);
} else {
notePath = await createNote(issueNumber, messages);
logger.info(`Note created at: ${chalk.underline(chalk.bold(notePath))}`);
}
selection = Object.assign(
selection,
await inquirer.prompt([
Prompts.getAddAnotherPrompt(),
], initialValues),
);
} while (selection.addAnother);
};
-357
View File
@@ -1,357 +0,0 @@
#!/usr/bin/env node
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import chalk from 'chalk';
import { getAllComponents } from './components.mjs';
import { getCombinedNotesByComponent, deleteAllNotes } from './note.mjs';
import { getNoteName } from './noteTypes.mjs';
import { writeFile, readFile, unlink } from 'fs/promises';
import { join as joinPath } from 'path';
import logger from './logger.mjs';
import { getCurrentVersion } from './helpers.mjs';
/**
* Helper to fetch the current notes from a file.
*
* @param {string} file
* @returns {Promise<string>}
*/
const getCurrentNotes = async (file) => {
try {
return await readFile(file, 'utf8');
} catch (error) {
return null;
}
}
/**
* Update the UPGRADING.md file.
*
* @param {string} upgradeNotes
* @param {Object} options
* @param {boolean} options.deleteNotes
* @returns {Promise<void>}
*/
const updateUpgradeNotes = async (upgradeNotes, options) => {
const fileName = 'UPGRADING.md';
// Write the notes to a file.
logger.info(`Writing notes to ${chalk.underline(chalk.bold(fileName))}`);
// Prepend to the existing file.
const existingContent = await getCurrentNotes(fileName);
if (existingContent) {
await writeFile(fileName, getUpdatedNotes(existingContent, upgradeNotes));
} else {
// This should not normally happen.
await writeFile(fileName, upgradeNotes);
}
if (options.deleteNotes) {
logger.warn(`>>> Deleting all notes <<<`)
// Delete the notes.
deleteAllNotes();
}
};
/**
* Create the current summary notes.
*
* @param {string} upgradeNotes
* @returns {Promise<void>}
*/
const createCurrentSummary = async (upgradeNotes) => {
const fileName = 'UPGRADING-CURRENT.md';
const notes = `# Moodle upgrade notes\n\n${upgradeNotes}`;
await writeFile(fileName, notes);
logger.info(`Running upgrade notes written to ${chalk.underline(chalk.bold(fileName))}`);
};
/**
* Get the indexes of the lines that contain the version headings.
*
* @param {array<string>} lines
* @returns {array<object>}
*/
const getVersionLineIndexes = (lines) => {
const h2Indexes = [];
lines.forEach((line, index) => {
const matches = line.match(/^##\s(?<version>.*)$/);
if (matches) {
h2Indexes.push({
index,
line,
version: matches.groups.version,
});
}
});
return h2Indexes;
};
/**
* Find the index of the Unreleased heading.
*
* @param {array<object>} versionHeadings
* @returns {number}
*/
const findUnreleasedHeadingIndex = (versionHeadings) => versionHeadings.findIndex((heading) => {
if (heading.version === 'Unreleased') {
// Used if version cannot be guessed.
return true;
}
if (heading.version.endsWith('+')) {
// Weekly release for a stable branch.
return true;
}
if (heading.version.match(/beta|rc\d/)) {
// Beta and RC rolls are treated as weeklies.
return true;
}
if (heading.version.endsWith('dev')) {
// Development version.
return true;
}
return false;
});
/**
* Get the before and after content, to facilitate replacing any existing Unreleased notes.
*
* @param {array<string>} lines
* @returns {Object} {beforeContent: string, afterContent: string}
*/
const getBeforeAndAfterContent = (lines) => {
const existingLines = lines.split('\n');
const versionHeadings = getVersionLineIndexes(existingLines);
if (versionHeadings.length > 0) {
const unreleasedHeadingIndex = findUnreleasedHeadingIndex(versionHeadings);
if (unreleasedHeadingIndex !== -1) {
const beforeContent = existingLines.slice(0, versionHeadings[unreleasedHeadingIndex].index).join('\n');
if (versionHeadings.length > unreleasedHeadingIndex + 1) {
const afterContent = existingLines.slice(versionHeadings[unreleasedHeadingIndex + 1].index).join('\n');
return {
beforeContent,
afterContent,
};
}
return {
beforeContent,
afterContent: '',
};
}
return {
beforeContent: existingLines.slice(0, versionHeadings[0].index).join('\n'),
afterContent: existingLines.slice(versionHeadings[0].index).join('\n'),
};
}
return {
beforeContent: existingLines.join('\n'),
afterContent: '',
}
};
/**
* Get the notes for the component.
*
* @param {string} types
* @param {Number} headingLevel
* @returns {string}
*/
const getNotesForComponent = (types, headingLevel) => {
let upgradeNotes = '';
Object.entries(types).forEach(([type, notes]) => {
upgradeNotes += '#'.repeat(headingLevel);
upgradeNotes += ` ${getNoteName(type)}\n\n`;
notes.forEach(({ message, issueNumber }) => {
// Split the message into lines, removing empty lines.
const messageLines = message
.split('\n')
// Remove empty lines between tables, and list entries, but not after lists.
.filter((line, index, lines) => {
if (line.trim().length === 0) {
// This line is empty.
// If it's the first line in the file, remove it.
if (index === 0) {
return false;
}
// This is the last line in the file, remove it.
if (index === lines.length - 1) {
return false;
}
// If the previous line relates to a table, remove this line.
if (lines[index - 1].match(/^\s*\|/)) {
return false;
}
// If the next line is also empty, do not remove this line.
if (lines[index + 1].trim().length === 0) {
return true;
}
// Do not remove the line if the previous line was a list item.
if (lines[index - 1].match(/^\s*[-*]\s/)) {
return true;
}
if (lines[index - 1].match(/^\s*\d+\.\s/)) {
return true;
}
// Preserve all other empty lines by default.
return true;
}
// Keep any line which has content.
return true;
});
const firstLine = messageLines.shift().trim();
upgradeNotes += `- ${firstLine}\n`;
messageLines
.forEach((line) => {
upgradeNotes += ` ${line}`.trimEnd() + `\n`;
});
upgradeNotes += `\n For more information see [${issueNumber}](https://tracker.moodle.org/browse/${issueNumber})\n`;
});
upgradeNotes += '\n';
});
return upgradeNotes;
};
/**
* Get the updated notes mixed with existing content.
*
* @param {string} existingContent
* @param {string} upgradeNotes
*/
const getUpdatedNotes = (existingContent, upgradeNotes) => {
const { beforeContent, afterContent } = getBeforeAndAfterContent(existingContent);
const newContent = `${beforeContent}\n${upgradeNotes}\n${afterContent}`
.split('\n')
.filter((line, index, lines) => {
if (line === '' && lines[index - 1] === '') {
// Remove multiple consecutive empty lines.
return false;
}
return true;
})
.join('\n');
return newContent;
};
/**
* Update the notes for each component.
*/
const updateComponentNotes = (
notes,
version,
notesFileName = 'UPGRADING.md',
removeEmpty = false,
) => {
return getAllComponents().map(async (component) => {
logger.verbose(`Updating notes for ${component.name} into ${component.path}`);
const fileName = joinPath(component.path, notesFileName);
const existingContent = await getCurrentNotes(fileName);
if (!existingContent) {
if (!notes[component.value]) {
// No existing notes, and no new notes to add.
return;
}
} else {
if (!notes[component.value]) {
// There is existing content, but nothing to add.
if (removeEmpty) {
logger.verbose(`Removing empty notes file ${fileName}`);
await unlink(fileName);
}
return;
}
}
const componentNotes = notes[component.value];
let upgradeNotes = `## ${version}\n\n`;
upgradeNotes += getNotesForComponent(componentNotes, 3);
if (existingContent) {
await writeFile(fileName, getUpdatedNotes(existingContent, upgradeNotes));
} else {
await writeFile(
fileName,
`# ${component.name} Upgrade notes\n\n${upgradeNotes}`,
);
}
});
}
/**
* Generate the upgrade notes for a new release.
*
* @param {string|undefined} version
* @param {Object} options
* @param {boolean} options.generateUpgradeNotes
* @param {boolean} options.deleteNotes
* @returns {Promise<void>}
*/
export default async (version, options = {}) => {
const notes = await getCombinedNotesByComponent();
if (Object.keys(notes).length === 0) {
logger.warn('No notes to generate');
return;
}
if (!version) {
version = await getCurrentVersion();
}
// Generate the upgrade notes for this release.
// We have
// - a title with the release name
// - the change types
// - which contain the components
// - which document each change
let upgradeNotes = `## ${version}\n\n`;
Object.entries(notes).forEach(([component, types]) => {
upgradeNotes += `### ${component}\n\n`;
upgradeNotes += getNotesForComponent(types, 4);
});
await Promise.all([
createCurrentSummary(upgradeNotes),
...updateComponentNotes(notes, version, 'UPGRADING-CURRENT.md', true),
]);
if (options.generateUpgradeNotes) {
await Promise.all(updateComponentNotes(notes, version));
await updateUpgradeNotes(upgradeNotes, options);
}
};
-230
View File
@@ -1,230 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import chalk from 'chalk';
import { isStandardComponent, isCommunityComponent, rewritePlugintypeAsSubsystem } from './components.mjs';
import { isValidNoteName } from './noteTypes.mjs';
import logger from './logger.mjs';
import { readFile } from 'fs/promises';
/**
* Validate an issue number input
*
* @param {string} input
* @returns {string|boolean}
*/
export const validateIssueNumber = (input) => {
if (!input) {
return 'You must provide a tracker issue number';
}
if (input.match(/^[a-zA-Z]*-\d+$/)) {
return true;
}
if (input.match(/^\d+$/)) {
return true;
}
return 'The issue number was not recognised as a valid issue number';
};
/**
* Format an issue number input.
*
* @param {string} input
* @returns {string}
*/
export const formatIssueNumber = (input) => {
if (input.match(/^[a-zA-Z]*-\d+$/)) {
return input;
}
if (input.match(/^\d+$/)) {
return `MDL-${input}`;
}
return input;
};
/**
* Validate a component.
*
* @param {string} input
* @returns {string|boolean}
*/
export const validateComponent = (input) => {
if (isStandardComponent(input)) {
return true;
}
if (isCommunityComponent(input)) {
return 'Currently only core plugins are supported.';
}
return 'The component was not recognised as a standard component';
};
export const formatComponent = (input) => {
if (rewritePlugintypeAsSubsystem(input)) {
return `core_${input}`;
}
return input;
}
/**
* Get the initial values from the options.
*
* @param {object} options
* @returns {object}
*/
export const getInitialValues = (options) => {
const initialValues = {};
const type = getInitialTypeValue(options);
if (type) {
initialValues.type = type;
}
const issueNumber = getInitialIssueValue(options);
if (issueNumber) {
initialValues.issueNumber = issueNumber;
}
const component = getInitialComponentValue(options);
if (component) {
initialValues.components = component;
}
const message = getInitialMessageValue(options);
if (message) {
initialValues.message = message
initialValues.addAnother = false;
}
return initialValues;
};
/**
* Get the initial type value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialTypeValue = (options) => {
if (!options.type) {
return;
}
options.type = options.type.trim().toLowerCase();
if (isValidNoteName(options.type)) {
return options.type;
}
logger.warn(`Note type "${chalk.underline(chalk.red(options.type))}" is not valid.`);
};
/**
* Get the initial issue number value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialIssueValue = (options) => {
if (!options.issue) {
return;
}
options.issue = options.issue.trim().toUpperCase();
const issueNumberValidated = validateIssueNumber(options.issue);
if (issueNumberValidated === true) {
const issueNumber = formatIssueNumber(options.issue);
if (issueNumber !== options.issue) {
logger.warn(
`Issue number "${chalk.underline(chalk.red(options.issue))}" was updated to ` +
`"${chalk.underline(chalk.green(issueNumber))}"`
);
}
return issueNumber;
} else {
logger.warn(`Issue number "${chalk.underline(chalk.red(options.issue))}" is not valid: ${issueNumberValidated}`);
}
};
/**
* Get the initial component value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialComponentValue = (options) => {
if (!options.component) {
return;
}
options.component = options.component.trim().toLowerCase();
const componentValidated = validateComponent(options.component);
if (componentValidated === true) {
const component = formatComponent(options.component);
if (component !== options.component) {
logger.warn(
`Component "${chalk.underline(chalk.red(options.component))}" was updated to ` +
`"${chalk.underline(chalk.green(component))}"`
);
}
return component;
} else {
logger.warn(`Component "${chalk.underline(chalk.red(options.component))}" is not valid: ${componentValidated}`);
}
};
/**
* Get the initial message value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialMessageValue = (options) => {
if (!options.message) {
return;
}
return options.message.trim();
};
/**
* Get the current version from the project /version.php file.
*
* @returns {Promise<string>}
*/
export const getCurrentVersion = async () => {
const versionRegex = new RegExp(/^ *\$release *= *['\"](?<release>[^ \+]+\+?) *\(Build:.*/m);
try {
const versionFile = await readFile('version.php', 'utf8');
const match = versionFile.match(versionRegex);
if (match) {
return match.groups.release;
}
} catch(error) {
logger.error('Unable to read the version file');
}
return "Unreleased";
}
-30
View File
@@ -1,30 +0,0 @@
#!/usr/bin/env node
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import winston from 'winston';
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
),
transports: [
new winston.transports.Console(),
],
});
export default logger;
-194
View File
@@ -1,194 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import yaml from 'js-yaml';
import path from 'path';
import { writeFile, mkdir, readdir, readFile, unlink } from 'fs/promises';
import { isValidNoteName, sortNoteTypes } from './noteTypes.mjs';
import { sortComponents } from './components.mjs';
const unreleasedPath = path.resolve('.upgradenotes');
/**
* Get the filename for the note.
*
* @param {string} issueNumnber The issue number
* @returns {string}
*/
const getFilename = (issueNumber) => {
const dateTimeFormat = new Intl.DateTimeFormat(undefined, {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
fractionalSecondDigits: 2,
timeZone: 'UTC',
});
const date = Object.fromEntries(
dateTimeFormat.formatToParts(new Date())
.filter((p) => p.type !== 'literal')
.map((p) => ([p.type, p.value]))
);
const dateString = [
date.year,
date.month,
date.day,
date.hour,
date.minute,
date.second,
date.fractionalSecond,
].join('');
return `${issueNumber}-${dateString}.yml`;
};
/**
* Create a new note.
*
* @param {string} issueNumber
* @param {[type: string]: {message: string}} messages
* @returns {string} The path to the note on disk
*/
export const createNote = async (
issueNumber,
messages,
notePath,
) => {
const note = {
issueNumber,
notes: {},
};
messages.forEach(({components, type, message}) => {
note.notes[components] = note.notes[components] || [];
note.notes[components].push({message, type});
});
if (!notePath) {
notePath = path.resolve(unreleasedPath, getFilename(issueNumber));
}
const noteContent = yaml.dump(note);
await mkdir(unreleasedPath, {recursive: true});
await writeFile(notePath, noteContent);
return notePath;
};
/**
* Get all unreleased notes.
*
* @returns {Promise<{issueNumber: string, components: string[], types: {[type: string]: {message: string}[]}}[]>
*/
export const getAllNotes = async () => {
const files = await readdir(unreleasedPath);
const notes = files
.filter((file) => file.endsWith('.yml'))
.map(async (file) => {
const filePath = path.resolve(unreleasedPath, file);
const fileContent = await readFile(filePath, 'utf8');
return {
...yaml.load(fileContent),
filePath,
};
});
return Promise.all(notes);
};
/**
* Get the list of notes, grouped by note type, then component.
*
* @returns {Promise<{[type: string]: {[components: string]: {message: string, issueNumber: string}[]}}>}
*/
export const getCombinedNotes = async () => {
const notes = await getAllNotes();
const combinedNotes = {};
notes.forEach((note) => {
Object.entries(note.notes).forEach(([components, data]) => {
data.forEach((entry) => {
if (!isValidNoteName(entry.type)) {
throw new Error(`Invalid note type: "${entry.type}" in file ${note.filePath}`);
}
combinedNotes[entry.type] = combinedNotes[entry.type] || {};
combinedNotes[entry.type][components] = combinedNotes[entry.type][components] || [];
combinedNotes[entry.type][components].push({message: entry.message, issueNumber: note.issueNumber});
});
});
});
return combinedNotes;
};
/**
* Get the list of notes, grouped by component, then by note type.
*
* @returns {Promise<{[component: string]: {[type: string]: {message: string, issueNumber: string}[]}}>}
*/
export const getCombinedNotesByComponent = async () => {
const notes = await getAllNotes();
const combinedNotes = {};
notes.forEach((note) => {
Object.entries(note.notes).forEach(([component, data]) => {
combinedNotes[component] = combinedNotes[component] || {};
data.forEach((entry) => {
if (!isValidNoteName(entry.type)) {
throw new Error(`Invalid note type: "${entry.type}" in file ${note.filePath}`);
}
combinedNotes[component][entry.type] = combinedNotes[component][entry.type] || [];
combinedNotes[component][entry.type].push({
component,
message: entry.message,
issueNumber: note.issueNumber,
type: entry.type,
});
});
});
});
// Sort notes by note type.
Object.entries(combinedNotes).forEach(([component, types]) => {
combinedNotes[component] = Object.fromEntries(
Object.entries(types).sort(([a], [b]) => sortNoteTypes(a, b))
);
});
// Sort components.
return Object.fromEntries(
Object.entries(combinedNotes).sort(([a], [b]) => sortComponents(a, b))
);
};
/**
* Delete all unreleased notes.
*
* @returns {Promise<void>}
*/
export const deleteAllNotes = async () => {
const files = await readdir(unreleasedPath);
return Promise.all(
files
.filter((item, index) => files.indexOf(item) === index)
.filter((file) => file.endsWith('.yml'))
.map((file) => unlink(`${unreleasedPath}/${file}`))
);
};
-80
View File
@@ -1,80 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* The note types.
*
* Matches the suggested order in https://keepachangelog.com/en/1.1.0/.
* @type {Object<string, string>}
*/
const noteTypes = {
'improved': 'Added',
'changed': 'Changed',
'deprecated': 'Deprecated',
'removed': 'Removed',
'fixed': 'Fixed',
};
/**
* The preferred order of note types.
*
* @type {string[]}
*/
const preferredOrder = Object.keys(noteTypes);
/**
* Comparison method to sort note types.
*
* @param {String} a
* @param {String} b
* @returns {Number}
*/
export const sortNoteTypes = (a, b) => {
const aIndex = preferredOrder.indexOf(a);
const bIndex = preferredOrder.indexOf(b);
if (aIndex === -1) {
return 1;
}
if (bIndex === -1) {
return -1;
}
return aIndex - bIndex;
};
/**
* Get the note names.
*
* @returns {string[]}
*/
export const getNoteNames = () => Object.keys(noteTypes);
/**
* Get the human-readable note name.
*
* @param {string} type
* @returns {string}
*/
export const getNoteName = (type) => noteTypes[type];
/**
* Whether the note name is valid.
*
* @param {string} type
* @returns {boolean}
*/
export const isValidNoteName = (type) => noteTypes[type] !== undefined;
-153
View File
@@ -1,153 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import inquirer from 'inquirer';
import SearchList from 'inquirer-search-list';
import { getNoteNames } from './noteTypes.mjs';
import { getAllComponents } from './components.mjs';
import {
formatComponent,
formatIssueNumber,
validateComponent,
validateIssueNumber,
} from './helpers.mjs';
/**
* A Search List which accepts an initial value.
*/
class SearchListWithInitialValue extends SearchList {
constructor(options, ...args) {
super(options, ...args);
if (options.default) {
const pointer = this.filterList.findIndex((item) => {
return item.value === options.default;
});
if (pointer > -1) {
this.pointer = pointer;
}
}
}
}
inquirer.registerPrompt('search-list', SearchListWithInitialValue);
/**
* Get the issue type prompt.
*
* @param {string} defaultData The initially selected value
* @returns {Object}
*/
export const getTypePrompt = (defaultData) => ({
default: defaultData,
type: 'search-list',
message: 'Type of change',
name: 'type',
choices: getNoteNames(),
validate: (selection) => {
if (selection.length < 1) {
return 'You must select at least one type of change';
}
return true;
},
});
/**
* Get the component prompt.
*
* @param {string} [defaultValue='core'] The initally selected value.
* @returns
*/
export const getComponentsPrompt = (defaultValue) => {
if (!defaultValue ) {
defaultValue = 'core';
}
return {
choices: getAllComponents(),
default: defaultValue,
type: 'search-list',
message: 'Component',
name: 'components',
validate: validateComponent,
filter: formatComponent,
};
};
/**
* Get the issue number prompt as an inline input.
*
* @param {string} defaultData
* @returns {object}
*/
export const getIssuePrompt = (defaultData) => ({
default: defaultData,
type: 'input',
message: 'Tracker issue number',
name: 'issueNumber',
validate: validateIssueNumber,
filter: formatIssueNumber,
});
/**
* Get a message prompt.
*
* @param {string} defaultData
* @returns
*/
export const getMessagePromptEditor = (defaultData) => ({
default: defaultData,
type: process.stdin.isTTY ? 'editor' : 'input',
postfix: '.md',
message: 'Message',
name: 'message',
waitUserInput: false,
validate: (input) => {
if (!input) {
return 'You must provide a message';
}
return true;
},
// Remove any trailing whitespace.
filter: (input) => input.split('\n').map((line) => line.trimEnd()).join('\n'),
});
/**
* Get a message prompt.
*
* @param {string} defaultData
* @returns
*/
export const getMessagePromptInput = (defaultData) => ({
default: defaultData,
type: 'input',
message: 'Message (leave empty to use editor)',
name: 'message',
filter: (input) => input.trim(),
});
/**
* Get a prompt to ask the user if they wish to add another entry.
*
* @returns {Object}
*/
export const getAddAnotherPrompt = () => ({
type: 'confirm',
message: 'Do you want to add another note?',
default: false,
name: 'addAnother',
});
-103
View File
@@ -1,103 +0,0 @@
#!/usr/bin/env node
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import { Argument, Option, program } from 'commander';
import chalk from 'chalk';
import { getNoteNames } from './notes/src/noteTypes.mjs';
import createAction from './notes/src/create.mjs';
import generateAction from './notes/src/generate.mjs';
import logger from './notes/src/logger.mjs';
console.log(`
${chalk.bold(chalk.underline(chalk.green('Moodle Upgrade Notes Generator')))}
This tool is used to generate the upgrade notes for changes you make in Moodle.
Please remember that the intended audience of these changes is
${chalk.italic('plugin developers')} who need to know how to update their plugins
for a new Moodle version.
Upgrade notes should not be used to document changes for site administrators, or
for internal API changes which are not expected to be used outside of the
relevant component.
`)
program.configureHelp({
helpWidth: 100,
});
program.on('option:verbose', () => {
logger.level = 'verbose';
});
program.addOption(
new Option(
'-v, --verbose',
'Output more information during the generation process',
)
.default(false)
);
// Define the command line options.
program
.command('create')
.summary('Generate a new upgrade note')
.addOption(
new Option('-t, --type <type>', `The type of change to document. Valid types are: ${getNoteNames().join(', ')}`)
)
.addOption(new Option('-i, --issue <issue>', 'The tracker issue number'))
.addOption(new Option('-c, --component <component>', 'The component to write a note for'))
.addOption(new Option(
'-m, --message <message>',
'The message to use for the upgrade note',
))
.action((options) => createAction(options));
program
.command('summary')
.summary('Generate a local copy of the upgrade notes summary')
.addArgument(
new Argument('[version]', 'The Moodle version to create the summary notes for')
)
.action((version) => generateAction(version));
program
.command('release')
.summary('Generate the markdown copies of the upgrade notes for a Moodle release')
.addArgument(
new Argument('[version]', 'The Moodle version to create the release notes for')
)
.addOption(
new Option(
'--generate-upgrade-notes',
'Generate the UPGRADING.md notes for the release. ' +
'Note: This option is intended for use by the release manager when generating the upgrade notes.',
)
.default(true)
)
.addOption(
new Option(
'-d, --delete-notes',
'Delete the notes after generating the UPGRADING.md notes for the release. ' +
'Note: This option is intended for use by the release manager when generating the upgrade notes.' +
'This option has no effect unless --generate-upgrade-notes is also set.'
)
.default(false)
)
.action((version, options) => generateAction(version, options));
program.parse();
+1 -1
View File
@@ -1 +1 @@
lts/jod
lts/iron
-2608
View File
File diff suppressed because it is too large Load Diff
-9
View File
@@ -1,9 +0,0 @@
# core_admin (subsystem) Upgrade notes
## 4.5rc1
### Removed
- The HTTP Server setting "Use slash arguments" (slasharguments) configuration setting and related to it has been removed. Calling the option with $CFG->slasharguments or get_config('slasharguments') is no longer available.
For more information see [MDL-62640](https://tracker.moodle.org/browse/MDL-62640)
-65
View File
@@ -1,65 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Manage AI subsystem plugins settings.
*
* @package core_admin
* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('../config.php');
require_once($CFG->libdir . '/adminlib.php');
$action = required_param('action', PARAM_ALPHANUMEXT);
$type = required_param('type', PARAM_PLUGIN); // Must be provider or placement.
$name = required_param('name', PARAM_PLUGIN); // Plugin name, e.g openai.
$syscontext = context_system::instance();
$PAGE->set_url('/admin/ai.php');
$PAGE->set_context($syscontext);
require_admin();
require_sesskey();
$return = new moodle_url('/admin/settings.php', ['section' => "aisettings$type"]);
$plugins = core_plugin_manager::instance()->get_plugins_of_type("ai$type");
$sortorder = array_flip(array_keys($plugins));
if (!isset($plugins[$name])) {
throw new moodle_exception('aipluginnotfound', 'core_ai', $return, $name);
}
$plugintypename = $plugins[$name]->type . '_' . $plugins[$name]->name;
switch ($action) {
case 'disable':
if ($plugins[$name]->is_enabled()) {
$class = core_plugin_manager::resolve_plugininfo_class("aisettings$type");
$class::enable_plugin($name, false);
}
break;
case 'enable':
if (!$plugins[$name]->is_enabled()) {
$class = core_plugin_manager::resolve_plugininfo_class("aisettings$type");
$class::enable_plugin($name, true);
}
break;
}
redirect($return);
-12
View File
@@ -1,12 +0,0 @@
define("core_admin/expand_hash",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.expandSection=void 0;
/**
* Expand the collapse section element.
*
* @module core_admin/expand_hash
* @copyright Meirza <meirza.arson@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @since 4.5
*/
const SELECTORS_COLLAPSE_ELEMENTS='[data-bs-toggle="collapse"]',SELECTORS_FOCUSTHENEXPAND_ELEMENTS=".focus-expand";_exports.init=()=>{const focusexpand=document.querySelector(SELECTORS_FOCUSTHENEXPAND_ELEMENTS);null==focusexpand||focusexpand.addEventListener("click",(()=>{expandSection("".concat(focusexpand.getAttribute("href")))}))};const expandSection=hash=>{const container=document.querySelector(hash),targetContainer=null==container?void 0:container.querySelector(SELECTORS_COLLAPSE_ELEMENTS);if("false"===(null==targetContainer?void 0:targetContainer.getAttribute("aria-expanded"))){const collapseId=targetContainer.getAttribute("aria-controls"),collapseContainer=document.getElementById(collapseId);collapseContainer.classList.remove("collapse"),collapseContainer.classList.add("show"),targetContainer.setAttribute("aria-expanded","true"),targetContainer.classList.remove("collapsed");const collapseElement=document.querySelector(".collapseexpand.collapsemenu");collapseElement.setAttribute("aria-expanded","true"),collapseElement.classList.remove("collapsed")}};_exports.expandSection=expandSection}));
//# sourceMappingURL=expand_hash.min.js.map
-1
View File
@@ -1 +0,0 @@
{"version":3,"file":"expand_hash.min.js","sources":["../src/expand_hash.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 * Expand the collapse section element.\n *\n * @module core_admin/expand_hash\n * @copyright Meirza <meirza.arson@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 4.5\n */\n\nconst SELECTORS = {\n COLLAPSE_ELEMENTS: '[data-bs-toggle=\"collapse\"]',\n FOCUSTHENEXPAND_ELEMENTS: '.focus-expand',\n};\n\n/**\n * Initializes the focus and expand functionality.\n */\nexport const init = () => {\n // Select all collapsible elements only.\n const focusexpand = document.querySelector(SELECTORS.FOCUSTHENEXPAND_ELEMENTS);\n\n // Add click event listener to the anchor element\n focusexpand?.addEventListener('click', () => {\n expandSection(`${focusexpand.getAttribute('href')}`);\n });\n};\n\n/**\n * Expands a section based on the provided URL hash.\n *\n * This function takes a hash string, finds the corresponding element in the DOM,\n * and expands it if it is currently collapsed. It updates the necessary ARIA\n * attributes and classes to reflect the expanded state.\n *\n * @param {string} hash - The hash (e.g., '#elementId') of the element to expand.\n */\nexport const expandSection = (hash) => {\n const container = document.querySelector(hash);\n const targetContainer = container?.querySelector(SELECTORS.COLLAPSE_ELEMENTS);\n\n if (targetContainer?.getAttribute('aria-expanded') === 'false') {\n const collapseId = targetContainer.getAttribute('aria-controls');\n const collapseContainer = document.getElementById(collapseId);\n\n // Show the content.\n collapseContainer.classList.remove('collapse');\n collapseContainer.classList.add('show');\n\n // Update aria-expanded attribute to reflect the new state.\n targetContainer.setAttribute('aria-expanded', 'true');\n targetContainer.classList.remove('collapsed');\n\n // Get collapse expand menu element.\n const collapseElement = document.querySelector('.collapseexpand.collapsemenu');\n // Ensure it gets noticed to make it work.\n collapseElement.setAttribute('aria-expanded', 'true');\n collapseElement.classList.remove('collapsed');\n }\n};\n"],"names":["SELECTORS","focusexpand","document","querySelector","addEventListener","expandSection","getAttribute","hash","container","targetContainer","collapseId","collapseContainer","getElementById","classList","remove","add","setAttribute","collapseElement"],"mappings":";;;;;;;;;MAwBMA,4BACiB,8BADjBA,mCAEwB,8BAMV,WAEVC,YAAcC,SAASC,cAAcH,oCAG3CC,MAAAA,aAAAA,YAAaG,iBAAiB,SAAS,KACnCC,wBAAiBJ,YAAYK,aAAa,oBAarCD,cAAiBE,aACpBC,UAAYN,SAASC,cAAcI,MACnCE,gBAAkBD,MAAAA,iBAAAA,UAAWL,cAAcH,gCAEM,WAAnDS,MAAAA,uBAAAA,gBAAiBH,aAAa,kBAA8B,OACtDI,WAAaD,gBAAgBH,aAAa,iBAC1CK,kBAAoBT,SAASU,eAAeF,YAGlDC,kBAAkBE,UAAUC,OAAO,YACnCH,kBAAkBE,UAAUE,IAAI,QAGhCN,gBAAgBO,aAAa,gBAAiB,QAC9CP,gBAAgBI,UAAUC,OAAO,mBAG3BG,gBAAkBf,SAASC,cAAc,gCAE/Cc,gBAAgBD,aAAa,gBAAiB,QAC9CC,gBAAgBJ,UAAUC,OAAO"}
+1 -1
View File
@@ -1,3 +1,3 @@
define("core_admin/plugin_management_table",["exports","core_table/dynamic","core_table/local/dynamic/selectors","core/ajax","core/pending","core/notification"],(function(_exports,_dynamic,Selectors,_ajax,_pending,_notification){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Selectors),_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};let watching=!1;return _exports.default=class{constructor(){!function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}(this,"clickHandlers",[]),this.addClickHandler(this.handleStateToggle),this.addClickHandler(this.handleMoveUpDown),this.registerEventListeners()}static init(){watching||(watching=!0,new this)}addClickHandler(handler){this.clickHandlers.push(handler.bind(this))}registerEventListeners(){document.addEventListener("click",function(e){const tableRoot=this.getTableRoot(e);tableRoot&&this.clickHandlers.forEach((handler=>handler(tableRoot,e)))}.bind(this))}getTableRoot(e){const tableRoot=e.target.closest(Selectors.main.region);return tableRoot||!1}setPluginState(methodname,plugin,state){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,state:state}}])[0]}setPluginOrder(methodname,plugin,direction){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,direction:direction}}])[0]}async handleStateToggle(tableRoot,e){const stateToggle=e.target.closest('[data-action="togglestate"][data-toggle-method]');if(stateToggle){e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:togglestate");await this.setPluginState(stateToggle.dataset.toggleMethod,stateToggle.dataset.plugin,"1"===stateToggle.dataset.state?0:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]);updatedRoot.querySelector('[data-action="togglestate"][data-plugin="'.concat(stateToggle.dataset.plugin,'"]')).focus(),this.removeTooltips(),pendingPromise.resolve()}}async handleMoveUpDown(tableRoot,e){const actionLink=e.target.closest('[data-action="move"][data-method][data-direction]');if(!actionLink)return;e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:processAction");await this.setPluginOrder(actionLink.dataset.method,actionLink.dataset.plugin,"up"===actionLink.dataset.direction?-1:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]),exactMatch=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"][data-direction="').concat(actionLink.dataset.direction,'"]'));var _updatedRoot$querySel;exactMatch?exactMatch.focus():null===(_updatedRoot$querySel=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"]')))||void 0===_updatedRoot$querySel||_updatedRoot$querySel.focus();pendingPromise.resolve()}removeTooltips(){const tooltips=document.querySelectorAll('[id*="tooltip"]');tooltips.length>0&&tooltips.forEach((tooltip=>{tooltip.remove()}))}},_exports.default}));
define("core_admin/plugin_management_table",["exports","core_table/dynamic","core_table/local/dynamic/selectors","core/ajax","core/pending","core/notification"],(function(_exports,_dynamic,Selectors,_ajax,_pending,_notification){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Selectors),_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};let watching=!1;return _exports.default=class{constructor(){!function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}(this,"clickHandlers",[]),this.addClickHandler(this.handleStateToggle),this.addClickHandler(this.handleMoveUpDown),this.registerEventListeners()}static init(){watching||(watching=!0,new this)}addClickHandler(handler){this.clickHandlers.push(handler.bind(this))}registerEventListeners(){document.addEventListener("click",function(e){const tableRoot=this.getTableRoot(e);tableRoot&&this.clickHandlers.forEach((handler=>handler(tableRoot,e)))}.bind(this))}getTableRoot(e){const tableRoot=e.target.closest(Selectors.main.region);return tableRoot||!1}setPluginState(methodname,plugin,state){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,state:state}}])[0]}setPluginOrder(methodname,plugin,direction){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,direction:direction}}])[0]}async handleStateToggle(tableRoot,e){const stateToggle=e.target.closest('[data-action="togglestate"][data-toggle-method]');if(stateToggle){e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:togglestate");await this.setPluginState(stateToggle.dataset.toggleMethod,stateToggle.dataset.plugin,"1"===stateToggle.dataset.state?0:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]);updatedRoot.querySelector('[data-action="togglestate"][data-plugin="'.concat(stateToggle.dataset.plugin,'"]')).focus(),pendingPromise.resolve()}}async handleMoveUpDown(tableRoot,e){const actionLink=e.target.closest('[data-action="move"][data-method][data-direction]');if(!actionLink)return;e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:processAction");await this.setPluginOrder(actionLink.dataset.method,actionLink.dataset.plugin,"up"===actionLink.dataset.direction?-1:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]),exactMatch=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"][data-direction="').concat(actionLink.dataset.direction,'"]'));var _updatedRoot$querySel;exactMatch?exactMatch.focus():null===(_updatedRoot$querySel=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"]')))||void 0===_updatedRoot$querySel||_updatedRoot$querySel.focus();pendingPromise.resolve()}},_exports.default}));
//# sourceMappingURL=plugin_management_table.min.js.map
File diff suppressed because one or more lines are too long
-11
View File
@@ -1,11 +0,0 @@
define("core_admin/plugins_overview",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=function(){const filters=document.querySelectorAll(SELECTORS_PLUGIN_FILTERS),pluginRows=document.querySelectorAll(SELECTORS_PLUGIN_ROWS),pluginTypeRows=document.querySelectorAll(SELECTORS_PLUGIN_TYPE_ROWS),filterPlugins=target=>{const filterBy=target.getAttribute("data-filterby"),headerVisibility={};for(const row of pluginRows){const type=[...row.classList].find((s=>s.startsWith("type-"))),visible="all"===filterBy||row.classList.contains(filterBy);row.style.display=visible?null:"none",visible&&type&&(headerVisibility[type]=!0)}for(const row of pluginTypeRows){const type=[...row.classList].find((s=>s.startsWith("type-")));if(type){const visible="all"===filterBy||headerVisibility[type];row.style.display=visible?null:"none"}}filters.forEach((el=>el.classList.remove("active"))),target.classList.add("active")};if(filters.forEach((target=>target.addEventListener("click",(e=>{e.preventDefault(),window.history.replaceState({},null,e.target.href),filterPlugins(target)})))),window.location.hash.length>1){const anchor=window.location.hash.substring(1),target=[...filters].find((t=>t.getAttribute("data-filterby")===anchor));target&&filterPlugins(target)}};
/**
* Allows to filter the plugin list on plugins overview page
*
* @module core_admin/plugins_overview
* @copyright 2024 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const SELECTORS_PLUGIN_FILTERS="#plugins-overview-panel [data-filterby]",SELECTORS_PLUGIN_ROWS="table#plugins-control-panel tbody tr:not(.plugintypeheader)",SELECTORS_PLUGIN_TYPE_ROWS="table#plugins-control-panel tbody tr.plugintypeheader"}));
//# sourceMappingURL=plugins_overview.min.js.map
@@ -1 +0,0 @@
{"version":3,"file":"plugins_overview.min.js","sources":["../src/plugins_overview.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 * Allows to filter the plugin list on plugins overview page\n *\n * @module core_admin/plugins_overview\n * @copyright 2024 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nconst SELECTORS = {\n PLUGIN_FILTERS: '#plugins-overview-panel [data-filterby]',\n PLUGIN_ROWS: 'table#plugins-control-panel tbody tr:not(.plugintypeheader)',\n PLUGIN_TYPE_ROWS: 'table#plugins-control-panel tbody tr.plugintypeheader',\n};\n\n/**\n * Initialise filters for the \"Plugins overview\" page\n */\nexport function init() {\n const filters = document.querySelectorAll(SELECTORS.PLUGIN_FILTERS);\n const pluginRows = document.querySelectorAll(SELECTORS.PLUGIN_ROWS);\n const pluginTypeRows = document.querySelectorAll(SELECTORS.PLUGIN_TYPE_ROWS);\n\n const filterPlugins = (target) => {\n const filterBy = target.getAttribute('data-filterby');\n const headerVisibility = {};\n\n // Hide all plugin rows in the plugin table that do not match the filter and show all others.\n for (const row of pluginRows) {\n const type = [...row.classList].find(s => s.startsWith('type-'));\n const visible = filterBy === 'all' ? true : row.classList.contains(filterBy);\n row.style.display = visible ? null : 'none';\n if (visible && type) {\n headerVisibility[type] = true;\n }\n }\n\n // Hide all the plugin type headers that do not have any visible plugins and show all others.\n for (const row of pluginTypeRows) {\n const type = [...row.classList].find(s => s.startsWith('type-'));\n if (type) {\n const visible = filterBy === 'all' || headerVisibility[type];\n row.style.display = visible ? null : 'none';\n }\n }\n\n // Toggle 'active' class for the selected filter.\n filters.forEach(el => el.classList.remove('active'));\n target.classList.add('active');\n };\n\n // Add event listeners for the links changing plugins filters.\n filters\n .forEach(target => target.addEventListener('click', (e) => {\n e.preventDefault();\n window.history.replaceState({}, null, e.target.href);\n filterPlugins(target);\n }));\n\n // Pre-filter plugins based on the current url anchor.\n if (window.location.hash.length > 1) {\n const anchor = window.location.hash.substring(1);\n const target = [...filters].find(t => t.getAttribute('data-filterby') === anchor);\n if (target) {\n filterPlugins(target);\n }\n }\n}\n"],"names":["filters","document","querySelectorAll","SELECTORS","pluginRows","pluginTypeRows","filterPlugins","target","filterBy","getAttribute","headerVisibility","row","type","classList","find","s","startsWith","visible","contains","style","display","forEach","el","remove","add","addEventListener","e","preventDefault","window","history","replaceState","href","location","hash","length","anchor","substring","t"],"mappings":"4JAiCUA,QAAUC,SAASC,iBAAiBC,0BACpCC,WAAaH,SAASC,iBAAiBC,uBACvCE,eAAiBJ,SAASC,iBAAiBC,4BAE3CG,cAAiBC,eACbC,SAAWD,OAAOE,aAAa,iBAC/BC,iBAAmB,OAGpB,MAAMC,OAAOP,WAAY,OACpBQ,KAAO,IAAID,IAAIE,WAAWC,MAAKC,GAAKA,EAAEC,WAAW,WACjDC,QAAuB,QAAbT,UAA4BG,IAAIE,UAAUK,SAASV,UACnEG,IAAIQ,MAAMC,QAAUH,QAAU,KAAO,OACjCA,SAAWL,OACXF,iBAAiBE,OAAQ,OAK5B,MAAMD,OAAON,eAAgB,OACxBO,KAAO,IAAID,IAAIE,WAAWC,MAAKC,GAAKA,EAAEC,WAAW,cACnDJ,KAAM,OACAK,QAAuB,QAAbT,UAAsBE,iBAAiBE,MACvDD,IAAIQ,MAAMC,QAAUH,QAAU,KAAO,QAK7CjB,QAAQqB,SAAQC,IAAMA,GAAGT,UAAUU,OAAO,YAC1ChB,OAAOM,UAAUW,IAAI,cAIzBxB,QACCqB,SAAQd,QAAUA,OAAOkB,iBAAiB,SAAUC,IACjDA,EAAEC,iBACFC,OAAOC,QAAQC,aAAa,GAAI,KAAMJ,EAAEnB,OAAOwB,MAC/CzB,cAAcC,aAIdqB,OAAOI,SAASC,KAAKC,OAAS,EAAG,OAC3BC,OAASP,OAAOI,SAASC,KAAKG,UAAU,GACxC7B,OAAS,IAAIP,SAASc,MAAKuB,GAAKA,EAAE5B,aAAa,mBAAqB0B,SACtE5B,QACAD,cAAcC;;;;;;;;MAvDpBJ,yBACc,0CADdA,sBAEW,8DAFXA,2BAGgB"}
-74
View File
@@ -1,74 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Expand the collapse section element.
*
* @module core_admin/expand_hash
* @copyright Meirza <meirza.arson@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @since 4.5
*/
const SELECTORS = {
COLLAPSE_ELEMENTS: '[data-bs-toggle="collapse"]',
FOCUSTHENEXPAND_ELEMENTS: '.focus-expand',
};
/**
* Initializes the focus and expand functionality.
*/
export const init = () => {
// Select all collapsible elements only.
const focusexpand = document.querySelector(SELECTORS.FOCUSTHENEXPAND_ELEMENTS);
// Add click event listener to the anchor element
focusexpand?.addEventListener('click', () => {
expandSection(`${focusexpand.getAttribute('href')}`);
});
};
/**
* Expands a section based on the provided URL hash.
*
* This function takes a hash string, finds the corresponding element in the DOM,
* and expands it if it is currently collapsed. It updates the necessary ARIA
* attributes and classes to reflect the expanded state.
*
* @param {string} hash - The hash (e.g., '#elementId') of the element to expand.
*/
export const expandSection = (hash) => {
const container = document.querySelector(hash);
const targetContainer = container?.querySelector(SELECTORS.COLLAPSE_ELEMENTS);
if (targetContainer?.getAttribute('aria-expanded') === 'false') {
const collapseId = targetContainer.getAttribute('aria-controls');
const collapseContainer = document.getElementById(collapseId);
// Show the content.
collapseContainer.classList.remove('collapse');
collapseContainer.classList.add('show');
// Update aria-expanded attribute to reflect the new state.
targetContainer.setAttribute('aria-expanded', 'true');
targetContainer.classList.remove('collapsed');
// Get collapse expand menu element.
const collapseElement = document.querySelector('.collapseexpand.collapsemenu');
// Ensure it gets noticed to make it work.
collapseElement.setAttribute('aria-expanded', 'true');
collapseElement.classList.remove('collapsed');
}
};
-16
View File
@@ -138,10 +138,6 @@ export default class {
// Refocus on the link that as pressed in the first place.
updatedRoot.querySelector(`[data-action="togglestate"][data-plugin="${stateToggle.dataset.plugin}"]`).focus();
// When clicking the toggle and it remains focused, a new tooltip will be generated.
// Therefore, the old tooltip should be removed.
this.removeTooltips();
pendingPromise.resolve();
}
}
@@ -180,16 +176,4 @@ export default class {
pendingPromise.resolve();
}
/**
* Remove tooltips.
*/
removeTooltips() {
const tooltips = document.querySelectorAll('[id*="tooltip"]');
if (tooltips.length > 0) {
tooltips.forEach(tooltip => {
tooltip.remove();
});
}
}
}
-82
View File
@@ -1,82 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Allows to filter the plugin list on plugins overview page
*
* @module core_admin/plugins_overview
* @copyright 2024 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const SELECTORS = {
PLUGIN_FILTERS: '#plugins-overview-panel [data-filterby]',
PLUGIN_ROWS: 'table#plugins-control-panel tbody tr:not(.plugintypeheader)',
PLUGIN_TYPE_ROWS: 'table#plugins-control-panel tbody tr.plugintypeheader',
};
/**
* Initialise filters for the "Plugins overview" page
*/
export function init() {
const filters = document.querySelectorAll(SELECTORS.PLUGIN_FILTERS);
const pluginRows = document.querySelectorAll(SELECTORS.PLUGIN_ROWS);
const pluginTypeRows = document.querySelectorAll(SELECTORS.PLUGIN_TYPE_ROWS);
const filterPlugins = (target) => {
const filterBy = target.getAttribute('data-filterby');
const headerVisibility = {};
// Hide all plugin rows in the plugin table that do not match the filter and show all others.
for (const row of pluginRows) {
const type = [...row.classList].find(s => s.startsWith('type-'));
const visible = filterBy === 'all' ? true : row.classList.contains(filterBy);
row.style.display = visible ? null : 'none';
if (visible && type) {
headerVisibility[type] = true;
}
}
// Hide all the plugin type headers that do not have any visible plugins and show all others.
for (const row of pluginTypeRows) {
const type = [...row.classList].find(s => s.startsWith('type-'));
if (type) {
const visible = filterBy === 'all' || headerVisibility[type];
row.style.display = visible ? null : 'none';
}
}
// Toggle 'active' class for the selected filter.
filters.forEach(el => el.classList.remove('active'));
target.classList.add('active');
};
// Add event listeners for the links changing plugins filters.
filters
.forEach(target => target.addEventListener('click', (e) => {
e.preventDefault();
window.history.replaceState({}, null, e.target.href);
filterPlugins(target);
}));
// Pre-filter plugins based on the current url anchor.
if (window.location.hash.length > 1) {
const anchor = window.location.hash.substring(1);
const target = [...filters].find(t => t.getAttribute('data-filterby') === anchor);
if (target) {
filterPlugins(target);
}
}
}
-4
View File
@@ -118,10 +118,6 @@ 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');
}
@@ -1,73 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\admin;
use admin_setting;
/**
* Render a template as part of other admin settings.
* Use for rendering additional html in settings.
*
* @package core_admin
* @subpackage admin
* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_setting_template_render extends admin_setting {
/**
* Constructor.
*
* @param string $name The name of the setting.
* @param string $templatename The name of the template to render.
* @param array|\stdClass $context The context to pass to the template.
*/
public function __construct(
string $name,
/** @var string The name of the template to render. */
protected string $templatename,
/** @var array|\stdClass The context to pass to the template. */
protected array|\stdClass $context
) {
$this->nosave = true;
parent::__construct($name, $templatename, '', '');
}
#[\Override]
public function get_setting(): bool {
return true;
}
#[\Override]
public function get_defaultsetting(): bool {
return true;
}
#[\Override]
// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
public function write_setting($data): string {
// Do not write any setting.
return '';
}
#[\Override]
public function output_html($data, $query = ''): string {
global $OUTPUT;
return $OUTPUT->render_from_template($this->templatename, $this->context);
}
}
-1
View File
@@ -48,7 +48,6 @@ class purge_caches extends \moodleform {
$mform->addElement('header', 'purgecacheheader', get_string('purgeselectedcaches', 'admin'));
$checkboxes = [
$mform->createElement('advcheckbox', 'theme', '', get_string('purgethemecache', 'admin')),
$mform->createElement('advcheckbox', 'courses', '', get_string('purgecoursecache', 'admin')),
$mform->createElement('advcheckbox', 'lang', '', get_string('purgelangcache', 'admin')),
$mform->createElement('advcheckbox', 'js', '', get_string('purgejscache', 'admin')),
$mform->createElement('advcheckbox', 'template', '', get_string('purgetemplates', 'admin')),
+1 -1
View File
@@ -62,7 +62,7 @@ class filesize extends \admin_setting {
* @param int|null $defaultunit GB, MB, etc. (in bytes)
*/
public function __construct(string $name, string $visiblename, string $description,
?int $defaultvalue = null, ?int $defaultunit = null) {
int $defaultvalue = null, int $defaultunit = null) {
$defaultsetting = self::parse_bytes($defaultvalue);
@@ -105,7 +105,7 @@ class task_log extends base {
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("{$tablealias}.classname")
->add_field("$tablealias.classname")
->set_is_sortable(true)
->add_callback(static function(string $classname): string {
$output = '';
@@ -183,7 +183,15 @@ class task_log extends base {
->set_type(column::TYPE_FLOAT)
->add_field("{$tablealias}.timeend - {$tablealias}.timestart", 'duration')
->set_is_sortable(true)
->add_callback([format::class, 'format_time'], 2);
->add_callback(static function(float $value): string {
$duration = round($value, 2);
if (empty($duration)) {
// The format_time function returns 'now' when the difference is exactly 0.
// Note: format_time performs concatenation in exactly this fashion so we should do this for consistency.
return '0 ' . get_string('secs', 'moodle');
}
return format_time($duration);
});
// Hostname column.
$columns[] = (new column(
@@ -203,8 +211,11 @@ class task_log extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_field("{$tablealias}.pid")
->set_is_sortable(true);
->set_is_sortable(true)
// Although this is an integer column, it doesn't make sense to perform numeric aggregation on it.
->set_disabled_aggregation(['avg', 'count', 'countdistinct', 'max', 'min', 'sum']);
// Database column.
$columns[] = (new column(
@@ -213,14 +224,17 @@ class task_log extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_fields("{$tablealias}.dbreads, {$tablealias}.dbwrites")
->set_is_sortable(true, ["{$tablealias}.dbreads", "{$tablealias}.dbwrites"])
->add_callback(static function($value, stdClass $row): string {
->add_callback(static function(int $value, stdClass $row): string {
$output = '';
$output .= \html_writer::div(get_string('task_stats:dbreads', 'admin', $row->dbreads));
$output .= \html_writer::div(get_string('task_stats:dbwrites', 'admin', $row->dbwrites));
return $output;
});
})
// Although this is an integer column, it doesn't make sense to perform numeric aggregation on it.
->set_disabled_aggregation(['avg', 'count', 'countdistinct', 'max', 'min', 'sum']);
// Database reads column.
$columns[] = (new column(
@@ -271,6 +285,8 @@ class task_log extends base {
* @return filter[]
*/
protected function get_all_filters(): array {
global $DB;
$tablealias = $this->get_table_alias('task_log');
// Name filter (Filter by classname).
@@ -328,7 +344,7 @@ class task_log extends base {
'output',
new lang_string('task_logoutput', 'admin'),
$this->get_entity_name(),
"{$tablealias}.output"
$DB->sql_cast_to_char("{$tablealias}.output")
))
->add_joins($this->get_joins());
@@ -20,12 +20,10 @@ use context_system;
use core_admin\reportbuilder\local\entities\task_log;
use core_reportbuilder\local\entities\user;
use core_reportbuilder\local\report\action;
use core_reportbuilder\system_report;
use html_writer;
use lang_string;
use moodle_url;
use pix_icon;
use stdClass;
use core_reportbuilder\system_report;
/**
* Task logs system report class implementation
@@ -91,9 +89,7 @@ class task_logs extends system_report {
* unique identifier
*/
public function add_columns(): void {
$entitymainalias = $this->get_entity('task_log')->get_table_alias('task_log');
$this->add_columns_from_entities([
$columns = [
'task_log:name',
'task_log:type',
'user:fullname',
@@ -103,18 +99,14 @@ class task_logs extends system_report {
'task_log:pid',
'task_log:database',
'task_log:result',
]);
];
// Wrap the task name in a link.
$this->get_column('task_log:name')
->add_field("{$entitymainalias}.id")
->add_callback(static function(string $output, stdClass $row): string {
return html_writer::link(new moodle_url('/admin/tasklogs.php', ['logid' => $row->id]), $output);
});
$this->add_columns_from_entities($columns);
// Rename the user fullname column.
$this->get_column('user:fullname')
->set_title(new lang_string('user', 'admin'));
// It's possible to override the display name of a column, if you don't want to use the value provided by the entity.
if ($column = $this->get_column('user:fullname')) {
$column->set_title(new lang_string('user', 'admin'));
}
// It's possible to set a default initial sort direction for one column.
$this->set_initial_sort_column('task_log:starttime', SORT_DESC);
@@ -127,14 +119,16 @@ class task_logs extends system_report {
* unique identifier
*/
protected function add_filters(): void {
$this->add_filters_from_entities([
$filters = [
'task_log:name',
'task_log:type',
'task_log:output',
'task_log:result',
'task_log:timestart',
'task_log:duration',
]);
];
$this->add_filters_from_entities($filters);
}
/**
@@ -149,7 +143,7 @@ class task_logs extends system_report {
new moodle_url('/admin/tasklogs.php', ['logid' => ':id']),
new pix_icon('e/search', ''),
[],
false,
true,
new lang_string('view'),
)));
@@ -159,11 +159,11 @@ class users extends system_report {
->add_callback(static function(string $fullname, \stdClass $row): string {
if ($row->suspended) {
$fullname .= ' ' . \html_writer::tag('span', get_string('suspended', 'moodle'),
['class' => 'badge text-bg-secondary ms-1']);
['class' => 'badge badge-secondary ml-1']);
}
if (!$row->confirmed) {
$fullname .= ' ' . \html_writer::tag('span', get_string('confirmationpending', 'admin'),
['class' => 'badge text-bg-danger ms-1']);
['class' => 'badge badge-danger ml-1']);
}
return $fullname;
});
@@ -1,85 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
use moodle_url;
use stdClass;
use html_writer;
use get_string_manager;
/**
* Availability admin settings.
*
* @package core_admin
* @copyright 2024 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class availability_management_table extends plugin_management_table {
protected function get_table_id(): string {
return 'availabilityconditions_administration_table';
}
protected function get_plugintype(): string {
return 'availability';
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/tool/availabilityconditions/', $params);
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/tool/availabilityconditions/')
);
}
protected function get_column_list(): array {
return [
'name' => get_string('plugin'),
'version' => get_string('version'),
'enabled' => get_string('enabled', 'admin'),
'defaultdisplaymode' => get_string('defaultdisplaymode', 'tool_availabilityconditions'),
];
}
public function setup(): void {
$this->set_attribute('id', 'availabilityconditions_administration_table');
$this->set_attribute('class', 'admintable generaltable');
parent::setup();
}
protected function col_name(stdClass $row): string {
return html_writer::span(
get_string('pluginname', 'availability_' . $row->plugininfo->name)
);
}
protected function col_defaultdisplaymode(stdClass $row): string {
global $OUTPUT, $CFG;
$displaymode = get_config('availability_' . $row->plugininfo->name, 'defaultdisplaymode') ? 'show' : 'hide';
$paramsdisplaymode = [
'sesskey' => sesskey(),
'plugin' => $row->plugininfo->name,
'displaymode' => $displaymode,
];
$urldisplaymode = new moodle_url('/' . $CFG->admin . '/tool/availabilityconditions/', $paramsdisplaymode);
return html_writer::link($urldisplaymode, $OUTPUT->pix_icon('t/' . $displaymode,
get_string($displaymode)), ['class' => 'display-mode-' . $row->plugininfo->name]);
}
}
+1 -1
View File
@@ -232,7 +232,7 @@ class hook_list_table extends flexible_table {
}
if ($tooltip) {
$attributes['data-bs-toggle'] = 'tooltip';
$attributes['data-toggle'] = 'tooltip';
$attributes['title'] = $tooltip;
}
return html_writer::span($tag, "badge badge-{$type}", $attributes);
+19 -20
View File
@@ -303,29 +303,28 @@ abstract class plugin_management_table extends flexible_table implements dynamic
global $OUTPUT;
$enabled = $row->plugininfo->is_enabled();
if ($enabled) {
$labelstr = get_string('disableplugin', 'core_admin', $row->plugininfo->displayname);
} else {
$labelstr = get_string('enableplugin', 'core_admin', $row->plugininfo->displayname);
}
$params = [
'id' => 'admin-toggle-' . $row->plugininfo->name,
'checked' => $enabled,
'dataattributes' => [
'name' => 'id',
'value' => $row->plugininfo->name,
'toggle-method' => $this->get_toggle_service(),
'action' => 'togglestate',
'plugin' => $row->plugin,
'state' => $enabled ? 1 : 0,
],
'title' => $labelstr,
'label' => $labelstr,
'labelclasses' => 'visually-hidden',
'sesskey' => sesskey(),
'plugin' => $row->plugininfo->name,
'action' => $enabled ? 'disable' : 'enable',
];
return $OUTPUT->render_from_template('core_admin/setting_configtoggle', $params);
if ($enabled) {
$icon = $OUTPUT->pix_icon('t/hide', get_string('disableplugin', 'core_admin', $row->plugininfo->displayname));
} else {
$icon = $OUTPUT->pix_icon('t/show', get_string('enableplugin', 'core_admin', $row->plugininfo->displayname));
}
return html_writer::link(
$this->get_action_url($params),
$icon,
[
'data-toggle-method' => $this->get_toggle_service(),
'data-action' => 'togglestate',
'data-plugin' => $row->plugin,
'data-state' => $enabled ? 1 : 0,
],
);
}
protected function col_order(stdClass $row): string {
+1 -1
View File
@@ -71,7 +71,7 @@ Example:
exit(0);
}
error_reporting(E_ALL);
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
$content = core_component::get_cache_content();
+9 -8
View File
@@ -30,7 +30,6 @@
*/
define('CLI_SCRIPT', true);
define('NO_DEBUG_DISPLAY', false);
// extra execution prevention - we can not just require config.php here
if (isset($_SERVER['REMOTE_ADDR'])) {
@@ -166,23 +165,19 @@ $CFG->running_installer = true;
$CFG->early_install_lang = true;
$CFG->ostype = (stristr(PHP_OS, 'win') && !stristr(PHP_OS, 'darwin')) ? 'WINDOWS' : 'UNIX';
$CFG->dboptions = array();
$CFG->debug = (E_ALL);
$CFG->debug = (E_ALL | E_STRICT);
$CFG->debugdisplay = true;
$CFG->debugdeveloper = true;
$parts = explode('/', str_replace('\\', '/', dirname(__DIR__)));
$CFG->admin = array_pop($parts);
// Point pear include path to moodles lib/pear so that includes and requires will search there for files before anywhere else
// the problem is that we need specific version of quickforms and hacked excel files :-(.
//point pear include path to moodles lib/pear so that includes and requires will search there for files before anywhere else
//the problem is that we need specific version of quickforms and hacked excel files :-(
ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include_path'));
// The core_component class can be used in any scripts, it does not need anything else.
require_once($CFG->libdir.'/classes/component.php');
// Register our classloader.
\core\component::register_autoloader();
require_once($CFG->libdir.'/classes/text.php');
require_once($CFG->libdir.'/classes/string_manager.php');
require_once($CFG->libdir.'/classes/string_manager_install.php');
@@ -196,6 +191,10 @@ require_once($CFG->libdir.'/moodlelib.php');
require_once($CFG->libdir.'/deprecatedlib.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
require_once($CFG->dirroot.'/cache/lib.php');
// Register our classloader.
\core_component::register_autoloader();
require($CFG->dirroot.'/version.php');
$CFG->target_release = $release;
@@ -217,6 +216,7 @@ $databases = array('mysqli' => moodle_database::get_driver_instance('mysqli', 'n
'auroramysql' => moodle_database::get_driver_instance('auroramysql', 'native'),
'mariadb'=> moodle_database::get_driver_instance('mariadb', 'native'),
'pgsql' => moodle_database::get_driver_instance('pgsql', 'native'),
'oci' => moodle_database::get_driver_instance('oci', 'native'),
'sqlsrv' => moodle_database::get_driver_instance('sqlsrv', 'native'), // MS SQL*Server PHP driver
);
foreach ($databases as $type=>$database) {
@@ -560,6 +560,7 @@ do {
if ($interactive) {
cli_separator();
cli_heading(get_string('dbprefix', 'install'));
//TODO: solve somehow the prefix trouble for oci.
if ($options['prefix'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['prefix']);
} else {
+1 -1
View File
@@ -50,6 +50,6 @@ Example:
exit(0);
}
\core\session\manager::destroy_all();
\core\session\manager::kill_all_sessions();
exit(0);
-1
View File
@@ -24,7 +24,6 @@
*/
define('CLI_SCRIPT', true);
define('IGNORE_COMPONENT_CACHE', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
+16 -39
View File
@@ -55,14 +55,13 @@ If courseid is set, course module/s will be added into the course.
Options:
-f, --file=STRING Path to the backup file.
-c, --categoryid=INT ID of the course category to restore to. This option is ignored when restoring an activity and courseid is set.
-C, --courseid=INT ID of the course to restore to. This option is ignored when restoring a course and the categoryid is set.
-c, --categoryid=INT ID of the course category to restore to.
-C, --courseid=INT ID of the course to restore to. This option is ignored if categoryid is set.
-s, --showdebugging Show developer level debugging information
-h, --help Print out this help.
Example:
\$sudo -u www-data /usr/bin/php admin/cli/restore_backup.php --file=/path/to/backup/coursebackup.mbz --categoryid=1\n
\$sudo -u www-data /usr/bin/php admin/cli/restore_backup.php --file=/path/to/backup/activitybackup.mbz --courseid=1\n
\$sudo -u www-data /usr/bin/php admin/cli/restore_backup.php --file=/path/to/backup/file.mbz --categoryid=1\n
EOL;
echo $help;
@@ -85,15 +84,11 @@ if ($options['categoryid']) {
if (!$category = $DB->get_record('course_categories', ['id' => $options['categoryid']], 'id')) {
throw new \moodle_exception('invalidcategoryid');
}
}
if ($options['courseid']) {
} else if ($options['courseid']) {
if (!$course = $DB->get_record('course', ['id' => $options['courseid']], 'id')) {
throw new \moodle_exception('invalidcourseid');
}
}
if (empty($category) && empty($course)) {
} else {
throw new \moodle_exception('invalidoption');
}
@@ -105,46 +100,28 @@ $fp = get_file_packer('application/vnd.moodle.backup');
$fp->extract_to_pathname($options['file'], $path);
cli_heading(get_string('preprocessingbackupfile'));
try {
// Create a temporary restore controller to determine the restore type.
$tmprc = new restore_controller($backupdir, SITEID, backup::INTERACTIVE_NO,
backup::MODE_GENERAL, $admin->id, backup::TARGET_EXISTING_ADDING);
// Restore the backup into a new course if:
// - It is a course backup and the category is set.
// - It is an activity backup and the course is not set.
$restoreasnewcourse = ($tmprc->get_type() === backup::TYPE_1COURSE && !empty($category)) ||
($tmprc->get_type() !== backup::TYPE_1COURSE && empty($course));
// Make sure to clean up the temporary restore controller.
$tmprc->destroy();
list($fullname, $shortname) = restore_dbops::calculate_course_names(0, get_string('restoringcourse', 'backup'),
get_string('restoringcourseshortname', 'backup'));
if ($restoreasnewcourse) {
list($fullname, $shortname) = restore_dbops::calculate_course_names(0, get_string('restoringcourse', 'backup'),
get_string('restoringcourseshortname', 'backup'));
$courseid = restore_dbops::create_new_course($fullname, $shortname, $category->id);
$rc = new restore_controller($backupdir, $courseid, backup::INTERACTIVE_NO,
backup::MODE_GENERAL, $admin->id, backup::TARGET_NEW_COURSE);
} else {
if (!empty($course)) {
$courseid = $course->id;
$rc = new restore_controller($backupdir, $courseid, backup::INTERACTIVE_NO,
backup::MODE_GENERAL, $admin->id, backup::TARGET_EXISTING_ADDING);
} else {
$courseid = restore_dbops::create_new_course($fullname, $shortname, $category->id);
$rc = new restore_controller($backupdir, $courseid, backup::INTERACTIVE_NO,
backup::MODE_GENERAL, $admin->id, backup::TARGET_NEW_COURSE);
}
$rc->execute_precheck();
$rc->execute_plan();
$rc->destroy();
// Rename the course's full and short names with the backup file's original names if the backup file is an activity backup
// that is restored to a new course.
if ($restoreasnewcourse && $rc->get_type() !== backup::TYPE_1COURSE) {
// Rename course name if the backup is from course module and restore to category.
if (empty($course)) {
$course = get_course($courseid);
$backupinfo = $rc->get_info();
$tmpfullname = $backupinfo->original_course_fullname ?? get_string('restoretonewcourse', 'backup');
$tmpshortname = $backupinfo->original_course_shortname ?? get_string('newcourse');
list($fullname, $shortname) = restore_dbops::calculate_course_names(
courseid: 0,
fullname: $tmpfullname,
shortname: $tmpshortname,
);
list($fullname, $shortname) = restore_dbops::calculate_course_names(0, get_string('restoretonewcourse', 'backup'),
get_string('newcourse'));
$course->fullname = $fullname;
$course->shortname = $shortname;
$course->visible = 1;
+2 -204
View File
@@ -4327,7 +4327,6 @@
<VENDOR name="oracle" version="19" />
</DATABASE>
<PHP version="8.1.0" level="required">
<RESTRICT function="restrict_php_version_84" message="unsupportedphpversion84" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -4523,7 +4522,6 @@
<VENDOR name="oracle" version="19" />
</DATABASE>
<PHP version="8.1.0" level="required">
<RESTRICT function="restrict_php_version_84" message="unsupportedphpversion84" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -4716,7 +4714,7 @@
<VENDOR name="mysql" version="8.4" />
<VENDOR name="postgres" version="14" />
<VENDOR name="mssql" version="14.0" />
<VENDOR name="auroramysql" version="8.0" />
<VENDOR name="oracle" version="19" />
</DATABASE>
<PHP version="8.2.0" level="required">
</PHP>
@@ -4894,210 +4892,10 @@
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_db_prefix_length" level="required">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_async_backup" level="recommended">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_aurora_version" level="optional">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="5.1" requires="4.2.3">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="10.11.0" />
<VENDOR name="mysql" version="8.4" />
<VENDOR name="postgres" version="15" />
<VENDOR name="mssql" version="14.0" />
<VENDOR name="auroramysql" version="8.0" />
</DATABASE>
<PHP version="8.2.0" level="required">
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="required">
<FEEDBACK>
<ON_ERROR message="mbstringrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="required">
<FEEDBACK>
<ON_ERROR message="opensslrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlreader" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="required">
<FEEDBACK>
<ON_ERROR message="intlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
</PHP_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 file="lib/upgradelib.php" function="check_oracle_usage" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_async_backup" level="recommended">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_aurora_version" level="optional">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+7
View File
@@ -40,6 +40,13 @@ if (!function_exists('iconv')) {
die();
}
// Make sure php5-json is available.
if (!function_exists('json_encode') || !function_exists('json_decode')) {
// This also shouldn't happen.
echo 'Moodle requires the json PHP extension. Please install or enable the json extension.';
die();
}
// Make sure xml extension is available.
if (!extension_loaded('xml')) {
echo 'Moodle requires the xml PHP extension. Please install or enable the xml extension.';
+69 -1
View File
@@ -43,6 +43,61 @@ $providers = get_message_providers();
$preferences = get_message_output_default_preferences();
if (($form = data_submitted()) && confirm_sesskey()) {
$newpreferences = array();
// Prepare default message outputs settings.
foreach ($providers as $provider) {
$componentproviderbase = $provider->component.'_'.$provider->name;
$disableprovidersetting = $componentproviderbase.'_disable';
if (!isset($form->$disableprovidersetting)) {
$newpreferences[$disableprovidersetting] = 1;
} else {
$newpreferences[$disableprovidersetting] = 0;
}
$componentprovidersetting = $componentproviderbase.'_locked';
foreach ($processors as $processor) {
$value = 0;
if (isset($form->{$componentprovidersetting}[$processor->name])) {
$value = $form->{$componentprovidersetting}[$processor->name];
if ($value == 'on') {
$value = 1;
}
}
// Record the site preference.
$newpreferences[$processor->name.'_provider_'.$componentprovidersetting] = $value;
}
$componentprovidersetting = $componentproviderbase.'_enabled';
$newsettings = [];
if (isset($form->$componentprovidersetting)) {
// Store defined comma-separated processors as setting value.
// Using array_filter eliminates elements set to 0 above.
$newsettings = array_keys(array_filter($form->{$componentprovidersetting}));
}
// Let's join existing setting values for disabled processors.
$property = 'message_provider_'.$componentprovidersetting;
if (property_exists($preferences, $property)) {
$existingsetting = $preferences->$property;
foreach ($disabledprocessors as $disable) {
if (strpos($existingsetting, $disable->name) > -1) {
$newsettings[] = $disable->name;
}
}
}
$value = join(',', $newsettings);
if (empty($value)) {
$value = null;
}
// Record the site preference.
$newpreferences['message_provider_'.$componentprovidersetting] = $value;
}
// Update database.
$transaction = $DB->start_delegated_transaction();
// Save processors enabled/disabled status.
foreach ($allprocessors as $processor) {
@@ -51,11 +106,24 @@ if (($form = data_submitted()) && confirm_sesskey()) {
$class::enable_plugin($processor->name, $enabled);
}
foreach ($newpreferences as $name => $value) {
$old = isset($preferences->$name) ? $preferences->$name : '';
if ($old != $value) {
add_to_config_log($name, $old, $value, 'core');
}
set_config($name, $value, 'message');
}
$transaction->allow_commit();
core_plugin_manager::reset_caches();
$url = new moodle_url('message.php');
redirect($url);
}
// Page settings.
// Page settings
$PAGE->set_context(context_system::instance());
$renderer = $PAGE->get_renderer('core', 'message');
+1 -2
View File
@@ -91,8 +91,7 @@ if (!empty($hostid) && array_key_exists($hostid, $hosts)) {
// this query is horrible and has to be remapped afterwards, because of the non-uniqueness
// of the remoterep service (it has two plugins so far that use it)
// it's possible to get a unique list back using a subquery with LIMIT but that would break oracle
// so it's best to just do this small query and then remap the results afterwards.
// TODO: Optimise the query, as Oracle-specific constraints no longer apply.
// so it's best to just do this small query and then remap the results afterwards
$sql = '
SELECT DISTINCT
' . $DB->sql_concat('r.plugintype', "'_'", 'r.pluginname', "'_'", 's.name') . ' AS uniqueid,
+7 -4
View File
@@ -29,6 +29,8 @@ require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/filelib.php');
$fetchupdates = optional_param('fetchupdates', false, PARAM_BOOL); // Check for available plugins updates.
$updatesonly = optional_param('updatesonly', false, PARAM_BOOL); // Show updateable plugins only.
$contribonly = optional_param('contribonly', false, PARAM_BOOL); // Show additional plugins only.
$uninstall = optional_param('uninstall', '', PARAM_COMPONENT); // Uninstall the plugin.
$delete = optional_param('delete', '', PARAM_COMPONENT); // Delete the plugin folder after it is uninstalled.
$confirmed = optional_param('confirm', false, PARAM_BOOL); // Confirm the uninstall/delete action.
@@ -45,7 +47,8 @@ require_admin();
$syscontext = context_system::instance();
// URL params we want to maintain on redirects.
$pageurl = new moodle_url('/admin/plugins.php');
$pageparams = array('updatesonly' => $updatesonly, 'contribonly' => $contribonly);
$pageurl = new moodle_url('/admin/plugins.php', $pageparams);
$pluginman = core_plugin_manager::instance();
@@ -54,7 +57,7 @@ $PAGE->set_primary_active_tab('siteadminnode');
if ($uninstall) {
if (!$confirmed) {
admin_externalpage_setup('pluginsoverview');
admin_externalpage_setup('pluginsoverview', '', $pageparams);
} else {
$PAGE->set_url($pageurl);
$PAGE->set_context($syscontext);
@@ -198,7 +201,7 @@ if ($installupdate and $installupdateversion) {
}
}
admin_externalpage_setup('pluginsoverview');
admin_externalpage_setup('pluginsoverview', '', $pageparams);
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
@@ -211,4 +214,4 @@ if ($fetchupdates) {
redirect($PAGE->url);
}
echo $output->plugin_management_page($pluginman, $checker);
echo $output->plugin_management_page($pluginman, $checker, $pageparams);
-12
View File
@@ -1,12 +0,0 @@
# core_adminpresets (subsystem) Upgrade notes
## 5.0
### Removed
- Remove chat and survey from Adminpresets.
For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
- Removed block_mnet_hosts from admin presets
For more information see [MDL-84309](https://tracker.moodle.org/browse/MDL-84309)
+8 -4
View File
@@ -193,12 +193,14 @@ class helper {
// Set Activity chooser tabs to "Starred, Recommended, All".
static::add_item($presetid, 'activitychoosertabmode', '4');
// Modules: Hide database, external tool (lti), IMS content package (imscp), lesson, SCORM, wiki, workshop.
// Modules: Hide chat, database, external tool (lti), IMS content package (imscp), lesson, SCORM, survey, wiki, workshop.
static::add_plugin($presetid, 'mod', 'chat', false);
static::add_plugin($presetid, 'mod', 'data', false);
static::add_plugin($presetid, 'mod', 'lti', false);
static::add_plugin($presetid, 'mod', 'imscp', false);
static::add_plugin($presetid, 'mod', 'lesson', false);
static::add_plugin($presetid, 'mod', 'scorm', false);
static::add_plugin($presetid, 'mod', 'survey', false);
static::add_plugin($presetid, 'mod', 'wiki', false);
static::add_plugin($presetid, 'mod', 'workshop', false);
@@ -207,7 +209,7 @@ class helper {
static::add_plugin($presetid, 'availability', 'profile', false);
// Blocks: Hide Activities, Blog menu, Blog tags, Comments, Course completion status, Courses, Flickr,
// Global search, Latest badges, Learning plans, Logged in user, Login, Main menu, Mentees, Online users,
// Global search, Latest badges, Learning plans, Logged in user, Login, Main menu, Mentees, Network servers, Online users,
// Private files, Recent blog entries, Recently accessed courses, Search forums, Section links, Social activities,
// Starred courses, Tags, YouTube.
// Hidden by default: Course/site summary, RSS feeds, Self completion, Feedback.
@@ -226,6 +228,7 @@ class helper {
static::add_plugin($presetid, 'block', 'login', false);
static::add_plugin($presetid, 'block', 'site_main_menu', false);
static::add_plugin($presetid, 'block', 'mentees', false);
static::add_plugin($presetid, 'block', 'mnet_hosts', false);
static::add_plugin($presetid, 'block', 'private_files', false);
static::add_plugin($presetid, 'block', 'blog_recent', false);
static::add_plugin($presetid, 'block', 'rss_client', false);
@@ -289,7 +292,7 @@ class helper {
static::add_item($presetid, 'enablenotes', '1');
static::add_item($presetid, 'enableblogs', '1');
static::add_item($presetid, 'enablebadges', '1');
static::add_item($presetid, 'enableanalytics', '0');
static::add_item($presetid, 'enableanalytics', '1');
static::add_item($presetid, 'enabled', '1', 'core_competency');
static::add_item($presetid, 'pushcourseratingstouserplans', '1', 'core_competency');
static::add_item($presetid, 'showdataretentionsummary', '1', 'tool_dataprivacy');
@@ -312,7 +315,7 @@ class helper {
static::add_plugin($presetid, 'availability', 'profile', true);
// Blocks: Enable Activities, Blog menu, Blog tags, Comments, Course completion status, Courses, Flickr,
// Global search, Latest badges, Learning plans, Logged in user, Login, Main menu, Mentees, Online users,
// Global search, Latest badges, Learning plans, Logged in user, Login, Main menu, Mentees, Network servers, Online users,
// Private files, Recent blog entries, Recently accessed courses, Search forums, Section links, Social activities,
// Starred courses, Tags, YouTube.
// Hidden by default: Course/site summary, RSS feeds, Self completion, Feedback.
@@ -330,6 +333,7 @@ class helper {
static::add_plugin($presetid, 'block', 'login', true);
static::add_plugin($presetid, 'block', 'site_main_menu', true);
static::add_plugin($presetid, 'block', 'mentees', true);
static::add_plugin($presetid, 'block', 'mnet_hosts', true);
static::add_plugin($presetid, 'block', 'private_files', true);
static::add_plugin($presetid, 'block', 'blog_recent', true);
static::add_plugin($presetid, 'block', 'search_forums', true);
-5
View File
@@ -1133,11 +1133,6 @@ class manager {
'visiblevalue' => $visiblevalue,
];
if ($plugininfo && $plugininfo->is_deprecated()) {
$skipped[] = $data;
continue;
}
if ($pluginclass == '\core\plugininfo\orphaned') {
$skipped[] = $data;
continue;
+2 -2
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<PRESET>
<NAME>Imported preset</NAME>
<COMMENTS>&lt;p dir="ltr" style="text-align:left;"&gt;Porfolios enabled, Emojipicker enabled, Lesson media width set to 900 and maxanswers set to 2 and disabled advanced. Plugins: disabled block_html, mod_database and mod_page plugins and enabled atto_html, block_activity_modules and mod_lesson.&lt;/p&gt;</COMMENTS>
<COMMENTS>&lt;p dir="ltr" style="text-align:left;"&gt;Porfolios enabled, Emojipicker enabled, Lesson media width set to 900 and maxanswers set to 2 and disabled advanced. Plugins: disabled block_html, mod_database and mod_chat plugins and enabled atto_html, block_activity_modules and mod_lesson.&lt;/p&gt;</COMMENTS>
<PRESET_DATE>1631615985</PRESET_DATE>
<SITE_URL>http://demo.moodle</SITE_URL>
<AUTHOR>Ada Lovelace</AUTHOR>
@@ -30,7 +30,7 @@
<ACTIVITY_MODULES>1</ACTIVITY_MODULES>
</BLOCK>
<MOD>
<PAGE>0</PAGE>
<CHAT>0</CHAT>
<DATA>0</DATA>
<LESSON>1</LESSON>
</MOD>
+2 -2
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<PRESET>
<NAME>Starter</NAME>
<COMMENTS>&lt;p dir="ltr" style="text-align:left;"&gt;Badges disabled, Emojipicker enabled, Lesson media width set to 900 and maxanswers set to 2 and disabled advanced. Plugins: disabled block_html, mod_database and mod_page plugins and enabled atto_html and block_activity_modules.&lt;/p&gt;</COMMENTS>
<COMMENTS>&lt;p dir="ltr" style="text-align:left;"&gt;Badges disabled, Emojipicker enabled, Lesson media width set to 900 and maxanswers set to 2 and disabled advanced. Plugins: disabled block_html, mod_database and mod_chat plugins and enabled atto_html and block_activity_modules.&lt;/p&gt;</COMMENTS>
<PRESET_DATE>1631615985</PRESET_DATE>
<SITE_URL>http://demo.moodle</SITE_URL>
<AUTHOR>Ada Lovelace</AUTHOR>
@@ -30,7 +30,7 @@
<ACTIVITY_MODULES>1</ACTIVITY_MODULES>
</BLOCK>
<MOD>
<PAGE>0</PAGE>
<CHAT>0</CHAT>
<DATA>0</DATA>
<LESSON>1</LESSON>
</MOD>
+1 -1
View File
@@ -25,7 +25,7 @@ namespace core_adminpresets;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass core_adminpresets_generator
*/
final class generator_test extends \advanced_testcase {
class generator_test extends \advanced_testcase {
/**
* Test the behaviour of create_preset() method.
+5 -8
View File
@@ -23,9 +23,9 @@ namespace core_adminpresets;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \core_adminpresets\helper
* @coversDefaultClass helper
*/
final class helper_test extends \advanced_testcase {
class helper_test extends \advanced_testcase {
/**
* Test the behaviour of create_preset() method.
@@ -285,15 +285,12 @@ final class helper_test extends \advanced_testcase {
// We need to change some of the default values; otherwise, the full preset won't be applied, because all the settings
// and plugins are the same.
set_config('enableanalytics', '1');
set_config('enableanalytics', '0');
$generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets');
$generator->create_preset(['name' => 'Preset 1']);
$invokable = self::get_invokable();
set_error_handler($invokable, E_WARNING);
$presetid = helper::change_default_preset($preset);
restore_error_handler();
if (empty($settings) && empty($plugins)) {
// The preset hasn't been applied.
@@ -334,7 +331,7 @@ final class helper_test extends \advanced_testcase {
],
'plugins' => [
'assign' => 1,
'wiki' => 0,
'chat' => 0,
'data' => 0,
'lesson' => 0,
],
@@ -374,7 +371,7 @@ final class helper_test extends \advanced_testcase {
],
'plugins' => [
'assign' => 1,
'page' => 0,
'chat' => 0,
'data' => 0,
'lesson' => 1,
],
@@ -25,7 +25,7 @@ namespace core_adminpresets\local\setting;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \core_adminpresets\local\setting\adminpresets_admin_setting_bloglevel
*/
final class adminpresets_admin_setting_bloglevel_test extends \advanced_testcase {
class adminpresets_admin_setting_bloglevel_test extends \advanced_testcase {
/**
* Test the behaviour of save_value() method.
@@ -75,15 +75,15 @@ final class adminpresets_admin_setting_bloglevel_test extends \advanced_testcase
public static function save_value_provider(): array {
return [
'Save the bloglevel and set blog_menu block visibility to true' => [
'settingvalue' => BLOG_USER_LEVEL,
'setttingvalue' => BLOG_USER_LEVEL,
'expectedsaved' => true,
],
'Same value to bloglevel, so it will not be saved' => [
'settingvalue' => BLOG_SITE_LEVEL,
'setttingvalue' => BLOG_SITE_LEVEL,
'expectedsaved' => false,
],
'Save the bloglevel and set blog_menu block visibility to false' => [
'settingvalue' => 0,
'setttingvalue' => 0,
'expectedsaved' => true,
],
];
@@ -25,7 +25,7 @@ namespace core_adminpresets\local\setting;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \core_adminpresets\local\setting\adminpresets_admin_setting_sitesettext
*/
final class adminpresets_admin_setting_sitesettext_test extends \advanced_testcase {
class adminpresets_admin_setting_sitesettext_test extends \advanced_testcase {
/**
* Test the behaviour of save_value() method.
@@ -70,22 +70,22 @@ final class adminpresets_admin_setting_sitesettext_test extends \advanced_testca
return [
'Fullname: different value' => [
'settingname' => 'fullname',
'settingvalue' => 'New site fullname',
'setttingvalue' => 'New site fullname',
'expectedsaved' => true,
],
'Fullname: same value' => [
'settingname' => 'fullname',
'settingvalue' => 'PHPUnit test site',
'setttingvalue' => 'PHPUnit test site',
'expectedsaved' => false,
],
'Summary: different value' => [
'settingname' => 'summary',
'settingvalue' => 'This is a new site summary.',
'setttingvalue' => 'This is a new site summary.',
'expectedsaved' => true,
],
'Summary: same value' => [
'settingname' => 'summary',
'settingvalue' => '',
'setttingvalue' => '',
'expectedsaved' => false,
],
];
@@ -25,7 +25,7 @@ namespace core_adminpresets\local\setting;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \core_adminpresets\local\setting\adminpresets_setting
*/
final class adminpresets_setting_test extends \advanced_testcase {
class adminpresets_setting_test extends \advanced_testcase {
/**
* Test the behaviour of save_value() method.
@@ -83,28 +83,28 @@ final class adminpresets_setting_test extends \advanced_testcase {
'category' => 'optionalsubsystems',
'settingplugin' => 'core',
'settingname' => 'enablebadges',
'settingvalue' => '1',
'setttingvalue' => '1',
'expectedsaved' => false,
],
'Core setting with a different value is saved' => [
'category' => 'optionalsubsystems',
'settingplugin' => 'core',
'settingname' => 'enablebadges',
'settingvalue' => '0',
'setttingvalue' => '0',
'expectedsaved' => true,
],
'Plugin setting with the same value is not saved' => [
'category' => 'modsettinglesson',
'settingplugin' => 'mod_lesson',
'settingname' => 'mediawidth',
'settingvalue' => '640',
'setttingvalue' => '640',
'expectedsaved' => false,
],
'Plugin setting with different value is saved' => [
'category' => 'modsettinglesson',
'settingplugin' => 'mod_lesson',
'settingname' => 'mediawidth',
'settingvalue' => '900',
'setttingvalue' => '900',
'expectedsaved' => true,
],
];
@@ -174,7 +174,7 @@ final class adminpresets_setting_test extends \advanced_testcase {
'settingplugin' => 'mod_lesson',
'settingname' => 'maxanswers',
'advsettingname' => 'maxanswers_adv',
'advsettingvalue' => '1',
'advsetttingvalue' => '1',
'expectedsaved' => false,
],
'Plugin setting with different value is saved' => [
@@ -182,7 +182,7 @@ final class adminpresets_setting_test extends \advanced_testcase {
'settingplugin' => 'mod_lesson',
'settingname' => 'maxanswers',
'advsettingname' => 'maxanswers_adv',
'advsettingvalue' => '0',
'advsetttingvalue' => '0',
'expectedsaved' => true,
],
'Plugin setting without advanced attributes are not saved' => [
@@ -190,7 +190,7 @@ final class adminpresets_setting_test extends \advanced_testcase {
'settingplugin' => 'mod_lesson',
'settingname' => 'maxanswers',
'advsettingname' => null,
'advsettingvalue' => '0',
'advsetttingvalue' => '0',
'expectedsaved' => false,
],
];
+4 -44
View File
@@ -28,14 +28,13 @@ use stdClass;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \core_adminpresets\manager
*/
final class manager_test extends \advanced_testcase {
class manager_test extends \advanced_testcase {
/**
* Include required libraries.
*/
public static function setUpBeforeClass(): void {
global $CFG;
require_once($CFG->libdir.'/adminlib.php');
parent::setUpBeforeClass();
}
/**
@@ -424,7 +423,7 @@ final class manager_test extends \advanced_testcase {
* @param string|null $expectedpresetname Expected preset name.
*/
public function test_import_preset(string $filecontents, bool $expectedpreset, bool $expectedsettings = false,
bool $expectedplugins = false, bool $expecteddebugging = false, ?string $expectedexception = null,
bool $expectedplugins = false, bool $expecteddebugging = false, string $expectedexception = null,
string $expectedpresetname = 'Imported preset'): void {
global $DB;
@@ -438,10 +437,7 @@ final class manager_test extends \advanced_testcase {
// Call the method to be tested.
$manager = new manager();
try {
$invokable = self::get_invokable();
set_error_handler($invokable, E_WARNING);
list($xml, $preset, $settingsfound, $pluginsfound) = $manager->import_preset($filecontents);
restore_error_handler();
} catch (\exception $e) {
if ($expectedexception) {
$this->assertInstanceOf($expectedexception, $e);
@@ -509,7 +505,7 @@ final class manager_test extends \advanced_testcase {
'activity_modules' => 1,
],
'mod' => [
'page' => 0,
'chat' => 0,
'data' => 0,
'lesson' => 1,
],
@@ -606,6 +602,7 @@ final class manager_test extends \advanced_testcase {
];
}
/**
* Test the behaviour of delete_preset() method when the preset id doesn't exist.
*
@@ -812,41 +809,4 @@ final class manager_test extends \advanced_testcase {
$enabledplugins = \core\plugininfo\qtype::get_enabled_plugins();
$this->assertArrayHasKey('truefalse', $enabledplugins);
}
/**
* Test apply_preset for a deprecated plugin type.
*
* @runInSeparateProcess
*
* @covers ::apply_preset
* @return void
*/
public function test_apply_preset_deprecated_plugintype(): void {
global $CFG;
$this->resetAfterTest();
// Create a preset.
$generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets');
$presetid = $generator->create_preset();
// Add a mock plugin into the preset. This plugin will be mocked and deprecated below.
helper::add_plugin($presetid, 'fake', 'fullfeatured', true);
// Inject the mock plugin type + plugin, and deprecate it.
$this->add_mocked_plugintype('fake', "$CFG->libdir/tests/fixtures/fakeplugins/fake", true);
$this->add_mocked_plugin('fake', 'fullfeatured', $CFG->libdir . '/tests/fixtures/fakeplugins/fake/fullfeatured');
// Pre-flight check to ensure that the plugin is deprecated.
$pluginman = \core\plugin_manager::instance();
$plugininfo = $pluginman->get_plugin_info('fake_fullfeatured');
// Expected, unit-test-only debugging, since \core\plugin_manager isn't aware of the mock plugininfo class for this type.
$this->assertDebuggingCalled();
$this->assertTrue($plugininfo->is_deprecated());
// Finally, check apply_preset method, verifying the deprecated plugin is skipped.
$manager = new manager();
[$applied, $skipped] = $manager->apply_preset($presetid);
$this->assertdebuggingcalledcount(2); // Expected unit-test-only debugging, as above.
$this->assertContains('fake', array_column($skipped, 'plugin'));
}
}
@@ -30,7 +30,7 @@ use core_privacy\tests\provider_testcase;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \core_adminpresets\privacy\provider
*/
final class privacy_provider_test extends provider_testcase {
class privacy_provider_test extends provider_testcase {
/**
* Test for provider::get_metadata().
+80
View File
@@ -0,0 +1,80 @@
#!/usr/bin/php -f
<?php
//error_reporting(0);
//ini_set('display_errors',0);
require_once(__DIR__ . '/../config.php');
$tmp = explode('@',$_ENV['RECIPIENT']);
$address = $tmp[0];
// BOUNCE EMAILS TO NOREPLY
if ($_ENV['RECIPIENT'] == $CFG->noreplyaddress) {
$user = new stdClass();
$user->email = $_ENV['SENDER'];
if (!validate_email($user->email)) {
die();
}
$site = get_site();
$subject = get_string('noreplybouncesubject','moodle',format_string($site->fullname));
$body = get_string('noreplybouncemessage','moodle',format_string($site->fullname))."\n\n";
$fd = fopen('php://stdin','r');
if ($fd) {
while(!feof($fd)) {
$body .= fgets($fd);
}
fclose($fd);
}
$user->id = 0; // to prevent anything annoying happening
$from->firstname = null;
$from->lastname = null;
$from->email = '<>';
$from->maildisplay = true;
email_to_user($user,$from,$subject,$body);
die ();
}
/// ALL OTHER PROCESSING
// we need to split up the address
$prefix = substr($address,0,4);
$mod = substr($address,4,2);
$modargs = substr($address,6,-16);
$hash = substr($address,-16);
if (substr(md5($prefix.$mod.$modargs.$CFG->siteidentifier),0,16) != $hash) {
die("HASH DIDN'T MATCH!\n");
}
list(,$modid) = unpack('C',base64_decode($mod.'=='));
if ($modid == '0') { // special
$modname = 'moodle';
}
else {
$modname = $DB->get_field("modules", "name", array("id"=>$modid));
include_once('mod/'.$modname.'/lib.php');
}
$function = $modname.'_process_email';
if (!function_exists($function)) {
die();
}
$fd = fopen('php://stdin','r');
if (!$fd) {
exit();
}
while(!feof($fd)) {
$body .= fgets($fd);
}
$function($modargs,$body);
fclose($fd);
+1 -7
View File
@@ -23,8 +23,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('IGNORE_COMPONENT_CACHE', true);
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
@@ -44,11 +42,7 @@ if ($data = $form->get_data()) {
purge_caches();
$message = get_string('purgecachesfinished', 'admin');
} else {
// When passing selected options, ensure each is cast to boolean for strict comparison.
purge_caches(array_map(
fn($option) => (bool) $option,
$data->purgeselectedoptions,
));
purge_caches($data->purgeselectedoptions);
$message = get_string('purgeselectedcachesfinished', 'admin');
}
+5 -10
View File
@@ -34,10 +34,8 @@ 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 && $siteisregistered) {
if ($unregistration && \core\hub\registration::is_registered()) {
if ($confirm) {
require_sesskey();
\core\hub\registration::unregister(false, false);
@@ -62,7 +60,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(null, ['registered' => $siteisregistered]);
$siteregistrationform = new \core\hub\site_registration_form();
$siteregistrationform->set_data(['returnurl' => $returnurl]);
if ($fromform = $siteregistrationform->get_data()) {
@@ -88,7 +86,7 @@ echo $OUTPUT->header();
// Current status of registration.
$notificationtype = \core\output\notification::NOTIFY_ERROR;
if ($siteisregistered) {
if (\core\hub\registration::is_registered()) {
$lastupdated = \core\hub\registration::get_last_updated();
if ($lastupdated == 0) {
$registrationmessage = get_string('pleaserefreshregistrationunknown', 'admin');
@@ -106,7 +104,7 @@ if ($siteisregistered) {
}
// Heading.
if ($siteisregistered) {
if (\core\hub\registration::is_registered()) {
echo $OUTPUT->heading(get_string('registerwithmoodleorgupdate', 'core_hub'));
} else if ($isinitialregistration) {
echo $OUTPUT->heading(get_string('registerwithmoodleorgcomplete', 'core_hub'));
@@ -119,7 +117,7 @@ echo $renderer->moodleorg_registration_message();
$siteregistrationform->display();
if ($siteisregistered) {
if (\core\hub\registration::is_registered()) {
// 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');
@@ -127,7 +125,4 @@ if ($siteisregistered) {
echo html_writer::div(html_writer::link(new moodle_url($returnurl), get_string('skipregistration', 'hub')),
'skipregistration mt-2');
}
$PAGE->requires->js_call_amd('core_admin/expand_hash', 'init');
echo $OUTPUT->footer();
+92 -156
View File
@@ -843,14 +843,14 @@ class core_admin_renderer extends plugin_renderer_base {
$registerbutton = $this->single_button(new moodle_url('/admin/registration/index.php'),
get_string('register', 'admin'));
$str = 'registrationwarning';
$type = 'error alert alert-danger';
} else {
$registerbutton = '';
$str = 'registrationwarningcontactadmin';
$type = 'info';
}
return $this->warning( get_string($str, 'admin') . '&nbsp;' . $registerbutton , $type);
return $this->warning( get_string($str, 'admin')
. '&nbsp;' . $this->help_icon('registration', 'admin') . $registerbutton ,
'error alert alert-danger');
}
return '';
@@ -1004,7 +1004,7 @@ class core_admin_renderer extends plugin_renderer_base {
function upgrade_reload($url) {
return html_writer::empty_tag('br') .
html_writer::tag('div',
html_writer::link($url, $this->pix_icon('i/reload', '', '', ['class' => 'icon']) .
html_writer::link($url, $this->pix_icon('i/reload', '', '', array('class' => 'icon icon-pre')) .
get_string('reload'), array('title' => get_string('reload'))),
array('class' => 'continuebutton')) . html_writer::empty_tag('br');
}
@@ -1024,7 +1024,7 @@ class core_admin_renderer extends plugin_renderer_base {
*/
public function plugins_check_table(core_plugin_manager $pluginman, $version, array $options = array()) {
global $CFG;
$plugininfo = $pluginman->get_plugins(true);
$plugininfo = $pluginman->get_plugins();
if (empty($plugininfo)) {
return '';
@@ -1059,20 +1059,6 @@ class core_admin_renderer extends plugin_renderer_base {
$upgradeabortable = $pluginman->list_restorable_archives();
foreach ($plugininfo as $type => $plugins) {
// Skip deleted plugin types.
if (\core_component::is_deleted_plugin_type($type)) {
continue;
}
// Skip deprecated plugintypes having no installed plugins, in which case there is nothing to report.
if (\core_component::is_deprecated_plugin_type($type)) {
$reportableplugins = array_filter($plugins, function($plugininfo) {
return $plugininfo->versiondb != null;
});
if (empty($reportableplugins)) {
continue;
}
}
$header = new html_table_cell($pluginman->plugintype_name_plural($type));
$header->header = true;
@@ -1121,7 +1107,7 @@ class core_admin_renderer extends plugin_renderer_base {
);
$versiondb = new html_table_cell($plugin->versiondb);
$versiondisk = $plugin->is_deprecated() ? new html_table_cell() : new html_table_cell($plugin->versiondisk);
$versiondisk = new html_table_cell($plugin->versiondisk);
if ($isstandard = $plugin->is_standard()) {
$row->attributes['class'] .= ' standard';
@@ -1140,9 +1126,6 @@ class core_admin_renderer extends plugin_renderer_base {
$statuscode = $plugin->get_status();
$row->attributes['class'] .= ' status-' . $statuscode;
if ($plugin->is_deprecated()) {
$row->attributes['class'] .= ' deprecatedtype';
}
$statusclass = 'statustext badge ';
switch ($statuscode) {
case core_plugin_manager::PLUGIN_STATUS_NEW:
@@ -1163,18 +1146,6 @@ class core_admin_renderer extends plugin_renderer_base {
}
$status = html_writer::span(get_string('status_' . $statuscode, 'core_plugin'), $statusclass);
$deprecatedstatus = '';
if ($plugin->is_deprecated()) {
// During upgrade, omit the status for deprecated plugin types, unless it's 'missing from disk'.
// Deprecated plugins cannot be installed, upgraded, downgraded, and won't be automatically deleted.
$status = in_array($statuscode,
[core_plugin_manager::PLUGIN_STATUS_MISSING, core_plugin_manager::PLUGIN_STATUS_DELETE]) ? $status : '';
$deprecatedstatus = html_writer::span(
get_string('deprecated_type', 'core_plugin'),
'statustext badge bg-danger text-white'
);
}
if (!empty($installabortable[$plugin->component])) {
$status .= $this->output->single_button(
new moodle_url($this->page->url, array('abortinstall' => $plugin->component, 'confirmplugincheck' => 0)),
@@ -1200,7 +1171,7 @@ class core_admin_renderer extends plugin_renderer_base {
}
}
$status = new html_table_cell($sourcelabel.' '.$status.' '.$deprecatedstatus);
$status = new html_table_cell($sourcelabel.' '.$status);
if ($plugin->pluginsupported != null) {
$requires = new html_table_cell($this->required_column($plugin, $pluginman, $version, $CFG->branch));
} else {
@@ -1208,8 +1179,7 @@ class core_admin_renderer extends plugin_renderer_base {
}
$statusisboring = in_array($statuscode, array(
core_plugin_manager::PLUGIN_STATUS_NODB, core_plugin_manager::PLUGIN_STATUS_UPTODATE))
&& !$plugin->is_deprecated();
core_plugin_manager::PLUGIN_STATUS_NODB, core_plugin_manager::PLUGIN_STATUS_UPTODATE));
if ($options['xdep']) {
// we want to see only plugins with failed dependencies
@@ -1271,7 +1241,7 @@ class core_admin_renderer extends plugin_renderer_base {
new moodle_url($this->page->url, array('installupdatex' => 1)),
get_string('updateavailableinstallall', 'core_admin', count($installableupdates)),
'post',
array('class' => 'singlebutton updateavailableinstallall me-1')
array('class' => 'singlebutton updateavailableinstallall mr-1')
);
}
@@ -1280,7 +1250,7 @@ class core_admin_renderer extends plugin_renderer_base {
new moodle_url($this->page->url, array('abortinstallx' => 1, 'confirmplugincheck' => 0)),
get_string('cancelinstallall', 'core_plugin', count($installabortable)),
'post',
array('class' => 'singlebutton cancelinstallall me-1')
array('class' => 'singlebutton cancelinstallall mr-1')
);
}
@@ -1289,17 +1259,17 @@ class core_admin_renderer extends plugin_renderer_base {
new moodle_url($this->page->url, array('abortupgradex' => 1)),
get_string('cancelupgradeall', 'core_plugin', count($upgradeabortable)),
'post',
array('class' => 'singlebutton cancelupgradeall me-1')
array('class' => 'singlebutton cancelupgradeall mr-1')
);
}
$out .= html_writer::div(html_writer::link(new moodle_url($this->page->url, array('showallplugins' => 0)),
get_string('plugincheckattention', 'core_plugin')).' '.html_writer::span($sumattention, 'badge bg-light text-dark'),
'btn btn-link me-1');
'btn btn-link mr-1');
$out .= html_writer::div(html_writer::link(new moodle_url($this->page->url, array('showallplugins' => 1)),
get_string('plugincheckall', 'core_plugin')).' '.html_writer::span($sumtotal, 'badge bg-light text-dark'),
'btn btn-link me-1');
'btn btn-link mr-1');
$out .= $this->output->container_end(); // End of .actions container.
$out .= $this->output->container_end(); // End of #plugins-check-info container.
@@ -1318,7 +1288,7 @@ class core_admin_renderer extends plugin_renderer_base {
* @param null|moodle_url $cancel URL for the cancel link, defaults to the current page
* @return string HTML
*/
public function plugins_management_confirm_buttons(?moodle_url $continue=null, ?moodle_url $cancel=null) {
public function plugins_management_confirm_buttons(moodle_url $continue=null, moodle_url $cancel=null) {
$out = html_writer::start_div('plugins-management-confirm-buttons');
@@ -1406,13 +1376,13 @@ class core_admin_renderer extends plugin_renderer_base {
new moodle_url($this->page->url, array('installdepx' => 1)),
get_string('dependencyinstallmissing', 'core_plugin', count($installable)),
'post',
array('class' => 'singlebutton dependencyinstallmissing d-inline-block me-1')
array('class' => 'singlebutton dependencyinstallmissing d-inline-block mr-1')
);
}
$out .= html_writer::div(html_writer::link(new moodle_url('/admin/tool/installaddon/'),
get_string('dependencyuploadmissing', 'core_plugin'), array('class' => 'btn btn-link')),
'dependencyuploadmissing d-inline-block me-1');
'dependencyuploadmissing d-inline-block mr-1');
$out .= $this->output->container_end(); // End of .plugins-check-dependencies-actions container.
@@ -1478,29 +1448,29 @@ class core_admin_renderer extends plugin_renderer_base {
$info .= html_writer::div(
html_writer::link('https://moodle.org/plugins/view.php?plugin='.$plugin->component,
get_string('misdepinfoplugin', 'core_plugin')),
'misdepinfoplugin d-inline-block me-3 mb-1'
'misdepinfoplugin d-inline-block mr-3 mb-1'
);
$info .= html_writer::div(
html_writer::link('https://moodle.org/plugins/pluginversion.php?id='.$plugin->version->id,
get_string('misdepinfoversion', 'core_plugin')),
'misdepinfoversion d-inline-block me-3 mb-1'
'misdepinfoversion d-inline-block mr-3 mb-1'
);
$info .= html_writer::div(html_writer::link($plugin->version->downloadurl, get_string('download')),
'misdepdownload d-inline-block me-3 mb-1');
'misdepdownload d-inline-block mr-3 mb-1');
if ($pluginman->is_remote_plugin_installable($plugin->component, $plugin->version->version, $reason)) {
$info .= $this->output->single_button(
new moodle_url($this->page->url, array('installdep' => $plugin->component)),
get_string('dependencyinstall', 'core_plugin'),
'post',
array('class' => 'singlebutton dependencyinstall me-3 mb-1')
array('class' => 'singlebutton dependencyinstall mr-3 mb-1')
);
} else {
$reasonhelp = $this->info_remote_plugin_not_installable($reason);
if ($reasonhelp) {
$info .= html_writer::div($reasonhelp, 'reasonhelp dependencyinstall d-inline-block me-3 mb-1');
$info .= html_writer::div($reasonhelp, 'reasonhelp dependencyinstall d-inline-block mr-3 mb-1');
}
}
@@ -1685,26 +1655,11 @@ class core_admin_renderer extends plugin_renderer_base {
*/
public function plugins_overview_panel(core_plugin_manager $pluginman, array $options = array()) {
$plugininfo = $pluginman->get_plugins(true);
$this->page->requires->js_call_amd('core_admin/plugins_overview', 'init');
$plugininfo = $pluginman->get_plugins();
$numtotal = $numextension = $numupdatable = $numinstallable = $nummissing = $numnew = 0;
$numtotal = $numextension = $numupdatable = $numinstallable = 0;
foreach ($plugininfo as $type => $plugins) {
if (\core_component::is_deleted_plugin_type($type)) {
continue;
}
// Skip deprecated plugintypes having no installed plugins, in which case there is nothing to report.
if (\core_component::is_deprecated_plugin_type($type)) {
$reportableplugins = array_filter($plugins, function($plugininfo) {
return $plugininfo->versiondb != null;
});
if (empty($reportableplugins)) {
continue;
}
}
foreach ($plugins as $name => $plugin) {
if ($res = $plugin->available_updates()) {
$numupdatable++;
@@ -1716,12 +1671,8 @@ class core_admin_renderer extends plugin_renderer_base {
}
}
if ($plugin->get_status() === core_plugin_manager::PLUGIN_STATUS_MISSING) {
$nummissing++;
continue;
}
if ($plugin->get_status() === core_plugin_manager::PLUGIN_STATUS_NEW) {
$numnew++;
}
$numtotal++;
if (!$plugin->is_standard()) {
$numextension++;
@@ -1730,50 +1681,36 @@ class core_admin_renderer extends plugin_renderer_base {
}
$infoall = html_writer::link(
$this->page->url,
new moodle_url($this->page->url, array('contribonly' => 0, 'updatesonly' => 0)),
get_string('overviewall', 'core_plugin'),
['title' => get_string('filterall', 'core_plugin'), 'data-filterby' => 'all', 'class' => 'active']
).' '.html_writer::span($numtotal, 'badge text-dark number number-all');
array('title' => get_string('filterall', 'core_plugin'))
).' '.html_writer::span($numtotal, 'badge number number-all');
$infoext = html_writer::link(
new moodle_url($this->page->url, [], 'additional'),
new moodle_url($this->page->url, array('contribonly' => 1, 'updatesonly' => 0)),
get_string('overviewext', 'core_plugin'),
['title' => get_string('filtercontribonly', 'core_plugin'), 'data-filterby' => 'additional']
).' '.html_writer::span($numextension, 'badge text-dark number number-additional');
array('title' => get_string('filtercontribonly', 'core_plugin'))
).' '.html_writer::span($numextension, 'badge number number-additional');
if ($numupdatable) {
$infoupdatable = html_writer::link(
new moodle_url($this->page->url, [], 'updatable'),
new moodle_url($this->page->url, array('contribonly' => 0, 'updatesonly' => 1)),
get_string('overviewupdatable', 'core_plugin'),
['title' => get_string('filterupdatesonly', 'core_plugin'), 'data-filterby' => 'updatable']
array('title' => get_string('filterupdatesonly', 'core_plugin'))
).' '.html_writer::span($numupdatable, 'badge bg-info text-white number number-updatable');
} else {
// No updates, or the notifications disabled.
$infoupdatable = '';
}
if ($numnew) {
$infonew = html_writer::link(
new moodle_url($this->page->url, [], 'newplugin'),
get_string('status_new', 'plugin'),
['title' => get_string('filternewpluginsonly', 'core_plugin'), 'data-filterby' => 'newplugin']
).' '.html_writer::span($numnew, 'badge bg-success text-white number number-newplugin');
} else {
$infonew = '';
}
$out = html_writer::start_div('', array('id' => 'plugins-overview-panel'));
if ($nummissing) {
$infomissing = html_writer::link(
new moodle_url($this->page->url, [], 'missing'),
get_string('status_missing', 'plugin'),
['title' => get_string('filtermissingonly', 'core_plugin'), 'data-filterby' => 'missing']
).' '.html_writer::span($nummissing, 'badge bg-danger text-white number number-missing');
} else {
$infomissing = '';
if (!empty($options['updatesonly'])) {
$out .= $this->output->heading(get_string('overviewupdatable', 'core_plugin'), 3);
} else if (!empty($options['contribonly'])) {
$out .= $this->output->heading(get_string('overviewext', 'core_plugin'), 3);
}
$out = html_writer::start_div('', ['id' => 'plugins-overview-panel']);
if ($numinstallable) {
$out .= $this->output->single_button(
new moodle_url($this->page->url, array('installupdatex' => 1)),
@@ -1784,10 +1721,8 @@ class core_admin_renderer extends plugin_renderer_base {
}
$out .= html_writer::div($infoall, 'info info-all').
html_writer::div($infoext, 'info info-additional').
html_writer::div($infoupdatable, 'info info-updatable').
html_writer::div($infonew, 'info info-newplugin').
html_writer::div($infomissing, 'info info-missing');
html_writer::div($infoext, 'info info-ext').
html_writer::div($infoupdatable, 'info info-updatable');
$out .= html_writer::end_div(); // End of #plugins-overview-panel block.
@@ -1805,7 +1740,39 @@ class core_admin_renderer extends plugin_renderer_base {
*/
public function plugins_control_panel(core_plugin_manager $pluginman, array $options = array()) {
$plugininfo = $pluginman->get_plugins(true);
$plugininfo = $pluginman->get_plugins();
// Filter the list of plugins according the options.
if (!empty($options['updatesonly'])) {
$updateable = array();
foreach ($plugininfo as $plugintype => $pluginnames) {
foreach ($pluginnames as $pluginname => $pluginfo) {
$pluginavailableupdates = $pluginfo->available_updates();
if (!empty($pluginavailableupdates)) {
foreach ($pluginavailableupdates as $pluginavailableupdate) {
$updateable[$plugintype][$pluginname] = $pluginfo;
}
}
}
}
$plugininfo = $updateable;
}
if (!empty($options['contribonly'])) {
$contribs = array();
foreach ($plugininfo as $plugintype => $pluginnames) {
foreach ($pluginnames as $pluginname => $pluginfo) {
if (!$pluginfo->is_standard()) {
$contribs[$plugintype][$pluginname] = $pluginfo;
}
}
}
$plugininfo = $contribs;
}
if (empty($plugininfo)) {
return '';
}
$table = new html_table();
$table->id = 'plugins-control-panel';
@@ -1822,20 +1789,6 @@ class core_admin_renderer extends plugin_renderer_base {
);
foreach ($plugininfo as $type => $plugins) {
if (\core_component::is_deleted_plugin_type($type)) {
continue;
}
// Skip deprecated plugintypes having no installed plugins, in which case there is nothing to report.
if (\core_component::is_deprecated_plugin_type($type)) {
$reportableplugins = array_filter($plugins, function($plugininfo) {
return $plugininfo->versiondb != null;
});
if (empty($reportableplugins)) {
continue;
}
}
$heading = $pluginman->plugintype_name_plural($type);
$pluginclass = core_plugin_manager::resolve_plugininfo_class($type);
if ($manageurl = $pluginclass::get_manage_url()) {
@@ -1878,9 +1831,6 @@ class core_admin_renderer extends plugin_renderer_base {
}
$status = $plugin->get_status();
$row->attributes['class'] .= ' status-'.$status;
if ($plugin->is_deprecated()) {
$row->attributes['class'] .= ' deprecatedtype';
}
$pluginname = html_writer::tag('div', $icon.$plugin->displayname, array('class' => 'displayname')).
html_writer::tag('div', $plugin->component, array('class' => 'componentname'));
$pluginname = new html_table_cell($pluginname);
@@ -1921,30 +1871,18 @@ class core_admin_renderer extends plugin_renderer_base {
$row->attributes['class'] .= ' standard';
$source = '';
} else {
$row->attributes['class'] .= ' additional';
$source = html_writer::div(get_string('sourceext', 'core_plugin'), 'source badge me-1 text-bg-info');
$row->attributes['class'] .= ' extension';
$source = html_writer::div(get_string('sourceext', 'core_plugin'), 'source badge bg-info text-white');
}
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
$row->attributes['class'] .= ' missing';
$msg = html_writer::div(get_string('status_missing', 'core_plugin'), 'statusmsg badge text-bg-danger');
$msg = html_writer::div(get_string('status_missing', 'core_plugin'), 'statusmsg badge bg-danger text-white');
} else if ($status === core_plugin_manager::PLUGIN_STATUS_NEW) {
$row->attributes['class'] .= ' newplugin';
$msg = html_writer::div(get_string('status_new', 'core_plugin'), 'statusmsg badge text-bg-success');
$msg = html_writer::div(get_string('status_new', 'core_plugin'), 'statusmsg badge bg-success text-white');
} else {
$msg = '';
}
$deprecatedmsg = '';
if ($plugin->is_deprecated()) {
// Omit the status for deprecated plugin types, unless it's 'missing from disk'.
$msg = $status == core_plugin_manager::PLUGIN_STATUS_MISSING ? $msg : '';
$deprecatedmsg = html_writer::div(
get_string('deprecated_type', 'core_plugin'),
'statusmsg badge bg-danger text-white'
);
}
$requriedby = $pluginman->other_plugins_that_require($plugin->component);
if ($requriedby) {
$requiredby = html_writer::tag('div', get_string('requiredby', 'core_plugin', implode(', ', $requriedby)),
@@ -1955,13 +1893,12 @@ class core_admin_renderer extends plugin_renderer_base {
$updateinfo = '';
if (is_array($plugin->available_updates())) {
$row->attributes['class'] .= ' updatable';
foreach ($plugin->available_updates() as $availableupdate) {
$updateinfo .= $this->plugin_available_update_info($pluginman, $availableupdate);
}
}
$notes = new html_table_cell($source.' '.$msg.' '.$deprecatedmsg.$requiredby.$updateinfo);
$notes = new html_table_cell($source.$msg.$requiredby.$updateinfo);
$row->cells = array(
$pluginname, $version, $availability, $settings, $uninstall, $notes
@@ -2063,7 +2000,7 @@ class core_admin_renderer extends plugin_renderer_base {
get_string('status'),
);
$servertable->colclasses = array('centeralign name', 'centeralign info', 'leftalign report', 'leftalign plugin', 'centeralign status');
$servertable->attributes['class'] = 'table table-striped admintable environmenttable generaltable table-sm';
$servertable->attributes['class'] = 'admintable environmenttable generaltable table-sm';
$servertable->id = 'serverstatus';
$serverdata = array('ok'=>array(), 'warn'=>array(), 'error'=>array());
@@ -2076,7 +2013,7 @@ class core_admin_renderer extends plugin_renderer_base {
get_string('status'),
);
$othertable->colclasses = array('aligncenter info', 'alignleft report', 'alignleft plugin', 'aligncenter status');
$othertable->attributes['class'] = 'table table-striped admintable environmenttable generaltable table-sm';
$othertable->attributes['class'] = 'admintable environmenttable generaltable table-sm';
$othertable->id = 'otherserverstatus';
$otherdata = array('ok'=>array(), 'warn'=>array(), 'error'=>array());
@@ -2177,33 +2114,29 @@ class core_admin_renderer extends plugin_renderer_base {
} else {
$report = $this->doc_link(join('/', $linkparts), get_string($stringtouse, 'admin', $rec), true);
}
// Enclose report text in div so feedback text will be displayed underneath it.
$report = html_writer::div($report);
// Format error or warning line
if ($errorline) {
$messagetype = 'error';
$statusclass = 'bg-danger text-white';
$feedbackclass = 'alert-danger';
} else if ($warningline) {
$messagetype = 'warn';
$statusclass = 'bg-warning text-dark';
$feedbackclass = 'alert-warning';
} else {
$messagetype = 'ok';
$statusclass = 'bg-success text-white';
$feedbackclass = 'alert-success';
}
$status = html_writer::span($status, 'badge ' . $statusclass);
// Here we'll store all the feedback found
$feedbacktext = '';
// Append the feedback if there is some
$feedbacktext .= $environment_result->strToReport($environment_result->getFeedbackStr(),
"alert {$feedbackclass} px-2 py-1 m-1");
$feedbacktext .= $environment_result->strToReport($environment_result->getFeedbackStr(), $messagetype);
//Append the bypass if there is some
$feedbacktext .= $environment_result->strToReport($environment_result->getBypassStr(),
'alert alert-warning px-2 py-1 m-1');
$feedbacktext .= $environment_result->strToReport($environment_result->getBypassStr(), 'warn');
//Append the restrict if there is some
$feedbacktext .= $environment_result->strToReport($environment_result->getRestrictStr(),
'alert alert-danger px-2 py-1 m-1');
$feedbacktext .= $environment_result->strToReport($environment_result->getRestrictStr(), 'error');
$report .= $feedbacktext;
@@ -2247,11 +2180,10 @@ class core_admin_renderer extends plugin_renderer_base {
$output = '';
$output .= $this->header();
$output .= $this->container_start('upgradekeyreq');
$output .= $this->heading(get_string('upgradekeyreq', 'core_admin'));
$output .= $this->container_start('upgradekeyreq w-25');
$output .= html_writer::start_tag('form', array('method' => 'POST', 'action' => $url));
$output .= html_writer::empty_tag('input', [
'id' => 'upgradekey',
'name' => 'upgradekey',
'type' => 'password',
'class' => 'form-control w-auto',
@@ -2274,10 +2206,14 @@ class core_admin_renderer extends plugin_renderer_base {
* @return string
*/
public function moodleorg_registration_message() {
$a = new stdClass();
$a->moreinformation = '#id_sitestats'; // More information anchor.
$a->moodleapp = HUB_MOODLEORGHUBURL . '/solutions/moodle-app/';
$out = format_text(get_string('registerwithmoodleorginfo', 'core_hub', $a), FORMAT_MARKDOWN);
$out = format_text(get_string('registerwithmoodleorginfo', 'core_hub'), FORMAT_MARKDOWN);
$out .= html_writer::link(
MOODLE_PRODUCTURL.'/solutions/moodle-app/',
$this->output->pix_icon('i/info', '').' '.get_string('registerwithmoodleorginfoapp', 'core_hub'),
['class' => 'btn btn-link', 'role' => 'opener', 'target' => '_href']
);
$out .= html_writer::link(
HUB_MOODLEORGHUBURL,
-22
View File
@@ -1,22 +0,0 @@
# core_role (subsystem) Upgrade notes
## 4.5
### Added
- All session management has been moved to the `\core\session\manager` class.
This removes the dependancy to use the `sessions` table.
Session management plugins (like Redis) should now inherit
the base `\core\session\handler` class, which implements
`SessionHandlerInterface`, and override methods as required.
The following methods in `\core\session\manager` have been deprecated:
| Old method name | New method name |
| --- | --- |
| `kill_all_sessions` | `destroy_all` |
| `kill_session` | `destroy` |
| `kill_sessions_for_auth_plugin` | `destroy_by_auth_plugin` |
| `kill_user_sessions` | `destroy_user_sessions` |
For more information see [MDL-66151](https://tracker.moodle.org/browse/MDL-66151)
@@ -43,7 +43,7 @@ abstract class core_role_capability_table_base {
protected $id;
/** Added to the class="" attribute on output. */
protected $classes = ['rolecap table w-auto table-hover'];
protected $classes = array('rolecap table-hover');
/** Default number of capabilities in the table for the search UI to be shown. */
const NUM_CAPS_FOR_SEARCH = 12;
@@ -544,7 +544,7 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
$options[$type] = get_string('archetype'.$type, 'role');
}
return html_writer::select($options, 'archetype', $this->role->archetype, false,
['class' => 'form-select']);
array('class' => 'custom-select'));
}
protected function get_assignable_levels_control() {
@@ -655,7 +655,7 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
echo "</label>\n";
}
if ($helpicon) {
echo '<span class="float-sm-end text-nowrap">'.$helpicon.'</span>';
echo '<span class="float-sm-right text-nowrap">'.$helpicon.'</span>';
}
echo '</div>';
if (isset($this->errors[$name])) {
@@ -18,12 +18,13 @@ declare(strict_types=1);
namespace core_role\reportbuilder\local\entities;
use core\{context, context_helper};
use core\lang_string;
use context;
use context_helper;
use lang_string;
use stdClass;
use core_reportbuilder\local\entities\base;
use core_reportbuilder\local\filters\select;
use core_reportbuilder\local\report\{column, filter};
use stdClass;
/**
* Role entity
@@ -83,6 +84,8 @@ class role extends base {
* @return column[]
*/
protected function get_all_columns(): array {
global $DB;
$contextalias = $this->get_table_alias('context');
$rolealias = $this->get_table_alias('role');
@@ -93,16 +96,17 @@ class role extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$rolealias}.name, {$rolealias}.shortname, {$rolealias}.id, {$contextalias}.id AS contextid")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
// The sorting is on name, unless empty then we use shortname.
// The sorting is on name, unless empty (determined by single space - thanks Oracle) then we use shortname.
->set_is_sortable(true, [
"CASE WHEN COALESCE({$rolealias}.name, '') = ''
"CASE WHEN " . $DB->sql_concat("{$rolealias}.name", "' '") . " = ' '
THEN {$rolealias}.shortname
ELSE {$rolealias}.name
END",
])
->add_callback(static function(?string $name, stdClass $role): string {
->set_callback(static function($name, stdClass $role): string {
if ($name === null) {
return '';
}
@@ -120,17 +124,21 @@ class role extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$rolealias}.name, {$rolealias}.shortname")
// The sorting is on name, unless empty then we use shortname.
// The sorting is on name, unless empty (determined by single space - thanks Oracle) then we use shortname.
->set_is_sortable(true, [
"CASE WHEN COALESCE({$rolealias}.name, '') = ''
"CASE WHEN " . $DB->sql_concat("{$rolealias}.name", "' '") . " = ' '
THEN {$rolealias}.shortname
ELSE {$rolealias}.name
END",
])
->add_callback(fn(?string $name, stdClass $role) => match ($name) {
null => '',
default => role_get_name($role, null, ROLENAME_ORIGINAL),
->set_callback(static function($name, stdClass $role): string {
if ($name === null) {
return '';
}
return role_get_name($role, null, ROLENAME_ORIGINAL);
});
// Short name column.
@@ -140,25 +148,15 @@ class role extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->add_field("{$rolealias}.shortname")
->set_is_sortable(true);
// Archetype column.
$columns[] = (new column(
'archetype',
new lang_string('archetype', 'core_role'),
$this->get_entity_name(),
))
->add_joins($this->get_joins())
->add_field("{$rolealias}.archetype")
->add_callback(fn(?string $archetype) => match ($archetype) {
null => '',
'' => get_string('none'),
default => get_string("archetype{$archetype}", 'core_role'),
})
->set_type(column::TYPE_TEXT)
->add_fields("{$rolealias}.shortname")
->set_is_sortable(true);
// Description column.
$descriptionfieldsql = "{$rolealias}.description";
if ($DB->get_dbfamily() === 'oracle') {
$descriptionfieldsql = $DB->sql_order_by_text($descriptionfieldsql, 1024);
}
$columns[] = (new column(
'description',
new lang_string('description'),
@@ -166,11 +164,14 @@ class role extends base {
))
->add_joins($this->get_joins())
->set_type(column::TYPE_LONGTEXT)
->add_fields("{$rolealias}.description, {$rolealias}.shortname")
->set_is_sortable(true)
->add_callback(fn(?string $description, stdClass $role) => match ($description) {
null => '',
default => role_get_description($role),
->add_field($descriptionfieldsql, 'description')
->add_field("{$rolealias}.shortname")
->set_callback(static function($description, stdClass $role): string {
if ($description === null) {
return '';
}
return role_get_description($role);
});
return $columns;
@@ -197,22 +198,6 @@ class role extends base {
return role_get_names(null, ROLENAME_ORIGINAL, true);
});
// Archetype filter.
$filters[] = (new filter(
select::class,
'archetype',
new lang_string('archetype', 'core_role'),
$this->get_entity_name(),
"{$rolealias}.archetype",
))
->add_joins($this->get_joins())
->set_options_callback(static function(): array {
return array_map(
fn(string $archetype) => get_string("archetype{$archetype}", 'core_role'),
get_role_archetypes(),
);
});
return $filters;
}
}
@@ -102,6 +102,7 @@ class role_assignment extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("{$raalias}.component")
->set_is_sortable(true);
@@ -112,6 +113,7 @@ class role_assignment extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_field("{$raalias}.itemid")
->set_is_sortable(true);
+1 -1
View File
@@ -165,7 +165,7 @@ if (!empty($capabilities)) {
$attrs = array('type'=>'submit', 'name'=>'savechanges', 'value'=>get_string('savechanges'), 'class'=>'btn btn-primary');
echo html_writer::empty_tag('input', $attrs);
$attrs = array('type' => 'submit', 'name' => 'cancel', 'value' => get_string('cancel'),
'class' => 'btn btn-secondary ms-1');
'class' => 'btn btn-secondary ml-1');
echo html_writer::empty_tag('input', $attrs);
echo html_writer::end_tag('div');
echo html_writer::end_tag('div');
+1 -1
View File
@@ -26,7 +26,7 @@ use core_role_preset;
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
final class preset_test extends \advanced_testcase {
class preset_test extends \advanced_testcase {
public function test_xml(): void {
global $DB;
+9 -9
View File
@@ -40,7 +40,7 @@ use core_privacy\local\request\approved_userlist;
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
final class provider_test extends provider_testcase {
class provider_test extends provider_testcase {
/**
* Test to check export_user_preferences.
* returns user preferences data.
@@ -77,7 +77,7 @@ final class provider_test extends provider_testcase {
$course = $this->getDataGenerator()->create_course();
$course2 = $this->getDataGenerator()->create_course();
$coursecat = $this->getDataGenerator()->create_category();
$cm = $this->getDataGenerator()->create_module('assign', ['course' => $course->id]);
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
$cmcontext2 = \context_module::instance($page->cmid);
@@ -125,7 +125,7 @@ final class provider_test extends provider_testcase {
$course = $this->getDataGenerator()->create_course();
$course2 = $this->getDataGenerator()->create_course();
$coursecat = $this->getDataGenerator()->create_category();
$cm = $this->getDataGenerator()->create_module('assign', ['course' => $course->id]);
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
$cmcontext2 = \context_module::instance($page->cmid);
@@ -257,7 +257,7 @@ final class provider_test extends provider_testcase {
$coursecat = $this->getDataGenerator()->create_category();
$coursecatcontext = \context_coursecat::instance($coursecat->id);
$systemcontext = \context_system::instance();
$cm = $this->getDataGenerator()->create_module('assign', ['course' => $course->id]);
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$student = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST);
$manager = $DB->get_record('role', array('shortname' => 'manager'), '*', MUST_EXIST);
@@ -348,7 +348,7 @@ final class provider_test extends provider_testcase {
$coursecat = $this->getDataGenerator()->create_category();
$coursecatcontext = \context_coursecat::instance($coursecat->id);
$systemcontext = \context_system::instance();
$cm = $this->getDataGenerator()->create_module('assign', ['course' => $course->id]);
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$student = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST);
$manager = $DB->get_record('role', array('shortname' => 'manager'), '*', MUST_EXIST);
@@ -499,8 +499,8 @@ final class provider_test extends provider_testcase {
// Create course category.
$coursecat = $this->getDataGenerator()->create_category();
$coursecatcontext = \context_coursecat::instance($coursecat->id);
// Create assignment module.
$cm = $this->getDataGenerator()->create_module('assign', ['course' => $course1->id]);
// Create chat module.
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course1->id]);
$cmcontext = \context_module::instance($cm->cmid);
$systemcontext = \context_system::instance();
@@ -619,8 +619,8 @@ final class provider_test extends provider_testcase {
// Create course category.
$coursecat = $this->getDataGenerator()->create_category();
$coursecatcontext = \context_coursecat::instance($coursecat->id);
// Create assignment module.
$cm = $this->getDataGenerator()->create_module('assign', ['course' => $course1->id]);
// Create chat module.
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course1->id]);
$cmcontext = \context_module::instance($cm->cmid);
$systemcontext = \context_system::instance();
@@ -20,14 +20,19 @@ namespace core_role\reportbuilder\datasource;
use core\context\course;
use core_reportbuilder_generator;
use core_reportbuilder_testcase;
use core_reportbuilder\local\filters\{date, select, text};
use core_reportbuilder\tests\core_reportbuilder_testcase;
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once("{$CFG->dirroot}/reportbuilder/tests/helpers.php");
/**
* Unit tests for roles datasource
*
* @package core_role
* @covers \core_role\reportbuilder\datasource\roles
* @covers \core_role\reportbuilder\datasource\roles;
* @copyright 2024 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
@@ -99,7 +104,6 @@ final class roles_test extends core_reportbuilder_testcase {
// Role.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'role:name']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'role:shortname']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'role:archetype']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'role:description']);
// Role assignment.
@@ -110,20 +114,11 @@ final class roles_test extends core_reportbuilder_testcase {
$content = $this->get_custom_report_content($report->get('id'));
$this->assertCount(1, $content);
[
$rolename,
$roleshortname,
$rolearchetype,
$roledescription,
$timemodified,
$component,
$itemid,
] = array_values($content[0]);
[$rolename, $roleshortname, $roledescription, $timemodified, $component, $itemid] = array_values($content[0]);
// Role.
$this->assertEquals('Moocher (Manager)', $rolename);
$this->assertEquals('manager', $roleshortname);
$this->assertEquals('ARCHETYPE: Manager', $rolearchetype);
$this->assertEquals('Managers can access courses and modify them, but usually do not participate in them.',
$roledescription);
@@ -149,15 +144,7 @@ final class roles_test extends core_reportbuilder_testcase {
], true],
'Filter role name (no match)' => ['role:name', [
'role:name_operator' => select::EQUAL_TO,
'role:name_value' => $DB->get_field('role', 'id', ['shortname' => 'teacher']),
], false],
'Filter role archetype' => ['role:archetype', [
'role:archetype_operator' => select::EQUAL_TO,
'role:archetype_value' => 'student',
], true],
'Filter role archetype (no match)' => ['role:archetype', [
'role:archetype_operator' => select::EQUAL_TO,
'role:archetype_value' => 'teacher',
'role:name_value' => -1,
], false],
// Role assignment.
-88
View File
@@ -1,88 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Adds settings links to admin tree.
*
* AI gets top billing in general because it's the future.
*
* @package core_admin
* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
if ($hassiteconfig) {
// Add settings page for AI provider settings.
$providers = new admin_settingpage('aiprovider', new lang_string('aiproviders', 'ai'));
$providers->add(new admin_setting_heading('availableproviders',
get_string('availableproviders', 'core_ai'),
get_string('availableproviders_desc', 'core_ai')));
// Add call to action to add a new provider.
$providers->add(new \core_admin\admin\admin_setting_template_render(
name: 'addnewprovider',
templatename: 'core_ai/admin_add_provider',
context: ['addnewproviderurl' => new moodle_url('/ai/configure.php')]
));
$providers->add(new \core_ai\admin\admin_setting_provider_manager(
'aiprovider',
\core_ai\table\aiprovider_management_table::class,
'manageaiproviders',
new lang_string('manageaiproviders', 'core_ai'),
));
$ADMIN->add('ai', $providers);
// Add settings page for AI placement settings.
$placements = new admin_settingpage('aiplacement', new lang_string('aiplacements', 'ai'));
$placements->add(new admin_setting_heading('availableplacements',
get_string('availableplacements', 'core_ai'),
get_string('availableplacements_desc', 'core_ai')));
$placements->add(new \core_admin\admin\admin_setting_plugin_manager(
'aiplacement',
\core_ai\table\aiplacement_management_table::class,
'manageaiplacements',
new lang_string('manageaiplacements', 'core_ai'),
));
$ADMIN->add('ai', $placements);
// Load settings for all placements.
$plugins = core_plugin_manager::instance()->get_plugins_of_type('aiplacement');
foreach ($plugins as $plugin) {
/** @var \core\plugininfo\aiprovider $plugin */
$plugin->load_settings($ADMIN, 'ai', $hassiteconfig);
}
}
// AI reports category.
$ADMIN->add('reports', new admin_category('aireports', get_string('aireports', 'core_ai')));
// Add AI policy acceptance report.
$aipolicyacceptance = new admin_externalpage(
'aipolicyacceptancereport',
get_string('aipolicyacceptance', 'core_ai'),
new moodle_url('/ai/policy_acceptance_report.php'),
'moodle/ai:viewaipolicyacceptancereport'
);
$ADMIN->add('aireports', $aipolicyacceptance);
// Add AI usage report.
$aiusage = new admin_externalpage(
'aiusagereport',
get_string('aiusage', 'core_ai'),
new moodle_url('/ai/usage_report.php'),
'moodle/ai:viewaiusagereport',
);
$ADMIN->add('aireports', $aiusage);
+1 -12
View File
@@ -2,8 +2,6 @@
// This file defines settingpages and externalpages under the "appearance" category
$ADMIN->add('appearance', new admin_category('themes', new lang_string('themesettingscustom', 'admin')));
$capabilities = array(
'moodle/my:configsyspages',
'moodle/tag:manage'
@@ -154,12 +152,6 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
}
$choices[HOMEPAGE_MYCOURSES] = new lang_string('mycourses', 'admin');
$choices[HOMEPAGE_USER] = new lang_string('userpreference', 'admin');
// Allow hook callbacks to extend options.
$hook = new \core_user\hook\extend_default_homepage();
\core\di::get(\core\hook\manager::class)->dispatch($hook);
$choices += $hook->get_options();
$temp->add(new admin_setting_configselect('defaulthomepage', new lang_string('defaulthomepage', 'admin'),
new lang_string('configdefaulthomepage', 'admin'), get_default_home_page(), $choices));
if (!isset($CFG->enabledashboard) || $CFG->enabledashboard) {
@@ -332,10 +324,6 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
$temp->add(new admin_setting_configcheckbox('logininfoinsecurelayout',
new lang_string('logininfoinsecurelayout', 'admin'),
new lang_string('logininfoinsecurelayout_desc', 'admin'), 0));
// Process primary navigation (custom menu) through Moodle filters.
$temp->add(new admin_setting_configcheckbox('navfilter',
new lang_string('navfilter', 'admin'),
new lang_string('navfilter_desc', 'admin'), 0));
$temp->add(new admin_setting_configtextarea('custommenuitems', new lang_string('custommenuitems', 'admin'),
new lang_string('configcustommenuitems', 'admin'), '', PARAM_RAW, '50', '10'));
$defaultsettingcustomusermenuitems = [
@@ -361,6 +349,7 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
new lang_string('themeselector', 'admin'), $CFG->wwwroot . '/admin/themeselector.php'));
// Settings page for each theme.
$ADMIN->add('appearance', new admin_category('themes', new lang_string('themesettingscustom', 'admin')));
foreach (core_component::get_plugin_list('theme') as $theme => $themedir) {
$settingspath = "$themedir/settings.php";
if (file_exists($settingspath)) {
+1 -1
View File
@@ -87,7 +87,7 @@ if (($hassiteconfig || has_any_capability(array(
$ADMIN->add('badges',
new admin_externalpage('newbadge',
new lang_string('newbadge', 'badges'),
new moodle_url('/badges/edit.php', ['action' => 'new']),
new moodle_url('/badges/newbadge.php', array('type' => BADGE_TYPE_SITE)),
array('moodle/badges:createbadge'), empty($CFG->enablebadges)
)
);
+13 -21
View File
@@ -28,22 +28,13 @@ require_once($CFG->libdir . '/pdflib.php');
use core_admin\local\settings\filesize;
$ADMIN->add('courses', new admin_category('coursedefaultsettings', new lang_string('defaultsettingscategory', 'course')));
$ADMIN->add('courses', new admin_category('groups', new lang_string('groups')));
$ADMIN->add('courses', new admin_category('activitychooser', new lang_string('activitychoosercategory', 'course')));
$ADMIN->add('courses', new admin_category('backups', new lang_string('backups', 'admin')));
$capabilities = [
$capabilities = array(
'moodle/backup:backupcourse',
'moodle/category:manage',
'moodle/course:create',
'moodle/site:approvecourse',
'moodle/restore:restorecourse',
'moodle/course:manageactivities',
'moodle/course:configurecustomfields',
'moodle/group:configurecustomfields',
'moodle/course:recommendactivity',
];
'moodle/restore:restorecourse'
);
if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
// Speedup for non-admins, add all caps used on this page.
$ADMIN->add('courses',
@@ -113,6 +104,7 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
}
// Add a category for the course Default settings.
$ADMIN->add('courses', new admin_category('coursedefaultsettings', new lang_string('defaultsettingscategory', 'course')));
// Course Default Settings Page.
// NOTE: these settings must be applied after all other settings because they depend on them.
@@ -306,7 +298,8 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
)
);
// Add to the 'Groups' category.
// Add a category for the Groups.
$ADMIN->add('courses', new admin_category('groups', new lang_string('groups')));
$ADMIN->add(
'groups',
new admin_externalpage(
@@ -326,7 +319,8 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
)
);
// Add to the 'Activity Chooser' category.
// Add a category for the Activity Chooser.
$ADMIN->add('courses', new admin_category('activitychooser', new lang_string('activitychoosercategory', 'course')));
$temp = new admin_settingpage('activitychoosersettings', new lang_string('activitychoosersettings', 'course'));
// Tab mode for the activity chooser.
$temp->add(
@@ -378,7 +372,8 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
)
);
// Add to the 'Backups' category.
// Add a category for backups.
$ADMIN->add('courses', new admin_category('backups', new lang_string('backups','admin')));
// Create a page for general backups configuration and defaults.
$temp = new admin_settingpage('backupgeneralsettings', new lang_string('generalbackdefaults', 'backup'), 'moodle/backup:backupcourse');
@@ -420,6 +415,7 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_userscompletion', new lang_string('generaluserscompletion','backup'), new lang_string('configgeneraluserscompletion','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_logs', new lang_string('generallogs','backup'), new lang_string('configgenerallogs','backup'), array('value'=>0, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_histories', new lang_string('generalhistories','backup'), new lang_string('configgeneralhistories','backup'), array('value'=>0, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_questionbank', new lang_string('generalquestionbank','backup'), new lang_string('configgeneralquestionbank','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_groups',
new lang_string('generalgroups', 'backup'), new lang_string('configgeneralgroups', 'backup'),
array('value' => 1, 'locked' => 0)));
@@ -463,13 +459,8 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_import_activities', new lang_string('generalactivities','backup'), new lang_string('configgeneralactivities','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_import_blocks', new lang_string('generalblocks','backup'), new lang_string('configgeneralblocks','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_import_filters', new lang_string('generalfilters','backup'), new lang_string('configgeneralfilters','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock(
'backup/backup_import_badges',
new lang_string('generalbadges', 'backup'),
new lang_string('configgeneralbadges', 'backup'),
['value' => 0, 'locked' => 0],
));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_import_calendarevents', new lang_string('generalcalendarevents','backup'), new lang_string('configgeneralcalendarevents','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_import_questionbank', new lang_string('generalquestionbank','backup'), new lang_string('configgeneralquestionbank','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_import_groups',
new lang_string('generalgroups', 'backup'), new lang_string('configgeneralgroups', 'backup'),
array('value' => 1, 'locked' => 0)));
@@ -605,6 +596,7 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_userscompletion', new lang_string('generaluserscompletion','backup'), new lang_string('configgeneraluserscompletion','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_logs', new lang_string('generallogs', 'backup'), new lang_string('configgenerallogs', 'backup'), 0));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_histories', new lang_string('generalhistories','backup'), new lang_string('configgeneralhistories','backup'), 0));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_questionbank', new lang_string('generalquestionbank','backup'), new lang_string('configgeneralquestionbank','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_groups', new lang_string('generalgroups', 'backup'),
new lang_string('configgeneralgroups', 'backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_competencies', new lang_string('generalcompetencies','backup'), new lang_string('configgeneralcompetencies','backup'), 1));
+4 -13
View File
@@ -2,10 +2,10 @@
// * Miscellaneous settings
// Experimental settings page.
$ADMIN->add('development', new admin_category('experimental', new lang_string('experimental', 'admin')));
if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
if ($hassiteconfig) { // Speedup for non-admins, add all caps used on this page.
// Experimental settings page
$ADMIN->add('development', new admin_category('experimental', new lang_string('experimental','admin')));
$temp = new admin_settingpage('experimentalsettings', new lang_string('experimentalsettings', 'admin'));
//TODO: Re-enable cc-import once re-implemented in 2.0.x
@@ -109,16 +109,7 @@ if ($hassiteconfig) { // Speedup for non-admins, add all caps used on this page.
// Add the 'profiling' page to admin block.
$ADMIN->add('development', $temp);
$ADMIN->add(
parentname: 'development',
something: new admin_externalpage(
name: 'swaggerui',
visiblename: new lang_string('swaggerui', 'admin'),
url: "$CFG->wwwroot/admin/swaggerui.php",
),
);
// Web service test clients DO NOT COMMIT : THE EXTERNAL WEB PAGE IS NOT AN ADMIN PAGE !!!!!
// Web service test clients DO NOT COMMIT : THE EXTERNAL WEB PAGE IS NOT AN ADMIN PAGE !!!!!
$ADMIN->add('development', new admin_externalpage('testclient', new lang_string('testclient', 'webservice'), "$CFG->wwwroot/$CFG->admin/webservice/testclient.php"));
-44
View File
@@ -1,44 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Configure the settings for file redaction service.
*
* @package core_admin
* @copyright Meirza <meirza.arson@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
if (!$ADMIN->locate('file_redactor')) {
$ADMIN->add('server', new admin_category('file_redactor', get_string('redactor', 'core_files')));
}
if ($hassiteconfig) {
$manager = \core\di::get(\core_files\redactor\manager::class);
// Get settings from each service.
foreach ($manager->get_service_classnames() as $servicename => $service) {
$servicesettings = new admin_settingpage(
$servicename,
new lang_string("redactor:{$servicename}", 'core_files'),
);
$service::add_settings($servicesettings);
$ADMIN->add('file_redactor', $servicesettings);
}
}
+5 -46
View File
@@ -2,13 +2,6 @@
// This file defines settingpages and externalpages under the "grades" section
use core\plugininfo\gradepenalty;
$ADMIN->add('grades', new admin_category('gradereports', new lang_string('reportsettings', 'grades')));
$ADMIN->add('grades', new admin_category('gradeimports', new lang_string('importsettings', 'grades')));
$ADMIN->add('grades', new admin_category('gradeexports', new lang_string('exportsettings', 'grades')));
$ADMIN->add('grades', new admin_category('gradepenalty', new lang_string('gradepenalty', 'grades')));
if (has_capability('moodle/grade:manage', $systemcontext)
or has_capability('moodle/grade:manageletters', $systemcontext)) { // speedup for non-admins, add all caps used on this page
@@ -98,7 +91,7 @@ if (has_capability('moodle/grade:manage', $systemcontext)
$temp->add(new admin_setting_my_grades_report());
$temp->add(new admin_setting_configtext('gradereport_mygradeurl', new lang_string('externalurl', 'grades'),
new lang_string('externalurl_desc', 'grades'), ''));
new lang_string('externalurl_desc', 'grades'), ''));
}
$ADMIN->add('grades', $temp);
@@ -188,6 +181,7 @@ if (has_capability('moodle/grade:manage', $systemcontext)
// The plugins must implement a settings.php file that adds their admin settings to the $settings object
// Reports
$ADMIN->add('grades', new admin_category('gradereports', new lang_string('reportsettings', 'grades')));
foreach (core_component::get_plugin_list('gradereport') as $plugin => $plugindir) {
// Include all the settings commands for this plugin if there are any
if (file_exists($plugindir.'/settings.php')) {
@@ -200,6 +194,7 @@ if (has_capability('moodle/grade:manage', $systemcontext)
}
// Imports
$ADMIN->add('grades', new admin_category('gradeimports', new lang_string('importsettings', 'grades')));
foreach (core_component::get_plugin_list('gradeimport') as $plugin => $plugindir) {
// Include all the settings commands for this plugin if there are any
@@ -214,6 +209,7 @@ if (has_capability('moodle/grade:manage', $systemcontext)
// Exports
$ADMIN->add('grades', new admin_category('gradeexports', new lang_string('exportsettings', 'grades')));
foreach (core_component::get_plugin_list('gradeexport') as $plugin => $plugindir) {
// Include all the settings commands for this plugin if there are any
if (file_exists($plugindir.'/settings.php')) {
@@ -225,42 +221,5 @@ if (has_capability('moodle/grade:manage', $systemcontext)
}
}
// Penalty.
// Supported modules.
$modules = core_grades\penalty_manager::get_supported_modules();
if (!empty($modules)) {
$temp = new admin_settingpage('supportedplugins', new lang_string('gradepenalty_supportedplugins', 'grades'),
'moodle/grade:manage');
$options = [];
foreach ($modules as $module) {
$options[$module] = new lang_string('modulename', $module);
}
$temp->add(new admin_setting_configmultiselect('gradepenalty_enabledmodules',
new lang_string('gradepenalty_enabledmodules', 'grades'),
new lang_string('gradepenalty_enabledmodules_help', 'grades'), [], $options));
$ADMIN->add('gradepenalty', $temp);
}
// External page to manage the penalty plugins.
$temp = new admin_externalpage(
'managepenaltyplugins',
get_string('managepenaltyplugins', 'grades'),
new moodle_url('/grade/penalty/manage_penalty_plugins.php'),
'moodle/grade:manage'
);
$ADMIN->add('gradepenalty', $temp);
// Settings from each penalty plugin.
foreach (core_component::get_plugin_list('gradepenalty') as $plugin => $plugindir) {
// Check if the plugin is enabled.
if (gradepenalty::is_plugin_enabled($plugin)) {
// Include all the settings commands for this plugin if there are any.
if (file_exists($plugindir . '/settings.php')) {
include($plugindir . '/settings.php');
}
}
}
} // end of speedup
+4 -23
View File
@@ -39,37 +39,18 @@ if ($hassiteconfig) {
$temp->add(new admin_setting_configtext('defaultcity', new lang_string('defaultcity', 'core_admin'),
new lang_string('defaultcity_help', 'core_admin'), ''));
$temp->add(new admin_setting_countrycodes('allcountrycodes', new lang_string('allcountrycodes', 'core_admin'),
new lang_string('configallcountrycodes', 'core_admin')));
$temp->add(new admin_setting_heading('iplookup', new lang_string('iplookup', 'core_admin'),
new lang_string('iplookupinfo', 'core_admin')));
$temp->add(new admin_setting_configfile('geoip2file', new lang_string('geoipfile', 'core_admin'),
new lang_string('configgeoipfile', 'core_admin', $CFG->dataroot . '/geoip/'),
$CFG->dataroot . '/geoip/GeoIP-City.mmdb'));
$temp->add(new admin_setting_configselect('geoipdbedition',
new lang_string('geoipdbedition', 'core_admin'),
new lang_string('geoipdbedition_desc', 'core_admin'), 'GeoLite2-City',
['GeoLite2-City' => 'GeoLite2-City', 'GeoIP2-City' => 'GeoIP2-City']));
$temp->add(new admin_setting_configtext('geoipmaxmindaccid',
new lang_string('geoipmaxmindaccid', 'core_admin'),
new lang_string('geoipmaxmindaccid_desc', 'core_admin'),
'',
PARAM_TEXT,
));
$temp->add(new admin_setting_configtext('geoipmaxmindlicensekey',
new lang_string('geoipmaxmindlicensekey', 'core_admin'),
new lang_string('geoipmaxmindlicensekey_desc', 'core_admin'),
'',
PARAM_TEXT,
));
$CFG->dataroot . '/geoip/GeoLite2-City.mmdb'));
$temp->add(new admin_setting_configtext('googlemapkey3', new lang_string('googlemapkey3', 'core_admin'),
new lang_string('googlemapkey3_help', 'core_admin'), '', PARAM_RAW, 60));
$temp->add(new admin_setting_countrycodes('allcountrycodes', new lang_string('allcountrycodes', 'core_admin'),
new lang_string('configallcountrycodes', 'core_admin')));
}
$ADMIN->add('location', $temp);
+3
View File
@@ -39,6 +39,9 @@ if (isset($CFG->mnet_dispatcher_mode) and $CFG->mnet_dispatcher_mode !== 'off')
$ADMIN->add('mnet', new admin_externalpage('ssoaccesscontrol', new lang_string('ssoaccesscontrol', 'mnet'),
"$CFG->wwwroot/$CFG->admin/mnet/access_control.php",
'moodle/site:config'));
$ADMIN->add('mnet', new admin_externalpage('mnetenrol', new lang_string('clientname', 'mnetservice_enrol'),
"$CFG->wwwroot/mnet/service/enrol/index.php",
'moodle/site:config'));
$ADMIN->add('mnet', new admin_externalpage('trustedhosts', new lang_string('trustedhosts', 'mnet'),
"$CFG->wwwroot/$CFG->admin/mnet/trustedhosts.php",
'moodle/site:config'));
+36 -79
View File
@@ -24,40 +24,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$ADMIN->add('modules', new admin_category('modsettings', new lang_string('activitymodules')));
$ADMIN->add('modules', new admin_category('formatsettings', new lang_string('courseformats')));
$ADMIN->add('modules', new admin_category('customfieldsettings', new lang_string('customfields', 'core_customfield')));
$ADMIN->add('modules', new admin_category('blocksettings', new lang_string('blocks')));
$ADMIN->add('modules', new admin_category('authsettings', new lang_string('authentication', 'admin')));
$ADMIN->add('modules', new admin_category('enrolments', new lang_string('enrolments', 'enrol')));
$ADMIN->add('modules', new admin_category('editorsettings', new lang_string('editors', 'editor')));
$ADMIN->add('modules', new admin_category('antivirussettings', new lang_string('antiviruses', 'antivirus')));
$ADMIN->add('modules', new admin_category('mlbackendsettings', new lang_string('mlbackendsettings', 'admin')));
$ADMIN->add('modules', new admin_category('filtersettings', new lang_string('managefilters')));
$ADMIN->add('modules', new admin_category('mediaplayers', new lang_string('type_media_plural', 'plugin')));
$ADMIN->add('modules', new admin_category('fileconverterplugins', new lang_string('type_fileconverter_plural', 'plugin')));
$ADMIN->add('modules', new admin_category('paymentgateways', new lang_string('type_paygw_plural', 'plugin')));
$ADMIN->add('modules', new admin_category('dataformatsettings', new lang_string('dataformats')));
$ADMIN->add('modules', new admin_category('portfoliosettings', new lang_string('portfolios', 'portfolio'),
empty($CFG->enableportfolios)));
$ADMIN->add('modules', new admin_category('repositorysettings', new lang_string('repositories', 'repository')));
$ADMIN->add('modules', new admin_category('qbanksettings', new lang_string('type_qbank_plural', 'plugin')));
$ADMIN->add('modules', new admin_category('qbehavioursettings', new lang_string('questionbehaviours', 'admin')));
$ADMIN->add('modules', new admin_category('qtypesettings', new lang_string('questiontypes', 'admin')));
$ADMIN->add('modules', new admin_category('plagiarism', new lang_string('plagiarism', 'plagiarism')));
$ADMIN->add('modules', new admin_category('coursereports', new lang_string('coursereports')));
$ADMIN->add('modules', new admin_category('reportplugins', new lang_string('reports')));
$ADMIN->add('modules', new admin_category('searchplugins', new lang_string('search', 'admin')));
$ADMIN->add('modules', new admin_category('tools', new lang_string('tools', 'admin')));
$ADMIN->add('modules', new admin_category('cache', new lang_string('caching', 'cache')));
$ADMIN->add('cache', new admin_category('cachestores', new lang_string('cachestores', 'cache')));
$ADMIN->add('modules', new admin_category('calendartype', new lang_string('calendartypes', 'calendar')));
$ADMIN->add('modules', new admin_category('communicationsettings', new lang_string('communication', 'core_communication')));
$ADMIN->add('modules', new admin_category('sms', new lang_string('sms', 'core_sms')));
$ADMIN->add('modules', new admin_category('contentbanksettings', new lang_string('contentbank')));
$ADMIN->add('modules', new admin_category('localplugins', new lang_string('localplugins')));
if ($hassiteconfig) {
/* @var admin_root $ADMIN */
$ADMIN->locate('modules')->set_sorting(true);
@@ -65,6 +31,7 @@ if ($hassiteconfig) {
$ADMIN->add('modules', new admin_page_pluginsoverview());
// activity modules
$ADMIN->add('modules', new admin_category('modsettings', new lang_string('activitymodules')));
$ADMIN->add('modsettings', new admin_page_managemods());
@@ -81,6 +48,7 @@ if ($hassiteconfig) {
}
// course formats
$ADMIN->add('modules', new admin_category('formatsettings', new lang_string('courseformats')));
$temp = new admin_settingpage('manageformats', new lang_string('manageformats', 'core_admin'));
$temp->add(new admin_setting_manageformats());
$ADMIN->add('formatsettings', $temp);
@@ -92,6 +60,7 @@ if ($hassiteconfig) {
}
// Custom fields.
$ADMIN->add('modules', new admin_category('customfieldsettings', new lang_string('customfields', 'core_customfield')));
$temp = new admin_settingpage('managecustomfields', new lang_string('managecustomfields', 'core_admin'));
$temp->add(new admin_setting_managecustomfields());
$ADMIN->add('customfieldsettings', $temp);
@@ -103,6 +72,7 @@ if ($hassiteconfig) {
}
// blocks
$ADMIN->add('modules', new admin_category('blocksettings', new lang_string('blocks')));
$ADMIN->add('blocksettings', new admin_page_manageblocks());
$plugins = core_plugin_manager::instance()->get_plugins_of_type('block');
core_collator::asort_objects_by_property($plugins, 'displayname');
@@ -112,6 +82,8 @@ if ($hassiteconfig) {
}
// authentication plugins
$ADMIN->add('modules', new admin_category('authsettings', new lang_string('authentication', 'admin')));
$temp = new admin_settingpage('manageauths', new lang_string('authsettings', 'admin'));
$temp->add(new admin_setting_manageauths());
$temp->add(new admin_setting_heading('manageauthscommonheading', new lang_string('commonsettings', 'admin'), ''));
@@ -130,8 +102,6 @@ if ($hassiteconfig) {
new lang_string('limitconcurrentlogins_desc', 'core_auth'), 0, $options));
$temp->add(new admin_setting_configtext('alternateloginurl', new lang_string('alternateloginurl', 'auth'),
new lang_string('alternatelogin', 'auth', htmlspecialchars(get_login_url(), ENT_COMPAT)), ''));
$temp->add(new admin_setting_configcheckbox('showloginform', new lang_string('showloginform', 'core_auth'),
new lang_string('showloginform_desc', 'core_auth'), 1));
$temp->add(new admin_setting_configtext('forgottenpasswordurl', new lang_string('forgottenpasswordurl', 'auth'),
new lang_string('forgottenpassword', 'auth'), '', PARAM_URL));
$temp->add(new admin_setting_confightmleditor('auth_instructions', new lang_string('instructions', 'auth'),
@@ -188,6 +158,7 @@ if ($hassiteconfig) {
}
// Enrolment plugins
$ADMIN->add('modules', new admin_category('enrolments', new lang_string('enrolments', 'enrol')));
$temp = new admin_settingpage('manageenrols', new lang_string('manageenrols', 'enrol'));
$temp->add(new admin_setting_manageenrols());
$ADMIN->add('enrolments', $temp);
@@ -204,6 +175,7 @@ if ($hassiteconfig) {
/// Editor plugins
$ADMIN->add('modules', new admin_category('editorsettings', new lang_string('editors', 'editor')));
$temp = new admin_settingpage('manageeditors', new lang_string('editorsettings', 'editor'));
$temp->add(new \core_admin\admin\admin_setting_plugin_manager(
'editor',
@@ -220,6 +192,7 @@ if ($hassiteconfig) {
}
// Antivirus plugins.
$ADMIN->add('modules', new admin_category('antivirussettings', new lang_string('antiviruses', 'antivirus')));
$temp = new admin_settingpage('manageantiviruses', new lang_string('antivirussettings', 'antivirus'));
$temp->add(new admin_setting_manageantiviruses());
@@ -291,12 +264,14 @@ if ($hassiteconfig) {
}
// Machine learning backend plugins.
$ADMIN->add('modules', new admin_category('mlbackendsettings', new lang_string('mlbackendsettings', 'admin')));
$plugins = core_plugin_manager::instance()->get_plugins_of_type('mlbackend');
foreach ($plugins as $plugin) {
$plugin->load_settings($ADMIN, 'mlbackendsettings', $hassiteconfig);
}
/// Filter plugins
$ADMIN->add('modules', new admin_category('filtersettings', new lang_string('managefilters')));
$ADMIN->add('filtersettings', new admin_page_managefilters());
@@ -310,7 +285,7 @@ if ($hassiteconfig) {
$items[] = new admin_setting_configcheckbox('filtermatchonepertext', new lang_string('filtermatchonepertext', 'admin'), new lang_string('configfiltermatchonepertext', 'admin'), 0);
$items[] = new admin_setting_configcheckbox('filternavigationwithsystemcontext',
new lang_string('filternavigationwithsystemcontext', 'admin'),
new lang_string('configfilternavigationwithsystemcontext', 'admin'), 1);
new lang_string('configfilternavigationwithsystemcontext', 'admin'), 0);
foreach ($items as $item) {
$item->set_updatedcallback('reset_text_filters_cache');
$temp->add($item);
@@ -326,6 +301,7 @@ if ($hassiteconfig) {
}
// Media players.
$ADMIN->add('modules', new admin_category('mediaplayers', new lang_string('type_media_plural', 'plugin')));
$temp = new admin_settingpage('managemediaplayers', new lang_string('managemediaplayers', 'media'));
$temp->add(new admin_setting_heading('mediaformats', get_string('mediaformats', 'core_media'),
format_text(get_string('mediaformats_desc', 'core_media'), FORMAT_MARKDOWN)));
@@ -345,6 +321,7 @@ if ($hassiteconfig) {
$ADMIN->add('mediaplayers', $temp);
// Convert plugins.
$ADMIN->add('modules', new admin_category('fileconverterplugins', new lang_string('type_fileconverter_plural', 'plugin')));
$temp = new admin_settingpage('managefileconverterplugins', new lang_string('type_fileconvertermanage', 'plugin'));
$temp->add(new admin_setting_manage_fileconverter_plugins());
$ADMIN->add('fileconverterplugins', $temp);
@@ -364,6 +341,7 @@ if ($hassiteconfig) {
}
// Payment gateway plugins.
$ADMIN->add('modules', new admin_category('paymentgateways', new lang_string('type_paygw_plural', 'plugin')));
$temp = new admin_settingpage('managepaymentgateways', new lang_string('type_paygwmanage', 'plugin'));
$temp->add(new \core_admin\local\settings\manage_payment_gateway_plugins());
$temp->add(new admin_setting_description(
@@ -382,6 +360,7 @@ if ($hassiteconfig) {
}
// Data format settings.
$ADMIN->add('modules', new admin_category('dataformatsettings', new lang_string('dataformats')));
$temp = new admin_settingpage('managedataformats', new lang_string('managedataformats'));
$temp->add(new admin_setting_managedataformats());
$ADMIN->add('dataformatsettings', $temp);
@@ -395,9 +374,12 @@ if ($hassiteconfig) {
//== Portfolio settings ==
require_once($CFG->libdir. '/portfoliolib.php');
$catname = new lang_string('portfolios', 'portfolio');
$manage = new lang_string('manageportfolios', 'portfolio');
$url = "$CFG->wwwroot/$CFG->admin/portfolio.php";
$ADMIN->add('modules', new admin_category('portfoliosettings', $catname, empty($CFG->enableportfolios)));
// Add manage page (with table)
$temp = new admin_page_manageportfolios();
$ADMIN->add('portfoliosettings', $temp);
@@ -451,8 +433,10 @@ if ($hassiteconfig) {
// repository setting
require_once("$CFG->dirroot/repository/lib.php");
$catname =new lang_string('repositories', 'repository');
$managerepo = new lang_string('manage', 'repository');
$url = $CFG->wwwroot.'/'.$CFG->admin.'/repository.php';
$ADMIN->add('modules', new admin_category('repositorysettings', $catname));
// Add main page (with table)
$temp = new admin_page_managerepositories();
@@ -488,6 +472,8 @@ if ($hassiteconfig) {
// Question bank settings.
if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) {
$ADMIN->add('modules', new admin_category('qbanksettings',
new lang_string('type_qbank_plural', 'plugin')));
$temp = new admin_settingpage('manageqbanks', new lang_string('manageqbanks', 'admin'));
$temp->add(new \core_question\admin\manage_qbank_plugins_page());
$ADMIN->add('qbanksettings', $temp);
@@ -503,9 +489,11 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) {
// Question behaviour settings.
$ADMIN->add('modules', new admin_category('qbehavioursettings', new lang_string('questionbehaviours', 'admin')));
$ADMIN->add('qbehavioursettings', new admin_page_manageqbehaviours());
// Question type settings.
$ADMIN->add('modules', new admin_category('qtypesettings', new lang_string('questiontypes', 'admin')));
$ADMIN->add('qtypesettings', new admin_page_manageqtypes());
// Question preview defaults.
@@ -554,18 +542,6 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
$settings->add(new admin_setting_configselect('question_preview/history',
get_string('responsehistory', 'question'), '', 0, $hiddenofvisible));
// Question editing settings.
$settings = new admin_settingpage('qediting',
get_string('questionediting', 'question'),
'moodle/question:config');
$ADMIN->add('qtypesettings', $settings);
$settings->add(new admin_setting_heading('qediting_options',
'', get_string('questionediting_desc', 'question')));
$settings->add(new admin_setting_configcheckbox('questiondefaultssave',
get_string('questiondefaultssave', 'question'), get_string('questiondefaultssave_desc', 'question'), 1));
// Settings for particular question types.
$plugins = core_plugin_manager::instance()->get_plugins_of_type('qtype');
core_collator::asort_objects_by_property($plugins, 'displayname');
@@ -577,6 +553,7 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
// Plagiarism plugin settings
if ($hassiteconfig && !empty($CFG->enableplagiarism)) {
$ADMIN->add('modules', new admin_category('plagiarism', new lang_string('plagiarism', 'plagiarism')));
$ADMIN->add('plagiarism', new admin_externalpage('manageplagiarismplugins', new lang_string('manageplagiarism', 'plagiarism'),
$CFG->wwwroot . '/' . $CFG->admin . '/plagiarism.php'));
@@ -608,6 +585,7 @@ if ($hassiteconfig) {
}
}
if (!empty($pages)) {
$ADMIN->add('modules', new admin_category('coursereports', new lang_string('coursereports')));
core_collator::asort_objects_by_property($pages, 'visiblename');
foreach ($pages as $page) {
$ADMIN->add('coursereports', $page);
@@ -629,6 +607,7 @@ foreach (core_component::get_plugin_list('report') as $report => $plugindir) {
}
}
}
$ADMIN->add('modules', new admin_category('reportplugins', new lang_string('reports')));
$ADMIN->add('reportplugins', new admin_externalpage('managereports', new lang_string('reportsmanage', 'admin'),
$CFG->wwwroot . '/' . $CFG->admin . '/reports.php'));
core_collator::asort_objects_by_property($pages, 'visiblename');
@@ -638,6 +617,7 @@ foreach ($pages as $page) {
if ($hassiteconfig) {
// Global Search engine plugins.
$ADMIN->add('modules', new admin_category('searchplugins', new lang_string('search', 'admin')));
$temp = new admin_settingpage('manageglobalsearch', new lang_string('globalsearchmanage', 'admin'));
$pages = array();
@@ -779,6 +759,7 @@ if ($hassiteconfig) {
/// Add all admin tools
if ($hassiteconfig) {
$ADMIN->add('modules', new admin_category('tools', new lang_string('tools', 'admin')));
$settingspage = new admin_settingpage('toolsmanagement', new lang_string('toolsmanage', 'admin'));
$ADMIN->add('tools', $settingspage);
$settingspage->add(new \core_admin\admin\admin_setting_plugin_manager(
@@ -799,10 +780,12 @@ foreach ($plugins as $plugin) {
// Now add the Cache plugins
if ($hassiteconfig) {
$ADMIN->add('modules', new admin_category('cache', new lang_string('caching', 'cache')));
$ADMIN->add('cache', new admin_externalpage('cacheconfig', new lang_string('cacheconfig', 'cache'), $CFG->wwwroot .'/cache/admin.php'));
$ADMIN->add('cache', new admin_externalpage('cachetestperformance', new lang_string('testperformance', 'cache'), $CFG->wwwroot . '/cache/testperformance.php'));
$ADMIN->add('cache', new admin_externalpage('cacheusage',
new lang_string('cacheusage', 'cache'), $CFG->wwwroot . '/cache/usage.php'));
$ADMIN->add('cache', new admin_category('cachestores', new lang_string('cachestores', 'cache')));
$ADMIN->locate('cachestores')->set_sorting(true);
foreach (core_component::get_plugin_list('cachestore') as $plugin => $path) {
$settingspath = $path.'/settings.php';
@@ -816,6 +799,7 @@ if ($hassiteconfig) {
// Add Calendar type settings.
if ($hassiteconfig) {
$ADMIN->add('modules', new admin_category('calendartype', new lang_string('calendartypes', 'calendar')));
$plugins = core_plugin_manager::instance()->get_plugins_of_type('calendartype');
core_collator::asort_objects_by_property($plugins, 'displayname');
foreach ($plugins as $plugin) {
@@ -826,6 +810,7 @@ if ($hassiteconfig) {
// Communication plugins.
if ($hassiteconfig && core_communication\api::is_available()) {
$ADMIN->add('modules', new admin_category('communicationsettings', new lang_string('communication', 'core_communication')));
$temp = new admin_settingpage('managecommunicationproviders',
new lang_string('managecommunicationproviders', 'core_communication'));
$temp->add(new \core_communication\admin\manage_communication_providers_page());
@@ -837,41 +822,12 @@ if ($hassiteconfig && core_communication\api::is_available()) {
}
}
// SMS plugins.
if ($hassiteconfig) {
$ADMIN->add(
'sms',
new admin_externalpage(
'smsgateway',
new lang_string('manage_sms_gateways', 'core_sms'),
$CFG->wwwroot . '/sms/sms_gateways.php',
),
);
foreach (core_component::get_plugin_list('smsgateway') as $plugin => $path) {
$settingspath = $path . '/settings.php';
if (file_exists($settingspath)) {
$settings = new admin_settingpage(
'smsgateway_' . $plugin . '_settings',
new lang_string('pluginname', 'smsgateway_' . $plugin),
'moodle/site:config',
);
include($settingspath);
$ADMIN->add('smsgateway', $settings);
}
}
}
// Content bank content types.
if ($hassiteconfig) {
$ADMIN->add('modules', new admin_category('contentbanksettings', new lang_string('contentbank')));
$temp = new admin_settingpage('managecontentbanktypes', new lang_string('managecontentbanktypes'));
$temp->add(new admin_setting_managecontentbankcontenttypes());
$ADMIN->add('contentbanksettings', $temp);
$ADMIN->add('contentbanksettings',
new admin_externalpage('contentbank', new lang_string('contentbankcustomfields', 'contentbank'),
$CFG->wwwroot . '/contentbank/customfield.php',
'moodle/contentbank:configurecustomfields'
)
);
$plugins = core_plugin_manager::instance()->get_plugins_of_type('contenttype');
foreach ($plugins as $plugin) {
/** @var \core\plugininfo\contentbank $plugin */
@@ -881,6 +837,7 @@ if ($hassiteconfig) {
/// Add all local plugins - must be always last!
if ($hassiteconfig) {
$ADMIN->add('modules', new admin_category('localplugins', new lang_string('localplugins')));
$ADMIN->add('localplugins', new admin_externalpage('managelocalplugins', new lang_string('localpluginsmanage'),
$CFG->wwwroot . '/' . $CFG->admin . '/localplugins.php'));
}
-12
View File
@@ -64,15 +64,3 @@ $settings->add(new admin_setting_configcheckbox(
new lang_string('customreportsliveediting_desc', 'core_reportbuilder'), 1));
$ADMIN->add('reportbuilder', $settings);
$ADMIN->add(
'reportbuilder', new accesscallback(
'reportbuildercustomfields',
get_string('reportbuildercustomfields', 'core_reportbuilder'),
(new moodle_url('/reportbuilder/customfield.php'))->out(),
static function(): bool {
return has_capability('moodle/reportbuilder:configurecustomfields', context_system::instance());
},
empty($CFG->enablecustomreports)
)
);
+2 -2
View File
@@ -126,7 +126,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$temp->add($adminsetting);
$temp->add(new admin_setting_configcheckbox('passwordchangelogout',
new lang_string('passwordchangelogout', 'admin'),
new lang_string('passwordchangelogout_desc', 'admin'), 1));
new lang_string('passwordchangelogout_desc', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('passwordchangetokendeletion',
new lang_string('passwordchangetokendeletion', 'admin'),
@@ -147,7 +147,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$sensiblesettingsdefault .= 'secretphrase@@url, cronremotepassword@@none, smtpuser@@none, ';
$sensiblesettingsdefault .= 'smtppass@@none, proxypassword@@none, quizpassword@@quiz, allowedip@@none, blockedip@@none, ';
$sensiblesettingsdefault .= 'dbpass@@logstore_database, messageinbound_hostpass@@none, ';
$sensiblesettingsdefault .= 'pass@@auth_db, bind_pw@@auth_ldap, ';
$sensiblesettingsdefault .= 'bind_pw@@auth_cas, pass@@auth_db, bind_pw@@auth_ldap, ';
$sensiblesettingsdefault .= 'dbpass@@enrol_database, bind_pw@@enrol_ldap, ';
$sensiblesettingsdefault .= 'server_password@@search_solr, ssl_keypassword@@search_solr, ';
$sensiblesettingsdefault .= 'alternateserver_password@@search_solr, alternatessl_keypassword@@search_solr, ';
+5 -14
View File
@@ -25,10 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$ADMIN->add('server', new admin_category('taskconfig', new lang_string('taskadmintitle', 'admin')));
$ADMIN->add('server', new admin_category('email', new lang_string('categoryemail', 'admin')));
$ADMIN->add('server', new admin_category('webservicesettings', new lang_string('webservices', 'webservice')));
if ($hassiteconfig) {
// System paths.
$temp = new admin_settingpage('systempaths', new lang_string('systempaths', 'admin'));
@@ -185,16 +181,8 @@ if ($hassiteconfig) {
new lang_string('configproxyuser', 'admin'), ''));
$temp->add(new admin_setting_configpasswordunmask('proxypassword', new lang_string('proxypassword', 'admin'),
new lang_string('configproxypassword', 'admin'), ''));
$setting = new admin_setting_configtext('proxybypass', new lang_string('proxybypass', 'admin'),
new lang_string('configproxybypass', 'admin'), 'localhost,127.0.0.1');
$setting->set_updatedcallback(function() {
// Normalize $CFG->proxybypass value.
$normalizedvalue = \core\ip_utils::normalize_internet_address_list(get_config('core', 'proxybypass'));
set_config('proxybypass', $normalizedvalue);
});
$temp->add($setting);
$temp->add(new admin_setting_configtext('proxybypass', new lang_string('proxybypass', 'admin'),
new lang_string('configproxybypass', 'admin'), 'localhost, 127.0.0.1'));
$temp->add(new admin_setting_configcheckbox('proxylogunsafe', new lang_string('proxylogunsafe', 'admin'),
new lang_string('configproxylogunsafe_help', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('proxyfixunsafe', new lang_string('proxyfixunsafe', 'admin'),
@@ -337,6 +325,7 @@ if ($hassiteconfig) {
$ADMIN->add('server', $temp);
// Tasks.
$ADMIN->add('server', new admin_category('taskconfig', new lang_string('taskadmintitle', 'admin')));
// Task processing.
$temp = new admin_settingpage('taskprocessing', new lang_string('taskprocessing', 'admin'));
@@ -470,6 +459,7 @@ if ($hassiteconfig) {
}
// Email.
$ADMIN->add('server', new admin_category('email', new lang_string('categoryemail', 'admin')));
// Outgoing mail configuration.
$temp = new admin_settingpage('outgoingmailconfig', new lang_string('outgoingmailconfig', 'admin'));
@@ -641,6 +631,7 @@ if ($hassiteconfig) {
}
// Web services.
$ADMIN->add('server', new admin_category('webservicesettings', new lang_string('webservices', 'webservice')));
// Web services > Overview.
$temp = new admin_settingpage('webservicesoverview', new lang_string('webservicesoverview', 'webservice'));
+2 -2
View File
@@ -46,9 +46,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$optionalsubsystems->add(new admin_setting_configcheckbox('allowstealth', new lang_string('allowstealthmodules'),
new lang_string('allowstealthmodules_help'), 0, 1, 0));
// TODO: Analytics is now disable on new installs until MDL-84481 overcomes the config of mlbackend_python.
$optionalsubsystems->add(new admin_setting_configcheckbox('enableanalytics', new lang_string('enableanalytics', 'admin'),
new lang_string('configenableanalytics', 'admin'), 0, 1, 0));
new lang_string('configenableanalytics', 'admin'), 1, 1, 0));
$optionalsubsystems->add(new admin_setting_configcheckbox('core_competency/enabled',
new lang_string('enablecompetencies', 'core_competency'),
-1
View File
@@ -25,7 +25,6 @@ if ($hassiteconfig) {
$ADMIN->add('root', new admin_category('users', new lang_string('users','admin')));
$ADMIN->add('root', new admin_category('courses', new lang_string('courses','admin')));
$ADMIN->add('root', new admin_category('grades', new lang_string('grades')));
$ADMIN->add('root', new admin_category('ai', new lang_string('ai', 'ai')));
$ADMIN->add('root', new admin_category('analytics', new lang_string('analytics', 'analytics')));
$ADMIN->add('root', new admin_category('competencies', new lang_string('competencies', 'core_competency')));
$ADMIN->add('root', new admin_category('badges', new lang_string('badges'), empty($CFG->enablebadges)));
+8 -14
View File
@@ -6,20 +6,14 @@ $ADMIN->add('users', new admin_category('accounts', new lang_string('accounts',
$ADMIN->add('users', new admin_category('roles', new lang_string('permissions', 'role')));
$ADMIN->add('users', new admin_category('privacy', new lang_string('privacyandpolicies', 'admin')));
$capabilities = [
'moodle/user:create',
'moodle/user:update',
'moodle/user:delete',
'moodle/role:manage',
'moodle/role:assign',
'moodle/cohort:manage',
'moodle/cohort:view',
'moodle/cohort:configurecustomfields',
'moodle/role:safeoverride',
'moodle/role:override',
];
if ($hassiteconfig || has_any_capability($capabilities, $systemcontext)) { // Speedup for non-admins, all caps used on this page.
if ($hassiteconfig
or has_capability('moodle/user:create', $systemcontext)
or has_capability('moodle/user:update', $systemcontext)
or has_capability('moodle/user:delete', $systemcontext)
or has_capability('moodle/role:manage', $systemcontext)
or has_capability('moodle/role:assign', $systemcontext)
or has_capability('moodle/cohort:manage', $systemcontext)
or has_capability('moodle/cohort:view', $systemcontext)) { // Speedup for non-admins, add all caps used on this page.
// Stuff under the "accounts" subcategory.
-87
View File
@@ -1,87 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Swagger UI for Moodle
*
* @package core_admin
* @copyright Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require('../config.php');
require_once($CFG->libdir . '/adminlib.php');
$swaggerversion = '5.17.14';
$PAGE->set_url('/admin/swaggerui.php');
admin_externalpage_setup('swaggerui');
$PAGE->requires->css(new moodle_url("https://unpkg.com/swagger-ui-dist@{$swaggerversion}/swagger-ui.css"));
echo $OUTPUT->header();
// These have to be manually added for now because they must be made cross-origin. The `js` method does not yet support this.
echo html_writer::tag(
tagname: 'script',
contents: '',
attributes: [
'src' => new moodle_url("https://unpkg.com/swagger-ui-dist@{$swaggerversion}/swagger-ui-bundle.js"),
'crossorigin' => 'crossorigin',
],
);
echo html_writer::tag(
tagname: 'script',
contents: '',
attributes: [
'src' => new moodle_url("https://unpkg.com/swagger-ui-plugin-hierarchical-tags"),
'crossorigin' => 'crossorigin',
],
);
$openapipath = moodle_url::routed_path('/api/rest/v2/openapi.json')->out();
$swaggerinit = <<<JS
window.ui = SwaggerUIBundle({
url: "{$openapipath}",
dom_id: '#swagger-ui',
// Enable the "Try it out" button by default.
tryItOutEnabled: true,
// Show snippets different OS options.
requestSnippetsEnabled: true,
deepLinking: true,
plugins: [
HierarchicalTagsPlugin,
],
hierarchicalTagSeparator: /[_]/
});
JS;
$PAGE->requires->js_init_code(
jscode: $swaggerinit,
ondomready: true,
);
echo html_writer::div('', '', [
'id' => 'swagger-ui',
]);
echo $OUTPUT->footer();
+1 -34
View File
@@ -24,7 +24,6 @@
require_once(__DIR__ . '/../config.php');
require_once("{$CFG->libdir}/adminlib.php");
require_once("tool/task/lib.php");
use core_admin\reportbuilder\local\systemreports\task_logs;
use core_reportbuilder\system_report_factory;
@@ -50,41 +49,9 @@ if (null !== $logid) {
if ($download) {
$filename = str_replace('\\', '_', $log->classname) . "-{$log->id}.log";
header("Content-Disposition: attachment; filename=\"{$filename}\"");
readstring_accel($log->output, 'text/plain');
exit;
}
try {
$class = new $log->classname;
$title = $class->get_name();
} catch (Exception $e) {
$title = $log->classname;
}
$title .= " ($log->id)";
$PAGE->navbar->add($title, '');
echo $OUTPUT->header();
echo html_writer::start_tag('pre', ['class' => 'task-output', 'style' => 'min-height: 24lh']);
echo tool_task_mtrace_wrapper($log->output);
echo html_writer::end_tag('pre');
echo $OUTPUT->action_link(
new moodle_url('/admin/tasklogs.php'),
$strheading,
null,
null,
new pix_icon('i/log', ''),
);
echo ' ';
echo $OUTPUT->action_link(
new moodle_url('/admin/tasklogs.php', ['logid' => $log->id, 'download' => true]),
new lang_string('download'),
null,
null,
new pix_icon('t/download', ''),
);
echo $OUTPUT->footer();
readstring_accel($log->output, 'text/plain');
exit;
}
+9 -7
View File
@@ -28,6 +28,9 @@
<div class="simplesearchform d-flex justify-content-end">
<form autocomplete="off" action="{{action}}" method="get" accept-charset="utf-8" class="mform d-flex flex-wrap align-items-center simplesearchform">
<div class="input-group">
<label for="searchinput-{{uniqid}}">
<span class="sr-only">{{#str}} search, core {{/str}}</span>
</label>
<input type="text"
id="searchinput-{{uniqid}}"
class="form-control"
@@ -38,13 +41,12 @@
autocomplete="off"
{{#query}}value="{{.}}"{{/query}}
>
<label for="searchinput-{{uniqid}}">
<span class="visually-hidden">{{#str}} search, core {{/str}}</span>
</label>
<button type="submit" class="btn btn-primary search-icon">
{{#pix}} a/search, core {{/pix}}
<span class="visually-hidden">{{#str}} search, core {{/str}}</span>
</button>
<div class="input-group-append">
<button type="submit" class="btn btn-primary search-icon">
{{#pix}} a/search, core {{/pix}}
<span class="sr-only">{{#str}} search, core {{/str}}</span>
</button>
</div>
</div>
</form>
</div>
@@ -59,9 +59,9 @@
Setting autocomplete.
}}
<div class="defaultsnext">
<div class="form-select defaultsnext">
<input type="hidden" name="{{name}}[xxxxx]" value="_qf__force_multiselect_submission">
<select class="form-select" name="{{name}}[]"
<select class="custom-select" name="{{name}}[]"
id="{{id}}"
{{#multiple}}multiple{{/multiple}}>
{{#options}}
+2 -2
View File
@@ -48,7 +48,7 @@
Setting.
}}
<div class="form-item row" id="{{id}}">
<div class="form-label col-sm-3 text-sm-end">
<div class="form-label col-sm-3 text-sm-right">
{{#customcontrol}}
<p {{#labelfor}}id="{{labelfor}}_label"{{/labelfor}}>
{{{title}}}
@@ -81,7 +81,7 @@
{{#default}}
<div class="form-defaultinfo text-muted {{#forceltr}}text-ltr{{/forceltr}}">{{{default}}}</div>
{{/default}}
<div class="form-text mt-2">{{{description}}}</div>
<div class="form-description mt-3">{{{description}}}</div>
{{#dependenton}}<div class="form-dependenton mb-4 text-muted">{{{.}}}</div>{{/dependenton}}
</div>
</div>
@@ -41,8 +41,8 @@
<div class="form-duration defaultsnext">
<div class="d-flex flex-wrap align-items-center">
<input type="text" size="5" id="{{id}}v" name="{{name}}[v]" value="{{value}}" class="form-control text-ltr" {{#readonly}}disabled{{/readonly}}>
<label class="visually-hidden" for="{{id}}u">{{#str}}durationunits, admin{{/str}}</label>
<select id="{{id}}u" name="{{name}}[u]" class="form-control form-select" {{#readonly}}disabled{{/readonly}}>
<label class="sr-only" for="{{id}}u">{{#str}}durationunits, admin{{/str}}</label>
<select id="{{id}}u" name="{{name}}[u]" class="form-control custom-select" {{#readonly}}disabled{{/readonly}}>
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
@@ -41,8 +41,8 @@
<div class="form-filesize defaultsnext">
<div class="d-flex flex-wrap align-items-center">
<input type="text" size="5" id="{{id}}v" name="{{name}}[v]" value="{{value}}" class="form-control text-ltr" {{#readonly}}disabled{{/readonly}}>
<label class="visually-hidden" for="{{id}}u">{{#str}}filesizeunits, admin{{/str}}</label>
<select id="{{id}}u" name="{{name}}[u]" class="form-control form-select" {{#readonly}}disabled{{/readonly}}>
<label class="sr-only" for="{{id}}u">{{#str}}filesizeunits, admin{{/str}}</label>
<select id="{{id}}u" name="{{name}}[u]" class="form-control custom-select" {{#readonly}}disabled{{/readonly}}>
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
@@ -39,7 +39,7 @@
{{!
Setting configmultiselect.
}}
<div>
<div class="form-select">
{{^readonly}}<input type="hidden" name="{{name}}[xxxxx]" value="1">{{/readonly}}
<select {{#readonly}}disabled{{/readonly}} id="{{id}}" name="{{name}}[]" size="{{size}}" class="form-control" multiple>
{{#options}}

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