Compare commits

...

1325 Commits

Author SHA1 Message Date
Ilya Tregubov 76fe404dd5 Moodle release 4.1.4 2023-06-10 14:08:05 +08:00
Ilya Tregubov f3400f4fc5 weekly release 4.1.3+ 2023-06-09 13:14:27 +08:00
Sara Arjona c872490dcf Merge branch 'MDL-78415-401-enfix' of https://github.com/vmdef/moodle into MOODLE_401_STABLE 2023-06-08 20:33:14 +02:00
Helen Foster e518de15f3 MDL-78415 lang: Import fixed English strings (en_fix) 2023-06-08 12:02:34 +01:00
Sara Arjona 4fffa81e41 Merge branch 'MDL-77946-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-08 06:56:56 +02:00
Sara Arjona fcd946c862 Merge branch 'MDL-78308-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-08 06:48:40 +02:00
Andrew Nicols b272406c74 Merge branch 'MDL-75696_401_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_401_STABLE 2023-06-08 12:31:16 +08:00
Andrew Nicols d0e0225a1a Merge branch 'MDL-78364-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-08 12:19:31 +08:00
Andrew Nicols 2649d1a01e Merge branch 'MDL-78008_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-06-08 12:10:42 +08:00
Andrew Nicols aa77a76c7a Merge branch 'MDL-77933-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-06-08 12:03:37 +08:00
Andrew Nicols 1b27cfd795 MDL-76838 core: Add unit test for invalid unicode sequences 2023-06-08 11:59:23 +08:00
Jake Dallimore da10ccd8d4 MDL-77933 enrol_lti: return site name and logo during registration
Instead of the Moodle icon and the 'moodle' lang string, return the
site fullname and compact logo during dynamic registration.
2023-06-08 11:56:31 +08:00
Andrew Nicols cc7ea9fecd Merge branch 'MDL-76838-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-08 11:54:42 +08:00
Jun Pataleta 2cf0da5dc6 Merge branch 'MDL-75898-41' of https://github.com/matthewhilton/moodle into MOODLE_401_STABLE 2023-06-08 11:43:06 +08:00
Andrew Nicols a6fde372ab Merge branch 'MDL-78026-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-08 11:36:54 +08:00
Andrew Nicols 7dc747ea99 Merge branch 'MDL-77264-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-08 11:32:46 +08:00
Andrew Nicols 5a8881ac37 Merge branch 'MDL-76821-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-06-08 11:30:09 +08:00
Andrew Nicols b4eb274d7a Merge branch 'MDL-77799-m401' of https://github.com/sammarshallou/moodle into MOODLE_401_STABLE 2023-06-08 11:21:35 +08:00
Andrew Nicols 21443080c8 Merge branch 'MDL-78408-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-06-08 11:05:34 +08:00
Jun Pataleta ea1a8336e5 Merge branch 'MDL-78036_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-06-08 11:03:24 +08:00
Andrew Nicols f68fedcf77 Merge branch 'wip_MDL-78400_m41' of https://github.com/gjb2048/moodle into MOODLE_401_STABLE 2023-06-08 10:51:50 +08:00
Andrew Nicols cf3ae5bc2a Merge branch 'MDL-76406-401' of https://github.com/safatshahin/moodle into MOODLE_401_STABLE 2023-06-08 10:38:58 +08:00
Jun Pataleta c8bb7a6911 Merge branch 'MDL-76842-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-06-08 10:34:17 +08:00
Jun Pataleta bf448de7aa Merge branch 'MDL-78229-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-06-08 10:30:23 +08:00
Jake Dallimore cbacf8ee58 MDL-76842 enrol_lti: fix user record updates in user_repository
Only call user_update_user when the relevant user data has changed,
preventing unnecessary user_updated events. This also removes the
line setting timemodified on the user since user_update_user already
handles this.
2023-06-08 10:29:01 +08:00
Jun Pataleta 37a29f7950 Merge branch 'MDL-78431-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-06-08 10:28:18 +08:00
Jake Dallimore b1dcb08e3f MDL-76842 enrol_lti: test confirming the erroneous user_updated events
This test will fail until the fix - only updating users when data has
changed - is put in place in the following commit.
2023-06-08 09:40:29 +08:00
Jake Dallimore 0ccf800f01 MDL-76842 auth_lti: don't update the user unless data has changed
When receiving data from the LTI launch, or service call, only update
the user record when we know something has changed. This prevents the
creation of many \core\event\user_updated events.
2023-06-08 09:40:28 +08:00
Jake Dallimore b097d38fb3 MDL-76842 auth_lti: don't update the user after membership creation
This isn't required and generates excess events. The only thing update
does, other than update the user fields, is to update the picture, but
in this case, that's unset in membership-based auths anyway, so it's
entirely safe to remove this.
2023-06-08 09:39:09 +08:00
Jake Dallimore 1858e29d23 MDL-76842 auth_lti: test confirming the erroneous user_updated events
This test will fail until the fix - only updating users when data has
changed - is put in place in the following commit.
2023-06-08 09:39:09 +08:00
Stevani Andolo bd5329b1a5 MDL-78215 core: Added support unit test 2023-06-08 09:37:02 +08:00
Stevani Andolo 69596a6bb2 MDL-78215 core: support checking if 0.0.0.0 is in subnet 2023-06-08 09:37:01 +08:00
Jun Pataleta 79510d5d73 Merge branch 'MDL-78378-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-06-07 23:25:19 +08:00
Jun Pataleta fce2d2f407 Merge branch 'MDL-78368-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-06-07 23:22:25 +08:00
Jun Pataleta 3b8e3ba59e Merge branch 'MDL-76745_401_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_401_STABLE 2023-06-07 22:53:45 +08:00
Andrew Nicols 2279eee0ab MDL-78431 core: Abort after config for source maps 2023-06-07 21:07:52 +08:00
Sara Arjona 411f43dc5a Merge branch 'MDL-78322-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-07 12:43:08 +02:00
Sara Arjona ef2a553bd4 Merge branch 'MDL-78352-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-07 12:41:16 +02:00
Sara Arjona af1bd51b99 Merge branch 'MDL-78047-401' of https://github.com/stevandoMoodle/moodle into MOODLE_401_STABLE 2023-06-07 18:17:40 +08:00
Sara Arjona b89ece2484 Merge branch 'MDL-78010-401' of https://github.com/ferranrecio/moodle into MOODLE_401_STABLE 2023-06-07 18:17:40 +08:00
sam marshall 0c3b3c9b92 MDL-77799 webservice_rest: unhandled exception should go in server log 2023-06-07 10:04:07 +01:00
Jake Dallimore 7fd423acfc MDL-78408 core: fix restoration of anchor to wantsurl during login 2023-06-07 14:30:37 +08:00
Stevani Andolo abac304ba9 MDL-78047 core_courseformat: Wrapping added to text and media activity 2023-06-07 12:58:38 +08:00
Paul Holden 677b67ac05 MDL-77193 mnet: correct sorting of access control table. 2023-06-07 09:53:44 +08:00
Ferran Recio 5f30a47660 MDL-78010 mod_label: improve upgrade performance 2023-06-06 21:33:14 +02:00
Eloy Lafuente (stronk7) 7abeaf37ea MDL-78036 behat: Move all links from old docs to new counterparts 2023-06-06 12:39:21 +02:00
Petr Skoda 79981290d9 MDL-76683 core_group: fix template 2023-06-06 09:30:27 +00:00
Sara Arjona e96dab8594 Merge branch 'MDL-76936-401' of https://github.com/HirotoKagotani/moodle into MOODLE_401_STABLE 2023-06-06 11:22:15 +02:00
Paul Holden 6843ba0aad MDL-78364 reportbuilder: earlier calculation of schedule recipients. 2023-06-05 16:22:33 +01:00
Gareth Barnard 257e2b414a MDL-78400 JavaScript: Building JS puts build files in src dir on Win. 2023-06-05 14:52:16 +01:00
Sara Arjona b17d91c6f8 MDL-78378 survey: Display default introduction when description is empty
This is a regression when the activity pages were redessigned in Moodle
4.0. The default introduction should be displayed when the activity
description is empty.
2023-06-02 08:19:49 +02:00
Safat 7debcb85b4 MDL-76406 core: Add environment check for versions not supporting 8.2 2023-06-02 12:09:15 +10:00
Ilya Tregubov 03b605f2eb weekly release 4.1.3+ 2023-06-02 09:55:42 +08:00
Ilya Tregubov de0bab848d Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-06-02 09:55:39 +08:00
Mark Johnson dfdf8ba7c9 MDL-76745 cache: Implement cache_loader_with_locking in cache_disabled
If a plugin attempts to do something that would lock coursemodinfo cache
during install (such as creating a course module), this currently fails
as check_lock_state is not implemented in cache_disabled. Adding the
cache_loader_with_locking interface ensures that all lock methods are
implemented.
2023-06-01 15:03:33 +01:00
Andrew Nicols f1f87dbd6b Merge branch 'MDL-77749-unset-config-duration-MOODLE_401_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_401_STABLE 2023-06-01 12:03:26 +08:00
Jun Pataleta 2885b47377 Merge branch 'MDL-78092-m401' of https://github.com/sammarshallou/moodle into MOODLE_401_STABLE 2023-06-01 11:36:21 +08:00
Andrew Nicols 036cb9a997 Merge branch 'MDL-78327_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-06-01 10:52:47 +08:00
Ilya Tregubov 732f27c770 Merge branch 'MDL-78196-401' of https://github.com/jleyva/moodle into MOODLE_401_STABLE 2023-06-01 10:40:36 +08:00
Andrew Nicols d6a8581abe Merge branch 'MDL-78262-401' of https://github.com/danghieu1407/moodle into MOODLE_401_STABLE 2023-06-01 09:57:03 +08:00
Ilya Tregubov d37efc5160 Merge branch 'MDL-77259-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-06-01 09:30:02 +08:00
Ilya Tregubov e0dc9aa297 Merge branch 'MDL-75961-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-06-01 09:08:28 +08:00
AMOS bot e939cee281 Automatically generated installer lang files 2023-06-01 00:11:03 +00:00
Sara Arjona 17be7f62d6 Merge branch 'MDL-76693-401' of https://github.com/roland04/moodle into MOODLE_401_STABLE 2023-05-31 17:09:03 +02:00
Simey Lameze b512186fce MDL-77547 behat: run recalculate task before checking values 2023-05-31 15:04:56 +02:00
Tim Hunt ee3752e639 MDL-78327 question stats: store same timestamp for all question stats 2023-05-31 12:03:56 +01:00
Sara Arjona e47c5527f6 Merge branch 'MDL-77547-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-05-31 12:51:34 +02:00
Sara Arjona 99a48299f0 Merge branch 'MDL-77907-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-05-31 12:18:12 +02:00
Sara Arjona 5a84debc90 Merge branch 'MDL-78148-401' of https://github.com/ferranrecio/moodle into MOODLE_401_STABLE 2023-05-31 11:42:16 +02:00
Sara Arjona 70e6fb0a7d Merge branch 'MDL-73648-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-31 11:38:21 +02:00
Ilya Tregubov 95ec4161f5 Merge branch 'MDL-73138-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-30 12:54:24 +08:00
Ilya Tregubov bd41a5bbec Merge branch 'MDL-77723-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-30 12:44:54 +08:00
AMOS bot f02891c647 Automatically generated installer lang files 2023-05-30 00:10:36 +00:00
Jun Pataleta 2d99010fc9 Merge branch 'MDL-78314-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-05-29 17:35:04 +08:00
Luca Bösch 23ba0d96ef MDL-78314 quiz: style button fieldset in "Manually grade question". 2023-05-29 10:54:27 +02:00
Mikel Martín 11205ec5ef MDL-76693 core_course: Fix activity chooser summary overlap
In activity chooser modal, there is an overlap issue in the information "sub-page".
Changing some classes in the layout solves the problem.
2023-05-29 09:38:28 +02:00
Ferran Recio b01dd76331 MDL-78148 core_courseformat: reduce the use of uniqid in templates 2023-05-29 08:40:18 +02:00
Eloy Lafuente (stronk7) 278ce49b7f MDL-78036 behat: Fix php81 deprecation warning 2023-05-26 18:04:26 +02:00
Dani Palou 4cbe98f2e7 MDL-78368 airnotifier: Fix data encrypted several times
Backport of MDL-78054.
2023-05-26 21:46:35 +08:00
Paul Holden a22aabb29f MDL-78352 webservice: use default user context page heading. 2023-05-26 12:27:46 +01:00
Paul Holden 1ff279717e MDL-73648 badges: add Behat generator class for creating badges. 2023-05-26 12:19:27 +01:00
Paul Holden 017f8a9c4d MDL-73138 group: remove double encoding of group/role names. 2023-05-26 10:25:50 +01:00
Paul Holden 16c5835a80 MDL-73138 user: avoid double encoding participant filter values. 2023-05-26 10:25:50 +01:00
Sara Arjona 090baf556e weekly release 4.1.3+ 2023-05-26 09:28:53 +02:00
Sara Arjona 0b46994b0c Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-05-26 09:28:45 +02:00
Adrien Loison a229905760 MDL-78262 lib_spout: Update box/spout to address PHP 8.1 deprecation 2023-05-26 08:50:17 +07:00
Jun Pataleta 1c7f1e0bed Merge branch 'MDL-78346-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-05-25 16:56:14 +02:00
Jun Pataleta 59596ddedc Merge branch 'MDL-76065-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-05-25 16:56:14 +02:00
Jun Pataleta 34dd7e7978 Merge branch 'MDL-78320-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-25 16:56:14 +02:00
Jun Pataleta e7d2f494c3 Merge branch 'MDL-78346-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-05-25 16:56:14 +02:00
Andrew Nicols 9c5febc47c MDL-78346 tool_langimport: Print any notifications before redirect 2023-05-25 14:55:01 +08:00
Andrew Nicols 4ddbcf2aec MDL-78346 tool_langimport: Redirect after action to prevent resubmission 2023-05-25 11:14:15 +08:00
Andrew Nicols 9dc72be2d4 MDL-78346 tool_langimport: Prevent uninstallation of invalid targets 2023-05-25 11:14:14 +08:00
Andrew Nicols 05a5ed676c Merge branch 'MDL-77995-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-25 09:50:47 +08:00
Paul Holden aaf17fc8b6 MDL-78320 quiz_overview: format group names in overview report. 2023-05-24 16:19:34 +01:00
Andrew Nicols b870bc0577 Merge branch 'MDL-77983-401' of https://github.com/rjnl/moodle into MOODLE_401_STABLE 2023-05-24 21:15:17 +08:00
Jun Pataleta 9e582a6099 Merge branch 'MDL-78072-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-05-24 17:56:27 +08:00
Jun Pataleta ff402c26e5 Merge branch 'MDL-78005-401' of https://github.com/davewoloszyn/moodle into MOODLE_401_STABLE 2023-05-24 12:06:17 +08:00
Simey Lameze b12f914708 MDL-75961 behat: review and enhance mod_imscp tests
This commit makes the following improvements to mod_imscp tests:
* Removes unnecessary @javascript and @_file_upload tags from non-JS tests.
* Removes user/enrol data generation from tests that can be performed as admin.
* Removes "I log out" and other unnecessary steps.
2023-05-24 10:41:41 +08:00
Angelia Dela Cruz e7d32b89ac MDL-75961 behat: IMSCP behat generators use UI
Replace steps that manually add IMSCP instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
2023-05-24 10:41:41 +08:00
Sara Arjona 22705fa4fb Merge branch 'MDL-78176_401' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_401_STABLE 2023-05-23 17:45:57 +02:00
Sara Arjona 7c0954ccd1 Merge branch 'MDL-78242-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-23 17:37:00 +02:00
Jun Pataleta 0479c711c2 Merge branch 'MDL-76688/401' of https://github.com/skodak/moodle into MOODLE_401_STABLE 2023-05-23 15:22:04 +08:00
Angelia Dela Cruz de6c14ee71 MDL-77547 Behat: Coverage to check for bad multichoice questions 2023-05-23 15:17:43 +08:00
Simey Lameze 1936b30c88 MDL-76065 behat: Review and enhance mod_lti Behat tests
In this commit, the following improvements were made to the mod_lti Behat tests:

* Replaced manual steps with data generators to set completion.
* Eliminated unnecessary user and course enrolments data generation as some tests can be performed as an admin.
* Removed the @javascript tag from non-JS tests.
* Updated the LTI data generator to generate an internal Moodle URL in the toolurl field, enabling the use of XML files.
2023-05-23 12:23:26 +08:00
Angelia Dela Cruz f19f31736a MDL-76065 behat: LTI behat generators use UI
Replace steps that manually add LTI instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
2023-05-23 12:15:25 +08:00
Andrew Nicols 2b01af17be Merge branch 'MDL-78170-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-23 10:28:33 +08:00
AMOS bot 439f75e6e1 Automatically generated installer lang files 2023-05-23 00:10:27 +00:00
Paul Holden dec3d56032 MDL-76838 backup: remove invalid utf8 code sequences writing XML.
The surrogate blocks FFFE and FFFF are non-characters, specifically
disallowed in the character range for XML documents.
2023-05-22 21:04:12 +01:00
Paul Holden 452c7c72e0 MDL-78322 tool_cohortroles: don't assign roles to deleted users. 2023-05-22 20:14:39 +01:00
Tim Hunt 0d0868ee97 MDL-78008 qtype_multianswer: random guess score with missing subqs
Sometimes, due to other bugs, subquestions can get lost, so the code
needs to be robust to this.
2023-05-22 17:02:22 +01:00
Sara Arjona c98e7e7dbf Merge branch 'MDL-78211-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-22 17:41:48 +02:00
Sara Arjona 90e18e28a2 Merge branch 'MDL-78226-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-22 17:29:27 +02:00
Sara Arjona db7c650f8c Merge branch 'MDL-78225-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-22 12:04:19 +02:00
sam marshall 79d0e63b18 MDL-78092 Cache: Modinfo locking with Redis store does not work
The feature added in 4.1 to lock the modinfo cache does not work when
using Redis, because:

* The API to acquire a cache lock is confusing, and the code did not
  check that it successfully acquired a lock before going on to build
  the cache anyway.

* Unlike the other types of cache lock, the Redis store did not retry
  the lock for a timeout period before giving up and failing.

This change fixes both points.
2023-05-22 10:45:13 +01:00
Jun Pataleta 962c8ef477 Merge branch 'MDL-78157-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-05-22 15:29:30 +08:00
Andrew Nicols 2036f2439e MDL-78157 js: Be more careful about inserting missing module names
It is perfectly legitimate to create and/or use a method named `define`
in JS outside of RequireJS.

Unfortunately our requirejs.php wrapper is dumb and does not understand
this.

In the long term we need to stop doing this at all. We really should be
able to already, but every time I try to something prevents it.

In the interim, this change adds a secondary check to see if there is an
existing define which _does_ have the right name in it already.
2023-05-22 14:40:41 +08:00
Luca Bösch 6bb4351e8b MDL-78229 quiz: quiz editing page less narrow.
This is a backport of MDL-77872.
2023-05-19 18:13:07 +02:00
Anupama Sarjoshi 80fa181a26 MDL-78176 Question: Fix D&D onto image and D&D markers theme issue 2023-05-19 16:28:53 +01:00
Jun Pataleta 6ca70dd59f weekly release 4.1.3+ 2023-05-19 21:13:57 +08:00
Jun Pataleta 712737e955 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-05-19 21:13:54 +08:00
Andrew Nicols 5e32d574c6 MDL-77733 behat: Remove extraneous no-axe option
There is no need for no-axe if we make axe a boolean value. We already
have automatic support for negated boolean flags.
2023-05-19 11:28:08 +08:00
Mark Johnson 5620e0059a MDL-75696 quiz: Fix restoring pre-4.0 quizzes with random questions
Restoring multiple quizzes from a pre-4.0 backup was broken when
the quizzes shared a random question. This is because after the
first quiz created a set reference in place of the random question,
it deleted the question record so it was not there for the second
quiz to use. This change tracks the IDs of random questions so
they can be deleted at the end.
2023-05-18 15:59:53 +01:00
Mark Johnson 85b1e992e9 MDL-75696 quiz: Set default value for includingsubcategories on restore 2023-05-18 15:56:02 +01:00
Mark Johnson 8d50911af5 MDL-75696 backup: Fix backup version checks
Several version checks were incorrectly using
restore_controller::info::moodle_release instead of moodle_version as a
version number. This replaces all of those checks with a common pair of
methods to make the checks clearer and more maintainable.
2023-05-18 15:56:02 +01:00
Paul Holden 5c871bff29 MDL-78308 output: better parsing of custom menu item configuration.
Previously certain values would cause deprecation notices in PHP8.1.
2023-05-18 10:19:18 +01:00
Jun Pataleta 096f1e67c8 Merge branch 'MDL-78116-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-05-18 12:11:31 +08:00
Andrew Nicols 21cc09fa2d Merge branch 'MDL-77451-401' of https://github.com/rezaies/moodle into MOODLE_401_STABLE 2023-05-18 11:56:33 +08:00
Jun Pataleta e2a7a44d3e Merge branch 'MDL-78135-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-18 11:54:46 +08:00
Andrew Nicols b28a28ef0f Merge branch 'MDL-78260_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-05-18 11:51:47 +08:00
Andrew Nicols 30e9810589 Merge branch 'MDL-78151-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-18 11:48:39 +08:00
Andrew Nicols cf83791269 Merge branch 'MDL-77733-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-05-18 11:44:18 +08:00
David Woloszyn 3f07fc246f MDL-78005 editor_tiny: Declared vars to supress error logging 2023-05-18 13:03:04 +10:00
Tim Hunt 3d023db5b0 MDL-78260 quiz stats: fix View details for random questions 2023-05-17 09:04:49 +01:00
Rajneel Totaram 13b48a0ae8 MDL-77983 core_user: Avoid passing nulls to base64_decode 2023-05-17 19:39:52 +12:00
Ilya Tregubov 87223abc7a Merge branch 'MDL-78152-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-17 15:07:38 +08:00
AMOS bot e7458d017a Automatically generated installer lang files 2023-05-17 00:10:58 +00:00
Jun Pataleta d2b81dd116 Merge branch 'MDL-77439-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-05-16 20:39:09 +08:00
Peter Mayer 361f0fa524 MDL-77439 lib_filebrowser: Splitup query to speedup get_courses 2023-05-16 20:37:57 +08:00
Paul Holden 7a23da59ce MDL-78026 group: format retrieved group names from external methods. 2023-05-16 10:10:06 +01:00
Paul Holden 01ae473823 MDL-77264 grade: define fallback name of abstract export event. 2023-05-16 09:54:40 +01:00
Paul Holden 0aff5ccd01 MDL-77259 tool_monitor: use core component API for event list.
The previous method of hardcoded filepaths, specifically for events
belonging to core, meant that any events belongs to core subsystems
were omitted (core_customfield, core_h5p, core_payment, etc).
2023-05-16 09:50:22 +01:00
Angelia Dela Cruz 7a511874b8 MDL-77907 Behat: Coverage for duplicating competency framework 2023-05-16 16:11:58 +08:00
Andrew Nicols a1b37845a8 MDL-78072 core: Skip mobile encryption if Sodium is not available 2023-05-16 12:51:14 +08:00
Jake Dallimore 071adb2fb1 Merge branch 'MDL-77930-401' of https://github.com/rjnl/moodle into MOODLE_401_STABLE 2023-05-16 10:50:04 +08:00
Jake Dallimore aa39ebbb99 Merge branch 'MDL-78120-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-05-16 10:45:27 +08:00
Jun Pataleta 4818dae2fc Merge branch 'MDL-75576_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-05-16 09:59:01 +08:00
Ilya Tregubov dc38a92ec6 Merge branch 'MDL-77840-401' of https://github.com/davewoloszyn/moodle into MOODLE_401_STABLE 2023-05-16 09:47:48 +08:00
Andrew Nicols 946405d44b Merge branch 'MDL-77432-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-05-15 22:12:44 +08:00
Andrew Nicols bdeda3ea9b Merge branch 'MDL-78149-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-15 22:07:13 +08:00
Andrew Nicols 01c04f4cf8 Merge branch 'MDL-78140-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-15 22:03:30 +08:00
Paul Holden 9ef8025e4c MDL-78242 roles: consistently check course contact config. 2023-05-15 13:04:48 +01:00
Tim Hunt efe895f1bb MDL-75576 quiz/question statistics: don't expire by time
Previously, a set of calculated quiz statistics would only 'last' for
15 minutes. Then they would be considered invalid and not used.

Now, computed statistics are kept indefinitely. Instead, when a new
batch of values are computed for a particular set of settings, older numbers
for the same settings are deleted first. Therefore,
question_stats_cleanup_task is no more.
2023-05-15 10:04:34 +01:00
Tim Hunt a532f407bb MDL-75576 quiz statistics: don't time-limit the use of cached values
This should have been done as part of  MDL-74762, but was missed.
2023-05-15 10:04:33 +01:00
Tim Hunt 86932a330b MDL-75576 quiz statistics: don't compute when a user views the qbank
Previously, when users viewed the question bank, if the quiz statistics
had not already been calculated, we would try to compute them there an then.
This could be very, very slow, leading to session lock problems.

Now, we never try to compute the statistics on the fly. Instead, we rely
on the existing \quiz_statistics\task\recalculate scheduled task to do it.
2023-05-15 10:04:33 +01:00
Tim Hunt db9a0e296a MDL-75576 question bank: bulk-load statistics for all questions at once
There is a new method on the column class, for the column to declare any
statistics it requires. The question then efficiently loads all those
statistics in one go, and makes them available as the columns are
rendererd, or do any subsequent processing.
2023-05-15 10:04:33 +01:00
Tim Hunt 9ff59e99ff MDL-75576 qbank_statistics: remove copy-pasted PHPdoc comments
These methods are already correctly documented on the base class.
2023-05-15 10:04:32 +01:00
Luca Bösch 997990f94f MDL-78120 login: handle empty wantsurl on login with alternateloginurl. 2023-05-15 10:19:00 +02:00
Paul Holden e5132eff2f MDL-77995 javascript: more precise path matching building JS. 2023-05-15 09:05:51 +01:00
Paul Holden 7093578baf MDL-77723 user: ensure identity refers to a valid custom profile field. 2023-05-15 09:03:40 +01:00
Jun Pataleta 28026b923a Merge branch 'MDL-76903-401' of https://github.com/laurentdavid/moodle into MOODLE_401_STABLE 2023-05-15 12:06:02 +08:00
Andrew Nicols 0e4426818a Merge branch 'MDL-78125-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-05-15 11:58:59 +08:00
Jun Pataleta e9f6b9c2d6 MDL-78125 qtype_multianswer: Convert popover trigger to link
According to Boostrap Popovers documentation for popovers triggered
on focus:
"For proper cross-browser and cross-platform behavior, you must use the
<a> tag, not the <button> tag, and you also must include a tabindex
attribute."
2023-05-12 22:47:11 +08:00
Luca Bösch f1dd604fce MDL-77432 mod_assign: Confirm submission page standard and not incourse 2023-05-12 09:44:22 +02:00
Ilya Tregubov 017a3274fe weekly release 4.1.3+ 2023-05-12 08:56:50 +08:00
Ilya Tregubov 3b9bfc1d79 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-05-12 08:56:48 +08:00
Cameron Ball 77eb2ed79b MDL-75898 assignfeedback_editpdf: Add randomness to PDF annotations
The behat step "I draw on the pdf" creates the exact same line every
time it is called. This can cause issues in a situation like the following:

- Student uploads PDF
- Teacher annotates page 1
- Student edits submission, adding another PDF
- Teacher annotates page 1 again
- When the student looks at their annotated PDF it appears the same as
  before they added the second PDF (i.e., they don't see extra pages for
  the second PDF)

Exactly why this happens isn't clear, and in practice this probably never
happens because the chances of drawing the exact same line twice are almost
0. However, when testing the functionality added in MDL-45580 it was causing
issues.
2023-05-12 09:14:03 +10:00
Cameron Ball 90350915c2 MDL-75898 assignfeedback_editpdf: Don't poll readonly pages
When requesting the readonly version of pages (which contain
teacher annotations), they should always be available - the
PHP side even throws an exception when they're not. This
means we don't need to worry about polling document converters
from the JS side and can just return the pages immediately.
2023-05-12 09:14:03 +10:00
Cameron Ball 825609ae08 MDL-75898 assignfeedback_editpdf: Improve page count mismatch logic
MDL-45580 introduced the readonlypages filearea, and when loading
page images for an attempt, the code would check if the pages existed
, creating them if not. The code inside this block also contained
a guard clause for the case where no readonly pages existed - which
is a situation that should not happen. Whenever readonly pages are
requested, they should exist.

MDL-66626 introduced a situation where page counts not matching would
also retrigger page generation. However this led to a situation where
the guard clause could be entered when requesting readonly pages.

This patch refactors the guard clause, and improves the logic to
regenerate pages.
2023-05-12 09:14:03 +10:00
Paul Holden 5b3d55def7 MDL-78226 contentbank: verify presence of bank heading element. 2023-05-11 23:16:33 +01:00
Paul Holden 67effa603e MDL-78225 output: add sesskey for post requests only in renderables. 2023-05-11 22:48:54 +01:00
Laurent David 20b4efad5c MDL-76903 mod_book: Fix activity completion
* Check only visibles pages to set completion status.
* Make sure we have consistent completion value in API and on the view page.
2023-05-11 12:09:24 +02:00
Paul Holden 11af0c5388 MDL-78140 analytics: improve context restrictions manager test.
This test apparently fails sporadically on Oracle, without obvious
causes. The failure however was hard to interpret, and the test
itself made a lot of assumptions about the system re. naming of
categories/courses. This could be prone to errors, so improve that.
2023-05-11 09:38:01 +01:00
Paul Holden 683840999d MDL-77946 access: fix category sort order of capability contexts. 2023-05-11 08:33:32 +01:00
Jun Pataleta f8537a9536 Merge branch 'MDL-76344-401-fix' of https://github.com/stevandoMoodle/moodle into MOODLE_401_STABLE 2023-05-11 14:35:30 +08:00
Stevani Andolo 7b1e0a6980 MDL-76344 course: Fixed course image 'non image file' layout 2023-05-11 14:11:16 +08:00
Jake Dallimore 838047106d Merge branch 'MDL-75552-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-05-11 11:23:49 +08:00
Sara Arjona 84175f399f Merge branch 'MDL-78040-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-10 19:45:18 +02:00
Paul Holden 9e0f8fc7bf MDL-78211 contentbank: fix context option when formatting categories. 2023-05-10 17:42:29 +01:00
Paul Holden c228866a46 MDL-78151 core: account for timezone differences in intl extension.
Recent additions to timezones from the IANA TZDB are not necessarily
reflected in those used by the intl extension and/or ICU zones:

 * America/Ciudad_Juarez
 * America/Nuuk
 * Europe/Kyiv
 * Pacific/Kanton

Create mapping to allow these zones to be used without errors.
2023-05-10 17:12:33 +01:00
Juan Leyva d82f68742b MDL-78196 user: Fix files used space check 2023-05-10 17:17:48 +02:00
Andrew Nicols da78523b15 Merge branch 'MDL-77592-401' of https://github.com/golenkovm/moodle into MOODLE_401_STABLE 2023-05-10 13:03:57 +08:00
Andrew Nicols 5ceb711355 Merge branch 'MDL-78034-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-10 13:00:30 +08:00
Ilya Tregubov 1d5ef6aa9a Merge branch 'MDL-75623-MOODLE_401_STABLE' of https://github.com/sh-csg/moodle into MOODLE_401_STABLE 2023-05-10 11:46:40 +08:00
Paul Holden d3b4e4a9a5 MDL-78170 rating: consistently calculate average rating aggregation.
Ensure it's always cast by the database as a float, to avoid loss of
precision.
2023-05-09 15:57:43 +01:00
Paul Holden d7ba3f656d MDL-78149 mod_data: ensure group selector is always present. 2023-05-09 12:20:35 +01:00
Paul Holden 48963bb7a7 MDL-78152 mod_book: set permissions required for page editing. 2023-05-09 12:11:32 +01:00
Shamim Rezaie f36c96411d MDL-77451 gradereport: stress handling for multiple clicks 2023-05-09 19:15:37 +10:00
Andrew Nicols 50d1e69df6 MDL-75552 badges: move apiBase consumption to backpack
The apiBase in .well-known/badgeconnect.json was ignored and it was
causing some failures when connecting or sending badges to an
external backpack.
For OBv2.1, it has been changed to always use the apiBase defined
in the badgeconnect.json backpack provider.
2023-05-09 08:51:30 +02:00
Rajneel Totaram f6c5fa3bfc MDL-77930 accesslib: php81 deprecation warnings on missing plugins 2023-05-09 17:37:00 +12:00
Juan Leyva d838917d28 MDL-78072 airnotifier: Apply payload size optimisation to all push
Backport of MDL-77893.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>
2023-05-09 13:07:10 +08:00
Juan Leyva 1af4ace4d6 MDL-78072 airnotifier: Allow configuring how to process encrypted notifs
Backport of MDL-77893.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>
2023-05-09 13:07:09 +08:00
Juan Leyva 5c85fb975d MDL-78072 airnotifier: Leave only message data processed by: Airnotifier
Backport of MDL-77893.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>
2023-05-09 13:07:09 +08:00
Juan Leyva 2ad6fecca5 MDL-78072 airnotifier: Allow to set publickey when creating new device
Backport of MDL-77893.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>
2023-05-09 13:07:09 +08:00
Sara Arjona 1201526dbc MDL-78072 core: Fix upgrade failures with MariaDB
Backport of MDL-76722.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>

The 'enable' field doesn't exist, and this is causing some failures
with MariaDB (and probably with MySQL too).
2023-05-09 12:26:00 +08:00
Alex Morris 6ccb50ea9d MDL-78072 message_airnotifier: Add encrypted notifications
Backport of MDL-76722.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>
2023-05-09 12:25:47 +08:00
Alex Morris 25498b6b62 MDL-78072 user: Add new update_user_device_public_key webservice
Backport of MDL-76722.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>
2023-05-09 12:25:29 +08:00
Alex Morris a2179f028c MDL-78072 lib/db: Add new publickey field to user_devices table
Backport of MDL-76722.

Co-authored by: Andrew Lyons <andrew@nicols.co.uk>
2023-05-09 12:25:16 +08:00
Petr Skoda a7920b3860 MDL-76688 filter_text: prevent LaTeX3 syntax 2023-05-08 10:12:46 +02:00
AMOS bot 893fe94c89 Automatically generated installer lang files 2023-05-07 00:07:26 +00:00
Paul Holden ba904934ec MDL-78135 completion: include required criteria library in test. 2023-05-05 16:45:48 +01:00
Jake Dallimore b3feea921d MDL-76821 enrol_lti: prevent legacy launches via upgraded enrolment
If the enrolment instance (the 'published resource') has been upgraded
from LTI 1.1/2.0 to LTI 1.3 (i.e. a new instance was not created),
prevent legacy launches which may occur from old resource links. Only
LTI Advantage launches should be permitted through the method.
2023-05-05 17:11:09 +08:00
Jake Dallimore 22c346831e MDL-76821 enrol_lti: fix bug in repo causing return of legacy lti users
If the enrolment method is updated from an LTI 1.1/2.0 tool to an LTI
1.3 tool, it may have associated enrol_lti_users records not having
ltideploymentid values. These are legacy users and must not be returned
by the repository, which deals only with LTI 1.3 LTI users.
2023-05-05 17:11:06 +08:00
Jun Pataleta 0703a8db55 Merge branch 'MDL-76344-401' of https://github.com/stevandoMoodle/moodle into MOODLE_401_STABLE 2023-05-05 10:34:56 +08:00
Sara Arjona 176a323b4e weekly release 4.1.3+ 2023-05-04 12:42:50 +02:00
Eloy Lafuente (stronk7) 42f3874b80 MDL-78116 core: Run tests against Windows on GHA
Signed-off-by: Andrew Nicols <andrew@nicols.co.uk>
2023-05-04 15:40:18 +08:00
Stevani Andolo 1f07219332 MDL-76344 course: Fixed course image 'non image file' layout 2023-05-04 10:28:15 +08:00
Paul Holden 0c7e7645d5 MDL-78040 block_glossary_random: switch to block test generator.
Random failures after manually adding block instances (specifically
on slow/Oracle systems) can be entirely avoided by using the block
test generator for scenarios that are not specifically concerned with
manually adding blocks.
2023-05-03 17:16:22 +01:00
Laurent David 9117af48ac MDL-77781 core_completion: Completion view must be deleted too
When resetting a course, completion view entries should also be
deleted

Co-authored-by: Georg Moser <georg@moser.link>
2023-05-03 16:05:28 +02:00
Jun Pataleta d1c24b02ab Merge branch 'MDL-77398-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 20:36:18 +08:00
Jake Dallimore 79fe493ab4 Merge branch 'MDL-77384-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 16:52:45 +08:00
Jake Dallimore d66398c356 Merge branch 'MDL-78023-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 16:15:59 +08:00
Sara Arjona 6064ce62f5 Merge branch 'MDL-77312-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 09:59:22 +02:00
Ilya Tregubov 88113fc983 Merge branch 'MDL-77320-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 15:37:00 +08:00
Ilya Tregubov e19573d6bf Merge branch 'MDL-77810-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 13:08:52 +08:00
Ilya Tregubov 3994ab206b Merge branch 'MDL-77987_401' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_401_STABLE 2023-05-03 12:40:34 +08:00
Ilya Tregubov b9d84d03ca Merge branch 'MDL-77546-401' of https://github.com/mihailges/moodle into MOODLE_401_STABLE 2023-05-03 10:57:29 +08:00
Jun Pataleta f8fdd198a9 Merge branch 'MDL-77394-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 10:31:00 +08:00
Jun Pataleta 394d592fab Merge branch 'MDL-78038-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 10:25:30 +08:00
Jun Pataleta 64c625e590 Merge branch 'MDL-78011-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-03 09:57:56 +08:00
Ilya Tregubov be0eb4369b Merge branch 'MDL-76835-401' of https://github.com/aya-saad1/moodle into MOODLE_401_STABLE 2023-05-03 09:29:59 +08:00
David Woloszyn b3424d620d MDL-77840 enrol_lti: Avoid passing nulls to base64_encode 2023-05-03 09:36:17 +10:00
Sara Arjona 767419571e Merge branch 'MDL-77858-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-05-02 16:49:53 +02:00
Sara Arjona aa63dca768 Merge branch 'MDL-77791_401' of https://github.com/dvdcastro/moodle into MOODLE_401_STABLE 2023-05-02 12:03:59 +02:00
Jun Pataleta 2dc4853ba5 Merge branch 'MDL-76857-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-05-02 15:44:55 +08:00
David Woloszyn 5ab74afad4 MDL-77840 lti: Avoid passing nulls to base64_encode 2023-05-02 13:52:12 +10:00
David Woloszyn f25ecd9bfa MDL-77840 backup: Avoid passing nulls to base64_encode 2023-05-02 13:52:12 +10:00
David Woloszyn 88496af850 MDL-77840 mnet: Avoid passing nulls to base64_encode 2023-05-02 13:52:12 +10:00
Ilya Tregubov d28386a29d Merge branch 'MDL-78025_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-05-02 11:43:30 +08:00
Jake Dallimore 4fa9ed7956 Merge branch 'MDL-78009-401' of https://github.com/marinaglancy/moodle into MOODLE_401_STABLE 2023-04-28 13:26:02 +08:00
Paul Holden 569a71daea MDL-77810 gradereport_summary: show localised plugin name in report. 2023-04-27 15:19:33 +01:00
Ilya Tregubov 4901ffe1ba weekly release 4.1.3+ 2023-04-27 19:28:38 +08:00
Sara Arjona b10f6f5036 MDL-76857 filter_displayh5p: Improve behat tests
Although the screenshots in the failures for some of the scenarios in
filter/displayh5p/tests/behat/h5p_filter.feature, like "Render a local
H5P file as teacher" were displaying the expected result, there were
some javascript errors (probably due to behat is quicker and the
iframes were not always ready).
I've added one extra step before accessing the iframe to give more
time to the H5P player to load and confirm the page is displayed
properly.
2023-04-27 11:21:36 +02:00
Paul Holden 30e419078f MDL-77320 tool_licensemanager: restrict exposure of user sesskey. 2023-04-27 09:32:37 +01:00
Mihail Geshoski f90a55979a MDL-77546 gradereport_singleview: Fix item order in grade item selector 2023-04-27 12:01:23 +08:00
Jun Pataleta 013735af51 Merge branch 'MDL-77883-401' of https://github.com/danghieu1407/moodle into MOODLE_401_STABLE 2023-04-27 11:08:54 +08:00
Jun Pataleta 6c890a6330 Merge branch 'MDL-77997_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-04-27 10:40:43 +08:00
Paul Holden 4f7dd1a54b MDL-78038 mod_bigbluebuttonbn: observe course format section config. 2023-04-26 16:10:52 +01:00
Tim Hunt de8607067f MDL-78025 questions: improve the comment on question_references.version 2023-04-26 15:45:12 +01:00
Tim Hunt 15ff1352c2 MDL-78025 questions: fix PHPdoc on question_require_capability_on 2023-04-26 15:45:00 +01:00
Tim Hunt 384ab12c55 MDL-78025 quiz: fix the quiz_questions_in_use logic 2023-04-26 15:44:54 +01:00
Tim Hunt 4a9c0b1410 MDL-78025 questions: questions_in_use should check question_references
This avoids the needs for plugins to do separate queries, which is
easier for them, and better performing.
2023-04-26 15:40:41 +01:00
Tim Hunt d2d9d762ad MDL-78025 question generator: make the behaviour less surprising
* The object returned by update_question is alwasy a new clone
  and the $question passed in will not be modified.

* The returned object has the fields like questionbankentryid and
  the ones related to versionning, so it is more like the data
  returned by question_bank::load_question_data.
2023-04-26 15:40:36 +01:00
Tim Hunt a9fa52295a MDL-78025 question: move hiding logic into question_delete_question
This logic belongs in the API, so it is applied consistently.

Also this avoids calling the expensive function questions_in_use
twice per question.
2023-04-26 15:38:57 +01:00
Paul Holden eca7a9ce2b MDL-78034 mod_bigbluebuttonbn: format instance group names. 2023-04-26 15:31:44 +01:00
Aya Saad bba6cc2f02 MDL-76835 theme: Fix unordered lists indentation 2023-04-26 13:57:49 +02:00
David Castro e5c89630af MDL-77791 data: Fix file attachment to search doc 2023-04-25 19:49:33 -05:00
Paul Holden 491ee67cd9 MDL-78023 tool_policy: cast timemodified column on table download. 2023-04-25 14:51:13 +01:00
Sara Arjona 9a3430f3fe Merge branch 'MDL-77313-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-25 15:18:42 +02:00
Paul Holden 79982a82a4 Merge branch 'MDL-78007-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-04-25 12:36:09 +01:00
Paul Holden 4ee0bdfda6 Merge branch 'MDL-73331_401_toolbrickfieldadvancedtab' of https://github.com/brickfield/moodle into MOODLE_401_STABLE 2023-04-25 11:54:17 +01:00
Paul Holden d10d553890 Merge branch 'MDL-77766-401-2' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-04-25 09:38:37 +01:00
Paul Holden 22b481f73c MDL-77384 check: clarify statistics check name. 2023-04-25 09:04:41 +01:00
Paul Holden b867e4db40 MDL-78011 qbank_managecategories: require library for pagesize const. 2023-04-24 15:35:54 +01:00
Marina Glancy ccdaef7a68 MDL-78009 auth: require necessary files 2023-04-24 13:38:58 +01:00
Jun Pataleta 952c8770b6 MDL-77766 qtype_truefalse: Respect showstandardinstruction
* When showstandardinstruction is set to no, replace the standard
instruction with the generic "Answer" text for the answer options
fieldset's legend.
2023-04-24 20:11:20 +08:00
Jun Pataleta 132ac7486d MDL-77766 qtype_multichoice: Respect showstandardinstruction
* When showstandardinstruction is set to no, replace the standard
instruction with the generic "Answer" text for the answer options
fieldset's legend.
2023-04-24 20:11:20 +08:00
Tim Hunt a9f629fbf9 MDL-77997 questions: add back Export as XML to the preview screen
The used the exist in Moodle up to 3.11, but then was removed with
insufficient thought in 4.0 (because we had grander long-term plans
which still have not happened). Until those plans happen, this
commit adds the simple link back on the preview screen.
2023-04-24 11:23:47 +01:00
Anupama Sarjoshi c6708db889 MDL-77987 Backup: add progress tracking to some slow steps 2023-04-24 11:17:34 +01:00
Paul Holden 0d7393c7ee MDL-77312 files: exclude drafts when determining license usage. 2023-04-24 11:07:38 +01:00
Paul Holden f3ae5116d0 MDL-77313 restore: re-add field to indicate course/category search.
When the two restore forms for searching courses and categories were
converted to core templates in eb9935c9 they lost the named submit
button, which broke searching.
2023-04-24 11:04:26 +01:00
Paul Holden b01ce337f6 MDL-77858 javascript: correct core/notification exception imports. 2023-04-24 10:44:14 +01:00
Paul Holden bb433919cc MDL-77394 mod_forum: de-couple discussion pinned/starred options. 2023-04-24 10:38:01 +01:00
Paul Holden 1e16260ba7 MDL-77398 mod_assign: disable form submit protection for batch options. 2023-04-24 10:35:15 +01:00
Huong Nguyen 4ec5aac734 MDL-78007 tiny_media: Fix wrong condition for the Tiny Media
Including in this commit:
 - Switched to Tiny editor in manually_mark_question.feature
2023-04-24 15:59:32 +07:00
danghieu1407 b04fab1a2a MDL-77883 forms: fix display of client-side validation for textareas 2023-04-24 13:54:37 +07:00
Jun Pataleta b2d0712748 Moodle release 4.1.3 2023-04-22 16:22:40 +08:00
Eloy Lafuente (stronk7) f70a6d32cd weekly release 4.1.2+ 2023-04-21 19:19:12 +02:00
Eloy Lafuente (stronk7) f691ccf8c6 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-04-21 19:19:07 +02:00
Jun Pataleta ceb2f856b0 Merge branch 'MDL-77927-401' of https://github.com/stevandoMoodle/moodle into MOODLE_401_STABLE 2023-04-21 16:52:21 +08:00
Jun Pataleta 955d89710e Merge branch 'MDL-77229-patch-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2023-04-21 16:44:38 +08:00
Jun Pataleta 526e1af88b MDL-77927 core: mod_assignment subplugins environment check 2023-04-21 15:53:32 +08:00
Ilya Tregubov b142840de1 MDL-77229 mod_lesson: Black list detailed statistics in classic Behat.
The nav element to go to detailed stats page is missing in classic
2023-04-21 15:07:36 +08:00
Ilya Tregubov 8fb9177b74 Merge branch 'MDL-77229-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2023-04-21 12:11:40 +08:00
Ilya Tregubov 6e15a26dce MDL-77229 lesson: Add Behat test 2023-04-21 12:04:17 +08:00
Jun Pataleta b5a65e56fd Merge branch 'MDL-77896-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-21 11:10:39 +08:00
AMOS bot a6a0e98e53 Automatically generated installer lang files 2023-04-21 00:07:41 +00:00
Paul Holden c28cd3215b MDL-77896 editor_tiny: approximate height for non-visible editors.
When an editor is renderer initially invisible to the browser, e.g.
the forum "Add discussion" form, it has a `clientHeight` value of
zero. We can approximate an alternative value based on the number
of rows in the textarea.

Co-authored-by: Andrew Nicols <andrew@nicols.co.uk>
2023-04-20 15:24:34 +01:00
Juan Leyva 39084a098b MDL-77229 lesson: Fix error for empty responses (numerical pagetype) 2023-04-20 12:46:42 +02:00
Jun Pataleta 9290627da9 Merge branch 'MDL-73012-401' of https://github.com/ferranrecio/moodle into MOODLE_401_STABLE 2023-04-20 16:29:14 +08:00
Ilya Tregubov bb5bd2eed8 Merge branch 'MDL-77436-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-04-20 16:23:19 +08:00
Jun Pataleta 12195684b4 Merge branch 'MDL-77922-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-04-20 16:10:10 +08:00
Ferran Recio f01ad40145 MDL-73012 core_courseformat: add pending to move section modal 2023-04-20 09:56:10 +02:00
Ferran Recio 1d64897a3c MDL-77922 core_courseformat: add pending to move activity modal 2023-04-20 14:42:30 +08:00
Ilya Tregubov 339dfec420 Merge branch 'MDL-77577-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-04-20 12:33:38 +08:00
Andrew Nicols 1d16c049f3 MDL-77718 editor_tiny: Restrict the revision to int for loaders
The revision should always be an int. I suspect this was missed during
debugging and not corrected.
2023-04-19 13:20:25 +00:00
Paul Holden 4d4635228d MDL-77187 mod_wiki: validate external method sort parameters. 2023-04-19 13:20:25 +00:00
Paul Holden ce9cb1156c Merge branch 'MDL-77897-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-04-19 14:13:04 +01:00
Paul Holden c0429c1c90 Merge branch 'MDL-77960-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-04-19 13:41:32 +01:00
Paul Holden be8c02fc2c Merge branch 'MDL-77944-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-04-19 13:06:41 +01:00
Max Larkin 60a2798da7 MDL-73331 tool_brickfield: Update advanced tab display 2023-04-19 12:57:37 +01:00
Paul Holden 99b5e1059d Merge branch 'MDL-77898-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-04-19 09:03:22 +01:00
Andrew Nicols ee519b690c MDL-77897 editor_tiny: Save editor content on editor blur 2023-04-19 14:57:26 +08:00
Ilya Tregubov 814c63fcc3 git fetch https://github.com/paulholden/moodle.git MDL-77935 && git merge --no-ff FETCH_HEADMerge branch 'MDL-77935-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-19 13:32:36 +08:00
Jun Pataleta 799e962f1f Merge branch 'MDL-77953_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-04-19 12:37:45 +08:00
Simey Lameze c0bea2a82d MDL-77960 behat: make verification steps more specific 2023-04-19 11:57:37 +08:00
Eloy Lafuente (stronk7) e9fcdec98b MDL-77953 pagelib: Ensure that null $SCRIPT continues behaving the same
It's possible to have some Moodle components soft linked instead
of being real directories within codebase (within dirroot).

For example, Composer's "vendor" directory can be soft linked
(from elsewhere), or also plugins can be installed using soft
links.

In those cases, Moodle calculates the $SCRIPT global as null. And,
then, string operations on it are emitting a PHP deprecation message
with PHP 8.1 and up.

This fix just ensures that the behaviour is the same than before
PHP 8.1, aka: ltrim(null) = '' (empty string), without any PHP warning.
2023-04-18 18:50:37 +02:00
Andrew Nicols fc6764324a Merge branch 'MDL-77895-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-18 23:35:19 +08:00
Andrew Nicols b71f01981a weekly release 4.1.2+ 2023-04-18 22:28:09 +08:00
Andrew Nicols 5d1fcb942a Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-04-18 22:28:06 +08:00
Jun Pataleta 24335d67bb MDL-77898 calendar: Add iconclass for upcoming_mini template
The icon's iconclass context data adds additional CSS class(es) to
calendar event icons to better control how the event icon is displayed.
e.g. without filtering for activity events that don't hae monologo
versions of their icons.
2023-04-18 15:58:46 +08:00
Paul Holden 1b828701a6 MDL-77895 editor_tiny: standardize quickbar selection toolbar.
Ensure the same heading tags are available as those defined in the
editor block formats configuration (c51b7e2c).

Co-authored-by: Andrew Nicols <andrew@nicols.co.uk>
2023-04-18 07:45:23 +01:00
Ilya Tregubov f8e468c41a Merge branch 'MDL-77916-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-18 14:28:44 +08:00
Andrew Nicols b07df211ce Merge branch 'MDL-77829-401' of https://github.com/stevandoMoodle/moodle into MOODLE_401_STABLE 2023-04-18 12:31:46 +08:00
Andrew Nicols 4c289966d3 Merge branch 'MDL-77735-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-04-18 12:10:56 +08:00
Ilya Tregubov 0d0fbec616 Merge branch 'MDL-77770-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-18 12:01:46 +08:00
Ilya Tregubov ca751bdc1f Merge branch 'MDL-76855-401' of https://github.com/Chocolate-lightning/moodle into MOODLE_401_STABLE 2023-04-18 11:18:32 +08:00
Andrew Nicols bc85007834 MDL-77944 behat: Rename chrome options for w3c support
From Selenium 4.8.0, support for non-w3c browser control has ended.

We only use W3C browser control these days, and this was missed as part
of the move to W3C. All browser options must be vendor-prefixed.
2023-04-18 09:04:08 +08:00
Ilya Tregubov dd553c1406 Merge branch 'MDL-77827-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-04-18 08:59:30 +08:00
AMOS bot 76ab8a1c51 Automatically generated installer lang files 2023-04-18 00:07:38 +00:00
Paul Holden 242ecbf7f3 Merge branch 'MDL-77878-401-enfix' of https://github.com/vmdef/moodle into MOODLE_401_STABLE 2023-04-17 19:12:36 +01:00
Shamim Rezaie cbfde8c11a Merge branch 'MDL-76998-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-04-17 21:27:56 +10:00
Paul Holden df4f8dd322 Merge branch 'MDL-76212-401-nav' of https://github.com/kevpercy/moodle into MOODLE_401_STABLE 2023-04-17 11:50:54 +01:00
Paul Holden 60ab09ac87 Merge branch 'MDL-77324-401-2' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2023-04-17 11:06:14 +01:00
Paul Holden 40fad4d6b7 MDL-77935 contentbank: avoid phpunit crashes during isolated tests.
Simplify the test for allowed contexts by removing problematic use of
data provider annotation.

See: https://github.com/sebastianbergmann/phpunit/issues/2739
2023-04-17 09:28:38 +01:00
Víctor Déniz 1265b0ad84 MDL-77878 lang: Use fixed strings in tests 2023-04-17 09:26:52 +01:00
Mathew May faa121ad30 MDL-76855 gradereport_user: Prevent parent access errors 2023-04-17 11:26:03 +08:00
Andrew Nicols 797cbcc3da Merge branch 'MDL-76995-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-04-17 11:17:04 +08:00
Ilya Tregubov 6bac910434 MDL-76994 core_course: Fix version for weeks and topics course formats 2023-04-17 11:04:37 +08:00
Andrew Nicols a9b4b297ac Merge branch 'MDL-77606' of https://github.com/skodak/moodle into MOODLE_401_STABLE 2023-04-17 10:34:55 +08:00
Petr Skoda 073deca0e1 MDL-77606 grunt: fix Windows compatibility
Backport of MDL-77748.
2023-04-17 10:34:09 +08:00
Petr Skoda 2cc1182b16 MDL-77606 core: switch to Dart sass
Backport of MDL-73144.
2023-04-17 10:33:50 +08:00
Ilya Tregubov 82a7b26648 Merge branch 'MDL-76994-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-04-17 09:47:04 +08:00
Helen Foster 2db1ddd290 MDL-77878 lang: Import fixed English strings (en_fix) 2023-04-16 20:54:48 +01:00
Sara Arjona 96f0478ec1 Merge branch 'MDL-77913-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-14 14:02:18 +02:00
Sara Arjona 38f5c818cb MDL-77735 core: Check $CFG->lang isset
In some cases, $CFG->lang might not be set, and this is causing a
Notice to be displayed when, for instance, database connection fails.
This patch should fix this case.
2023-04-14 13:46:51 +02:00
Sara Arjona 38c35247e9 weekly release 4.1.2+ 2023-04-14 10:50:08 +02:00
Sara Arjona 242dcfbc55 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-04-14 10:50:03 +02:00
Huong Nguyen 2f601f1e51 MDL-77827 events: Changed JSON comparison to be less strict 2023-04-14 12:29:32 +07:00
Paul Holden 31a3c8cda4 MDL-77916 h5p: register autoloader in helper testcase. 2023-04-13 23:14:57 +01:00
Paul Holden 39cf556111 MDL-77913 qbank_previewquestion: deterministic ordering of versions.
Ensure the ordering of loaded question versions is consistent, avoids
random Oracle failures.
2023-04-13 21:45:28 +01:00
Sara Arjona 4c4be40c77 Merge branch 'MDL-76986-401' of https://github.com/davewoloszyn/moodle into MOODLE_401_STABLE 2023-04-13 17:32:03 +02:00
Amaia Anabitarte c8f105800c MDL-76995 core_courseindex: Apply indentation in the course index 2023-04-13 16:59:05 +02:00
Amaia Anabitarte 3502ad3da7 MDL-76998 admin: Option to reset course indentation 2023-04-13 16:52:19 +02:00
Amaia Anabitarte 15a5a938b6 MDL-76994 tool_mobile: Return course format indentation setting 2023-04-13 16:51:05 +02:00
Amaia Anabitarte ec4eacd1da MDL-76994 core_course: New course format setting to enable indentation 2023-04-13 16:50:58 +02:00
Sara Arjona bc34e3fef3 Merge branch 'MDL-76859-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-04-13 16:24:28 +02:00
Sara Arjona 6aef92c24a Merge branch 'MDL77833-course-content-chng-notificatn-multilang' of https://github.com/Amrita1991/moodle into MOODLE_401_STABLE 2023-04-13 16:20:06 +02:00
Sara Arjona 4b7c58febf Merge branch 'MDL-77860-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-13 13:45:00 +02:00
Sara Arjona 4ed6c8fbce Merge branch 'MDL-77788-401' of https://github.com/rmady/moodle into MOODLE_401_STABLE 2023-04-13 13:17:28 +02:00
Sara Arjona af585fc755 Merge branch 'MDL-77618-admin-password-autocomplete-MOODLE_401_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_401_STABLE 2023-04-13 12:19:16 +02:00
Amrita Deb Dutta 6ae5ee18a0 MDL-77833 course: content change notification multilang processing
adding context to format string

content change notificatn coursename multilang processing

change context param
2023-04-13 11:28:41 +02:00
Sara Arjona ead7958219 Merge branch 'MDL-77256-401' of https://github.com/rbravod/moodle into MOODLE_401_STABLE 2023-04-13 11:20:32 +02:00
Ilya Tregubov 8dc9cd6cdc MDL-77324 gradereport_singleview: Make action menus consistent 2023-04-13 16:59:23 +08:00
Sara Arjona 69749509ab Merge branch 'MDL-77856-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-04-13 09:43:05 +02:00
Sara Arjona 59eac981eb Merge branch 'MDL-77468-401' of https://github.com/rmady/moodle into MOODLE_401_STABLE 2023-04-13 09:19:58 +02:00
David Woloszyn ab0038da84 MDL-76986 editor_tiny: Convert language code format for getting strings 2023-04-13 16:05:14 +10:00
Juan Leyva 2cde957897 MDL-77468 user: Fix invalid check for group belonging 2023-04-12 22:13:22 -03:00
Sara Arjona a8eb481980 Merge branch 'MDL-73610_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-04-12 18:19:40 +02:00
Juan Leyva 4c533b8204 MDL-77468 user: Make user profile visibility consistent web and ws 2023-04-12 09:15:47 -03:00
Sara Arjona 26aaa7486a Merge branch 'MDL-77012-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-12 14:09:33 +02:00
Petr Skoda f336875b1a MDL-76859 h5p: Fix behat failures
- Only resize if the H5P EmbedCommunicator is defined (otherwise, it was causing a
JS error)
- An unnecessary image has been removed from the greeting-card.h5p fixture package.
That way, the text will always be displayed (even if the iframe is still not
resized). Instead of replacing the original greeting-card-887.h5p file, I've
renamed it to greeting-card.h5p, to remove these ugly and unnecessary numbers
at the end of the file name).
2023-04-12 12:27:06 +02:00
Sara Arjona 6381daf52a Merge branch 'MDL-76993-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-04-12 09:54:22 +02:00
Kevin Percy 5b8ad6ae30 MDL-76212 gradebook_nav: Fixed tertiary nav for smaller screens 2023-04-12 14:12:50 +08:00
Amaia Anabitarte 3a38791d62 MDL-76993 core_course: Recover move right/left functionality
This is a backport of MDL-76990
2023-04-11 13:28:00 +02:00
Sara Arjona 5563e99f2c Merge branch 'MDL-77837-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-04-11 12:12:49 +02:00
Sara Arjona 8bc1c231d6 Merge branch 'MDL-77552-401' of https://github.com/ferranrecio/moodle into MOODLE_401_STABLE 2023-04-11 11:13:41 +02:00
Sara Arjona 1226208a64 Merge branch 'MDL-77148_401' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_401_STABLE 2023-04-11 10:17:08 +02:00
Sara Arjona 725277eb8b Merge branch 'MDL-77612-401' of https://github.com/laurentdavid/moodle into MOODLE_401_STABLE 2023-04-11 10:04:41 +02:00
Laurent David b631966a70 MDL-77612 mod_label: Label name fix
* The @@PLUGINFILE@@ placeholder or URLs should not be displayed in the
course index for labels
2023-04-11 05:24:39 +02:00
Stevani Andolo b796cbd03c MDL-77829 core: Added environment check for mod_assignment
Decided to add an environment check before uninstalling the
mod_assignment plugin to prevent data lost.
2023-04-10 13:54:00 +08:00
AMOS bot 1066f5fe68 Automatically generated installer lang files 2023-04-07 00:07:35 +00:00
Andrew Nicols 202718f968 MDL-77837 core: Improve usage docs for cron_setup_user 2023-04-06 23:21:29 +08:00
Andrew Nicols 44d734147a MDL-77837 phpunit: Ensure that the cron user setter is used
When running an adhoc task in a unit test we should use the cron variant
of the set user method to mimic the behaviour of a real cron run.
2023-04-06 23:21:29 +08:00
Andrew Nicols 346cb39cff MDL-77837 cron: Ensure user is set when running tasks
We should be proactive in ensuring that the environment is clean when
running a task. We already ensure that we have a clean renderer and
other parts of the output chain, but we were not setting a clean user.

This change adds a call to setup the cron user before each task is
actually executed.
2023-04-06 23:21:29 +08:00
Paul Holden eb12428324 MDL-77770 gradereport_user: fix errors when no users to navigate. 2023-04-06 14:41:03 +01:00
Anupama Sarjoshi 8b31922739 MDL-77148 core: Fix to export params for templates in correct format
When questions are filtered by tags in the question bank, the qtagids
params are passed in the array format. Though moodle_url handles this,
single_button::export_for_template cannot. Hence changes done in
weblib.php to provide params for export_for_template in the
suitable format.
Thanks Huong. I have added the Behat test you provided in the patch.
2023-04-06 14:38:29 +01:00
Eloy Lafuente (stronk7) 127174088a MDL-73610 nodejs: Small updates to required packages
The main goal of this issue is to avoid scanners (Dependabot
and friends), reporting about security issues with the current
xmldom 0.6.0 package.

Note that this doesn't affect prod at all, because it's a dev
dependency, hardly exploitable. So it's not a security fix, just
a security_benefit, if something.

So here, we are updating from xmldom 0.6.0 to @xmldom/xmldom 0.8.7
(note that the package was renamed in 0.7.0, so it's the very same)

Also, when proceeding with the changes, it was detected that we
are incorrectly declaring @babel/eslint-parser as a normal dependency
instead of a development one, so we are also fixing that little detail.

The commands executed to get the changes above applied have been:

- nvm use
- npm install @xmldom/xmldom@^0.8.7 --save-dev
- npm uninstall xmldom
- npm install @babel/eslint-parser@^7.17.0 --save-dev

(we haven't run a complete re-install because we only want to modify
the minimum possible at this stage).
2023-04-06 14:59:43 +02:00
Sara Arjona f8e2445513 weekly release 4.1.2+ 2023-04-06 14:02:16 +02:00
Sara Arjona cb8bf1e001 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-04-06 14:02:12 +02:00
Sara Arjona 1f7063cc09 Merge branch 'MDL-75301-fix' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-04-06 08:12:03 +02:00
Sara Arjona 60954253d4 MDL-75301 quiz: Fix failing behat test
I cherry-picked this branch from master (because the current 401
had some conflicts). In master, quiz has been moved to quiz_settings,
so that's why the behat test start failing. Using the proper name
fixes it.
2023-04-06 07:15:57 +02:00
Paul Holden d49ebb79c5 MDL-77860 tool_moodlenet: use localised language strings for import. 2023-04-05 23:05:23 +01:00
Jun Pataleta 85a7c17414 MDL-77856 qtype_multianswer: Use Bootstrap Popover for subq feedback
The YUI Overlay widget encloses the subquestion feedback in a div
which causes a div element to be enclosed in the subquestion span. This
leads to an accessibility issue in terms of HTML parsing as inline
elements (span) should not contain block elements (div)
The YUI Overlay widget is also not accessible as it does not really hide
the overlay contents via aria-hidden when the overlay is not being
shown. It's better if we stop using this and use Bootstrap's
popover component which is more accessible by default.

This patch also removes module.js for the qtype_multianswer plugin as
it only contains codes related to rendering the feedback contents in the
YUI overlay widget which is no longer necessary.
2023-04-06 05:35:11 +08:00
Sara Arjona c9b7b94ed4 Merge branch 'MDL-73642_MOODLE_401_STABLE' of https://github.com/tasosb/moodle into MOODLE_401_STABLE 2023-04-05 17:17:35 +02:00
Mark Johnson 0bc265e900 MDL-75301 quiz: Use "always latest" option for question previews
This will set the "alwayslatest" option when previewing a question from
the quiz according to the version setting used in the quiz slot.
2023-04-05 12:50:05 +02:00
Mark Johnson 6417d795b9 MDL-75301 question: Add "always latest" option to previews 2023-04-05 12:49:58 +02:00
Mark Johnson c55473ad2e MDL-75301 question: Add behat generator for updating questions
This adds "core_question > updated question" as an entity for `the
following "X" exist` and calls the existing update_question() generator
which will create a new question version with the supplied data.
2023-04-05 12:49:51 +02:00
Shamim Rezaie ddaf4b7a58 Merge branch 'MDL-77555-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-05 20:15:39 +10:00
Paul Holden be58d68f20 MDL-77555 reportbuilder: improve SQL generation within filters.
Use native ANSI SQL syntax for numeric comparisons where possible,
define filter API for the case where filters must re-use the given
field SQL while ensuring uniqueness of any field parameters.

Currently only necessary in the category filter type.
2023-04-05 09:40:31 +01:00
Paul Holden 131d80441a Merge branch 'MDL-69551_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-04-05 08:56:45 +01:00
AMOS bot 8a588f963c Automatically generated installer lang files 2023-04-05 00:07:43 +00:00
Juan Leyva 4e32a42415 MDL-77788 mod_assign: Apply format_string to group names in WS 2023-04-04 18:11:03 -03:00
Tim Hunt aa9a462a4b MDL-69551 quiz: start quiz password field should be a passwordunmask
This help accessibility and usability
2023-04-04 12:19:49 +01:00
Paul Holden 571c59b60e Merge branch 'MDL-77712-401' of https://github.com/laurentdavid/moodle into MOODLE_401_STABLE 2023-04-04 12:06:42 +01:00
Paul Holden 360f9e37f8 MDL-77012 editor_tiny: correct block formats property syntax.
Co-authored-by: Hiroto Kagotani <hiroto.kagotani@gmail.com>
2023-04-04 09:53:20 +01:00
Andrew Nicols 65ba7df04b Merge branch 'MDL-77584-401' of https://github.com/ewallah/moodle into MOODLE_401_STABLE 2023-04-04 12:07:23 +08:00
Simey Lameze 5d000c6f35 MDL-77733 behat: enable Axe accessibility tests by default 2023-04-04 09:18:19 +08:00
AMOS bot 02aed7f6fc Automatically generated installer lang files 2023-04-04 00:07:43 +00:00
Paul Holden 2a4f86051b Merge branch 'MDL-75906-401' of https://github.com/mickhawkins/moodle into MOODLE_401_STABLE 2023-04-03 14:54:05 +01:00
Paul Holden 701541f35b Merge branch 'MDL-77227-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-04-03 10:56:19 +01:00
Sara Arjona 839681dc77 Merge branch 'MDL-77807-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-04-03 11:53:19 +02:00
Michael Hawkins b33e5466df MDL-75906 core: Updated security.txt expiry 2023-04-03 17:27:30 +08:00
Laurent David fbbdfefdb6 MDL-77712 core_course: Fix exception with inplace editor
* On fresh install, an exception is raised when we try to modify
the name of a newly inserted activity in the front page
2023-04-03 10:43:11 +02:00
Ferran Recio 8656271a63 MDL-77552 core_courseformat: add plugin and module to cm state
Backport of MDL-77386
2023-04-03 09:35:08 +02:00
Ilya Tregubov e1f3e7f232 Merge branch 'MDL-77603' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2023-04-03 10:03:53 +08:00
Andrew Nicols f6c4303c58 MDL-77603 theme_boost: Add reference to CL update 2023-04-03 10:02:41 +08:00
Petr Skoda 134dc470c7 MDL-77603 theme_boost: remove Bootstrap version reference 2023-04-03 10:02:36 +08:00
Petr Skoda 45cd887f3b MDL-77603 tool_componentlibrary: import Bootstrap v4.6.2 2023-04-03 10:02:31 +08:00
Petr Skoda b65ec774c5 MDL-77603 theme_boost: import Bootstrap v4.6.2 2023-04-03 10:02:19 +08:00
AMOS bot 215e9f0688 Automatically generated installer lang files 2023-04-02 00:07:37 +00:00
Stefan Hanauska df0f9fa06d MDL-75623 backup: Encode pluginfile URLs 2023-04-01 09:09:39 +02:00
AMOS bot 035ebed95b Automatically generated installer lang files 2023-04-01 00:07:46 +00:00
Paul Holden a78f3a02c6 weekly release 4.1.2+ 2023-03-31 18:11:53 +01:00
Paul Holden 2890546f44 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-31 18:11:51 +01:00
Jake Dallimore a1df38dfc6 Merge branch 'MDL-59175-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-31 11:57:27 +08:00
Jake Dallimore 82f9585f55 Merge branch 'MDL-77794-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-31 11:48:42 +08:00
Mikhail Golenkov af7422edc0 MDL-77592 filter_tex: Use request dir instead of temp shared storage 2023-03-31 14:34:54 +11:00
Andrew Nicols 0f092b86b5 Merge branch 'MDL-77783-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-03-31 11:31:05 +08:00
Ilya Tregubov 74f3c34cbf Merge branch 'MDL-70976-401' of https://github.com/laurentdavid/moodle into MOODLE_401_STABLE 2023-03-31 09:41:45 +08:00
AMOS bot 1f337e7665 Automatically generated installer lang files 2023-03-31 00:07:40 +00:00
Paul Holden fbb6dc4ca3 MDL-77807 files: normalise file entity size/type column fields.
The `filename` field was only used by each to determine whether the
file was itself a directory, and it's presence meant that aggregation
of each column wasn't working properly.
2023-03-30 20:46:57 +01:00
Laurent David ab3a244568 MDL-77456 core_courseformat: Fix highlight in course index
* When navigating to a restricted activity as a student from the course index
the item is not highlighted when refreshing the page.
2023-03-30 18:57:33 +02:00
Sara Arjona 7b13a543ad Merge branch 'MDL-77761-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-03-30 17:53:20 +02:00
Sara Arjona dd10dead0f Merge branch 'MDL-77764-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-30 16:31:21 +02:00
Paul Holden b84a48d1ee Merge branch 'MDL-76481_401_Brickfield_TCPDF_error' of https://github.com/brickfield/moodle into MOODLE_401_STABLE 2023-03-30 12:50:09 +01:00
Sara Arjona 3794210019 Merge branch 'MDL-77762-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-30 13:45:18 +02:00
Jun Pataleta cca75ca956 Merge branch 'MDL-77333_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-03-30 19:03:40 +08:00
Paul Holden 93c91af6a9 Merge branch 'MDL-77773-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-30 10:41:20 +01:00
Paul Holden 8755738360 MDL-77794 contentbank: fix plugin type language strings.
AMOS BEGIN
 CPY [type_contentbank,core_plugin],[type_contenttype,core_plugin]
 CPY [type_contentbank_plural,core_plugin],[type_contenttype_plural,core_plugin]
AMOS END
2023-03-30 09:58:32 +01:00
Max Larkin 4f8c5ef086 MDL-76481 tool_brickfield: Fix PHP 8 report download 2023-03-30 09:15:05 +01:00
Paul Holden 5d10e53ba1 Merge branch 'MDL-75017_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-30 08:47:54 +01:00
Ilya Tregubov cc0c62d564 Merge branch 'MDL-73771_401' of https://github.com/lostrogit/moodle into MOODLE_401_STABLE 2023-03-30 14:22:53 +08:00
AMOS bot 48fb5b6e88 Automatically generated installer lang files 2023-03-30 00:07:44 +00:00
Amaia Anabitarte bc4b6cf8f7 MDL-77227 roles: Remove extra information for override page 2023-03-29 18:20:23 +02:00
Carlos Castillo f17b006dcb MDL-73771 theme: Fix scrollbar position 2023-03-29 09:15:39 -05:00
Shamim Rezaie d50bb07b2b Merge branch 'MDL-74452_401_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_401_STABLE 2023-03-29 15:27:15 +11:00
Ilya Tregubov b85f6a660b Merge branch 'MDL-77740-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-29 10:58:47 +08:00
Jun Pataleta dd584ab981 Merge branch 'MDL-77382-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-03-29 09:48:17 +08:00
Jun Pataleta ab9b09908a Merge branch 'MDL-76941-401-2' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-03-29 09:31:51 +08:00
Jun Pataleta c99abd65ca MDL-77783 core: Validate sublugins.json
* Validate the decoded subplugins.json before processing it.
* Log errors if subplugins.json is invalid or if plugintypes is not
defined.
2023-03-29 09:29:57 +08:00
Jun Pataleta 436ed2c4cb MDL-77761 core_form: Add label for editor format selector 2023-03-29 08:09:54 +08:00
Eloy Lafuente (stronk7) d0ddc7692b MDL-77333 mod_resource: fixes generator uploading files + tests
MDL-76499 revealed a few problems with resource generators:

1. We were not covering with unit tests the upload of files from disk
   (and here it's where the problem was).
2. There was a little of confusion between disk paths (only needed
   to upload files) and file_area paths (the generator only creates
   or uploads files to the root directory of the file area.
3. It was possible to request the upload of a file to the generator
   without that file effectively existing.

This commit fixes those points  and covers 99% of the generator code.
2023-03-28 19:06:18 +02:00
Paul Holden 449a8b0b31 weekly release 4.1.2+ 2023-03-28 15:55:18 +01:00
Paul Holden 0f251ce165 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-28 15:55:16 +01:00
Andrew Nicols 5df8e8fa5f MDL-77773 editor_tiny: Improve initial editor size 2023-03-28 20:48:05 +08:00
Paul Holden 7f6888bd53 Merge branch 'MDL-77105-401-4' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-03-28 12:38:52 +01:00
Jun Pataleta 95d5b0aab0 MDL-77105 core: Cast custom data to an array when evaluating filtericon
Since other modules may treat custom data as an object, we need to make
cast it to an array before evaluating for the `filtericon` custom data.
2023-03-28 18:49:27 +08:00
Huong Nguyen 9a05e393dd MDL-76941 tool_usertours: Fix accessibility issue when resizing 2023-03-28 12:18:17 +07:00
Meirza 110ec6a703 MDL-77436 auth_oauth2: Update profile fields based on data mapping.
After the user creation, the system must call an update function to update profile_fields_*.
We also provided two functions into user/profile/lib.php to get available from other areas.
We added PHP unit testing for new public functions and
the Behat tests for custom profile fields with locked and unlocked statuses.

Co-authored-by: Matt Porritt <matt.porritt@moodle.com>
2023-03-28 11:47:23 +07:00
Matt Porritt 714764d966 MDL-77436 auth_oauth2: Allow admin to choose profile fields for mapping
Update oauth2 to allow mapping of provider attributes against
user profile fields. Fields can also be locked to prevent
user changes.

Co-Authored-By: Michael Milette <michael.milette@tngconsulting.ca>
2023-03-28 11:46:51 +07:00
Jun Pataleta ae63139985 Merge branch 'MDL-77630-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-03-28 12:06:17 +08:00
Jake Dallimore e144ff8a43 Merge branch 'MDL-77105-401-4' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-03-28 11:42:42 +08:00
Meirza cd528df093 MDL-77630 mod_forum: correct typo in variable names 2023-03-28 09:39:01 +07:00
Jun Pataleta 6b96cf8676 Merge branch 'MDL-77670-401' of https://github.com/juancs/moodle into MOODLE_401_STABLE 2023-03-28 07:05:04 +08:00
Paul Holden 2b0a0cecdf MDL-77762 contentbank: always provide exit button when appropriate.
If the current user can access the content bank in the context of the
current item, then provide link back to it.
2023-03-27 18:08:53 +01:00
Paul Holden 7b614d6f51 MDL-77764 contentbank: add field label to context selection element. 2023-03-27 16:54:53 +01:00
Sara Arjona e7cda153a2 Merge branch 'MDL-76376_m41' of https://github.com/jrchamp/moodle into MOODLE_401_STABLE 2023-03-27 16:56:30 +02:00
Sara Arjona 0d6eaef200 Merge branch 'MDL-77659_401' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_401_STABLE 2023-03-27 16:50:31 +02:00
Sara Arjona f32c46bf0c Merge branch 'MDL-73226-401' of https://github.com/jleyva/moodle into MOODLE_401_STABLE 2023-03-27 16:08:26 +02:00
Juan Leyva eeae99afc7 MDL-73226 files: Add quota checks to core_user_add_user_private_files 2023-03-27 13:25:43 +02:00
Sara Arjona 8c9b54cc5d Merge branch 'MDL-76303-401' of https://github.com/ssj365/moodle into MOODLE_401_STABLE 2023-03-27 12:41:18 +02:00
Paul Holden da42c76300 Merge branch 'MDL-77729_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-27 11:09:26 +01:00
Sara Arjona c2714ff1af Merge branch 'MDL-77561-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-03-27 11:43:26 +02:00
Paul Holden f2cbacbd24 MDL-77555 reportbuilder: method to ensure unique parameters in SQL. 2023-03-27 10:29:31 +01:00
Jun Pataleta bc1d7e854b MDL-77105 core: Add upgrade.txt notes 2023-03-27 14:00:58 +08:00
Jun Pataleta 99bc8f2b30 MDL-77105 mod_url: Declare filtericon custom data
* Set a custom data `filtericon` when the icon being rendered for the
URL resource is not equal to the default plugin icon.
2023-03-27 14:00:58 +08:00
Jun Pataleta 67f739499b MDL-77105 mod_lti: Add 'nofilter' class for custom tool icons
Add a '.nofilter' class when rendering custom tool icons in order
to render them as is and without CSS filter on the activity chooser.
2023-03-27 14:00:38 +08:00
Jun Pataleta 538e17e199 MDL-77105 core_course: Add 'nofilter' class for non-monologo icons
When rendering content items, check whether the plugin has monologo
icons. If so, add a 'nofilter' class so the plugin icon can be
rendered as is and without the CSS filter.
2023-03-27 14:00:18 +08:00
Jun Pataleta 28d8c9c1e7 MDL-77105 block_timeline: Add 'nofilter' class when necessary
Add the `.nofilter` class for activity icons when the icon URL's
`filtericon` parameter is not set, so they get rendered as they are on
the timeline block.
2023-03-27 13:59:54 +08:00
Jun Pataleta 18703b71ac MDL-77105 block_recentlyaccesseditems: Add 'nofilter' class
Add the `.nofilter` class for activity icons when the icon URL's
`filtericon` parameter is not set, so they get rendered as they are on
the recently accessed items block.
2023-03-27 13:59:33 +08:00
Jun Pataleta f59220a76d MDL-77105 theme_boost: Add 'nofilter' class when necessary
Add the `.nofilter` class for activity icons when the icon URL's
`filtericon` parameter is not set, so they get rendered as they are on
the context header on the activity page.
2023-03-27 13:42:43 +08:00
Jun Pataleta 84198e03c7 MDL-77105 course_format: Add 'nofilter' class when necessary
Add the `.nofilter` class for activity icons when the icon URL's
`filtericon` parameter is not set, so they get rendered as they are on
the course homepage.
2023-03-27 13:42:43 +08:00
Jun Pataleta f5d445a68f MDL-77105 core: Conditionally apply icon filter
* Apply the filter CSS property only to activity icons
that don't have the ".nofilter" class. This will allow
activities with non-SVG icons to be rendered as they are.
2023-03-27 13:42:41 +08:00
Jun Pataleta 30b0b0cf40 MDL-77105 core: Add a filtericon parameter to course mod icon URLs
* If a plugin defines a `filtericon` custom data or uses its monologo
version of the icon, a `filtericon` parameter is being added to the
icon's URL. This information can help plugins determine whether to
render the activity icon as is or with CSS filtering.
2023-03-27 13:36:42 +08:00
Jun Pataleta 69948eda10 MDL-77105 core: Method to determine whether a plugin has monolog icons 2023-03-27 13:36:38 +08:00
Brendan Heywood 25edc77d10 MDL-77749 admin: Fix code error with unset config duration 2023-03-26 16:18:13 +11:00
AMOS bot 1f4daa7402 Automatically generated installer lang files 2023-03-26 00:07:41 +00:00
Tim Hunt c1c1ca6e4d MDL-77729 qformat_missingword: fix form of help link 2023-03-25 15:39:27 +00:00
Andrew Nicols 50d1671a54 MDL-77740 editor_tiny: Set the Editor window from the iFrame element
This is a workaround for an upstream bug which I have not been able to
reproduce outside of Moodle whereby the editor.contentWindow does not
math the editor.iframeElement.contentWindow when it should.

This issue only seems to affect Firefox, and it may even be a bug in
Firefox. It can only be reproduced when using a fresh browser which has
never had a TinyMCE window open.
2023-03-24 21:34:21 +08:00
Tim Hunt fd9b8bf4d0 MDL-75017 questions: give a clear error if the context type is invalid 2023-03-24 13:00:09 +00:00
Tim Hunt e405e6fd6a MDL-75017 questions: fix weird setup in qformat_xml_import_export_test 2023-03-24 13:00:07 +00:00
Sara Arjona 5898c3e5dd weekly release 4.1.2+ 2023-03-24 13:59:31 +01:00
Jun Pataleta d2bc54fba9 Merge branch 'MDL-77669-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-24 11:51:36 +08:00
Jun Pataleta 9b07f56add Merge branch 'MDL-77626_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-24 10:40:36 +08:00
Simey Lameze 7c1c1071e7 MDL-77561 behat: add step to accept dpa and enable bigbluebutton
The step i_enable_plugin cannot be used as bigbluebuttonbn_default_dpa_accepted
setting needs to be enable in order for the BigBlueButton plugin to be enabled.
2023-03-24 08:21:05 +08:00
Sara Arjona d2d49e150b Merge branch 'MDL-77705-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-23 18:30:27 +01:00
Sara Arjona a7d71e0e2d Merge branch 'MDL-77666-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-23 17:53:45 +01:00
Shamiso.Jaravaza b924f6a355 MDL-76303 mod_bigbluebuttonbn: Fix userlimit 2023-03-23 08:23:23 -06:00
Paul Holden 3fa384384e Merge branch 'MDL-77392-401' of https://github.com/srobotta/moodle into MOODLE_401_STABLE 2023-03-23 12:25:29 +00:00
Stephan Robotta 66e88ace0f MDL-77392 calendar: calendar items are hidden because of settings 2023-03-23 12:53:09 +01:00
Paul Holden fe07140e27 Merge branch 'MDL-77691-401' of https://github.com/roland04/moodle into MOODLE_401_STABLE 2023-03-23 11:43:41 +00:00
Sara Arjona fad4e118a4 Merge branch 'MDL-77380-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-03-22 14:06:07 +01:00
Sara Arjona 0d80eea9af Merge branch 'MDL-77692-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-22 13:50:11 +01:00
Ilya Tregubov 0b973b52e9 weekly release 4.1.2+ 2023-03-22 09:37:08 +08:00
Ilya Tregubov b158354710 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-22 09:37:06 +08:00
Paul Holden ee3924702f MDL-77705 reportbuilder: avoid re-using field alias between entities.
Ensure that when the user entity is added multiple times to a report,
when there are custom profile fields, each of those gets a unique table
alias per-entity.
2023-03-21 17:29:09 +00:00
Mark Johnson 0d4d201a8c MDL-74452 quiz: Display an error if all versions are in draft status 2023-03-21 15:25:02 +00:00
Mikel Martín 0b2085648e MDL-77691 behat: Add step to navigate to profile page directly 2023-03-21 08:08:10 +01:00
Simey Lameze 939a416308 MDL-77380 block_myoverview: improve show toggle functionality test 2023-03-21 14:47:25 +08:00
Jun Pataleta 28d1db2f1d Merge branch 'MDL-75746_401_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_401_STABLE 2023-03-21 12:01:01 +08:00
Angelia Dela Cruz 084c120c79 MDL-77577 Behat: Replaced the use of "Install selected language pack(s)
Evaluated usage of "Install selected language pack(s)" in Behat and
replaced the steps to use generator to install language packs as part
of test setup.
2023-03-21 12:00:53 +08:00
Meirza 29a1cf86a3 MDL-77669 dml: Added extrainfo in the DB options config.
extrainfo is an extra information for the DB driver, e.g. SQL Server,
has additional configuration according to its environment,
which the administrator can specify to alter and override any connection options.

Co-authored-by: LukeCarrier <luke@carrier.im>

This is a backport of MDL-64153.
2023-03-21 08:48:39 +08:00
Ilya Tregubov ea915c29e5 Merge branch 'mdl-72533-event-table-performance-MOODLE_401_STABLE' of https://github.com/petersistrom/moodle into MOODLE_401_STABLE 2023-03-21 08:24:59 +08:00
Paul Holden deced83b06 Merge branch 'MDL-72124_401_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_401_STABLE 2023-03-20 17:04:54 +00:00
Paul Holden fac1828222 MDL-77692 reportbuilder: format custom field condition/filter names. 2023-03-20 16:32:08 +00:00
Sara Arjona 502536c16e Merge branch 'MDL-77574-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-03-20 17:06:06 +01:00
Anupama Sarjoshi 3fee9d949f MDL-77659 core_reportbuilder: fix user profile fields phpunit tests 2023-03-20 13:53:46 +00:00
Sara Arjona 1bfc0a1d14 Merge branch 'MDL-77523-401' of https://github.com/juancs/moodle into MOODLE_401_STABLE 2023-03-20 13:42:49 +01:00
Mark Sharp f8301fb4bc MDL-72533 core_calendar: improve calendar event table peformance
- Filter searchable courses if set.
- Sites with large groups should now experience better performance.
- Applies and optimises query against a proper date range.

Co-authored-by: Mark Sharp <mark.sharp@solent.ac.uk>
Co-authored-by: Peter Sistrom <petersistrom@catalyst-au.net>
Co-authored-by: Kevin Pham <keevan.pham@gmail.com>
2023-03-20 12:09:24 +11:00
AMOS bot 9e97a353ad Automatically generated installer lang files 2023-03-20 00:07:41 +00:00
Brendan Heywood 6e27e9e481 MDL-77618 admin: Passwords should not auto complete 2023-03-18 13:02:58 +11:00
AMOS bot e8cbc0b653 Automatically generated installer lang files 2023-03-18 00:07:42 +00:00
Juan Segarra Montesinos b296667ebf MDL-77670 course: Preserve course summary format 2023-03-17 20:54:07 +01:00
Sara Arjona 231c25e498 weekly release 4.1.2+ 2023-03-17 17:58:21 +01:00
Sara Arjona 3ff1293c12 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-17 17:58:12 +01:00
Jun Pataleta eda00e2c73 Merge branch 'MDL-76257-401' of https://github.com/juancs/moodle into MOODLE_401_STABLE 2023-03-17 11:01:22 +08:00
Jun Pataleta 85b4e2312e Merge branch 'MDL-77608-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-17 10:29:48 +08:00
AMOS bot 5707e7d40f Automatically generated installer lang files 2023-03-17 00:07:43 +00:00
Paul Holden 71e751565c MDL-77666 contentbank: format category names for display. 2023-03-16 23:27:13 +00:00
info@eWallah.net b3adaaf47f MDL-77584 currencies: Fix outdated ISO 4217 code for Zambian Kwacha
On 2013-01-01 the ZMK code got replaced by the new ZMW code.

AMOS BEGIN
 MOV [ZMK,core_currencies],[ZMW,core_currencies]
AMOS END
2023-03-16 19:53:38 +01:00
Jake Dallimore 282df774a4 Merge branch 'MDL-76309-MOODLE_401_STABLE' of https://github.com/sh-csg/moodle into MOODLE_401_STABLE 2023-03-16 15:47:16 +08:00
Stefan Hanauska 9f5492df71 MDL-76309 mod_assign: Compatibility with zip download 2023-03-16 07:18:35 +01:00
Paul Holden 0920bd0810 MDL-76339 mod_bigbluebuttonbn: correct upgrade note fix versions.
Use agreed task name language string.
2023-03-15 19:15:29 +00:00
Paul Holden a89cba84a1 Merge branch 'MDL-76339-401' of https://github.com/call-learning/moodle into MOODLE_401_STABLE 2023-03-15 19:05:57 +00:00
Andrew Nicols f0b3ff2134 Merge branch 'MDL-77550-401' of https://github.com/dpalou/moodle into MOODLE_401_STABLE 2023-03-15 14:26:26 +08:00
Juan Segarra Montesinos dbd7cedd24 MDL-77523 mod_data: textarea field should honor editor preferred format 2023-03-15 06:49:02 +01:00
Jun Pataleta d5331827c4 Merge branch 'MDL-77611_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-15 10:01:04 +08:00
AMOS bot 91f503c3f6 Automatically generated installer lang files 2023-03-15 00:07:40 +00:00
Paul Holden 4ee053a278 MDL-59175 theme_boost: style inherited permission on overide page. 2023-03-14 20:58:07 +00:00
Tim Hunt 4bc3782c4c MDL-77626 quiz statistics: Divide by zero if a random Q has max mark 0 2023-03-14 16:34:30 +00:00
Mark Johnson 5a7ad7b284 MDL-75746 mod_quiz: Fix backup and restore of quiz slots 2023-03-14 16:07:46 +00:00
Mark Johnson 34c452afb4 MDL-72124 question: Fix system-level URLs in question events 2023-03-14 15:40:26 +00:00
Eloy Lafuente (stronk7) 6c260e6ae7 weekly release 4.1.2+ 2023-03-14 16:07:32 +01:00
Eloy Lafuente (stronk7) 09e74578a1 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-14 16:07:27 +01:00
Jun Pataleta f1a9181a77 Merge branch 'MDL-76680/401' of https://github.com/skodak/moodle into MOODLE_401_STABLE 2023-03-14 21:43:31 +08:00
Laurent David 8ee689f612 MDL-70976 core_files: Allow for draft files url inserted in content
* The file file_remove_editor_orphaned_files should take into account URL that
have been embedded in a tag content instead of an attribute (like src attribute)
* This will fix issue with inserting H5P content in calendar events.
2023-03-14 08:48:32 +01:00
Juan Segarra Montesinos a003b3b882 MDL-76257 core: Activity intro should honor user preference on creation 2023-03-14 06:07:28 +01:00
AMOS bot 9617555887 Automatically generated installer lang files 2023-03-14 00:07:42 +00:00
Tim Hunt a5238d8c94 MDL-77611 tool_uploaduser: fix phpunit assumptions about profile fields 2023-03-13 13:35:38 +00:00
Paul Holden 34e2d74921 MDL-77608 mod_h5pactivity: namespace component lib testcase. 2023-03-13 09:43:57 +00:00
Simey Lameze 76cb263244 MDL-77574 myoverview: wait until next button exists before clicking 2023-03-13 14:12:26 +08:00
Jake Dallimore 4ce5755a63 MDL-77382 core: fix error handling in oauth2 callback for auth'd users
Pass the errors back to the calling code when the user is authenticated,
otherwise, fall back on the existing redirection to the login page.
2023-03-13 10:48:21 +08:00
AMOS bot a509b37926 Automatically generated installer lang files 2023-03-12 00:07:50 +00:00
Petr Skoda 7e96a1c887 MDL-76680 core: disable $USER->ignoresesskey on next page 2023-03-11 10:37:24 +01:00
Jun Pataleta 033858e249 Moodle release 4.1.2 2023-03-11 13:10:39 +08:00
Jun Pataleta 83c3ac53bf weekly release 4.1.1+ 2023-03-10 22:09:52 +08:00
Jun Pataleta 1e5f8ee1a2 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-10 22:09:50 +08:00
Ilya Tregubov d5d64e1c8b Merge branch 'MDL-77429-401-fix' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-10 14:52:02 +08:00
Andrew Nicols f8b1b4092f MDL-77429 course: Change course date to previous day
When a test runs just after midnight, and the user time zone is not the
same as the server timezone, and the course is created using a generator
(which runs in server time zone) but the UI presented in the user
timezone, the course start time is still in the future.

We need to create the course a day earlier to ensure that the "This
week" indicator is in the correct day.
2023-03-10 14:11:23 +08:00
Andrew Nicols ca01668e32 MDL-77037 core_course: Add new courseindex test to classic excludelist 2023-03-10 13:32:04 +08:00
Jun Pataleta 70108cf09b Merge branch 'MDL-77458-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-10 12:06:10 +08:00
Jake Dallimore b9dedcd53e Merge branch 'MDL-77517-401' of https://github.com/juancs/moodle into MOODLE_401_STABLE 2023-03-10 11:39:52 +08:00
Andrew Nicols aca52fa5f0 Merge branch 'MDL-77530-tool-task-checks-MOODLE_401_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_401_STABLE 2023-03-10 11:30:45 +08:00
Jake Dallimore 65cb8e0792 Merge branch 'MDL-77219-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-03-10 10:36:25 +08:00
Jun Pataleta 9bdbff4f3a Merge branch 'MDL-76603-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-03-10 10:14:57 +08:00
Shamim Rezaie 47a1789f12 MDL-76603 gradingforms: Some A11y fixes on editing form
- Use span instead of dummy input elements because form elements need a
  label
- Sufficient size for target is at least 24px by 24px (Success Criteria
  2.5.8)
2023-03-10 10:11:34 +08:00
Shamim Rezaie 394a0520d0 MDL-76603 mod_assign: Move advanced grading grades out of the tables 2023-03-10 10:11:34 +08:00
Shamim Rezaie 79491b8a90 MDL-76603 gradingform_rubric: preserve bg colour on hover 2023-03-10 10:11:34 +08:00
Shamim Rezaie 68460cad9b MDL-76603 gradingform_rubric: fix roles
- set the role of table to none
- moved aria-label from <table> element (that doesn't has role="none")
  to the element that has the radiogroup role
- if it's not radiogroup/radio, it is list/listitem
- removed aria-label from the rubric table and used caption instead
2023-03-10 10:11:34 +08:00
Andrew Nicols 23e2b0358c Merge branch 'MDL-76849-401-5' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-03-10 09:29:40 +08:00
Jun Pataleta 98f95845b1 Merge branch 'MDL-70613-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-10 09:19:39 +08:00
Sara Arjona 69a91b30cc Merge branch 'MDL-77323-401' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_401_STABLE 2023-03-09 16:48:39 +01:00
Paul Holden 2ff317ac8a MDL-70613 mod_feedback: cast feedback text values for table sorting.
Specifically avoids Oracle ORA-00932 (inconsistent CLOB datatype).
2023-03-09 14:59:11 +00:00
Andrew Nicols 8112ce8376 Merge branch 'MDL-77329-401-clr' of https://github.com/ferranrecio/moodle into MOODLE_401_STABLE 2023-03-09 22:19:08 +08:00
Andrew Nicols 5feea19e46 Merge branch 'MDL-77463-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-03-09 22:10:25 +08:00
Andrew Nicols d5b43c03a5 Merge branch 'MDL-77429-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-03-09 22:03:46 +08:00
Andrew Nicols f262b2223f MDL-77037 core_course: Coding style fix in Behat feature 2023-03-09 21:59:41 +08:00
Andrew Nicols 3c1c543c53 Merge branch 'MDL-77037-401' of https://github.com/laurentdavid/moodle into MOODLE_401_STABLE 2023-03-09 21:59:37 +08:00
James C 370c67e7dc MDL-77329 course: Prevent collapse state loss 2023-03-09 11:56:00 +01:00
Sara Arjona ab34f215a9 Merge branch 'MDL-76940-401' of https://github.com/laurentdavid/moodle into MOODLE_401_STABLE 2023-03-09 10:54:50 +01:00
Jun Pataleta 002f9eb7da Merge branch 'MDL-77533-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-09 16:35:24 +08:00
Jun Pataleta bb61d8392b Merge branch 'MDL-77559-401-2' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-09 15:57:44 +08:00
Laurent David bdd1708455 MDL-77037 core_courseformat: Refresh course index
* Refresh course index when language change
2023-03-09 08:44:22 +01:00
Brendan Heywood 3c86170a8d MDL-77530 tool_task: Fix coding errors in checks 2023-03-09 15:44:01 +11:00
Andrew Nicols 155f08fc68 Merge branch 'MDL-77420-401' of https://github.com/ferranrecio/moodle into MOODLE_401_STABLE 2023-03-09 11:58:41 +08:00
Andrew Nicols 3a8b5523d5 Merge branch 'MDL-77014-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-03-09 11:42:03 +08:00
Andrew Nicols fbc3f7f245 Merge branch '76945-bootstrap-dropdowns-401' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_401_STABLE 2023-03-09 10:54:35 +08:00
Tim Hunt 42f41fc174 MDL-77467 retore: add progress tracking to potentially slow steps 2023-03-09 10:46:51 +08:00
Jun Pataleta ed6b43b4f2 Merge branch 'MDL-77225_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-09 10:43:06 +08:00
Andrew Nicols 6a25c5c8d0 Merge branch 'MDL-77418-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-09 10:36:06 +08:00
Andrew Nicols 3a363d0eec Merge branch 'MOODLE_401_STABLE' of https://github.com/fcbsd/moodle into MOODLE_401_STABLE 2023-03-09 10:29:43 +08:00
Andrew Nicols 783c542d31 Merge branch 'MDL-77539-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-09 10:09:41 +08:00
Andrew Nicols cd48ae56c7 MDL-77559 js: Rebuild all JS with Node 16 2023-03-09 09:53:19 +08:00
Jun Pataleta d5cf25faf5 MDL-76849 qtype_essay: Allow question number inclusion in answer fields
* Have the following classes extend qtype_essay_format_renderer_base
  as they have been meant to:
  - qtype_essay_format_editor_renderer
  - qtype_essay_format_noinline_renderer
  - qtype_essay_format_plain_renderer
* Add a question_display_options instance variable for
qtype_essay_format_renderer_base so its subclasses can use it to
generate the label for their respective answer fields.
2023-03-09 08:57:47 +08:00
Jun Pataleta 787278601c MDL-76849 qtype_shortanswer: Include question number in answer fields 2023-03-09 08:57:47 +08:00
Jun Pataleta 880532c71a MDL-76849 qtype_numerical: Include question number in answer fields
* Also covers its qtype_calculated and qtype_calculatedsimple
which extend its renderer class
2023-03-09 08:57:47 +08:00
Jun Pataleta 03b549f225 MDL-76849 qtype_multianswer: Include question number in answer fields
* Add the question number to the answer fields if it's available.
* Improve multiple choice question accessibility:
  - Label the multiple choice question groups appropriately by
    enclosing them in fieldset tags and applying sr-only legend tags to
    label them.
  - Apply Bootstrap form-check classes to the radio buttons, so they
    are rendered better and become responsive as well. This also helps
    avoid the use of the table element for layout purposes when
    rendering horizontal multiple choice sub-questions.
2023-03-09 08:57:47 +08:00
Jun Pataleta 7b6ff446f4 MDL-76849 qtype_match: Include question number in answer fields 2023-03-09 08:57:47 +08:00
Jun Pataleta 9ddbc2d7f0 MDL-76849 qtype_truefalse: Include question number in answer fields
* Improve accessibility as well by grouping the radio buttons
in a fieldset.
2023-03-09 08:57:47 +08:00
Jun Pataleta fbffd9b148 MDL-76849 qtype_multichoice: Include question number in answer fields
* Improve accessibility as well by grouping the radio buttons/checkboxes
in a fieldset.
2023-03-09 08:57:47 +08:00
Jun Pataleta 2ad0871a82 MDL-76849 qtype_ddwtos: Include question number in answer fields
* Plus include the item number so users will have an idea which blank
numbers they are currently on.
2023-03-09 08:57:47 +08:00
Jun Pataleta 5847b0026e MDL-76849 qtype_gapselect: Include question number in answer fields 2023-03-09 08:57:47 +08:00
Jun Pataleta 6c3f1d55a8 MDL-76849 qtype: Add a questionidentifier instance variable
* Add an instance variable to question_display_options to store the
identifier associated with the question being rendered.
* This information can be used by question type plugins to improve the
accessibility of the answer fields being rendered by adding the
question identifier to the answer fields' labels.
* Adding the question identifier to the label can be achieved by using
question_display_options::add_question_identifier_to_label().

Co-authored-by: Tim Hunt <t.j.hunt@open.ac.uk>
2023-03-09 08:57:47 +08:00
Andrew Nicols 04787fbbc9 MDL-77559 js: Revert "MDL-75012 core: Bump NodeJS version requirements"
This reverts commit 3416ee9890.
2023-03-09 08:21:36 +08:00
Andrew Nicols 8c13a1b817 MDL-77559 js: Revert "MDL-75012 js: Bump standard dependencies"
This reverts commit 456446215e.
2023-03-09 08:21:22 +08:00
Andrew Nicols fefd6f2bd8 MDL-77559 js: Revert "MDL-75012 js: Remove grunt-contrib-uglify"
This reverts commit ca4614c299.
2023-03-09 08:21:19 +08:00
Andrew Nicols d209e2cc57 MDL-77559 js: Revert "MDL-75012 js: Bump stylelint and components"
This reverts commit 644e9da8bb.
2023-03-09 08:21:15 +08:00
Andrew Nicols a96fcc22ca MDL-77559 js: Revert "MDL-75012 js: Update browserslist"
This reverts commit bf81d5f0ba.
2023-03-09 08:21:12 +08:00
Andrew Nicols 230f8247e8 MDL-77559 js: Revert "MDL-75012 js: Bump node-sass"
This reverts commit 0a0266ae5e.
2023-03-09 08:21:07 +08:00
Andrew Nicols 91eb06347e MDL-77559 js: Revert "MDL-75012 js: Audit fix"
This reverts commit 8960a6ee91.
2023-03-09 08:21:03 +08:00
Andrew Nicols 63ecbc57d6 MDL-77559 js: Revert "MDL-75012 js: Use our own jsdoc wrapper"
This reverts commit 89f7402fc2.
2023-03-09 08:20:57 +08:00
Andrew Nicols f483380e01 MDL-77559 js: Revert "MDL-75012 js: Bump shifter to new version"
This reverts commit c2c1727dd5.
2023-03-09 08:20:53 +08:00
Andrew Nicols 0da20453f7 MDL-77559 js: Revert "MDL-75012 js: Put shifter on a diet"
This reverts commit 73181c1310.
2023-03-09 08:20:49 +08:00
Andrew Nicols c90a6263bc MDL-77559 js: Revert "MDL-75012 js: Remove unused babel-preset-minify dependency"
This reverts commit 364458e36a.
2023-03-09 08:20:45 +08:00
Andrew Nicols df1dc82fee MDL-77559 js: Revert "MDL-75012 js: Bump Babel dependencies"
This reverts commit b963401b8f.
2023-03-09 08:20:42 +08:00
Andrew Nicols 34cae8d339 MDL-77559 js: Revert "MDL-75012 js: Remove orphaned source maps"
This reverts commit 05cdfa4da4.
2023-03-09 08:20:05 +08:00
AMOS bot 733702e72f Automatically generated installer lang files 2023-03-09 00:07:41 +00:00
Tim Hunt 7db1da61ee MDL-77225 questions: fix regrade of descriptions in finished attempts
The added logic is similar to the logic in other behaviours, and the new test fails without it.
2023-03-08 19:00:43 +00:00
Sara Arjona 6aafa1eea6 Merge branch 'MDL-77464_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-08 16:14:47 +01:00
Laurent David ed08a4ee52 MDL-76940 core_courseformat: Index refreshing when role switch
* Hidden sections and content should not visible to students when switching role
2023-03-08 11:51:51 +01:00
Ilya Tregubov 4eb1b67d68 Merge branch 'MDL-77414-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-03-08 17:05:13 +08:00
Angelia Dela Cruz 598b18417d MDL-77463 Behat: Coverage for assign submission notification to teacher 2023-03-08 17:01:35 +08:00
Angelia Dela Cruz cd609bd915 MDL-77429 Behat: Add coverage for changing course format as teacher 2023-03-08 15:48:28 +08:00
Luca Bösch 5e4d3c4d5b MDL-77014 course: Single activity format course title multilang. 2023-03-08 08:05:14 +01:00
Angelia Dela Cruz 311eb0ddd2 MDL-77414 Behat: Coverage for "Require all group members submit" setting 2023-03-08 14:47:53 +08:00
Dani Palou c90c9b04f6 MDL-77550 lesson: Format decimals in feedback page 2023-03-08 07:46:16 +01:00
Sara Arjona 6d70b125a8 Merge branch 'MDL-77440_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-08 07:23:43 +01:00
Jun Pataleta 38cc21db3c Merge branch 'MDL-77472-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-08 11:53:41 +08:00
Petr Skoda 3caeef44d2 MDL-77524 filter_algebra: fix error message 2023-03-08 11:26:58 +08:00
Paul Holden 9a6fdc2aeb MDL-75517 report_participation: filter report by viewable roles only. 2023-03-08 10:37:42 +08:00
Michael Hawkins 5e57bfffac MDL-77204 mod_wiki: Clean filename in Moodle1 backup 2023-03-08 10:33:34 +08:00
Paul Holden fac46a19f7 MDL-77046 availability: validate profile field in condition. 2023-03-08 10:24:17 +08:00
Paul Holden 01fc104779 MDL-76809 gradereport_history: pre-filter report userids filter.
Ensure current user is able to access each of the provided userids.
2023-03-08 10:00:50 +08:00
Ilya Tregubov e7e5b659e8 Merge branch 'MDL-77446-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-03-08 09:18:54 +08:00
Andrew Nicols b9f8373e3f MDL-77470 editor_tiny: Apply upstream security fixes
- CVE-2022-23494
2023-03-08 01:00:30 +00:00
Petr Skoda 0292427f51 MDL-76645 filter_data: fix link title attribute 2023-03-08 01:00:30 +00:00
Paul Holden 0518f875cf MDL-77129 tool_lp: remove redundant call to set page header. 2023-03-08 01:00:30 +00:00
Paul Holden c2d0c7359d MDL-77008 mod_data: require sesskey to reset module templates. 2023-03-08 01:00:30 +00:00
Lars Bonczek d5ec540381 MDL-75659 core: Don't render component argument twice in mustache pix helper 2023-03-08 01:00:30 +00:00
Jun Pataleta 3c00ca0bb2 Merge branch 'MDL-77416-401-enfix' of https://github.com/vmdef/moodle into MOODLE_401_STABLE 2023-03-08 08:50:24 +08:00
AMOS bot 3800bd6cfd Automatically generated installer lang files 2023-03-08 00:07:44 +00:00
Roberto Bravo 9fbd5fb219 MDL-77256 tool_uploaduser: fix get allowed roles for courses
During user upload the permission to assign roles is checked in the wrong context
2023-03-07 18:41:00 +01:00
Tim Hunt bdcf29ab29 MDL-77464 questions: regrading was losing question_attempt metadata
This is very similar to MDL-77090, but at the time, I missed that this
also needed to be handled. (Question metadata is, I think, only used
by the quiz 'Try another question like this one' feature.)
2023-03-07 13:45:04 +00:00
Tim Hunt 795e8ac70a MDL-77464 questions: update comments in question_attempt_step
The class comment had some inaccuracies which I fixed.
I also replaced all uses of @link with @see.
2023-03-07 13:44:59 +00:00
Jun Pataleta 550d9c51ca MDL-76849 question: New lang strings for answer fields 2023-03-07 21:00:32 +08:00
Sara Arjona e3066f3efd MDL-77219 behat: Fix issue with headless
Although the error in the "I check that I can import recordings into
the Recording activity and then if I delete them" scenario is unrelated
to this patch, this commit needs to be applied too, in order to avoid
behat failures (because the "Import recording links" button is in the
edge of the window).

This is a backport of MDL-74272.
2023-03-07 11:03:23 +01:00
Sara Arjona acc250a824 MDL-77219 theme_boost: Remove plugin name on course page
In 4.0, the plugin name was added above their name. Based on the community
feedback and the research done by the UX team, this needs to be removed.
This commit removes the activity name when edit mode is disabled.

This is a backport of MDL-74272.
2023-03-07 11:03:23 +01:00
Angelia Dela Cruz 602061bf21 MDL-77446 Behat: Add coverage for changing uploaded file details 2023-03-07 16:12:07 +08:00
Andrew Nicols 7a5f859f08 Merge branch 'MDL-77094_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-07 12:10:18 +08:00
Andrew Nicols 7f4d60b38a Merge branch 'MDL-77336-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-03-07 12:02:08 +08:00
AMOS bot ca6167bd2d Automatically generated installer lang files 2023-03-07 00:07:41 +00:00
Tim Hunt 99a6ea40ac MDL-77440 quiz: fix nav error reviewing after redoing a question 2023-03-06 16:12:26 +00:00
Sara Arjona f7ac8b3ff9 Merge branch 'MDL-77460-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-03-06 16:34:03 +01:00
Paul Holden 1818a6841b MDL-77539 blog: null coalesce external blog form name/description.
We can't pass null to most string related functions (e.g. `trim`) in
PHP8.1 onwards.
2023-03-06 14:49:56 +00:00
Paul Holden f46fe1e78e MDL-77472 grade: correct URL param type for adding tracking params. 2023-03-06 09:49:54 +00:00
Meirza 35ea7d00c0 MDL-77336 admin: fix typo in adminpreset data settings. 2023-03-06 16:32:25 +07:00
Paul Holden 859f2c9d5d MDL-77533 customfield: fix exception thrown during handler retrieval. 2023-03-06 09:27:14 +00:00
Andrew Nicols 91ae0abd0a Merge branch 'MDL-77462_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-05 22:12:35 +08:00
Juan Segarra Montesinos f9ec44d858 MDL-77517 js: Disable "Edit mode" button when clicked
When clicked, disable the "Edit mode" button just before doing a
redirection. It's been reported that after clicling several times the
button, an inconsistent state between the button and the editing mode is
achieved. The patch mitigates the issue.
2023-03-05 07:09:24 +01:00
Víctor Déniz 98f10149d6 MDL-77416 lang: Use fixed strings in tests 2023-03-03 13:27:01 +00:00
Helen Foster 192bad5ba2 MDL-77416 lang: Import fixed English strings (en_fix) 2023-03-03 13:25:53 +00:00
Tim Hunt 633ad42d6e MDL-77462 core_question: avoid passing null to preg_match 2023-03-03 08:48:09 +00:00
Jun Pataleta 21ef5c5f84 Merge branch 'MDL-77428-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-03-03 16:35:12 +08:00
Laurent David a00d72c622 MDL-76339 mod_bigbluebuttonbn: Update dismissed recordings
* When the server is not reachable (or recordings are not reacheable)
the recording is set to RECORDING_STATUS_DISMISSED and is then
not visible in the list.
* Add a CLI script to solve potential issue with DISMISSED recordings
2023-03-03 06:39:02 +01:00
Jake Dallimore f49f934786 weekly release 4.1.1+ 2023-03-03 11:08:32 +08:00
Jake Dallimore 74fe22032b Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-03 11:08:29 +08:00
Andrew Nicols 2169252d26 MDL-77458 core: Add supported php version info to phpcs config 2023-03-02 20:37:52 +08:00
Simey Lameze 889290257d MDL-77460 behat: improve roles.feature test 2023-03-02 18:25:11 +08:00
Angelia Dela Cruz 8422698a06 MDL-77428 Behat: Add coverage for forum post word count 2023-03-02 13:46:02 +08:00
Jun Pataleta 05cdfa4da4 MDL-75012 js: Remove orphaned source maps 2023-03-02 13:11:43 +08:00
Jun Pataleta a377bf30c4 Merge branch 'MDL-75012-401-5' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-02 12:31:09 +08:00
Andrew Nicols 288620b0b4 MDL-75012 js: Full build of all grunt things 2023-03-02 12:15:25 +08:00
Andrew Nicols b963401b8f MDL-75012 js: Bump Babel dependencies
Please note that whilst some dependencies have higher versions
available, these are not compatible at this time.
2023-03-02 12:15:25 +08:00
Andrew Nicols 364458e36a MDL-75012 js: Remove unused babel-preset-minify dependency 2023-03-02 12:15:25 +08:00
Andrew Nicols ccec093aaa Merge branch 'MDL-76825-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-03-02 12:05:25 +08:00
Jun Pataleta 3b9a4c5e69 Merge branch 'MDL-75719-401-4' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2023-03-02 12:02:29 +08:00
Andrew Nicols 74fe0b04be MDL-77141 gradereport_user: Adjust course name to fix test 2023-03-02 11:50:08 +08:00
Andrew Nicols 4e8cd1c7da Merge branch 'MDL-77141-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-03-02 11:49:55 +08:00
Jake Dallimore 841f61af08 Merge branch 'MDL-77461-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-02 11:42:40 +08:00
Jake Dallimore 0792cbf3c8 Merge branch 'MDL-77400-401' of https://github.com/dpalou/moodle into MOODLE_401_STABLE 2023-03-02 11:27:16 +08:00
Paul Holden 1eed4bca84 MDL-77368 forms: remove console logging of upload DOM element. 2023-03-02 11:19:48 +08:00
Andrew Nicols d784e19d9b MDL-77461 behat: Use get_course_id instead of DB fetch 2023-03-02 11:06:45 +08:00
Ilya Tregubov 1e26496cdd MDL-75719 completion: Add Behat scenario for completion states. 2023-03-02 11:04:08 +08:00
Ilya Tregubov 23915a35ae MDL-75719 completion: Fix unit tests and Behat tests.
Fix tests since we changed behavior of completions (completion
state an UI).
2023-03-02 11:04:08 +08:00
Ilya Tregubov 3ebd25ff48 MDL-75719 completion: Fix viewed criteria.
When we unlock completion criteria and save changes 'viewed' criteria
still should be completed if user has viewed activity before. Seems
that that was broken by recent changes. Fixing here.
2023-03-02 11:04:08 +08:00
Ilya Tregubov 7e3d9db579 MDL-75719 completion: Fix completion state for hidden grade items.
For hidden grade items we used to mark students as completed if
they have any grade. But this was not working correctly when we
also set pass grade for activity and completion criteria based
on pass grade. So we will have these completion states

Competion criteria 'Receive grade':
No grade - COMPLETION_INCOMPLETE
Grade visible, achieved passing grade - COMPLETION_COMPLETE_PASS
Grade visible, failed passing grade - COMPLETION_COMPLETE_FAIL
Grade hidden - COMPLETION_COMPLETE

Completion criteris 'Receive passing grade'
No grade - COMPLETION_INCOMPLETE
Grade visible, achieved passing grade - COMPLETION_COMPLETE_PASS
Grade visible, failed passing grade - COMPLETION_COMPLETE_FAIL
Grade hidden, achieved passing grade - COMPLETION_COMPLETE_PASS
Grade hidden, failed passing grade - COMPLETION_COMPLETE_FAIL_HIDDEN
2023-03-02 11:04:08 +08:00
Jake Dallimore b9ee80aae7 Merge branch 'MDL-77318-401' of https://github.com/Utdanningsdirektoratet/moodle into MOODLE_401_STABLE 2023-03-02 10:55:56 +08:00
Andrew Nicols 746580aa68 Merge branch 'MDL-77150-401' of https://github.com/roland04/moodle into MOODLE_401_STABLE 2023-03-02 10:48:47 +08:00
David Mudrák a31b0acaa5 MDL-75534 Fix usermodified in very old forum discussions
Very early Moodle versions used to leave the field empty. Recent Moodle
versions expect that the value always links to an existing user account.
2023-03-02 10:41:41 +08:00
Jake Dallimore b4944cadca Merge branch 'MDL-76298_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-02 10:13:04 +08:00
Jun Pataleta 4dda4e69fe Merge branch 'MDL-77413-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-03-02 09:45:56 +08:00
Andrew Nicols 044e573ea1 Merge branch 'MDL-77391-m401' of https://github.com/jrchamp/moodle into MOODLE_401_STABLE 2023-03-02 09:26:56 +08:00
Andrew Nicols 12843909d1 Merge branch 'MDL-77321-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-02 09:25:03 +08:00
Jun Pataleta ba428c3255 Merge branch 'MDL-74586-401-sqlrss' of https://github.com/mudrd8mz/moodle into MOODLE_401_STABLE 2023-03-02 08:58:22 +08:00
Jun Pataleta a3b8e7867a Merge branch 'MDL-76938_restore_comments_401' of https://github.com/davosmith/moodle into MOODLE_401_STABLE 2023-03-02 08:42:05 +08:00
AMOS bot 58d27b5e04 Automatically generated installer lang files 2023-03-02 00:07:48 +00:00
fcbsd d35affa0fd MDL-77365 count_words: Make span> an inline tag
This commit merges the fix and test for the incorrect counting of
words in essay type questions. The issue is due <span> tags not being
counted as inline tags.
2023-03-01 16:13:44 +00:00
Jun Pataleta 2c290f4bb8 Merge branch 'MDL-77430_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-03-01 23:59:28 +08:00
Jun Pataleta 73f5e82992 Merge branch 'MDL-77417_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-03-01 23:54:21 +08:00
Mikel Martín 855839d195 MDL-77150 core_table: Fix classes added as columnsattributes are ignored
Fix columnattributes with key 'class' being ingored by adding them to every 'column_class'.
2023-03-01 11:17:05 +01:00
hieuvu d07d010288 MDL-77323 question: Prevent drag item sent into two drop zone 2023-03-01 14:47:41 +07:00
Andrew Nicols 576afc3ba6 Merge branch 'MDL-58945_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-03-01 10:55:38 +08:00
Andrew Nicols 3df3b9dfb2 Merge branch 'MDL-74585-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-01 10:51:45 +08:00
Andrew Nicols 61f38c0663 Merge branch 'MDL-77322_basicauth_checkbox-401' of https://github.com/leonstr/moodle into MOODLE_401_STABLE 2023-03-01 10:49:38 +08:00
Andrew Nicols 4ade597a20 Merge branch 'MDL-72727-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-03-01 10:46:49 +08:00
AMOS bot 9e79eff429 Automatically generated installer lang files 2023-03-01 00:07:39 +00:00
Jonathan Champ 35a59dd032 MDL-77391 question admin: further improve query peformance in qtypes.php 2023-02-28 10:18:28 -05:00
Andrew Nicols bac48ffee3 Merge branch 'MDL-73018-M401_bump-travis-and-gha-to-use-php81-instead-of-php80' of https://github.com/ziegenberg/moodle into MOODLE_401_STABLE 2023-02-28 23:03:08 +08:00
Andrew Nicols 2a0980837d Merge branch 'MDL-77097_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-02-28 22:13:39 +08:00
David Mudrák cfc2fca94a MDL-74586 rss: Make rss_get_userid_from_token() use table index
Due to missing `AND k.script = 'rss'` condition, the query did not make
use of the existing script-value compound index defined for the table.
So it had to perform the full sequential scan for all rows when
searching for the token. This had serious performance issues on sites
with many users, especially in case on non-existing token / key.
2023-02-28 13:25:45 +01:00
Eloy Lafuente (stronk7) be32856374 MDL-77430 plugininfo: php81 deprecation warnings on missing plugins
Whenever some plugin is missing from disk but installed, the plugins
page (and the upgrade) shows them as "missing from disk". Still, the
code tries to do things with their directory that, now, is null.

That was silently defaulting to '' in previous php versions, but
php81 emits a deprecated warning. So we have to check for them.
2023-02-28 11:41:04 +01:00
Daniel Ziegenberg 5ab061ca7d MDL-73018 ci: Move highest PHP to 8.1 (from current 8.0)
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2023-02-28 11:24:28 +01:00
Dani Palou 8045e5e3dd MDL-77400 reportbuilder: Fix enrolment status return type 2023-02-28 10:41:38 +01:00
Angelia Dela Cruz 03035dcf71 MDL-77413 Behat: Minor changes to optimise the existing tests 2023-02-28 17:22:25 +08:00
Angelia Dela Cruz 93525ebdd9 MDL-77413 Behat: Add coverage to verify groups can have a picture 2023-02-28 17:22:04 +08:00
Jun Pataleta 21afd4548b Merge branch 'MDL-77248-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-02-28 15:46:49 +08:00
Andrew Nicols 1ca40fa664 MDL-77248 mod_bigbluebuttonbn: Remove unused dpa pages 2023-02-28 12:04:51 +08:00
Andrew Nicols 3c262bb46f MDL-77248 mod_bigbluebuttonbn: Set dpa accepted when creating activities
This only applies when creating activities using the test data
generator.
2023-02-28 12:04:51 +08:00
Andrew Nicols 9d5e363b41 MDL-77248 core: Move pre_enable_plugin_actions callback to enable_plugin 2023-02-28 12:04:51 +08:00
Andrew Nicols 73181c1310 MDL-75012 js: Put shifter on a diet
This commit switches to a new custom version of Shifter which sees it
put on a massive diet.

Many of the standard Shifter features are totally unused by Moodle, but
they add dependency spaghetti. Some of those dependencies will start to
cause us issues as they have not been updated for a very long time, are
no longer maintained, and are no longer compatible with anything
resembling a recent version of NodeJS.
2023-02-28 10:22:45 +08:00
Andrew Nicols c2c1727dd5 MDL-75012 js: Bump shifter to new version
This resolves an issue identified in 77083 which identified that GitHub
hashes shouldn't be treated as repeatable.

Whilst GitHub have reverted this change, it's still worth making this
change.
2023-02-28 10:19:51 +08:00
Andrew Nicols 89f7402fc2 MDL-75012 js: Use our own jsdoc wrapper
grunt-jsdoc is abandoned and only works with an older version of jsdoc.

This is a very simple wrapper around jsdoc itself.
2023-02-28 10:19:51 +08:00
Andrew Nicols 8960a6ee91 MDL-75012 js: Audit fix 2023-02-28 10:19:51 +08:00
Andrew Nicols 0a0266ae5e MDL-75012 js: Bump node-sass 2023-02-28 10:19:51 +08:00
Andrew Nicols bf81d5f0ba MDL-75012 js: Update browserslist
To avoid build changes we exclude older versions of Android browser
2023-02-28 10:19:51 +08:00
Andrew Nicols 644e9da8bb MDL-75012 js: Bump stylelint and components 2023-02-28 10:19:50 +08:00
Andrew Nicols ca4614c299 MDL-75012 js: Remove grunt-contrib-uglify
We stopped using this when we updated our processes to support ESMs in
MDL-62497. Removal of the dependency was missed at the time.
2023-02-28 10:19:50 +08:00
Andrew Nicols 456446215e MDL-75012 js: Bump standard dependencies
This change bumps dependencies which have no impact upon the build
process
2023-02-28 10:19:50 +08:00
Andrew Nicols 3416ee9890 MDL-75012 core: Bump NodeJS version requirements 2023-02-28 10:19:50 +08:00
Jun Pataleta b8a85811ec Merge branch 'MDL-76956-m401' of https://github.com/sammarshallou/moodle into MOODLE_401_STABLE 2023-02-28 10:07:16 +08:00
Jun Pataleta bef0d516b4 Merge branch 'MDL-77276-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-02-28 10:04:59 +08:00
Paul Holden cf25f53743 MDL-72727 mod_forum: prevent default favourite toggle click event.
Allow the repository call to the web service method to complete before
re-directing, otherwise the call may not complete and/or races against
the page reload causing random Behat errors.
2023-02-27 23:30:33 +00:00
Paul Holden 53c2d0ad15 MDL-77321 reportbuilder: cache list of loaded reports per user.
Since 0188af39 we've cached loaded reports, however there was an
edge case in those report sources that relied on the current user
as part of their own initialization (e.g. checking capabilities).

Co-authored-by: Marina Glancy <marina@moodle.com>
2023-02-27 21:16:23 +00:00
Paul Holden 72f7128665 MDL-77418 mod_feedback: defensive use of analysis item data. 2023-02-27 19:21:27 +00:00
Ferran Recio c91c4b39e9 MDL-77420 core: fix modal close button on remove on close 2023-02-27 19:15:12 +01:00
Eloy Lafuente (stronk7) 4e5ed8fdcd MDL-77417 behat: behat_error_handler meets deprecation error types
Right now, any E_DEPRECATED, E_USER_DEPRECATED error type leads
to exception in behat runs, because the behat error handled is
not aware of them. See MDL-38041 for the initial implementation.

We don't want that to happen and they must behave like other "low"
error types (notices, warnings...), that will be reported in logs
or output, but won't trigger any exception, so the test can continue.

This commit just adds those 2 "new" error types to the handler,
providing the very same behaviour for them than the rest.
2023-02-27 09:37:42 +01:00
Leon Stringer 76b8862518 MDL-77322 oauth2: Fix basicauth checkbox
Following MDL-61880 you could turn on "Authenticate token requests via
HTTP headers" but not turn this off again.  This change fixes this and
adds a Behat scenario to test toggling this checkbox is saved
correctly.
2023-02-24 17:27:05 +00:00
Eloy Lafuente (stronk7) 7aeb3a8b6e MDL-77097 store_mongodb: keep compatibility with PHP 7.4
Replaced 4 occurrences of get_debug_type() by gettype() to keep PHP 7.4 compatibility. Note this
has not been applied to 4.2dev and up because, there, it's safe to use get_debug_type().
2023-02-24 12:38:47 +01:00
Sara Arjona a8bb233a56 MDL-77276 mod_data: Update reset single template string
When a single template is reset, the string displayed in the modal should
not reference to "all templates" to avoid confusion, as it was shown in the
original prototype for the 4.1 database project.
2023-02-24 11:23:09 +01:00
Luca Bösch c7d9fa690d MDL-77141 gradebook: Correct course name in user report 2023-02-24 10:43:16 +01:00
Jun Pataleta a31f5830bd weekly release 4.1.1+ 2023-02-24 15:43:22 +08:00
Jun Pataleta 47db6bc3f9 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-02-24 15:43:19 +08:00
Matt Porritt 3258f4cf3e MDL-77376 Licensing: Update trademark.txt
Update Trademark policy in TRADEMARK.txt to
be in line with advice from the Moodle HQ
legal team
2023-02-24 12:33:36 +08:00
Andrew Nicols 96ca10cc73 Merge branch 'MDL-76611-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-23 12:01:30 +08:00
Andrew Nicols 6c97d7ba5b Merge branch 'MDL-76843_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-02-23 11:52:47 +08:00
Andrew Nicols 01cdda182c Merge branch 'MDL-77271-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-02-23 11:49:26 +08:00
Ilya Tregubov a47e5311af MDL-74433 mod_assign: Fix version.php 2023-02-23 11:47:27 +08:00
Andrew Nicols 296ed92898 Merge branch 'MDL-77290-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-02-23 11:46:24 +08:00
Andrew Nicols 1e28db3e01 Merge branch 'MDL-76735-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-02-23 11:34:36 +08:00
Ilya Tregubov 1f88fcdb09 Merge branch 'MDL-74433_401' of https://github.com/larsbonczek/moodle into MOODLE_401_STABLE 2023-02-23 11:22:32 +08:00
Andrew Nicols 352db923e1 Merge branch 'MDL-77352-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-23 11:20:16 +08:00
Andrew Nicols a0c79271fc Merge branch 'MDL-77354-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-02-23 10:49:51 +08:00
Andrew Nicols 9d97d0c519 Merge branch 'MDL-76577/401' of https://github.com/skodak/moodle into MOODLE_401_STABLE 2023-02-23 10:46:38 +08:00
Andrew Nicols 352affa056 Merge branch 'MDL-75005_41' of https://github.com/skodak/moodle into MOODLE_401_STABLE 2023-02-23 10:29:23 +08:00
Andrew Nicols f8d2c0207b MDL-77230 mod_feedback: Coding style violation fixes 2023-02-23 10:06:03 +08:00
Andrew Nicols 506604c911 Merge branch 'MDL-77230-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-02-23 10:05:58 +08:00
Ilya Tregubov 183b705fe4 Merge branch 'MDL-76873-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-23 09:58:09 +08:00
Andrew Nicols f559c0ad59 Merge branch 'MDL-77210_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-02-23 09:22:52 +08:00
Andrew Nicols 2781ef309c Merge branch 'MDL-77149-m401' of https://github.com/sammarshallou/moodle into MOODLE_401_STABLE 2023-02-23 09:20:44 +08:00
Paul Holden 58d85f21da MDL-74585 core: pass string identifier/component to network keepalive.
Avoid passing potentially large amounts of data in the page AMD call,
allow the `core/network` module to load actual string content itself.
2023-02-22 16:20:34 +00:00
Tim Hunt c4de73821a MDL-76843 quiz: add test to verify random essay stats now work 2023-02-22 15:07:45 +00:00
Tim Hunt 291d241981 MDL-76843 quiz: fix statistics questions for missing questions 2023-02-22 15:07:40 +00:00
Tim Hunt d6f0ad4980 MDL-76843 questions behat: enhancements requried to test this issue
* New steps to set up certian sorts of broken test data.
* Fix qtype_essay_question::un_summarise_response().
2023-02-22 15:05:41 +00:00
Tim Hunt 40d6ba9505 MDL-76298 drag-drop questions: validate the questions are complete
Previously, it was possible to create drag-drop markers and onto image
questions without any drag items or drop zones. This was non-sensical,
and broke statistics calculations.

So, missing validation added, and random guess score calculation made
robust.
2023-02-22 12:06:34 +00:00
Tim Hunt 32bf205db3 MDL-58945 qbank: showing q text should give option of plain or full 2023-02-22 11:17:52 +00:00
Ilya Tregubov 30cd583d5d Merge branch 'MDL-77285-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-02-22 12:27:13 +08:00
Huong Nguyen 45877b9c1b MDL-77354 tool_behat: Fix deprecated strlen() of null in PHP 8.1 2023-02-22 11:08:23 +07:00
Huong Nguyen c5916d6303 MDL-77290 tiny_media: Fix cannot update the created media
Including in this commit:
 - Changed the button text to Update media when the user is updating the media
 - Added new Behat tests
2023-02-22 09:36:44 +07:00
Paul Holden c3504d5e4c MDL-77352 javascript: declare debouncer outside the event handler.
It needs to be declared as such, otherwise each time the event is
triggered a new debouncer is created.
2023-02-21 22:47:50 +00:00
Paul Holden fa9ef9baf8 MDL-76602 mod_lti: array syntax/whitespace cleanup. 2023-02-21 17:06:25 +00:00
Paul Holden fe9bc4d5c0 Merge branch 'MDL-76602-401-lti13claims' of https://github.com/cengage/moodle into MOODLE_401_STABLE 2023-02-21 16:46:25 +00:00
sam marshall dadceea8f5 MDL-77149 core_files: Network filesystem (Amazon EFS) can warn
If you delete a file with a hash and then create another file with
the same hash, sometimes on EFS filesystems while trying to create
the new file, it returns true to the file_exists check even though
the file doesn't exist, but then fails other calls.

This change makes Moodle tolerate that behaviour.
2023-02-21 10:55:10 +00:00
Huong Nguyen 20d103f014 MDL-76735 editor_tiny: Fix random behat failure for Media image 2023-02-21 14:30:56 +07:00
Simey Lameze 6e3242d677 MDL-77271 behat: verify user licence preference is remembered 2023-02-21 15:25:47 +08:00
AMOS bot d79fbf80a2 Automatically generated installer lang files 2023-02-21 00:07:37 +00:00
Paul Holden 2bf6bfcac8 Merge branch 'MDL-76545-401' of https://github.com/ferranrecio/moodle into MOODLE_401_STABLE 2023-02-20 10:28:53 +00:00
Audun Jørstad Lillekjendlie de4739338a MDL-77318 core: Add role attribute to user navigation div 2023-02-20 10:56:42 +01:00
Paul Holden bc30c47ad7 Merge branch 'MDL-77287-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-02-20 09:55:09 +00:00
Paul Holden d227c27ca7 MDL-76873 user: method for returning profile field instance of type.
Re-factor implementation of profile field access within user fields
class to use that already provided by the fields themselves.
2023-02-20 09:24:11 +00:00
Paul Holden 9829e77a6d MDL-76873 reportbuilder: correct checks for profile field visibility. 2023-02-20 09:22:07 +00:00
Andrew Nicols f6d38b13a2 Merge branch 'MDL-77020-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-20 09:54:25 +08:00
Ferran Recio ddcd60552b MDL-76545 core: fix reactive debug panel
The reactive debug panel stops working when a new reactive instance is
created in the fly. This was not detected until the new dragf and drop
files into course uses a second reactive UI component in the same page.
2023-02-17 17:18:25 +01:00
Sara Arjona cc4b43a57b MDL-77230 mod_feedback: Validate feedback access
The get_items() and get_page_items() external methods should return
items only when the user has access. Otherwise, empty array for items
will be returned, with the exact error in the warnings parameter.
2023-02-17 12:41:20 +01:00
Petr Skoda 4ca23b917b MDL-76577 block_html: fix incorrect use of draft files 2023-02-17 09:52:55 +01:00
Petr Skoda 507306a6ca MDL-75005 core: remove invalid addslashes() 2023-02-17 09:49:55 +01:00
Jake Dallimore efe9ac66be MDL-77287 tool_oauth2: fix issuer form validation
This ensures validation errors from the issuer persistent are seen.
2023-02-17 15:14:39 +08:00
Ilya Tregubov 3312a6814a weekly release 4.1.1+ 2023-02-17 09:12:20 +08:00
Ilya Tregubov 995d6a3301 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-02-17 09:12:18 +08:00
Simey Lameze 0d7642b8e8 MDL-77285 behat: change window size to large to prevent error 2023-02-17 08:44:18 +08:00
AMOS bot 3da0488fbc Automatically generated installer lang files 2023-02-17 00:07:51 +00:00
Paul Holden 9be10c0dd1 MDL-77020 behat: refer to search input fields by name/role.
Co-authored-by: Andrew Nicols <andrew@nicols.co.uk>
2023-02-16 10:53:46 +00:00
Audun Jørstad Lillekjendlie 3ff714acbe MDL-77020 core: Include a unique id in the search input field id 2023-02-16 10:19:08 +00:00
Meirza 75f729911e MDL-76825 tiny: restyling link on focus for sufficient colour contrast.
Text elements must have sufficient colour contrast against the background,
restyling the link element when it is focused is to ensure colour contrast of at least 4.5:1
2023-02-16 13:12:29 +07:00
Meirza 854f67cf65 MDL-76825 tiny_media: Make IDs and labels unique. 2023-02-16 13:12:29 +07:00
Meirza 476abf4610 MDL-76825 theme: ensure button role has an accessible name. 2023-02-16 13:12:29 +07:00
Andrew Nicols 09534ee3f9 Merge branch 'MDL-75578-401' of https://github.com/mackensen/moodle into MOODLE_401_STABLE 2023-02-16 12:01:28 +08:00
Jun Pataleta fc3aaf9c67 Merge branch 'MDL-72182-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-16 11:58:52 +08:00
Andrew Nicols 1b1e1801b7 Merge branch 'MDL-77102-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-16 11:51:31 +08:00
Jun Pataleta 5f61f7f3e7 Merge branch 'MDL-76584-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-16 11:49:06 +08:00
Andrew Nicols 41c1731431 Merge branch 'MDL-74698_401' of https://github.com/jonof/moodle into MOODLE_401_STABLE 2023-02-16 11:06:44 +08:00
Ilya Tregubov 9cb0e85cf9 MDL-76313 forum: code style changes. 2023-02-16 11:00:28 +08:00
Ilya Tregubov dd9073a232 Merge branch '76313-forum-improve-accessibility-401' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_401_STABLE 2023-02-16 11:00:12 +08:00
Andrew Nicols de285364c5 Merge branch 'MDL-76791-m401' of https://github.com/sammarshallou/moodle into MOODLE_401_STABLE 2023-02-16 10:53:39 +08:00
Ilya Tregubov 8d585d0c79 MDL-75379 core: Code style changes. 2023-02-16 10:49:51 +08:00
Ilya Tregubov 960bff3227 Merge branch 'MDL-75379_401' of https://github.com/larsbonczek/moodle into MOODLE_401_STABLE 2023-02-16 10:49:37 +08:00
Andrew Nicols eed3f09aa0 Merge branch 'MDL-76878-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-16 10:43:56 +08:00
Ilya Tregubov a001500897 Merge branch 'MDL-73519-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-02-16 09:34:17 +08:00
Andrew Nicols 8c16eb18f6 Merge branch 'MDL-76478-password-unmask-MOODLE_401_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_401_STABLE 2023-02-15 23:25:35 +08:00
Andrew Nicols 927b0fc34d Merge branch 'MDL-76948_401' of https://github.com/larsbonczek/moodle into MOODLE_401_STABLE 2023-02-15 23:01:41 +08:00
Paul Holden a457f1b1cd Merge branch 'MDL-77147_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-02-15 11:49:22 +00:00
Ilya Tregubov 946504b58d Merge branch 'MDL-75230-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-02-15 16:12:50 +08:00
Andrew Nicols ae1447060e Merge branch 'MDL-77241-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-15 11:14:35 +08:00
Jun Pataleta e9e2c481fd Merge branch 'MDL-77156-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-02-15 11:12:11 +08:00
Jun Pataleta 16e62aa2ad Merge branch 'MDL-77212-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-15 11:09:11 +08:00
Jun Pataleta 5432766411 Merge branch 'MDL-77223-401' of https://github.com/roland04/moodle into MOODLE_401_STABLE 2023-02-15 11:07:11 +08:00
AMOS bot 2a77c6f1d5 Automatically generated installer lang files 2023-02-15 00:07:52 +00:00
Paul Holden e9a32f3463 Merge branch 'MDL-77140-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-02-14 15:51:37 +00:00
Paul Holden 42c58dce39 Merge branch 'MDL-75454-401' of https://github.com/davewoloszyn/moodle into MOODLE_401_STABLE 2023-02-14 15:06:03 +00:00
Paul Holden be6cb6ab13 MDL-77241 course: optional chaining safety for section toggles. 2023-02-14 13:15:29 +00:00
Paul Holden 51254db574 Merge branch 'MDL-63608_401' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_401_STABLE 2023-02-14 11:59:53 +00:00
Ilya Tregubov cffc56a17c Merge branch 'MDL-76947-401' of https://github.com/davewoloszyn/moodle into MOODLE_401_STABLE 2023-02-14 13:53:04 +08:00
Ilya Tregubov ff449751d9 Merge branch 'MDL-76620-401' of https://github.com/call-learning/moodle into MOODLE_401_STABLE 2023-02-14 13:26:21 +08:00
David Woloszyn a869fbf33e MDL-75454 cache: Reduced exposure of sesskey param 2023-02-14 11:28:51 +11:00
Tim Hunt bdcc5b7a59 MDL-77210 quiz: fix regrade for attempts with redone questions 2023-02-13 16:58:26 +00:00
Mikel Martín 8d9a898bb5 MDL-77223 reportbuilder: Fix first report column as integer 2023-02-13 16:17:39 +01:00
Lars Bonczek 35792ea06a MDL-75379 core: Use non-static template cache 2023-02-13 12:40:20 +01:00
Paul Holden 9f7219844e MDL-76611 cohort: prevent duplicate idnumber in inplace editable. 2023-02-13 10:33:29 +00:00
Paul Holden 21986200d7 MDL-77212 tiny_accessibilitychecker: remove unused lang string fetch. 2023-02-13 08:49:33 +00:00
Ilya Tregubov 94bb9b2b73 Merge branch 'MDL-77189-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-02-13 13:43:34 +08:00
Simey Lameze fde83c33a8 MDL-77189 behat: basic coverage for wikimedia repository 2023-02-13 13:23:45 +08:00
Jun Pataleta 301fa85c26 Merge branch '76314-forum-fix-forumtype-and-groupmode-validation-401' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_401_STABLE 2023-02-13 11:38:55 +08:00
Anupama Sarjoshi 7bee650a24 MDL-63608 quiz: Fix Access order when manually grading quizzes
Changes done to fix access order of attempts that need manual grading.
Changed button text from 'Save and go to next page' to 'Save and show next' to improve UI.
2023-02-10 17:46:39 +00:00
Luca Bösch 46d8e08a16 MDL-77156 enrol_self: deprecated trim() of null in PHP 8.1 2023-02-10 18:16:58 +01:00
Paul Holden eb84455a05 weekly release 4.1.1+ 2023-02-10 13:47:33 +00:00
Paul Holden 3da5ef8e9c Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-02-10 13:47:32 +00:00
Julien Boulen 2b568f1c93 MDL-76314 forum: add form check to prevent combining wrong parameters
Form validation prevents combining the forum type "single discussion" and the group mode "separate groups".
2023-02-10 11:07:45 +01:00
Jake Dallimore ec02c39dbb MDL-77140 mod_lti: fix content item return for new TinyMCE versions 2023-02-10 10:10:24 +08:00
Andrew Nicols 0dc15ee619 Merge branch 'MDL-76904-401' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_401_STABLE 2023-02-09 12:04:33 +08:00
Andrew Nicols 1cddc8edcb Merge branch 'MDL-74755-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-09 11:44:27 +08:00
Jun Pataleta fbe9dc4ecf Merge branch 'MDL-77052-401' of https://github.com/Utdanningsdirektoratet/moodle into MOODLE_401_STABLE 2023-02-09 11:27:30 +08:00
Andrew Nicols 7906636a3a Merge branch 'MDL-76354-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-09 10:59:21 +08:00
Andrew Nicols 58814af9f1 Merge branch 'MDL-77018_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-02-09 10:51:48 +08:00
Andrew Nicols df96d98c39 Merge branch 'MDL-76066-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-02-09 10:47:58 +08:00
Andrew Nicols d3040a763a Merge branch 'MDL-77057-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-09 10:21:06 +08:00
Andrew Nicols c3b36c6a34 Merge branch 'MDL-76499-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-02-09 10:04:30 +08:00
Andrew Nicols 1ee066cecd Merge branch 'MDL-70586-401' of https://github.com/sarjona/moodle into MOODLE_401_STABLE 2023-02-09 09:42:29 +08:00
Paul Holden 72c8793ae7 Merge branch 'MDL-76672-401' of https://github.com/Utdanningsdirektoratet/moodle into MOODLE_401_STABLE 2023-02-08 14:57:34 +00:00
Paul Holden 130f5c1dd6 Merge branch 'MDL-76542-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-02-08 14:22:11 +00:00
Laurent David 96aaae3f19 MDL-76620 mod_bigbluebuttonbn: Fix guest behat test
* Refactor guest_access.feature behat test
2023-02-08 14:28:06 +01:00
Laurent David 52ed4a47f7 MDL-76620 mod_bigbluebuttonbn: Fix guest access with forcelogin
*With "forcelogin" setting turned on, the new external guest
 links in the bigbluebutton plugin do not work but show the login screen instead
2023-02-08 14:28:06 +01:00
Paul Holden daa7e5b4e2 Merge branch 'MDL-73692-401-Add-support-for-missing-timestamps-to-rss-block' of https://github.com/melanietreitinger/moodle into MOODLE_401_STABLE 2023-02-08 11:22:50 +00:00
Melanie Treitinger ab619ae38d MDL-73692 blocks: Add support for missing timestamps to rss block. 2023-02-08 11:19:27 +01:00
Jun Pataleta 6cb71e3e8b Merge branch 'MDL-74905_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-02-08 17:19:27 +08:00
Angelia Dela Cruz 3b4246cd89 MDL-75230 behat: Lesson Behat tests optimised
Replace steps that manually add Lesson instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
2023-02-08 15:49:42 +08:00
Simey Lameze d17117ab02 MDL-76542 behat: add step to go to user edit page directly 2023-02-08 12:24:27 +08:00
Simey Lameze 2158f5c2e6 MDL-76542 behat: create custom profile fields using data generators
This commit also adds a new test to verify the custom profile fields
works using the user interface.
2023-02-08 12:24:26 +08:00
Jun Pataleta dbe40db138 Merge branch 'MDL-76569-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-02-07 22:49:08 +08:00
Lars Bonczek 53ad452d6c MDL-74433 mod_assign: Fix logging of submission removal 2023-02-07 12:34:42 +01:00
Jun Pataleta a574be993c Merge branch 'MDL-76089-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-02-07 15:34:51 +08:00
Marina Glancy d9d9d42c81 MDL-76089 lib: upgrade horde library 2023-02-07 15:29:32 +08:00
Andrew Nicols 0b586e839d Merge branch 'MDL-77023-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-07 12:48:09 +08:00
Andrew Nicols 22141c2f8d Merge branch 'MDL-77123-401' of https://github.com/cameron1729/moodle into MOODLE_401_STABLE 2023-02-07 12:39:48 +08:00
Andrew Nicols 61f1700fbf Merge branch 'mdl-76729_401' of https://github.com/james-cnz/moodle into MOODLE_401_STABLE 2023-02-07 12:37:16 +08:00
Andrew Nicols 0ce350e78a Merge branch 'MDL-75946-401' of https://github.com/davewoloszyn/moodle into MOODLE_401_STABLE 2023-02-07 10:44:40 +08:00
sam marshall d2c0dd4f6b MDL-76791 core_cache: Locking breaks for multiple-identifiers store
Cache locking fails if the cache store supports multiple identifiers
(in core, the only two which do are cachestore_static and
cachestore_mongodb, so this is unlikely to cause severe problems).
2023-02-06 15:47:25 +00:00
Paul Holden 5f5355065a Merge branch 'MDL-77078-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-02-06 13:33:04 +00:00
Andrew Nicols b9dece93d8 Merge branch 'MDL-77042-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-06 21:17:04 +08:00
Audun Jørstad Lillekjendlie b84ad66fbe MDL-76672 block_myoverview: add role attribute for filter div 2023-02-06 14:07:37 +01:00
Audun Jørstad Lillekjendlie 7b787cd99f MDL-77052 block_recentlyaccesseditems: HTML role attribute
HTML elements with role=list must contain children with role=listitem
2023-02-06 13:49:18 +01:00
Tim Hunt 6e72a4ed50 MDL-77147 question admin: optimised the query in admin/qtypes.php 2023-02-06 12:47:06 +00:00
Paul Holden d69579a060 Merge branch 'MDL-76370-publicpaths-proxying-MOODLE_401_STABLE' of https://github.com/jaydn/moodle into MOODLE_401_STABLE 2023-02-06 11:02:45 +00:00
Marina Glancy 5f3524f3df MDL-72182 my: tests for resetting dashboard
Co-authored-by: Paul Holden <paulh@moodle.com>
2023-02-06 09:34:27 +00:00
Paul Holden bdd380ffea MDL-72182 user: cross-DB compatibility for getting user pages/blocks. 2023-02-06 09:34:27 +00:00
Paul Holden cd0d9b910e MDL-74755 block_accessreview: stricter checking of enabled config. 2023-02-06 09:31:39 +00:00
David Woloszyn 177f619b12 MDL-76947 css: Fixed layout regression on dropdown menus 2023-02-06 16:05:31 +11:00
Andrew Nicols b21e31b016 Merge branch 'MDL-77091-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-06 12:59:33 +08:00
Angelia Dela Cruz 6ce00e289f MDL-77078 Behat: Coverage for assignment submission statement 2023-02-06 10:47:36 +08:00
AMOS bot f5e6601ab5 Automatically generated installer lang files 2023-02-06 00:07:41 +00:00
Anastasios Bithas f23463f8d6 MDL-73642 mod_assign: Disable draft option if submission already made 2023-02-04 18:38:10 +02:00
Andrew Nicols a41a3281de Merge branch 'MDL-76662-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-04 21:38:10 +08:00
Eloy Lafuente (stronk7) f24f47992a MDL-74905 ci: travis and gha, some adjustments
Apply for some of the improvements made for 4.2:
- Use our own moodlehq/mysql-action
- Define the tmpfs size and ensure that binlogs are disabled.
- 401_STABLE doesn't require the php-xmlrpc extension.
2023-02-03 19:48:05 +01:00
Eloy Lafuente (stronk7) ec9f3e8976 MDL-74905 environment: Apply agreed changes:
- PHP 8.0 required.
- Moodle 3.11.8 required (first minor supporting PHP 8.0 officially).
- MySQL 8.0 required.
- MariaDB 10.6.7 required.
- PostgreSQL 13 required.
- php-sodium extension required.
- 64-bit PHP required.
2023-02-03 19:48:05 +01:00
Eloy Lafuente (stronk7) e8e1faad78 MDL-74905 environment: 4.2 base information
This is a direct copy of the 4.1 information, to
have all the real changes under control in next commit(s).
2023-02-03 19:48:05 +01:00
Eloy Lafuente (stronk7) a8ff0f7271 MDL-74905 composer: Small update to behat/behat 3.12.0
It comes with some fixes for PHP 8.1 that we may need here.

Generated following the instructions @ https://docs.moodle.org/dev/Composer .
2023-02-03 19:48:05 +01:00
Paul Holden 79b9e6f36e Merge branch 'MDL-76869-401' of https://github.com/cameron1729/moodle into MOODLE_401_STABLE 2023-02-03 14:58:27 +00:00
Paul Holden 9fe490b715 Merge branch 'MDL-77090_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-02-03 14:46:51 +00:00
Paul Holden ae355c5749 Merge branch 'MDL-76447-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-02-03 14:31:30 +00:00
Tim Hunt f93fa35ecf MDL-77090 questions: regrade of interactive attempts lose tries count
The behaviour-specific data was getting corrupted when the regrade
recreated the first step, because $oldstep->get_behaviour_data() was
stripping off the leading '-' characters from the names, and they were
not being added back.
2023-02-03 10:52:45 +00:00
Jun Pataleta cb6dc699b8 weekly release 4.1.1+ 2023-02-03 15:43:36 +08:00
Angelia Dela Cruz 9cc3769ba6 MDL-76499 behat: Resource Behat tests optimised
Replace steps that manually add resource instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.

Co-authored-by: David Woloszyn <david.woloszyn@moodle.com>
2023-02-03 13:32:58 +08:00
David Woloszyn 562d62474e MDL-75946 lib_horde: Fixed deprecated FILTER_SANITIZE_STRING 2023-02-03 12:58:32 +11:00
David Woloszyn 226bfb0348 MDL-75946 core_h5p: Fixed deprecated FILTER_SANITIZE_STRING 2023-02-03 12:58:32 +11:00
Jonathon Fowler 39e58054b1 MDL-74698 backup: correctly restore course format options
Old-version backups (< 3.11.7, < 4.0.1) lose their course-level format
options when restoring into newer versions after the backup structure
was changed.

Also, course-level format options were not accurately restored against
the appropriate format type. And section-level format options were
redundantly stored at course-level and restored without mapping their
sectionids, thus creating lint.
2023-02-03 10:18:19 +10:00
Cameron Ball c0c478acb4 MDL-77123 message_airnotifier: Don't test configured providers 2023-02-02 14:49:51 +08:00
Andrew Nicols d7e9b065cb Merge branch 'MDL-75870-401' of https://github.com/nwp90/moodle into MOODLE_401_STABLE 2023-02-02 12:34:40 +08:00
Andrew Nicols aa1b0c5ebd Merge branch 'MDL-75085-401-4' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-02-02 12:02:47 +08:00
Andrew Nicols 1780d6a5e8 Merge branch 'MDL-75830-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-02-02 11:58:02 +08:00
Andrew Nicols c4840c6b0c Merge branch 'MDL-77024_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-02-02 11:52:41 +08:00
Andrew Nicols f0d9073159 Merge branch 'MDL-76675_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-02-02 11:03:38 +08:00
Jun Pataleta b90bccd3d8 Merge branch 'MDL-69690-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2023-02-02 10:34:00 +08:00
Ilya Tregubov 7e7628b806 Merge branch 'MDL-77058-401' of https://github.com/dravek/moodle into MOODLE_401_STABLE 2023-02-02 10:04:58 +08:00
Jun Pataleta 920ac6dbe5 Merge branch 'MDL-77092-m401' of https://github.com/sammarshallou/moodle into MOODLE_401_STABLE 2023-02-02 09:57:06 +08:00
Andrew Nicols 662d2e1f0f Merge branch 'MDL-75912-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-02-02 09:49:25 +08:00
Ilya Tregubov e247320845 Merge branch 'MDL-77079-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-02-02 09:16:50 +08:00
Jun Pataleta e87a6484bf MDL-75085 external: Pass proper $required param value in tests 2023-02-02 09:07:17 +08:00
Angelia Dela Cruz 0a66a77054 MDL-75830 behat: Book behat tests optimised
Replace steps that manually add Book instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
Additionally, performed Behat cleanup and optimisation to affected
files.
2023-02-02 09:05:38 +08:00
Andrew Nicols 4bd7c57be5 Merge branch 'MDL-77100-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-02 08:32:38 +08:00
Andrew Nicols 6f073ebe6d Merge branch 'MDL-77001-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-02 08:27:21 +08:00
Andrew Nicols 885d191df2 Merge branch 'MDL-77003-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-02 08:20:51 +08:00
Andrew Nicols 3ef9c4c5d0 Merge branch 'MDL-75345-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-02-02 08:17:54 +08:00
Nick Phillips e4e7ec5efb MDL-75870 course: only section togglers to toggle sections 2023-02-02 11:17:31 +13:00
Paul Holden a3c9194bef Merge branch 'MDL-76658-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-02-01 16:34:39 +00:00
Paul Holden c125d5f3f2 MDL-75345 reportbuilder: improve course/user custom report tests.
Ensure column and filters provided by each source have sufficient
coverage. Re-factor individual entity/helper class tests to test
their own specific implementation only.

Remove now-defunct test fixtures.
2023-02-01 15:41:28 +00:00
Paul Holden 4b9e614eaf MDL-77091 reportbuilder: set base time in schedule test generator.
The base time allows for the setting of the "current time" for the
purposes of the schedule test against recurrence configuration.

We should ensure the generator method allows this property so that
it can be used when calculating the initial "next send time" of the
schedule upon creation (and avoiding excessive recursion when the
actual current time is used for the calculation).
2023-02-01 14:39:36 +00:00
Paul Holden 858b26feb2 Merge branch 'MDL-76311-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-02-01 14:16:15 +00:00
Meirza a6a6fbc5ec MDL-76311 user: redirect to proper URL if a new user creation cancelled 2023-02-01 20:14:01 +07:00
Sara Arjona 242060661a MDL-70586 mod_feedback: Hide the Preview questions icon for students
The Preview questions icon shouldn't be displayed unless the user can
edit the feedback or access to the reports; otherwise, it's causing
confusion (especially when the feedback is not opened).
2023-02-01 12:36:20 +01:00
Meirza e7f9631b7e MDL-76447 editor_tiny: revert the z-index.
Nesting the dropdown menu inside the parent DOM makes the menu can display correctly
without changing the z-index.
2023-02-01 17:39:34 +07:00
Meirza f37f6e3439 MDL-76447 editor_tiny: Nest the dropdown menu in the parent DOM.
The TinyMCE menu has a significant issue with the Overflow style,
and the Boost theme heavily uses Overflow for drawer navigation.
Nest the dropdown menu container into the parent editor container makes it work correctly.

Co-authored-by: davewoloszyn <david.woloszyn@moodle.com>
Co-authored-by: xr0master <xr0master@gmail.com>
2023-02-01 17:39:34 +07:00
Paul Holden b59bb37819 Merge branch 'MDL-73847_401' of https://github.com/jonof/moodle into MOODLE_401_STABLE 2023-02-01 10:00:27 +00:00
Paul Holden 03a1ca582b MDL-77102 mod_wiki: remove deprecated mbstring overload checks. 2023-02-01 08:34:09 +00:00
Jun Pataleta e3dd47671c Merge branch 'MDL-76985-MOODLE_401_STABLE' of https://github.com/sh-csg/moodle into MOODLE_401_STABLE 2023-02-01 14:11:53 +08:00
Ilya Tregubov fc2a1536f7 Merge branch 'MDL-76587-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-02-01 13:25:54 +08:00
Jun Pataleta bdd3e5efb1 MDL-75085 external: Fix external_multiple_structure parameter passing
Some calls to the external_multiple_structure's constructor incorrectly
pass parameters where the value for the $description parameter is not
being passed. This results to invalid values being passed for the
$required parameter.
2023-02-01 11:39:53 +08:00
Jun Pataleta 1753e85f1a MDL-75085 webservice: Fix parameter passed to external_format_value 2023-02-01 11:39:44 +08:00
Angelia Dela Cruz 725af41225 MDL-75912 behat: Wiki Behat tests optimised
Behat cleanup and optimisation
2023-02-01 11:11:03 +08:00
Angelia Dela Cruz 5a6481006d MDL-75912 behat: Wiki Behat tests now use generators
Replace steps that manually add Wiki instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
2023-02-01 11:03:20 +08:00
Simey Lameze d350fcc040 MDL-77079 behat: use different step to validate presets table data 2023-02-01 09:03:50 +08:00
Paul Holden 2ea379e0b0 MDL-77100 mod_data: replace calls to str_ends_with, fix assertions.
Calls to `str_ends_with` are polyfilled currently, as the method is
not present in PHP7.4 or earlier. We should avoid uses of it so as
to not trip up compatibility standard checkers.
2023-01-31 21:36:32 +00:00
Tim Hunt 514b6f13d9 MDL-77094 quiz_statistics: improve efficiency of the recalculate task
quiz_settings::create() requires at least 3 DB queries, so the point is
that we can avoid doing that until after we have worked out if we need
to calculate statistics for this quiz.

Also, we order the list of quizzes to consier, to process the ones with
more recent attempts first.
2023-01-31 17:01:53 +00:00
Julien Boulen b20ca4b471 MDL-76945 theme: fix the rendering of arrows on dropdown variants 2023-01-31 15:22:25 +01:00
Andrew Nicols 421ae9cb83 Merge branch 'MDL-75945-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-01-31 22:12:28 +08:00
sam marshall f5dc8c4f9f MDL-77092 Behat: Expand all fieldsets fails with single fieldset
The Behat step to expand all fieldsets did not work if the page
contains only one fieldset.
2023-01-31 13:58:08 +00:00
Andrew Nicols 7dfb4c229c Merge branch 'MDL-77081-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-31 21:45:05 +08:00
Angelia Dela Cruz df1d34bea8 MDL-76658 Behat: Coverage for course cohort enrolment groups
Co-authored-by: Simey Lameze <simey@moodle.com>
2023-01-31 21:24:12 +08:00
Paul Holden 6acc34a097 MDL-77081 forms: PHP8.1 compatibility for group/textarea elements.
See related changes in b0a83aa7, we can no longer pass null values
to some string related methods.
2023-01-31 10:51:20 +00:00
Ilya Tregubov 0338a74dfb Merge branch 'MDL-77077-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-01-31 18:13:49 +08:00
hieuvu 06c3d068a6 MDL-76904 question: Keep question highlight in url 2023-01-31 16:32:36 +07:00
Simey Lameze ed544dd0f3 MDL-76587 behat: make grading page wider to avoid 'out of bounds' fail
This is because on classic theme the navigation block pushes the content
to the right and once behat changes the grades the 'Save changes' button
is no longer visible.
2023-01-31 11:18:09 +08:00
Charles Fulton 5cd9e69b6a MDL-75578 course: require course library to resolve namespace issues 2023-01-30 10:44:57 -05:00
Jake Dallimore a6bd5ae245 MDL-77077 mod_lti: Fix JWT signature verify when alg missing from JWKS
Infer the algorithm, where necessary, using a combination of JWT
headers and known valid LTI algorithms.
2023-01-30 16:44:58 +08:00
Andrew Nicols cd0935a33e Merge branch 'MDL-77040-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-30 12:28:01 +08:00
Tim Hunt db861ee6d3 MDL-77018 qbank_statistics: only load stats for contexts that exist
Also, pre-load the contexts for efficiency.
2023-01-27 20:51:51 +00:00
David Matamoros 2307060239 MDL-77058 reportbuilder: Fix for cohort null idnumber column 2023-01-27 14:09:03 +01:00
Paul Holden d78d372a1e MDL-77057 group: format group names in module override pages. 2023-01-27 11:50:55 +00:00
Eloy Lafuente (stronk7) 8b31b8e8d0 MDL-76675 date: Only test all TZ names with PHPUNIT_LONGTEST enabled
It happens often that some timezone is renamed, split, added to the
IANAs list of timezones (that, for PHP is kept updated by the
php-timezonedb PECL extension).

When the information coming from the extension changes, all the
PHPUnit jobs in the world start failing (that's when CIs update
their PHP images, when devs update their packages, ...).

So, what we are doing here is to move that test that check for
every single string existing to be run only when PHPUNIT_LONGTEST
is enabled. That way only places running all tests will run that
one. And every other run just will skip it.

This corresponds to point 1 & 2 of the issue, lower impact in general
and, still be able to enable the tests to run.
2023-01-27 08:48:22 +01:00
Andrew Nicols 62118364f2 Merge branch 'MDL-76562-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-01-27 14:24:26 +08:00
Andrew Nicols 0a4f551fff Merge branch 'MDL-75978-401' of https://github.com/JBThong/moodle into MOODLE_401_STABLE 2023-01-27 12:34:04 +08:00
Paul Holden d8f7fb803f MDL-77040 core: assert types of returned Geoplugin data, not values.
The results we get from these tests are beyond our control, and are
unreliable for use in testing.

See also previous change 215cd2d8 in similar tests.
2023-01-26 13:24:06 +00:00
Paul Holden 64293da947 MDL-76662 tool_log: correct supported reports test assertions. 2023-01-26 13:09:13 +00:00
Davo Smith dcd48987f7 MDL-76938 backup: fix restore of comments linked to a course format 2023-01-26 12:32:35 +00:00
Sara Arjona 67bbf6c416 weekly release 4.1.1+ 2023-01-26 09:59:12 +01:00
Lars Bonczek d238db5f36 MDL-76948 mod_assign: Fix description of submission_unlocked event 2023-01-25 19:20:56 +01:00
Paul Holden 522ee5ae4c MDL-77042 mod_data: fix empty/zero equality check for numeric field. 2023-01-25 17:04:47 +00:00
Tim Hunt deed4fe251 MDL-77024 quiz: fix metatdata on log events
Some had the wrong edulevel or crud
2023-01-25 16:12:37 +00:00
Jun Pataleta a360fd0601 Merge branch 'MDL-76977-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-25 16:10:18 +08:00
Jun Pataleta 5e75da7598 Merge branch 'MDL-77036-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-01-25 16:02:23 +08:00
Stefan Hanauska 928633a33e MDL-76985 course: Redirect to moved section 2023-01-25 09:00:06 +01:00
Simey Lameze 6bf5c32402 MDL-77036 core_iplookup: update test_ipv4 test expectations 2023-01-25 15:15:07 +08:00
Jun Pataleta 6d90fc7c5b Merge branch 'MDL-76967-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-01-25 08:57:16 +08:00
Paul Holden 0a86c6a123 MDL-77003 javascript: improve string helper JSON detection.
Changes in fbc2732d made the JS template string helper method
too strict in regards to what it considers a valid JSON object.

Co-authored-by: Mike Churchward <mike@brickfieldlabs.ie>
2023-01-24 22:16:21 +00:00
Paul Holden 4b43da100c MDL-77023 javascript: always normalise component of lang strings.
Co-authored-by: David Matamoros <davidmc@moodle.com>
2023-01-24 16:44:06 +00:00
Jun Pataleta addbbfdaae Merge branch 'MDL-76639-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-01-24 18:59:29 +08:00
Jun Pataleta 0006557b59 Merge branch 'MDL-76652-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-01-24 18:45:24 +08:00
Jun Pataleta 0813b938a3 Merge branch 'MDL-76655-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2023-01-24 18:27:00 +08:00
Andrew Nicols 710d0ef8f2 MDL-75945 core: Convert a floating value to an integer.
In PHP 8.1, any implicit conversion of float to int, which leads to a loss in precision, is now deprecated.
To avoid the error warning, the code must explicitly convert a floating value to an integer.
2023-01-24 16:53:34 +07:00
Jun Pataleta fa51e1a149 Merge branch 'MDL-76362-401-extra' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-01-24 10:38:49 +08:00
Angelia Dela Cruz 066740a127 MDL-76655 behat: Coverage for workshop grading strategies 2023-01-24 09:09:26 +08:00
Paul Holden 26754aacd1 MDL-76354 competency: export user privacy data unconditionally.
We should ensure that any past competency data for a user is always
exported, regardless whether competencies are currently enabled.
2023-01-23 22:15:23 +00:00
Paul Holden e0358d2eca MDL-77001 tiny_autosave: use valid lang string during privacy export. 2023-01-23 22:06:33 +00:00
Amaia Anabitarte 3fd5c885a1 MDL-76066 mod_data: Trigger field_deleted event when importing 2023-01-23 18:54:35 +01:00
sam marshall 40081f5342 MDL-76956 core_grades: Regrade progress bar should be more granular
This change makes the regrade progress bar send frequent updates to
the web browser, even when processing within the same grade item, to
avoid timeout problems when there are a large number of users.
2023-01-23 11:43:15 +00:00
Paul Holden 1aa113fd1f MDL-76584 question: correct temporary questionid upgrade field.
Pass correct parameter/type in field constructor (`XMLDB_NOTNULL`)
for consistency. This corrects the definition and preserves the
truthyness of the value that was incorrectly passed previously.
2023-01-23 09:16:39 +00:00
Eloy Lafuente (stronk7) 36b4f13e9b MDL-76362 workshop: check for empty (null included) feedbackreviewer
As far as feedbackreviewer can be null, we cannot, since PHP 8.1
apply any string operation (trim, strlen...) on it, hence, checking
before applying.
2023-01-23 09:19:32 +08:00
Eloy Lafuente (stronk7) 03bc275093 MDL-76362 enrol_lti: Prevent calling to DataConnector with null keys
While it could have been fixed in DataConnector (3rd part lib), better
prevent in our code to call to it with null keys.

Covered by unit tests.
2023-01-23 09:17:48 +08:00
Eloy Lafuente (stronk7) e6dfa9ff3c MDL-76362 output: Preserve original behaviour for PHP 8.1
Whenever the page_requirements_manager::js_fix_url()
is called with null url, it must throw an exception and emit 0 warnings.

It's covered by an explicit test:

test_js_fix_url_coding_exception with data set "Provide a null argument"
2023-01-23 09:17:48 +08:00
Andrew Nicols 8f4bd4ce11 MDL-76362 core: Coding style fixes 2023-01-23 09:16:08 +08:00
Andrew Nicols 77a0a535b3 MDL-76362 core_privacy: Shortcircuit URL rewriting on empty content 2023-01-23 09:16:08 +08:00
Andrew Nicols a4ea607c24 MDL-76362 core: Short circuit s() on empty values 2023-01-23 09:16:08 +08:00
Andrew Nicols dbfb5eaa45 MDL-76362 core: Short-circuit strip_querystring on empty values 2023-01-23 09:16:08 +08:00
Andrew Nicols 788d86d7a3 MDL-76362 core_file: Check prefix exists before checking length 2023-01-23 09:16:07 +08:00
Andrew Nicols a1f4f7bac5 MDL-76362 core: plugin names must be strings to be valid 2023-01-23 09:16:07 +08:00
Andrew Nicols d08319ddf7 MDL-76362 core: Update core_component plugin name tests 2023-01-23 09:16:07 +08:00
Andrew Nicols de4de9cec5 MDL-76362 core: Test coursealias before using 2023-01-23 09:16:07 +08:00
Andrew Nicols ddf0f08cc9 MDL-76362 h5p: Use string as default lang param 2023-01-23 09:16:07 +08:00
Andrew Nicols 2250ab07e6 MDL-76362 qtype_numerical: Fix bug in phpdoc 2023-01-23 09:16:07 +08:00
Andrew Nicols 71c1fa0d8e MDL-76362 qtype_calculated*: Address issues with null strings 2023-01-23 09:16:07 +08:00
Andrew Nicols 5fbd2eac32 MDL-76362 qtype: Update formatting of qtype_calculated* upgradelib 2023-01-23 09:16:07 +08:00
Andrew Nicols 12b36d2a32 MDL-76362 qtype_numerical: Support empty units for apply_units 2023-01-23 09:16:07 +08:00
Andrew Nicols 5f412b3301 MDL-76362 qtype_numeric: Refactor answer tests 2023-01-23 09:16:07 +08:00
Andrew Nicols 4ff3447c8c MDL-76362 question: Add test for number(null) 2023-01-23 09:16:07 +08:00
Andrew Nicols 745080671b MDL-76362 question: Refactor question number unit tests 2023-01-23 09:16:07 +08:00
Andrew Nicols 5fbbb51882 MDL-76362 core: Use empty default string when getting prefs
The json_decode function does not accept a null, which is the
traditional default for get_user_preferences. By passing a default of
am empty string we avoid issues in PHP 8.1.
2023-01-23 09:16:06 +08:00
Marina Glancy 2dd7290ccb MDL-76362 various: Avoid passing nulls to functions that don't allow nulls
PHP 8.1 is more strict on the parameter type. Functions such as trim(), strlen(), str_replace(), etc
show notice when null is passed as an argument
2023-01-23 09:16:06 +08:00
Marina Glancy d83368a475 MDL-76362 mustache: Override parent method to avoid PHP notices
Parent method checks baseDir that is null in this case. This shows notices under PHP 8.1
2023-01-23 09:16:06 +08:00
Paul Holden a68f5c6d37 MDL-76977 phpunit: ensure unique data provider keys in mustache test. 2023-01-20 17:21:27 +00:00
Luca Bösch 8bb813e461 MDL-76967 questions: Questions last used line height 2023-01-20 09:57:21 +01:00
Meirza fb935957b8 MDL-76562 editor_tiny: Added functions to remove button/menu/submenu.
Added a few functions to remove the toolbar button, menubar and sub-menu items.
One of the implementations is to remove the justify alignment in the toolbar and
the sub-menu items to aid the accessibility aspect of the TinyMCE editor.
2023-01-20 10:02:06 +07:00
Ilya Tregubov 8de12b7997 weekly release 4.1.1+ 2023-01-20 09:41:41 +08:00
Paul Holden 1c6f0e8a19 MDL-76878 user: amend permission callbacks for preference definitions.
Ensure those preferences that are used for storing state can always be
updated via web service requests for the current user.
2023-01-19 15:28:45 +00:00
Hiroto Kagotani 5fa1ec0dfa MDL-76936 course: purge course cache on resetting start date 2023-01-19 20:08:58 +09:00
Jun Pataleta 0f28e2b02c Merge branch 'MDL-76725-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-19 12:05:06 +08:00
Jun Pataleta 396fff3d0b Merge branch 'MDL-76537_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-01-19 11:23:51 +08:00
Ilya Tregubov e98b3fe183 Merge branch 'MDL-76870-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-01-19 11:15:14 +08:00
Ilya Tregubov 69fbf97923 Merge branch 'MDL-76766-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-01-19 11:04:23 +08:00
Ilya Tregubov c4df4906bc Merge branch 'MDL-74756-MOODLE_401_STABLE' of https://github.com/sh-csg/moodle into MOODLE_401_STABLE 2023-01-19 10:30:32 +08:00
Andrew Nicols dd1efc4312 Merge branch 'MDL-76841-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-19 08:55:09 +08:00
Andrew Nicols 3309157233 Merge branch 'MDL-70070-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-19 08:50:37 +08:00
Jun Pataleta abd969cb50 Merge branch 'MDL-76525-MOODLE_401_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_401_STABLE 2023-01-18 22:55:51 +08:00
Philipp Memmel 888ed072c0 MDL-76525 mod_data: Add param validation for data fields 2023-01-18 12:10:45 +01:00
Claude Vervoort 1210c71703 MDL-76602 mod_lti: move lti13 claim declaration in subplugin 2023-01-17 16:55:10 -05:00
Jake Dallimore 17659466cc Merge branch 'MDL-66221-401' of https://github.com/raortegar/moodle into MOODLE_401_STABLE 2023-01-17 11:28:53 +08:00
Stefan Hanauska 61b77b3bb6 MDL-74756 availability_completion: Prev activity (completion n/enabled) 2023-01-16 22:20:45 +01:00
Paul Holden a74c5f0073 MDL-76841 tool_mobile: improve potential config issues test.
Avoid certificate checking of the default test site (`example.com`),
and update the assertion so we get clearer failures in the future.
2023-01-16 08:30:43 +00:00
Paul Holden 70a5e38b2c MDL-70070 phpunit: correct data provider method names.
They should not be prefixed `test_` because that's how actual
test methods containing assertions are identified by PHPUnit.
2023-01-16 08:28:31 +00:00
Jaydn Cunningham a2e37371a6 MDL-76370 curl: suppress CONNECT header when using HTTP proxy 2023-01-16 14:04:26 +10:30
Eloy Lafuente (stronk7) 2c7773b365 MDL-76537 behat: Month and day names are lang-dependent correct utf-8
Just verify that calendars are always displayed with correct UTF-8
and in the language the user is currently using.
2023-01-14 12:16:48 +01:00
Eloy Lafuente (stronk7) 7c66344323 MDL-76537 core: Fix date_format_string() to work with php-intl
With Moodle 4.1 and up, we have stopped to work with strftime(),
because it's deprecated for PHP 8.1 and up and, instead we are
using core_date::strftime() that performs the conversions using
the php-intl extension.

The original strftime() had a lot of OS-specific dependencies,
both about locale names and charsets used to provide the information.

Instead, the php-intl gets rid of all those OS-specific nightmares
and only uses ICU/Unicode locales and UTF-8.

Because of that, the old utf-8 => windows charset => utf-8
conversions aren't needed anymore. Hence, removing them.
2023-01-14 12:16:48 +01:00
Jun Pataleta 4b69c11978 Moodle release 4.1.1 2023-01-14 14:17:03 +08:00
raortegar c812f450bb MDL-66221 tool_recyclebin: Fix recycle bin with activity settings
If backup_auto_activities setting from Automated backup is disabled
the activities will not be stored for the recycle bin
2023-01-13 11:31:33 +01:00
Simey Lameze 4b2834439e MDL-76870 question: change assertion to assertEqualsCanonicalizing
By using that assertion the arrays will be sorted before comparison
preventing any Oracle sorting related failures.

Credits for the solution go to Tim Hunt!
2023-01-13 18:13:12 +08:00
Angelia Dela Cruz 6bd3f18949 MDL-76639 behat: Add Behat test coverage for quiz with limited attempts 2023-01-13 16:11:22 +08:00
Jonathon Fowler cc290a84e4 MDL-73847 lti: fetch keyset URLs using configured proxy settings 2023-01-13 14:30:05 +10:00
Jun Pataleta 2d628ba8d6 weekly release 4.1+ 2023-01-13 10:52:14 +08:00
Cameron Ball 83c1ddc19d MDL-76869 gradebook: Pass exception to rollback 2023-01-12 16:35:47 +08:00
Ilya Tregubov 66ad660acc MDL-69690 mod_workshop: Fix fieldname for workshop. 2023-01-12 14:41:13 +07:00
Andrew Nicols 3528887bb6 Merge branch 'MDL-76820-401' of https://github.com/cameron1729/moodle into MOODLE_401_STABLE 2023-01-12 12:09:35 +08:00
Jun Pataleta 217a32f033 Merge branch 'MDL-76649_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2023-01-12 12:06:45 +08:00
Jun Pataleta d24c201b6d Merge branch 'MDL-76474-401-2' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-01-12 11:55:41 +08:00
Huong Nguyen 4d9960ace2 MDL-76474 tiny_h5p: Prevent H5P Formatter placeholder to be assessed 2023-01-12 10:53:06 +07:00
Huong Nguyen 4e1c4f4483 MDL-76474 tiny_accessibilitychecker: Prevent placeholders to be assessed 2023-01-12 10:53:04 +07:00
Huong Nguyen b4e7d5300a MDL-76474 editor_tiny: Implement placeholder selector list
We created a list of placeholder selectors in placeholderSelectors option.
The purpose of this list is to indicate the contents that are only shown
in the editor and not to the users, by that way, we can decide to apply or
not to apply rules, styles, etc... to these contents
2023-01-12 10:52:39 +07:00
Michael Hawkins 313d44f83a MDL-76861 blog: Ensure correct escaping applied to search string 2023-01-12 11:43:11 +08:00
Jake Dallimore 6a6f5b79dd MDL-76862 user: Unit test for setting user home page preferences 2023-01-12 11:35:26 +08:00
Paul Holden f3c335b376 MDL-76862 user: ensure user can only update own preferred start page. 2023-01-12 11:35:26 +08:00
Andrew Nicols 5eb91a54c3 Merge branch 'MDL-76839-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-12 10:57:01 +08:00
Cameron Ball 1e72ef978a MDL-76820 core_search: Reset manager::$coursedeleting between tests 2023-01-12 10:54:44 +08:00
Jun Pataleta 28ccae3b7a Merge branch 'MDL-76739-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-01-12 10:17:37 +08:00
Jun Pataleta f06b222aa8 MDL-76739 behat: Replace occurrences of "surname" in Behat tests
Replace occurrences of "surname" in Behat tests with "last name"
2023-01-12 09:52:48 +08:00
Ilya Tregubov a4aeb20a30 Merge branch 'MDL-76607-401' of https://github.com/davewoloszyn/moodle into MOODLE_401_STABLE 2023-01-11 19:16:29 +07:00
Amaia Anabitarte 959c34de04 MDL-76766 mod_quiz: Allow shuffling quizes with no questions 2023-01-11 11:16:09 +01:00
Andrew Nicols b50964d2e2 Merge branch '66924-view-own-private-reply-401' of https://github.com/DSI-Universite-Rennes2/moodle into MOODLE_401_STABLE 2023-01-11 15:53:27 +08:00
Tim Hunt 2ea89b98a7 MDL-76810 redirect handling: ensure return URLs are properly sanitised 2023-01-11 11:43:12 +08:00
Andrew Nicols 833bc53bbb Merge branch 'MDL-76356_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2023-01-11 10:30:25 +08:00
Jake Dallimore 5123d2bf53 Merge branch 'MDL-76597-401-2' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-01-11 10:12:08 +08:00
David Mudrák acd82d3a86 MDL-76739 lang: Use the fixed strings in the tests, too 2023-01-10 21:15:06 +01:00
Helen Foster 152bbd76c5 MDL-76739 lang: Import fixed English strings (en_fix) 2023-01-10 21:13:14 +01:00
Paul Holden 02df248fbd Merge branch 'MDL-76811-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-01-10 16:40:06 +00:00
Paul Holden f5844e80fd Merge branch 'MDL-76803-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-01-10 16:24:16 +00:00
Paul Holden a789bf5b24 Merge branch 'MDL-76653-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2023-01-10 15:29:16 +00:00
Marina Glancy ff5fc3820a MDL-76356 various: avoid implicit conversion to int
PHP before version 8.1 automatically converted to int if the function
parameter (or array key) is expected to be int. PHP 8.1 shows notice in
this case
2023-01-10 15:25:57 +01:00
Marina Glancy 66dcb1683b MDL-76356 various: avoid implicit conversion to arrays
PHP before version 8.1 automatically converted stdClass or 'false' to arrays if
function parameter expects array (for example, "reset").
PHP 8.1 shows notices in these situations
2023-01-10 15:03:40 +01:00
Paul Holden 9cdafb6cad MDL-76839 mod_data: correct external test class coverage notation. 2023-01-10 13:02:29 +00:00
Paul Holden 89c59f32cf Merge branch 'MDL-76833-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-01-10 12:29:14 +00:00
Julien Boulen e50831318e MDL-76313 forum: improve accessibility on subscribers page
- add header on table of subscribers
- remove one redundant header
2023-01-10 11:17:22 +01:00
Jun Pataleta 8280476728 MDL-76803 lang: Update usages of reworded email display options 2023-01-10 16:01:44 +08:00
Jun Pataleta 4fc9c3bba1 MDL-76803 lang: Make email display options more concise 2023-01-10 16:01:44 +08:00
Meirza 687e276fe3 MDL-73519 core_course: re-styling the unordered list.
Currently, the unordered list in the course content follows the original style and
is ordered from the top of the content section, which is not part of the description.
That's why the first occurrence of the list is the 2nd level which uses the circle as the marker/list type
instead of the disc. In contrast, the editor always uses the original style.

so we need to reset the CSS of the unordered list in the description to the original
which the disc as the first marker, a circle for the second marker,
and a square for the following levels.
2023-01-10 12:18:39 +07:00
Andrew Nicols 74f1a285a1 MDL-76833 core: Bump phpunit/php-code-coverage version
This includes a bug fix for a display issue with code coverage reporting
in phpunit's HTML output report.
2023-01-10 12:09:01 +08:00
Andrew Nicols d9ae9e51cd MDL-76811 mod_data: Remove duplicate tests 2023-01-10 11:39:40 +08:00
Andrew Nicols cd42aa554f MDL-76811 mod_data: Stop testing template creation on field creation
The default template is no longer created when creating the fields with
the generator, so we should stop testing that it is.
2023-01-10 11:39:40 +08:00
Andrew Nicols e8ea4916e9 MDL-76811 mod_data: Generator test cleanup 2023-01-10 11:39:40 +08:00
Simey Lameze d1f75e4dce MDL-76653 behat: add coverage for SCORM availability 2023-01-10 10:26:04 +08:00
Jun Pataleta 1b54b120ad Merge branch 'MDL-76061-MOODLE_401_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_401_STABLE 2023-01-10 09:41:46 +08:00
james-cnz bc574f252d MDL-76729 filepicker: Restore file picker thumbnails in tree view 2023-01-10 12:01:27 +13:00
Philipp Memmel 3c5413f02a MDL-76061 core_calendar: Fix changing event type from 'user' 2023-01-09 15:03:15 +01:00
Julien Boulen 4ea254faf2 MDL-66924 mod_forum: Allow users to see their own private messages
Allow users to see their own private messages even if they don't have
mod/forum:readprivatereplies capability

Add behat test to avoid MDL-67109 issue.

Co-authored-by: Martin Putzlocher <mputzi@users.noreply.github.com>
2023-01-09 14:43:51 +01:00
Tim Hunt d71ada1952 MDL-76649 quiz statistics task: output more useful trace info
At the moment, quiz_statistics\task\recalculate gives no useful
information about what it is doing, which makes it hard to investigate
if the task fails. This commit makes it more usefully verbose.

Also, following this change, one instance of this task will not
run for more than one hour at a time.

As part of this commit, I have added a new helper mtrace_exception.
to consistently log exceptions in scheduled tasks. It is sad to
add a new function to moodlelib.php, but that seemed the logical place.
Looking at other tasks, this method is badly needed. Many are just
logging the ->getMessage() which is normaly insufficient for proper
debugging. However, swiching all existing tasks to use the new function
will need to wait for a future MDL.
2023-01-09 13:34:14 +00:00
Paul Holden 29efbedc8b Merge branch 'MDL-75532-401' of https://github.com/snake/moodle into MOODLE_401_STABLE 2023-01-09 11:50:59 +00:00
Jun Pataleta 8ea2421cd4 Merge branch 'MDL-76785-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-09 19:38:42 +08:00
Jun Pataleta 1361e6ad92 Merge branch 'MDL-76506_m41' of https://github.com/jrchamp/moodle into MOODLE_401_STABLE 2023-01-09 19:33:59 +08:00
Paul Holden 3387060fe1 MDL-76785 tiny_media: define video width/height language strings.
AMOS BEGIN
 CPY [videoheight,atto_media],[videoheight,tiny_media]
 CPY [videowidth,atto_media],[videowidth,tiny_media]
AMOS END
2023-01-09 10:52:18 +00:00
Jun Pataleta 5d27f595d7 Merge branch 'MDL-76787-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-09 18:38:55 +08:00
Paul Holden 6f2d09dc5a Merge branch 'MDL-76601-401' of https://github.com/junpataleta/moodle into MOODLE_401_STABLE 2023-01-09 10:11:10 +00:00
Jun Pataleta e101b6f195 Merge branch 'MDL-76812-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-09 17:46:13 +08:00
Jun Pataleta 934d8a2866 MDL-76597 mod_quiz: Add a default heading name for Behat tests 2023-01-09 15:41:59 +08:00
Jun Pataleta 6a7668e350 MDL-76597 mod_quiz: Set presentation role for the question list
Since the <ul> and <li> elements for listing the quiz questions and
elements are mainly used for layout purposes, it is better to set the
role of these elements to presentation only.
The aria-label for the <li> element is inappropriate and can also cause
confusion to screen reader users. Better to remove this. Though this is
being used in the confirmation modal so better to just change it to a
data attribute.
2023-01-09 15:41:59 +08:00
Jun Pataleta d2bacb04ff MDL-76597 mod_quiz: Set presentation role for the question list
Since the <ul> and <li> elements for listing the quiz questions and
elements are mainly used for layout purposes, it is better to set the
role of these elements to presentation only.
2023-01-09 15:41:59 +08:00
Jun Pataleta 77a0f1b129 MDL-76597 mod_quiz: Add label for question checkboxes 2023-01-09 15:41:59 +08:00
Jun Pataleta ca841d1489 MDL-76597 mod_quiz: Darken section heading on quiz questions page 2023-01-09 15:41:59 +08:00
Jun Pataleta c2216eefa6 MDL-76597 mod_quiz: Add label for version selector 2023-01-09 15:41:59 +08:00
Jun Pataleta 241da816db MDL-76597 mod_quiz: Add a default sr-only section heading
Add a default sr-only section heading in order to prevent having an
empty heading for the quiz section which is not good for accessibility.

Plus:
- There's also an existing issue where filters are never applied to
section headings on load. This has been fixed in this commit as well.
- Button role added for the edit section button which enables it to
take advantage of the theme highlighting when it receives focus.
2023-01-09 15:41:59 +08:00
Jake Dallimore 18302e1244 MDL-75532 enrol_lti: fix optional lineitemsurl in grade sync task
As in MDL-74691, we need either or both of these fields, meaning either
one could be omitted. This just supports that as per the fix made in
MDL-74691.
2023-01-09 11:39:17 +08:00
Jake Dallimore 2080ba7c83 MDL-75532 enrol_lti: add tests for coupled and decoupled line items
This covers the following cases:
1. Where only the 'lineitem' service endpoint is provided
2. Where only the 'lineitems' service endpoint is provided.
Existing tests already cover the case where both are provided.
2023-01-09 11:39:09 +08:00
Simey Lameze e1204dc4f1 MDL-76652 behat: use data generator and remove duplicated steps 2023-01-09 10:16:50 +08:00
Simey Lameze 33b7115024 MDL-76652 behat: add coverage for postwithoutthrottling logic 2023-01-09 10:16:50 +08:00
Paul Holden b99d68087d Merge branch 'MDL-32114-401' of https://github.com/srobotta/moodle into MOODLE_401_STABLE 2023-01-06 11:20:47 +00:00
Paul Holden 93d95cf1fe Merge branch 'MDL-76578-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2023-01-06 10:41:36 +00:00
Paul Holden 13a6018b6d Merge branch 'MDL-76781-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-01-06 10:23:55 +00:00
Paul Holden ee507d22ec MDL-76812 reportbuilder: ensure audience key is incremented correctly. 2023-01-06 09:58:05 +00:00
Ilya Tregubov 145317b2b3 MDL-76251 mod_forum: Fix illegal whitespace. Another try. 2023-01-06 16:41:25 +07:00
Ilya Tregubov c3fdfc996c Merge branch 'MDL-76251-patch-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2023-01-06 16:14:38 +07:00
Ilya Tregubov 6ee2865fcc MDL-76251 mod_forum: Fix illegal whitespace. 2023-01-06 16:11:51 +07:00
Ilya Tregubov 4943d24d50 Merge branch 'MDL-76251-401' of https://github.com/aya-saad1/moodle into MOODLE_401_STABLE 2023-01-06 15:37:55 +07:00
Stephan Robotta 64b8061180 MDL-32114 form: markdown must be preserved on saving post
- Markdown is saved to the DB, no conversion to HTML to keep
  ability to reedit the content without beaking it.
- Blockquote element is styled that it's distingishable from
  normal text.
2023-01-05 18:36:16 +01:00
Andrew Nicols b24414554f Merge branch 'MDL-76508-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2023-01-05 21:30:22 +08:00
Luca Bösch 325ca6568b MDL-76781 gradebook: support multilingual group names. 2023-01-05 13:27:02 +01:00
Paul Holden cd072308e5 weekly release 4.1+ 2023-01-05 10:53:10 +00:00
Aya Saad 3e0ad5831a MDL-76251 mod_forum: fix responsive issues in discussion 2023-01-05 11:41:19 +02:00
David Woloszyn a5430f1022 MDL-76607 timeline: Reordered message to account for long course name 2023-01-05 12:13:50 +11:00
David Woloszyn 46fca91bc4 MDL-76607 css: Fixed various classes where long strings break layout 2023-01-05 12:13:49 +11:00
Paul Holden f8b463e394 MDL-76787 tiny_h5p: correct capability for plugin enabled state. 2023-01-04 16:07:47 +00:00
Sara Arjona 717e049627 Merge branch 'MDL-76375-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-01-04 16:21:42 +01:00
Luca Bösch 6e286481e0 MDL-76375 quiz generator: Allow more than one attempt by Behat tests. 2023-01-04 15:15:46 +01:00
Paul Holden 0563f72142 MDL-76725 mod_wiki: avoid named arguments in real path callback.
See also f4fb91ae. PHP8 now supports named arguments in calls to
the `call_user_func_array` method, which can result in differing
behaviour compared to PHP7, e.g. in this case it was throwing an
exception due to an unknown named parameter.
2023-01-04 14:08:14 +00:00
Sara Arjona 1cf0f78b9a Merge branch 'MDL-76221-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-04 13:09:18 +01:00
Paul Holden d95ab775ac MDL-76657 grade: load required test libraries for grade helper. 2023-01-04 11:22:42 +00:00
Paul Holden 56a3828cf7 Merge branch 'MDL-76657-401' of https://github.com/rezaies/moodle into MOODLE_401_STABLE 2023-01-04 11:10:39 +00:00
Paul Holden 4ecd652189 MDL-76221 reportbuilder: improve report test generator methods.
Test generators for creating report columns, filters and conditions
now allow for setting all persistent properties.
2023-01-04 10:56:23 +00:00
Jun Pataleta 9c4b8bf7e8 Merge branch 'MDL-74822-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2023-01-04 17:29:21 +08:00
Jun Pataleta c380811bb2 MDL-76601 block_myoverview: Remove hover action before clicking on menu
With the course card menu now always displayed, there's no need to hover
first before clicking on the menus on block_myoverview Behat tests.
2023-01-04 17:22:38 +08:00
Jun Pataleta 3e175706ff MDL-76601 blocks: Always display course card menus
Displaying the course card menu only on hover is bad in terms of
accessibility as it prevents keyboard-only users from accessing the
menu. So it's better to always display them.
2023-01-04 17:22:38 +08:00
Sara Arjona db3bc708c4 Merge branch 'MDL-76181-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-04 09:20:19 +01:00
Sara Arjona 87b3be343e Merge branch 'MDL-76308-401' of https://github.com/BruceGoodGuy/moodle into MOODLE_401_STABLE 2023-01-03 14:13:00 +01:00
Paul Holden a25f2d0d7e Merge branch 'MDL-53137-401' of https://github.com/lucisgit/moodle into MOODLE_401_STABLE 2023-01-03 12:14:36 +00:00
Sara Arjona 0eb65f27ba Merge branch 'MDL-71506-401' of https://github.com/lucaboesch/moodle into MOODLE_401_STABLE 2023-01-03 13:10:17 +01:00
Paul Holden a4dfd67aed Merge branch 'MDL-75346-reset_dashboard_error-401' of https://github.com/leonstr/moodle into MOODLE_401_STABLE 2023-01-03 11:28:28 +00:00
Shamim Rezaie 3a5820f3c4 MDL-76657 gradebook: Remove hard-coded plugin names from unit test 2023-01-03 20:23:48 +11:00
Andrew Nicols a9abcf1af7 MDL-32105 mod_glossary: Improve behat test 2023-01-03 15:32:12 +08:00
Andrew Nicols 72f4f8ec7c Merge branch 'MDL-32105-401' of https://github.com/Chocolate-lightning/moodle into MOODLE_401_STABLE 2023-01-03 15:32:04 +08:00
Peter 9fd77db89a MDL-32105 mod_glossary: Restrict glossary aliases by set of keywords 2023-01-03 13:50:19 +08:00
Huong Nguyen c6a1770682 MDL-74822 usertours: Fix accessibility issues with user tours
Including in this commit:
 - Prevent the tour to be displayed if the CSS is disabled by the browser
 - Removed redundant tabindex=0 attribute on the target
 - Created extra code to re-calculate the suitable position of the tour
 - Fixed tour issue in 200% and 400% zoom
 - Fixed tour highlight is not correct in 200% and 400%
2023-01-03 10:35:24 +07:00
Sara Arjona 3e4ba8af5c Merge branch 'MDL-60038-401' of https://github.com/aneno-m-e/moodle into MOODLE_401_STABLE 2023-01-02 16:35:23 +01:00
Luca Bösch dcb0de7c92 MDL-71506 mod_choice: suppress non respondents in downloads if set so. 2023-01-02 15:53:20 +01:00
Sara Arjona e2c8f3db7c Merge branch 'MDL-76106-401' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_401_STABLE 2023-01-02 13:07:39 +01:00
Sara Arjona b7b2097f50 Merge branch 'MDL-76760-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2023-01-02 12:27:40 +01:00
Paul Holden 0dbc7187ff MDL-76181 reportbuilder: sort columns during stress testing. 2022-12-29 13:57:37 +00:00
Sara Arjona 7e1aa845c7 weekly release 4.1+ 2022-12-29 12:57:44 +01:00
Sara Arjona 810cffb702 Merge branch 'MDL-76399-patch-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2022-12-29 09:13:32 +01:00
Ilya Tregubov 5271bd9237 MDL-76399 behat: switch to appropriate Behat step for selects. 2022-12-29 14:53:16 +07:00
Ilya Tregubov f84d8e3c37 Merge branch 'MDL-76399-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-29 09:43:28 +07:00
Sara Arjona a3a3fd451c Merge branch 'MDL-76004-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2022-12-28 18:22:35 +01:00
Sara Arjona 52d5ebbb21 Merge branch 'MDL-72523-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-28 13:01:39 +01:00
Sara Arjona c72b7b7edc Merge branch 'MDL-76617_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2022-12-28 12:42:21 +01:00
Paul Holden c4960a2adf MDL-72523 calendar: return original focus from event modals. 2022-12-28 11:14:44 +00:00
Huong Nguyen 510bf00643 MDL-72523 javascript: Introduce setReturnElement for core/modal 2022-12-28 11:14:44 +00:00
Sara Arjona d3fca5e689 Merge branch 'MDL-72563-401' of https://github.com/KepaUrzelai/moodle into MOODLE_401_STABLE 2022-12-28 12:13:16 +01:00
Sara Arjona 1be732e913 Merge branch 'MDL-69071-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-28 11:41:11 +01:00
Paul Holden d2f55155a8 MDL-76760 tool_behat: defer library loading until service execution.
Ensures that API documentation can be generated without requiring
the presence of the `vendor/` directory.
2022-12-28 10:39:48 +00:00
Sara Arjona 430c7ff4e7 Merge branch 'MDL-76734-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2022-12-28 10:04:31 +01:00
Ilya Tregubov 181cab2fbd Merge branch 'MDL-76731_401' of https://github.com/PhilippImhof/moodle into MOODLE_401_STABLE 2022-12-28 15:14:07 +07:00
Sara Arjona f4f0207693 Merge branch 'MDL-76679-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-27 16:55:25 +01:00
Amaia Anabitarte ad8a10e7b6 MDL-76578 core_course: One section per page summary information 2022-12-26 16:03:34 +01:00
Meirza 9d822d41d8 MDL-76508 templates: Handling non-JSON string
When the param string contains a left curly bracket as the first character,
the system will assume the string is a JSON string and will be parsed and returned as an object.
But in some cases, the string is not JSON and will return an error if the system parses it.
For example, a user might have used the course name with a left curly bracket as the first character.
Adding a double quote after the left curly bracket to differentiate between string and JSON string,
so it can be safe to parse the string.
2022-12-24 05:50:56 +07:00
Noemie Ariste e89ed4b463 MDL-60038 moodlelib: ignore site policy if user auth type = 'webservice' 2022-12-23 10:09:09 +13:00
Eloy Lafuente (stronk7) 5db1ac4e98 MDL-76617 store_mongodb: Adjust moodle to mongo-php-library to v1.15.0
The new library version should work without problems with older
php-mongodb extension versions:
- v1.15.0 (paired version, tested).
- v1.14.1 (tested)

So, here, in 401_STABLE, we aren't raising the requirements. We have
done that in master, in order to get php82 support, but not here. For
more details about compatibilities, see:

https://www.mongodb.com/docs/drivers/php/#compatibility
2022-12-22 19:36:40 +01:00
Eloy Lafuente (stronk7) c22b39a650 MDL-76617 store_mongodb: Update mongo-php-library to v1.15.0
This updates the library from v1.13.1. Fixes some php81 warnings
leading to failed/risky tests.

The new library version should work without problems with older
php-mongodb extension versions:
- v1.15.0 (paired version, tested).
- v1.14.1 (tested)
2022-12-22 19:36:40 +01:00
Philipp Imhof 9d64ad1416 MDL-76731 behat: add steps to check for version
Co-authored-by: Andrew Nicols <andrew@nicols.co.uk>
2022-12-22 17:12:47 +01:00
Tony Butler 11816b9e41 MDL-53137 qtype_numerical: Swap geo tolerance limits for -ve answers 2022-12-22 15:32:39 +00:00
Ilya Tregubov 178aa05227 weekly release 4.1+ 2022-12-22 19:16:29 +07:00
Ilya Tregubov 9f2e81004c Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2022-12-22 19:16:26 +07:00
Ilya Tregubov 0b7102abcc Merge branch 'MDL-76667-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-22 12:27:51 +07:00
Paul Holden fe16fea153 Merge branch 'MDL-75965-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2022-12-22 12:27:51 +07:00
Andrew Nicols 86f9ffc274 MDL-75105 tool_behat: Correct version number 2022-12-22 12:27:51 +07:00
Andrew Nicols a439461f03 MDL-75105 tool_behat: Coding style fixes 2022-12-22 12:27:51 +07:00
Andrew Nicols 5c15c1f211 Merge branch 'MDL-75105_401_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_401_STABLE 2022-12-22 12:27:51 +07:00
Paul Holden 86d02a9239 Merge branch 'MDL-75914-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2022-12-22 12:27:51 +07:00
Thong Bui a93d6e5f2d MDL-75978 Quiz\D&D: on mobile, a moving line-wrap can bork the question 2022-12-22 10:08:03 +07:00
AMOS bot 68706da86a Automatically generated installer lang files 2022-12-22 00:07:43 +00:00
Meirza 296fd70a2c MDL-75914 webservice: Added fake URL to avoid debugging output.
Webservice doesn't need to set the page URL. Hence,
any function that requires a page URL will raise debugging output.
The patch fixes it by adding a fake URL for the webservice.
The patch also removed assertDebuggingCalled because it is no longer needed.
2022-12-21 16:33:00 +07:00
Mark Johnson 0c448af668 MDL-75105 tool_behat: List available data generators
This will find all data generators that can be used in behat via the
'the following "something" exist:' step, and display them in a select
list on the step definitions page.

When a generator is selected, it will fetch the required fields for that
generator and display them on the page.
2022-12-21 08:38:28 +00:00
Huong Nguyen 1f7bb3a50d MDL-75965 question_multichoice: Misalignment of feedback icons 2022-12-21 14:15:42 +07:00
Andrew Nicols 744e1dbaea MDL-76734 editor_tiny: Listen to TinyMCE submit events
jQuery submit events do not trigger the native submit event, and
therefore the TinyMCE submit listener is not called. This means that the
tinymce.triggerSave() function is not called, and the editor content is
not saved.

To work around this, if there is a form for the Node that the editor is
attached to, the jQuery submit event is listened to and the save event
called.

Unfortunately it is not possible to use a global jQuery submit listener
added to the document to save all editors on the page.
In some cases, this is too late because the bubbling process means that
a child node consumer may attempt to consume the data before the
delegated handler is called for the document.
2022-12-21 13:03:14 +08:00
Ilya Tregubov 5b47024f13 Merge branch 'MDL-76727-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2022-12-21 09:50:18 +07:00
Paul Holden dcf4a4629b Merge branch 'MDL-75279-401' of https://github.com/spvickers/moodle into MOODLE_401_STABLE 2022-12-20 10:27:38 +00:00
Andrew Nicols bb7cce1e56 MDL-76727 core: Allow phpcs configuration to be overridden locally
This change reduces the priority of the shipped phpcs configuration to
allow for local overrides.

This is beneficial in several situations:
- when users wish to apply stricter or additional standards
- when the integration team wishes to trial new rules
2022-12-20 09:35:45 +08:00
Stephen Vickers 27cc23ca7a MDL-75279 mod_lti: Add username to NRPS response 2022-12-19 18:09:27 +00:00
Paul Holden e8123832fb Merge branch 'MDL-72906-401' of https://github.com/tdjones/moodle into MOODLE_401_STABLE 2022-12-19 10:23:10 +00:00
Ilya Tregubov 6b47dc3b29 Merge branch 'MDL-74779-401' of https://github.com/ssj365/moodle into MOODLE_401_STABLE 2022-12-19 09:44:48 +07:00
Leon Stringer a77b23cdb7 MDL-75346 core_my: Handle missing blocks on reset
If the default dashboard contained a block that was missing from disk
then "Exception - Call to a member function instance_copy() on bool"
was shown to users.  This change only shows an error with debugging
enabled which now includes the name of the missing block.
2022-12-17 17:39:44 +00:00
Paul Holden 7708594e89 MDL-76399 question: switch to appropriate Behat step for selects. 2022-12-16 13:09:46 +00:00
Paul Holden 1dda343f05 MDL-76399 behat: improvements to "should exist in" thrown exception. 2022-12-16 12:29:57 +00:00
Paul Holden 4f19d454ea Merge branch 'MDL-76026_401' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_401_STABLE 2022-12-16 09:54:15 +00:00
Andrew Nicols 24c009f222 weekly release 4.1+ 2022-12-16 09:05:52 +08:00
Andrew Nicols 5556693437 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2022-12-16 09:05:50 +08:00
Paul Holden b874e20b55 MDL-69071 core: retrieve full result from remote content.
Use the full result from download_file_content within the component
installer to ensure that spurious debugging is not emitted during
operation. Handle validation of the returned data consistently.
2022-12-15 17:19:17 +00:00
Paul Holden 06383b0b8a MDL-76679 admin: correct password config field template.
The template changes were missed as part of 0795b579, update them
to match so that they continue to work with the unmask JS module.
2022-12-14 19:12:05 +00:00
Sara Arjona 4979a5e988 Merge branch 'MDL-76674_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2022-12-14 18:34:50 +01:00
Amaia Anabitarte 76ce30ca98 MDL-76004 core_h5p: Ensure the browser is serving updated file 2022-12-14 16:22:46 +01:00
Eloy Lafuente (stronk7) 1e54868139 MDL-76674 core_lang: Add string for new America/Ciudad_Juarez 2022-12-14 15:51:10 +01:00
Paul Holden a33d1c8903 Merge branch 'MDL-76666_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE 2022-12-14 13:22:03 +00:00
Eloy Lafuente (stronk7) c5213c103b MDL-76666 local_langimport: Better handling of long locales
Under some linux versions, and depending of the configured
locale categories, it's possible to get a current locally
which length > 255 when calling to setlocale(LC_ALL, 0).

Later, if that long locale is tried to be restored, there
is a "setlocale(): Specified locale name is too long" warning
error.

When that happens we need to split the long locale into
individual chunks and set all the (six) locale categories
supported one by one.

Covered with tests, note that, in practice, this only
happens with linux because it supports 12 locale categories
@ OS level. Both BSD (6) and Windows (5) hardly can reach the limit.

No matter of that, the tests have been designed to ensure that
they pass on all OSs, just the new code only will be executed
on linux.
2022-12-14 12:25:17 +01:00
Sara Arjona 4ce5c57547 Merge branch 'MDL-75441-401' of https://github.com/aanabit/moodle into MOODLE_401_STABLE 2022-12-14 09:57:12 +01:00
AMOS bot 7496e9df75 Automatically generated installer lang files 2022-12-14 00:07:43 +00:00
Anupama Sarjoshi fe094a3705 MDL-76026 Question bank: Fix errors related to categories renaming
This part of the code in 'question_category_object.php' 'update_category' method was used before Moodle 4.0 version for renaming
the random questions in an updated category. For Moodle 4.1, it is unnecessary as the details of random questions are no more
stored in 'question' table but in 'question_set_references' table. The method call move_question_set_references handles the same.
2022-12-13 18:01:24 +00:00
Amaia Anabitarte 93bd773ee9 MDL-75441 mod_forum: Show add new post button to guest users 2022-12-13 17:38:30 +01:00
Paul Holden 0d20d1e8aa MDL-76667 forms: mark modal form as submitted upon success.
Ensure the form change checker module doesn't warn user about it.
2022-12-13 14:48:10 +00:00
Andrew Nicols 361ebe960b Merge branch 'MDL-76509-401' of https://github.com/safatshahin/moodle into MOODLE_401_STABLE 2022-12-13 20:31:35 +08:00
Andrew Nicols 0d5d3a0c49 Merge branch 'MDL-76536-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-13 11:42:35 +08:00
Andrew Nicols 4d94f7e677 MDL-76293 gradebook: Address coding violations
This includes a data provider which had the 'test_' prefix and was
therefore run as a test.
2022-12-13 11:07:02 +08:00
Andrew Nicols 6f68abf715 Merge branch 'MDL-76293_401' of https://github.com/mkassaei/moodle into MOODLE_401_STABLE 2022-12-13 11:06:59 +08:00
Safat ac21fa9a1c MDL-76509 core: Upgrade error resolve for slot tags 2022-12-13 13:39:02 +11:00
Shamiso.Jaravaza f954848667 MDL-74779 mod_bigbluebuttonbn: Fix recording sort
AMOS BEGIN
 MOV [config_recordings_sortorder,mod_bigbluebuttonbn],[config_recordings_asc_sort,mod_bigbluebuttonbn]
 MOV [config_recordings_sortorder_description,mod_bigbluebuttonbn],[config_recordings_asc_sort_description,mod_bigbluebuttonbn]
AMOS END
2022-12-12 13:33:22 -07:00
hieuvu a42c52bf4e MDL-76106 qtype_ddmarker: fix the missing maker issue.
We will not calculate old maker position again and using old data.
This will make sure the position of makers is correct
when the background image is smaller than dropzone.
2022-12-12 20:31:24 +07:00
Sara Arjona 987542f609 Merge branch 'MDL-75571-401' of https://github.com/jacdsouza/moodle into MOODLE_401_STABLE 2022-12-12 11:23:18 +01:00
Khoa Nguyen Dang 959b58e132 MDL-76308 Question\D&D: The draggable area is slim characters to select 2022-12-12 13:53:57 +07:00
Andrew Nicols be5cf43aa4 Merge branch 'MDL-76398-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-11 20:20:19 +08:00
Jackson D'souza de182b9a22 MDL-75571 tool_componentlibrary: Custom activity icon 2022-12-09 15:56:07 +00:00
Jackson D'souza c48f443c32 MDL-75571 theme_boost: Activity icon
* Use Activity get_icon_url helper method to fetch icon.
2022-12-09 15:56:07 +00:00
Jackson D'souza fc67298a27 MDL-75571 block_timeline: Display custom activity icon if available. 2022-12-09 15:56:07 +00:00
Jackson D'souza c3db3298dd MDL-75571 calendar: Activity icon
* Use Activity get_icon_url helper method to fetch icon.
2022-12-09 15:56:07 +00:00
Sara Arjona 6bb2b9aa69 Merge branch 'MDL-76274-401' of https://github.com/cameron1729/moodle into MOODLE_401_STABLE 2022-12-09 16:18:08 +01:00
Paul Holden 187a7f7ac5 MDL-76536 enrol: prevent invalid role assignments in course creation.
Upgrade step to fixup existing bad data.
2022-12-09 11:39:19 +00:00
Sara Arjona 6b24f59302 weekly release 4.1+ 2022-12-09 08:56:58 +01:00
Sara Arjona 797a20a597 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2022-12-09 08:56:55 +01:00
Jun Pataleta 7a1e9ad82c Merge branch 'MDL-76556-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2022-12-08 10:07:47 +08:00
Andrew Nicols bd40bc0341 Merge branch 'MDL-76491-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-08 08:10:44 +08:00
AMOS bot 398fc9b0d3 Automatically generated installer lang files 2022-12-08 00:07:41 +00:00
Andrew Nicols 2a69a46a71 Merge branch 'MDL-76550_401' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_401_STABLE 2022-12-08 08:06:49 +08:00
Andrew Nicols 41b48aeea5 Merge branch 'MDL-76074-401' of https://github.com/srobotta/moodle into MOODLE_401_STABLE 2022-12-08 07:28:45 +08:00
Andrew Nicols 3a544f384b Merge branch 'MDL-76116-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2022-12-08 06:17:10 +08:00
Sara Arjona d8f2ead786 Merge branch 'MDL-75588-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2022-12-07 19:31:11 +01:00
Trevor Jones 50f06cb2be MDL-72906 Quiz: Prevent scrollbar on multichoice
Remove negative margin from the "clear my choice" anchor.
With the negative margin, when the containing box height is calculated
the anchor's hidden style overflows beyond the boundary and triggers
the overflow:auto to add a scroll bar.
2022-12-07 11:23:35 -07:00
Mahmoud Kassaei d4abc697b8 MDL-76293 Gradebook: PHPUnit fails when plugins are not expected 2022-12-07 17:41:19 +00:00
Sara Arjona 10c1a7de42 Merge branch 'MDL-76575-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2022-12-07 18:32:19 +01:00
Sara Arjona dc444f4634 Merge branch 'MDL-76500-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-07 18:27:53 +01:00
Sara Arjona 151de4586d Merge branch 'MDL-76193-401' of https://github.com/JBThong/moodle into MOODLE_401_STABLE 2022-12-07 17:26:22 +01:00
Sara Arjona 52890694bf Merge branch 'MDL-76571_401' of https://github.com/timhunt/moodle into MOODLE_401_STABLE 2022-12-07 17:17:41 +01:00
Tim Hunt 95f073453b MDL-76571 quiz reports: should not show description items
... or anything else with length = 0. This got broken in MDL-71696.

The only way to fix this kind-of involves and API change to
quiz_report_get_significant_questions. However, it is only changing
the external API of this function back to how it was before the 4.0 release,
and the chnages in 4.0 were never documented, nor, I would guess, intended,
since they just broke things.
2022-12-07 14:53:41 +00:00
Jun Pataleta 6661a3eb45 Merge branch 'MDL-76559-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2022-12-07 22:41:07 +08:00
Andrew Nicols 0f8f164a07 MDL-76559 core: validate_email does not take false either 2022-12-07 21:40:18 +08:00
Sara Arjona 4cc96c42fa Merge branch 'MDL-76273-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-07 12:51:37 +01:00
Huong Nguyen 208c9fb5af MDL-75588 assign: Reset completion status when resetting a submission 2022-12-07 16:16:01 +07:00
Huong Nguyen 8884da3d8b MDL-76575 tiny_media: Remove unnecessary console log 2022-12-07 15:50:40 +07:00
Jun Pataleta e0f34d5049 Merge branch 'MDL-73017-M401_add-environment-check-for-versions-not-supporting-php-8-1' of https://github.com/ziegenberg/moodle into MOODLE_401_STABLE 2022-12-07 13:47:12 +08:00
Meirza 09e171c522 MDL-76116 mnet: styling the delete key confirmation window properly 2022-12-07 11:26:26 +07:00
Jun Pataleta 4426e21204 Merge branch 'MDL-76559-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2022-12-06 23:19:37 +08:00
Andrew Nicols fb7d1b34ef MDL-76559 core: validate_email should not accept empty values 2022-12-06 20:53:47 +08:00
Jun Pataleta 32bb535cb6 Merge branch 'MDL-76476-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-06 19:41:17 +08:00
Jun Pataleta dd3b92545e Merge branch 'MDL-75381-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-06 19:24:34 +08:00
Ilya Tregubov e572943d21 Merge branch 'MDL-76490-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-06 13:09:38 +03:00
Paul Holden 2d2b2e3244 MDL-76500 grade: fix grade form when item cannot be overridden. 2022-12-06 09:20:01 +00:00
Ilya Tregubov e03c52acbe Merge branch 'MDL-76446-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-06 12:19:09 +03:00
Cameron Ball c503238978 MDL-76274 assignfeedback_editpdf: Fix upgrade step for stale conversions 2022-12-06 16:05:44 +08:00
Ilya Tregubov bc5c812db3 Merge branch 'MDL-75516_401' of https://github.com/larsbonczek/moodle into MOODLE_401_STABLE 2022-12-06 10:38:12 +03:00
Stephan Robotta d7734740b2 MDL-76074 completion: fixed filter in reports with custom user fields
When the site uses custom user text fields that would show up in a
user list, the filter for firstname or lastname didnt work anymore.
If a filter was used, no result would show up. Users where shown only
when the course reports where used without filters.
2022-12-06 08:24:46 +01:00
Andrew Nicols ba38d916be Merge branch 'MDL-75446-401' of https://github.com/andelacruz/moodle into MOODLE_401_STABLE 2022-12-06 15:19:47 +08:00
Andrew Nicols e7c70fd2c0 Merge branch 'MDL-75573-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-06 13:55:58 +08:00
Andrew Nicols fa309d0650 Merge branch 'MDL-76145-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2022-12-06 13:36:16 +08:00
Brendan Heywood 11721f7ff5 MDL-76478 formslib: Fix autocomplete bug of existing passwords 2022-12-06 12:34:25 +11:00
Paul Holden 1efd88b2c8 MDL-76273 core: multi-byte character filename support for TCPDF.
See: https://github.com/tecnickcom/TCPDF/pull/562
2022-12-05 15:04:23 +00:00
Paul Holden 20ac0d1626 MDL-76490 behat: use defined step for interaction with autocomplete. 2022-12-05 14:22:19 +00:00
Marina Glancy 40ee69ea8b MDL-76490 behat: correct step for opening autocomplete in container. 2022-12-05 14:21:53 +00:00
Andrew Nicols 9e1caf81ce MDL-76569 editor_tiny: Set table row header style
Configure Tiny to use markup of:

table > thead > tr > th

For all table headers.
2022-12-05 20:50:06 +08:00
Anupama Sarjoshi 87d5f8eb0f MDL-76550 Quiz and qbank: Fix display of Category and question names 2022-12-05 12:19:14 +00:00
Sara Arjona 05c53f2c44 Merge branch 'MDL-75789-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-05 12:53:43 +01:00
Sara Arjona 1b9bcbf19d Merge branch 'MDL-76166-username-logging-MOODLE_401_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_401_STABLE 2022-12-05 12:44:23 +01:00
Ilya Tregubov a3ed6cea5f Merge branch 'MDL-75788-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2022-12-05 14:31:44 +03:00
Sara Arjona f2dd9867ab Merge branch 'MDL-76482-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2022-12-05 12:04:02 +01:00
Daniel Ziegenberg bbd49c9533 MDL-73017 env: Moodle 3.9.x, 3.11.x and 4.0.x do not support PHP 8.1
This commit adds an additional environment check for the unsupported
PHP 8.1 version to Moodle 3.9.x, 3.11.x and 4.0.x.

It also updates the lang string for unsupported PHP version.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2022-12-05 11:29:09 +01:00
Angelia Dela Cruz bc82295f6a MDL-75446 behat: Workshop behat generators use UI
Replace steps that manually add Workshop instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
2022-12-05 16:05:07 +08:00
Ilya Tregubov 2e1118fa62 Merge branch 'MDL-76330-MOODLE_401_STABLE' of https://github.com/sh-csg/moodle into MOODLE_401_STABLE 2022-12-05 09:22:05 +03:00
Ferran Recio 272a458099 MDL-76225 core_courseformat: fix section title id 2022-12-05 13:48:05 +08:00
Thong Bui 2370255e4c MDL-76193 Questions: Backup and Restore with tags fails 2022-12-05 10:01:48 +07:00
AMOS bot 9cf6e7128e Automatically generated installer lang files 2022-12-04 00:08:32 +00:00
Andrew Nicols ed29852851 MDL-76556 tool_log: Set the store property correctly 2022-12-03 11:48:26 +08:00
Ilya Tregubov a7e9836173 Merge branch 'MDL-76495-401' of https://github.com/marinaglancy/moodle into MOODLE_401_STABLE 2022-12-02 13:49:13 +03:00
Lars Bonczek add1d29339 MDL-75516 core: Perform proper JSON encoding in mustache quote helper 2022-12-02 11:22:23 +01:00
Paul Holden 68dc955abe MDL-76491 javascript: add missing core/notification imports. 2022-12-02 10:06:21 +00:00
Paul Holden 258fe36e10 MDL-76491 javascript: prevent eslint undefined Notification import. 2022-12-02 10:06:04 +00:00
Paul Holden 76fde950c1 MDL-76398 reportbuilder: use improved action menu steps in Behat.
Improved steps for using actions menus were added in 232ebac3, so
make use of them here for consistency/reliability.
2022-12-02 09:55:55 +00:00
Paul Holden d4681259bc MDL-76398 behat: broader action menu partial matching by element.
For action menu elements whose trigger element isn't plain text
(e.g. a pix icon), we should be able to match via the title of
that element.
2022-12-02 09:55:45 +00:00
Ilya Tregubov e6dec9c0fb Merge branch 'MDL-75951-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2022-12-02 11:55:54 +03:00
Dani Palou 8b153fb67d MDL-75788 behat: Use profile field generators in existing tests 2022-12-02 14:58:28 +08:00
Dani Palou 1145b8f597 MDL-75788 testing: Handle new lines in menu profile field generator 2022-12-02 14:58:28 +08:00
Andrew Nicols 743fc68b4f MDL-75951 core: Update box/spout to address PHP 8.1 deprecation
This change is a direct pull from an upstream fix:
https://github.com/openspout/openspout/commit/64a09a748d04992d63b38712599a9d8742bd77f7

This addresses the deprecation of auto_detect_line_endings in PHP 8.1.
2022-12-02 13:58:39 +08:00
Ilya Tregubov 9d801ab8a0 Merge branch 'MDL-76494-401' of https://github.com/marinaglancy/moodle into MOODLE_401_STABLE 2022-12-02 08:41:34 +03:00
hieuvu b7f08d7ecc MDL-76106 qtype_ddmarker: Improve loading consistency.
Wait for the image to load completely before running the js.
2022-12-02 12:39:23 +07:00
Andrew Nicols 715ec40ad6 Merge branch 'MDL-76493-401' of https://github.com/marinaglancy/moodle into MOODLE_401_STABLE 2022-12-02 12:15:30 +08:00
Paul Holden 1d98d162a1 MDL-75573 backup: translate async operation type in messages. 2022-12-01 19:48:58 +00:00
Stefan Hanauska d42189d71a MDL-76330 enrol: Check permission to show edit icon 2022-12-01 20:07:13 +01:00
Sara Arjona 7f5f04dbc2 weekly release 4.1+ 2022-12-01 16:07:58 +01:00
Sara Arjona 82d90a8950 NOBUG: Fixed file access permissions 2022-12-01 16:07:57 +01:00
Simey Lameze e581bd6cde MDL-76507 behat: change step to use 'Recent and next 60 days' option
It was detected that 'This month' option may cause failures in builds in between months
so using the 'Recent and next 60 days' still fixes the weekend scenario and also the
in between months issue.
2022-12-01 08:51:26 +01:00
Andrew Nicols 68cd224ef3 Merge branch 'MDL-75604-401' of https://github.com/ssj365/moodle into MOODLE_401_STABLE 2022-12-01 08:59:07 +03:00
Andrew Nicols afef05b07c Merge branch 'MDL-75281-401' of https://github.com/call-learning/moodle into MOODLE_401_STABLE 2022-12-01 08:59:07 +03:00
Jun Pataleta d9cd25c2fb MDL-76497 upgrade: add the 4.1.0 separation line to all upgrade scripts 2022-12-01 08:59:07 +03:00
Sara Arjona 960bc4e3c5 Merge branch 'MDL-76226-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-01 08:59:07 +03:00
Sara Arjona cf06e4207f Merge branch 'MDL-76507-401' of https://github.com/lameze/moodle into MOODLE_401_STABLE 2022-12-01 08:59:07 +03:00
Jun Pataleta 9f06111278 Merge branch 'MDL-76250-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-01 08:59:06 +03:00
Andrew Nicols a8bcb23134 MDL-76483 core: Handle default value for get_docs_url() 2022-12-01 08:59:06 +03:00
Ilya Tregubov 5c96f74a06 Merge branch 'MDL-74853-401' of https://github.com/marinaglancy/moodle into MOODLE_401_STABLE 2022-12-01 08:59:06 +03:00
Ilya Tregubov 7cc3d06276 Merge branch 'MDL-76487-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2022-12-01 08:59:06 +03:00
Andrew Nicols b00f1464a8 Merge branch 'MDL-75826-401' of https://github.com/meirzamoodle/moodle into MOODLE_401_STABLE 2022-12-01 08:59:06 +03:00
Andrew Nicols 88393518f5 MDL-76487 tiny_autosave: Clarify autosave store rejection message 2022-12-01 08:59:06 +03:00
Jun Pataleta 57e5cc1588 Merge branch 'MDL-68981-401' of https://github.com/HuongNV13/moodle into MOODLE_401_STABLE 2022-12-01 08:59:06 +03:00
Andrew Nicols a0efc27d31 MDL-76487 tiny_autosave: Use navigator.sendBeacon instead of fetch
Firefox does not support the keepalive flag for fetch, despite every
other browser except IE supporting it.
2022-12-01 08:59:06 +03:00
David Woloszyn 0be376fdc0 MDL-76183 lib: Update Github URLs 2022-12-01 08:59:05 +03:00
Jun Pataleta 8bf788a1bd Merge branch 'MDL-76284-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-01 08:59:05 +03:00
Eloy Lafuente (stronk7) 864a2ea990 MDL-76429 composer: Bump to phpwebdriver 1.2.1 for php81 compat
Note this comes with a bunch of other small updates, all them
pretty minor and should not be problematic. Better we get them
than keeping them apart.
2022-12-01 08:59:05 +03:00
Andrew Nicols 73f10723b3 Merge branch 'MDL-76380-401' of https://github.com/paulholden/moodle into MOODLE_401_STABLE 2022-12-01 08:59:05 +03:00
sam marshall be11ee3383 MDL-76218 cachestore_redis: delete_many can fail with no keys
In some cases, we get an error message such as:

Wrong parameter count for Redis::zRem()

Within the delete_many function. This function requires at least one
key to be supplied, but if delete_many is called with an empty array,
we will call it with no keys.
2022-12-01 08:59:05 +03:00
Eloy Lafuente (stronk7) fbb0fd952d MDL-75977 xmldb: Avoid using null params on built-in DB functions
This changes a couple of cases, in postgres and oracle where we
were trying to calculate strlen() on null values (that causes a
PHP 8.1 warning).

Also, at the same time, fixing another case in xmldb_field, it
was detected that it had a bug around precision (being set to the
value of type), being used as object property, when it's not, so
it was also fixed by moving the code logic a little bit.

Note that the bug has been there since inception because there
isn't any code in Moodle using that ->precision property. It
was just detected thanks to PHP 8.2, but that's another story. :-)

Verified that with the patch:
- All DBs can be installed (phpunit install)
- Both DDL and DML pass without any ddl/dml warning (in all DBs).
2022-12-01 08:59:05 +03:00
Meirza 0cc4492303 MDL-76127 Profiling: Make the breadcrumb of the profiling URL clickable
Boost has the behavior to remove the last item action.
To avoid that, we need to add an action item.
2022-12-01 08:59:05 +03:00
Ilya Tregubov dcc2d22a74 Merge branch 'MDL-72019-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2022-12-01 08:59:05 +03:00
Meirza 1c2503a6de MDL-72019 user: Allows data to be formatted when exporting. 2022-12-01 08:59:05 +03:00
Laurent David c86d6510ce MDL-75281 mod_bigbluebuttonbn: Upgrade failure when table exists
* Fix several upgrade script issue when the recording table exists or plugin has been
downgraded prior to 4.x upgrade
2022-11-30 20:18:27 +01:00
Shamiso.Jaravaza a8f889acbf MDL-75604 mod_bigbluebuttonbn: Fix welcome section
* Removed welcome message from General settings
* Cleaned settings.php file to remove hardcoded add($item) after adding conditional element
2022-11-30 12:10:07 -07:00
Kepa Urzelai 5a07bcf871 MDL-72563 theme_boost: rubric area style fix 2022-11-30 15:13:50 +01:00
Marina Glancy 12ac6ce86b MDL-76494 libs: patch Box::Spout for PHP 8.1 - calling basename on null 2022-11-30 10:45:58 +01:00
Meirza 2db281b197 MDL-76145 course: Avoid long course names that exceed available space
Co-authored-by: Stephen Sharpe <stephen.sharpe@synergy-learning.com>
2022-11-30 11:36:24 +07:00
Andrew Nicols 805559cb48 MDL-76482 output: The javascript mustache helper should return a string 2022-11-30 12:18:47 +08:00
Huong Nguyen 19ed64f2d9 MDL-68981 tool_recyclebin: Force necessary settings when restoring
Created code to force the necessary settings for restore_item in:
  + course_bin class
  + category_bin class
2022-11-30 10:18:54 +07:00
Huong Nguyen dcc115786d MDL-68981 tool_recyclebin: Extra PHPUnit with General restore config 2022-11-30 10:18:54 +07:00
Huong Nguyen 2ef01c0fdf MDL-68981 tool_recyclebin: Extra Behat test with General restore config
Including in this commit:
 - Convert existing Behat scenario to use Data generators
 - Convert existing Behat scenario to use Provider
 - Add new scenario for Include users setting in General restore page
2022-11-30 10:18:54 +07:00
Brendan Heywood 2696f446ac MDL-76166 calendar: Ensure user is in server access logs 2022-11-30 13:26:27 +11:00
Brendan Heywood c45c98f6f2 MDL-76166 auth: Ensure user is in server access logs 2022-11-30 13:26:27 +11:00
Jonathan Champ 181ecedb11 MDL-76506 cache_application: Fix MDL_PERF and perfdebug checks 2022-11-29 13:28:05 -05:00
Paul Holden 7e8efa870d MDL-76446 user: correct logic for multiple keyword search.
When the keyword participant filter was used with multiple values
in conjunction with other participants filters, the boolean logic
was effectively:

 X AND Y OR Z

When what we actually wanted was:

 X AND (Y OR Z)
2022-11-29 16:31:05 +00:00
Paul Holden b363723f9a MDL-76476 tiny_media: don't load image preview if none exists. 2022-11-29 16:28:15 +00:00
Ilya Tregubov e0ef5d0638 Merge branch 'MDL-75463-401' of https://github.com/ilyatregubov/moodle into MOODLE_401_STABLE 2022-11-29 13:32:16 +03:00
Kevin Percy 38250aec8e MDL-75463 lib: Update Bennu version number to 0.2 2022-11-29 13:31:25 +03:00
Andrew Nicols 5475fb8a15 Merge branch 'MDL-76355-401' of https://github.com/marinaglancy/moodle into MOODLE_401_STABLE 2022-11-29 17:30:02 +08:00
Angelia Dela Cruz 5384f872bb MDL-75960 behat: Survey behat generators use UI
Replace steps that manually add Survey instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
2022-11-29 17:06:42 +08:00
Paul Holden eb3ee12852 MDL-75381 gradereport_grader: ensure valid paging preference value.
Set type of the report paging setting to integer, to ensure usage
of it is predictable. Unsupported operated type errors were thrown
on PHP8.0 when it's value contained a string or was empty.
2022-11-29 08:42:02 +00:00
Daniel Ziegenberg dded69ad15 MDL-74823 lib: HTMLPurifier upgrade to 4.16.0
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2022-11-29 16:39:48 +08:00
Daniel Ziegenberg 2cfaa895aa MDL-74823 lib: normalize line endings for HTMLPurifier
Prior to this change, all the line endings in the imported HTMLPurifier
library were using CRLF (\r\n aka Windows style), but the HTMLPurifier
source and also the downloadable artefacts use LF (\n aka Linux style)
as line endings. This has been the case since
510d190382 when with the commit
"MDL-38672 import HTML Purifier 4.5.0" all line endings were changed
from LF to CRLF. There was no comment in the commit on why this change
was done.

As the original source uses LF, this commit partly reverts
510d190382 and goes back to LF as line
endings.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2022-11-29 16:39:35 +08:00
Daniel Ziegenberg 60e176b50d MDL-74823 lib: HTMLPurifier upgrade to 4.14.0
Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2022-11-29 16:39:22 +08:00
Paul Holden 530e06da6d MDL-75789 restore: multi-byte safe substring calculating course names.
Co-authored-by: Leon Stringer <leon.stringer@ntlworld.com>
2022-11-29 08:36:00 +00:00
info@eWallah.net 4d9c6785ff MDL-65939 phpunit: Maildigest tests can query a wrong adhoc task 2022-11-29 15:41:31 +08:00
Simey Lameze 1b8456dbb1 MDL-76058 behat: send message using data generator 2022-11-29 15:37:15 +08:00
Andrew Nicols 3e26150eae Merge branch 'MDL-76088-401' of https://github.com/marinaglancy/moodle into MOODLE_401_STABLE 2022-11-29 15:09:46 +08:00
Pablo Amaya 5cf31d7445 MDL-74454 mod_scorm: Fixed problems in lateral navigation.
Fixed problems in lateral navigation and grading when
a SCORM has more than three levels

The SCORM module has problems with full screen display,
completion tracking and grading in SCORM.

Also resolves issues MDL-74992, MDL-73249, MDL-75407
2022-11-29 14:18:30 +08:00
Andrew Nicols 62238568a2 MDL-76258 mod_lti: Codign style fixes 2022-11-29 12:28:46 +08:00
Stefan Hanauska 6e9e2be8f4 MDL-76258 mod_lti: Reset clientid after restore 2022-11-29 12:28:46 +08:00
Andrew Nicols 34f8f82288 MDL-69570 assignfeedback_editpdf: Whitespace fix 2022-11-29 11:50:41 +08:00
Adrian Greeve ac8b7e9f0a MDL-69570 assignfeedback_editpdf: Upgrade step to remove files.
This upgrade step removes all orphaned editpdf feedback files and
records.
2022-11-29 11:50:41 +08:00
Adrian Greeve b50c240ab5 MDL-69570 assignfeedback_editpdf: Remove temp pdf files
This adds a new method to the assignfeedback edit pdf library
to specify user data file areas that will return just the meaningful
annotated feedback pdf.

get_file_areas has been updated for this plugin to return all
file areas related to assignfeedback_editpdf, and should stop
producing orphaned files and records when a course reset is done.

Thanks to @toniginard who provided a base solution for me to work
off.
2022-11-29 11:50:41 +08:00
Jonathan Champ 189c4ce4de MDL-76506 core\lock: Fix MDL_PERF and perfdebug checks 2022-11-28 18:54:13 -05:00
Mark Holliday c55f219d77 MDL-76376 scorm: fix PHP8 TypeError (null is not Countable) 2022-11-28 17:52:10 -05:00
Paul Holden e3840909f5 MDL-76380 tool_oauth2: remove double persistent load on update.
The method already loaded the validated persistent model data on the
previous line, there's no need to do it again (while also trying to
load unvalidated properties).
2022-11-28 19:38:52 +00:00
Paul Holden 523b590711 MDL-76250 mod_assign: disable form change checker for grading options.
This was previously fixed in 8e9efe60, but seems to have regressed
somewhere along the way.
2022-11-28 16:07:29 +00:00
Paul Holden b391ed9941 MDL-76226 admin: account for preset config checkboxes other than bool.
The assumption that the settings checkbox always stores boolean values
(e.g. 0/1) isn't correct. The `perfdebug` configuration instead uses
the values 7/15.
2022-11-28 16:04:43 +00:00
Marina Glancy a5f92c041e MDL-74853 various: add second parameter to htmlentities functions
Default value of the $flag argument changed in PHP 8.1 from ENT_COMPAT to ENT_QUOTES | ENT_SUBSTITUTE
To ensure consistent behavior across different PHP version the second parameter is now required for the functions:
htmlspecialchars(), htmlentities(), htmlspecialchars_decode(), html_entity_decode() and get_html_translation_table()
2022-11-28 16:12:32 +01:00
Marina Glancy cfe0945ffb MDL-76495 libs: patch TCPDF for PHP 8.1 compatibility 2022-11-28 16:02:03 +01:00
Marina Glancy 6989097a3c MDL-76495 lib: test for qrcode in TCPDF 2022-11-28 16:02:03 +01:00
Marina Glancy 847f08dcd4 MDL-76494 libs: patch Box::Spout for PHP 8.1 compatibility 2022-11-28 15:56:54 +01:00
Marina Glancy 02430ee562 MDL-76494 core_reportbuilder: behat test for downloading report 2022-11-28 15:56:54 +01:00
Marina Glancy a8e90aaae1 MDL-76494 dataformat: tests for Excel and ODS writers 2022-11-28 15:56:53 +01:00
Paul Holden fac0c27efb MDL-76284 webservice: early exit if no users for missing capabilities. 2022-11-28 11:53:23 +00:00
Marina Glancy a7e7cd71cb MDL-76355 lib: apply a patch to googleapi for php 8.1 compatibility 2022-11-28 12:01:05 +01:00
Marina Glancy 37be6bfa4d MDL-76088 blocks: fixed incorrect use of static cache 2022-11-28 11:59:46 +01:00
Marina Glancy d311cab0c0 MDL-76493 core: make sure format_string(null) works on PHP 8.1 2022-11-28 11:55:50 +01:00
Meirza fb5a3dd643 MDL-75826 profile: Redirect to profile page if returnto is profile. 2022-11-28 16:39:11 +07:00
2188 changed files with 93567 additions and 68146 deletions
+1
View File
@@ -87,6 +87,7 @@
'no-octal-escape': 'error',
'no-proto': 'error',
'no-redeclare': 'warn',
'no-restricted-globals': ['error', { 'name': 'Notification' }],
'no-return-assign': 'error',
'no-script-url': 'error',
'no-self-assign': 'error',
+5 -4
View File
@@ -9,7 +9,7 @@ on:
- v[0-9]+.[0-9]+.[0-9]+*
env:
php: 8.0
php: 8.1
jobs:
Grunt:
@@ -59,14 +59,13 @@ jobs:
extensions:
db: mysqli
- os: ubuntu-22.04
php: 8.0
php: 8.1
db: pgsql
extensions: xmlrpc-beta
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: johanmeiring/mysql-action@tmpfs-patch
uses: moodlehq/mysql-action@v1
with:
collation server: utf8mb4_bin
mysql version: 5.7
@@ -74,6 +73,8 @@ jobs:
mysql user: test
mysql password: test
use tmpfs: true
tmpfs size: '1024M'
extra conf: --skip-log-bin
- name: Setting up DB pgsql
if: ${{ matrix.db == 'pgsql' }}
+144
View File
@@ -0,0 +1,144 @@
name: Windows Testing
on:
workflow_dispatch
env:
php: 8.1
jobs:
Grunt:
runs-on: windows-latest
steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checking out code
uses: actions/checkout@v3
- name: Configuring node & npm
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
- name: Installing node stuff
run: npm ci
- name: Running grunt
run: npx grunt
- name: Looking for uncommitted changes
# Add all files to the git index and then run diff --cached to see all changes.
# This ensures that we get the status of all files, including new files.
# We ignore npm-shrinkwrap.json to make the tasks immune to npm changes.
run: |
git add .
git reset -- npm-shrinkwrap.json
git diff --cached --exit-code
PHPUnit:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
php: 8.1
# Ideally we should use mysql/mariadb, but they are 4x slower without tweaks and configuration
# so let's run only postgres (1.5h vs 6h) only, If some day we want to improve the mysql runs,
# this is the place to enable them.
# db: mysqli
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium
- os: windows-latest
php: 8.0
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: shogo82148/actions-setup-mysql@v1
with:
mysql-version: 8.0
user: test
password: test
- name: Creating DB mysql
if: ${{ matrix.db == 'mysqli' }}
run: mysql --host 127.0.0.1 -utest -ptest -e 'CREATE DATABASE IF NOT EXISTS test COLLATE = utf8mb4_bin;';
- name: Setting up DB pgsql
if: ${{ matrix.db == 'pgsql' }}
run: |
# TODO: Remove these conf. modifications when php74 or php80 are lowest.
# Change to old md5 auth, because php73 does not support it.
# #password_encryption = scram-sha-256
(Get-Content "$env:PGDATA\postgresql.conf"). `
replace('#password_encryption = scram-sha-256', 'password_encryption = md5') | `
Set-Content "$env:PGDATA\postgresql.conf"
(Get-Content "$env:PGDATA\pg_hba.conf"). `
replace('scram-sha-256', 'md5') | `
Set-Content "$env:PGDATA\pg_hba.conf"
$pgService = Get-Service -Name postgresql*
Set-Service -InputObject $pgService -Status running -StartupType automatic
Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru
& $env:PGBIN\psql --command="CREATE USER test PASSWORD 'test'" --command="\du"
- name: Creating DB pgsql
if: ${{ matrix.db == 'pgsql' }}
run: |
& $env:PGBIN\createdb --owner=test test
$env:PGPASSWORD = 'test'
& $env:PGBIN\psql --username=test --host=localhost --list test
- name: Configuring git vars
uses: rlespinasse/github-slug-action@v4
- name: Setting up PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ matrix.extensions }}
ini-values: max_input_vars=5000
coverage: none
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checking out code from ${{ env.GITHUB_REF_SLUG }}
uses: actions/checkout@v3
# Needs to be done after php is available, git configured and Moodle checkout has happened.
- name: Setting up moodle-exttests service
run: |
git clone https://github.com/moodlehq/moodle-exttests.git
nssm install php-built-in C:\tools\php\php.exe -S localhost:8080 -t D:\a\moodle\moodle\moodle-exttests
nssm start php-built-in
- name: Setting up redis service
run: |
choco install redis-64 --version 3.0.503 --no-progress
nssm install redis redis-server
nssm start redis
- name: Setting up PHPUnit
env:
dbtype: ${{ matrix.db }}
shell: bash
run: |
echo "pathtophp=$(which php)" >> $GITHUB_ENV # Inject installed pathtophp to env. The template config needs it.
cp .github/workflows/config-template.php config.php
mkdir ../moodledata
php admin/tool/phpunit/cli/init.php --no-composer-self-update
- name: Running PHPUnit tests
env:
dbtype: ${{ matrix.db }}
phpunit_options: ${{ secrets.phpunit_options }}
run: vendor/bin/phpunit $phpunit_options
+1 -1
View File
@@ -54,5 +54,5 @@ moodle-plugin-ci.phar
/admin/tool/componentlibrary/docs
/admin/tool/componentlibrary/hugo/site/data/my-index.json
.hugo_build.lock
.phpcs.xml
phpcs.xml
jsconfig.json
+1 -1
View File
@@ -156,7 +156,7 @@ const getThirdPartyLibsList = relativeTo => {
* @returns {array}
*/
const getThirdPartyPaths = () => {
const DOMParser = require('xmldom').DOMParser;
const DOMParser = require('@xmldom/xmldom').DOMParser;
const fs = require('fs');
const path = require('path');
const xpath = require('xpath');
+8 -6
View File
@@ -45,6 +45,7 @@ module.exports = grunt => {
grunt.log.write(result);
if (error) {
grunt.log.error(result.stdout);
process.exit(code);
}
done();
@@ -56,7 +57,7 @@ module.exports = grunt => {
* @param {array} args
* @returns {object}
*/
const spawnNodeCall = args => grunt.util.spawn({
const spawnNodeCall = (args) => grunt.util.spawn({
cmd: 'node',
args,
}, getSpawnHandler(grunt.task.current.async()));
@@ -91,13 +92,14 @@ module.exports = grunt => {
* @returns {Object} Reference to the spawned task
*/
const cssBuild = () => spawnNodeCall([
'node_modules/node-sass/bin/node-sass',
'--output-style', 'expanded',
'--source-map', true,
'--source-map-contents', true,
'node_modules/sass/sass.js',
'--style', 'expanded',
'--source-map',
'--embed-sources',
'--precision', 6,
'--load-path', process.cwd(),
getCLPath('hugo/scss/docs.scss'),
'-o', getCLPath('hugo/dist/css/'),
getCLPath('hugo/dist/css/docs.css'),
]);
// Register the various component library tasks.
+2 -2
View File
@@ -39,7 +39,7 @@ module.exports = grunt => {
{
rule: {
_attrs: {
ref: './.phpcs.xml.dist',
ref: './phpcs.xml.dist',
},
},
},
@@ -52,7 +52,7 @@ module.exports = grunt => {
});
});
grunt.file.write('.phpcs.xml', toXML(config, {
grunt.file.write('phpcs.xml', toXML(config, {
header: true,
indent: ' ',
}) + "\n");
+2 -3
View File
@@ -30,10 +30,9 @@
* @param {String} srcPath the matched src path
* @return {String} The rewritten destination path.
*/
const babelRename = function(destPath, srcPath) {
destPath = srcPath.replace('src', 'build');
destPath = destPath.replace('.js', '.min.js');
destPath = srcPath.replace(`amd/src`, `amd/build`);
destPath = destPath.replace(/\.js$/, '.min.js');
return destPath;
};
+1 -1
View File
@@ -32,7 +32,7 @@ module.exports = grunt => {
}
},
options: {
implementation: require('node-sass'),
implementation: require('sass'),
includePaths: ["theme/boost/scss/", "theme/classic/scss/"]
}
},
+8 -7
View File
@@ -50,20 +50,20 @@ jobs:
php: 7.4
env: DB=mysqli TASK=PHPUNIT
# Then, conditionally, all the highest php ones (8.0)
# Then, conditionally, all the highest php ones (8.1)
- if: env(MOODLE_PHP) = "all"
php: 8.0
php: 8.1
env: DB=none TASK=CITEST
- if: env(MOODLE_PHP) = "all"
php: 8.0
php: 8.1
env: DB=none TASK=GRUNT
- if: env(MOODLE_PHP) = "all" AND (env(MOODLE_DATABASE) = "pgsql" OR env(MOODLE_DATABASE) = "all" OR env(MOODLE_DATABASE) IS NOT present)
php: 8.0
php: 8.1
env: DB=pgsql TASK=PHPUNIT
- if: env(MOODLE_PHP) = "all" AND (env(MOODLE_DATABASE) = "mysqli" OR env(MOODLE_DATABASE) = "all")
php: 8.0
php: 8.1
env: DB=mysqli TASK=PHPUNIT
cache:
@@ -90,7 +90,8 @@ install:
sudo service mysql stop
sudo mv /var/lib/mysql /mnt/ramdisk
sudo ln -s /mnt/ramdisk/mysql /var/lib/mysql
sudo service mysql restart
echo -e "[mysqld]\nskip-log-bin" | sudo tee -a /etc/mysql/my.cnf
sudo service mysql start
fi
- >
if [ "$DB" = 'pgsql' ];
@@ -101,6 +102,7 @@ install:
sudo mv /var/lib/postgresql /mnt/ramdisk
sudo ln -s /mnt/ramdisk/postgresql /var/lib/postgresql
sudo service postgresql start
sh -c 'until pg_isready -p $PGPORT; do echo "Waiting for the DB to be up..."; sleep 2; done'
fi
- >
if [ "$TASK" = 'PHPUNIT' ];
@@ -127,7 +129,6 @@ install:
fi
before_script:
- if [[ ${TRAVIS_PHP_VERSION:0:1} -gt 7 ]]; then pecl install xmlrpc-beta; fi
- echo 'max_input_vars=5000' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
- phpenv config-rm xdebug.ini
- >
+53 -35
View File
@@ -1,48 +1,66 @@
MOODLE TRADEMARKS POLICY
========================
The word "Moodle" is trademarked in many countries around the world. The word
was originally coined as an acronym: Modular Object-Oriented Dynamic Learning
Environment. The trademark is owned by Martin Dougiamas, Founder and Director
of Moodle.
The Moodle Trademark
--------------------
The law obligates trademark owners to police their marks and prevent the use of
confusingly similar names by third parties. Through this policy wed like to
make it clear how Moodle-related projects, organisations, and people can use
the Moodle trademark. Wed also like to be clear about how use of the word is
restricted when used to promote commercial Moodle services. We do this to
protect the very business model that allows us to continue developing Moodle
for you.
The brand and word "Moodle" has trade mark protection in many countries around
the world. Various Moodle™ trade marks are owned by either Moodle Pty Ltd or
one of its associated entities. The law obligates trade mark owners to police
their trade marks and prevent the use of confusingly similar names by
third parties.
Allowed uses
------------
We have created a more concise and thorough set of Trademark Guidelines
(https://moodle.com/wp-content/uploads/2023/02/Moodle-Trademark-Guidelines-2023-4.pdf)
to help you understand how to comply with Moodle's trade mark requirements.
The Trademark Guidelines will also assist our Moodle Certified Partners and the
community to understand some of the principles that inform Moodle's stance
whenever potential infringement has been detected by us or our community.
The following uses dont require any permission at all:
We need to be clear about use of the word "Moodle" and how we restrict its use
when promoting commercial Moodle™ branded services. The proper use of
trade marks reliably assures consumers about the quality of the associated
products or services and where they have been derived from. Because the
Moodle LMS is made available under the open source GNU General Public License'
that permits you to modify the copyrighted software, the distribution of such
modified software in combination with Moodle trade marks can potentially
mislead others in the community. To be clear, the GNU GPL does not include an
implied right or licence to use Moodle's trade marks.
* Referring to the software or the Moodle project.
* Describing your own Moodle implementation (including within corporate
settings).
We do all this to protect the very business model that allows us to continue
developing various Moodle software solutions for you.
Allowed uses of "Moodle"
------------------------
The following uses don't require any permission at all:
* Referring to the software or the Moodle project as the "Moodle™ software"
or the "Moodle™ project"
* Describing your own implementation of the Moodle™ software platform
(including within corporate settings).
* Describing a Moodle-based community hub.
* Describing some software youve made that integrates with Moodle
(eg a Moodle integration feature on another system).
* Describing certain software you've made that integrates with Moodle
branded software (e.g. a Moodle integration feature on another system).
Restricted uses
---------------
Restricted uses of "Moodle"
---------------------------
The following uses are generally prohibited without explicit and direct
permission being granted to you by Moodle Pty Ltd. We do this to protect the
Moodle project from software and sites which could confuse people. Please
contact us to ask for permission in writing.
Moodle project from software and sites which could confuse people. If in
doubt, reach out for clarification at <trademarks@moodle.com>
* You cant use "Moodle" in the name of your software (including Mobile apps)
* You cant use "Moodle" in your company name
* You cant use "Moodle" in your domain name
* You cant use "Moodle" in advertising-related keywords (such as Adsense)
* You cant use "Moodle" to describe services around Moodle (such as hosting,
training, support, consulting, course creation services, theme development,
customisation, installation, integration and certification). This applies
even if you do not charge for the services. Note that usually only Moodle
Partners have this permission.
For information about the Moodle Partner Certification Mark as well as for how
to contact us, please see <https://moodle.com/trademarks/>.
* You can't use the word "Moodle" or any Moodle logos for commercial purposes
without prior written permission from Moodle HQ.
* You can't use "Moodle" in the name of your software (including Mobile apps).
* You can't use "Moodle" in your company name.
* You can't use "Moodle" in your domain name.
* You can't use "Moodle" in advertising-related keywords (such as Adsense).
* You can't use "Moodle" to describe services around Moodle
(such as hosting, training, support, consulting, course creation services,
theme development, customisation, installation, integration, analytics
and certification) that cause consumers to be confused that you are
associated with Moodle HQ if you are not.
This applies even if you do not charge for the services.
Note that usually only Moodle Partners have this permission.
+78
View File
@@ -0,0 +1,78 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Reset course indentation
*
* @copyright 2023 Amaia Anabitarte <amaia@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('../../config.php');
require_admin();
$format = required_param('format', PARAM_PLUGIN);
$confirm = optional_param('confirm', false, PARAM_BOOL);
$backurl = new moodle_url('/admin/settings.php', ['section' => 'formatsetting'.$format]);
$PAGE->set_url('/admin/course/resetindentation.php', ['format' => $format]);
$PAGE->set_context(context_system::instance());
if ($confirm) {
require_sesskey();
$courses = $DB->get_records('course', ['format' => $format], 'id', 'id');
if (!empty($courses)) {
$courseids = array_keys($courses);
list($courseinsql, $courseparams) = $DB->get_in_or_equal($courseids, SQL_PARAMS_NAMED, 'course');
$DB->set_field_select('course_modules', 'indent', '0', "course $courseinsql AND indent <> 0", $courseparams);
rebuild_course_cache(0, true);
}
redirect(
$backurl,
get_string('resetindentationsuccess', 'admin'),
null,
\core\output\notification::NOTIFY_SUCCESS
);
}
$strtitle = get_string('resetindentation', 'admin');
$PAGE->set_title($strtitle);
$PAGE->set_heading($strtitle);
navigation_node::override_active_url(new moodle_url(
'/admin/course/resetindentation.php',
['action' => 'confirm', 'format' => $format]
));
echo $OUTPUT->header();
$displayoptions = ['confirmtitle' => get_string('resetindentation_title', 'admin')];
$confirmbutton = new single_button(
new moodle_url('/admin/course/resetindentation.php', ['confirm' => 1, 'format' => $format, 'sesskey' => sesskey()]),
get_string('resetindentation', 'admin'),
'post'
);
$cancelbutton = new single_button($backurl, get_string('cancel'));
echo $OUTPUT->confirm(
get_string('resetindentation_help', 'admin', ['format' => get_string('pluginname', 'format_'.$format)]),
$confirmbutton,
$cancelbutton,
$displayoptions
);
echo $OUTPUT->footer();
+192
View File
@@ -3371,6 +3371,7 @@
<VENDOR name="oracle" version="11.2" />
</DATABASE>
<PHP version="7.3.0" level="required">
<RESTRICT function="restrict_php_version_81" message="unsupportedphpversion81" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -3557,6 +3558,7 @@
<VENDOR name="oracle" version="11.2" />
</DATABASE>
<PHP version="7.3.0" level="required">
<RESTRICT function="restrict_php_version_81" message="unsupportedphpversion81" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -3749,6 +3751,7 @@
<VENDOR name="oracle" version="19" />
</DATABASE>
<PHP version="7.4.0" level="required">
<RESTRICT function="restrict_php_version_82" message="unsupportedphpversion82" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -3922,4 +3925,193 @@
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="4.2" requires="3.11.8">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="10.6.7" />
<VENDOR name="mysql" version="8.0" />
<VENDOR name="postgres" version="13" />
<VENDOR name="mssql" version="14.0" />
<VENDOR name="oracle" version="19" />
</DATABASE>
<PHP version="8.0.0" level="required">
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="required">
<FEEDBACK>
<ON_ERROR message="mbstringrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="required">
<FEEDBACK>
<ON_ERROR message="opensslrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlreader" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="required">
<FEEDBACK>
<ON_ERROR message="intlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbstorageengine" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_unoconv_version" level="optional">
<FEEDBACK>
<ON_CHECK message="unoconvwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_format" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfileformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_per_table" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfilepertable" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_large_prefix" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddblargeprefix" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_is_https" level="optional">
<FEEDBACK>
<ON_CHECK message="ishttpswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_incomplete_unicode_support" level="optional">
<FEEDBACK>
<ON_CHECK message="incompleteunicodesupport" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_sixtyfour_bits" level="required">
<FEEDBACK>
<ON_ERROR message="sixtyfourbitsrequired" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_max_input_vars" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_admin_dir_usage" level="optional">
<FEEDBACK>
<ON_CHECK message="iscustomadminwarnings" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_xmlrpc_usage" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mod_assignment" level="required">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+10 -2
View File
@@ -6,7 +6,7 @@ require_once(__DIR__ . '/../../config.php');
require_once($CFG->libdir.'/adminlib.php');
include_once($CFG->dirroot.'/mnet/lib.php');
$sort = optional_param('sort', 'username', PARAM_ALPHA);
$sort = optional_param('sort', 'username', PARAM_ALPHAEXT);
$dir = optional_param('dir', 'ASC', PARAM_ALPHA);
$page = optional_param('page', 0, PARAM_INT);
$perpage = optional_param('perpage', 30, PARAM_INT);
@@ -153,7 +153,15 @@ foreach ($columns as $column) {
$headings[$column] = "<a href=\"?sort=$column&amp;dir=$columndir&amp;\">".$string[$column]."</a>$columnicon";
}
$headings['delete'] = '';
$acl = $DB->get_records('mnet_sso_access_control', null, "$sort $dir", '*'); //, $page * $perpage, $perpage);
$sortorder = get_safe_orderby([
'username' => 'username',
'mnet_host_id' => 'mnet_host_id',
'access' => 'accessctrl',
'default' => 'username',
], $sort, $dir, false);
$acl = $DB->get_records('mnet_sso_access_control', null, $sortorder);
$aclcount = $DB->count_records('mnet_sso_access_control');
if (!$acl) {
+18 -3
View File
@@ -46,11 +46,23 @@
$formcontinue = new single_button(new moodle_url('index.php', array('confirm' => md5($mnet->public_key))), get_string('yes'));
$formcancel = new single_button(new moodle_url('index.php', array()), get_string('no'));
echo $OUTPUT->header();
echo $OUTPUT->confirm(get_string("deletekeycheck", "mnet"), $formcontinue, $formcancel);
echo $OUTPUT->footer();
exit;
} else {
// We're deleting
// If no/cancel then redirect back to the network setting page.
if (!isset($form->confirm)) {
redirect(
new moodle_url('/admin/mnet/index.php'),
get_string('keydeletedcancelled', 'mnet'),
null,
\core\output\notification::NOTIFY_SUCCESS
);
}
if (!isset($SESSION->mnet_confirm_delete_key)) {
// fail - you're being attacked?
@@ -63,8 +75,12 @@
if($time < time() - 60) {
// fail - you're out of time.
throw new \moodle_exception ('deleteoutoftime', 'mnet', 'index.php');
exit;
redirect(
new moodle_url('/admin/mnet/index.php'),
get_string('deleteoutoftime', 'mnet'),
null,
\core\output\notification::NOTIFY_WARNING
);
}
if ($key != md5(sha1($mnet->keypair['keypair_PEM']))) {
@@ -75,7 +91,6 @@
$mnet->replace_keys();
redirect('index.php', get_string('keydeleted','mnet'));
exit;
}
}
$hosts = $DB->get_records_select('mnet_host', "id <> ? AND deleted = 0", array($CFG->mnet_localhost_id), 'wwwroot ASC');
+10 -19
View File
@@ -31,29 +31,20 @@
if (!empty($hide) and confirm_sesskey()) {
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
$class::enable_plugin($hide, false);
admin_get_root(true, false); // settings not required - only pages
if ($class::enable_plugin($hide, false)) {
// Settings not required - only pages.
admin_get_root(true, false);
}
redirect(new moodle_url('/admin/modules.php'));
}
if (!empty($show) and confirm_sesskey()) {
$canenablemodule = true;
$modulename = $show;
// Invoking a callback function that enables plugins to force additional actions (e.g. displaying notifications,
// modals, etc.) and also specify through its returned value (bool) whether the process of enabling the plugin
// should continue after these actions or not.
if (component_callback_exists("mod_{$modulename}", 'pre_enable_plugin_actions')) {
$canenablemodule = component_callback("mod_{$modulename}", 'pre_enable_plugin_actions');
}
if ($canenablemodule) {
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
$class::enable_plugin($show, true);
admin_get_root(true, false); // Settings not required - only pages.
redirect(new moodle_url('/admin/modules.php'));
if (!empty($show) && confirm_sesskey()) {
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
if ($class::enable_plugin($show, true)) {
// Settings not required - only pages.
admin_get_root(true, false);
}
redirect(new moodle_url('/admin/modules.php'));
}
echo $OUTPUT->header();
+23 -12
View File
@@ -30,25 +30,36 @@
require_once(__DIR__ . '/../config.php');
// The state parameter we've given (used in moodle as a redirect url).
// Per https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2.1, state is required, even during error responses.
$state = required_param('state', PARAM_LOCALURL);
$redirecturl = new moodle_url($state);
$params = $redirecturl->params();
$error = optional_param('error', '', PARAM_RAW);
if ($error) {
$message = optional_param('error_description', '', PARAM_RAW);
if ($message) {
$SESSION->loginerrormsg = $message;
redirect(new moodle_url(get_login_url()));
} else {
$SESSION->loginerrormsg = $error;
redirect(new moodle_url(get_login_url()));
$message = optional_param('error_description', null, PARAM_RAW);
// Errors can occur for authenticated users, such as when a user denies authorization for some internal service call.
// In such cases, propagate the error to the component redirect URI.
if (isloggedin()) {
if (isset($params['sesskey']) && confirm_sesskey($params['sesskey'])) {
$redirecturl->param('error', $error);
if ($message) {
$redirecturl->param('error_description', $message);
}
redirect($redirecturl);
}
}
// Not logged in or the sesskey verification failed, redirect to login + show errors.
$SESSION->loginerrormsg = $message ?? $error;
redirect(new moodle_url(get_login_url()));
}
// The authorization code generated by the authorization server.
$code = required_param('code', PARAM_RAW);
// The state parameter we've given (used in moodle as a redirect url).
$state = required_param('state', PARAM_LOCALURL);
$redirecturl = new moodle_url($state);
$params = $redirecturl->params();
if (isset($params['sesskey']) and confirm_sesskey($params['sesskey'])) {
$redirecturl->param('oauth2code', $code);
@@ -16,6 +16,8 @@
namespace core_adminpresets\local\setting;
use admin_setting_configcheckbox;
/**
* Checkbox setting.
*
@@ -26,15 +28,15 @@ namespace core_adminpresets\local\setting;
*/
class adminpresets_admin_setting_configcheckbox extends adminpresets_setting {
protected function set_value($value) {
$this->value = clean_param($value, PARAM_BOOL);
$this->set_visiblevalue();
return true;
}
/**
* Sets the visible name for the setting selected value
*/
protected function set_visiblevalue() {
if ($this->value) {
/** @var admin_setting_configcheckbox $settingdata */
$settingdata = $this->get_settingdata();
// We need to compare the "yes" value of the inner checkbox, which isn't necessarily boolean.
if ($this->value == $settingdata->yes) {
$str = get_string('yes');
} else {
$str = get_string('no');
@@ -34,7 +34,7 @@ class adminpresets_admin_setting_configselect extends adminpresets_setting {
*/
protected function set_value($value) {
// When we intantiate the class we need the choices.
if (empty($this->settindata->choices) && method_exists($this->settingdata, 'load_choices')) {
if (empty($this->settingdata->choices) && method_exists($this->settingdata, 'load_choices')) {
$this->settingdata->load_choices();
}
+17 -29
View File
@@ -24,6 +24,7 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core_question\local\bank\question_version_status;
require_once(__DIR__ . '/../config.php');
require_once($CFG->libdir . '/questionlib.php');
@@ -42,36 +43,23 @@ $qtypes = question_bank::get_all_qtypes();
$pluginmanager = core_plugin_manager::instance();
// Get some data we will need - question counts and which types are needed.
$hiddenstatus = \core_question\local\bank\question_version_status::QUESTION_STATUS_HIDDEN;
$draftstatus = \core_question\local\bank\question_version_status::QUESTION_STATUS_DRAFT;
// The second JOIN on question_versions (qv2) is to get the latest version of each question. 
// (Using this sort of JOIN is a known trick for doing this in the fastest possible way.)
$counts = $DB->get_records_sql("
SELECT q.qtype,
COUNT(qv.id) AS numquestions,
SUM(CASE WHEN qv.status = :hiddenstatus THEN 1 ELSE 0 END) AS numhidden,
SUM(CASE WHEN qv.status = :draftstatus THEN 1 ELSE 0 END) AS numdraft
FROM {question} q
JOIN {question_versions} qv ON q.id = qv.questionid
LEFT JOIN {question_versions} qv2 ON qv.questionbankentryid = qv2.questionbankentryid AND qv.version < qv2.version
WHERE qv2.questionbankentryid IS NULL
GROUP BY q.qtype
", [
'hiddenstatus' => question_version_status::QUESTION_STATUS_HIDDEN,
'draftstatus' => question_version_status::QUESTION_STATUS_DRAFT,
]);
$sql = "SELECT result.qtype,
SUM(result.numquestions) AS numquestions,
SUM(result.numhidden) AS numhidden,
SUM(result.numdraft) AS numdraft
FROM (SELECT data.qtype,
data.versionid,
COUNT(data.numquestions) AS numquestions,
(SELECT COUNT(qv.id)
FROM {question_versions} qv
WHERE qv.id = data.versionid
AND qv.status = :hiddenstatus) AS numhidden,
(SELECT COUNT(qv.id)
FROM {question_versions} qv
WHERE qv.id = data.versionid
AND qv.status = :draftstatus) AS numdraft
FROM (SELECT q.qtype, qv.id AS versionid, 1 AS numquestions
FROM {question} q
JOIN {question_versions} qv ON qv.questionid = q.id
JOIN {question_bank_entries} qbe ON qbe.id = qv.questionbankentryid
AND qv.version = (SELECT MAX(v.version)
FROM {question_versions} v
JOIN {question_bank_entries} be ON be.id = v.questionbankentryid
WHERE be.id = qbe.id)) data
GROUP BY data.qtype, data.versionid) result
GROUP BY result.qtype";
$counts = $DB->get_records_sql($sql, ['hiddenstatus' => $hiddenstatus, 'draftstatus' => $draftstatus]);
$needed = [];
foreach ($qtypes as $qtypename => $qtype) {
if (!isset($counts[$qtypename])) {
@@ -533,7 +533,7 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
protected function get_description_field($id) {
return '<textarea class="form-textarea form-control" id="'. s($id) .'" name="description" rows="10" cols="50">' .
htmlspecialchars($this->role->description) .
htmlspecialchars($this->role->description, ENT_COMPAT) .
'</textarea>';
}
+1
View File
@@ -90,6 +90,7 @@ $title = get_string('overridepermissionsforrole', 'core_role', $a);
$currenttab = 'permissions';
$PAGE->set_title($title);
$PAGE->activityheader->disable();
$PAGE->navbar->add($straction);
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
+1 -1
View File
@@ -187,7 +187,7 @@ class provider_test extends provider_testcase {
$writer = writer::with_context($context);
$this->assertTrue($writer->has_any_data());
if ($context->contextlevel == CONTEXT_MODULE) {
if ($data = $writer->get_data($subcontextstudent)) {
if ($data = (array)$writer->get_data($subcontextstudent)) {
$this->assertEquals($user->id, reset($data)->userid);
}
if ($data = (array)$writer->get_data($subcontextrc)) {
+2 -1
View File
@@ -477,7 +477,8 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_heading('automatedsettings', new lang_string('automatedsettings','backup'), new lang_string('recyclebin_desc', 'backup')));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_users', new lang_string('generalusers', 'backup'), new lang_string('configgeneralusers', 'backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_role_assignments', new lang_string('generalroleassignments','backup'), new lang_string('configgeneralroleassignments','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_activities', new lang_string('generalactivities','backup'), new lang_string('configgeneralactivities','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_activities', new lang_string('generalactivities', 'backup'),
new lang_string('backupautoactivitiesdescription', 'backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_blocks', new lang_string('generalblocks','backup'), new lang_string('configgeneralblocks','backup'), 1));
$temp->add(new admin_setting_configcheckbox(
'backup/backup_auto_files',
+1 -1
View File
@@ -101,7 +101,7 @@ if ($hassiteconfig) {
new lang_string('limitconcurrentlogins', 'core_auth'),
new lang_string('limitconcurrentlogins_desc', 'core_auth'), 0, $options));
$temp->add(new admin_setting_configtext('alternateloginurl', new lang_string('alternateloginurl', 'auth'),
new lang_string('alternatelogin', 'auth', htmlspecialchars(get_login_url())), ''));
new lang_string('alternatelogin', 'auth', htmlspecialchars(get_login_url(), ENT_COMPAT)), ''));
$temp->add(new admin_setting_configtext('forgottenpasswordurl', new lang_string('forgottenpasswordurl', 'auth'),
new lang_string('forgottenpassword', 'auth'), '', PARAM_URL));
$temp->add(new admin_setting_confightmleditor('auth_instructions', new lang_string('instructions', 'auth'),
@@ -51,12 +51,13 @@
<div class="form-password">
<span data-passwordunmask="wrapper" data-passwordunmaskid="{{ id }}">
<span data-passwordunmask="editor">
<input type="hidden"
<input type="password"
autocomplete="new-password"
name="{{ name }}"
id="{{ id }}"
value="{{ value }}"
data-size="{{ size }}"
class="form-control d-inline-block"
class="form-control d-none"
>
</span>
<a href="#" data-passwordunmask="edit" title="{{ edithint }}">
+3 -3
View File
@@ -18,7 +18,7 @@ Feature: An administrator can browse user accounts
When I navigate to "Users > Accounts > Browse list of users" in site administration
# Name field always present, email field is default for showidentity.
Then the following should exist in the "users" table:
| First name / Surname | Email address |
| First name / Last name | Email address |
| User One | one@example.com |
| User Two | two@example.com |
# Should not see other identity fields or non-default name fields.
@@ -34,7 +34,7 @@ Feature: An administrator can browse user accounts
| alternativefullnameformat | firstnamephonetic lastname |
When I navigate to "Users > Accounts > Browse list of users" in site administration
Then the following should exist in the "users" table:
| First name - phonetic / Surname | Email address |
| First name - phonetic / Last name | Email address |
| Yewzer One | one@example.com |
| Yoozare Two | two@example.com |
@@ -43,7 +43,7 @@ Feature: An administrator can browse user accounts
| showuseridentity | department,profile_field_frog |
When I navigate to "Users > Accounts > Browse list of users" in site administration
Then the following should exist in the "users" table:
| First name / Surname | Favourite frog | Department |
| First name / Last name | Favourite frog | Department |
| User One | Kermit | Attack |
| User Two | Tree | Defence |
And I should not see "Email address" in the "table" "css_element"
@@ -15,7 +15,7 @@ Feature: Allowing multiple accounts to have the same email address
And I set the following fields to these values:
| Username | s2 |
| First name | Jane |
| Surname | Doe |
| Last name | Doe |
| Email address | <email> |
| New password | test |
And I press "Create user"
@@ -35,9 +35,7 @@ Feature: Allowing multiple accounts to have the same email address
| username | firstname | lastname | email |
| s1 | John | Doe | s1@example.com |
| s2 | Jane | Doe | s2@example.com |
When I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
And I click on "Edit" "link" in the "Jane Doe" "table_row"
When I am on the "s2" "user > editing" page logged in as "admin"
And I set the field "Email address" to "<email>"
And I press "Update profile"
Then I should <expect> "This email address is already registered."
@@ -8,7 +8,7 @@ Feature: An administrator can configure the available user list filters
When I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
@@ -30,7 +30,7 @@ Feature: An administrator can configure the available user list filters
And I should not see "MNet ID provider" in the "New filter" "fieldset"
And I navigate to "Users > Accounts > Bulk user actions" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
@@ -57,7 +57,7 @@ Feature: An administrator can configure the available user list filters
And I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should see "Username" in the "New filter" "fieldset"
And I should see "Email address" in the "New filter" "fieldset"
@@ -79,7 +79,7 @@ Feature: An administrator can configure the available user list filters
And I should not see "MNet ID provider" in the "New filter" "fieldset"
And I navigate to "Users > Accounts > Bulk user actions" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should see "Username" in the "New filter" "fieldset"
And I should see "Email address" in the "New filter" "fieldset"
@@ -106,7 +106,7 @@ Feature: An administrator can configure the available user list filters
And I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
@@ -128,7 +128,7 @@ Feature: An administrator can configure the available user list filters
And I should not see "MNet ID provider" in the "New filter" "fieldset"
And I navigate to "Users > Accounts > Bulk user actions" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
+113
View File
@@ -0,0 +1,113 @@
@core @core_admin @core_course @javascript
Feature: Reset course indentation
In order to reset indentation in course modules
As a admin
I want change indent value for all the modules of a course format courses in one go
Background:
Given the following "courses" exist:
| fullname | shortname | format |
| Topics Course 1 | T1 | topics |
| Topics Course 2 | T2 | topics |
| Weekly Course 1 | W1 | weeks |
| Weekly Course 2 | W2 | weeks |
And the following "activities" exist:
| activity | name | intro | course | idnumber |
| forum | Topics forum name | Topics forum description | T1 | forum1 |
| data | Topics database name | Topics database description | T1 | data1 |
| wiki | Topics wiki name | Topics wiki description | T2 | wiki1 |
| forum | Weekly forum name | Weekly forum description | W1 | forum2 |
| data | Weekly database name | Weekly database description | W1 | data2 |
| wiki | Weekly wiki name | Weekly wiki description | W2 | wiki2 |
And I log in as "admin"
And I am on "Topics Course 1" course homepage with editing mode on
And I open "Topics forum name" actions menu
And I click on "Move right" "link" in the "Topics forum name" activity
And I open "Topics forum name" actions menu
And "Move right" "link" in the "Topics forum name" "activity" should not be visible
And "Move left" "link" in the "Topics forum name" "activity" should be visible
And I press the escape key
And I open "Topics database name" actions menu
And "Move right" "link" in the "Topics database name" "activity" should be visible
And "Move left" "link" in the "Topics database name" "activity" should not be visible
And I am on "Topics Course 2" course homepage with editing mode on
And I open "Topics wiki name" actions menu
And I click on "Move right" "link" in the "Topics wiki name" activity
And I open "Topics wiki name" actions menu
And "Move right" "link" in the "Topics wiki name" "activity" should not be visible
And "Move left" "link" in the "Topics wiki name" "activity" should be visible
And I am on "Weekly Course 1" course homepage with editing mode on
And I open "Weekly forum name" actions menu
And I click on "Move right" "link" in the "Weekly forum name" activity
And I open "Weekly forum name" actions menu
And "Move right" "link" in the "Weekly forum name" "activity" should not be visible
And "Move left" "link" in the "Weekly forum name" "activity" should be visible
And I press the escape key
And I open "Weekly database name" actions menu
And "Move right" "link" in the "Weekly database name" "activity" should be visible
And "Move left" "link" in the "Weekly database name" "activity" should not be visible
And I am on "Weekly Course 2" course homepage with editing mode on
And I open "Weekly wiki name" actions menu
And I click on "Move right" "link" in the "Weekly wiki name" activity
And I open "Weekly wiki name" actions menu
And "Move right" "link" in the "Weekly wiki name" "activity" should not be visible
And "Move left" "link" in the "Weekly wiki name" "activity" should be visible
Scenario Outline: Apply course indentation reset
Given I navigate to "Plugins > Course formats > <format> format" in site administration
And I wait "5" seconds
And "Reset indentation" "link" should exist
When I click on "Reset indentation" "link"
And I should see "Reset indentation on course page"
And "Reset indentation" "button" should exist
And I click on "Reset indentation" "button"
Then I should see "Indentation reset"
And I am on "<format> Course 1" course homepage with editing mode on
And I open "<format> forum name" actions menu
And "Move right" "link" in the "<format> forum name" "activity" should be visible
And "Move left" "link" in the "<format> forum name" "activity" should not be visible
And I press the escape key
And I open "<format> database name" actions menu
And "Move right" "link" in the "<format> database name" "activity" should be visible
And "Move left" "link" in the "<format> database name" "activity" should not be visible
And I am on "<format> Course 2" course homepage with editing mode on
And I open "<format> wiki name" actions menu
And "Move right" "link" in the "<format> wiki name" "activity" should be visible
And "Move left" "link" in the "<format> wiki name" "activity" should not be visible
# Check other course formats had not been reset
And I am on "<other> Course 1" course homepage with editing mode on
And I open "<other> forum name" actions menu
And "Move right" "link" in the "<other> forum name" "activity" should not be visible
And "Move left" "link" in the "<other> forum name" "activity" should be visible
Examples:
| format | other |
| Topics | Weekly |
| Weekly | Topics |
Scenario Outline: Cancel course indentation reset
Given I navigate to "Plugins > Course formats > <format> format" in site administration
And "Reset indentation" "link" should exist
When I click on "Reset indentation" "link"
And I should see "Reset indentation on course page"
And "Reset indentation" "button" should exist
And "Cancel" "button" should exist
And I click on "Cancel" "button"
Then I should not see "Indentation reset"
And I am on "<format> Course 1" course homepage with editing mode on
And I open "<format> forum name" actions menu
And "Move right" "link" in the "<format> forum name" "activity" should not be visible
And "Move left" "link" in the "<format> forum name" "activity" should be visible
And I press the escape key
And I open "<format> database name" actions menu
And "Move right" "link" in the "<format> database name" "activity" should be visible
And "Move left" "link" in the "<format> database name" "activity" should not be visible
And I am on "<format> Course 2" course homepage with editing mode on
And I open "<format> wiki name" actions menu
And "Move right" "link" in the "<format> wiki name" "activity" should not be visible
And "Move left" "link" in the "<format> wiki name" "activity" should be visible
Examples:
| format |
| Topics |
| Weekly |
@@ -11,8 +11,11 @@ Feature: I can add a new preset with current settings
And I set the field "Name" to "Starter"
And I set the field "Description" to "Non-core starter preset"
When I click on "Create preset" "button"
Then I should see "Moodle with all of the most popular features" in the "Starter" "table_row"
And I should see "Starter" in the "Non-core starter preset" "table_row"
Then the following should exist in the "Site admin presets table" table:
| Name | Description |
| Starter | Moodle with all of the most popular features, including Assignment, Feedback, Forum, H5P, Quiz and Completion tracking. |
| Full | All the Starter features plus External (LTI) tool, SCORM, Workshop, Analytics, Badges, Competencies, Learning plans and lots more. |
| Starter | Non-core starter preset |
Scenario: Export current settings
Given I click on "Create preset" "button"
@@ -45,7 +45,7 @@ class helper {
// Form field is PARAM_ALPHANUMEXT and we are sending fully qualified class names
// as option names, but replacing the backslash for a string that is really unlikely
// to ever be part of a class name.
return str_replace('\\', '__', $class);
return str_replace('\\', '__', $class ?? '');
}
/**
+11
View File
@@ -0,0 +1,11 @@
define("tool_behat/steps",["exports","core/ajax","core/templates","core/pending"],(function(_exports,_ajax,_templates,_pending){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
/**
* Enhancements for the step definitions page.
*
* @module tool_behat/steps
* @copyright 2022 Catalyst IT EU
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_templates=_interopRequireDefault(_templates),_pending=_interopRequireDefault(_pending);_exports.init=()=>{document.addEventListener("change",(async e=>{const entityElement=e.target.closest(".entities"),stepElement=e.target.closest(".stepcontent");if(!entityElement||!stepElement)return;const pendingPromise=new _pending.default("tool_behat/steps:change"),entityData=await(entityType=e.target.value,_ajax.default.call([{methodname:"tool_behat_get_entity_generator",args:{entitytype:entityType}}])[0]);var entityType;const{html:html,js:js}=await(entityData=>{var _entityData$required;return null!==(_entityData$required=entityData.required)&&void 0!==_entityData$required&&_entityData$required.length?_templates.default.renderForPromise("tool_behat/steprequiredfields",{fields:entityData.required}):Promise.resolve({html:"",js:""})})(entityData),stepRequiredFields=stepElement.querySelector(".steprequiredfields");stepRequiredFields?await _templates.default.replaceNode(stepRequiredFields,html,js):await _templates.default.appendNodeContents(stepElement,html,js),pendingPromise.resolve()}))}}));
//# sourceMappingURL=steps.min.js.map
@@ -0,0 +1 @@
{"version":3,"file":"steps.min.js","sources":["../src/steps.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\nimport Ajax from 'core/ajax';\nimport Templates from 'core/templates';\nimport PendingJS from 'core/pending';\n\n/**\n * Enhancements for the step definitions page.\n *\n * @module tool_behat/steps\n * @copyright 2022 Catalyst IT EU\n * @author Mark Johnson <mark.johnson@catalyst-eu.net>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * Call the get_entity_generator web service function\n *\n * Takes the name of an entity generator and returns an object containing a list of the required fields.\n *\n * @param {String} entityType\n * @returns {Promise}\n */\nconst getGeneratorEntities = (entityType) => Ajax.call([{\n methodname: 'tool_behat_get_entity_generator',\n args: {entitytype: entityType}\n}])[0];\n\n/**\n * Render HTML for required fields\n *\n * Takes the entity data returned from getGeneratorEntities and renders the HTML to display the required fields.\n *\n * @param {String} entityData\n * @return {Promise}\n */\nconst getRequiredFieldsContent = (entityData) => {\n if (!entityData.required?.length) {\n return Promise.resolve({\n html: '',\n js: ''\n });\n }\n return Templates.renderForPromise('tool_behat/steprequiredfields', {fields: entityData.required});\n};\n\nexport const init = () => {\n // When an entity is selected in the \"the following exist\" step, fetch and display the required fields.\n document.addEventListener('change', async(e) => {\n const entityElement = e.target.closest('.entities');\n const stepElement = e.target.closest('.stepcontent');\n if (!entityElement || !stepElement) {\n return;\n }\n\n const pendingPromise = new PendingJS('tool_behat/steps:change');\n\n const entityData = await getGeneratorEntities(e.target.value);\n const {html, js} = await getRequiredFieldsContent(entityData);\n\n const stepRequiredFields = stepElement.querySelector('.steprequiredfields');\n if (stepRequiredFields) {\n await Templates.replaceNode(stepRequiredFields, html, js);\n } else {\n await Templates.appendNodeContents(stepElement, html, js);\n }\n pendingPromise.resolve();\n });\n};\n"],"names":["document","addEventListener","async","entityElement","e","target","closest","stepElement","pendingPromise","PendingJS","entityData","entityType","value","Ajax","call","methodname","args","entitytype","html","js","required","_entityData$required","length","Templates","renderForPromise","fields","Promise","resolve","getRequiredFieldsContent","stepRequiredFields","querySelector","replaceNode","appendNodeContents"],"mappings":";;;;;;;;4NA2DoB,KAEhBA,SAASC,iBAAiB,UAAUC,MAAAA,UAC1BC,cAAgBC,EAAEC,OAAOC,QAAQ,aACjCC,YAAcH,EAAEC,OAAOC,QAAQ,oBAChCH,gBAAkBI,yBAIjBC,eAAiB,IAAIC,iBAAU,2BAE/BC,iBAlCgBC,WAkCwBP,EAAEC,OAAOO,MAlClBC,cAAKC,KAAK,CAAC,CACpDC,WAAY,kCACZC,KAAM,CAACC,WAAYN,eACnB,IAH0BA,IAAAA,iBAmChBO,KAACA,KAADC,GAAOA,SAtBaT,CAAAA,0EACzBA,WAAWU,0CAAXC,qBAAqBC,OAMnBC,mBAAUC,iBAAiB,gCAAiC,CAACC,OAAQf,WAAWU,WAL5EM,QAAQC,QAAQ,CACnBT,KAAM,GACNC,GAAI,MAkBiBS,CAAyBlB,YAE5CmB,mBAAqBtB,YAAYuB,cAAc,uBACjDD,yBACMN,mBAAUQ,YAAYF,mBAAoBX,KAAMC,UAEhDI,mBAAUS,mBAAmBzB,YAAaW,KAAMC,IAE1DX,eAAemB"}
+82
View File
@@ -0,0 +1,82 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import Ajax from 'core/ajax';
import Templates from 'core/templates';
import PendingJS from 'core/pending';
/**
* Enhancements for the step definitions page.
*
* @module tool_behat/steps
* @copyright 2022 Catalyst IT EU
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Call the get_entity_generator web service function
*
* Takes the name of an entity generator and returns an object containing a list of the required fields.
*
* @param {String} entityType
* @returns {Promise}
*/
const getGeneratorEntities = (entityType) => Ajax.call([{
methodname: 'tool_behat_get_entity_generator',
args: {entitytype: entityType}
}])[0];
/**
* Render HTML for required fields
*
* Takes the entity data returned from getGeneratorEntities and renders the HTML to display the required fields.
*
* @param {String} entityData
* @return {Promise}
*/
const getRequiredFieldsContent = (entityData) => {
if (!entityData.required?.length) {
return Promise.resolve({
html: '',
js: ''
});
}
return Templates.renderForPromise('tool_behat/steprequiredfields', {fields: entityData.required});
};
export const init = () => {
// When an entity is selected in the "the following exist" step, fetch and display the required fields.
document.addEventListener('change', async(e) => {
const entityElement = e.target.closest('.entities');
const stepElement = e.target.closest('.stepcontent');
if (!entityElement || !stepElement) {
return;
}
const pendingPromise = new PendingJS('tool_behat/steps:change');
const entityData = await getGeneratorEntities(e.target.value);
const {html, js} = await getRequiredFieldsContent(entityData);
const stepRequiredFields = stepElement.querySelector('.steprequiredfields');
if (stepRequiredFields) {
await Templates.replaceNode(stepRequiredFields, html, js);
} else {
await Templates.appendNodeContents(stepElement, html, js);
}
pendingPromise.resolve();
});
};
@@ -0,0 +1,92 @@
<?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/>.
/**
* Return data about an entity generator.
*
* @package tool_behat
* @copyright 2022 onwards Catalyst IT EU {@link https://catalyst-eu.net}
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_behat\external;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/externallib.php');
/**
* External function for getting properties of entity generators.
*/
class get_entity_generator extends \external_api {
/**
* Define parameters for external function.
*
* The parameter is either in the format 'entity' or 'component_name > entity'. There is no appropriate param type for a
* string like this containing angle brackets, so we will do PARAM_RAW. The value will be parsed by
* behat_data_generators::parse_entity_type, which validates the format of the parameter and throws an exception if it is not
* correct.
*
* @return \external_function_parameters
*/
public static function execute_parameters(): \external_function_parameters {
return new \external_function_parameters([
'entitytype' => new \external_value(PARAM_RAW, 'Entity type that can be created by a generator.'),
]);
}
/**
* Return a list of the required fields for a given entity type.
*
* @param string $entitytype
* @return array
*/
public static function execute(string $entitytype): array {
global $CFG;
// Ensure we can load Behat and Facebook namespaces in behat libraries.
require_once("{$CFG->dirroot}/vendor/autoload.php");
require_once("{$CFG->libdir}/tests/behat/behat_data_generators.php");
$params = self::validate_parameters(self::execute_parameters(), ['entitytype' => $entitytype]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
$generators = new \behat_data_generators();
$entity = $generators->get_entity($params['entitytype']);
return ['required' => $entity['required']];
}
/**
* Define return values.
*
* Return required fields
*
* @return \external_single_structure
*/
public static function execute_returns(): \external_single_structure {
return new \external_single_structure([
'required' => new \external_multiple_structure(
new \external_value(PARAM_TEXT, 'Required field'),
'Required fields',
VALUE_OPTIONAL
),
]);
}
}
+12 -10
View File
@@ -49,7 +49,7 @@ list($options, $unrecognized) = cli_get_params(
'torun' => 0,
'optimize-runs' => '',
'add-core-features-to-theme' => false,
'axe' => false,
'axe' => null,
'disable-composer' => false,
'composer-upgrade' => true,
'composer-self-update' => true,
@@ -69,7 +69,7 @@ Behat utilities to initialise behat tests
Usage:
php init.php [--parallel=value [--maxruns=value] [--fromrun=value --torun=value]]
[--axe] [-o | --optimize-runs] [-a | --add-core-features-to-theme]
[--no-axe] [-o | --optimize-runs] [-a | --add-core-features-to-theme]
[--no-composer-self-update] [--no-composer-upgrade]
[--disable-composer]
[--help]
@@ -79,7 +79,7 @@ Options:
-m, --maxruns Max parallel processes to be executed at one time
--fromrun Execute run starting from (Used for parallel runs on different vms)
--torun Execute run till (Used for parallel runs on different vms)
--axe Include axe accessibility tests
--no-axe Disable axe accessibility tests.
-o, --optimize-runs
Split features with specified tags in all parallel runs.
@@ -102,7 +102,7 @@ Options:
Example from Moodle root directory:
\$ php admin/tool/behat/cli/init.php --parallel=2
More info in http://docs.moodle.org/dev/Acceptance_testing#Running_tests
More info in https://moodledev.io/general/development/tools/behat/running
";
if (!empty($options['help'])) {
@@ -110,6 +110,12 @@ if (!empty($options['help'])) {
exit(0);
}
if ($options['axe']) {
echo "Axe accessibility tests are enabled by default, to disable them, use the --no-axe option.\n";
} else if ($options['axe'] === false) {
echo "Axe accessibility tests have been disabled.\n";
}
// Check which util file to call.
$utilfile = 'util_single_run.php';
$commandoptions = "";
@@ -118,9 +124,7 @@ if ($options['parallel'] && $options['parallel'] > 1) {
$utilfile = 'util.php';
// Sanitize all input options, so they can be passed to util.
foreach ($options as $option => $value) {
if ($value) {
$commandoptions .= " --$option=\"$value\"";
}
$commandoptions .= behat_get_command_flags($option, $value);
}
} else {
// Only sanitize options for single run.
@@ -130,9 +134,7 @@ if ($options['parallel'] && $options['parallel'] > 1) {
];
foreach ($cmdoptionsforsinglerun as $option) {
if (!empty($options[$option])) {
$commandoptions .= " --$option='$options[$option]'";
}
$commandoptions .= behat_get_command_flags($option, $options[$option]);
}
}
+3 -3
View File
@@ -87,7 +87,7 @@ Options:
Example from Moodle root directory:
\$ php admin/tool/behat/cli/run.php --tags=\"@javascript\"
More info in http://docs.moodle.org/dev/Acceptance_testing#Running_tests
More info in https://moodledev.io/general/development/tools/behat/running
";
if (!empty($options['help'])) {
@@ -278,7 +278,7 @@ if (empty($parallelrun)) {
// Print combined run o/p from processes.
$exitcodes = print_combined_run_output($processes, $stoponfail);
// Time to finish run.
$time = round(microtime(true) - $time, 1);
$time = round(microtime(true) - $time, 0);
echo "Finished in " . gmdate("G\h i\m s\s", $time) . PHP_EOL . PHP_EOL;
ksort($exitcodes);
@@ -437,7 +437,7 @@ function print_combined_run_output($processes, $stoponfail = false) {
$process->stop(0);
}
$strlentoprint = strlen($update);
$strlentoprint = strlen($update ?? '');
// If not enough dots printed on line then just print.
if ($strlentoprint < $remainingprintlen) {
+6 -11
View File
@@ -57,7 +57,7 @@ list($options, $unrecognized) = cli_get_params(
'torun' => 0,
'optimize-runs' => '',
'add-core-features-to-theme' => false,
'axe' => false,
'axe' => true,
),
array(
'h' => 'help',
@@ -73,7 +73,7 @@ $help = "
Behat utilities to manage the test environment
Usage:
php util.php [--install|--drop|--enable|--disable|--diag|--updatesteps|--axe|--help] [--parallel=value [--maxruns=value]]
php util.php [--install|--drop|--enable|--disable|--diag|--updatesteps|--no-axe|--help] [--parallel=value [--maxruns=value]]
Options:
--install Installs the test environment for acceptance tests
@@ -82,7 +82,7 @@ Options:
--disable Disables test environment
--diag Get behat test environment status code
--updatesteps Update feature step file.
--axe Include axe accessibility tests
--no-axe Disable axe accessibility tests.
-j, --parallel Number of parallel behat run operation
-m, --maxruns Max parallel processes to be executed at one time.
@@ -94,7 +94,7 @@ Options:
Example from Moodle root directory:
\$ php admin/tool/behat/cli/util.php --enable --parallel=4
More info in http://docs.moodle.org/dev/Acceptance_testing#Running_tests
More info in https://moodledev.io/general/development/tools/behat/running
";
if (!empty($options['help'])) {
@@ -320,12 +320,7 @@ function commands_to_execute($options) {
}
foreach ($extraoptions as $option => $value) {
if ($options[$option]) {
$extra .= " --$option";
if ($value) {
$extra .= "=\"$value\"";
}
}
$extra .= behat_get_command_flags($option, $value);
}
if (empty($options['parallel'])) {
@@ -360,7 +355,7 @@ function print_combined_drop_output($processes) {
$op = $process->getIncrementalOutput();
if (trim($op)) {
$update = preg_filter('#^\s*([FS\.\-]+)(?:\s+\d+)?\s*$#', '$1', $op);
$strlentoprint = strlen($update);
$strlentoprint = $update ? strlen($update) : 0;
// If not enough dots printed on line then just print.
if ($strlentoprint < $remainingprintlen) {
+4 -4
View File
@@ -52,7 +52,7 @@ list($options, $unrecognized) = cli_get_params(
'updatesteps' => false,
'optimize-runs' => '',
'add-core-features-to-theme' => false,
'axe' => false,
'axe' => true,
),
array(
'h' => 'help',
@@ -79,7 +79,7 @@ Options:
--disable Disables test environment
--diag Get behat test environment status code
--updatesteps Update feature step file.
--axe Include axe accessibility tests
--no-axe Disable axe accessibility tests.
-o, --optimize-runs Split features with specified tags in all parallel runs.
-a, --add-core-features-to-theme Add all core features to specified theme's
@@ -89,7 +89,7 @@ Options:
Example from Moodle root directory:
\$ php admin/tool/behat/cli/util_single_run.php --enable
More info in http://docs.moodle.org/dev/Acceptance_testing#Running_tests
More info in https://moodledev.io/general/development/tools/behat/running
";
if (!empty($options['help'])) {
@@ -186,7 +186,7 @@ if ($options['install']) {
behat_config_manager::set_behat_run_config_value('behatsiteenabled', 1);
}
// Define whether to run Behat with axe tests.
// Configure axe according to option.
behat_config_manager::set_behat_run_config_value('axe', $options['axe']);
// Enable test mode.
+37
View File
@@ -0,0 +1,37 @@
<?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/>.
/**
* Define web service functions for tool_behat
*
* @package tool_behat
* @copyright 2022 onwards Catalyst IT EU {@link https://catalyst-eu.net}
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$functions = [
'tool_behat_get_entity_generator' => [
'classname' => 'tool_behat\\external\\get_entity_generator',
'methodname' => 'execute',
'description' => 'Get the generator details for an entity',
'type' => 'read',
'ajax' => true,
'capabilities' => 'moodle/site:config'
]
];
+1
View File
@@ -56,6 +56,7 @@ if ($components) {
$form = new steps_definitions_form(null, array('components' => $componentswithsteps));
// Output contents.
$PAGE->requires->js_call_amd('tool_behat/steps', 'init');
$renderer = $PAGE->get_renderer('tool_behat');
echo $renderer->render_stepsdefinitions($steps, $form);
+1 -1
View File
@@ -30,7 +30,7 @@ $string['errordataroot'] = '$CFG->behat_dataroot is not set or is invalid.';
$string['errorsetconfig'] = '$CFG->behat_dataroot, $CFG->behat_prefix and $CFG->behat_wwwroot need to be set in config.php.';
$string['erroruniqueconfig'] = '$CFG->behat_dataroot, $CFG->behat_prefix and $CFG->behat_wwwroot values need to be different than $CFG->dataroot, $CFG->prefix, $CFG->wwwroot, $CFG->phpunit_dataroot and $CFG->phpunit_prefix values.<br/>Or, if $CFG->behat_prefix is the same, $CFG->behat_dbname or $CFG->behat_dbhost need to be different from $CFG->phpunit_dbname and $CFG->phpunit_dbhost and from $CFG->dbname and $CFG->dbhost.';
$string['fieldvalueargument'] = 'Field value arguments';
$string['fieldvalueargument_help'] = 'This argument should be completed by a field value. There are many field types, including simple ones like checkboxes, selects or textareas, or complex ones like date selectors. See the dev documentation <a href="https://docs.moodle.org/dev/Acceptance_testing" target="_blank">Acceptance_testing</a> for details of expected field values.';
$string['fieldvalueargument_help'] = 'This argument should be completed by a field value. There are many field types, including simple ones like checkboxes, selects or textareas, or complex ones like date selectors. See the dev documentation <a href="https://moodledev.io/general/development/tools/behat" target="_blank">Acceptance_testing</a> for details of expected field values.';
$string['giveninfo'] = 'Given. Processes to set up the environment';
$string['infoheading'] = 'Info';
$string['installinfo'] = 'Read {$a} for installation and tests execution info';
+31 -2
View File
@@ -24,6 +24,8 @@
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/behat/classes/behat_generator_base.php');
/**
* Renderer for behat tool web features
*
@@ -106,6 +108,32 @@ class tool_behat_renderer extends plugin_renderer_base {
},
$stepsdefinitions
);
$elementstrings = [];
$count = 1;
$stepsdefinitions = preg_replace_callback('/(the following ")ELEMENT\d?_STRING(" exist:)/',
function($matches) use (&$elementstrings, &$count) {
// Replace element type arguments with a user-friendly select.
if (empty($elementstrings)) {
$behatgenerators = new behat_data_generators();
$componententities = $behatgenerators->get_all_entities();
ksort($componententities);
$elementstrings = [];
foreach ($componententities as $component => $entities) {
asort($entities);
foreach ($entities as $entity) {
$string = ($component === 'core') ? $entity : $component . ' > ' . $entity;
$elementstrings[$string] = $string;
}
}
}
$select = html_writer::select($elementstrings, 'entities' . $count, '', ['' => 'choosedots'],
['class' => 'entities']);
$count++;
return $matches[1] . $select . $matches[2];
},
$stepsdefinitions
);
}
// Steps definitions.
@@ -156,9 +184,10 @@ class tool_behat_renderer extends plugin_renderer_base {
// Info.
$installurl = behat_command::DOCS_URL;
$installlink = html_writer::tag('a', $installurl, array('href' => $installurl, 'target' => '_blank'));
$writetestsurl = 'https://docs.moodle.org/dev/Writing acceptance tests';
$writetestsurl = 'https://moodledev.io/general/development/tools/behat/writing';
$writetestslink = html_writer::tag('a', $writetestsurl, array('href' => $writetestsurl, 'target' => '_blank'));
$writestepsurl = 'https://docs.moodle.org/dev/Writing_new_acceptance_test_step_definitions';
$writestepsurl = 'https://moodledev.io/general/development/tools/behat/writing#' .
'writing-new-acceptance-test-step-definitions';
$writestepslink = html_writer::tag('a', $writestepsurl, array('href' => $writestepsurl, 'target' => '_blank'));
$infos = array(
get_string('installinfo', 'tool_behat', $installlink),
+6
View File
@@ -29,3 +29,9 @@
#page-admin-tool-behat-index .steps-definitions .stepregex {
color: #060;
}
#page-admin-tool-behat-index .steprequiredfields {
font-weight: bold;
font-size: 1em;
margin-top: 1em;
}
@@ -0,0 +1,33 @@
{{!
This file is part of Moodle - https://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template tool_behat/steprequiredfields
Display a Gherkin-style table row showing required columns for a step.
Example context (json):
{
"fields": [
"user",
"role",
"context"
]
}
}}
<pre class="steprequiredfields">
|{{#fields}} {{{.}}} |{{/fields}}
</pre>
@@ -30,10 +30,9 @@ Feature: Verify that all form fields values can be get and set
| student2 | G2 |
| student3 | G2 |
And the following "activities" exist:
| activity | course | idnumber | name | intro | firstpagetitle | wikimode | visible |
| wiki | C1 | wiki1 | Test this one | Test this one | Test this one | collaborative | 0 |
And I log in as "admin"
And I am on the "Course 1" "reset" page
| activity | course | idnumber | name | firstpagetitle | wikimode | visible |
| wiki | C1 | wiki1 | Test this one | Test this one | collaborative | 0 |
And I am on the "Course 1" "reset" page logged in as admin
# Select (multi-select) - Checking "the select box should contain".
And I expand all fieldsets
And the "Unenrol users" select box should contain "No roles"
@@ -60,16 +59,14 @@ Feature: Verify that all form fields values can be get and set
# Checkbox - Checking "I set the field" and "The field matches value" ticked.
And I set the field "Force format" to "1"
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the field "Force format" matches value "1"
And the field "Force format" does not match value ""
# Checkbox - Checking "I set the field" and "The field matches value" unticked.
And I set the field "Force format" to ""
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the field "Force format" matches value ""
And the field "Force format" does not match value "1"
@@ -77,8 +74,7 @@ Feature: Verify that all form fields values can be get and set
And I set the following fields to these values:
| Force format | 1 |
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the following fields match these values:
| Force format | 1 |
@@ -88,8 +84,7 @@ Feature: Verify that all form fields values can be get and set
And I set the following fields to these values:
| Force format | |
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the following fields match these values:
| Force format | |
@@ -142,10 +137,11 @@ Feature: Verify that all form fields values can be get and set
And I navigate to "Settings" in current page administration
And the field "Course ID number" matches value "Course id number"
Scenario: with JS disabled all form fields getters and setters works as expected
@javascript
Scenario: with JS enabled all form fields getters and setters works as expected
Given the following "activities" exist:
| activity | course | name |
| lesson | C1 | Test lesson |
Then I am on the "Course 1" "groups" page
# Select (multi-select & AJAX) - Checking "I set the field" and "select box should contain".
And I set the field "groups" to "Group 2"
@@ -157,11 +153,8 @@ Feature: Verify that all form fields values can be get and set
And the "members" select box should contain "Student 2 (s2@example.com)"
And the "members" select box should not contain "Student 3 (s3@example.com)"
# Checkbox (AJAX) - Checking "I set the field" and "I set the following fields to these values".
And I am on "Course 1" course homepage
And I add a "Lesson" to section "1"
And I am on the "Test lesson" "lesson activity editing" page
And I set the following fields to these values:
| Name | Test lesson |
| Description | Test lesson description |
| available[enabled] | 1 |
And I set the field "deadline[enabled]" to "1"
# Checkbox (AJAX) - Checking "the field matches value" before saving.
@@ -13,6 +13,10 @@ Feature: List the system steps definitions
Scenario: Accessing the list
Then I should see "Step definitions"
And I should not see "There aren't steps definitions matching this filter"
And I should not see "the following \"ELEMENT_STRING\" exist:"
And "entities1" "select" should exist
And the "entities1" select box should contain "users"
And the "entities1" select box should contain "mod_assign > submissions"
@javascript
Scenario: Filtering by type
@@ -34,3 +38,11 @@ Feature: List the system steps definitions
Then I should not see "There aren't steps definitions matching this filter"
And I should see "Checks the provided element and selector type exists in the current page."
And I should see "Checks that an element and selector type exists in another element and selector type on the current page."
@javascript
Scenario: Get required fields
Given I set the field "entities1" to "users"
And I should see "| username |"
When I set the field "entities1" to "mod_quiz > user overrides"
Then I should not see "| username |"
And I should see "| quiz | user |"
@@ -13,24 +13,24 @@ Feature: Transform steps arguments
And I open my profile in edit mode
Scenario: Use nasty strings on steps arguments
When I set the field "Surname" to "$NASTYSTRING1"
When I set the field "Last name" to "$NASTYSTRING1"
And I set the field "Description" to "$NASTYSTRING2"
And I set the field "City/town" to "$NASTYSTRING3"
And I press "Update profile"
And I click on "Edit profile" "link" in the "region-main" "region"
Then I should not see "NASTYSTRING"
And the field "Surname" matches value "$NASTYSTRING1"
And the field "Last name" matches value "$NASTYSTRING1"
And the field "City/town" matches value "$NASTYSTRING3"
Scenario: Use nasty strings on table nodes
When I set the following fields to these values:
| Surname | $NASTYSTRING1 |
| Last name | $NASTYSTRING1 |
| Description | $NASTYSTRING2 |
| City/town | $NASTYSTRING3 |
And I press "Update profile"
And I click on "Edit profile" "link" in the "region-main" "region"
Then I should not see "NASTYSTRING"
And the field "Surname" matches value "$NASTYSTRING1"
And the field "Last name" matches value "$NASTYSTRING1"
And the field "City/town" matches value "$NASTYSTRING3"
Scenario: Use double quotes
@@ -48,11 +48,11 @@ Feature: Transform steps arguments
Scenario: Nasty strings with other contents
When I set the field "First name" to "My Firstname $NASTYSTRING1"
And I set the following fields to these values:
| Surname | My Surname $NASTYSTRING2 |
| Last name | My Last name $NASTYSTRING2 |
And I press "Update profile"
And I click on "Edit profile" "link" in the "region-main" "region"
Then I should not see "NASTYSTRING"
And I should see "My Firstname"
And I should see "My Surname"
And I should see "My Last name"
And the field "First name" matches value "My Firstname $NASTYSTRING1"
And the field "Surname" matches value "My Surname $NASTYSTRING2"
And the field "Last name" matches value "My Last name $NASTYSTRING2"
@@ -0,0 +1,104 @@
<?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/>.
/**
* Unit tests for get_entity_generator web service
*
* @package tool_behat
* @copyright 2022 onwards Catalyst IT EU {@link https://catalyst-eu.net}
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_behat\external;
/**
* Tests for get_entity_generator web service
*
* @covers \tool_behat\external\get_entity_generator
*/
class get_entity_generator_test extends \advanced_testcase {
/**
* Log in as admin
*
* @return void
*/
public function setUp(): void {
$this->resetAfterTest();
$this->setAdminUser();
}
/**
* Get the generator for a core entity.
*
* @return void
*/
public function test_execute_core_entity(): void {
$generator = get_entity_generator::execute('users');
$this->assertEquals(['required' => ['username']], $generator);
}
/**
* Get the generator for the plugin entity.
*
* @return void
*/
public function test_execute_plugin_entity(): void {
$generator = get_entity_generator::execute('mod_book > chapters');
$this->assertEquals(['required' => ['book', 'title', 'content']], $generator);
}
/**
* Get the generator for an entity with no required fields.
*
* @return void
*/
public function test_execute_no_requried(): void {
$generator = get_entity_generator::execute('mod_forum > posts');
$this->assertEquals(['required' => []], $generator);
}
/**
* Attempt to get the generator for a core entity that does not exist.
*
* @return void
*/
public function test_execute_invalid_entity(): void {
$this->expectException('coding_exception');
get_entity_generator::execute('foo');
}
/**
* Attempt to get a generator form a plugin that does not exist.
*
* @return void
*/
public function test_execute_invalid_plugin(): void {
$this->expectException('coding_exception');
get_entity_generator::execute('foo > bar');
}
/**
* Attempt to get a generator for an entity that does not exist, from a plugin that does.
*
* @return void
*/
public function test_execute_invalid_plugin_entity(): void {
$this->expectException('coding_exception');
get_entity_generator::execute('mod_book > bar');
}
}
+2
View File
@@ -1,5 +1,7 @@
This files describes API changes in the tool_behat code.
=== 4.1.4 ===
* Behat is initialised with Axe accessibility tests enabled by default, if you want to disable them please use the --no-axe option.
=== 3.7 ===
* Behat will now look for behat step definitions in the current
theme and any parents the theme may have.
+1 -1
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2022112800; // The current plugin version (Date: YYYYMMDDXX).
$plugin->version = 2022112802; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2022111800; // Requires this Moodle version.
$plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
@@ -48,12 +48,7 @@ class accessibility {
public static function is_accessibility_enabled(): bool {
global $CFG;
if (isset($CFG->enableaccessibilitytools)) {
return $CFG->enableaccessibilitytools;
}
// Enabled by default.
return true;
return !empty($CFG->enableaccessibilitytools);
}
/**
@@ -388,13 +383,13 @@ class accessibility {
// Confirm if error is reported separately.
if ($DB->record_exists_select(manager::DB_ERRORS,
'resultid = ? AND ' . $DB->sql_compare_text('htmlcode', 255) . ' = ' . $DB->sql_compare_text('?', 255),
[$resultid, html_entity_decode($tmp->html)])) {
[$resultid, html_entity_decode($tmp->html, ENT_COMPAT)])) {
continue;
}
$error = new stdClass();
$error->resultid = $resultid;
$error->linenumber = $tmp->line;
$error->htmlcode = html_entity_decode($tmp->html);
$error->htmlcode = html_entity_decode($tmp->html, ENT_COMPAT);
$errors[] = $error;
}
@@ -43,7 +43,7 @@ class report_array extends brickfield_accessibility_reporter {
$output[$testname]['body'] = $translation['description'];
foreach ($test as $k => $problem) {
if (is_object($problem)) {
$output[$testname]['problems'][$k]['element'] = htmlentities($problem->get_html());
$output[$testname]['problems'][$k]['element'] = htmlentities($problem->get_html(), ENT_COMPAT);
$output[$testname]['problems'][$k]['line'] = $problem->get_line();
if ($problem->message) {
$output[$testname]['problems']['message'] = $problem->message;
@@ -67,7 +67,7 @@ class report_codehighlight extends \tool_brickfield\local\htmlchecker\brickfield
}
}
$this->dom->formatOutput = true;
$html = htmlspecialchars($this->dom->saveHTML());
$html = htmlspecialchars($this->dom->saveHTML(), ENT_COMPAT);
$html = str_replace('&quot;', '"', $html);
foreach ($this->classnames as $name) {
$html = preg_replace('/&lt;'. $name .'([^&]+)+\&gt;/', '<span \\1>', $html);
@@ -49,7 +49,7 @@ class report_xml extends brickfield_accessibility_reporter {
$output .= "\n\t<htmlchecker:problems>";
foreach ($test as $problem) {
if (is_object($problem)) {
$output .= "\n\t<htmlchecker:entities><![CDATA[" . htmlentities($problem->get_html()) .
$output .= "\n\t<htmlchecker:entities><![CDATA[" . htmlentities($problem->get_html(), ENT_COMPAT) .
"]]></htmlchecker:entities>";
$output .= "\n\t<htmlchecker:line>". $problem->get_line() ."</htmlchecker:line>";
if ($problem->message) {
@@ -16,6 +16,8 @@
namespace tool_brickfield\local\tool;
use tool_brickfield\manager;
/**
* Class advanced.
*
@@ -51,12 +53,36 @@ class advanced extends tool {
return 'advanced';
}
/**
* Builds context data used to render a single grid item on the advanced page.
* @param string $icon
* @param string $heading
* @param string $content
* @return array
*/
protected function get_grid_item_context(string $icon, string $heading, string $content): array {
return [
"icon" => "pix/i/$icon.png",
"iconalt" => get_string("icon:$icon", manager::PLUGINNAME),
"heading" => get_string($heading, manager::PLUGINNAME),
"content" => get_string($content, manager::PLUGINNAME)
];
}
/**
* Return the data for renderer / template display.
* @return \stdClass
*/
protected function fetch_data(): \stdClass {
$data = (object)[
'griditems' => [
$this->get_grid_item_context("analytics-custom", "headingone", "contentone"),
$this->get_grid_item_context("tools-custom", "headingtwo", "contenttwo"),
$this->get_grid_item_context("file-edit-custom", "headingthree", "contentthree"),
$this->get_grid_item_context("search-plus-custom", "headingfour", "contentfour"),
$this->get_grid_item_context("wand-magic-custom", "headingfive", "contentfive"),
$this->get_grid_item_context("hands-helping-custom", "headingsix", "contentsix"),
],
'valid' => true,
'error' => '',
];
+1 -1
View File
@@ -205,7 +205,7 @@ class manager {
* @return string
*/
public static function get_contenthash(?string $content = null): string {
return sha1($content);
return sha1($content ?? '');
}
/**
@@ -180,7 +180,7 @@ class renderer extends \tool_brickfield\output\renderer {
];
$data->errordata = !empty($data->errordata) ? $data->errordata : [];
foreach ($data->errordata as $err) {
$err->htmlcode = htmlentities($err->htmlcode);
$err->htmlcode = htmlentities($err->htmlcode, ENT_COMPAT);
$row = [$data->tarlabels[$err->component], $err->shortname, $err->errline, $err->htmlcode];
$table->data[] = $row;
}
@@ -254,19 +254,16 @@ class renderer extends \tool_brickfield\output\renderer {
<tr>
<td>
<img src="' . $this->image_path() . 'tachometer-alt-solid.svg" width="15" height="15">' .
' <td style="line-height: 10px;"> ' .
get_string('totalactivitiescount', manager::PLUGINNAME, $data->combodata['total']) .
'</td></td>
'</td>
<td>
<img src="' . $this->image_path() . 'check-square-regular.svg" width="15" height="15">' .
' <td style="line-height: 10px;"> ' .
get_string('passedcount', manager::PLUGINNAME, $data->combodata['passed']) .
'</td></td>
'</td>
<td>
<img src="' . $this->image_path() . 'times-circle-regular.svg" width="15" height="15">' .
' <td style="line-height: 10px;"> ' .
get_string('failedcount', manager::PLUGINNAME, $data->combodata['failed']) .
'</td></td>
'</td>
</tr>
</table>';
@@ -396,8 +393,8 @@ class renderer extends \tool_brickfield\output\renderer {
foreach ($data->groupdata as $key => $group) {
$checkgroup = area_base::checkgroup_name($key);
$icon = $icons[$key];
$tabledata[] = ['<img src="'.$icon.'" width="15" height="15">' . ' ' .' <td style="line-height: 10px;"> '.
get_string('checktype:' . $checkgroup, manager::PLUGINNAME).'</td>', $group->errorinstances];
$tabledata[] = ['<img src="'.$icon.'" width="15" height="15">' . ' ' .
get_string('checktype:' . $checkgroup, manager::PLUGINNAME), $group->errorinstances];
}
return $this->render_table(
@@ -270,3 +270,9 @@ $string['headingthree'] = 'Accessible file formats';
$string['headingfour'] = 'Focus effort';
$string['headingfive'] = 'HTML fixes';
$string['headingsix'] = 'Performance support';
$string['icon:analytics-custom'] = 'Analytics icon';
$string['icon:tools-custom'] = 'Tools icon';
$string['icon:file-edit-custom'] = 'Edit file icon';
$string['icon:search-plus-custom'] = 'Search icon';
$string['icon:wand-magic-custom'] = 'Magic wand icon';
$string['icon:hands-helping-custom'] = 'Helping hands icon';
+48 -71
View File
@@ -10,49 +10,22 @@
/* Advanced Page CSS */
@media only screen and (min-width: 768px) {
.tool_brickfield_grid_item {
width: 33.333333333333336%;
}
#tool_brickifeld_advanced_page {
margin: 20px 20px 20px 10px;
}
@media only screen and (max-width: 767px) {
.tool_brickfield_grid_item {
width: 100%;
}
}
.tool_brickfield_grid {
max-width: 1140px;
margin-right: auto;
margin-left: auto;
}
.tool_brickfield_grid_inner {
width: 100%;
.tool_brickfield_banner_heading {
display: flex;
flex-wrap: wrap;
}
.tool_brickfield_grid_item_shape {
height: 96%;
background-color: #fff;
padding: 10% 10% 10% 10%;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.05);
margin: 1% 1% 1% 1%;
border-radius: 15px 15px 15px 70px;
}
.tool_brickfield_grid_display {
display: grid;
grid-template-columns: 0.6fr 1.4fr 1fr;
grid-template-rows: 1fr 1fr;
}
.tool_brickfield_grid_spacing {
justify-content: space-between;
margin-bottom: 20px;
margin-left: auto;
margin-right: 1em;
}
.tool_brickfield_banner_heading > img {
height: 50px;
}
.tool_brickfield_banner > p {
text-align: center;
}
.tool_brickfield_grid_heading {
@@ -60,59 +33,63 @@
font-size: 20px;
font-weight: 400;
color: #040d29;
padding-bottom: 4px;
}
.tool_brickfield_grid_content {
color: #040d29;
font-size: 16px;
line-height: 1.4em;
margin: 0;
padding: 0;
}
.tool_brickfield_logo_height {
height: 3em;
}
.tool_brickfield_logo_position {
padding-bottom: 2em;
}
.tool_brickfield_icon_position {
line-height: 1;
font-size: 50px;
}
.tool_brickfield_icon_height {
.tool_brickfield_grid_heading > img {
height: 30px;
padding-right: 16px;
}
.tool_brickfield_center_button {
text-align: center;
.tool_brickfield_grid {
display: flex;
flex-wrap: wrap;
justify-content: center;
margin: 20px 20px 30px;
}
.tool_brickfield_advanced_button {
.tool_brickfield_grid > div {
margin: 10px;
padding: 20px;
flex-basis: 30%;
border: 1px solid grey;
max-width: 500px;
min-width: 250px;
flex-grow: 4;
border-radius: 15px 15px 15px 50px;
}
.tool_brickfield_grid_heading {
display: flex;
}
.tool_brickfield_footer > a {
font-size: 18px;
letter-spacing: 1px;
color: #fff;
background-color: #4054b2;
border-style: solid;
border-color: #fff;
border-radius: 5px 5px 5px 5px;
padding: 15px 50px 15px 50px;
border-radius: 5px;
padding: 15px 50px;
transition: 0.3s;
margin-bottom: 20px;
}
.tool_brickfield_advanced_button:hover {
.tool_brickfield_footer {
text-align: center;
}
.tool_brickfield_footer > a:hover {
color: #fff;
background-color: #253687;
text-decoration: none;
}
.tool_brickfield_banner_heading {
margin-bottom: 1.5em;
}
.tool_brickfield_banner {
height: 10em;
padding: 2.5em;
margin-bottom: 2em;
.tool_brickfield_footer > p {
margin-bottom: 25px;
}
+31 -173
View File
@@ -21,184 +21,42 @@
Example context (json):
{
"pagetitle": "Advanced"
"griditems": [
{
"icon": "some-icon-name",
"iconalt": "some-icon-alt",
"heading": "some-heading",
"content": "some-content"
}
]
}
}}
<link rel="stylesheet" href="styles.css">
<h3>{{{pagetitle}}}</h3>
<section class="tool_brickfield_banner">
<div class="tool_brickfield_banner_heading">
<img src="pix/i/Brickfield-logo-black.png" alt="Brickfield Logo" class="pull-right tool_brickfield_logo_height">
<h2>{{# str }}bannerheadingone, tool_brickfield{{/ str }}</h2>
<div id="tool_brickifeld_advanced_page">
<div class="tool_brickfield_banner">
<div class="tool_brickfield_banner_heading">
<h2>{{#str}} bannerheadingone, tool_brickfield{{/str}}</h2>
<img src="pix/i/Brickfield-logo-black.png" alt="Brickfield Logo">
</div>
<p>{{#str}} bannercontentone, tool_brickfield, https://www.brickfield.ie/moodle_talk_to_sales/{{/str}}</p>
</div>
<p>
{{# str }}bannercontentone, tool_brickfield, https://www.brickfield.ie/moodle_talk_to_sales/{{/ str }}
</p>
</section>
<div class="tool_brickfield_grid">
<div class="tool_brickfield_grid_inner">
<div class="tool_brickfield_grid">
{{#griditems}}
<div class="tool_brickfield_grid_item">
<div class="tool_brickfield_grid_item_shape">
<div class="tool_brickfield_grid_display" style="grid-template-areas: 'al ar ar' 'al ar ar'; grid-area: a;">
<div style="grid-area: al;">
<div class="tool_brickfield_grid_spacing">
<span class="tool_brickfield_icon_position">
<img src="pix/i/analytics-custom.png" alt="Analytics icon" class="tool_brickfield_icon_height">
</span>
</div>
</div>
<div style="grid-area: ar;">
<h3>
<span class="tool_brickfield_grid_heading">
{{# str }}headingone, tool_brickfield{{/ str }}
</span>
</h3>
<p class="tool_brickfield_grid_content">
{{# str }}contentone, tool_brickfield{{/ str }}
</p>
</div>
</div>
<div class="tool_brickfield_grid_heading">
<img src="{{icon}}" alt="{{iconalt}}">
<h3>{{heading}}</h3>
</div>
<div class="tool_brickfield_grid_content">
<p>{{content}}</p>
</div>
</div>
<div class="tool_brickfield_grid_item">
<div class="tool_brickfield_grid_item_shape">
<div class="tool_brickfield_grid_display" style="grid-template-areas: 'bl br br' 'bl br br'; grid-area: b;">
<div style="grid-area: bl;">
<div class="tool_brickfield_grid_spacing">
<span class="tool_brickfield_icon_position">
<img src="pix/i/tools-custom.png" alt="Tools icon" class="tool_brickfield_icon_height">
</span>
</div>
</div>
<div style="grid-area: br;">
<h3>
<span class="tool_brickfield_grid_heading">
{{# str }}headingtwo, tool_brickfield{{/ str }}
</span>
</h3>
<p class="tool_brickfield_grid_content">
{{# str }}contenttwo, tool_brickfield{{/ str }}
</p>
</div>
</div>
</div>
</div>
<div class="tool_brickfield_grid_item">
<div class="tool_brickfield_grid_item_shape">
<div class="tool_brickfield_grid_display" style="grid-template-areas: 'cl cr cr' 'cl cr cr'; grid-area: c;">
<div style="grid-area: cl;">
<div class="tool_brickfield_grid_spacing">
<span class="tool_brickfield_icon_position">
<img src="pix/i/file-edit-custom.png" alt="Edit file icon" class="tool_brickfield_icon_height">
</span>
</div>
</div>
<div style="grid-area: cr;">
<h3>
<span class="tool_brickfield_grid_heading">
{{# str }}headingthree, tool_brickfield{{/ str }}
</span>
</h3>
<p class="tool_brickfield_grid_content">
{{# str }}contentthree, tool_brickfield{{/ str }}
</p>
</div>
</div>
</div>
</div>
<div class="tool_brickfield_grid_item">
<div class="tool_brickfield_grid_item_shape">
<div class="tool_brickfield_grid_display" style="grid-template-areas: 'dl dr dr' 'dl dr dr'; grid-area: d;">
<div style="grid-area: dl;">
<div class="tool_brickfield_grid_spacing">
<span class="tool_brickfield_icon_position">
<img src="pix/i/search-plus-custom.png" alt="Search icon" class="tool_brickfield_icon_height">
</span>
</div>
</div>
<div style="grid-area: dr;">
<h3>
<span class="tool_brickfield_grid_heading">
{{# str }}headingfour, tool_brickfield{{/ str }}
</span>
</h3>
<p class="tool_brickfield_grid_content">
{{# str }}contentfour, tool_brickfield{{/ str }}
</p>
</div>
</div>
</div>
</div>
<div class="tool_brickfield_grid_item">
<div class="tool_brickfield_grid_item_shape">
<div class="tool_brickfield_grid_display" style="grid-template-areas: 'el er er' 'el er er'; grid-area: e;">
<div style="grid-area: el;">
<div class="tool_brickfield_grid_spacing">
<span class="tool_brickfield_icon_position">
<img src="pix/i/wand-magic-custom.png" alt="Magic wand icon" class="tool_brickfield_icon_height">
</span>
</div>
</div>
<div style="grid-area: er;">
<h3>
<span class="tool_brickfield_grid_heading">
{{# str }}headingfive, tool_brickfield{{/ str }}
</span>
</h3>
<p class="tool_brickfield_grid_content">
{{# str }}contentfive, tool_brickfield{{/ str }}
</p>
</div>
</div>
</div>
</div>
<div class="tool_brickfield_grid_item">
<div class="tool_brickfield_grid_item_shape">
<div class="tool_brickfield_grid_display" style="grid-template-areas: 'fl fr fr' 'fl fr fr'; grid-area: f;">
<div style="grid-area: fl;">
<div class="tool_brickfield_grid_spacing">
<span class="tool_brickfield_icon_position">
<img src="pix/i/hands-helping-custom.png" alt="Helping hands icon" class="tool_brickfield_icon_height">
</span>
</div>
</div>
<div style="grid-area: fr;">
<h3>
<span class="tool_brickfield_grid_heading">
{{# str }}headingsix, tool_brickfield{{/ str }}
</span>
</h3>
<p class="tool_brickfield_grid_content">
{{# str }}contentsix, tool_brickfield{{/ str }}
</p>
</div>
</div>
</div>
</div>
{{/griditems}}
</div>
<div class="tool_brickfield_footer">
<h2 class="accesshide">{{#str}} footerheading, tool_brickfield {{/str}}</h2>
<p>{{#str}}bannercontenttwo, tool_brickfield{{/str}}</p>
<a href="https://www.brickfield.ie/moodle_free_demo/">
{{#str}}buttonone, tool_brickfield{{/str}}
</a>
</div>
</div>
<section class="tool_brickfield_banner">
<h2 class="accesshide">{{# str }}footerheading, tool_brickfield{{/ str }}</h2>
<p>
{{# str }}bannercontenttwo, tool_brickfield{{/ str }}
</p>
<div class="tool_brickfield_center_button">
<form action="https://www.brickfield.ie/moodle_free_demo/">
<button class="tool_brickfield_advanced_button">
{{# str }}buttonone, tool_brickfield{{/ str }}
</button>
</form>
</div>
</section>
+1
View File
@@ -179,6 +179,7 @@ class api {
AND ra.roleid = :roleid
AND ra.userid = :userid
WHERE cm.cohortid ' . $cohortsql . '
AND u.deleted = 0
AND ra.id IS NULL';
$toadd = $DB->get_records_sql($sql, $params);
@@ -0,0 +1,43 @@
<?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/>.
declare(strict_types=1);
namespace tool_cohortroles;
use core\event\user_deleted;
/**
* Plugin event observer callbacks
*
* @package tool_cohortroles
* @copyright 2023 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class observers {
/**
* User deleted event, remove cohort role assignments specific to them
*
* @param user_deleted $event
*/
public static function user_deleted(user_deleted $event): void {
$cohortroleassignments = cohort_role_assignment::get_records(['userid' => $event->objectid]);
foreach ($cohortroleassignments as $cohortroleassignment) {
$cohortroleassignment->delete();
}
}
}
+32
View File
@@ -0,0 +1,32 @@
<?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/>.
/**
* Plugin event observers
*
* @package tool_cohortroles
* @copyright 2023 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$observers = [
[
'eventname' => '\core\event\user_deleted',
'callback' => '\tool_cohortroles\observers::user_deleted',
],
];
+11
View File
@@ -47,5 +47,16 @@ function xmldb_tool_cohortroles_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
if ($oldversion < 2022112801) {
// Delete any tool_cohortroles mappings for users who no longer exist.
$DB->delete_records_select('tool_cohortroles', 'userid NOT IN (SELECT id FROM {user} WHERE deleted = 0)');
// Cohortroles savepoint reached.
upgrade_plugin_savepoint(true, 2022112801, 'tool', 'cohortroles');
}
return true;
}
+1 -2
View File
@@ -24,8 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2022112800; // The current plugin version (Date: YYYYMMDDXX).
$plugin->version = 2022112801; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2022111800; // Requires this Moodle version.
$plugin->component = 'tool_cohortroles'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -62,8 +62,8 @@ staticDir: "./admin/tool/componentlibrary/content/static"
params:
moodleroot: "MOODLEROOT"
current_version: "4.6.0"
current_ruby_version: "4.6.0"
current_version: "4.6.2"
current_ruby_version: "4.6.2"
docs_version: "4.6"
boostrap_docs: "https://getbootstrap.com/docs/4.6"
repo: "https://github.com/twbs/bootstrap"
@@ -54,4 +54,4 @@ $breadcrumb-divider: none;
Since breadcrumbs provide a navigation, it's a good idea to add a meaningful label such as `aria-label="breadcrumb"` to describe the type of navigation provided in the `<nav>` element, as well as applying an `aria-current="page"` to the last item of the set to indicate that it represents the current page.
For more information, see the [WAI-ARIA Authoring Practices for the breadcrumb pattern](https://www.w3.org/TR/wai-aria-practices/#breadcrumb).
For more information, see the [ARIA Authoring Practices Guide breadcrumb pattern](https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/).
@@ -123,10 +123,10 @@ Place a `.btn-group` within another `.btn-group` when you want dropdown menus mi
<button type="button" class="btn btn-secondary">2</button>
<div class="btn-group" role="group">
<button id="btnGroupDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu" aria-labelledby="btnGroupDrop1">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Dropdown link</a>
<a class="dropdown-item" href="#">Dropdown link</a>
</div>
@@ -155,10 +155,10 @@ Make a set of buttons appear vertically stacked rather than horizontally. **Spli
<button type="button" class="btn btn-secondary">Button</button>
<button type="button" class="btn btn-secondary">Button</button>
<div class="btn-group" role="group">
<button id="btnGroupVerticalDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop1">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Dropdown link</a>
<a class="dropdown-item" href="#">Dropdown link</a>
</div>
@@ -166,28 +166,28 @@ Make a set of buttons appear vertically stacked rather than horizontally. **Spli
<button type="button" class="btn btn-secondary">Button</button>
<button type="button" class="btn btn-secondary">Button</button>
<div class="btn-group" role="group">
<button id="btnGroupVerticalDrop2" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop2">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Dropdown link</a>
<a class="dropdown-item" href="#">Dropdown link</a>
</div>
</div>
<div class="btn-group" role="group">
<button id="btnGroupVerticalDrop3" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop3">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Dropdown link</a>
<a class="dropdown-item" href="#">Dropdown link</a>
</div>
</div>
<div class="btn-group" role="group">
<button id="btnGroupVerticalDrop4" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu" aria-labelledby="btnGroupVerticalDrop4">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Dropdown link</a>
<a class="dropdown-item" href="#">Dropdown link</a>
</div>
@@ -81,7 +81,7 @@ Create block level buttons—those that span the full width of a parent—by add
## Active state
Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. **There's no need to add a class to `<button>`s as they use a pseudo-class**. However, you can still force the same active appearance with `.active` (and include the <code>aria-pressed="true"</code> attribute) should you need to replicate the state programmatically.
Buttons will appear pressed when active with a darker background, darker border, and, when shadows are enabled, an inset shadow. **There's no need to add a class to `<button>`s as they use a pseudo-class**. However, you can still force the same active appearance with `.active` (and include the <code>aria-pressed="true"</code> attribute) should you need to replicate the state programmatically.
{{< example >}}
<a href="#" class="btn btn-primary btn-lg active" role="button" aria-pressed="true">Primary link</a>
@@ -101,19 +101,23 @@ Disabled buttons using the `<a>` element behave a bit different:
- `<a>`s don't support the `disabled` attribute, so you must add the `.disabled` class to make it visually appear disabled.
- Some future-friendly styles are included to disable all `pointer-events` on anchor buttons. In browsers which support that property, you won't see the disabled cursor at all.
- Disabled buttons should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies.
- Disabled buttons using `<a>` should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies.
- Disabled buttons using `<a>` *should not* include the `href` attribute.
{{< example >}}
<a class="btn btn-primary btn-lg disabled" role="button" aria-disabled="true">Primary link</a>
<a class="btn btn-secondary btn-lg disabled" role="button" aria-disabled="true">Link</a>
{{< /example >}}
### Link functionality caveat
To cover cases where you have to keep the `href` attribute on a disabled link, the `.disabled` class uses `pointer-events: none` to try to disable the link functionality of `<a>`s. Note that this CSS property is not yet standardized for HTML, but all modern browsers support it. In addition, even in browsers that do support `pointer-events: none`, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, in addition to `aria-disabled="true"`, also include a `tabindex="-1"` attribute on these links to prevent them from receiving keyboard focus, and use custom JavaScript to disable their functionality altogether.
{{< example >}}
<a href="#" class="btn btn-primary btn-lg disabled" tabindex="-1" role="button" aria-disabled="true">Primary link</a>
<a href="#" class="btn btn-secondary btn-lg disabled" tabindex="-1" role="button" aria-disabled="true">Link</a>
{{< /example >}}
{{< callout warning >}}
##### Link functionality caveat
The `.disabled` class uses `pointer-events: none` to try to disable the link functionality of `<a>`s, but that CSS property is not yet standardized. In addition, even in browsers that do support `pointer-events: none`, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, add a `tabindex="-1"` attribute on these links (to prevent them from receiving keyboard focus) and use custom JavaScript to disable their functionality.
{{< /callout >}}
## Button plugin
Do more with buttons. Control button states or create groups of buttons for more components like toolbars.
@@ -309,7 +309,7 @@ Add some navigation to a card's header (or block) with Bootstrap's [nav componen
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
</div>
@@ -332,7 +332,7 @@ Add some navigation to a card's header (or block) with Bootstrap's [nav componen
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
</div>
@@ -24,7 +24,7 @@ Lastly, if you're building our JavaScript from source, it [requires `util.js`]({
Carousels don't automatically normalize slide dimensions. As such, you may need to use additional utilities or custom styles to appropriately size content. While carousels support previous/next controls and indicators, they're not explicitly required. Add and customize as you see fit.
**The `.active` class needs to be added to one of the slides** otherwise the carousel will not be visible. Also be sure to set a unique id on the `.carousel` for optional controls, especially if you're using multiple carousels on a single page. Control and indicator elements must have a `data-target` attribute (or `href` for links) that matches the id of the `.carousel` element.
**The `.active` class needs to be added to one of the slides** otherwise the carousel will not be visible. Also be sure to set a unique `id` on the `.carousel` for optional controls, especially if you're using multiple carousels on a single page. Control and indicator elements must have a `data-target` attribute (or `href` for links) that matches the `id` of the `.carousel` element.
### Slides only
@@ -48,7 +48,7 @@ Here's a carousel with slides only. Note the presence of the `.d-block` and `.w-
### With controls
Adding in the previous and next controls:
Adding in the previous and next controls. We recommend using `<button>` elements, but you can also use `<a>` elements with `role="button"`.
{{< example >}}
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
@@ -63,14 +63,14 @@ Adding in the previous and next controls:
{{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
<button class="carousel-control-prev" type="button" data-target="#carouselExampleControls" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
</button>
<button class="carousel-control-next" type="button" data-target="#carouselExampleControls" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</button>
</div>
{{< /example >}}
@@ -96,14 +96,14 @@ You can also add the indicators to the carousel, alongside the controls, too.
{{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<button class="carousel-control-prev" type="button" data-target="#carouselExampleIndicators" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
</button>
<button class="carousel-control-next" type="button" data-target="#carouselExampleIndicators" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</button>
</div>
{{< /example >}}
@@ -141,20 +141,20 @@ Add captions to your slides easily with the `.carousel-caption` element within a
</div>
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-slide="prev">
<button class="carousel-control-prev" type="button" data-target="#carouselExampleCaptions" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-slide="next">
</button>
<button class="carousel-control-next" type="button" data-target="#carouselExampleCaptions" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</button>
</div>
{{< /example >}}
### Crossfade
Add `.carousel-fade` to your carousel to animate slides with a fade transition instead of a slide.
Add `.carousel-fade` to your carousel to animate slides with a fade transition instead of a slide. Depending on your carousel content (e.g., text only slides), you may want to add `.bg-body` or some custom CSS to the `.carousel-item`s for proper crossfading.
{{< example >}}
<div id="carouselExampleFade" class="carousel slide carousel-fade" data-ride="carousel">
@@ -169,14 +169,14 @@ Add `.carousel-fade` to your carousel to animate slides with a fade transition i
{{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleFade" role="button" data-slide="prev">
<button class="carousel-control-prev" type="button" data-target="#carouselExampleFade" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleFade" role="button" data-slide="next">
</button>
<button class="carousel-control-next" type="button" data-target="#carouselExampleFade" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</button>
</div>
{{< /example >}}
@@ -197,14 +197,14 @@ Add `data-interval=""` to a `.carousel-item` to change the amount of time to del
{{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-slide="prev">
<button class="carousel-control-prev" type="button" data-target="#carouselExampleInterval" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleInterval" role="button" data-slide="next">
</button>
<button class="carousel-control-next" type="button" data-target="#carouselExampleInterval" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</button>
</div>
{{< /example >}}
@@ -225,14 +225,14 @@ Carousels support swiping left/right on touchscreen devices to move between slid
{{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControlsNoTouching" role="button" data-slide="prev">
<button class="carousel-control-prev" type="button" data-target="#carouselExampleControlsNoTouching" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControlsNoTouching" role="button" data-slide="next">
</button>
<button class="carousel-control-next" type="button" data-target="#carouselExampleControlsNoTouching" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</button>
</div>
{{< /example >}}
@@ -40,6 +40,29 @@ Generally, we recommend using a button with the `data-target` attribute. While n
</div>
{{< /example >}}
## Horizontal
The collapse plugin also supports horizontal collapsing. Add the `.width` modifier class to transition the `width` instead of `height` and set a `width` on the immediate child element. Feel free to write your own custom Sass, use inline styles, or use our [width utilities]({{< docsref "/utilities/sizing" >}}).
{{< callout info >}}
Please note that while the example below has a `min-height` set to avoid excessive repaints in our docs, this is not explicitly required. **Only the `width` on the child element is required.**
{{< /callout >}}
{{< example >}}
<p>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseWidthExample" aria-expanded="false" aria-controls="collapseWidthExample">
Toggle width collapse
</button>
</p>
<div style="min-height: 120px;">
<div class="collapse width" id="collapseWidthExample">
<div class="card card-body" style="width: 320px;">
This is some placeholder content for a horizontal collapse. It's hidden by default and shown when triggered.
</div>
</div>
</div>
{{< /example >}}
## Multiple targets
A `<button>` or `<a>` can show and hide multiple elements by referencing them with a JQuery selector in its `href` or `data-target` attribute.
@@ -127,7 +150,7 @@ Be sure to add `aria-expanded` to the control element. This attribute explicitly
If your control element is targeting a single collapsible element i.e. the `data-target` attribute is pointing to an `id` selector you should add the `aria-controls` attribute to the control element, containing the `id` of the collapsible element. Modern screen readers and similar assistive technologies make use of this attribute to provide users with additional shortcuts to navigate directly to the collapsible element itself.
Note that Bootstrap's current implementation does not cover the various keyboard interactions described in the [WAI-ARIA Authoring Practices 1.1 accordion pattern](https://www.w3.org/TR/wai-aria-practices-1.1/#accordion) - you will need to include these yourself with custom JavaScript.
Note that Bootstrap's current implementation does not cover the various keyboard interactions described in the [ARIA Authoring Practices Guide accordion pattern](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/) - you will need to include these yourself with custom JavaScript.
## Usage
@@ -16,7 +16,7 @@ If you're building our JavaScript from source, it [requires `util.js`]({{< docsr
## Accessibility
The [<abbr title="Web Accessibility Initiative">WAI</abbr> <abbr title="Accessible Rich Internet Applications">ARIA</abbr>](https://www.w3.org/TR/wai-aria/) standard defines an actual [`role="menu"` widget](https://www.w3.org/WAI/PF/aria/roles#menu), but this is specific to application-like menus which trigger actions or functions. <abbr title="Accessible Rich Internet Applications">ARIA</abbr> menus can only contain menu items, checkbox menu items, radio button menu items, radio button groups, and sub-menus.
The [<abbr title="Web Accessibility Initiative">WAI</abbr> <abbr title="Accessible Rich Internet Applications">ARIA</abbr>](https://www.w3.org/TR/wai-aria/) standard defines an actual [`role="menu"` widget](https://www.w3.org/TR/wai-aria/#menu), but this is specific to application-like menus which trigger actions or functions. <abbr title="Accessible Rich Internet Applications">ARIA</abbr> menus can only contain menu items, checkbox menu items, radio button menu items, radio button groups, and sub-menus.
Bootstrap's dropdowns, on the other hand, are designed to be generic and applicable to a variety of situations and markup structures. For instance, it is possible to create dropdowns that contain additional inputs and form controls, such as search fields or login forms. For this reason, Bootstrap does not expect (nor automatically add) any of the `role` and `aria-` attributes required for true <abbr title="Accessible Rich Internet Applications">ARIA</abbr> menus. Authors will have to include these more specific attributes themselves.
@@ -32,10 +32,10 @@ Any single `.btn` can be turned into a dropdown toggle with some markup changes.
{{< example >}}
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
@@ -47,11 +47,11 @@ And with `<a>` elements:
{{< example >}}
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Dropdown link
</a>
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
@@ -63,7 +63,7 @@ The best part is you can do this with any button variant, too:
<div class="bd-example">
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Primary</button>
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Primary</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -73,7 +73,7 @@ The best part is you can do this with any button variant, too:
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Secondary</button>
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Secondary</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -83,7 +83,7 @@ The best part is you can do this with any button variant, too:
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Success</button>
<button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Success</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -93,7 +93,7 @@ The best part is you can do this with any button variant, too:
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Info</button>
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Info</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -103,7 +103,7 @@ The best part is you can do this with any button variant, too:
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-warning dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Warning</button>
<button type="button" class="btn btn-warning dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Warning</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -113,7 +113,7 @@ The best part is you can do this with any button variant, too:
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Danger</button>
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Danger</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -127,7 +127,7 @@ The best part is you can do this with any button variant, too:
```html
<!-- Example single danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Action
</button>
<div class="dropdown-menu">
@@ -149,7 +149,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
<div class="bd-example">
<div class="btn-group">
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -162,7 +162,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -175,7 +175,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -188,7 +188,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -201,7 +201,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -214,7 +214,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -231,7 +231,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
<!-- Example split danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Action</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -250,7 +250,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
<div class="bd-example">
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Large button
</button>
<div class="dropdown-menu">
@@ -263,7 +263,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
</div>
<div class="btn-group">
<button type="button" class="btn btn-lg btn-secondary">Large split button</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -279,7 +279,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
```html
<!-- Large button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Large button
</button>
<div class="dropdown-menu">
@@ -290,7 +290,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
<button class="btn btn-secondary btn-lg" type="button">
Large split button
</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -301,7 +301,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
<div class="bd-example">
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Small button
</button>
<div class="dropdown-menu">
@@ -314,7 +314,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
</div>
<div class="btn-group">
<button type="button" class="btn btn-sm btn-secondary">Small split button</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -330,7 +330,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
```html
<!-- Small button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Small button
</button>
<div class="dropdown-menu">
@@ -341,7 +341,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
<button class="btn btn-secondary btn-sm" type="button">
Small split button
</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -358,7 +358,7 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
<div class="bd-example">
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<div class="dropdown-menu">
@@ -373,7 +373,7 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -389,7 +389,7 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
```html
<!-- Default dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<div class="dropdown-menu">
@@ -402,7 +402,7 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -417,7 +417,7 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th
<div class="bd-example">
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropright
</button>
<div class="dropdown-menu">
@@ -432,7 +432,7 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th
<button type="button" class="btn btn-secondary">
Split dropright
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropright</span>
</button>
<div class="dropdown-menu">
@@ -448,7 +448,7 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th
```html
<!-- Default dropright button -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropright
</button>
<div class="dropdown-menu">
@@ -461,7 +461,7 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th
<button type="button" class="btn btn-secondary">
Split dropright
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropright</span>
</button>
<div class="dropdown-menu">
@@ -476,7 +476,7 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the
<div class="bd-example">
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropleft
</button>
<div class="dropdown-menu">
@@ -488,8 +488,8 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the
</div>
</div>
<div class="btn-group">
<div class="btn-group dropleft" role="group">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropleft</span>
</button>
<div class="dropdown-menu">
@@ -509,7 +509,7 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the
```html
<!-- Default dropleft button -->
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropleft
</button>
<div class="dropdown-menu">
@@ -519,8 +519,8 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the
<!-- Split dropleft button -->
<div class="btn-group">
<div class="btn-group dropleft" role="group">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropleft</span>
</button>
<div class="dropdown-menu">
@@ -539,10 +539,10 @@ Historically dropdown menu contents *had* to be links, but that's no longer the
{{< example >}}
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenu2">
<div class="dropdown-menu">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
@@ -580,7 +580,7 @@ Add `.disabled` to items in the dropdown to **style them as disabled**.
{{< example >}}
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Regular link</a>
<a class="dropdown-item disabled" href="#" tabindex="-1" aria-disabled="true">Disabled link</a>
<a class="dropdown-item disabled">Disabled link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
{{< /example >}}
@@ -595,7 +595,7 @@ By default, a dropdown menu is automatically positioned 100% from the top and al
{{< example >}}
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Right-aligned menu
</button>
<div class="dropdown-menu dropdown-menu-right">
@@ -614,7 +614,7 @@ To align **right** the dropdown menu with the given breakpoint or larger, add `.
{{< example >}}
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Left-aligned but right aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-lg-right">
@@ -629,7 +629,7 @@ To align **left** the dropdown menu with the given breakpoint or larger, add `.d
{{< example >}}
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Right-aligned but left aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-right dropdown-menu-lg-left">
@@ -745,10 +745,10 @@ Use `data-offset` or `data-reference` to change the location of the dropdown.
{{< example >}}
<div class="d-flex">
<div class="dropdown mr-1">
<button type="button" class="btn btn-secondary dropdown-toggle" id="dropdownMenuOffset" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="10,20">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false" data-offset="10,20">
Offset
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuOffset">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
@@ -756,10 +756,10 @@ Use `data-offset` or `data-reference` to change the location of the dropdown.
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary">Reference</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" id="dropdownMenuReference" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-reference="parent">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false" data-reference="parent">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuReference">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
@@ -784,10 +784,10 @@ Add `data-toggle="dropdown"` to a link or button to toggle a dropdown.
```html
<div class="dropdown">
<button id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<div class="dropdown-menu" aria-labelledby="dLabel">
<div class="dropdown-menu">
...
</div>
</div>
@@ -192,7 +192,7 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
{{< example >}}
<div class="input-group mb-3">
<div class="input-group-prepend">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</button>
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">Dropdown</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -207,7 +207,7 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
<div class="input-group">
<input type="text" class="form-control" aria-label="Text input with dropdown button">
<div class="input-group-append">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</button>
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">Dropdown</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -225,7 +225,7 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
<div class="input-group mb-3">
<div class="input-group-prepend">
<button type="button" class="btn btn-outline-secondary">Action</button>
<button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -243,7 +243,7 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
<input type="text" class="form-control" aria-label="Text input with segmented dropdown button">
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary">Action</button>
<button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
@@ -62,7 +62,7 @@ Be sure to **not use the standard `.btn` classes here**.
<a href="#" class="list-group-item list-group-item-action">A second link item</a>
<a href="#" class="list-group-item list-group-item-action">A third link item</a>
<a href="#" class="list-group-item list-group-item-action">A fourth link item</a>
<a href="#" class="list-group-item list-group-item-action disabled" tabindex="-1" aria-disabled="true">A disabled link item</a>
<a class="list-group-item list-group-item-action disabled">A disabled link item</a>
</div>
{{< /example >}}
@@ -1,7 +1,7 @@
---
layout: docs
title: Navbar
description: Documentation and examples for Bootstrap's powerful, responsive navigation header, the navbar. Includes support for branding, navigation, and more, including support for our collapse plugin.
description: Documentation and examples for Bootstrap's powerful, responsive navigation header, the navbar. Includes support for branding, navigation, collapse plugin, and more.
group: components
toc: true
---
@@ -50,10 +50,10 @@ Here's an example of all the sub-components included in a responsive light-theme
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
@@ -61,7 +61,7 @@ Here's an example of all the sub-components included in a responsive light-theme
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
@@ -135,7 +135,7 @@ Active states—with `.active`—to indicate the current page can be applied dir
<a class="nav-link" href="#">Pricing</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
</div>
@@ -155,7 +155,7 @@ And because we use classes for our navs, you can avoid the list-based approach e
<a class="nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
<a class="nav-link" href="#">Features</a>
<a class="nav-link" href="#">Pricing</a>
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</div>
</div>
</nav>
@@ -181,10 +181,10 @@ You can also use dropdowns in your navbar. Dropdown menus require a wrapping ele
<a class="nav-link" href="#">Pricing</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Dropdown link
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
@@ -461,10 +461,10 @@ Here's an example navbar using `.navbar-nav-scroll` with `style="max-height: 100
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarScrollingDropdown" role="button" data-toggle="dropdown" aria-expanded="false">
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Link
</a>
<ul class="dropdown-menu" aria-labelledby="navbarScrollingDropdown">
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><hr class="dropdown-divider"></li>
@@ -472,7 +472,7 @@ Here's an example navbar using `.navbar-nav-scroll` with `style="max-height: 100
</ul>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Link</a>
<a class="nav-link disabled">Link</a>
</li>
</ul>
<form class="d-flex">
@@ -510,7 +510,7 @@ With no `.navbar-brand` shown at the smallest breakpoint:
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
@@ -539,7 +539,7 @@ With a brand name shown on the left and toggler on the right:
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
@@ -568,7 +568,7 @@ With a toggler on the left and brand name on the right:
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
@@ -28,7 +28,7 @@ The base `.nav` component does not include any `.active` state. The following ex
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -40,7 +40,7 @@ Classes are used throughout, so your markup can be super flexible. Use `<ul>`s l
<a class="nav-link active" href="#">Active</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</nav>
{{< /example >}}
@@ -66,7 +66,7 @@ Centered with `.justify-content-center`:
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -85,7 +85,7 @@ Right-aligned with `.justify-content-end`:
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -106,7 +106,7 @@ Stack your navigation by changing the flex item direction with the `.flex-column
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -118,7 +118,7 @@ As always, vertical navigation is possible without `<ul>`s, too.
<a class="nav-link active" href="#">Active</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</nav>
{{< /example >}}
@@ -138,7 +138,7 @@ Takes the basic nav from above and adds the `.nav-tabs` class to generate a tabb
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -159,7 +159,7 @@ Take that same HTML, but use `.nav-pills` instead:
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -180,7 +180,7 @@ Force your `.nav`'s contents to extend the full available width one of two modif
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -192,7 +192,7 @@ When using a `<nav>`-based navigation, you can safely omit `.nav-item` as only `
<a class="nav-link active" href="#">Active</a>
<a class="nav-link" href="#">Much longer nav link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</nav>
{{< /example >}}
@@ -210,7 +210,7 @@ For equal-width elements, use `.nav-justified`. All horizontal space will be occ
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -222,7 +222,7 @@ Similar to the `.nav-fill` example using a `<nav>`-based navigation.
<a class="nav-link active" href="#">Active</a>
<a class="nav-link" href="#">Much longer nav link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</nav>
{{< /example >}}
@@ -235,7 +235,7 @@ If you need responsive nav variations, consider using a series of [flexbox utili
<a class="flex-sm-fill text-sm-center nav-link active" href="#">Active</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Longer nav link</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
<a class="flex-sm-fill text-sm-center nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="flex-sm-fill text-sm-center nav-link disabled">Disabled</a>
</nav>
{{< /example >}}
@@ -243,7 +243,7 @@ If you need responsive nav variations, consider using a series of [flexbox utili
If you're using navs to provide a navigation bar, be sure to add a `role="navigation"` to the most logical parent container of the `<ul>`, or wrap a `<nav>` element around the whole navigation. Do not add the role to the `<ul>` itself, as this would prevent it from being announced as an actual list by assistive technologies.
Note that navigation bars, even if visually styled as tabs with the `.nav-tabs` class, should **not** be given `role="tablist"`, `role="tab"` or `role="tabpanel"` attributes. These are only appropriate for dynamic tabbed interfaces, as described in the [<abbr title="Web Accessibility Initiative">WAI</abbr> <abbr title="Accessible Rich Internet Applications">ARIA</abbr> Authoring Practices](https://www.w3.org/TR/wai-aria-practices/#tabpanel). See [JavaScript behavior](#javascript-behavior) for dynamic tabbed interfaces in this section for an example.
Note that navigation bars, even if visually styled as tabs with the `.nav-tabs` class, should **not** be given `role="tablist"`, `role="tab"` or `role="tabpanel"` attributes. These are only appropriate for dynamic tabbed interfaces, as described in the [ARIA Authoring Practices Guide tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/). See [JavaScript behavior](#javascript-behavior) for dynamic tabbed interfaces in this section for an example.
## Using dropdowns
@@ -257,7 +257,7 @@ Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -270,7 +270,7 @@ Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -283,7 +283,7 @@ Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
@@ -296,7 +296,7 @@ Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
{{< /example >}}
@@ -307,20 +307,22 @@ Use the tab JavaScript plugin—include it individually or through the compiled
If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
Dynamic tabbed interfaces, as described in the [<abbr title="Web Accessibility Initiative">WAI</abbr> <abbr title="Accessible Rich Internet Applications">ARIA</abbr> Authoring Practices](https://www.w3.org/TR/wai-aria-practices/#tabpanel), require `role="tablist"`, `role="tab"`, `role="tabpanel"`, and additional `aria-` attributes in order to convey their structure, functionality and current state to users of assistive technologies (such as screen readers).
Dynamic tabbed interfaces, as described in the [ARIA Authoring Practices Guide tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/), require `role="tablist"`, `role="tab"`, `role="tabpanel"`, and additional `aria-` attributes in order to convey their structure, functionality and current state to users of assistive technologies (such as screen readers). As a best practice, we recommend using `<button>` elements for the tabs, as these are controls that trigger a dynamic change, rather than links that navigate to a new page or location.
Note that dynamic tabbed interfaces should <em>not</em> contain dropdown menus, as this causes both usability and accessibility issues. From a usability perspective, the fact that the currently displayed tab's trigger element is not immediately visible (as it's inside the closed dropdown menu) can cause confusion. From an accessibility point of view, there is currently no sensible way to map this sort of construct to a standard WAI ARIA pattern, meaning that it cannot be easily made understandable to users of assistive technologies.
{{< callout danger >}}
Note that the tab JavaScript plugin **does not** support tabbed interfaces that contain dropdown menus, as these cause both usability and accessibility issues. From a usability perspective, the fact that the currently displayed tab's trigger element is not immediately visible (as it's inside the closed dropdown menu) can cause confusion. From an accessibility point of view, there is currently no sensible way to map this sort of construct to a standard WAI ARIA pattern, meaning that it cannot be easily made understandable to users of assistive technologies.
{{< /callout >}}
<div class="bd-example bd-example-tabs">
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
<button class="nav-link active" id="home-tab" data-toggle="tab" data-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
<button class="nav-link" id="profile-tab" data-toggle="tab" data-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
<button class="nav-link" id="contact-tab" data-toggle="tab" data-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contact</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
@@ -339,13 +341,13 @@ Note that dynamic tabbed interfaces should <em>not</em> contain dropdown menus,
```html
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
<button class="nav-link active" id="home-tab" data-toggle="tab" data-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
<button class="nav-link" id="profile-tab" data-toggle="tab" data-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
<button class="nav-link" id="contact-tab" data-toggle="tab" data-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contact</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
@@ -360,9 +362,9 @@ To help fit your needs, this works with `<ul>`-based markup, as shown above, or
<div class="bd-example bd-example-tabs">
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
<a class="nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</a>
<a class="nav-link" id="nav-contact-tab" data-toggle="tab" href="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</a>
<button class="nav-link active" id="nav-home-tab" data-toggle="tab" data-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
<button class="nav-link" id="nav-profile-tab" data-toggle="tab" data-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
<button class="nav-link" id="nav-contact-tab" data-toggle="tab" data-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
@@ -381,9 +383,9 @@ To help fit your needs, this works with `<ul>`-based markup, as shown above, or
```html
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
<a class="nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</a>
<a class="nav-link" id="nav-contact-tab" data-toggle="tab" href="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</a>
<button class="nav-link active" id="nav-home-tab" data-toggle="tab" data-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
<button class="nav-link" id="nav-profile-tab" data-toggle="tab" data-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
<button class="nav-link" id="nav-contact-tab" data-toggle="tab" data-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
@@ -398,13 +400,13 @@ The tabs plugin also works with pills.
<div class="bd-example bd-example-tabs">
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true">Home</a>
<button class="nav-link active" id="pills-home-tab" data-toggle="pill" data-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</a>
<button class="nav-link" id="pills-profile-tab" data-toggle="pill" data-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="pills-contact-tab" data-toggle="pill" href="#pills-contact" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</a>
<button class="nav-link" id="pills-contact-tab" data-toggle="pill" data-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</button>
</li>
</ul>
<div class="tab-content" id="pills-tabContent">
@@ -423,13 +425,13 @@ The tabs plugin also works with pills.
```html
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true">Home</a>
<button class="nav-link active" id="pills-home-tab" data-toggle="pill" data-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</a>
<button class="nav-link" id="pills-profile-tab" data-toggle="pill" data-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="pills-contact-tab" data-toggle="pill" href="#pills-contact" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</a>
<button class="nav-link" id="pills-contact-tab" data-toggle="pill" data-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</button>
</li>
</ul>
<div class="tab-content" id="pills-tabContent">
@@ -445,10 +447,10 @@ And with vertical pills.
<div class="row">
<div class="col-3">
<div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
<a class="nav-link active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</a>
<a class="nav-link" id="v-pills-profile-tab" data-toggle="pill" href="#v-pills-profile" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</a>
<a class="nav-link" id="v-pills-messages-tab" data-toggle="pill" href="#v-pills-messages" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</a>
<a class="nav-link" id="v-pills-settings-tab" data-toggle="pill" href="#v-pills-settings" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</a>
<button class="nav-link active" id="v-pills-home-tab" data-toggle="pill" data-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</button>
<button class="nav-link" id="v-pills-profile-tab" data-toggle="pill" data-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</button>
<button class="nav-link" id="v-pills-messages-tab" data-toggle="pill" data-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</button>
<button class="nav-link" id="v-pills-settings-tab" data-toggle="pill" data-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</button>
</div>
</div>
<div class="col-9">
@@ -474,10 +476,10 @@ And with vertical pills.
<div class="row">
<div class="col-3">
<div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
<a class="nav-link active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</a>
<a class="nav-link" id="v-pills-profile-tab" data-toggle="pill" href="#v-pills-profile" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</a>
<a class="nav-link" id="v-pills-messages-tab" data-toggle="pill" href="#v-pills-messages" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</a>
<a class="nav-link" id="v-pills-settings-tab" data-toggle="pill" href="#v-pills-settings" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</a>
<button class="nav-link active" id="v-pills-home-tab" data-toggle="pill" data-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</button>
<button class="nav-link" id="v-pills-profile-tab" data-toggle="pill" data-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</button>
<button class="nav-link" id="v-pills-messages-tab" data-toggle="pill" data-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</button>
<button class="nav-link" id="v-pills-settings-tab" data-toggle="pill" data-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</button>
</div>
</div>
<div class="col-9">
@@ -499,16 +501,16 @@ You can activate a tab or pill navigation without writing any JavaScript by simp
<!-- Nav tabs -->
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
<button class="nav-link active" id="home-tab" data-toggle="tab" data-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
<button class="nav-link" id="profile-tab" data-toggle="tab" data-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="messages-tab" data-toggle="tab" href="#messages" role="tab" aria-controls="messages" aria-selected="false">Messages</a>
<button class="nav-link" id="messages-tab" data-toggle="tab" data-target="#messages" type="button" role="tab" aria-controls="messages" aria-selected="false">Messages</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="settings-tab" data-toggle="tab" href="#settings" role="tab" aria-controls="settings" aria-selected="false">Settings</a>
<button class="nav-link" id="settings-tab" data-toggle="tab" data-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">Settings</button>
</li>
</ul>
@@ -526,7 +528,7 @@ You can activate a tab or pill navigation without writing any JavaScript by simp
Enable tabbable tabs via JavaScript (each tab needs to be activated individually):
```js
$('#myTab a').on('click', function (event) {
$('#myTab button').on('click', function (event) {
event.preventDefault()
$(this).tab('show')
})
@@ -535,10 +537,10 @@ $('#myTab a').on('click', function (event) {
You can activate individual tabs in several ways:
```js
$('#myTab a[href="#profile"]').tab('show') // Select tab by name
$('#myTab li:first-child a').tab('show') // Select first tab
$('#myTab li:last-child a').tab('show') // Select last tab
$('#myTab li:nth-child(3) a').tab('show') // Select third tab
$('#myTab button[data-target="#profile"]').tab('show') // Select tab by name
$('#myTab li:first-child button').tab('show') // Select first tab
$('#myTab li:last-child button').tab('show') // Select last tab
$('#myTab li:nth-child(3) button').tab('show') // Select third tab
```
### Fade effect
@@ -562,21 +564,21 @@ To make tabs fade in, add `.fade` to each `.tab-pane`. The first tab pane must a
#### $().tab
Activates a tab element and content container. Tab should have either a `data-target` or an `href` targeting a container node in the DOM.
Activates a tab element and content container. Tab should have either a `data-target` or, if using a link, an `href` attribute targeting a container node in the DOM.
```html
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
<button class="nav-link active" id="home-tab" data-toggle="tab" data-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
<button class="nav-link" id="profile-tab" data-toggle="tab" data-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="messages-tab" data-toggle="tab" href="#messages" role="tab" aria-controls="messages" aria-selected="false">Messages</a>
<button class="nav-link" id="messages-tab" data-toggle="tab" data-target="#messages" type="button" role="tab" aria-controls="messages" aria-selected="false">Messages</button>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" id="settings-tab" data-toggle="tab" href="#settings" role="tab" aria-controls="settings" aria-selected="false">Settings</a>
<button class="nav-link" id="settings-tab" data-toggle="tab" data-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">Settings</button>
</li>
</ul>
@@ -589,7 +591,7 @@ Activates a tab element and content container. Tab should have either a `data-ta
<script>
$(function () {
$('#myTab li:last-child a').tab('show')
$('#myTab li:last-child button').tab('show')
})
</script>
```
@@ -645,7 +647,7 @@ If no tab was already active, then the `hide.bs.tab` and `hidden.bs.tab` events
</table>
```js
$('a[data-toggle="tab"]').on('shown.bs.tab', function (event) {
$('button[data-toggle="tab"]').on('shown.bs.tab', function (event) {
event.target // newly activated tab
event.relatedTarget // previous active tab
})
@@ -58,7 +58,7 @@ While the `.disabled` class uses `pointer-events: none` to _try_ to disable the
<nav aria-label="...">
<ul class="pagination">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="true">Previous</a>
<a class="page-link">Previous</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active" aria-current="page">
@@ -128,7 +128,7 @@ Change the alignment of pagination components with [flexbox utilities]({{< docsr
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="true">Previous</a>
<a class="page-link">Previous</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
@@ -144,7 +144,7 @@ Change the alignment of pagination components with [flexbox utilities]({{< docsr
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-end">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="true">Previous</a>
<a class="page-link">Previous</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
@@ -22,6 +22,10 @@ Things to know when using the popover plugin:
- Popovers must be hidden before their corresponding elements have been removed from the DOM.
- Popovers can be triggered thanks to an element inside a shadow DOM.
{{< callout info >}}
{{< partial "callout-info-sanitizer.md" >}}
{{< /callout >}}
{{< callout info >}}
{{< partial "callout-info-prefersreducedmotion.md" >}}
{{< /callout >}}
@@ -268,7 +272,7 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
<td>sanitize</td>
<td>boolean</td>
<td>true</td>
<td>Enable or disable the sanitization. If activated <code>'template'</code>, <code>'content'</code> and <code>'title'</code> options will be sanitized.</td>
<td>Enable or disable the sanitization. If activated <code>'template'</code>, <code>'content'</code> and <code>'title'</code> options will be sanitized. See the <a href="{{< docsref "/getting-started/javascript#sanitizer" >}}">sanitizer section in our JavaScript documentation</a>.</td>
</tr>
<tr>
<td>whiteList</td>
@@ -33,7 +33,7 @@ Scroll the area below the navbar and watch the active class change. The dropdown
<a class="nav-link" href="#mdo">@mdo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#one">one</a>
<a class="dropdown-item" href="#two">two</a>
@@ -69,7 +69,7 @@ Scroll the area below the navbar and watch the active class change. The dropdown
<a class="nav-link" href="#mdo">@mdo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#one">one</a>
<a class="dropdown-item" href="#two">two</a>
@@ -47,7 +47,7 @@ Toasts are as flexible as you need and have very little required markup. At a mi
### Live
Click the button the below to show as toast (positioning with our utilities in the lower right corner) that has been hidden by default with `.hide`.
Click the button below to show a toast (positioned with our utilities in the lower right corner) that has been hidden by default with `.hide`.
<div class="position-fixed bottom-0 right-0 p-3" style="z-index: 5; right: 0; bottom: 0;">
<div id="liveToast" class="toast hide" role="alert" aria-live="assertive" aria-atomic="true" data-delay="2000">
@@ -91,7 +91,7 @@ Click the button the below to show as toast (positioning with our utilities in t
### Translucent
Toasts are slightly translucent, too, so they blend over whatever they might appear over. For browsers that support the `backdrop-filter` CSS property, we'll also attempt to blur the elements under a toast.
Toasts are slightly translucent to blend in with what's below them.
{{< example class="bg-dark" >}}
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
@@ -229,13 +229,13 @@ You can also get fancy with flexbox utilities to align toasts horizontally and/o
## Accessibility
Toasts are intended to be small interruptions to your visitors or users, so to help those with screen readers and similar assistive technologies, you should wrap your toasts in an [`aria-live` region](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions). Changes to live regions (such as injecting/updating a toast component) are automatically announced by screen readers without needing to move the user's focus or otherwise interrupt the user. Additionally, include `aria-atomic="true"` to ensure that the entire toast is always announced as a single (atomic) unit, rather than announcing what was changed (which could lead to problems if you only update part of the toast's content, or if displaying the same toast content at a later point in time). If the information needed is important for the process, e.g. for a list of errors in a form, then use the [alert component]({{< docsref "/components/alerts" >}}) instead of toast.
Toasts are intended to be small interruptions to your visitors or users, so to help those with screen readers and similar assistive technologies, you should wrap your toasts in an [`aria-live` region](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions). Changes to live regions (such as injecting/updating a toast component) are automatically announced by screen readers without needing to move the user's focus or otherwise interrupt the user. Additionally, include `aria-atomic="true"` to ensure that the entire toast is always announced as a single (atomic) unit, rather than just announcing what was changed (which could lead to problems if you only update part of the toast's content, or if displaying the same toast content at a later point in time). If the information needed is important for the process, e.g. for a list of errors in a form, then use the [alert component]({{< docsref "/components/alerts" >}}) instead of toast.
Note that the live region needs to be present in the markup *before* the toast is generated or updated. If you dynamically generate both at the same time and inject them into the page, they will generally not be announced by assistive technologies.
You also need to adapt the `role` and `aria-live` level depending on the content. If it's an important message like an error, use `role="alert" aria-live="assertive"`, otherwise use `role="status" aria-live="polite"` attributes.
As the content you're displaying changes, be sure to update the [`delay` timeout](#options) to ensure people have enough time to read the toast.
As the content you're displaying changes, be sure to update the [`delay` timeout](#options) so that users have enough time to read the toast.
```html
<div class="toast" role="alert" aria-live="polite" aria-atomic="true" data-delay="10000">
@@ -261,6 +261,8 @@ When using `autohide: false`, you must add a close button to allow users to dism
</div>
{{< /example >}}
While technically it's possible to add focusable/actionable controls (such as additional buttons or links) in your toast, you should avoid doing this for autohiding toasts. Even if you give the toast a long [`delay` timeout](#options), keyboard and assistive technology users may find it difficult to reach the toast in time to take action (since toasts don't receive focus when they are displayed). If you absolutely must have further controls, we recommend using a toast with `autohide: false`.
## JavaScript behavior
### Usage
@@ -21,6 +21,10 @@ Things to know when using the tooltip plugin:
- Tooltips must be hidden before their corresponding elements have been removed from the DOM.
- Tooltips can be triggered thanks to an element inside a shadow DOM.
{{< callout info >}}
{{< partial "callout-info-sanitizer.md" >}}
{{< /callout >}}
{{< callout info >}}
{{< partial "callout-info-prefersreducedmotion.md" >}}
{{< /callout >}}
@@ -269,7 +273,7 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
<td>sanitize</td>
<td>boolean</td>
<td>true</td>
<td>Enable or disable the sanitization. If activated <code>'template'</code> and <code>'title'</code> options will be sanitized.</td>
<td>Enable or disable the sanitization. If activated <code>'template'</code> and <code>'title'</code> options will be sanitized. See the <a href="{{< docsref "/getting-started/javascript#sanitizer" >}}">sanitizer section in our JavaScript documentation</a>.</td>
</tr>
<tr>
<td>whiteList</td>
@@ -53,7 +53,7 @@ Align images with the [helper float classes]({{< docsref "/utilities/float" >}})
If you are using the `<picture>` element to specify multiple `<source>` elements for a specific `<img>`, make sure to add the `.img-*` classes to the `<img>` and not to the `<picture>` tag.
```html
<picture>
<picture>
<source srcset="..." type="image/svg+xml">
<img src="..." class="img-fluid img-thumbnail" alt="...">
</picture>
@@ -52,7 +52,7 @@ $font-family-sans-serif:
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
```
Note that because the font stack includes emoji fonts, many common symbol/dingbat unicode characters will be rendered as multi-colored pictographs. Their appearance will vary, depending on the style used in the browser/platform's native emoji font, and they won't be affected by any CSS `color` styles.
Note that because the font stack includes emoji fonts, many common symbol/dingbat Unicode characters will be rendered as multi-colored pictographs. Their appearance will vary, depending on the style used in the browser/platform's native emoji font, and they won't be affected by any CSS `color` styles.
This `font-family` is applied to the `<body>` and automatically inherited globally throughout Bootstrap. To switch the global `font-family`, update `$font-family-base` and recompile Bootstrap.
@@ -201,7 +201,7 @@ Use text utilities as needed to change the alignment of your blockquote.
{{< example >}}
<blockquote class="blockquote text-center">
<p class="mb-0">>A well-known quote, contained in a blockquote element.</p>
<p class="mb-0">A well-known quote, contained in a blockquote element.</p>
<footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
</blockquote>
{{< /example >}}
@@ -283,4 +283,4 @@ Align terms and descriptions horizontally by using our grid system's predefined
As of v4.3.0, Bootstrap ships with the option to enable responsive font sizes, allowing text to scale more naturally across device and viewport sizes. <abbr title="Responsive font sizes">RFS</abbr> can be enabled by changing the `$enable-responsive-font-sizes` Sass variable to `true` and recompiling Bootstrap.
To support <abbr title="Responsive font sizes">RFS</abbr>, we use a Sass mixin to replace our normal `font-size` properties. Responsive font sizes will be compiled into `calc()` functions with a mix of `rem` and viewport units to enable the responsive scaling behavior. More about <abbr title="Responsive font sizes">RFS</abbr> and its configuration can be found on its [GitHub repository](https://github.com/twbs/rfs/tree/v8.0.4).
To support <abbr title="Responsive font sizes">RFS</abbr>, we use a Sass mixin to replace our normal `font-size` properties. Responsive font sizes will be compiled into `calc()` functions with a mix of `rem` and viewport units to enable the responsive scaling behavior. More about <abbr title="Responsive font sizes">RFS</abbr> and its configuration can be found on its [GitHub repository](https://github.com/twbs/rfs/tree/v8.1.0).
@@ -606,6 +606,7 @@ Responsive variations also exist for `align-content`.
- `.align-content{{ .abbr }}-start`
- `.align-content{{ .abbr }}-end`
- `.align-content{{ .abbr }}-center`
- `.align-content{{ .abbr }}-between`
- `.align-content{{ .abbr }}-around`
- `.align-content{{ .abbr }}-stretch`
{{- end -}}
@@ -81,6 +81,30 @@ $activity-icon-colors: (
);
{{</ highlight >}}
### Custom activity icons
Some activities allow icons to be customised. This can be done by implementing callback XXX_get_coursemodule_info() returning instance of object e.g. mod/lti/lib.php
{{< php >}}
$info = new cached_cm_info();
$info->iconurl = new moodle_url('https://moodle.org/theme/moodleorg/pix/moodle_logo_small.svg');
{{< /php >}}
To get this customised icon, use:
{{< php >}}
$iconurl = get_fast_modinfo($courseid)->get_cm($cmid)->get_icon_url()->out(false);
{{< /php >}}
<div class="media mb-3">
<div class="activityiconcontainer lti mr-3">
<img alt="lti icon" title="lti icon" src="https://moodle.org/theme/moodleorg/pix/moodle_logo_small.svg" class="activityicon "> </div>
<div class="media-body align-self-center">
<div class="text-uppercase small">external</div>
<div class="activityname"><a href="#">External tool module</a></div>
</div>
</div>
## Examples
<div class="media mb-3">
+48 -124
View File
@@ -10,7 +10,6 @@
.bd-content > h4[id] {
pointer-events: none;
}
.bd-content > h2[id]::before,
.bd-content > h3[id]::before,
.bd-content > h4[id]::before {
@@ -19,12 +18,10 @@
margin-top: -6rem;
content: "";
}
.bd-content > .table {
max-width: 100%;
margin-bottom: 1.5rem;
}
@media (max-width: 991.98px) {
.bd-content > .table {
display: block;
@@ -34,17 +31,14 @@
border: 0;
}
}
.bd-content > .table th:first-child,
.bd-content > .table td:first-child {
padding-left: 0;
}
.bd-content > .table th:not(:last-child),
.bd-content > .table td:not(:last-child) {
padding-right: 1.5rem;
}
.bd-content > .table td:first-child > code {
white-space: nowrap;
}
@@ -57,18 +51,16 @@
.bd-content > h2:not(:first-child) {
margin-top: 3rem;
}
.bd-content > h3 {
margin-top: 1.5rem;
}
.bd-content > ul li,
.bd-content > ol li {
margin-bottom: .25rem;
margin-bottom: 0.25rem;
}
.bd-title {
margin-bottom: .5rem;
margin-bottom: 0.5rem;
font-size: 3rem;
}
@@ -93,13 +85,12 @@
background-color: #563d7c;
outline: 0;
}
.skippy:hover {
color: #fff;
}
.skippy-text {
padding: .5em;
padding: 0.5em;
outline: 1px dotted;
}
@@ -114,7 +105,6 @@
border-bottom: 1px solid #dee2e6;
}
}
.sidebar .dropdown-menu .dropdown-item {
white-space: normal;
text-transform: capitalize;
@@ -136,10 +126,9 @@
align-items: center;
color: #212529;
text-decoration: none;
padding: .3rem 0.5rem;
padding: 0.3rem 0.5rem;
border-top: solid 1px #dee2e6;
}
.docs-sidebar a.dropdown-toggle::after {
margin-left: auto;
font-size: 14px;
@@ -165,7 +154,6 @@
border-bottom: solid 1px #dee2e6;
}
}
.docs-sidebar .active > a {
background: #dee2e6;
font-weight: bold;
@@ -190,46 +178,38 @@
padding-top: 1rem;
border-left: 1px solid #dee2e6;
}
#TableOfContents > ul ul {
padding-left: 1rem;
}
#TableOfContents > ul li {
display: block;
}
#TableOfContents > ul li a {
display: block;
padding: .125rem 1.5rem;
padding: 0.125rem 1.5rem;
color: #212529;
}
#TableOfContents > ul li a:hover {
color: #007bff;
text-decoration: none;
}
.bd-toc nav {
padding-top: .125em;
padding-bottom: .125em;
padding-top: 0.125em;
padding-bottom: 0.125em;
border-left: 0.25em solid #e9ecef;
}
.bd-toc nav > ul {
padding-left: .5rem;
padding-left: 0.5rem;
margin-bottom: 0;
}
.bd-toc nav > ul > li {
display: block;
}
.bd-toc nav li ul li {
margin-bottom: .25rem;
margin-bottom: 0.25rem;
list-style-type: disc;
}
.bd-toc nav a code {
font: inherit;
}
@@ -238,16 +218,13 @@
font-size: 0.875rem;
color: #63707c;
}
.bd-footer a {
font-weight: 600;
color: #495057;
}
.bd-footer a:hover, .bd-footer a:focus {
color: #007bff;
}
.bd-footer p {
margin-bottom: 0;
}
@@ -256,23 +233,20 @@
padding-left: 0;
margin-bottom: 1rem;
}
.bd-footer-links li {
display: inline-block;
}
.bd-footer-links li + li {
margin-left: 1rem;
}
.bd-example-row .row > .col,
.bd-example-row .row > [class^="col-"] {
padding-top: .75rem;
padding-bottom: .75rem;
.bd-example-row .row > [class^=col-] {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
background-color: rgba(86, 61, 124, 0.15);
border: 1px solid rgba(86, 61, 124, 0.2);
}
.bd-example-row .row + .row {
margin-top: 1rem;
}
@@ -287,9 +261,9 @@
border: 1px solid rgba(86, 61, 124, 0.15);
}
.bd-example-responsive-containers [class^="container"] {
padding-top: .75rem;
padding-bottom: .75rem;
.bd-example-responsive-containers [class^=container] {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
background-color: rgba(86, 61, 124, 0.15);
border: 1px solid rgba(86, 61, 124, 0.2);
}
@@ -316,18 +290,16 @@
padding-right: 15px;
padding-left: 15px;
}
@media (min-width: 576px) {
.example-content-main {
flex: 0 0 50%;
max-width: 50%;
}
}
@media (min-width: 992px) {
.example-content-main {
flex: 0 0 66.666667%;
max-width: 66.666667%;
flex: 0 0 66.66666667%;
max-width: 66.66666667%;
}
}
@@ -337,18 +309,16 @@
padding-right: 15px;
padding-left: 15px;
}
@media (min-width: 576px) {
.example-content-secondary {
flex: 0 0 50%;
max-width: 50%;
}
}
@media (min-width: 992px) {
.example-content-secondary {
flex: 0 0 33.333333%;
max-width: 33.333333%;
flex: 0 0 33.33333333%;
max-width: 33.33333333%;
}
}
@@ -357,44 +327,37 @@
padding: 1rem;
margin: 1rem -15px 0;
border: solid #f8f9fa;
border-width: .2rem 0 0;
border-width: 0.2rem 0 0;
}
.bd-example::after {
display: block;
clear: both;
content: "";
}
@media (min-width: 576px) {
.bd-example {
padding: 1.5rem;
margin-right: 0;
margin-left: 0;
border-width: .2rem;
border-width: 0.2rem;
}
}
.bd-example + .highlight,
.bd-example + .clipboard + .highlight {
margin-top: 0;
}
.bd-example + p {
margin-top: 2rem;
}
.bd-example > .form-control + .form-control {
margin-top: .5rem;
margin-top: 0.5rem;
}
.bd-example > .nav + .nav,
.bd-example > .alert + .alert,
.bd-example > .navbar + .navbar,
.bd-example > .progress + .progress {
margin-top: 1rem;
}
.bd-example > .dropdown-menu {
position: static;
display: block;
@@ -402,24 +365,23 @@
.bd-example > svg + svg,
.bd-example > img + img {
margin-left: .5rem;
margin-left: 0.5rem;
}
.bd-example > .btn,
.bd-example > .btn-group {
margin-top: .25rem;
margin-bottom: .25rem;
margin-top: 0.25rem;
margin-bottom: 0.25rem;
}
.bd-example > .btn-toolbar + .btn-toolbar {
margin-top: .5rem;
margin-top: 0.5rem;
}
.bd-example > .list-group {
max-width: 400px;
}
.bd-example > [class*="list-group-horizontal"] {
.bd-example > [class*=list-group-horizontal] {
max-width: 100%;
}
@@ -428,12 +390,10 @@
position: static;
margin: -1rem -1rem 1rem;
}
.bd-example .fixed-bottom {
position: static;
margin: 1rem -1rem -1rem;
}
@media (min-width: 576px) {
.bd-example .fixed-top,
.bd-example .sticky-top {
@@ -445,14 +405,13 @@
}
.bd-example .pagination {
margin-top: .5rem;
margin-bottom: .5rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
.bd-example-modal {
background-color: #fafafa;
}
.bd-example-modal .modal {
position: static;
display: block;
@@ -465,7 +424,7 @@
.scrollspy-example {
position: relative;
height: 200px;
margin-top: .5rem;
margin-top: 0.5rem;
overflow: auto;
}
@@ -475,15 +434,15 @@
overflow: auto;
}
.bd-example-border-utils [class^="border"] {
.bd-example-border-utils [class^=border] {
display: inline-block;
width: 5rem;
height: 5rem;
margin: .25rem;
margin: 0.25rem;
background-color: #f5f5f5;
}
.bd-example-border-utils-0 [class^="border"] {
.bd-example-border-utils-0 [class^=border] {
border: 1px solid #dee2e6;
}
@@ -494,7 +453,6 @@
background-color: #f8f9fa;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
@media (min-width: 576px) {
.highlight {
padding: 1.5rem;
@@ -505,7 +463,6 @@
margin-right: -15px;
margin-left: -15px;
}
@media (min-width: 576px) {
.bd-content .highlight {
margin-right: 0;
@@ -520,7 +477,6 @@
background-color: transparent;
border: 0;
}
.highlight pre code {
font-size: inherit;
color: #212529;
@@ -531,30 +487,25 @@
margin-top: 1.25rem;
margin-bottom: 1.25rem;
border: 1px solid #e9ecef;
border-left-width: .25rem;
border-left-width: 0.25rem;
border-radius: 0.25rem;
}
.bd-callout h4 {
margin-bottom: .25rem;
margin-bottom: 0.25rem;
}
.bd-callout p:last-child {
margin-bottom: 0;
}
.bd-callout code {
border-radius: 0.25rem;
}
.bd-callout + .bd-callout {
margin-top: -.25rem;
margin-top: -0.25rem;
}
.bd-callout-info {
border-left-color: #5bc0de;
}
.bd-callout-info h4 {
color: #5bc0de;
}
@@ -562,7 +513,6 @@
.bd-callout-warning {
border-left-color: #f0ad4e;
}
.bd-callout-warning h4 {
color: #f0ad4e;
}
@@ -570,7 +520,6 @@
.bd-callout-danger {
border-left-color: #d9534f;
}
.bd-callout-danger h4 {
color: #d9534f;
}
@@ -690,11 +639,9 @@
display: none;
float: right;
}
.bd-clipboard + .highlight {
margin-top: 0;
}
@media (min-width: 768px) {
.bd-clipboard {
display: block;
@@ -703,18 +650,17 @@
.btn-clipboard {
position: absolute;
top: .5rem;
right: .5rem;
top: 0.5rem;
right: 0.5rem;
z-index: 10;
display: block;
padding: .25rem .5rem;
padding: 0.25rem 0.5rem;
font-size: 0.75em;
color: #343a40;
background-color: transparent;
border: 0;
border-radius: 0.25rem;
}
.btn-clipboard:hover {
color: #fff;
background-color: #007bff;
@@ -740,9 +686,7 @@
/* LiteralStringDelimiter */
.chroma .dl {
color: #4070a0;
}
/* NEW */
} /* NEW */
/* Comment */
.chroma .c {
color: #727272;
@@ -757,9 +701,7 @@
.chroma .ch {
font-style: italic;
color: #60a0b0;
}
/* NEW */
} /* NEW */
/* CommentMultiline */
.chroma .cm {
color: #727272;
@@ -773,9 +715,7 @@
/* CommentPreprocFile */
.chroma .cpf {
color: #007020;
}
/* NEW */
} /* NEW */
/* CommentSpecial */
.chroma .cs {
color: #727272;
@@ -806,9 +746,7 @@
/* GenericUnderline */
.chroma .gl {
text-decoration: underline;
}
/* NEW */
} /* NEW */
/* GenericOutput */
.chroma .go {
color: #aaa;
@@ -827,9 +765,7 @@
/* GenericStrong */
.chroma .gs {
font-weight: 700;
}
/* NEW */
} /* NEW */
/* GenericTraceback */
.chroma .gt {
color: #9c6;
@@ -893,9 +829,7 @@
/* LiteralNumberBin */
.chroma .mb {
color: #40a070;
}
/* NEW */
} /* NEW */
/* LiteralNumberHex */
.chroma .mh {
color: #c24f19;
@@ -999,9 +933,7 @@
/* LiteralStringAffix */
.chroma .sa {
color: #4070a0;
}
/* NEW */
} /* NEW */
/* LiteralStringBacktick */
.chroma .sb {
color: #c30;
@@ -1059,12 +991,10 @@
content: "$ ";
user-select: none;
}
.chroma .language-bash .m,
.chroma .language-sh .m {
color: inherit;
}
.chroma .language-powershell::before {
color: #009;
content: "PM> ";
@@ -1076,13 +1006,11 @@
color: rgba(0, 123, 255, 0.5);
transition: color 0.15s ease-in-out;
}
@media (prefers-reduced-motion: reduce) {
.anchorjs-link {
transition: none;
}
}
.anchorjs-link:hover {
color: #007bff;
text-decoration: none;
@@ -1092,26 +1020,22 @@
padding-left: 0;
padding-right: 0;
}
.path-admin-tool-componentlibrary #page.drawers .main-inner {
margin: 0;
padding: 0;
border-radius: 0;
}
.path-admin-tool-componentlibrary #page.drawers div[role="main"] {
.path-admin-tool-componentlibrary #page.drawers div[role=main] {
padding: 0;
}
.path-admin-tool-componentlibrary #page-header,
.path-admin-tool-componentlibrary #maincontent,
.path-admin-tool-componentlibrary .secondarynavigation {
display: none;
}
.path-admin-tool-componentlibrary #region-main {
padding: 0;
border: 0;
}
/*# sourceMappingURL=docs.css.map */
/*# sourceMappingURL=docs.css.map */
File diff suppressed because one or more lines are too long
@@ -82,7 +82,7 @@
.bd-example {
position: relative;
padding: 1rem;
margin: 1rem (-$grid-gutter-width / 2) 0;
margin: 1rem (-$grid-gutter-width * 0.5) 0;
border: solid $gray-100;
border-width: .2rem 0 0;
@include clearfix();
@@ -248,8 +248,8 @@
}
.bd-content .highlight {
margin-right: (-$grid-gutter-width / 2);
margin-left: (-$grid-gutter-width / 2);
margin-right: (-$grid-gutter-width * 0.5);
margin-left: (-$grid-gutter-width * 0.5);
@include media-breakpoint-up(sm) {
margin-right: 0;
@@ -1,16 +1,26 @@
- name: primary
- name: blue
hex: "#007bff"
- name: secondary
hex: "#868e96"
- name: success
hex: "#28a745"
- name: danger
- name: indigo
hex: "#6610f2"
- name: purple
hex: "#6f42c1"
- name: pink
hex: "#e83e8c"
- name: red
hex: "#dc3545"
- name: warning
- name: orange
hex: "#fd7e14"
- name: yellow
hex: "#ffc107"
- name: info
- name: green
hex: "#28a745"
- name: teal
hex: "#20c997"
- name: cyan
hex: "#17a2b8"
- name: light
hex: "#f8f9fa"
- name: dark
- name: white
hex: "#fff"
- name: gray
hex: "#6c757d"
- name: gray-dark
hex: "#343a40"
@@ -9,7 +9,7 @@
- name: 500
hex: "#adb5bd"
- name: 600
hex: "#868e96"
hex: "#6c757d"
- name: 700
hex: "#495057"
- name: 800
@@ -1,7 +1,7 @@
- name: primary
hex: "#007bff"
- name: secondary
hex: "#868e96"
hex: "#6c757d"
- name: success
hex: "#28a745"
- name: danger
@@ -1,5 +1,5 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="{{ .Page.Params.description | default .Site.Params.description | markdownify }}">
<meta name="author" content="{{ .Site.Params.authors }}">
<meta name="generator" content="Hugo {{ hugo.Version }}">
@@ -1,6 +1,5 @@
{{- /*
Usage: `callout "type"`,
where type is one of info (default), danger, warning
Usage: `callout "type"`, where `type` is one of info (default), danger, or warning
*/ -}}
{{- $css_class := .Get 0 | default "info" -}}
@@ -1,27 +1,28 @@
{{- /*
Usage: `example [args]`
Usage: `example args`
`args` are optional and can be one of the following:
id: the `div`'s id - default: ""
class: any extra class(es) to be added to the `div` - default ""
show_preview: if the preview should be output in the HTML - default: `true`
show_markup: if the markup should be output in the HTML - default: `true`
`args` are all optional and can be one of the following:
* id: the `div`'s id - default: ""
* class: any extra class(es) to be added to the `div` - default: ""
* show_preview: if the preview should be output in the HTML - default: `true`
* show_markup: if the markup should be output in the HTML - default: `true`
*/ -}}
{{- $id := .Get "id" -}}
{{- $class := .Get "class" -}}
{{- $lang := .Get "lang" | default "html" -}}
{{- $show_preview := .Get "show_preview" | default true -}}
{{- $show_markup := .Get "show_markup" | default true -}}
{{- $input := .Inner -}}
{{- $inputrendered := replaceRE `{{#js}}` "<div class='hidden' data-action='runjs'>" $input -}}
{{- $inputrendered = replaceRE `{{/js}}` "</div>" $inputrendered -}}
{{- if eq $show_preview true -}}
<div{{ with .Get "id" }} id="{{ . }}"{{ end }} class="bd-example{{ with .Get "class" }} {{ . }}{{ end }}">
{{- $inputrendered | safeHTML -}}
<div{{ with $id }} id="{{ . }}"{{ end }} class="bd-example{{ with $class }} {{ . }}{{ end }}">
{{- $input -}}
</div>
{{- end -}}
{{- if eq $show_markup true -}}
{{- $content := replaceRE `<svg class="bd\-placeholder\-img(?:\-lg)?(?: *?bd\-placeholder\-img\-lg)? ?(.*?)".*?<\/svg>\n` `<img src="..." class="$1" alt="...">` $input -}}
{{- $content = replaceRE `(class=" *?")` "" $content -}}
{{- highlight (trim $content "\n") "html" "" -}}
{{- $content := replaceRE `<svg class="bd-placeholder-img(?:-lg)?(?: *?bd-placeholder-img-lg)? ?(.*?)".*?<\/svg>\n` `<img src="..." class="$1" alt="...">` $input -}}
{{- $content = replaceRE ` (class=" *?")` "" $content -}}
{{- highlight (trim $content "\n") $lang "" -}}
{{- end -}}
@@ -0,0 +1,14 @@
{{- /*
Work around wrong escapes in integrity attributes.
Original: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/param.html
*/ -}}
{{- $name := .Get 0 -}}
{{- with $name -}}
{{- $value := $.Page.Param . -}}
{{- /* If any parameter ends with `_hash`, mark the string as safe HTML */ -}}
{{- if (strings.HasSuffix $name "_hash") -}}
{{- $value = $value | safeHTML -}}
{{- end -}}
{{- with $value }}{{ . }}{{ else }}{{ errorf "Param %q not found: %s" $name $.Position }}{{ end -}}
{{- else }}{{ errorf "Missing param key: %s" $.Position }}{{ end -}}
@@ -1,21 +1,24 @@
{{- /*
Usage: `placeholder args`
args can be one of the following:
title: Used in the SVG `title` tag, default "Placeholder"
text: The text to show in the image - default: "width x height"
class: default: "bd-placeholder-img"
color: The text color (foreground) - default: "#dee2e6"
background: The background color - default: "#868e96"
width: default: 100%
height: default: 180px
`args` are all optional and can be one of the following:
* title: Used in the SVG `title` tag - default: "Placeholder"
* text: The text to show in the image - default: "width x height"
* class: Class to add to the `svg` - default: "bd-placeholder-img"
* color: The text color (foreground) - default: "#dee2e6"
* background: The background color - default: "#868e96"
* width: default: "100%"
* height: default: "180px"
*/ -}}
{{- $grays := $.Site.Data.grays -}}
{{- $default_color := (index $grays 2).hex -}}
{{- $default_background := (index $grays 5).hex -}}
{{- $title := .Get "title" | default "Placeholder" -}}
{{- $class := .Get "class" -}}
{{- $color := .Get "color" | default (index $grays 2).hex -}}
{{- $background := .Get "background" | default (index $grays 5).hex -}}
{{- $color := .Get "color" | default $default_color -}}
{{- $background := .Get "background" | default $default_background -}}
{{- $width := .Get "width" | default "100%" -}}
{{- $height := .Get "height" | default "180" -}}
{{- $text := .Get "text" | default (printf "%sx%s" $width $height) -}}
@@ -23,8 +26,8 @@
{{- $show_title := not (eq $title "false") -}}
{{- $show_text := not (eq $text "false") -}}
<svg class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" width="{{ $width }}" height="{{ $height }}" xmlns="http://www.w3.org/2000/svg"{{ if (or $show_title $show_text) }} aria-label="{{ if $show_title }}{{ $title }}{{ if $show_text }}: {{ end }}{{ end }}{{ if ($show_text) }}{{ $text }}{{ end }}"{{ end }} preserveAspectRatio="xMidYMid slice" role="img">
{{- if $show_title -}}<title>{{ $title }}</title>{{- end -}}
<svg class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" width="{{ $width }}" height="{{ $height }}" xmlns="http://www.w3.org/2000/svg"{{ if (or $show_title $show_text) }} role="img" aria-label="{{ if $show_title }}{{ $title }}{{ if $show_text }}: {{ end }}{{ end }}{{ if ($show_text) }}{{ $text }}{{ end }}"{{ else }} aria-hidden="true"{{ end }} preserveAspectRatio="xMidYMid slice" focusable="false">
{{- if $show_title }}<title>{{ $title }}</title>{{ end -}}
<rect width="100%" height="100%" fill="{{ $background }}"/>
{{- if $show_text -}}<text x="50%" y="50%" fill="{{ $color }}" dy=".3em">{{ $text }}</text>{{- end -}}
{{- if $show_text }}<text x="50%" y="50%" fill="{{ $color }}" dy=".3em">{{ $text }}</text>{{ end -}}
</svg>

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