Compare commits

..

356 Commits

Author SHA1 Message Date
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
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
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
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
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 f540fab1dc MDL-82047 analytics: remove 32-bit integer checks for maximum time. 2024-05-30 19:00:25 +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 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
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 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
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
Jun Pataleta ee91c6536f Moodle release 4.4 2024-04-20 15:58:15 +08:00
Huong Nguyen 7cbed34833 Moodle release 4.4rc2 2024-04-19 17:06:31 +07:00
Jun Pataleta 94f5e7e66f Merge branch 'MDL-81584-main' of https://github.com/mihailges/moodle 2024-04-19 11:03:19 +08:00
Huong Nguyen c021a83998 Merge branch 'MDL-81595-main' of https://github.com/safatshahin/moodle 2024-04-19 09:48:56 +07:00
Huong Nguyen 56ea31a508 Merge branch 'MDL-81553' of https://github.com/aolley/moodle 2024-04-18 22:36:20 +07:00
Safat f070a165e3 MDL-81595 core_communication: Fix provider switching active flag update 2024-04-18 22:21:00 +10:00
Mihail Geshoski 907a7c5786 MDL-81584 gradereport_grader: Pin the last row only when necessary
Fixes the current behavior where the last row in the grader report is
always 'pinned', ensuring it is pinned only when necessary.
2024-04-18 16:06:28 +08:00
Sara Arjona 9cec6a933c Merge branch 'MDL-81591' of https://github.com/stronk7/moodle 2024-04-18 08:27:37 +02:00
Huong Nguyen 978f3d42e5 Merge branch 'MDL-81512-main' of https://github.com/mickhawkins/moodle 2024-04-18 09:26:36 +07:00
Eloy Lafuente (stronk7) aa53092e4a MDL-81591 composer: Reconcile the lock file with json contents 2024-04-17 18:33:59 +02:00
Jun Pataleta 9966241efb Merge branch 'MDL-81525-main' of https://github.com/andrewnicols/moodle 2024-04-17 23:42:22 +08:00
Jun Pataleta 9e2a8c6945 Merge branch 'MDL-81574-main' of https://github.com/ilyatregubov/moodle 2024-04-17 16:36:33 +08:00
Laurent David ba9b291c03 MDL-81267 mod_data: Additional tests 2024-04-17 10:33:08 +02:00
Laurent David ffa045e099 MDL-81267 mod_data: Clean field type before inclusion
* Filter out wrong field types when restoring or creating a field.
2024-04-17 10:33:08 +02:00
Ilya Tregubov 603a648d0a MDL-81574 mod_forum: Fix deprecated usage of format_text 2024-04-17 15:48:14 +08:00
Paul Holden dadffe8989 MDL-80878 tool_mfa: safely retrieve the referrer URL. 2024-04-17 03:44:22 +00:00
Stevani Andolo 66da939499 MDL-81354 core: Escape string of fullname 2024-04-17 03:44:22 +00:00
Paul Holden f739ebe6db MDL-81463 auth: ensure login recaptcha always checked if configured. 2024-04-17 03:44:22 +00:00
Paul Holden 4c966677de MDL-81062 mod_lesson: escape identity fields in overview report. 2024-04-17 03:44:22 +00:00
Paul Holden e870bc01fc MDL-80712 mod_workshop: stricter cleaning of sub-plugin values. 2024-04-17 03:44:22 +00:00
Paul Holden 03e93da556 MDL-81058 admin: fix sesskey checks for admin preset actions. 2024-04-17 03:44:22 +00:00
Paul Holden 498a766263 MDL-81059 tool_analytics: fix sesskey checks for model actions. 2024-04-17 03:44:22 +00:00
Laurent David d5a99b1f33 MDL-81284 mod_wiki: Add stricter cleaning of contentformat
* When restoring backup we clean the contentformat and defaultformat
to avoid issue with invalid value.
* Add tests for format and defaultformat so to check that we
 filter out invalid formats
* Remove private $basepath variable as it was used one and not always
initialised correctly.
2024-04-17 03:44:22 +00:00
meirzamoodle 25b1b643c8 MDL-81352 filter: Ensure equation safety prior to filtering 2024-04-17 03:44:22 +00:00
Paul Holden 5a18d94dcb MDL-81135 mod_feedback: stricter cleaning of item type parameter. 2024-04-17 03:44:22 +00:00
Huong Nguyen d1514be1bc MDL-81247 calendar: Extra validation for webservices 2024-04-17 03:44:21 +00:00
Paul Holden ab817ef330 MDL-80877 tool_mfa: protect logout process with sesskey check. 2024-04-17 03:44:21 +00:00
Paul Holden 53e8a62003 MDL-81247 calendar: freeze event type if "user" only allowed. 2024-04-17 03:44:21 +00:00
Leon Stringer cd85e090f3 MDL-80585 report_log: sanitize descriptions
Strip any HTML tags from values in the "Description" column.
2024-04-17 03:44:21 +00:00
Huong Nguyen 8e682899cc Merge branch 'MDL-81549-main' of https://github.com/junpataleta/moodle 2024-04-17 10:33:28 +07:00
Huong Nguyen e566c520de Merge branch 'MDL-81552-main' of https://github.com/junpataleta/moodle 2024-04-17 10:13:15 +07:00
Ilya Tregubov 053506035a Merge branch 'MDL-81569' of https://github.com/marinaglancy/moodle 2024-04-17 11:11:21 +08:00
Jun Pataleta 2e13c434b9 MDL-81549 qtype_ordering: Remove $plugin->requires reference to 3.11 2024-04-17 00:17:01 +08:00
Jun Pataleta 4c233afa6a MDL-81549 versions: Main version bump 2024-04-17 00:17:01 +08:00
Jun Pataleta a180dba314 MDL-81549 versions: bump all versions and requires near release 2024-04-17 00:03:29 +08:00
Sara Arjona b276772f25 Merge branch 'MDL-81556-main' of https://github.com/junpataleta/moodle 2024-04-16 16:58:32 +02:00
Marina Glancy f78de9e614 MDL-81569 tool_uploadcourse: unittests - custom plugins may add roles 2024-04-16 15:43:27 +01:00
Marina Glancy cad4c4a9ab MDL-81569 repository_equela: do not hardcode list of roles in tests 2024-04-16 15:13:43 +01:00
raortegar 40aed04ae1 MDL-81512 core_theme: Use admin_settingpage for theme settings
This also moves any theme settings pages to the themes category instead
of "appearance", so they remain where expected, and avoids adding to
that section if the theme is hidden (so if there are no custom theme
settings, that section will not appear on the page).

Co-authored-by: Michael Hawkins <michaelh@moodle.com>
2024-04-16 17:43:46 +08:00
raortegar 57df4a1dbb MDL-81512 core_theme: Reinstate theme category as custom theme settings 2024-04-16 17:43:46 +08:00
Ilya Tregubov b798633ae0 Moodle release 4.4rc1 2024-04-16 17:14:27 +08:00
Jun Pataleta e69f1b21dc MDL-81556 core: Fix parameter ordering for prefetchString() 2024-04-16 17:05:23 +08:00
Jun Pataleta 548796db50 MDL-81556 tiny_media: Remove unnecessary labels
* Remove usage of label tags that are not associated with any
 form elements.
* Remove setting of title for the label tags. This is not necessary
as the title text is the same as the text showed in the label.
2024-04-16 17:05:22 +08:00
Jun Pataleta 561d48da39 MDL-81552 core: Assign proper webdav_client class variables 2024-04-16 12:54:00 +08:00
Huong Nguyen 7cb20672a7 MDL-81238 quiz: Fix maximum grade alignment 2024-04-16 10:18:33 +07:00
Huong Nguyen 272dd474f9 Merge branch 'MDL-81238-main' of https://github.com/lucaboesch/moodle 2024-04-16 10:16:27 +07:00
Jun Pataleta 9f081d8328 Merge branch 'MDL-80426-main-2' of https://github.com/rezaies/moodle 2024-04-16 11:07:06 +08:00
Adam Olley 4fa4bb7f72 MDL-81553 phpunit: Move controller->destroy() to after its needed
We need to cleanup the controller _after_ we're using the step related
to it. Destroying it before reintroduces the original issue from
MDL-80553.
2024-04-16 11:50:14 +09:30
Andrew Nicols 40e9fa2863 MDL-81525 core: Update column name for replaced hooks 2024-04-15 21:11:30 +08:00
Shamim Rezaie b32617e346 MDL-80426 qtype_ordering: An announcement region to announce reorders 2024-04-15 20:07:11 +10:00
Shamim Rezaie eccfb73839 MDL-80426 qtype_ordering: Remove the unintuitive keyboard handling code
Users can now rearrange options using the move buttons that each option
have, therefore there is no need for the current unintuitive keyboard
interaction implementation in the ordering question type plugin.
2024-04-15 20:07:11 +10:00
Shamim Rezaie 84034c62f0 MDL-80426 qtype_ordering: Move options by single pointer
Each option has a couple of buttons to move the option's position. This
allows moving options by single pointer without dragging to address WCAG
 Success Criterion 2.5.7.
Having the buttons also addresses WCAG Success Criterion 2.1.1 as it
provides an intuitive way to move options using keyboard.
2024-04-15 20:07:11 +10:00
Andrew Nicols b8d4d3ff94 MDL-81525 tool_mfa: Coding style fixups 2024-04-15 13:05:12 +08:00
Andrew Nicols 0428b0ed52 MDL-81525 tool_mfa: Add missing user tag to hook 2024-04-15 13:05:12 +08:00
Andrew Nicols 532be67b73 MDL-81525 mod_quiz: Add missing docs 2024-04-15 13:05:11 +08:00
Andrew Nicols ae48b9525a MDL-81525 core_group: Hook style fixes 2024-04-15 13:05:11 +08:00
Andrew Nicols d8b1156e5b MDL-81525 core_user: Add missing docs 2024-04-15 13:05:11 +08:00
Andrew Nicols b32fb636c5 MDL-81525 core_user: Use stoppable trait for consistency 2024-04-15 13:05:10 +08:00
Andrew Nicols 6db4285eaa MDL-81525 core_user: Move after_complete_login to correct NS 2024-04-15 13:05:10 +08:00
Andrew Nicols 27a6eb0126 MDL-81525 coer_enrol: Use stoppable trait for consistency 2024-04-15 13:05:10 +08:00
Andrew Nicols d602b7d3e3 MDL-81525 core_enrol: Add missing docs 2024-04-15 13:05:10 +08:00
Andrew Nicols a3036b79e1 MDL-81525 core_enrol: Add missing user tag to hook 2024-04-15 13:05:10 +08:00
Andrew Nicols a7aedc7c2f MDL-81525 core_enrol: Correct hook name tense 2024-04-15 13:05:09 +08:00
Andrew Nicols d2dddb715d MDL-81525 core_communication: Correct hook name tense 2024-04-15 13:05:09 +08:00
Andrew Nicols 93619ca6ac MDL-81525 core_course: Add missing docs 2024-04-15 13:05:09 +08:00
Andrew Nicols 4d12330d4b MDL-81525 core_course: Use stoppable trait for consistency 2024-04-15 13:05:09 +08:00
Andrew Nicols fd63e35dd1 MDL-81525 core_course: Correct hook name tense 2024-04-15 13:05:08 +08:00
Andrew Nicols eb2c2117a0 MDL-81525 core: Improve hook docs 2024-04-15 13:05:08 +08:00
Andrew Nicols 613f933442 Merge branch 'MDL-80820' of https://github.com/marinaglancy/moodle 2024-04-15 10:42:22 +08:00
Luca Bösch 444a1acf63 MDL-81238 mod_data: Align search form with BS5 correctly again. 2024-04-14 20:26:51 +02:00
Luca Bösch a3a9a48374 MDL-81238 quiz: Align maximum grade with BS5 correctly again. 2024-04-14 20:26:51 +02:00
Andrew Nicols 8be87eb633 MDL-81525 core: Coding style fixes 2024-04-14 21:49:33 +08:00
Andrew Nicols 6b0793d480 MDL-81525 core: Correct deprecated hook docs 2024-04-14 21:44:07 +08:00
Andrew Nicols 1e36531d0d MDL-81525 core: Tidy up hook tags 2024-04-14 14:45:09 +08:00
Andrew Nicols dc0cf1f273 MDL-81209 core: Unit test should not care about plugin details 2024-04-08 20:54:48 +08:00
Marina Glancy 42c76b711a MDL-80820 lib/pear: phpdoc corrections 2024-04-08 10:13:39 +01:00
Marina Glancy ef1759da74 MDL-80820 various: fix incorrect phpdocs 2024-04-08 10:13:10 +01:00
Andrew Nicols 5b9fdc0e9a MDL-81457 core: Do not mark tests as Incomplete when they are wrong
This check was marking a test as Incomplete if there was a bug in any
part of the test, rather than failing the test in such a way that the
test bug may be found.

https://docs.phpunit.de/en/9.6/incomplete-and-skipped-tests.html
2024-04-08 08:45:27 +08:00
Andrew Nicols d9a8eb2bdb MDL-81457 core: Mark SSL test as skipped, not incomplete
The incomplete test is intended for tests which are written but whose
code does not yet exist.

https://docs.phpunit.de/en/9.6/incomplete-and-skipped-tests.html
2024-04-08 08:45:16 +08:00
1016 changed files with 7000 additions and 3008 deletions
+143
View File
@@ -0,0 +1,143 @@
name: One by One Testing
# Run all the individual unit tests one by one, with
# fully independent PHPUnit executions. Useful to
# detect issues with some tests that are using stuff
# that has been made available by others, but is not
# available when running individually.
#
# Note that we aren't using PHPUnit's own isolation
# here but completely separated runs, one for each
# test.
#
# The workflow will fail reporting all the tests
# that have failed (and will pass if no failure is
# detected, of course).
#
# It's only executed via workflow dispatch (automated
# or manual), not by push/tag. And acceptd configuration
# of phpunit, specially useful to run it with PHPUnit's
# own isolation or any other option.
on:
workflow_dispatch:
inputs:
phpunit_extra_options:
description: Additional options to apply to PHPUnit
required: false
default: ''
env:
chunks: 7
jobs:
collect:
name: Collect individual unit tests
runs-on: ubuntu-latest
outputs:
matrix: ${{steps.individual-tests.outputs.matrix }}
steps:
- name: Checking out code
uses: actions/checkout@v4
- name: Looking for all individual tests
id: individual-tests
run: |
count=0 # Number of individual tests found.
while read -r testfile; do # For each test file.
while read -r testname; do # For each unit test in a file.
count=$((count + 1))
# Sent it to the correct chunk file.
chunk=$(((($count % $chunks)) + 1))
echo "$testname $testfile" >> ./chunk_$chunk.txt
done < <(grep "function test_" "${testfile}" | sed -r "s/^.*function (test_[a-zA-Z0-9_]+).*/\1/")
done < <(find . -name "*_test.php")
# Generate the matrix to run tests.
echo "matrix=$(ls -1 chunk_*.txt | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
echo "$count individual tests collected in $chunks files"
- name: Upload individual tests files
uses: actions/upload-artifact@v4
with:
name: individual_tests
path: chunk_*.txt
retention-days: 1
test:
name: Run tests
needs: collect
runs-on: ubuntu-latest
services:
exttests:
image: moodlehq/moodle-exttests
ports:
- 8080:80
redis:
image: redis
ports:
- 6379:6379
strategy:
fail-fast: false
matrix:
file: ${{ fromJson(needs.collect.outputs.matrix) }}
steps:
- name: Setting up DB pgsql
uses: m4nu56/postgresql-action@v1
with:
postgresql version: 13
postgresql db: test
postgresql user: test
postgresql password: test
- name: Setting up PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.3
ini-values: max_input_vars=5000
coverage: none
- name: Checking out code
uses: actions/checkout@v4
- name: Download individual test files
uses: actions/download-artifact@v4
with:
name: individual_tests # Make all the chunk files available for the next steps.
- name: Setting up PHPUnit
env:
dbtype: pgsql
run: |
echo "pathtophp=$(which php)" >> $GITHUB_ENV
cp .github/workflows/config-template.php config.php
mkdir ../moodledata
sudo locale-gen en_AU.UTF-8
php admin/tool/phpunit/cli/init.php --no-composer-self-update
- name: Run PHPUnit test (one by one)
env:
dbtype: pgsql
run: |
status=0
count=0
while read -r line; do # For each line in the chunk file
count=$((count + 1))
filter="${line% *}"
file="${line#* }"
# Run the individual unit test and report problems if needed to.
if ! php vendor/bin/phpunit \
--fail-on-empty-test-suite \
--fail-on-warning \
--fail-on-risky \
--filter "$filter" ${{ inputs.phpunit_extra_options }} \
"$file" >/dev/null 2>&1; then
if [ $status -eq 0 ]; then
echo "Problems found, list of PHPUnit commands failing:"
fi
echo "vendor/bin/phpunit --filter '${filter}' ${{ inputs.phpunit_extra_options }} $file"
status=$((status + 1))
fi
done < ${{ matrix.file }}
echo "Finished: $count individual tests executed, $status tests failed"
exit $status
+1 -1
View File
@@ -5,6 +5,6 @@ define("core_admin/bulk_user_actions",["exports","core_reportbuilder/local/selec
* @module core_admin/bulk_user_actions
* @copyright 2024 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,reportSelectors=_interopRequireWildcard(reportSelectors),tableEvents=_interopRequireWildcard(tableEvents),FormChangeChecker=_interopRequireWildcard(FormChangeChecker),CustomEvents=_interopRequireWildcard(CustomEvents),_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};const Selectors_bulkActionsForm="form#user-bulk-action-form",Selectors_userReportWrapper='[data-region="report-user-list-wrapper"]',Selectors_checkbox='input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="slave"]',Selectors_masterCheckbox='input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="master"]',Selectors_checkedRows='[data-togglegroup="report-select-all"][data-toggle="slave"]:checked';_exports.init=()=>{var _userBulkForm$closest;const userBulkForm=document.querySelector(Selectors_bulkActionsForm),userReport=null==userBulkForm||null===(_userBulkForm$closest=userBulkForm.closest(Selectors_userReportWrapper))||void 0===_userBulkForm$closest?void 0:_userBulkForm$closest.querySelector(reportSelectors.regions.report);if(!userBulkForm||!userReport)return;const actionSelect=userBulkForm.querySelector("select");CustomEvents.define(actionSelect,[CustomEvents.events.accessibleChange]),(0,_jquery.default)(actionSelect).on(CustomEvents.events.accessibleChange,(event=>{if(event.target.value&&"0"!=="".concat(event.target.value)){const e=new Event("submit",{cancelable:!0});userBulkForm.dispatchEvent(e),e.defaultPrevented||(FormChangeChecker.markFormSubmitted(userBulkForm),userBulkForm.submit())}}));const updateUserIds=()=>{const selectedUsers=[...userReport.querySelectorAll(Selectors_checkedRows)],selectedUserIds=selectedUsers.map((check=>parseInt(check.value)));userBulkForm.querySelector('[name="userids"]').value=selectedUserIds.join(","),actionSelect.disabled=0===selectedUsers.length;const selectedUsersNames=selectedUsers.map((check=>document.querySelector('label[for="'.concat(check.id,'"]')).textContent));userBulkForm.data={userids:selectedUserIds,usernames:selectedUsersNames}};updateUserIds(),document.addEventListener("change",(event=>{(event.target.matches(Selectors_checkbox)||event.target.matches(Selectors_masterCheckbox))&&userReport.contains(event.target)&&updateUserIds()})),document.addEventListener(tableEvents.tableContentRefreshed,(event=>{userReport.contains(event.target)&&updateUserIds()}))}}));
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,reportSelectors=_interopRequireWildcard(reportSelectors),tableEvents=_interopRequireWildcard(tableEvents),FormChangeChecker=_interopRequireWildcard(FormChangeChecker),CustomEvents=_interopRequireWildcard(CustomEvents),_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};const Selectors_bulkActionsForm="form#user-bulk-action-form",Selectors_userReportWrapper='[data-region="report-user-list-wrapper"]',Selectors_checkbox='input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="slave"]',Selectors_masterCheckbox='input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="master"]',Selectors_checkedRows='[data-togglegroup="report-select-all"][data-toggle="slave"]:checked';_exports.init=()=>{var _userBulkForm$closest;const userBulkForm=document.querySelector(Selectors_bulkActionsForm),userReport=null==userBulkForm||null===(_userBulkForm$closest=userBulkForm.closest(Selectors_userReportWrapper))||void 0===_userBulkForm$closest?void 0:_userBulkForm$closest.querySelector(reportSelectors.regions.report);if(!userBulkForm||!userReport)return;const actionSelect=userBulkForm.querySelector("select");CustomEvents.define(actionSelect,[CustomEvents.events.accessibleChange]),(0,_jquery.default)(actionSelect).on(CustomEvents.events.accessibleChange,(event=>{if(event.target.value&&"0"!=="".concat(event.target.value)){const e=new Event("submit",{cancelable:!0});userBulkForm.dispatchEvent(e),e.defaultPrevented||(FormChangeChecker.markFormSubmitted(userBulkForm),userBulkForm.submit())}}));const updateUserIds=()=>{const selectedUsers=[...userReport.querySelectorAll(Selectors_checkedRows)],selectedUserIds=selectedUsers.map((check=>parseInt(check.value)));userBulkForm.querySelector('[name="userids"]').value=selectedUserIds.join(","),actionSelect.disabled=0===selectedUsers.length,actionSelect.disabled&&(actionSelect.value="0");const selectedUsersNames=selectedUsers.map((check=>document.querySelector('label[for="'.concat(check.id,'"]')).textContent));userBulkForm.data={userids:selectedUserIds,usernames:selectedUsersNames}};updateUserIds(),document.addEventListener("change",(event=>{(event.target.matches(Selectors_checkbox)||event.target.matches(Selectors_masterCheckbox))&&userReport.contains(event.target)&&updateUserIds()})),document.addEventListener(tableEvents.tableContentRefreshed,(event=>{userReport.contains(event.target)&&updateUserIds()}))}}));
//# sourceMappingURL=bulk_user_actions.min.js.map
File diff suppressed because one or more lines are too long
+6
View File
@@ -65,7 +65,13 @@ export const init = () => {
const selectedUsers = [...userReport.querySelectorAll(Selectors.checkedRows)];
const selectedUserIds = selectedUsers.map(check => parseInt(check.value));
userBulkForm.querySelector('[name="userids"]').value = selectedUserIds.join(',');
// Disable the action selector if nothing selected, and reset the current selection.
actionSelect.disabled = selectedUsers.length === 0;
if (actionSelect.disabled) {
actionSelect.value = "0";
}
const selectedUsersNames = selectedUsers.map(check => document.querySelector(`label[for="${check.id}"]`).textContent);
// Add the user ids and names to the form data attributes so they can be available from the
// other JS modules that listen to the form submit event.
@@ -184,6 +184,7 @@ class users extends system_report {
$entityuseralias = $entityuser->get_table_alias('user');
$filters = [
'user:fullname',
'user:firstname',
'user:lastname',
'user:username',
+8
View File
@@ -29,6 +29,14 @@ use stdClass;
* @coversDefaultClass \core_adminpresets\manager
*/
class manager_test extends \advanced_testcase {
/**
* Include required libraries.
*/
public static function setUpBeforeClass(): void {
global $CFG;
require_once($CFG->libdir.'/adminlib.php');
}
/**
* Test the behaviour of protected get_site_settings method.
*
+7 -4
View File
@@ -349,14 +349,17 @@ 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)) {
$settings = new admin_externalpage('themesetting' . $theme, new lang_string('pluginname', 'theme_'.$theme),
new moodle_url($settingspath), 'moodle/site:config', true);
$settings = new admin_settingpage("themesetting$theme", new lang_string('pluginname', "theme_$theme"),
'moodle/site:config', true
);
include($settingspath);
if ($settings) {
$ADMIN->add('appearance', $settings);
// Add settings if not hidden (to avoid displaying the section if it appears empty in the UI).
if ($settings && !$settings->hidden) {
$ADMIN->add('themes', $settings);
}
}
}
+21
View File
@@ -159,3 +159,24 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
And I should not see "User One" in the "reportbuilder-table" "table"
And I should not see "User Three" in the "reportbuilder-table" "table"
And I should not see "User Four" in the "reportbuilder-table" "table"
@javascript
Scenario: Filter users by full name
When I click on "Filters" "button"
And I set the following fields in the "Full name" "core_reportbuilder > Filter" to these values:
| Full name operator | Is equal to |
| Full name value | User One |
And I click on "Apply" "button" in the "[data-region='report-filters']" "css_element"
Then I should see "User One" in the "reportbuilder-table" "table"
And I should not see "User Two" in the "reportbuilder-table" "table"
And I should not see "User Three" in the "reportbuilder-table" "table"
And I should not see "User Four" in the "reportbuilder-table" "table"
And I click on "Reset all" "button" in the "[data-region='report-filters']" "css_element"
And I set the following fields in the "Full name" "core_reportbuilder > Filter" to these values:
| Full name operator | Is equal to |
| Full name value | User Two |
And I click on "Apply" "button" in the "[data-region='report-filters']" "css_element"
And I should see "User Two" in the "reportbuilder-table" "table"
And I should not see "User One" in the "reportbuilder-table" "table"
And I should not see "User Three" in the "reportbuilder-table" "table"
And I should not see "User Four" in the "reportbuilder-table" "table"
@@ -65,7 +65,7 @@ class delete extends base {
* Delete the DB preset
*/
public function execute(): void {
confirm_sesskey();
require_sesskey();
$this->manager->delete_preset($this->id);
@@ -52,8 +52,6 @@ class export extends base {
* Stores a preset into the DB.
*/
public function execute(): void {
confirm_sesskey();
$url = new \moodle_url('/admin/tool/admin_presets/index.php', ['action' => 'export', 'mode' => 'execute']);
$this->moodleform = new export_form($url);
@@ -87,7 +85,7 @@ class export extends base {
* @throws xml_writer_exception
*/
public function download_xml(): void {
confirm_sesskey();
require_sesskey();
list($xmlstr, $filename) = $this->manager->download_preset($this->id);
@@ -40,8 +40,6 @@ class import extends base {
* Imports the xmlfile into DB
*/
public function execute(): void {
confirm_sesskey();
$url = new \moodle_url('/admin/tool/admin_presets/index.php', ['action' => 'import', 'mode' => 'execute']);
$this->moodleform = new import_form($url);
@@ -38,8 +38,6 @@ class load extends base {
public function execute(): void {
global $OUTPUT;
confirm_sesskey();
$url = new \moodle_url('/admin/tool/admin_presets/index.php', ['action' => 'load', 'mode' => 'execute']);
$this->moodleform = new load_form($url);
@@ -73,7 +73,7 @@ class rollback extends base {
public function execute(): void {
global $OUTPUT;
confirm_sesskey();
require_sesskey();
list($presetapp, $rollback, $failures) = $this->manager->revert_preset($this->id);
+2 -2
View File
@@ -26,5 +26,5 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'tool_admin_presets';
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
+7 -7
View File
@@ -97,28 +97,28 @@ if ($onlycli === false) {
switch ($action) {
case 'enable':
confirm_sesskey();
require_sesskey();
$model->enable();
redirect($returnurl);
break;
case 'disable':
confirm_sesskey();
require_sesskey();
$model->update(0, false, false);
redirect($returnurl);
break;
case 'delete':
confirm_sesskey();
require_sesskey();
$model->delete();
redirect($returnurl);
break;
case 'edit':
confirm_sesskey();
require_sesskey();
$invalidcurrenttimesplitting = $model->invalid_timesplitting_selected();
$potentialtimesplittings = $model->get_potential_timesplittings();
@@ -183,7 +183,7 @@ switch ($action) {
break;
case 'evaluate':
confirm_sesskey();
require_sesskey();
if ($model->is_static()) {
throw new moodle_exception('errornostaticevaluate', 'tool_analytics');
@@ -226,7 +226,7 @@ switch ($action) {
break;
case 'scheduledanalysis':
confirm_sesskey();
require_sesskey();
if ($onlycli) {
throw new moodle_exception('erroronlycli', 'tool_analytics');
@@ -292,7 +292,7 @@ switch ($action) {
break;
case 'clear':
confirm_sesskey();
require_sesskey();
$model->clear();
redirect($returnurl);
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_analytics'; // Full name of the plugin (used for diagnostics).
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->component = 'tool_availabilityconditions';
+5 -1
View File
@@ -25,6 +25,10 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_behat;
use behat_config_util;
defined('MOODLE_INTERNAL') || die();
global $CFG;
@@ -39,7 +43,7 @@ require_once($CFG->libdir . '/behat/classes/behat_config_manager.php');
* @copyright 2016 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_behat_manager_util_testcase extends advanced_testcase {
class manager_util_test extends \advanced_testcase {
/** @var array Fixtures features which are available. */
private $featurepaths = array(
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -25,5 +25,5 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'tool_brickfield';
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics).
+3
View File
@@ -48,5 +48,8 @@ function xmldb_tool_cohortroles_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_cohortroles'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -21,6 +21,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_componentlibrary';
+3
View File
@@ -33,5 +33,8 @@ function xmldb_tool_customlang_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
@@ -45,6 +45,7 @@ class hook_callbacks {
$hook->add_html(
html_writer::div(
html_writer::link($url, get_string('dataretentionsummary', 'tool_dataprivacy')),
'tool_dataprivacy',
),
);
}
+3
View File
@@ -103,5 +103,8 @@ function xmldb_tool_dataprivacy_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die;
$plugin->version = 2023100901;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->component = 'tool_dataprivacy';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_dbtransfer'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->component = 'tool_filetypes';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->component = 'tool_generator';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_httpsreplace'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_innodb'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'tool_installaddon';
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_langimport'; // Full name of the plugin (used for diagnostics)
@@ -77,7 +77,7 @@ class edit_license extends moodleform {
$mform = $this->_form;
$mform->addElement('text', 'shortname', get_string('shortname', 'tool_licensemanager'));
$mform->setType('shortname', PARAM_ALPHANUMEXT);
$mform->setType('shortname', PARAM_NOTAGS);
// Shortname is only editable when user is creating a license.
if ($this->action != manager::ACTION_CREATE) {
$mform->freeze('shortname');
+1 -1
View File
@@ -29,7 +29,7 @@ require_once($CFG->libdir . '/licenselib.php');
require_admin();
$action = optional_param('action', '', PARAM_ALPHANUMEXT);
$license = optional_param('license', '', PARAM_SAFEDIR);
$license = optional_param('license', '', PARAM_NOTAGS);
// Route via the manager.
$licensemanager = new \tool_licensemanager\manager();
+2 -2
View File
@@ -24,8 +24,8 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900;
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200;
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_licensemanager';
$plugin->maturity = MATURITY_STABLE;
+3
View File
@@ -38,5 +38,8 @@ function xmldb_tool_log_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -32,5 +32,8 @@ function xmldb_logstore_database_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'logstore_database'; // Full name of the plugin (used for diagnostics).
@@ -32,5 +32,8 @@ function xmldb_logstore_standard_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'logstore_standard'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_log'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_lp'; // Full name of the plugin (used for diagnostics).
+3 -3
View File
@@ -25,8 +25,8 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_lpimportcsv'; // Full name of the plugin (used for diagnostics).
$plugin->dependencies = ['tool_lp' => 2023100400];
$plugin->dependencies = ['tool_lp' => 2024041600];
+2 -2
View File
@@ -24,8 +24,8 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_lpmigrate'; // Full name of the plugin (used for diagnostics).
$plugin->dependencies = [
'tool_lp' => ANY_VERSION,
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->component = 'tool_messageinbound';
+13
View File
@@ -42,7 +42,20 @@ $PAGE->set_title($pagetitle);
// Logout if it was requested.
$logout = optional_param('logout', false, PARAM_BOOL);
$sesskey = optional_param('sesskey', '_none_', PARAM_RAW);
if ($logout) {
if (!confirm_sesskey($sesskey)) {
echo $OUTPUT->header();
echo $OUTPUT->confirm(
get_string('logoutconfirm'),
new moodle_url($PAGE->url, ['logout' => 1, 'sesskey' => sesskey()]),
new moodle_url('/'),
);
echo $OUTPUT->footer();
die;
}
if (!empty($SESSION->wantsurl)) {
// If we have the wantsurl, we should redirect there, to keep it intact.
$wantsurl = $SESSION->wantsurl;
@@ -16,7 +16,6 @@
namespace tool_mfa\hook;
use core\hook\described_hook;
use core\hook\stoppable_trait;
/**
@@ -26,26 +25,10 @@ use core\hook\stoppable_trait;
* @copyright 2024 Juan Leyva
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
#[\core\attribute\label('Allow plugins to callback as soon possible after user has passed MFA.')]
#[\core\attribute\tags('user', 'login')]
class after_user_passed_mfa implements
described_hook,
\Psr\EventDispatcher\StoppableEventInterface {
\Psr\EventDispatcher\StoppableEventInterface
{
use stoppable_trait;
/**
* Describes the hook purpose.
*
* @return string
*/
public static function get_hook_description(): string {
return 'Allow plugins to callback as soon possible after user has passed MFA.';
}
/**
* List of tags that describe this hook.
*
* @return string[]
*/
public static function get_hook_tags(): array {
return ['login'];
}
}
@@ -76,10 +76,11 @@ class verification_field extends \MoodleQuickForm_text {
return parent::__construct($elementname, $elementlabel, $attributes);
}
// @codingStandardsIgnoreStart
/**
* Returns HTML for this form element.
*
* phpcs:disable moodle.NamingConventions.ValidFunctionName.LowercaseMethod
*
* @return string
*/
public function toHtml(): string {
@@ -101,7 +102,6 @@ class verification_field extends \MoodleQuickForm_text {
}
return $result;
}
// @codingStandardsIgnoreEnd
/**
* Setup and return the script for autosubmission while inside the secure layout.
+1 -3
View File
@@ -349,12 +349,10 @@ class manager {
try {
// Clear locked user factors, they may now reauth with anything.
@$DB->set_field('tool_mfa', 'lockcounter', 0, ['userid' => $USER->id]);
// @codingStandardsIgnoreStart
// phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
} catch (\Exception $e) {
// This occurs when upgrade.php hasn't been run. Nothing to do here.
// Coding standards ignored, they break on empty catches.
}
// @codingStandardsIgnoreEnd
// Fire post pass state factor actions.
$factors = factor::get_active_user_factor_types();
@@ -723,6 +723,7 @@ class renderer extends \plugin_renderer_base {
'hasadditionalfactors' => $hasadditionalfactors,
'additionalfactors' => $alladitionalfactors,
'authurl' => $authurl->out(),
'sesskey' => sesskey(),
'supportlink' => $this->get_support_link(),
'disablefactor' => $disablefactor
];
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_admin'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
@@ -48,5 +48,8 @@ function xmldb_factor_auth_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_auth'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_capability'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_cohort'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+3 -2
View File
@@ -22,13 +22,14 @@
* @copyright Catalyst IT
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// Ignore coding standards for login check, this page does not require login.
// @codingStandardsIgnoreStart
// phpcs:disable moodle.Files.RequireLogin.Missing
require_once(__DIR__ . '/../../../../../config.php');
$instanceid = required_param('instance', PARAM_INT);
$pass = optional_param('pass', '0', PARAM_INT);
$secret = optional_param('secret', 0, PARAM_INT);
// @codingStandardsIgnoreEnds
$context = context_system::instance();
$PAGE->set_context($context);
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_email'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_grace'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_iprange'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_nosetup'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_role'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
@@ -63,7 +63,7 @@ $string['settings:countrycode_help'] = 'The calling code without the leading + a
See this link for a list of calling codes: {$a}';
$string['settings:duration'] = 'Validity duration';
$string['settings:duration_help'] = 'The period of time that the code is valid.';
$string['settings:gateway'] = 'SMS Gateway';
$string['settings:gateway'] = 'SMS gateway';
$string['settings:gateway_help'] = 'The SMS provider you wish to send messages via';
$string['setupfactor'] = 'Set up SMS';
$string['setupfactorbutton'] = 'Set up';
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023121400; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023042400.00; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_sms'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_token'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_totp'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'factor_webauthn'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+1 -2
View File
@@ -31,8 +31,7 @@ require_once($CFG->libdir.'/tablelib.php');
require_login(null, false);
require_capability('moodle/site:config', context_system::instance());
global $_SERVER;
$returnurl = $_SERVER['HTTP_REFERER'];
$returnurl = get_local_referer(false);
$PAGE->set_url('/admin/tool/mfa/index.php');
@@ -83,6 +83,7 @@
<div class="d-flex justify-content-center">
<form id="cancelmfa" method="POST" action="{{{authurl}}}">
<input type="hidden" id="{{uniqid}}-logout" name="logout" value="true">
<input type="hidden" name="sesskey" value="{{sesskey}}">
<input type="submit" class="btn btn-secondary"
name="cancelmfa" id="cancelmfa_button"
value="{{#str}} cancellogin, tool_mfa {{/str}}">
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2024030402; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_mfa'; // Full name of the plugin (used for diagnostics).
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -462,13 +462,13 @@ class api {
public static function get_qrlogin_key(stdClass $mobilesettings) {
global $USER;
// Delete previous keys.
delete_user_key('tool_mobile', $USER->id);
delete_user_key('tool_mobile/qrlogin', $USER->id);
// Create a new key.
$iprestriction = !empty($mobilesettings->qrsameipcheck) ? getremoteaddr(null) : null;
$qrkeyttl = !empty($mobilesettings->qrkeyttl) ? $mobilesettings->qrkeyttl : self::LOGIN_QR_KEY_TTL;
$validuntil = time() + $qrkeyttl;
return create_user_key('tool_mobile', $USER->id, null, $iprestriction, $validuntil);
return create_user_key('tool_mobile/qrlogin', $USER->id, null, $iprestriction, $validuntil);
}
/**
+2 -2
View File
@@ -648,8 +648,8 @@ class external extends external_api {
api::check_autologin_prerequisites($params['userid']); // Checks https, avoid site admins using this...
// Validate and delete the key.
$key = validate_user_key($params['qrloginkey'], 'tool_mobile', null);
delete_user_key('tool_mobile', $params['userid']);
$key = validate_user_key($params['qrloginkey'], 'tool_mobile/qrlogin', null);
delete_user_key('tool_mobile/qrlogin', $params['userid']);
// Double check key belong to user.
if ($key->userid != $params['userid']) {
@@ -16,6 +16,7 @@
namespace tool_mobile;
use core\session\utility\cookie_helper;
use html_writer;
/**
@@ -78,4 +79,31 @@ class hook_callbacks {
html_writer::link($url, get_string('getmoodleonyourmobile', 'tool_mobile'), ['class' => 'mobilelink']),
);
}
/**
* Callback to recover $SESSION->wantsurl.
*
* @param \core_user\hook\after_login_completed $hook
*/
public static function after_login_completed(
\core_user\hook\after_login_completed $hook,
): void {
global $SESSION, $CFG;
// Check if the user is doing a mobile app launch, if that's the case, ensure $SESSION->wantsurl is correctly set.
if (!NO_MOODLE_COOKIES && !empty($_COOKIE['tool_mobile_launch'])) {
if (empty($SESSION->wantsurl) || strpos($SESSION->wantsurl, '/tool/mobile/launch.php') === false) {
$params = json_decode($_COOKIE['tool_mobile_launch'], true);
$SESSION->wantsurl = (new \moodle_url("/$CFG->admin/tool/mobile/launch.php", $params))->out(false);
}
}
// Set Partitioned and Secure attributes to the MoodleSession cookie if the user is using the Moodle app.
if (\core_useragent::is_moodle_app()) {
cookie_helper::add_attributes_to_cookie_response_header(
'MoodleSession' . $CFG->sessioncookie,
['Secure', 'Partitioned'],
);
}
}
}
@@ -1,49 +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 tool_mobile\local\hooks\user;
use core\session\utility\cookie_helper;
/**
* Handles mobile app launches when a third-party auth plugin did not properly set $SESSION->wantsurl.
*
* @package tool_mobile
* @copyright 2024 Juan Leyva
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class after_complete_login {
/**
* Callback to recover $SESSION->wantsurl.
*
* @param \core\hook\user\after_complete_login $hook
*/
public static function callback(\core\hook\user\after_complete_login $hook): void {
global $SESSION, $CFG;
// Check if the user is doing a mobile app launch, if that's the case, ensure $SESSION->wantsurl is correctly set.
if (!NO_MOODLE_COOKIES && !empty($_COOKIE['tool_mobile_launch'])) {
if (empty($SESSION->wantsurl) || strpos($SESSION->wantsurl, '/tool/mobile/launch.php') === false) {
$params = json_decode($_COOKIE['tool_mobile_launch'], true);
$SESSION->wantsurl = (new \moodle_url("/$CFG->admin/tool/mobile/launch.php", $params))->out(false);
}
}
// Set Partitioned and Secure attributes to the MoodleSession cookie if the user is using the Moodle app.
if (\core_useragent::is_moodle_app()) {
cookie_helper::add_attributes_to_cookie_response_header('MoodleSession'.$CFG->sessioncookie, ['Secure', 'Partitioned']);
}
}
}
@@ -66,7 +66,7 @@ class provider implements
FROM {user_private_key} k
JOIN {user} u ON k.userid = u.id
JOIN {context} ctx ON ctx.instanceid = u.id AND ctx.contextlevel = :contextlevel
WHERE k.userid = :userid AND k.script = 'tool_mobile'";
WHERE k.userid = :userid AND (k.script = 'tool_mobile' OR k.script = 'tool_mobile/qrlogin')";
$params = ['userid' => $userid, 'contextlevel' => CONTEXT_USER];
$contextlist = new contextlist();
$contextlist->add_from_sql($sql, $params);
@@ -88,6 +88,7 @@ class provider implements
// Add users based on userkey.
\core_userkey\privacy\provider::get_user_contexts_with_script($userlist, $context, 'tool_mobile');
\core_userkey\privacy\provider::get_user_contexts_with_script($userlist, $context, 'tool_mobile/qrlogin');
}
/**
@@ -108,6 +109,7 @@ class provider implements
}
// Export associated userkeys.
\core_userkey\privacy\provider::export_userkeys($context, [], 'tool_mobile');
\core_userkey\privacy\provider::export_userkeys($context, [], 'tool_mobile/qrlogin');
}
/**
* Export all user preferences for the plugin.
@@ -138,6 +140,7 @@ class provider implements
$userid = $context->instanceid;
// Delete all the userkeys.
\core_userkey\privacy\provider::delete_userkeys('tool_mobile', $userid);
\core_userkey\privacy\provider::delete_userkeys('tool_mobile/qrlogin', $userid);
}
/**
* Delete all user data for the specified user, in the specified contexts.
@@ -158,6 +161,7 @@ class provider implements
$userid = $context->instanceid;
// Delete all the userkeys.
\core_userkey\privacy\provider::delete_userkeys('tool_mobile', $userid);
\core_userkey\privacy\provider::delete_userkeys('tool_mobile/qrlogin', $userid);
}
/**
@@ -178,5 +182,6 @@ class provider implements
// Delete all the userkeys.
\core_userkey\privacy\provider::delete_userkeys('tool_mobile', $userid);
\core_userkey\privacy\provider::delete_userkeys('tool_mobile/qrlogin', $userid);
}
}
+2 -2
View File
@@ -35,8 +35,8 @@ $callbacks = [
'priority' => 0,
],
[
'hook' => core\hook\user\after_complete_login::class,
'callback' => 'tool_mobile\local\hooks\user\after_complete_login::callback',
'hook' => \core_user\hook\after_login_completed::class,
'callback' => [\tool_mobile\hook_callbacks::class, 'after_login_completed'],
'priority' => 500,
],
[
+3
View File
@@ -38,5 +38,8 @@ function xmldb_tool_mobile_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+8
View File
@@ -75,6 +75,14 @@ if (empty($SESSION->justloggedin) &&
throw new moodle_exception('pluginnotenabledorconfigured', 'tool_mobile');
}
// If the user is using the inapp (embedded) browser, we need to set the Secure and Partitioned attributes to the session cookie.
if (\core_useragent::is_moodle_app()) {
\core\session\utility\cookie_helper::add_attributes_to_cookie_response_header(
"MoodleSession{$CFG->sessioncookie}",
['Secure', 'Partitioned'],
);
}
require_login(0, false);
// Require an active user: not guest, not suspended.
@@ -87,7 +87,8 @@ class provider_test extends \core_privacy\tests\provider_testcase {
$context1 = \context_user::instance($user1->id);
$context2 = \context_user::instance($user2->id);
$key1 = get_user_key('tool_mobile', $user1->id);
$key2 = get_user_key('tool_mobile', $user2->id);
$key2 = get_user_key('tool_mobile/qrlogin', $user1->id);
$key3 = get_user_key('tool_mobile', $user2->id);
// Ensure only user1 is found in context1.
$userlist = new \core_privacy\local\request\userlist($context1, $component);
@@ -175,12 +176,15 @@ class provider_test extends \core_privacy\tests\provider_testcase {
$context1 = \context_user::instance($user1->id);
$context2 = \context_user::instance($user2->id);
$keyvalue1 = get_user_key('tool_mobile', $user1->id);
$keyvalue2 = get_user_key('tool_mobile', $user2->id);
$keyvalue2 = get_user_key('tool_mobile/qrlogin', $user1->id);
$keyvalue3 = get_user_key('tool_mobile', $user2->id);
$key1 = $DB->get_record('user_private_key', ['value' => $keyvalue1]);
// Before deletion, we should have 2 user_private_keys.
// Before deletion, we should have 2 user_private_keys for tool_mobile and one for tool_mobile/qrlogin.
$count = $DB->count_records('user_private_key', ['script' => 'tool_mobile']);
$this->assertEquals(2, $count);
$count = $DB->count_records('user_private_key', ['script' => 'tool_mobile/qrlogin']);
$this->assertEquals(1, $count);
// Ensure deleting wrong user in the user context does nothing.
$approveduserids = [$user2->id];
@@ -198,6 +202,8 @@ class provider_test extends \core_privacy\tests\provider_testcase {
// Ensure only user1's data is deleted, user2's remains.
$count = $DB->count_records('user_private_key', ['script' => 'tool_mobile']);
$this->assertEquals(1, $count);
$count = $DB->count_records('user_private_key', ['script' => 'tool_mobile/qrlogin']);
$this->assertEquals(0, $count);
$params = ['script' => $component];
$userid = $DB->get_field_select('user_private_key', 'userid', 'script = :script', $params);
+3 -3
View File
@@ -23,9 +23,9 @@
*/
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2024022600; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_mobile'; // Full name of the plugin (used for diagnostics).
$plugin->dependencies = [
'webservice_rest' => 2023100400,
'webservice_rest' => 2024041600,
];
+3
View File
@@ -38,5 +38,8 @@ function xmldb_tool_monitor_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -2
View File
@@ -26,6 +26,6 @@
defined('MOODLE_INTERNAL') || die;
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_monitor'; // Full name of the plugin (used for diagnostics).
+3
View File
@@ -38,5 +38,8 @@ function xmldb_tool_moodlenet_upgrade(int $oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -1
View File
@@ -63,7 +63,7 @@ if ($cancel) {
}
redirect($url);
} else if ($continue) {
confirm_sesskey();
require_sesskey();
// Handle backups.
if (strtolower($importinfo->get_resource()->get_extension()) == 'mbz') {
+1 -1
View File
@@ -81,7 +81,7 @@ switch ($config->type) {
}
if ($import && $module) {
confirm_sesskey();
require_sesskey();
$handlerinfo = $handlerregistry->get_resource_handler_for_mod_and_strategy($importinfo->get_resource(), $module, $strategy);
if (is_null($handlerinfo)) {
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'tool_moodlenet';
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->maturity = MATURITY_ALPHA;
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_multilangupgrade'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_oauth2'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_phpunit'; // Full name of the plugin (used for diagnostics)
+3 -1
View File
@@ -1034,7 +1034,9 @@ class api {
}
}
if ($user->policyagreed != $allresponded) {
// MDL-80973: At this point, the policyagreed value in DB could be 0 but $user->policyagreed could be 1 (as it was copied from $USER).
// So we need to ensure that the value in DB is set true if all policies were responded.
if ($user->policyagreed != $allresponded || $allresponded) {
$user->policyagreed = $allresponded;
$DB->set_field('user', 'policyagreed', $allresponded, ['id' => $user->id]);
}
+3
View File
@@ -39,5 +39,8 @@ function xmldb_tool_policy_upgrade($oldversion) {
// Automatically generated Moodle v4.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+7 -1
View File
@@ -579,7 +579,7 @@ class api_test extends \advanced_testcase {
* Test that accepting policy updates 'policyagreed'
*/
public function test_accept_policies() {
global $DB;
global $DB, $USER;
$this->resetAfterTest();
$this->setAdminUser();
@@ -623,6 +623,12 @@ class api_test extends \advanced_testcase {
api::accept_policies([$policy3->id]);
$this->assertEquals(1, $DB->get_field('user', 'policyagreed', ['id' => $user2->id]));
// Ensure policies are always accepted when all are responded regardless the $USER->policyagreed value.
$USER->policyagreed = 1;
$DB->set_field('user', 'policyagreed', 0, ['id' => $user2->id]);
api::accept_policies([$policy3->id]);
$this->assertEquals(1, $DB->get_field('user', 'policyagreed', ['id' => $user2->id]));
}
/**
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2024022000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_policy'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_profiling'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_recyclebin'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2023100400; // Requires this Moodle version.
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'tool_replace'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2023100900;
$plugin->requires = 2023100400;
$plugin->version = 2024042200;
$plugin->requires = 2024041600;
$plugin->component = 'tool_spamcleaner'; // Full name of the plugin (used for diagnostics)

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