Compare commits

...

373 Commits

Author SHA1 Message Date
Jake Dallimore d069cb9337 Moodle release 4.0.2 2022-07-08 11:28:34 +08:00
Jun Pataleta 93b132bbd1 weekly release 4.0.1+ 2022-07-07 21:33:04 +08:00
Jun Pataleta 27b19d4daa Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-07-07 21:33:03 +08:00
Jun Pataleta 4d5fab8cf2 Merge branch 'MDL-75058-400' of https://github.com/jleyva/moodle into MOODLE_400_STABLE 2022-07-07 12:07:41 +08:00
Jake Dallimore d4af150760 Merge branch 'MDL-69400-400' of https://github.com/abgreeve/moodle into MOODLE_400_STABLE 2022-07-07 11:48:49 +08:00
Jun Pataleta 0ba63f8913 Merge branch 'MDL-74885-400' of https://github.com/dravek/moodle into MOODLE_400_STABLE 2022-07-07 11:01:31 +08:00
Jun Pataleta 4969af736f Merge branch 'MDL-75028-400' of https://github.com/rezaies/moodle into MOODLE_400_STABLE 2022-07-07 10:59:03 +08:00
Jun Pataleta 839740a522 Merge branch 'MDL-75116_400' of https://github.com/aolley/moodle into MOODLE_400_STABLE 2022-07-07 10:47:38 +08:00
Víctor Déniz ac87f038e2 Merge branch 'MDL-74981-400' of https://github.com/stevandoMoodle/moodle into MOODLE_400_STABLE 2022-07-07 00:50:07 +01:00
Víctor Déniz 0a6c734fab Merge branch 'MDL-74835-M400_update-nodejs-version-in-travis-integration-to-lts-gallium' of https://github.com/ziegenberg/moodle into MOODLE_400_STABLE 2022-07-06 12:17:36 +01:00
Jun Pataleta 62f71f1c81 Merge branch 'MDL-74741-400' of https://github.com/rezaies/moodle into MOODLE_400_STABLE 2022-07-06 16:45:59 +08:00
stevando 2cc78b27de MDL-72171 tool_mobile: Ensure auto login URL is always local 2022-07-06 14:27:10 +08:00
David Matamoros cca619f966 MDL-74885 reportbuilder: format value using percents from lang pack 2022-07-06 08:25:10 +02:00
Adrian Greeve 1bd32a28e8 MDL-69400 mod_forum: Added calender event refreshing. 2022-07-06 12:37:56 +08:00
Mihail Geshoski 7be2023401 MDL-71921 scorm: Sanitize element names before outputting track details 2022-07-06 05:25:29 +02:00
Alex Morris 0397ea7e59 MDL-75044 assignfeedback_editpdf: Add SAFER option to GS command
Adds the SAFER option to the Ghostscript command to limit interaction
with IO and OS commands
2022-07-06 05:25:29 +02:00
Huong Nguyen f38397544a MDL-72029 Lesson: Prevent arbitrary file read when importing lesson questions in blackboard format 2022-07-06 05:25:29 +02:00
Huong Nguyen a212b1ec3e MDL-72029 lib: Prevent path traversal for clean_param with PARAM_SAFEPATH 2022-07-06 05:25:29 +02:00
Laurent David 945e79573f MDL-74473 core_analytics: Upgrade ML Backend to 3.0.5 2022-07-06 05:25:29 +02:00
Jake Dallimore b327defe5d MDL-72299 mod_lti: fix html escaping when reposting cross site posts 2022-07-06 05:25:29 +02:00
Andrew Nicols 2f0c3f4f7d Merge branch 'MDL-73305_MOODLE_400_STABLE' of https://github.com/tasosb/moodle into MOODLE_400_STABLE 2022-07-06 11:16:10 +08:00
Andrew Nicols 7ff7ca5c6e Merge branch 'MDL-74408-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-07-06 11:02:41 +08:00
Andrew Nicols a5f36b8de2 Merge branch 'MDL-74972-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-07-06 10:58:16 +08:00
Jun Pataleta f99c21b543 Merge branch 'MDL-74813-400' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-07-06 10:53:34 +08:00
Mihail Geshoski 004ceed0c1 MDL-74813 filepicker: Replace the dnd gif animation with a static icon 2022-07-06 10:24:37 +08:00
Jun Pataleta 10b6240719 Merge branch 'MDL-74821-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-07-05 22:13:49 +08:00
Laurent David e475728710 MDL-74821 mod_feedback: Fix HTML validator error
* Remove align attribute on table elements
* Fix dangling tr/td on multichoice rated
* Remove colspan as it is not used
2022-07-05 21:46:53 +08:00
Jun Pataleta 634115240a Merge branch 'MDL-74505-400' of https://github.com/JBThong/moodle into MOODLE_400_STABLE 2022-07-05 21:15:28 +08:00
Jake Dallimore 5040b9b579 Merge branch 'MDL-74815-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-07-05 14:53:01 +08:00
Thong Bui 3d2ad7d76a MDL-74505 Question bank: Improve behat steps 2022-07-05 13:26:09 +07:00
Thong Bui 0b31712cf4 MDL-74505 Question bank: Update validation editing question form. 2022-07-05 13:26:08 +07:00
Jake Dallimore 573ee63a0e Merge branch '400_mdl-73498' of https://github.com/daniil-berg/moodle into MOODLE_400_STABLE 2022-07-05 12:01:04 +08:00
AMOS bot 580dfbaeaa Automatically generated installer lang files 2022-07-05 00:08:23 +00:00
Adam Olley e088975109 MDL-75116 mod_feedback: Check array values exist before using them
Without this, the @list will emit a PHP warning under php8.0+ when the array
doesn't have a second element to assign.
2022-07-05 09:17:47 +09:30
Jun Pataleta 63fa452f51 Merge branch 'MDL-74516_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-07-04 23:17:32 +08:00
Jun Pataleta 09e0ba70ec Merge branch 'MDL-75008-400-enfix' of https://github.com/mudrd8mz/moodle into MOODLE_400_STABLE 2022-07-04 22:18:29 +08:00
Jun Pataleta 56ae87b4d2 MDL-74815 pix: Convert PNG version of darkened SVG icons
* Conversion was done using rsvg-convert from librsvg
2022-07-04 14:04:01 +08:00
Jun Pataleta 4572bf9827 MDL-74815 pix: Darken colour of grey icons
* Change the fill colour of grey icons from #999 to #888.
2022-07-04 14:04:01 +08:00
Eloy Lafuente (stronk7) 41f365d633 MDL-74516 workshop: Better handling of floats for gradepass fields
This re-applies the same fix that was used for the central mod form
to the workshop activity. This is needed because the completion
support for this module is custom (there are 2 grade items), hence
the validations are also custom.

For more information, read the previous commit and MDL-74516

Unfortunately, because of a related bug with assessment completion
(see MDL-69690) we cannot provide automated testing for this
activity. Manual instructions will be provided instead.
2022-07-01 13:55:53 +02:00
Eloy Lafuente (stronk7) feeac598b1 MDL-74516 activities: Better handling of floats for gradepass fields
Current code was relying on grade_floatval() that is not a validation
function. Instead, the gradepass field must be defined as proper float
and then perform the needed validations using unformat_float().

Note that the float element form has some particularities, see
MDL-73994 for more information and that makes us to have to check
for some values (null, zero) manually. Once that form element type
gets its behaviour fixed, the code will need to be revisited, hence
we have annotated it as comments for easier finding it in the future
(the same changes already were applied to other gradebook forms).

Also, remove an unreachable line of code (comparing with empty string)
within the grade_floatval() function because it's not possible anymore
to pass any string to it, as far as it's "?float" typed.

Covered as many cases with quiz completion as have been able to imagine.
2022-07-01 13:55:53 +02:00
Víctor Déniz bab7bdc53e weekly release 4.0.1+ 2022-07-01 11:28:41 +01:00
Andrew Nicols de95714ae0 Merge branch 'MDL-74841-400-fix' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-07-01 11:57:36 +08:00
Angelia Dela Cruz da07dbda3f MDL-74841 behat: Label behat generators use UI
Replace steps that manually add Label instances via the UI and use
Behat generators. This improves the speed of Behat test runs. Fix
for failing test.
2022-07-01 10:43:48 +08:00
David Mudrák 54c4cf6ac1 MDL-75008 lang: Use the fixed strings in Behat scenario files 2022-06-30 20:54:50 +02:00
Helen Foster 1e7d038247 MDL-75008 lang: Import fixed English strings (en_fix) 2022-06-30 20:54:50 +02:00
Shamim Rezaie 63c3c3f76e Merge branch 'MDL-74812-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-30 13:34:35 +10:00
Jun Pataleta 57d86b6a69 Merge branch 'MDL-75048-400' of https://github.com/jleyva/moodle into MOODLE_400_STABLE 2022-06-30 11:30:22 +08:00
Shamim Rezaie c47a4021df Merge branch 'MDL-75055-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-30 13:20:19 +10:00
Andrew Nicols 1294e283ad Merge branch 'MDL-75084-400' of https://github.com/NoelDeMartin/moodle into MOODLE_400_STABLE 2022-06-30 11:13:06 +08:00
Andrew Nicols 787fee79c8 Merge branch 'MDL-74613-400' of https://github.com/NoelDeMartin/moodle into MOODLE_400_STABLE 2022-06-30 11:04:35 +08:00
Andrew Nicols 64fa2930e5 Merge branch 'MDL-74220-400' of https://github.com/NoelDeMartin/moodle into MOODLE_400_STABLE 2022-06-30 10:59:32 +08:00
Andrew Nicols 60a5ecfe46 Merge branch 'MDL-74744-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-06-30 10:54:11 +08:00
Andrew Nicols b59920cce3 Merge branch 'MDL-74522-400' of https://github.com/devlionco/moodle into MOODLE_400_STABLE 2022-06-30 10:47:57 +08:00
Andrew Nicols db9a86ff42 Merge branch 'MDL-74841-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-06-30 10:44:26 +08:00
Andrew Nicols 5463c97506 Merge branch 'MDL-72292-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-06-30 10:40:22 +08:00
Andrew Nicols 4fd50e8cd9 MDL-74379 core: Update date_format_string to use x-os functions 2022-06-30 10:35:41 +08:00
Andrew Nicols fe88f321a2 Merge branch 'MDL-74379_400' of https://github.com/aya-saad1/moodle into MOODLE_400_STABLE 2022-06-30 10:35:38 +08:00
Andrew Nicols 6f78835258 Merge branch 'MDL-74287-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-30 10:02:11 +08:00
Víctor Déniz 191c8452d3 Merge branch 'MDL-72885-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-29 18:23:00 +01:00
Jun Pataleta 2e1636bb52 Merge branch 'MDL74387_MOODLE_400_STABLE' of https://github.com/Amrita1991/moodle into MOODLE_400_STABLE 2022-06-29 23:20:49 +08:00
Jun Pataleta ebb328750a MDL-75055 templates: Apply .alert-dismissible class
- Apply the .alert-dismissible class for notification alerts with
close button to fix its positioning. As an added bonus, the
.alert-dismissible class also enlarges the clickable area of the
close button which is great for accessibility.
- Improve example context for the notification alerts templates.
2022-06-29 22:07:11 +08:00
Jun Pataleta 5523816c38 MDL-75055 theme_boost: Darken close button colour in notification alerts
This is in order for the close button to have a good contrast against
the alert background and meet the minimum Level AA contrast ratio of 3:1
2022-06-29 22:07:11 +08:00
Ilya Tregubov e3fe0299a1 Merge branch 'MDL-74548-400' of https://github.com/cameron1729/moodle into MOODLE_400_STABLE 2022-06-29 16:17:07 +04:00
Jun Pataleta ab2a97b33d Merge branch 'MDL-74632-400' of https://github.com/HuongNV13/moodle into MOODLE_400_STABLE 2022-06-29 18:06:50 +08:00
Anastasios Bithas 1bb9eb8467 MDL-73305 mod_folder: Download Folder in a mlang formated folder 2022-06-29 12:49:23 +03:00
Jun Pataleta 42a0b73dc1 Merge branch 'MDL-74886-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-06-29 17:47:02 +08:00
Jake Dallimore ced2e3aca6 Merge branch 'MDL-74674-400' of https://github.com/alfonso-salces/moodle into MOODLE_400_STABLE 2022-06-29 16:44:47 +08:00
Víctor Déniz 805bb41d5b Merge branch 'MDL-74742-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-29 09:32:51 +01:00
Alfonso Salces 50a2df69c3 MDL-74674 core: create notification generators 2022-06-29 10:31:24 +02:00
Noel De Martin 066459d375 MDL-75084 blog: Implement behat generators 2022-06-29 09:39:58 +02:00
Jake Dallimore 0551129c39 Merge branch 'MDL-74864-400' of https://github.com/dpalou/moodle into MOODLE_400_STABLE 2022-06-29 13:40:54 +08:00
Cameron Ball 59b6d343bf MDL-74548 backup: Deprecate get/set copy from base controller 2022-06-29 09:41:12 +08:00
Cameron Ball 2f22088b38 MDL-74548 backup: Deprecate core_backup\copy\copy 2022-06-29 09:41:12 +08:00
Cameron Ball 8516a494b6 MDL-74548 backup: Unit tests for course copy refactor 2022-06-29 09:35:58 +08:00
Cameron Ball 53dd76348c MDL-74548 backup: Refactor course copies
This patch modifies the way copy data is shared in order to mitigate potential race conditions
and ensure that the serialised controller stored in the DB is always in a valid state.

The restore controller is now considered the "source of truth" for all information about the
copy operation. Backup controllers can no longer contain information about course copies.

As copy creation is not atomic, it is still possible for copy controllers to become orphaned or
exist in an invalid state. To mitigate this the backup cleanup task has been modified to call
a new helper method copy_helper::cleanup_orphaned_copy_controllers.

Summary of changes in this patch:

    - Copy data must now be passed through the restore controller's constructor
    - base_controller::get_copy has been deprecated in favour of restore_controller::get_copy
    - base_controller::set_copy has been deprecated without replacement
    - core_backup\copy\copy has been deprecated, use copy_helper.class.php's copy_helper instead
    - backup_cleanup_task will now clean up orphaned controllers from copy operations that went awry

Thanks to Peter Burnett for assiting with testing this patch.
2022-06-29 09:35:58 +08:00
Jun Pataleta def51280c2 Merge branch 'MDL-74701-400' of https://github.com/HuongNV13/moodle into MOODLE_400_STABLE 2022-06-28 23:52:55 +08:00
Jun Pataleta 230e8d8485 Merge branch 'MDL-74906-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-06-28 23:33:13 +08:00
Shamim Rezaie 91b88a51a5 Merge branch 'MDL-73121-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-28 16:08:56 +10:00
Dani Palou cdcfa083ff MDL-74864 forum: Allow specifying group in discussions generator 2022-06-28 07:00:05 +02:00
Jun Pataleta 8a5e4412d9 Merge branch 'MDL-68867-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-06-28 11:24:04 +08:00
Jun Pataleta deae2cf2fd Merge branch 'MDL-74929-400' of https://github.com/bmbrands/moodle into MOODLE_400_STABLE 2022-06-28 11:07:39 +08:00
Jun Pataleta 5666c34237 Merge branch 'MDL-74781_400' of https://github.com/aya-saad1/moodle into MOODLE_400_STABLE 2022-06-28 10:44:59 +08:00
Juan Leyva 4535493590 MDL-75058 course: Fix support for dates on WebServices 2022-06-27 19:58:30 +02:00
Ilya Tregubov 991056f698 Merge branch 'MDL-74691-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-06-27 08:30:49 +04:00
Aya Saad 937eab02f6 MDL-74781 search: Fix heading repetition in global search page 2022-06-26 10:37:59 +02:00
Aya Saad e6441d7fdb MDL-74379 language: injecting am/pm in date string
patching the date_format_string() function in moodlelib to add am/pm for languages that don't suuport it.
2022-06-26 10:36:29 +02:00
Shamim Rezaie 0074e485cd MDL-74741 javascript: Set the role of d&d links to button 2022-06-24 14:24:58 +10:00
Shamim Rezaie aa168505a9 MDL-74741 javascript: A11y fix for dialogues visible from beginning 2022-06-24 14:24:58 +10:00
Jun Pataleta bbff432ffa weekly release 4.0.1+ 2022-06-24 11:59:05 +08:00
Jun Pataleta 9c81a8e93f Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-06-24 11:59:04 +08:00
stevando 6dfe557c7e MDL-74981 mod_quiz: set limited width on overrides pages 2022-06-24 11:46:16 +08:00
stevando cb53c504d3 MDL-74981 mod_assign: set limited width on overrides pages 2022-06-24 11:46:16 +08:00
Juan Leyva 41445fa1bf MDL-75048 mod_quiz: Use new way to check if subcats are included 2022-06-23 10:02:33 +02:00
Jun Pataleta 0be775af96 Merge branch 'MDL-69939-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-23 09:53:37 +08:00
Jun Pataleta 979fd06b47 Merge branch 'MDL-74713-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-23 09:51:40 +08:00
Jun Pataleta 0198546f6e Merge branch 'MDL-73156-M400' of https://github.com/michael-milette/moodle into MOODLE_400_STABLE 2022-06-23 09:50:29 +08:00
Simey Lameze 12fc4c5e7a MDL-68867 calendar: remove dependency on USER->groupmember hack 2022-06-22 07:57:15 +08:00
Jun Pataleta 5b993c63c7 Merge branch 'MDL-73212_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-06-21 23:53:29 +08:00
Shamim Rezaie 5673f75524 MDL-75028 theme_boost: fix the inline edit tooltip for RTL 2022-06-22 01:18:59 +10:00
Eloy Lafuente (stronk7) efa7b639d0 MDL-73212 gha: Allow parameters to be passed via secret
We are disabling the -v (verbose) option, used by default. Still,
now we support a secret (that can be added to everyone's repository)
to accept any PHPUnit's command line options and run the tests with
them.

Some examples:

phpunit_options = -v (to keep the verbose option enabled)
phpunit_options = --testdox (to print information about every test...)

... (basically anything supported by the CLI)

Also, we are raising here the environment from Ubuntu 18.04 to 20.04

(self tested by GHA, heh)
2022-06-21 16:52:03 +02:00
Jun Pataleta 221b7618a1 MDL-74812 gradingform_rubric: Add radiogroup role properly
Do not add the radiogroup role to the rubric criterion when the rubric
table is being displayed on edit or preview modes.
2022-06-21 12:28:18 +08:00
Jun Pataleta 5ceafdc943 MDL-74812 gradingform_rubric: Fix text overlap in rubric levels 2022-06-21 12:28:18 +08:00
Jun Pataleta 40e58f8e3a MDL-74812 gradingform_rubric: Do not use deprecated width attribute
Use inline CSS style to define level width instead.
2022-06-21 12:28:18 +08:00
Jun Pataleta 2b84963424 MDL-74812 mod_assign: Remove duplicate ID intro 2022-06-21 12:28:18 +08:00
Jun Pataleta f35f522991 MDL-74812 gradingform_rubric: Fix contrast issues in rubric table
* Darken the score value using the green theme colour
* Use a light green theme colour for selection backgrounds
* Unify rubric styles related to background and text colour within the
  criteria.
2022-06-21 12:28:18 +08:00
Jun Pataleta bd26046264 Merge branch 'MDL-74630-400' of https://github.com/aanabit/moodle into MOODLE_400_STABLE 2022-06-21 10:12:11 +08:00
AMOS bot e2de61b74b Automatically generated installer lang files 2022-06-21 00:09:42 +00:00
Jun Pataleta c2996f9301 Merge branch 'MDL-74715-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-20 21:57:28 +08:00
Daniil Fajnberg 9f26a1a312 MDL-73498 mod_lti: iframe allowed domain fixed 2022-06-20 15:52:29 +02:00
Paul Holden 2e7ca2f071 MDL-74715 reportbuilder: switch event for adding filters/conditions.
Switch the select element event listener to that provided by custom
events helper, for adding report filters and conditions. This improves
cross-platform support.
2022-06-20 09:09:06 +01:00
Jun Pataleta 4cd34267b6 Merge branch 'MDL-74358_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-06-20 14:36:05 +08:00
Ilya Tregubov f02b730069 Merge branch 'MDL-74694-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-17 15:07:48 +04:00
Paul Holden ceb4b0e0b4 MDL-69939 webservice: correct AJAX bool value in services definition. 2022-06-17 11:03:40 +01:00
Eloy Lafuente (stronk7) feb621d4de MDL-74358 availability: Avoid php8 problem with array_values(null) 2022-06-17 11:09:48 +02:00
Ilya Tregubov 490929b3ba Merge branch 'MDL-74296-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-06-17 12:55:02 +04:00
Jun Pataleta 14d4bfdd2a weekly release 4.0.1+ 2022-06-17 15:30:30 +08:00
Eloy Lafuente (stronk7) 837e0cdce3 Merge branch 'MDL-72324-400-fix' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-17 08:38:45 +02:00
Jun Pataleta 211419a9c6 MDL-72324 core: Add upgrade.txt note about $plugin->incompatible 2022-06-17 10:37:59 +08:00
Jun Pataleta 92a2ccff5e Merge branch 'MDL-74529-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-17 10:19:12 +08:00
Jun Pataleta dce7206e8a Merge branch 'MDL-74533-400' of https://github.com/BruceGoodGuy/moodle into MOODLE_400_STABLE 2022-06-17 10:19:11 +08:00
Jun Pataleta 65cc1b695a Merge branch 'MDL-72555-400' of https://github.com/laurentdavid/moodle into MOODLE_400_STABLE 2022-06-17 10:19:11 +08:00
Simey Lameze b8602beb62 MDL-72292 core: add param type and polishing 2022-06-17 09:54:30 +08:00
Alexander Bias e8ef35b7c9 MDL-72292 core: Check if fulldir is set when loading renamed classes 2022-06-17 09:54:30 +08:00
Marina Glancy 9fb4b68799 MDL-74972 core_form: frozen autocomplete element does not display values 2022-06-16 10:25:00 +02:00
Paul Holden 8ed775e45f MDL-74287 forms: request changesmade string as required.
Unconditionally requesting the string was triggering exceptions
during installation, before the required external functions had
been populated.
2022-06-16 08:07:48 +01:00
Paul Holden fafa45112a MDL-74287 media_videojs: skip dynamic loader during install/upgrade. 2022-06-16 08:07:48 +01:00
Jake Dallimore 9b8ce4d82b MDL-74691 enrol_lti: add coverage of lti-ags claim variations to service
This test verifies how the service handles changes in the lti-ags claim
sent over several launches - ensuring the claim data is updated each
time.
2022-06-16 14:59:12 +08:00
Jake Dallimore 006b32290c MDL-74691 enrol_lti: allow omission of lineitems property in ags claim
The claim is valid with either or both of the URLs, so long as there's
at least one.
2022-06-16 14:59:05 +08:00
Jun Pataleta ba7c038739 MDL-74742 course: Use primary colour for Add button labels
Use the primary colour for the text inside the "Add a block" and
"Add an activity or resource" buttons.
2022-06-16 14:43:30 +08:00
Michael Milette 4b2efd494e MDL-73156 user: Custom user profile field names now filtered. 2022-06-15 11:45:45 -04:00
Jun Pataleta 8e58b0bace Merge branch 'MDL-74565-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-15 23:21:06 +08:00
Jun Pataleta 7bca8a175f Merge branch 'MDL-72324-incompatible-check-400' of https://github.com/Peterburnett/moodle into MOODLE_400_STABLE 2022-06-15 23:04:10 +08:00
Paul Holden 24d82b3e4a MDL-74694 reportbuilder: unit test coverage of external exporters. 2022-06-15 13:07:45 +01:00
Jun Pataleta eab32b304a Merge branch 'MDL-73966-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-15 18:06:15 +08:00
Jun Pataleta 86d0e4f7d7 Merge branch 'MDL-74871-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-15 17:17:07 +08:00
Bas Brands b9d50fc8fe MDL-74929 mod_assign: remove incorrect closing </div> 2022-06-15 09:11:34 +02:00
Paul Holden 8781ef341c MDL-74713 admin: format custom profile fields in identify config. 2022-06-14 17:19:36 +01:00
Jun Pataleta 4dfd7a290b Merge branch 'MDL-74790-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-14 22:53:44 +08:00
Jun Pataleta f3bfa720ad Merge branch 'MDL-74573_400' of https://github.com/aya-saad1/moodle into MOODLE_400_STABLE 2022-06-14 22:35:45 +08:00
Jun Pataleta 867cce4152 Merge branch 'MDL-74649-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-14 22:27:04 +08:00
Víctor Déniz 17bb38c307 Merge branch 'MDL-74526-400' of https://github.com/devlionco/moodle into MOODLE_400_STABLE 2022-06-14 10:11:37 +01:00
Víctor Déniz 47a4ef1e5e Merge branch 'MDL-74449_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-06-14 10:02:49 +01:00
Laurent David b8bf53eb4b MDL-72555 block_site_main_menu: Fix activity chooser issue
* When adding the block_site_main_menu on every page, the activity chooser generated
for this entire page is set with courseid = 1. So any activity is then added to the
home page instead of a course.
2022-06-14 10:04:17 +02:00
Jun Pataleta eab8c74464 Merge branch 'MDL-74816-400' of https://github.com/dpalou/moodle into MOODLE_400_STABLE 2022-06-14 14:03:37 +08:00
Jun Pataleta 2d9c3446e9 Merge branch 'MDL-74597-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-14 12:57:13 +08:00
Paul Holden 79651c7d22 MDL-74597 themes: remove pix icon references from custom menu items.
Support for them was removed in 8c336899, however existing config
remained that would lead to bogus URLs in custom user menu items.
2022-06-13 21:43:33 +01:00
Ilya Tregubov fb5e0c453b Merge branch 'MDL-74628-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-13 10:58:28 +04:00
Jake Dallimore 6228f13bdd Merge branch 'MDL_74310_400' of https://github.com/cengage/moodle into MOODLE_400_STABLE 2022-06-13 11:46:08 +08:00
Jake Dallimore 5bb2452ace Merge branch 'MDL69756_MOODLE_400_STABLE' of https://github.com/Amrita1991/moodle into MOODLE_400_STABLE 2022-06-13 11:12:37 +08:00
Jake Dallimore 8275662ed3 Merge branch 'MDL-74718-400' of https://github.com/sharidas/moodle into MOODLE_400_STABLE 2022-06-13 10:53:25 +08:00
Huong Nguyen f4eb5cb554 MDL-74632 atto_link: Fix cannot create a link for an image 2022-06-13 09:46:16 +07:00
Huong Nguyen f2fc73c674 MDL-74701 core: Fix popover elements are focusable even when hidden 2022-06-13 09:45:28 +07:00
Paul Holden 9fc49012bd MDL-74565 gradereport_grader: define capability required for editing. 2022-06-12 20:03:31 +01:00
Ilya Dymshits 86f4f6864d MDL-74526 theme: remove icon from empty categories in RTL languages 2022-06-12 10:41:54 +03:00
Eloy Lafuente (stronk7) ca8715654b MDL-74449 gradebook: Protect flatten_dependencies_array() a little bit
It has been detected that the flatten_dependencies_array() was fragile
and leading to wrong results when some incorrect data was passed to it.

This includes:

- Missing elements.
- Null dependencies.
- Non array dependencies.

While the existing behaviour (testing-wise) has been preserved, now the
situations above are better controlled and the function ignores all
those incorrect cases that shouldn't happen ever.

That implies that a good number of notices/warnings/errors aren't
happening anymore. That was impacting both results (when the problems
were  only notices and warnings) and execution (when the problems
were errors).

Covered with tests.
2022-06-10 18:17:56 +02:00
Laurent David d9a62c9fac MDL-74296 mod_bigbluebuttonbn: Fix completion indicator
* Completion view should work out of the box
* Patch the _user_outline and _user_complete so it works with completion view, while
implementing something better in MDL-74468
2022-06-10 18:05:07 +02:00
Sara Arjona 4a9fa426bc weekly release 4.0.1+ 2022-06-10 17:08:19 +02:00
Sara Arjona f1d4fd0db7 Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-06-10 17:08:16 +02:00
Amrita 129d445908 MDL-69756 nextcloud: copy-overwrite handling 2022-06-10 16:35:05 +02:00
Amrita c6ad71859c MDL-74387 url: exception for php to correct icon 2022-06-10 16:07:25 +02:00
Jun Pataleta 2c58871a74 MDL-74802 core: Remove tooltip on the notification close button
Reverting the addition of a Boostrap tooltip on the alert notification's
close button. It introduced a bug where the tooltip remains after
dismissing the notification alert. We can manually toggle the state of
the tooltip via JS, but I don't think it's worth the effort. The tooltip
is meant as an added bonus for sighted users to see what the close
button is about.
2022-06-10 13:15:32 +02:00
Jun Pataleta 42d214d0cc MDL-74802 core_user: Use button label to close notification alert
With the notification alert's close button now properly labelled, it is
better for Behat to interact on it using its label.
2022-06-10 13:15:32 +02:00
Andrew Nicols fb4a9db65e MDL-73013 filelib: Fix code lint 2022-06-10 13:15:32 +02:00
Andrew Nicols f5e1074653 MDL-73013 filelib: Address coding style violations 2022-06-10 13:15:32 +02:00
Andrew Nicols 3ec081f2de Merge branch 'MDL-73013-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-10 13:15:32 +02:00
Jake Dallimore c374c271b1 Merge branch 'MDL-72377-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-10 13:15:32 +02:00
Andrew Nicols 09bdf8c905 Merge branch 'MDL-73466-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-10 13:15:32 +02:00
Andrew Nicols be3348d85e Merge branch 'MDL-74553-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-06-10 13:15:32 +02:00
Andrew Nicols cb9d48373b Merge branch 'MDL-74764-400' of https://github.com/BruceGoodGuy/moodle into MOODLE_400_STABLE 2022-06-10 13:15:31 +02:00
Víctor Déniz 98018a490f Merge branch 'MDL-69970_400' of https://github.com/aya-saad1/moodle into MOODLE_400_STABLE 2022-06-10 13:15:31 +02:00
Sara Arjona 1e1cd2fa6b Merge branch 'MDL-74802-400-2' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-10 13:15:31 +02:00
Sara Arjona 603486e1f7 Merge branch 'MDL-74577-400' of https://github.com/sharidas/moodle into MOODLE_400_STABLE 2022-06-10 13:15:31 +02:00
Angelia Dela Cruz 2409c05065 MDL-74841 behat: Label behat generators use UI
Replace steps that manually add Label instances via the UI and use
Behat generators. This improves the speed of Behat test runs.
2022-06-10 13:11:00 +08:00
Paul Holden df98fb57ee MDL-74649 course: render scale information using page popup layout. 2022-06-09 12:18:50 +01:00
Jake Dallimore 28e2f8bc2a MDL-74906 mod_lti: fix form selector in multi-item content item post
Use #region-main-box and not .mform in the selector, otherwise it may
return the wrong mform, such as global search, if enabled. This is the
same way the form is selected in showMultipleSummaryAndHideForm().
2022-06-09 16:53:32 +08:00
Paul Holden 2408bd007b MDL-74408 core: exclude empty patterns in divert email config. 2022-06-09 09:39:24 +01:00
Sujith Haridasan a22898e2af MDL-74718 webdav: correct the loop when reading chunks
Adjusted the condition while reading the streams
in chunks. Read till the end to make sure we have got all
the data. Else we might not get all the data to show
in file picker.
2022-06-09 12:03:38 +05:30
Paul Holden d29cdb623e MDL-73466 forumreport_summary: use formatted course module name. 2022-06-08 21:36:52 +01:00
Víctor Déniz eb4a12f1f0 Merge branch 'MDL-73774-400' of https://github.com/HuongNV13/moodle into MOODLE_400_STABLE 2022-06-08 10:15:16 +01:00
Víctor Déniz aee5fc1223 Merge branch 'MDL-74726-400' of https://github.com/ssj365/moodle into MOODLE_400_STABLE 2022-06-08 10:07:10 +01:00
Eric Merrill 26a8d1fd81 MDL-74182 core_task: Obey CFG debug settings 2022-06-08 10:42:17 +02:00
Adam Olley 25212b83c3 MDL-74886 core_admin: Add unit test
Simple unit test to verify we don't get the TypeError anymore.
2022-06-08 10:08:10 +08:00
Simey Lameze c6cc60cb79 MDL-74886 core_admin: cast value and unit to integer 2022-06-08 10:08:10 +08:00
Peter Burnett eaf62826c3 MDL-72324 upgrade: Fix incompatible check in upgrade to match docs 2022-06-08 10:54:00 +10:00
AMOS bot 90f855220d Automatically generated installer lang files 2022-06-08 00:08:18 +00:00
Sara Arjona d0cedfa840 Merge branch 'MDL-74605-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-07 17:20:47 +02:00
Sara Arjona c4920eab6d Merge branch 'MDL-74678_400' of https://github.com/lostrogit/moodle into MOODLE_400_STABLE 2022-06-07 17:01:30 +02:00
Sara Arjona 48f59ff4e6 Merge branch 'MDL-74344-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-07 16:51:51 +02:00
Sara Arjona 264d4289da Merge branch 'MDL-74710-400' of https://github.com/ilyatregubov/moodle into MOODLE_400_STABLE 2022-06-07 16:25:32 +02:00
Sara Arjona a91c937935 Merge branch 'MDL-72983-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-07 16:10:38 +02:00
Alexey b5f4e35746 MDL-74522 lib/classes/navigation fix Navbar My courses data-key value 2022-06-07 16:30:30 +03:00
Paul Holden 1201a5fad5 MDL-74628 forumreport_summary: remove left margin of filter popover. 2022-06-07 11:08:33 +01:00
Paul Holden 1d6529f5ea MDL-74529 theme_boost: accessible autolink styles from filters.
The `autolink` class is used by various filter types to create
hyperlinks within text. Extend existing `aalink` class so they
behave in the same way.
2022-06-07 10:57:57 +01:00
Huong Nguyen 6cce66dcf7 MDL-73774 timeline: Prevent ID duplication 2022-06-07 11:48:25 +07:00
Jun Pataleta ead2f17b57 Merge branch 'MDL-70223_400' of https://github.com/aya-saad1/moodle into MOODLE_400_STABLE 2022-06-07 10:29:43 +08:00
AMOS bot 99935628cf Automatically generated installer lang files 2022-06-07 00:08:13 +00:00
Paul Holden 825766216d MDL-74871 user: account for absense of identity fields during export. 2022-06-06 21:12:40 +01:00
Paul Holden e17c20a424 MDL-72983 tool_dataprivacy: respect capability to export own data. 2022-06-06 20:50:24 +01:00
Paul Holden 76f327d195 MDL-72377 grade: fix category form hidden/until fields.
Ensure the saved values for the hidden and hidden until fields are
populated when editing a grade category. Fix behaviour on enabling
the hidden until field.

Re-enable tests commented out in eba1d32c.
2022-06-06 15:28:26 +01:00
Paul Holden ffb62740c0 MDL-72377 grade: increase size of category hidden fields.
As well as storing 1/0 to indicate hidden state, they are also used
to store a timestamp indicating hidden until date. Increasing field
size allows these values to be stored without triggering exceptions.
2022-06-06 15:28:26 +01:00
Paul Holden 59c9a5f46b MDL-73121 atto_managefiles: match used files enclosed by quotes. 2022-06-06 15:17:23 +01:00
Ilya Tregubov 9009e1bd30 Merge branch 'MDL-74599-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-06 16:12:06 +06:00
Ilya Tregubov dfb3226883 Merge branch 'MDL-69951-remove_drop-font-tags-400' of https://github.com/leonstr/moodle into MOODLE_400_STABLE 2022-06-06 11:12:35 +06:00
aya.saad e84729de92 MDL-74573 mod_assign: convert view other attempt link to a button 2022-06-05 09:21:52 +02:00
aya.saad 7262d95895 MDL-70223 h5p: fix invalid id when adding h5p activity 2022-06-05 09:19:45 +02:00
aya.saad d4f34b0904 MDL-69970 icons: flip help icon direction in RTL languages 2022-06-05 09:17:57 +02:00
Shamim Rezaie 59bfaeda37 Merge branch 'MDL-74250-400' of https://github.com/adpe/moodle into MOODLE_400_STABLE 2022-06-03 18:42:33 +10:00
Andrew Nicols 887e106a6c Merge branch 'MDL-73898-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-03 13:31:14 +08:00
Shamim Rezaie be06a75a36 Merge branch 'MDL-74699-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-06-03 14:45:11 +10:00
Andrew Nicols ac39bac81b weekly release 4.0.1+ 2022-06-03 11:04:01 +08:00
Andrew Nicols 8a5e048594 Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-06-03 11:03:58 +08:00
AMOS bot f91db6c35e Automatically generated installer lang files 2022-06-03 00:08:10 +00:00
Jun Pataleta 66a3d9edba Merge branch 'MDL-74631-invalid-tag-400' of https://github.com/leonstr/moodle into MOODLE_400_STABLE 2022-06-02 12:20:27 +08:00
Jun Pataleta f843322982 Merge branch 'MDL-57065-400' of https://github.com/ferranrecio/moodle into MOODLE_400_STABLE 2022-06-02 12:03:18 +08:00
Jun Pataleta 17e1d23c3f Merge branch 'MDL-71301-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-02 11:23:15 +08:00
Issam Taboubi fd2c90c29a MDL-71301 qtype_gapselect: Make blank answer box labels more meaningful 2022-06-02 10:51:33 +08:00
Jun Pataleta d2a6a5b164 Merge branch 'MDL-67966-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-06-02 10:29:56 +08:00
Joshua Ebarvia 7a5dabe6aa MDL-67966 mod_workshop: Use condition to verify form is using editor
This adds a condition to check if Online text is used
for the submission. The functions file_postupdate_standard_editor
and file_postupdate_standard_filemanager needs the property
content_editor of the formdata.
2022-06-02 10:28:33 +08:00
Sara Arjona de6d21497d Merge branch 'MDL-71276-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-06-01 18:37:52 +02:00
Sara Arjona 0921c43e2c Merge branch 'MDL-74752_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-06-01 17:05:18 +02:00
Tim Hunt 38db48744d MDL-74752 qtype_match: fix regrading logic - take 2 2022-06-01 14:24:30 +01:00
Noel De Martin 582f1bc1fe MDL-74613 grade: Add missing generators 2022-05-31 18:11:50 +02:00
Sara Arjona c496c5b819 Merge branch 'MDL-74752_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-05-31 17:39:12 +02:00
Tim Hunt 9d40a13eb6 MDL-74752 qtype_multianswer: implement regrading hooks 2022-05-31 09:22:51 +01:00
Tim Hunt 5990158a6f MDL-74752 qtypes gapselect & ddwtos: implement regrading hooks 2022-05-31 09:22:51 +01:00
Tim Hunt cc262124db MDL-74752 qtype_match: implement regrading hooks
As much as they can be before MDL-5560 is addressed.
2022-05-31 09:22:51 +01:00
Tim Hunt 5ad18a4070 MDL-74752 qtype_multichoice: fix regrading logic
The implements the new regrade-related hooks, and also has
tests for the changes to the core system, now that we have a question
type we can use for them.
2022-05-31 09:22:50 +01:00
Tim Hunt ca4ac3e8b6 MDL-74752 question regrading: implement the required hooks
This commit implements the necessary core hooks to ensure we only
allow a regrade of a quetion attempt to take place if the new and old
versions of the question are sufficiently similar.

It will be followed by commits to each question type where the
new method needs to be implemented.

Automated tests will be included in the first of those (mulitple choice)
becuse we need a question type that implements the hooks to test
the core changes.
2022-05-31 09:22:50 +01:00
Amaia Anabitarte c06e1de52d MDL-74630 core_contenbank: Add contextid to URL parameters 2022-05-31 09:48:45 +02:00
AMOS bot daf1199956 Automatically generated installer lang files 2022-05-31 00:08:11 +00:00
AMOS bot 5451d79a8c Automatically generated installer lang files 2022-05-30 00:08:06 +00:00
AMOS bot 763a4a3dac Automatically generated installer lang files 2022-05-28 00:08:15 +00:00
Jun Pataleta c9b5f15fb3 MDL-72885 output: Add lang attribute for language menu items 2022-05-27 23:39:56 +08:00
Jun Pataleta 88667463ac MDL-72885 output: Add lang attribute for language custom menu items 2022-05-27 19:42:21 +08:00
Jun Pataleta af1936faf4 MDL-72885 output: Allow additional attributes for custom menu items
* Plus don't render the link title if it's the same as the link text.
2022-05-27 19:42:21 +08:00
Adrian Perez 275c174cbf MDL-74250 core: Improve indicator that link opens in new window 2022-05-27 07:21:51 +02:00
Khoa Nguyen Dang 04757718b1 MDL-74764 core_course: Activity is not in alphabetical order. 2022-05-27 10:23:03 +07:00
Jake Dallimore b81a2f80f7 weekly release 4.0.1+ 2022-05-27 10:02:09 +08:00
Claude Vervoort 86cd6040f1 MDL-74310 mod_lti: fix ltilinkid on lineitems import 2022-05-26 10:34:48 -04:00
Noel De Martin c5ce22a2e6 MDL-74220 data: Implement behat generators 2022-05-26 10:38:37 +02:00
Jake Dallimore c18cf220a2 Merge branch 'MDL-73801-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-05-26 12:11:52 +08:00
Jake Dallimore 6bd67f0a5f Merge branch 'MDL-73386-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-05-26 11:47:27 +08:00
Dani Palou 8beef3f70b MDL-74816 mod_resource: Allow specify default file name in generator 2022-05-25 10:41:30 +02:00
Paul Holden b4c081fa08 MDL-74790 mod_resource: better detection of empty module intro. 2022-05-24 21:18:57 +01:00
Angelia Dela Cruz 7ee27356af MDL-74744 behat: Quiz behat generators use UI
Replace steps that manually add Quiz instances via the UI and use
Behat generators. This improves the speed of Behat test runs.
2022-05-24 10:53:02 +08:00
hieuvu 1ecfc86f97 MDL-74533 core_completion: Update using new grade pass for completion 2022-05-23 15:15:36 +07:00
Jun Pataleta 252dbc9605 MDL-74802 core: Improve the accessibility of alert notifications
* Make the ordering of the message and the close button logical on
  the DOM.
* Hide the times HTML entity
* Add sr-only label on the close button for non-sighted users
* Add tooltip on the close button sighted users
2022-05-23 13:00:22 +08:00
Daniel Ziegenberg 9b9823a56a MDL-74835 ci: Update nodejs version in travis integration to lts/gallium
In MDL-73915 the nodejs version was switched to lts/gallium but the
travis integration was not updated.

Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
2022-05-22 23:49:04 +02:00
Jun Pataleta 77134d5bb4 MDL-73386 mod_quiz: Use plain text for quiz navigation fake block title
* No need to enclose the title of the quiz navigation fake block in
a span tag. The block title also gets appended to the skip link which
means that a block title with a span tag assigned with an identifier
can cause duplicate ID errors on the DOM.
2022-05-21 00:33:32 +08:00
Ilya Tregubov e9aa483add Merge branch 'MDL-73225-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-05-20 18:00:04 +06:00
Laurent David 95742edc54 MDL-73225 mod_bigbluebuttonbn: Improve error message when joining
Display more friendly messages when:
    * When displaying activity and the server is not available
    * When we join a meeting and the server is not available or an error is detected
2022-05-20 13:06:27 +02:00
Sujith Haridasan f3150d4a26 MDL-74577 core: Reset login_failed_count_since_success after login
When the user is logged in successfully then reset the value
of login_failed_count_since_success to zero, if the value of
login_failed_count_since_success is greater than zero.
2022-05-20 10:14:40 +05:30
Ilya Tregubov d237a6312f weekly release 4.0.1+ 2022-05-19 19:24:28 +06:00
Ilya Tregubov c36a037c20 Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-05-19 19:24:27 +06:00
Paul Holden 3373632225 MDL-73801 backup: set predictably ordered backup next start time.
Prior to this change, the testcase would assert ordering based on
identical fields which could lead to random failures. Set distinct
next start time of course backup, and also remove random ordering
by sorting on defined course order (all other fields being equal).
2022-05-19 08:19:19 +01:00
Jun Pataleta c885df9202 Merge branch 'MDL-73163-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-05-19 10:11:15 +08:00
Jun Pataleta 1818370854 Merge branch 'MDL-74416-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-05-19 09:59:45 +08:00
Jun Pataleta 8ff3de4299 Merge branch 'MDL-74377-400' of https://github.com/roland04/moodle into MOODLE_400_STABLE 2022-05-18 21:47:46 +08:00
Mikel Martín 86899b14cb MDL-74377 reportbuilder: Fix dimmed text for dropdown items
To show inactive/unavailable rows '.dimmed_text' class usages have been replaced with '.text-muted'.
2022-05-18 15:43:44 +02:00
Paul Holden 7edd6995e5 MDL-73966 grade: fetch required user name fields of unenrolled users. 2022-05-17 16:03:06 +01:00
AMOS bot 35f7c54107 Automatically generated installer lang files 2022-05-17 00:07:40 +00:00
Paul Holden 70d17adc0a MDL-71276 message_email: include alternate email in privacy export. 2022-05-16 09:42:23 +01:00
Carlos Castillo c05e07923f MDL-74678 reportbuilder: Allow null in category description callback
Since category description is a nullable column, we need to allow null
value in category description column callback in category entity
2022-05-13 08:09:23 -05:00
Paul Holden f81b1125f5 MDL-74344 comment: consistent capability check for accessing report.
Co-authored-by: David Wipperfurth <dwipperfurth@webcourseworks.com>
2022-05-13 10:32:03 +01:00
AMOS bot 454ec455bf Automatically generated installer lang files 2022-05-13 00:07:40 +00:00
Paul Holden 5a1f0fd327 MDL-73013 calendar: fix serving of files added to category events. 2022-05-12 16:13:03 +01:00
Jun Pataleta 0a3eedbebf weekly release 4.0.1+ 2022-05-12 22:16:04 +08:00
Leon Stringer 02bc67f6c5 MDL-69951 filter_tidy: Replace drop-font-tags
The option drop-font-tags was removed in HTML Tidy version 5.5.14.  It
had been deprecated since 5.1.25, the docs said "Use the clean option
instead" which is what this commit does (see
https://api.html-tidy.org/tidy/quickref_5.1.25.html#drop-font-tags).
2022-05-12 11:44:29 +01:00
Jun Pataleta 7d4c2fb5f2 Merge branch 'MDL-74413_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-05-12 12:08:55 +08:00
Jun Pataleta f0066123a3 Merge branch 'MDL-73971_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-05-12 11:54:38 +08:00
Kordan b65077c4c0 MDL-73163 behat: Changed most to must 2022-05-12 10:11:36 +08:00
Petr Skoda d58770969c MDL-74416 phpunit: fix generator counters reset 2022-05-12 10:10:11 +08:00
Jake Dallimore f7922dbe1d MDL-74699 enrol_lti: fix clientid retrieval from aud during launches 2022-05-12 09:20:35 +08:00
Marina Glancy 53f6f1ce05 MDL-74553 blocks: do not refer to form fields by id
This is not compatible with the dynamic forms and random ids
2022-05-11 16:23:35 +02:00
Shamiso.Jaravaza b4829f2475 MDL-74726 mod_bigbluebuttonbn: Fix muteonstart
Added missing muteonstart_editable in mod_form  block condition
2022-05-11 08:11:54 -06:00
Paul Holden e8f9288606 MDL-73898 user: exclude guest user from participants table. 2022-05-10 17:22:54 +01:00
Ilya Tregubov 72bdc3766e MDL-74710 mod_bigbluebuttonbn: Fix settings url. 2022-05-10 11:17:36 +06:00
Eloy Lafuente (stronk7) d8ea630f24 MDL-74413 phpunit: Move more tests to use correct names and namespaces
Applied the following changes to various testcase classes:

- Namespaced with component[\level2-API]
- Moved to level2-API subdirectory when required.
- Fixed incorrect use statements with leading backslash.
- Remove file phpdoc block
- Remove MOODLE_INTERNAL if not needed.
- Changed code to point to global scope when needed.
- Fix some relative paths and comments here and there.
- All them passing individually.
- Complete runs passing too.

Special mention to:

- Moved to the level2 "privacy" namespace:
  - \mod_assign\privacy\feedback_legacy_polyfill_test
  - \mod_assign\privacy\submission_legacy_polyfill_test

- Moved to the level2 "task" namespace:
  - \core_message\task\migrate_message_data_test
  - \ltiservice_gradebookservices\task\cleanup_test
  - \message_email\task\send_email_test
  - \mod_lti\task\clean_access_tokens_test
  - \mod_workshop\task\cron_task_test

- Moved to the level2 "event" namespace:
  - \core_h5p\event\deleted_test
  - \core_h5p\event\viewed_test

- Renamed to a better name:
  - backup_forum_activity_task_test.php (missing "task")
2022-05-07 20:33:10 +02:00
Jun Pataleta ac9e395ed6 Moodle release 4.0.1 2022-05-07 19:34:54 +08:00
Eloy Lafuente (stronk7) 8bdba9bdca MDL-73971 phpunit: Move more tests to use correct names and namespaces
Applied the following changes to various testcase classes:

- Namespaced with component[\level2-API]
- Moved to level2-API subdirectory when required.
- Fixed incorrect use statements with leading backslash.
- Remove file phpdoc block
- Remove MOODLE_INTERNAL if not needed.
- Changed code to point to global scope when needed.
- Fix some relative paths and comments here and there.
- All them passing individually.
- Complete runs passing too.

Special mention to:

- Some fixtures, initially defined in the test files have been
  moved to new files in fixtures subdirectory, leaving the unit
  test files clearer:
  - moodle2_course_format_test.php
- Rename wrong named test:
  - baseoptiogroup_test = baseoptigroup_test
2022-05-06 18:29:16 +02:00
Eloy Lafuente (stronk7) 99fc164199 weekly release 4.0+ 2022-05-06 15:58:28 +02:00
Ferran Recio 64a7e06f61 MDL-57065 theme_boost: fix debug messages
The first debug message is covered by the top navbar header. This patch
will move the body's first debug message down below the navbar.
2022-05-06 12:26:40 +02:00
Jake Dallimore 9ec2c12f3d MDL-74602 mod_assign: fix js error with assign grader on classic 2022-05-06 16:48:29 +08:00
Jun Pataleta 6ec89f6374 Merge branch 'MDL-74584-400-v1' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-05-06 14:17:37 +08:00
Mihail Geshoski 834c80849c MDL-74584 mod_bigbluebuttonbn: Update behat tests 2022-05-06 13:32:14 +08:00
Mihail Geshoski 674198a799 MDL-74584 mod_bigbluebuttonbn: Update unit tests 2022-05-06 13:32:14 +08:00
Mihail Geshoski 66c32a3687 MDL-74584 course: New optional parameter in get_module_types_names()
Adds new parameter in get_module_types_names() to optionally reset
the $modnames static cache.
2022-05-06 13:32:13 +08:00
Mihail Geshoski 0118227509 MDL-74584 mod_bigbluebuttonbn: Add install script and new upgrade step
Adds a new install script for the BBB module and a new upgrade step.
The BBB module now will be disabled by default for new installations
and also it will be disabled for the existing sites that use the
default BBB server configuration. Admistrators will be required to
confirm the acceptance of the related DPA prior to (re)enabling the
plugin once again.
2022-05-06 12:19:56 +08:00
Mihail Geshoski 2e1478b094 MDL-74584 mod_bigbluebuttonbn: Add DPA info in the general setting page
Adds a note in the BBB general settings page to raise awareness about
the legal obligations related to the data processing agreement with the
service provider which is currently configured.
2022-05-06 12:19:56 +08:00
Mihail Geshoski 6961258bc2 MDL-74584 mod_bigbluebuttonbn: Implement 'pre_enable_plugin_actions'
Implements a function for the 'pre_enable_plugin_actions' callback.
When the default BBB server settings are used while the administrator
attempts to enable the BBB plugin, the function will prevent this
action and trigger a dynamic form requesting the admin to conifrm
their acceptance of the related data processing agreement. The process
of enabling the plugin will continue as usual in cases where the
admin has already confirmed the acceptance of the dpa or a different
BBB server configuration is used other than the default.
2022-05-06 12:19:56 +08:00
Mihail Geshoski b4f6816952 MDL-74584 admin: Add callback executed prior to enabling a module
Adds a callback xxx_pre_enable_plugin_actions in admin/modules.php
which plugins can use to force additional actions before enabling the
plugin. The return value (bool) from the plugin callback method
specifies whether the process of enabling the plugin should continue
after the added actions or not.
2022-05-06 12:19:56 +08:00
Andrew Nicols 16b30d920b MDL-74511 core: Add phpcs default config 2022-05-06 12:01:32 +08:00
Ilya Tregubov 61d140e99f Merge branch 'MDL-41498-400' of https://github.com/ilyatregubov/moodle into MOODLE_400_STABLE 2022-05-06 08:26:59 +06:00
Robert Schrenk cc5eb38cea MDL-41498 course: courses participant page 2022-05-06 08:26:08 +06:00
Víctor Déniz 3b7bba9e75 Merge branch 'MDL-74612-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-05-05 13:25:37 +01:00
Víctor Déniz 2e020b506a Merge branch 'MDL-74128-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-05-05 12:09:59 +01:00
Víctor Déniz 74cdb7c4c8 Merge branch 'MDL-74567-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-05-05 09:39:39 +01:00
Paul Holden ef8d381a2f MDL-74567 core: re-factor flickr libraries to use shared user-agent. 2022-05-05 09:21:22 +01:00
Jun Pataleta 39717b72b1 MDL-74317 blocks: Revert checking of block usage against page format 2022-05-05 10:04:01 +08:00
Jun Pataleta e7ff99758e Merge branch 'MDL-74576-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-05-05 09:55:45 +08:00
Jun Pataleta 26492d4979 Merge branch 'MDL-73981-400' of https://github.com/ilyatregubov/moodle into MOODLE_400_STABLE 2022-05-05 09:49:06 +08:00
Ilya Tregubov 3abbcd9976 Merge branch 'MDL-74602-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-05-05 07:46:55 +06:00
Jun Pataleta 1456551ba6 Merge branch 'MDL-74546-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-05-05 09:41:34 +08:00
Ilya Tregubov c1ebec7cbc MDL-73981 tool_uploadcourse: Validate enrolment role from csv. 2022-05-05 07:39:50 +06:00
Jun Pataleta 812c8b37e5 Merge branch 'MDL-74511-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-05-05 09:37:31 +08:00
Paul Holden 8b2b7f97ee MDL-74599 reportbuilder: use context of current report when present. 2022-05-04 14:30:11 +01:00
Jake Dallimore f2ab11aa5b MDL-73736 core_auth: Fix concurrency issue in login_attempt_failed()
This patch wraps the login_failed_count logic in a resource lock and
forces a user preferences cache reload. Each thread must wait for the
lock and must fetch the current count before incrementing it. This
ensures that login_failed_count is correct across threads and that the
lockout threshold is correctly honoured.

Co-Authored-By: Sujith Haridasan <sujith@moodle.com>
2022-05-04 14:45:00 +06:00
Michael Hawkins 240b402523 MDL-74333 badges: Check profile criteria valid when reviewing 2022-05-04 12:58:02 +08:00
Ilya Tregubov 34c4b3ce0c Merge branch 'MDL-74563-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-05-04 09:26:06 +06:00
Ferran Recio 8b098b4a4e MDL-71623 core_search: fix user document visibility 2022-05-04 03:55:18 +02:00
Amaia Anabitarte 38a40c5e4b MDL-74318 core_user: Description field as hidden on profile 2022-05-04 03:55:18 +02:00
Paul Holden 72580a5413 MDL-74204 mod_assign: escape identity fields in allocate marker form. 2022-05-04 03:55:18 +02:00
Jun Pataleta 6253ab0170 Merge branch 'MDL-73878-40' of https://github.com/aanabit/moodle into MOODLE_400_STABLE 2022-05-04 09:44:28 +08:00
Leon Stringer d25f2eeee6 MDL-74631 mod_lti: Remove </img>
Remove illegal HTML tag.

Added example context to pass CI checks.
2022-05-03 17:29:38 +01:00
Amaia Anabitarte ff89abc311 MDL-73878 core_user: Creating a new category for social fields 2022-05-03 17:46:18 +02:00
Amaia Anabitarte 7878d79359 MDL-73878 core_user: Fixing social fields upgrading issue 2022-05-03 17:43:22 +02:00
Jun Pataleta 93319747b2 Merge branch 'MDL-74543_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-05-03 22:22:45 +08:00
Tim Hunt f46c1b4fa9 MDL-74543 quiz attemptlib: covert string comparison to ===
Where obviously safe.
2022-05-03 13:48:04 +01:00
Tim Hunt a0297df86e MDL-74543 quiz: correctly record time when overdue attempt submitted 2022-05-03 13:48:04 +01:00
Víctor Déniz da9ab8a2f9 Merge branch 'MDL-74611_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-05-03 13:00:59 +01:00
Ilya Tregubov 33829b8b68 Merge branch 'mdl65478-fix-400' of https://github.com/matthewhilton/moodle into MOODLE_400_STABLE 2022-05-03 15:43:59 +06:00
Tim Hunt f5f468f6e1 MDL-74611 course settigns: re-order Common module settings
All the group-related settings should be next to each other.
2022-05-03 10:36:01 +01:00
Jake Dallimore 6b4f55c91b Merge branch 'MDL-74441-400' of https://github.com/cameron1729/moodle into MOODLE_400_STABLE 2022-05-03 16:54:50 +08:00
Cameron Ball 63ed56bc7c MDL-74441 mod_forum: Fix overflow in unified grader 2022-05-03 15:52:26 +08:00
Ilya Tregubov 841214dab2 Merge branch 'MDL-74598-400' of https://github.com/roland04/moodle into MOODLE_400_STABLE 2022-05-03 11:57:07 +06:00
Jason den Dulk 43cbc05a2d MDL-65478 backup, course format: Handle editor elements in course format
Modified course format options reading and writing to be able to handle Editor elements by enabling them to split array values into
multiple values before inserting into database, and combining multiple values into an array when reading from the database.
Modified backup and restore code to use backup_nested_elements, and to interact directly with the database.

Co-authored-by: Jason den Dulk <jasondendulk@catalyst-au.net>
Co-authored-by: Matthew Hilton <matthewhilton@catalyst-au.net>
2022-05-03 14:23:15 +10:00
Ilya Tregubov 973ea46697 Merge branch 'MDL-74450-400' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-05-03 09:52:26 +06:00
Jake Dallimore 98dbb93589 MDL-74602 mod_wiki: disable activity header in wiki print view 2022-05-03 11:09:00 +08:00
Jake Dallimore 5fa19e43b3 MDL-74602 mod_chat: disable activity header in ajax chat interface 2022-05-03 11:09:00 +08:00
Jake Dallimore 0d3a2c9181 MDL-74602 mod_book: disable activity header on book print page 2022-05-03 11:09:00 +08:00
Jake Dallimore 4f7bd72f72 MDL-74602 mod_assign: disable activity header on embedded grader page 2022-05-03 11:09:00 +08:00
Jake Dallimore cc182408aa MDL-74602 theme_boost: fix missing activity header in embedded layout
The activity header, which includes things like dates and completion
information, was moved out of the page $OUTPUT and into a separate
template context variable in 4.0, meaning it was missing from any layout
which didn't actively add it back to the page output. This fixes this
problem for the embedded layout only by adding support for the activity
header in the embedded template.
2022-05-03 11:09:00 +08:00
Jun Pataleta 8b3913605a Merge branch 'MDL-74317-400' of https://github.com/dravek/moodle into MOODLE_400_STABLE 2022-05-02 17:24:23 +08:00
Jun Pataleta 8ff67c91de Merge branch 'MDL-74436-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-05-02 16:30:06 +08:00
Jake Dallimore 4cbd6a0c6a MDL-74576 enrol_lti: allow unsupported scopes in ags_info
Instead of hard blocking launches with extension scopes, just ignore
the unsupported scopes and continue.
2022-05-02 15:39:20 +08:00
Paul Holden 203a55f57a MDL-74128 reportbuilder: Behat helper for navigating to view page. 2022-04-29 17:18:06 +01:00
Paul Holden 5b05a9378c MDL-74612 cohort: use data generator for populating cohort members. 2022-04-29 16:23:32 +01:00
Paul Holden b51257df71 MDL-74605 media_videojs: move player options to data setup.
Fixes the `playbackRates` functionality that was lost in library
upgrade (9ea8fa37).
2022-04-29 12:15:30 +01:00
Ilya Tregubov 81e5d425c4 weekly release 4.0+ 2022-04-29 07:55:31 +06:00
Ilya Tregubov 6362d7b51c Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-04-29 07:55:27 +06:00
Mikel Martín 51d3df8d30 MDL-74598 reportbuilder: Fix action menus alignment to the right 2022-04-28 16:46:00 +02:00
Paul Holden a60a6d41a3 MDL-74567 repository_flickr: replace user-agent value for API calls.
Flickr doesn't like user agent that looks like a bot. Effectively the
same reasoning/fix as b8ee31a0.
2022-04-28 14:45:37 +01:00
Mihail Geshoski d6ba7724ae MDL-74450 admin: Use the context from admin_settingpage as page context
The defined context in admin_settingpage does not always relate to the
system context. One example is the 'frontpagesettings' admin setting
page which specifies front page as it's default context. Therefore, the
page context in admin/settings.php should be consisent with the defined
context in the related admin_settingpage object to make sure that the
expected navigation menus are being displayed and properly highlighted.
Additionally, the code in admin/settings.php related to the breadcrumb
structure specific to 'frontpagesettings' has been removed as it is no
longer relevant.
2022-04-28 13:23:57 +08:00
Jun Pataleta 4f1be71581 Merge branch 'MDL-74478-400' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-04-28 12:54:26 +08:00
Peter Dias 58ddfe84c2 MDL-74478 badges: Check completion_fail when awarding badge
Bring the award_criteria_activity checks in line with the observer checks
2022-04-28 12:16:19 +08:00
Jun Pataleta dd156a4160 Merge branch 'MDL-74461-400' of https://github.com/HuongNV13/moodle into MOODLE_400_STABLE 2022-04-28 11:39:59 +08:00
Huong Nguyen 3bc8fa20bf MDL-74461 Navigation: Add section anchor to activity breadcrumb 2022-04-28 10:05:17 +07:00
Ilya Tregubov 954ae33aa9 Merge branch 'MOODLE_400-MDL-74427-v4' of https://github.com/golenkovm/moodle into MOODLE_400_STABLE 2022-04-28 08:10:29 +06:00
Jun Pataleta 24dbcc0008 Merge branch 'MDL-74537-400-enfix' of https://github.com/vmdef/moodle into MOODLE_400_STABLE 2022-04-27 15:47:30 +06:00
Ilya Tregubov ebb96c2850 Merge branch 'MDL-74510_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-04-27 15:47:30 +06:00
Paul Holden 870c5ffbde MDL-74479 reportbuilder: account for custom field context in output. 2022-04-27 15:47:29 +06:00
Eloy Lafuente (stronk7) 049e27a805 MDL-74320 lesson: Remove tested elsewhere parts of the scenario
The scenario has not only grades related completion conditions
but also timing conditions or reach the end conditions that
shouldn't be tested by a grades feature.

More yet, those completion conditions are already tested by
other feature files, namely:
- reach the end: completion_condition_end_reached.feature
- visit and timing: lesson_activity_completion.feature

So we have removed all those parts that are being tested
by other features.

Specially the visit and timing ones, because they lead to
random failures in slow environments and they have been
fixed in the lesson_activity_completion.feature scenarios
by MDL-72698.
2022-04-27 15:47:29 +06:00
Laurent David 6c7fa91d59 MDL-74514 mod_bigbluebuttonbn: BBB server is polled too often
* Fix issue with the roomupdater that should not force the updatecache flag
for get_meeting_info API
* Fix issue when meeting is not started (and does not exist) and bigbluebutton_proxy::get_meeting_info
throws an exception, skipping the cache and then polling the server every second.
2022-04-27 15:47:29 +06:00
Claude Vervoort 7c84b92be3 MDL-74481 mod_lti: fix role lookup for LTI 1.3 2022-04-27 15:47:29 +06:00
Mikhail Golenkov bb36c3a1bb MDL-74427 question: Re-use get_real_question_ids_in_category() 2022-04-27 12:35:08 +10:00
Mikhail Golenkov 990bfee024 MDL-74427 question: Implement get_real_question_ids_in_category() 2022-04-27 12:34:55 +10:00
David Matamoros 17584f9c92 MDL-74317 blocks: Blocks can be added to profile pages
- Fixed method user_can_addto to take into account that
blocks can also be added to user profile pages
2022-04-26 14:34:45 +02:00
David Matamoros f551072f9e MDL-74317 output: Remove capability checks in edit mode WS
- Removed validation on the change edit mode WS. Permission should
be handled where the edit button is rendered in order to show or not
the button.
2022-04-26 14:33:34 +02:00
Helen Foster 3447ab640c MDL-74537 lang: Import fixed English strings (en_fix) 2022-04-26 11:24:27 +01:00
Paul Holden 3dbad11471 MDL-74563 reportbuilder: cast operator parameter in number filter.
Add missing form labels, too.
2022-04-25 21:44:48 +01:00
Paul Holden 43b4b87fbf MDL-74436 calendar: validate course/category field during import. 2022-04-25 18:02:00 +01:00
Paul Holden 7d33385a1d MDL-74477 reportbuilder: sortable custom user profile field columns. 2022-04-25 13:40:12 +06:00
AMOS bot 657617ac21 Automatically generated installer lang files 2022-04-23 00:07:39 +00:00
Eloy Lafuente (stronk7) 205e4152cc MDL-74510 upgrade: add the 4.0.0 separation line to all upgrade scripts 2022-04-22 18:45:16 +02:00
Eloy Lafuente (stronk7) e36fb751e5 weekly release 4.0+ 2022-04-22 18:03:47 +02:00
Jake Dallimore a0c1acd7fd MDL-74546 enrol_lti: add missing d-flex to table to fix safari layout 2022-04-22 10:19:08 +08:00
Ilya Tregubov 2184ea5b64 Merge branch 'MDL-74394_400' of https://github.com/aolley/moodle into MOODLE_400_STABLE 2022-04-22 08:01:09 +06:00
Víctor Déniz c81b3dc384 Merge branch 'MDL-74312-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-04-21 16:39:51 +01:00
Adam Olley ca6a4b1953 MDL-74394 mnet: Better check for openssl_get_publickey() failure
In PHP8, this func now returns an object of type OpenSSLAsymmetricKey, not a
resource.

Reference:
https://www.php.net/manual/en/function.openssl-pkey-get-public.php
2022-04-21 22:08:20 +09:30
Jake Dallimore 20cefd70e2 MDL-74312 enrol_lti: fix copytoclipboard trigger element
This should be a button given it's an action, and making it a button
means it can be activated using either the space or enter keys, instead
of just enter.
2022-04-20 09:49:35 +08:00
Sara Arjona bc87d55a1f Merge branch 'MDL-74512_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-04-19 12:55:29 +02:00
Andrew Nicols 51c376cfca MDL-74511 core: Add phpcs config generator 2022-04-19 11:15:27 +08:00
Eloy Lafuente (stronk7) e0034b0566 MDL-74512 behat: Skip tests requiring lang install/upgrade
By adding the step:

Given remote langimport tests are enabled

We make the execution of scenarios requiring to install /
upgrade lang packs optional, based in the existence of the constant:

TOOL_LANGIMPORT_REMOTE_TESTS

That way, when we are skipping language upgrades with the CFG var:

$CFG->skiplangupgrade = true

We can decide not not execute those tests.

With other words, putting something like this in the config.php
file we will be controlling when to execute or no the behat tests:

    // Disable lang updates on upgrade.
    $CFG->skiplangupgrade = true;
    if (empty($CFG->skiplangupgrade)) {
        // Define it only if we aren't skipping lang upgrades.
        define('TOOL_LANGIMPORT_REMOTE_TESTS', true);
    }
2022-04-17 20:35:02 +02:00
1534 changed files with 11616 additions and 6475 deletions
+5 -4
View File
@@ -13,7 +13,7 @@ env:
jobs:
Grunt:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- name: Checking out code
@@ -54,11 +54,11 @@ jobs:
fail-fast: false
matrix:
include:
- os: ubuntu-18.04
- os: ubuntu-20.04
php: 7.3
extensions:
db: mysqli
- os: ubuntu-18.04
- os: ubuntu-20.04
php: 8.0
db: pgsql
extensions: xmlrpc-beta
@@ -111,4 +111,5 @@ jobs:
- name: Running PHPUnit tests
env:
dbtype: ${{ matrix.db }}
run: vendor/bin/phpunit -v
phpunit_options: ${{ secrets.phpunit_options }}
run: vendor/bin/phpunit $phpunit_options
+1
View File
@@ -54,3 +54,4 @@ moodle-plugin-ci.phar
/admin/tool/componentlibrary/docs
/admin/tool/componentlibrary/hugo/site/data/my-index.json
.hugo_build.lock
.phpcs.xml
+39
View File
@@ -21,6 +21,43 @@
*/
module.exports = grunt => {
/**
* Generate the PHPCS configuration.
*
* @param {Object} thirdPartyPaths
*/
const phpcsIgnore = (thirdPartyPaths) => {
const {toXML} = require('jstoxml');
const config = {
_name: 'ruleset',
_attrs: {
name: "MoodleCore",
},
_content: [
{
rule: {
_attrs: {
ref: './.phpcs.xml.dist',
},
},
},
],
};
thirdPartyPaths.forEach(library => {
config._content.push({
'exclude-pattern': library,
});
});
grunt.file.write('.phpcs.xml', toXML(config, {
header: true,
indent: ' ',
}) + "\n");
};
/**
* Generate ignore files (utilising thirdpartylibs.xml data)
*/
@@ -53,6 +90,8 @@ module.exports = grunt => {
'admin/tool/componentlibrary/hugo/dist/css/docs.css',
].concat(thirdPartyPaths);
grunt.file.write('.stylelintignore', stylelintIgnores.join('\n') + '\n');
phpcsIgnore(thirdPartyPaths);
};
grunt.registerTask('ignorefiles', 'Generate ignore files for linters', handler);
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="MoodleCore">
<rule ref="moodle"/>
</ruleset>
+2 -2
View File
@@ -36,7 +36,7 @@ jobs:
- php: 7.3
env: DB=none TASK=CITEST
- php: 7.3
env: DB=none TASK=GRUNT NVM_VERSION='lts/carbon'
env: DB=none TASK=GRUNT NVM_VERSION='lts/gallium'
- if: env(MOODLE_DATABASE) = "pgsql" OR env(MOODLE_DATABASE) = "all" OR env(MOODLE_DATABASE) IS NOT present
php: 7.3
@@ -52,7 +52,7 @@ jobs:
env: DB=none TASK=CITEST
- if: env(MOODLE_PHP) = "all"
php: 8.0
env: DB=none TASK=GRUNT NVM_VERSION='lts/carbon'
env: DB=none TASK=GRUNT NVM_VERSION='lts/gallium'
- 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
+2 -2
View File
@@ -69,11 +69,11 @@ if ($options['help'] or (!$options['list'] and !$options['execute'])) {
die;
}
if ($options['showdebugging']) {
if ($options['showdebugging'] || !empty($CFG->showcrondebugging)) {
set_debugging(DEBUG_DEVELOPER, true);
}
if ($options['showsql']) {
if ($options['showsql'] || !empty($CFG->showcronsql)) {
$DB->set_debug(true);
}
if ($options['list']) {
+15 -4
View File
@@ -38,11 +38,22 @@
}
if (!empty($show) and confirm_sesskey()) {
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
$class::enable_plugin($show, true);
$canenablemodule = true;
$modulename = $show;
admin_get_root(true, false); // settings not required - only pages
redirect(new moodle_url('/admin/modules.php'));
// 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'));
}
}
echo $OUTPUT->header();
+7 -7
View File
@@ -14,19 +14,19 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_role;
use core_role_preset;
/**
* Role XML presets test case.
*
* @package core_role
* @category phpunit
* @category test
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class core_role_preset_testcase extends advanced_testcase {
class preset_test extends \advanced_testcase {
public function test_xml() {
global $DB;
@@ -61,7 +61,7 @@ class core_role_preset_testcase extends advanced_testcase {
FROM {role_capabilities}
WHERE contextid = :syscontext AND roleid = :roleid
ORDER BY capability ASC",
array('syscontext'=>context_system::instance()->id, 'roleid'=>$role->id));
array('syscontext' => \context_system::instance()->id, 'roleid' => $role->id));
foreach ($capabilities as $cap) {
$this->assertEquals($cap->permission, $info['permissions'][$cap->capability]);
+10 -9
View File
@@ -33,8 +33,16 @@ if (!($settingspage->check_access())) {
die;
}
$hassiteconfig = has_capability('moodle/site:config', $PAGE->context);
if ($hassiteconfig) {
// If the context in the admin_settingpage object is explicitly defined and it is not system, reset the current
// page context and use that one instead. This ensures that the proper navigation is displayed and highlighted.
if ($settingspage->context && !$settingspage->context instanceof \context_system) {
$PAGE->set_context($settingspage->context);
}
$hassiteconfig = has_capability('moodle/site:config', context_system::instance());
// Display the admin search input element in the page header if the user has the capability to change the site
// configuration and the current page context is system.
if ($hassiteconfig && $PAGE->context instanceof \context_system) {
$PAGE->add_header_action($OUTPUT->render_from_template('core_admin/header_search_input', [
'action' => new moodle_url('/admin/search.php'),
]));
@@ -125,13 +133,6 @@ if (empty($SITE->fullname)) {
$PAGE->set_title("$SITE->shortname: " . implode(": ",$visiblepathtosection));
$PAGE->set_heading($SITE->fullname);
if ($section === 'frontpagesettings') {
$frontpagenode = $PAGE->settingsnav->find('frontpage', navigation_node::TYPE_SETTING);
$frontpagenode->make_active();
$PAGE->navbar->add(get_string('frontpage', 'admin'),
new moodle_url('/admin/category.php', ['category' => 'frontpage']));
$PAGE->navbar->add(get_string('frontpagesettings', 'admin'), $PAGE->url);
}
echo $OUTPUT->header();
if ($errormsg !== '') {
+9
View File
@@ -88,6 +88,15 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$downloadcontentsitedefault->add_dependent_on('downloadcoursecontentallowed');
$temp->add($downloadcontentsitedefault);
$temp->add(
new admin_setting_configtext(
'moodlecourse/participantsperpage',
new lang_string('participants:perpage', 'course'),
new lang_string('participants:perpage_help', 'course'),
20
)
);
// Course format.
$temp->add(new admin_setting_heading('courseformathdr', new lang_string('type_format', 'plugin'), ''));
+4 -1
View File
@@ -527,7 +527,10 @@ if ($hassiteconfig && !empty($CFG->enableplagiarism)) {
$plugin->load_settings($ADMIN, 'plagiarism', $hassiteconfig);
}
}
$ADMIN->add('reports', new admin_externalpage('comments', new lang_string('comments'), $CFG->wwwroot.'/comment/', 'moodle/site:viewreports'));
// Comments report, note this page is really just a means to delete comments so check that.
$ADMIN->add('reports', new admin_externalpage('comments', new lang_string('comments'), $CFG->wwwroot . '/comment/index.php',
'moodle/comment:delete'));
// Course reports settings
if ($hassiteconfig) {
+2 -1
View File
@@ -240,7 +240,8 @@ if ($hassiteconfig
if ($field->param2 > 255 || $field->datatype != 'text') {
continue;
}
$fields['profile_field_' . $field->shortname] = $field->name . ' *';
$fields['profile_field_' . $field->shortname] = format_string($field->name, true,
['context' => context_system::instance()]) . ' *';
}
return $fields;
+4 -2
View File
@@ -18,6 +18,10 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
And the following "cohorts" exist:
| name | idnumber |
| Cohort 1 | CH1 |
And the following "cohort members" exist:
| user | cohort |
| user2 | CH1 |
| user3 | CH1 |
And the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
@@ -27,8 +31,6 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
| user2 | C1 | student |
| user3 | C1 | student |
And I log in as "admin"
And I add "User Two (two@example.com)" user to "CH1" cohort members
And I add "User Three (three@example.com)" user to "CH1" cohort members
And I navigate to "Users > Accounts > Browse list of users" in site administration
Scenario: Filter user accounts by role and cohort
@@ -20,9 +20,10 @@ Feature: Forms manipulation
Given the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And I log in as "admin"
And I am on "Course 1" course homepage with editing mode on
And I add a "Quiz" to section "1"
And the following "activities" exist:
| activity | course | section | name |
| quiz | C1 | 1 | Quiz 1 |
And I am on the "Quiz 1" "quiz activity editing" page logged in as admin
When I expand all fieldsets
Then I should see "Close the quiz"
And I should see "Group mode"
@@ -248,7 +248,7 @@ $string['printable:toolname'] = 'Summary report';
$string['printable:toolshortname'] = 'Summary report';
$string['printable:downloadpdf'] = 'Download PDF';
$string['printable:printreport'] = 'Printable report';
$string['error:nocoursespecified'] = 'This summary report requires a valid course id. Please access the accessibility toolkit from within a course, via the actions menu, which will then supply this required course id.';
$string['error:nocoursespecified'] = 'The summary report requires a valid course ID. Please access the accessibility toolkit from within a course.';
$string['pdf:filename'] = 'Brickfield_Summaryreport_CourseID-{$a}';
// Advanced page.
+3
View File
@@ -44,5 +44,8 @@ function xmldb_tool_cohortroles_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -41,5 +41,8 @@ function xmldb_tool_customlang_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+13 -1
View File
@@ -786,6 +786,18 @@ class api {
return true;
}
/**
* Check if user has permission to create data download request for themselves
*
* @param int|null $userid
* @return bool
*/
public static function can_create_data_download_request_for_self(int $userid = null): bool {
global $USER;
$userid = $userid ?: $USER->id;
return has_capability('tool/dataprivacy:downloadownrequest', \context_user::instance($userid), $userid);
}
/**
* Check if user has permisson to create data deletion request for themselves.
*
@@ -847,7 +859,7 @@ class api {
$usercontext = \context_user::instance($userid);
// If it's your own and you have the right capability, you can download it.
if ($userid == $downloaderid && has_capability('tool/dataprivacy:downloadownrequest', $usercontext, $downloaderid)) {
if ($userid == $downloaderid && self::can_create_data_download_request_for_self($downloaderid)) {
return true;
}
// If you can download anyone's in that context, you can download it.
@@ -96,6 +96,11 @@ if ($data = $mform->get_data()) {
throw new moodle_exception('nopermissions', 'error', '',
get_string('errorcannotrequestdeleteforother', 'tool_dataprivacy'));
}
} else if ($data->type == \tool_dataprivacy\api::DATAREQUEST_TYPE_EXPORT) {
if ($data->userid == $USER->id && !\tool_dataprivacy\api::can_create_data_download_request_for_self()) {
throw new moodle_exception('nopermissions', 'error', '',
get_string('errorcannotrequestexportforself', 'tool_dataprivacy'));
}
}
\tool_dataprivacy\api::create_data_request($data->userid, $data->type, $data->comments);
@@ -97,10 +97,11 @@ class tool_dataprivacy_data_request_form extends \core\form\persistent {
$mform->setType('userid', PARAM_INT);
// Subject access request type.
$options = [
api::DATAREQUEST_TYPE_EXPORT => get_string('requesttypeexport', 'tool_dataprivacy'),
api::DATAREQUEST_TYPE_DELETE => get_string('requesttypedelete', 'tool_dataprivacy')
];
$options = [];
if ($this->manage || api::can_create_data_download_request_for_self()) {
$options[api::DATAREQUEST_TYPE_EXPORT] = get_string('requesttypeexport', 'tool_dataprivacy');
}
$options[api::DATAREQUEST_TYPE_DELETE] = get_string('requesttypedelete', 'tool_dataprivacy');
$mform->addElement('select', 'type', get_string('requesttype', 'tool_dataprivacy'), $options);
$mform->addHelpButton('type', 'requesttype', 'tool_dataprivacy');
@@ -174,7 +175,7 @@ class tool_dataprivacy_data_request_form extends \core\form\persistent {
$errors['type'] = get_string('errorrequestalreadyexists', 'tool_dataprivacy');
}
// Check if current user can create data deletion request.
// Check if current user can create data requests.
if ($data->type == api::DATAREQUEST_TYPE_DELETE) {
if ($userid == $USER->id) {
if (!api::can_create_data_deletion_request_for_self()) {
@@ -184,6 +185,10 @@ class tool_dataprivacy_data_request_form extends \core\form\persistent {
&& !api::can_create_data_deletion_request_for_children($userid)) {
$errors['type'] = get_string('errorcannotrequestdeleteforother', 'tool_dataprivacy');
}
} else if ($data->type == api::DATAREQUEST_TYPE_EXPORT) {
if ($userid == $USER->id && !api::can_create_data_download_request_for_self()) {
$errors['type'] = get_string('errorcannotrequestexportforself', 'tool_dataprivacy');
}
}
return $errors;
+3
View File
@@ -78,5 +78,8 @@ function xmldb_tool_dataprivacy_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2020061501, 'tool', 'dataprivacy');
}
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -135,6 +135,7 @@ $string['effectiveretentionperioduser'] = '{$a} (since the last time the user ac
$string['emailsalutation'] = 'Dear {$a},';
$string['errorcannotrequestdeleteforself'] = 'You don\'t have permission to create deletion request for yourself.';
$string['errorcannotrequestdeleteforother'] = 'You don\'t have permission to create deletion request for this user.';
$string['errorcannotrequestexportforself'] = 'You don\'t have permission to create export request for yourself.';
$string['errorcontactdpodisabled'] = 'The option to contact the privacy officer is disabled.';
$string['errorinvalidrequestcomments'] = 'The comments field may contain plain text only.';
$string['errorinvalidrequestcreationmethod'] = 'Invalid request creation method!';
+3 -2
View File
@@ -68,8 +68,9 @@ function tool_dataprivacy_myprofile_navigation(tree $tree, $user, $iscurrentuser
// Check if the user has an ongoing data export request.
$hasexportrequest = \tool_dataprivacy\api::has_ongoing_request($user->id, \tool_dataprivacy\api::DATAREQUEST_TYPE_EXPORT);
// Show data export link only if the user doesn't have an ongoing data export request.
if (!$hasexportrequest) {
// Show data export link only if the user doesn't have an ongoing data export request and has permission
// to download own data.
if (!$hasexportrequest && \tool_dataprivacy\api::can_create_data_download_request_for_self()) {
$exportparams = ['type' => \tool_dataprivacy\api::DATAREQUEST_TYPE_EXPORT];
$exporturl = new moodle_url('/admin/tool/dataprivacy/createdatarequest.php', $exportparams);
$exportnode = new core_user\output\myprofile\node('privacyandpolicies', 'requestdataexport',
+22
View File
@@ -26,6 +26,7 @@ use tool_dataprivacy\task\process_data_request_task;
* API tests.
*
* @package tool_dataprivacy
* @covers \tool_dataprivacy\api
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
@@ -2174,6 +2175,27 @@ class api_test extends \advanced_testcase {
return $request;
}
/**
* Test whether user can create data download request for themselves
*/
public function test_can_create_data_download_request_for_self(): void {
global $DB;
$this->resetAfterTest();
$user = $this->getDataGenerator()->create_user();
$this->setUser($user);
// The default user role allows for the creation of download data requests.
$this->assertTrue(api::can_create_data_download_request_for_self());
// Prohibit that capability.
$userrole = $DB->get_field('role', 'id', ['shortname' => 'user'], MUST_EXIST);
assign_capability('tool/dataprivacy:downloadownrequest', CAP_PROHIBIT, $userrole, \context_user::instance($user->id));
$this->assertFalse(api::can_create_data_download_request_for_self());
}
/**
* Test user cannot create data deletion request for themselves if they don't have
* "tool/dataprivacy:requestdelete" capability.
@@ -14,17 +14,7 @@
// 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 the data_registry class.
*
* @package tool_dataprivacy
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
use \tool_dataprivacy\data_registry;
namespace tool_dataprivacy;
/**
* Unit tests for the data_registry class.
@@ -33,7 +23,7 @@ use \tool_dataprivacy\data_registry;
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_dataregistry_testcase extends advanced_testcase {
class data_registry_test extends \advanced_testcase {
/**
* Ensure that the get_effective_context_value only errors if provided an inappropriate element.
@@ -41,7 +31,7 @@ class tool_dataprivacy_dataregistry_testcase extends advanced_testcase {
* This test is not great because we only test a limited set of values. This is a fault of the underlying API.
*/
public function test_get_effective_context_value_invalid_element() {
$this->expectException(coding_exception::class);
$this->expectException(\coding_exception::class);
data_registry::get_effective_context_value(\context_system::instance(), 'invalid');
}
@@ -51,7 +41,7 @@ class tool_dataprivacy_dataregistry_testcase extends advanced_testcase {
* This test is not great because we only test a limited set of values. This is a fault of the underlying API.
*/
public function test_get_effective_contextlevel_value_invalid_element() {
$this->expectException(coding_exception::class);
$this->expectException(\coding_exception::class);
data_registry::get_effective_contextlevel_value(\context_system::instance(), 'invalid');
}
}
@@ -14,19 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for the data_request persistent.
*
* @package tool_dataprivacy
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
use data_privacy_testcase;
defined('MOODLE_INTERNAL') || die();
require_once('data_privacy_testcase.php');
use tool_dataprivacy\api;
/**
* Tests for the data_request persistent.
*
@@ -34,7 +28,7 @@ use tool_dataprivacy\api;
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_data_request_testcase extends data_privacy_testcase {
class data_request_test extends data_privacy_testcase {
/**
* Data provider for testing is_resettable, and is_active.
@@ -14,25 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Expired contexts tests.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use tool_dataprivacy\api;
use tool_dataprivacy\data_registry;
use tool_dataprivacy\expired_context;
use tool_dataprivacy\purpose;
use tool_dataprivacy\purpose_override;
use tool_dataprivacy\category;
use tool_dataprivacy\contextlevel;
use tool_dataprivacy\expired_contexts_manager;
defined('MOODLE_INTERNAL') || die();
global $CFG;
namespace tool_dataprivacy;
/**
* Expired contexts tests.
@@ -41,7 +23,7 @@ global $CFG;
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_expired_contexts_testcase extends advanced_testcase {
class expired_contexts_test extends \advanced_testcase {
/**
* Setup the basics with the specified retention period.
@@ -14,21 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Expired data requests tests.
*
* @package tool_dataprivacy
* @copyright 2018 Michael Hawkins
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
use tool_dataprivacy\api;
use tool_dataprivacy\category;
use tool_dataprivacy\data_request;
use tool_dataprivacy\purpose;
use data_privacy_testcase;
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once('data_privacy_testcase.php');
@@ -39,7 +29,7 @@ require_once('data_privacy_testcase.php');
* @copyright 2018 Michael Hawkins
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_expired_data_requests_testcase extends data_privacy_testcase {
class expired_data_requests_test extends data_privacy_testcase {
/**
* Test tearDown.
@@ -59,7 +49,7 @@ class tool_dataprivacy_expired_data_requests_testcase extends data_privacy_testc
// Set up test users.
$this->setAdminUser();
$studentuser = $this->getDataGenerator()->create_user();
$studentusercontext = context_user::instance($studentuser->id);
$studentusercontext = \context_user::instance($studentuser->id);
$dpouser = $this->getDataGenerator()->create_user();
$this->assign_site_dpo($dpouser);
@@ -14,13 +14,7 @@
// 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 the filtered_userlist.
*
* @package tool_dataprivacy
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
/**
* Unit tests for the filtered_userlist.
@@ -29,7 +23,7 @@
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_filtered_userlist_testcase extends advanced_testcase {
class filtered_userlist_test extends \advanced_testcase {
/**
* Test the apply_expired_contexts_filters function with arange of options.
*
@@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_dataprivacy;
use data_privacy_testcase;
defined('MOODLE_INTERNAL') || die();
require_once('data_privacy_testcase.php');
/**
* Tests for the manager observer.
*
@@ -21,18 +28,7 @@
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once('data_privacy_testcase.php');
/**
* API tests.
*
* @package tool_dataprivacy
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_manager_observer_testcase extends data_privacy_testcase {
class manager_observer_test extends data_privacy_testcase {
/**
* Ensure that when users are configured as DPO, they are sent an message upon failure.
*/
@@ -14,16 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Metadata registry tests.
*
* @package tool_dataprivacy
* @copyright 2018 Adrian Greeve <adriangreeve.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
namespace tool_dataprivacy;
/**
* Metadata registry tests.
@@ -32,7 +23,7 @@ global $CFG;
* @copyright 2018 Adrian Greeve <adriangreeve.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_metadata_registry_testcase extends advanced_testcase {
class metadata_registry_test extends \advanced_testcase {
/**
* Fetch the meta data and return it in a form that we can easily unit test.
@@ -14,18 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for the event observer.
*
* @package tool_dataprivacy
* @copyright 2018 Mihail Geshoski <mihail@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
defined('MOODLE_INTERNAL') || die();
use \tool_dataprivacy\event\user_deleted_observer;
use \tool_dataprivacy\api;
use tool_dataprivacy\event\user_deleted_observer;
/**
* Event observer test.
@@ -34,7 +25,7 @@ use \tool_dataprivacy\api;
* @copyright 2018 Mihail Geshoski <mihail@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_dataprivacy_user_deleted_observer_testcase extends advanced_testcase {
class user_deleted_observer_test extends \advanced_testcase {
/**
* Ensure that a delete data request is created upon user deletion.
+6
View File
@@ -0,0 +1,6 @@
This file describes API changes in /admin/tool/dataprivacy/*
Information provided here is intended especially for developers.
=== 4.0.2 ===
* New `api::can_create_data_download_request_for_self` method for determining whether user has permission to create their
own data download requests
@@ -14,7 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || die();
namespace tool_generator;
use tool_generator_course_backend;
/**
* Automated unit testing. This tests the 'make large course' backend,
@@ -24,7 +26,7 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2013 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_generator_maketestcourse_testcase extends advanced_testcase {
class maketestcourse_test extends \advanced_testcase {
/**
* Creates a small test course and checks all the components have been put in place.
*/
@@ -52,7 +54,7 @@ class tool_generator_maketestcourse_testcase extends advanced_testcase {
// Get course details.
$course = get_course($courseid);
$context = context_course::instance($courseid);
$context = \context_course::instance($courseid);
$modinfo = get_fast_modinfo($course);
// Check course names.
@@ -88,7 +90,7 @@ class tool_generator_maketestcourse_testcase extends advanced_testcase {
// Check it contains 2 files (the default txt and a dat file).
$fs = get_file_storage();
$resourcecontext = context_module::instance($resource->id);
$resourcecontext = \context_module::instance($resource->id);
$files = $fs->get_area_files($resourcecontext->id, 'mod_resource', 'content', false, 'filename', false);
$files = array_values($files);
$this->assertEquals(2, count($files));
@@ -106,7 +108,7 @@ class tool_generator_maketestcourse_testcase extends advanced_testcase {
$this->assertTrue($ok);
// Check it contains 2 files.
$resourcecontext = context_module::instance($resource->id);
$resourcecontext = \context_module::instance($resource->id);
$files = $fs->get_area_files($resourcecontext->id, 'mod_resource', 'content', false, 'filename', false);
$files = array_values($files);
$this->assertEquals(2, count($files));
@@ -155,7 +157,7 @@ class tool_generator_maketestcourse_testcase extends advanced_testcase {
$lastusernumber = 0;
$discussionstarters = array();
foreach ($discussions as $discussion) {
$usernumber = core_user::get_user($discussion->userid, 'id, idnumber')->idnumber;
$usernumber = \core_user::get_user($discussion->userid, 'id, idnumber')->idnumber;
// Checks that the users are odd numbers.
$this->assertEquals(1, $usernumber % 2);
@@ -190,7 +192,7 @@ class tool_generator_maketestcourse_testcase extends advanced_testcase {
$fs = get_file_storage();
$resources = $modinfo->get_instances_of('resource');
foreach ($resources as $resource) {
$resourcecontext = context_module::instance($resource->id);
$resourcecontext = \context_module::instance($resource->id);
$files = $fs->get_area_files($resourcecontext->id, 'mod_resource', 'content', false, 'filename', false);
foreach ($files as $file) {
if ($file->get_mimetype() == 'application/octet-stream') {
@@ -210,7 +212,7 @@ class tool_generator_maketestcourse_testcase extends advanced_testcase {
$fs = get_file_storage();
$resources = $modinfo->get_instances_of('resource');
foreach ($resources as $resource) {
$resourcecontext = context_module::instance($resource->id);
$resourcecontext = \context_module::instance($resource->id);
$files = $fs->get_area_files($resourcecontext->id, 'mod_resource', 'content', false, 'filename', false);
foreach ($files as $file) {
if ($file->get_mimetype() == 'application/octet-stream') {
@@ -22,27 +22,12 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_generator;
use tool_generator_site_backend;
defined('MOODLE_INTERNAL') || die();
/**
* Silly class to access site_backend internal methods.
*
* @package tool_generator
* @copyright 2013 David Monllaó
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class testable_tool_generator_site_backend extends tool_generator_site_backend {
/**
* Public accessor.
*
* @return int
*/
public static function get_last_testcourse_id() {
return parent::get_last_testcourse_id();
}
}
/**
* Unit test for the site generator
*
@@ -50,7 +35,7 @@ class testable_tool_generator_site_backend extends tool_generator_site_backend {
* @copyright 2013 David Monllaó
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_generator_maketestsite_testcase extends advanced_testcase {
class maketestsite_test extends \advanced_testcase {
/**
* Checks that site courses shortnames are properly generated.
@@ -102,5 +87,22 @@ class tool_generator_maketestsite_testcase extends advanced_testcase {
$lastshortname = testable_tool_generator_site_backend::get_last_testcourse_id();
$this->assertEquals(20, $lastshortname);
}
}
/**
* Silly class to access site_backend internal methods.
*
* @copyright 2013 David Monllaó
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class testable_tool_generator_site_backend extends tool_generator_site_backend {
/**
* Public accessor.
*
* @return int
*/
public static function get_last_testcourse_id() {
return parent::get_last_testcourse_id();
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

After

Width:  |  Height:  |  Size: 329 B

+1 -1
View File
@@ -1,3 +1,3 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
]><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid meet" overflow="visible"><path d="M16 9v6c0 .5-.5 1-1 1H1c-.5 0-1-.5-1-1V9c0-.5.5-1 1-1h1c.5 0 1 .5 1 1v4h10V9c0-.5.5-1 1-1h1c.5 0 1 .5 1 1zm-3.6-3.9l-.7-.7c-.4-.4-1-.4-1.4 0l-.8.8V1c0-.5-.4-1-1-1h-1c-.5 0-1 .5-1 1v4.2l-.8-.8c-.4-.4-1-.4-1.4 0l-.7.7c-.4.4-.4 1 0 1.4l3.7 3.7c.2.2.5.3.7.3.3 0 .5-.1.7-.3l3.7-3.7c.4-.3.4-1 0-1.4z" fill="#999"/></svg>
]><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid meet" overflow="visible"><path d="M16 9v6c0 .5-.5 1-1 1H1c-.5 0-1-.5-1-1V9c0-.5.5-1 1-1h1c.5 0 1 .5 1 1v4h10V9c0-.5.5-1 1-1h1c.5 0 1 .5 1 1zm-3.6-3.9l-.7-.7c-.4-.4-1-.4-1.4 0l-.8.8V1c0-.5-.4-1-1-1h-1c-.5 0-1 .5-1 1v4.2l-.8-.8c-.4-.4-1-.4-1.4 0l-.7.7c-.4.4-.4 1 0 1.4l3.7 3.7c.2.2.5.3.7.3.3 0 .5-.1.7-.3l3.7-3.7c.4-.3.4-1 0-1.4z" fill="#888"/></svg>

Before

Width:  |  Height:  |  Size: 618 B

After

Width:  |  Height:  |  Size: 618 B

@@ -15,14 +15,10 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Provides the unit tests class and some helper classes
*
* @package tool_installaddon
* @category test
* @copyright 2013 David Mudrak <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_installaddon;
use testable_tool_installaddon_installer;
use tool_installaddon_installer;
defined('MOODLE_INTERNAL') || die();
@@ -32,10 +28,12 @@ require_once(__DIR__.'/fixtures/testable_installer.php');
/**
* Unit tests for the {@link tool_installaddon_installer} class
*
* @package tool_installaddon
* @category test
* @copyright 2013 David Mudrak <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_installaddon_installer_testcase extends advanced_testcase {
class installer_test extends \advanced_testcase {
public function test_get_addons_repository_url() {
$installer = testable_tool_installaddon_installer::instance();
+5 -3
View File
@@ -22,15 +22,17 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
namespace tool_langimport;
/**
* Tests for \tool_langimport\locale class.
*
* @package tool_langimport
* @category test
* @copyright 2018 Université Rennes 2 {@link https://www.univ-rennes2.fr}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class locale_testcase extends \advanced_testcase {
class locale_test extends \advanced_testcase {
/**
* Test that \tool_langimport\locale::check_locale_availability() works as expected.
*
@@ -65,7 +67,7 @@ class locale_testcase extends \advanced_testcase {
// Test an invalid parameter.
$locale = new \tool_langimport\locale();
$this->expectException(coding_exception::class);
$this->expectException(\coding_exception::class);
$locale->check_locale_availability('');
}
}
+3
View File
@@ -45,5 +45,8 @@ function xmldb_tool_log_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -46,5 +46,8 @@ function xmldb_logstore_database_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -46,5 +46,8 @@ function xmldb_logstore_standard_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 510 B

+1 -1
View File
@@ -9,7 +9,7 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">
<defs>
</defs>
<path style="fill:#999999;" d="M8.5,9.5C8.8,10,9,10.6,9,11.2c0,0.6-0.3,1.1-0.7,1.6l-2.5,2.5C5.2,15.8,4.7,16,4,16
<path style="fill:#888;" d="M8.5,9.5C8.8,10,9,10.6,9,11.2c0,0.6-0.3,1.1-0.7,1.6l-2.5,2.5C5.2,15.8,4.7,16,4,16
s-1.3-0.2-1.7-0.7l-1.5-1.5C0.2,13.3,0,12.7,0,12c0-0.7,0.2-1.3,0.7-1.7l2.5-2.5C3.7,7.3,4.3,7,5,7c0.5,0,1,0.2,1.5,0.5l-1,1
C5.3,8.5,5.2,8.4,5,8.4c-0.3,0-0.5,0.1-0.8,0.3l-2.5,2.5c-0.2,0.2-0.3,0.5-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l1.5,1.5
c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l2.5-2.5c0.2-0.2,0.3-0.5,0.3-0.8c0-0.2,0-0.3-0.1-0.4L8.5,9.5z M5,10L10,5

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

+2 -1
View File
@@ -27,7 +27,8 @@ require_once($CFG->libdir . '/externallib.php');
$userid = required_param('userid', PARAM_INT); // The user id the key belongs to (for double-checking).
$key = required_param('key', PARAM_ALPHANUMEXT); // The key generated by the tool_mobile_external::get_autologin_key() external function.
$urltogo = optional_param('urltogo', $CFG->wwwroot, PARAM_URL); // URL to redirect.
$urltogo = optional_param('urltogo', $CFG->wwwroot, PARAM_LOCALURL); // URL to redirect.
$urltogo = $urltogo ?: $CFG->wwwroot;
$context = context_system::instance();
$PAGE->set_context($context);
+3
View File
@@ -51,5 +51,8 @@ function xmldb_tool_mobile_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -45,5 +45,8 @@ function xmldb_tool_monitor_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -14,14 +14,7 @@
// 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 event observers.
*
* @package tool_monitor
* @category test
* @copyright 2014 onwards Ankit Agarwal <ankit.agrr@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_monitor;
defined('MOODLE_INTERNAL') || die();
@@ -30,11 +23,14 @@ require_once($CFG->dirroot . '/blog/locallib.php');
require_once($CFG->dirroot . '/blog/lib.php');
/**
* Class tool_monitor_eventobservers_testcase
* Unit tests for event observers.
*
* Tests for event observers
* @package tool_monitor
* @category test
* @copyright 2014 onwards Ankit Agarwal <ankit.agrr@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_monitor_eventobservers_testcase extends advanced_testcase {
class eventobservers_test extends \advanced_testcase {
/**
* Set up method.
*/
@@ -57,12 +53,12 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$course2 = $this->getDataGenerator()->create_course();
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$rule = new stdClass();
$rule = new \stdClass();
$rule->userid = $user->id;
$rule->courseid = $course1->id;
$rule->plugin = 'test';
$sub = new stdClass();
$sub = new \stdClass();
$sub->courseid = $course1->id;
$sub->userid = $user->id;
@@ -83,7 +79,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
}
// Add a site rule.
$rule = new stdClass();
$rule = new \stdClass();
$rule->userid = $user->id;
$rule->courseid = 0;
$rule->plugin = 'core';
@@ -135,7 +131,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
// Fire a bunch of events.
// Trigger a bunch of other events.
$eventparams = array(
'context' => context_course::instance($course->id)
'context' => \context_course::instance($course->id)
);
for ($i = 0; $i < 5; $i++) {
\core\event\course_viewed::create($eventparams)->trigger();
@@ -148,14 +144,14 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$this->assertEquals(0, $DB->count_records('tool_monitor_events'));
// Now, let's create a rule so an event can be stored.
$rule = new stdClass();
$rule = new \stdClass();
$rule->courseid = $course->id;
$rule->plugin = 'mod_book';
$rule->eventname = '\mod_book\event\course_module_instance_list_viewed';
$rule = $monitorgenerator->create_rule($rule);
// Let's subscribe to this rule.
$sub = new stdClass;
$sub = new \stdClass;
$sub->courseid = $course->id;
$sub->ruleid = $rule->id;
$sub->userid = $user->id;
@@ -187,14 +183,14 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$DB->delete_records('tool_monitor_events');
// Now, let's create a site wide rule.
$rule = new stdClass();
$rule = new \stdClass();
$rule->courseid = 0;
$rule->plugin = 'mod_book';
$rule->eventname = '\mod_book\event\course_module_instance_list_viewed';
$rule = $monitorgenerator->create_rule($rule);
// Let's subscribe to this rule.
$sub = new stdClass;
$sub = new \stdClass;
$sub->courseid = 0;
$sub->ruleid = $rule->id;
$sub->userid = $user->id;
@@ -231,14 +227,14 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$course = $this->getDataGenerator()->create_course();
$toolgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$rulerecord = new stdClass();
$rulerecord = new \stdClass();
$rulerecord->courseid = $course->id;
$rulerecord->eventname = '\mod_book\event\course_module_instance_list_viewed';
$rulerecord->frequency = 1;
$rule = $toolgenerator->create_rule($rulerecord);
$subrecord = new stdClass();
$subrecord = new \stdClass();
$subrecord->courseid = $course->id;
$subrecord->ruleid = $rule->id;
$subrecord->userid = $USER->id;
@@ -279,7 +275,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$DB->delete_records('tool_monitor_events');
// Now let us create a rule specific to a module instance.
$cm = new stdClass();
$cm = new \stdClass();
$cm->course = $course->id;
$book = $this->getDataGenerator()->create_module('book', $cm);
$rulerecord->eventname = '\mod_book\event\course_module_viewed';
@@ -290,7 +286,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
// Let us trigger events.
$params = array(
'context' => context_module::instance($book->cmid),
'context' => \context_module::instance($book->cmid),
'objectid' => $book->id
);
for ($i = 0; $i < 5; $i++) {
@@ -337,10 +333,10 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$toolgenerator->create_subscription($subrecord);
// Let us trigger events.
$blog = new blog_entry();
$blog = new \blog_entry();
$blog->subject = "Subject of blog";
$blog->userid = $USER->id;
$states = blog_entry::get_applicable_publish_states();
$states = \blog_entry::get_applicable_publish_states();
$blog->publishstate = reset($states);
for ($i = 0; $i < 5; $i++) {
$newblog = fullclone($blog);
@@ -367,14 +363,14 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$course = $this->getDataGenerator()->create_course();
$toolgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$rulerecord = new stdClass();
$rulerecord = new \stdClass();
$rulerecord->courseid = $course->id;
$rulerecord->eventname = '\mod_book\event\course_module_instance_list_viewed';
$rulerecord->frequency = 5;
$rule = $toolgenerator->create_rule($rulerecord);
$subrecord = new stdClass();
$subrecord = new \stdClass();
$subrecord->courseid = $course->id;
$subrecord->ruleid = $rule->id;
$subrecord->userid = $USER->id;
@@ -416,7 +412,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
*
* @param phpunit_message_sink $msgsink Message sink
*/
protected function verify_processed_data(phpunit_message_sink $msgsink) {
protected function verify_processed_data(\phpunit_message_sink $msgsink) {
global $DB, $USER;
$recordexists = $DB->count_records('task_adhoc', array('component' => 'tool_monitor'));
@@ -435,7 +431,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
*
* @param phpunit_message_sink $msgsink Message sink
*/
protected function verify_message_not_sent_yet(phpunit_message_sink $msgsink) {
protected function verify_message_not_sent_yet(\phpunit_message_sink $msgsink) {
$msgs = $msgsink->get_messages();
$this->assertCount(0, $msgs);
$msgsink->clear();
@@ -457,12 +453,12 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$context = \context_user::instance($USER->id, IGNORE_MISSING);
// Creating book.
$cm = new stdClass();
$cm = new \stdClass();
$cm->course = $course->id;
$book = $this->getDataGenerator()->create_module('book', $cm);
// Creating rule.
$rulerecord = new stdClass();
$rulerecord = new \stdClass();
$rulerecord->courseid = $course->id;
$rulerecord->eventname = '\mod_book\event\course_module_viewed';
$rulerecord->cmid = $book->cmid;
@@ -478,7 +474,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$rule = $toolgenerator->create_rule($rulerecord);
// Creating subscription.
$subrecord = new stdClass();
$subrecord = new \stdClass();
$subrecord->courseid = $course->id;
$subrecord->ruleid = $rule->id;
$subrecord->userid = $USER->id;
@@ -486,7 +482,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
// Now let us trigger the event.
$params = array(
'context' => context_module::instance($book->cmid),
'context' => \context_module::instance($book->cmid),
'objectid' => $book->id
);
@@ -496,7 +492,7 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$msgs = $msgsink->get_messages();
$msg = array_pop($msgs);
$modurl = new moodle_url('/mod/book/view.php', array('id' => $book->cmid));
$modurl = new \moodle_url('/mod/book/view.php', array('id' => $book->cmid));
$this->assertMatchesRegularExpression('~<h2>.*' . preg_quote($event->get_url()->out(), '~') . '.*</h2>~',
$msg->fullmessagehtml);
@@ -529,12 +525,12 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$course2 = $this->getDataGenerator()->create_course();
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$rule = new stdClass();
$rule = new \stdClass();
$rule->userid = $user->id;
$rule->courseid = $course1->id;
$rule->plugin = 'test';
$sub = new stdClass();
$sub = new \stdClass();
$sub->courseid = $course1->id;
$sub->userid = $user->id;
@@ -585,16 +581,16 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
// Now let us create a rule specific to a module instance.
$cm = new stdClass();
$cm = new \stdClass();
$cm->course = $course1->id;
$book = $this->getDataGenerator()->create_module('book', $cm);
$rule = new stdClass();
$rule = new \stdClass();
$rule->userid = $user->id;
$rule->courseid = $course1->id;
$rule->plugin = 'test';
$sub = new stdClass();
$sub = new \stdClass();
$sub->courseid = $course1->id;
$sub->userid = $user->id;
$sub->cmid = $book->cmid;
+11 -19
View File
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_monitor;
/**
* Unit tests for rule manager api.
*
@@ -22,17 +24,7 @@
* @copyright 2014 onwards Simey Lameze <simey@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Tests for rule manager.
*
* Class tool_monitor_rule_manager_testcase
*/
class tool_monitor_rule_manager_testcase extends advanced_testcase {
class rule_manager_test extends \advanced_testcase {
/**
* Set up method.
@@ -53,7 +45,7 @@ class tool_monitor_rule_manager_testcase extends advanced_testcase {
$course = $this->getDataGenerator()->create_course();
$now = time();
$rule = new stdClass();
$rule = new \stdClass();
$rule->userid = $user->id;
$rule->courseid = $course->id;
$rule->name = 'test rule 1';
@@ -98,7 +90,7 @@ class tool_monitor_rule_manager_testcase extends advanced_testcase {
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$rule = $monitorgenerator->create_rule();
$ruledata = new stdClass;
$ruledata = new \stdClass;
$ruledata->id = $rule->id;
$ruledata->frequency = 25;
@@ -119,10 +111,10 @@ class tool_monitor_rule_manager_testcase extends advanced_testcase {
$course1 = $this->getDataGenerator()->create_course();
$course2 = $this->getDataGenerator()->create_course();
$record = new stdClass();
$record = new \stdClass();
$record->courseid = $course1->id;
$record2 = new stdClass();
$record2 = new \stdClass();
$record2->courseid = $course2->id;
$ruleids = array();
@@ -147,10 +139,10 @@ class tool_monitor_rule_manager_testcase extends advanced_testcase {
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$record = new stdClass();
$record = new \stdClass();
$record->plugin = 'core';
$record2 = new stdClass();
$record2 = new \stdClass();
$record2->plugin = 'mod_assign';
$ruleids = array();
@@ -175,10 +167,10 @@ class tool_monitor_rule_manager_testcase extends advanced_testcase {
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$rule = $monitorgenerator->create_rule();
$record = new stdClass();
$record = new \stdClass();
$record->eventname = '\core\event\calendar_event_created';
$record2 = new stdClass();
$record2 = new \stdClass();
$record2->eventname = '\core\event\calendar_event_updated';
$ruleids = array();
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_monitor;
/**
* Unit tests for subscription manager api.
*
@@ -22,17 +24,7 @@
* @copyright 2014 onwards Simey Lameze <simey@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Tests for subscription manager.
*
* Class tool_monitor_subscription_manager_testcase.
*/
class tool_monitor_subscription_manager_testcase extends advanced_testcase {
class subscription_manager_test extends \advanced_testcase {
/**
* Test count_rule_subscriptions method.
@@ -56,7 +48,7 @@ class tool_monitor_subscription_manager_testcase extends advanced_testcase {
$this->assertEquals(0, $subs);
// Subscribe user 1 to rule 1.
$record = new stdClass;
$record = new \stdClass;
$record->ruleid = $rule1->id;
$record->userid = $user1->id;
$monitorgenerator->create_subscription($record);
@@ -75,4 +67,4 @@ class tool_monitor_subscription_manager_testcase extends advanced_testcase {
$this->assertEquals(2, $subs1);
$this->assertEquals(1, $subs2);
}
}
}
@@ -13,7 +13,8 @@
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || exit();
namespace tool_monitor;
/**
* Unit tests for the subscription class.
@@ -24,7 +25,7 @@ defined('MOODLE_INTERNAL') || exit();
* @copyright 2016 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_monitor_subscription_testcase extends advanced_testcase {
class subscription_test extends \advanced_testcase {
/**
* @var \tool_monitor\subscription $subscription object.
@@ -38,7 +39,7 @@ class tool_monitor_subscription_testcase extends advanced_testcase {
$this->resetAfterTest(true);
// Create the mock subscription.
$sub = new stdClass();
$sub = new \stdClass();
$sub->id = 100;
$sub->name = 'My test rule';
$sub->courseid = 20;
@@ -62,7 +63,7 @@ class tool_monitor_subscription_testcase extends advanced_testcase {
*/
public function test_magic_get() {
$this->assertEquals(20, $this->subscription->courseid);
$this->expectException(coding_exception::class);
$this->expectException(\coding_exception::class);
$this->subscription->ruleid;
}
}
@@ -13,7 +13,8 @@
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || exit();
namespace tool_monitor;
/**
* Unit tests for the tool_monitor clean events task.
@@ -24,7 +25,7 @@ defined('MOODLE_INTERNAL') || exit();
* @copyright 2016 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_monitor_task_check_subscriptions_testcase extends advanced_testcase {
class task_check_subscriptions_test extends \advanced_testcase {
private $course;
private $user;
@@ -45,7 +46,7 @@ class tool_monitor_task_check_subscriptions_testcase extends advanced_testcase {
$this->user = $this->getDataGenerator()->create_user();
$this->course = $this->getDataGenerator()->create_course();
$rule = new stdClass();
$rule = new \stdClass();
$rule->userid = 2; // Rule created by admin.
$rule->courseid = $this->course->id;
$rule->plugin = 'mod_book';
@@ -54,7 +55,7 @@ class tool_monitor_task_check_subscriptions_testcase extends advanced_testcase {
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$this->rule = $monitorgenerator->create_rule($rule);
$sub = new stdClass();
$sub = new \stdClass();
$sub->courseid = $this->course->id;
$sub->userid = $this->user->id;
$sub->ruleid = $this->rule->id;
@@ -90,7 +91,7 @@ class tool_monitor_task_check_subscriptions_testcase extends advanced_testcase {
public function test_site_level_subscription() {
// Create a site level subscription.
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$sub = new stdClass();
$sub = new \stdClass();
$sub->userid = $this->user->id;
$sub->ruleid = $this->rule->id;
$this->subscription = $monitorgenerator->create_subscription($sub);
@@ -104,7 +105,7 @@ class tool_monitor_task_check_subscriptions_testcase extends advanced_testcase {
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Now, assign the user as a teacher role at system context.
$this->getDataGenerator()->role_assign($this->teacherrole->id, $this->user->id, context_system::instance());
$this->getDataGenerator()->role_assign($this->teacherrole->id, $this->user->id, \context_system::instance());
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
@@ -238,7 +239,7 @@ class tool_monitor_task_check_subscriptions_testcase extends advanced_testcase {
$book = $this->getDataGenerator()->create_module('book', array('course' => $this->course->id));
// And add a subscription to it.
$sub = new stdClass();
$sub = new \stdClass();
$sub->courseid = $this->course->id;
$sub->userid = $this->user->id;
$sub->ruleid = $this->rule->id;
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_monitor;
/**
* Unit tests for the tool_monitor clean events task.
*
@@ -22,15 +24,7 @@
* @copyright 2014 Mark Nelson <markn@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Class used to test the tool_monitor clean events task.
*/
class tool_monitor_task_clean_events_testcase extends advanced_testcase {
class task_clean_events_test extends \advanced_testcase {
/**
* Test set up.
@@ -51,16 +45,16 @@ class tool_monitor_task_clean_events_testcase extends advanced_testcase {
$course = $this->getDataGenerator()->create_course();
$bookgenerator = $this->getDataGenerator()->get_plugin_generator('mod_book');
$book = $this->getDataGenerator()->create_module('book', array('course' => $course->id));
$bookcontext = context_module::instance($book->cmid);
$bookcontext = \context_module::instance($book->cmid);
$bookchapter = $bookgenerator->create_chapter(array('bookid' => $book->id));
$course2 = $this->getDataGenerator()->create_course();
$book2 = $this->getDataGenerator()->create_module('book', array('course' => $course2->id));
$book2context = context_module::instance($book2->cmid);
$book2context = \context_module::instance($book2->cmid);
$book2chapter = $bookgenerator->create_chapter(array('bookid' => $book2->id));
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
// Let's set some data for the rules we need before we can generate them.
$rule = new stdClass();
$rule = new \stdClass();
$rule->userid = $user->id;
$rule->courseid = $course->id;
$rule->plugin = 'mod_book';
@@ -96,7 +90,7 @@ class tool_monitor_task_clean_events_testcase extends advanced_testcase {
// Let's subscribe to these rules.
$sub = new stdClass;
$sub = new \stdClass;
$sub->courseid = $course->id;
$sub->ruleid = $rule1->id;
$sub->userid = $user->id;
@@ -133,7 +127,7 @@ class tool_monitor_task_clean_events_testcase extends advanced_testcase {
// Trigger a bunch of other events.
$eventparams = array(
'context' => context_course::instance($course->id)
'context' => \context_course::instance($course->id)
);
for ($i = 0; $i < 5; $i++) {
\mod_quiz\event\course_module_instance_list_viewed::create($eventparams)->trigger();
@@ -164,7 +158,7 @@ class tool_monitor_task_clean_events_testcase extends advanced_testcase {
$this->assertEquals($course2->id, $event4->courseid);
// Update the timewindow for two of the rules.
$updaterule = new stdClass();
$updaterule = new \stdClass();
$updaterule->id = $rule1->id;
$updaterule->timewindow = 0;
\tool_monitor\rule_manager::update_rule($updaterule);
+3
View File
@@ -164,5 +164,8 @@ function xmldb_tool_moodlenet_upgrade(int $oldversion) {
upgrade_plugin_savepoint(true, 2022021601, 'tool', 'moodlenet');
}
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -58,9 +58,8 @@ $string['mnetprofiledesc'] = '<p>Enter your MoodleNet profile details here to be
$string['moodlenetsettings'] = 'MoodleNet settings';
$string['moodlenetnotenabled'] = 'The MoodleNet integration must be enabled in Site administration / MoodleNet before resource imports can be processed.';
$string['notification'] = 'You are about to import the content "{$a->name} ({$a->type})" into your site. Select the course in which it should be added, or <a href="{$a->cancellink}">cancel</a>.';
$string['removedmnetprofilenotification'] = '<p>Due to some recent changes on the MoodleNet platform, users that have previously saved their MoodleNet profile on the site can no longer use this data to authenticate on the MoodleNet platform. The related data has now been removed as it is no longer useful.</p>
<p>The users will need to reset this information on the site by linking their MoodleNet profile ID which can be found on their MoodleNet profile.</p>';
$string['removedmnetprofilenotification_subject'] = 'Linked MoodleNet profiles removed.';
$string['removedmnetprofilenotification'] = 'Due to recent changes on the MoodleNet platform, any users who previously saved their MoodleNet profile ID on the site will need to enter a MoodleNet profile ID in the new format in order to authenticate on the MoodleNet platform.';
$string['removedmnetprofilenotification_subject'] = 'MoodleNet profile ID format change';
$string['searchcourses'] = "Search courses";
$string['selectpagetitle'] = 'Select page';
$string['pluginname'] = 'MoodleNet';
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_moodlenet;
/**
* Unit tests for the import_backup_helper
*
@@ -22,15 +24,7 @@
* @copyright 2020 Adrian Greeve <adrian@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Class import_backup_helper tests
*/
class tool_moodlenet_import_backup_helper_testcase extends advanced_testcase {
class import_backup_helper_test extends \advanced_testcase {
/**
* Test that the first available context with the capability to upload backup files is returned.
@@ -47,7 +41,7 @@ class tool_moodlenet_import_backup_helper_testcase extends advanced_testcase {
$user5 = $this->getDataGenerator()->create_user();
$course = $this->getDataGenerator()->create_course();
$coursecontext = context_course::instance($course->id);
$coursecontext = \context_course::instance($course->id);
$this->getDataGenerator()->enrol_user($user1->id, $course->id, 'student');
$this->getDataGenerator()->enrol_user($user2->id, $course->id, 'editingteacher');
@@ -55,12 +49,12 @@ class tool_moodlenet_import_backup_helper_testcase extends advanced_testcase {
$category = $this->getDataGenerator()->create_category();
$rolerecord = $DB->get_record('role', ['shortname' => 'manager']);
$categorycontext = context_coursecat::instance($category->id);
$categorycontext = \context_coursecat::instance($category->id);
$this->getDataGenerator()->role_assign($rolerecord->id, $user3->id, $categorycontext->id);
$this->getDataGenerator()->role_assign($rolerecord->id, $user5->id, $categorycontext->id);
$roleid = $this->getDataGenerator()->create_role();
$sitecontext = context_system::instance();
$sitecontext = \context_system::instance();
assign_capability('moodle/restore:uploadfile', CAP_ALLOW, $roleid, $sitecontext->id, true);
accesslib_clear_all_caches_for_unit_testing();
$this->getDataGenerator()->role_assign($roleid, $user4->id, $sitecontext->id);
@@ -81,4 +75,4 @@ class tool_moodlenet_import_backup_helper_testcase extends advanced_testcase {
$this->assertEquals(CONTEXT_COURSECAT, $result->contextlevel);
}
}
}
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_moodlenet;
/**
* Unit tests for the profile manager
*
@@ -22,15 +24,7 @@
* @copyright 2020 Adrian Greeve <adrian@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Class profile_manager tests
*/
class tool_moodlenet_profile_manager_testcase extends advanced_testcase {
class profile_manager_test extends \advanced_testcase {
/**
* Test that on this site we use the user table to hold moodle net profile information.
@@ -57,7 +51,7 @@ class tool_moodlenet_profile_manager_testcase extends advanced_testcase {
$this->resetAfterTest();
$user = $this->getDataGenerator()->create_user();
$this->expectException(moodle_exception::class);
$this->expectException(\moodle_exception::class);
$this->expectExceptionMessage(get_string('invalidmoodlenetprofile', 'tool_moodlenet'));
$result = new \tool_moodlenet\moodlenet_user_profile("", $user->id);
}
+3
View File
@@ -46,5 +46,8 @@ function xmldb_tool_policy_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 294 B

+1 -1
View File
@@ -56,5 +56,5 @@
d="m 10.60981,13.748496 q -0.42076,-0.2046 -0.42076,-0.6595 v -2.1834 H 0.36389001 q -0.15919999,0 -0.26154001,-0.102297 Q 0,10.700897 0,10.541796 V 2.5361969 q 0,-0.2388 0.20469002,-0.3297 0.22743999,-0.091 0.39800999,0.045 L 2.7860701,4.0708971 q 0.1250916,0.1024 0.1250916,0.2842998 v 3.639 H 10.18905 V 5.810797 q 0,-0.4548999 0.42076,-0.6596001 0.42075,-0.1932998 0.77327,0.1024 L 15.749821,8.892496 Q 16,9.0971966 16,9.4496973 16,9.8022974 15.749821,10.006998 l -4.366741,3.638798 q -0.36389,0.307 -0.77327,0.102297 z"
id="path4552"
inkscape:connector-curvature="0"
style="fill:#999999;fill-opacity:1;stroke-width:0.9999997" />
style="fill:#888;fill-opacity:1;stroke-width:0.9999997" />
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

@@ -14,31 +14,20 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Provides the {@link tool_policy_sitepolicy_handler_testcase} class.
*
* @package tool_policy
* @category test
* @copyright 2018 David Mudrák <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_policy;
use tool_policy\api;
use tool_policy\policy_version;
use tool_policy\privacy\local\sitepolicy\handler;
use tool_policy\test\helper;
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Unit tests for the {@link \tool_policy\privacy\local\sitepolicy\handler} class.
*
* @package tool_policy
* @category test
* @copyright 2018 David Mudrak <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_policy_sitepolicy_handler_testcase extends advanced_testcase {
class sitepolicy_handler_test extends \advanced_testcase {
/**
* Test behaviour of the {@link \tool_policy\privacy\local\sitepolicy\handler::get_redirect_url()} method.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

After

Width:  |  Height:  |  Size: 247 B

+1 -1
View File
@@ -9,7 +9,7 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">
<defs>
</defs>
<path style="fill:#999999;" d="M2,5v9c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V5H2z M5,13.5C5,13.8,4.8,14,4.5,14S4,13.8,4,13.5v-6
<path style="fill:#888;" d="M2,5v9c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V5H2z M5,13.5C5,13.8,4.8,14,4.5,14S4,13.8,4,13.5v-6
C4,7.2,4.2,7,4.5,7S5,7.2,5,7.5V13.5z M8.5,13.5C8.5,13.8,8.3,14,8,14s-0.5-0.2-0.5-0.5v-6C7.5,7.2,7.7,7,8,7s0.5,0.2,0.5,0.5V13.5z
M12,13.5c0,0.3-0.2,0.5-0.5,0.5S11,13.8,11,13.5v-6C11,7.2,11.2,7,11.5,7S12,7.2,12,7.5V13.5z M0,4c0-1.1,0.9-2,2-2h4v0
c0-1.1,0.9-2,2-2s2,0.9,2,2v0h4c1.1,0,2,0.9,2,2H0z"/>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -19,14 +19,13 @@ Feature: Backup user data
And the following config values are set as admin:
| coursebinenable | 1 | tool_recyclebin |
| autohide | 0 | tool_recyclebin |
And the following "activities" exist:
| activity | course | section | name | intro |
| quiz | C1 | 1 | Quiz 1 | Test quiz description |
@javascript
Scenario: Delete and restore a quiz with user data
Given I log in as "teacher1"
And I am on "Course 1" course homepage with editing mode on
And I add a "Quiz" to section "1" and I fill the form with:
| Name | Quiz 1 |
| Description | Test quiz description |
Given I am on the "Quiz 1" "quiz activity" page logged in as teacher1
And I add a "True/False" question to the "Quiz 1" quiz with:
| Question name | TF1 |
| Question text | First question |
@@ -41,6 +40,8 @@ Feature: Backup user data
| Correct answer | False |
| Feedback for the response 'True'. | So you think it is true |
| Feedback for the response 'False'. | So you think it is false |
And I set the field "maxgrade" to "10.0"
And I press "savechanges"
And I log out
When I am on the "Quiz 1" "quiz activity" page logged in as student1
And I press "Attempt quiz"
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Recycle bin tests.
*
* @package tool_recyclebin
* @copyright 2015 University of Kent
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
namespace tool_recyclebin;
/**
* Recycle bin category tests.
@@ -31,15 +23,15 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2015 University of Kent
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_recyclebin_category_bin_tests extends advanced_testcase {
class category_bin_test extends \advanced_testcase {
/**
* @var stdClass $course
* @var \stdClass $course
*/
protected $course;
/**
* @var stdClass $coursebeingrestored
* @var \stdClass $coursebeingrestored
*/
protected $coursebeingrestored;
@@ -96,7 +88,7 @@ class tool_recyclebin_category_bin_tests extends advanced_testcase {
$this->assertEquals(1, $DB->count_records('tool_recyclebin_category'));
// Now let's delete the course category.
$category = core_course_category::get($this->course->category);
$category = \core_course_category::get($this->course->category);
$category->delete_full(false);
// Check that the course was deleted from the category recycle bin.
@@ -242,7 +234,7 @@ class tool_recyclebin_category_bin_tests extends advanced_testcase {
$this->assertEquals(0, count($recyclebin->get_items()));
// Verify that student DOES continue enrolled.
$this->assertTrue(is_enrolled(context_course::instance($newcourse->id), $student->id));
$this->assertTrue(is_enrolled(\context_course::instance($newcourse->id), $student->id));
}
/**
@@ -286,6 +278,6 @@ class tool_recyclebin_category_bin_tests extends advanced_testcase {
$this->assertEquals(0, count($recyclebin->get_items()));
// Verify that student DOES NOT continue enrolled.
$this->assertFalse(is_enrolled(context_course::instance($newcourse->id), $student->id));
$this->assertFalse(is_enrolled(\context_course::instance($newcourse->id), $student->id));
}
}
+14 -22
View File
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Recycle bin tests.
*
* @package tool_recyclebin
* @copyright 2015 University of Kent
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
namespace tool_recyclebin;
/**
* Recycle bin course tests.
@@ -31,10 +23,10 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2015 University of Kent
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_recyclebin_course_bin_tests extends advanced_testcase {
class course_bin_test extends \advanced_testcase {
/**
* @var stdClass $course
* @var \stdClass $course
*/
protected $course;
@@ -72,7 +64,7 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
course_delete_module($this->quiz->cmid);
// Now, run the course module deletion adhoc task.
phpunit_util::run_all_adhoc_tasks();
\phpunit_util::run_all_adhoc_tasks();
// Check the course module is now in the recycle bin.
$this->assertEquals(1, $DB->count_records('tool_recyclebin_course'));
@@ -116,7 +108,7 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
course_delete_module($this->quiz->cmid);
// Now, run the course module deletion adhoc task.
phpunit_util::run_all_adhoc_tasks();
\phpunit_util::run_all_adhoc_tasks();
// Try purging.
$recyclebin = new \tool_recyclebin\course_bin($this->course->id);
@@ -141,7 +133,7 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
course_delete_module($this->quiz->cmid);
// Now, run the course module deletion adhoc task.
phpunit_util::run_all_adhoc_tasks();
\phpunit_util::run_all_adhoc_tasks();
// Set deleted date to the distant past.
$recyclebin = new \tool_recyclebin\course_bin($this->course->id);
@@ -157,7 +149,7 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
course_delete_module($book->cmid);
// Now, run the course module deletion adhoc task.
phpunit_util::run_all_adhoc_tasks();
\phpunit_util::run_all_adhoc_tasks();
// Should have 2 items now.
$this->assertEquals(2, count($recyclebin->get_items()));
@@ -223,7 +215,7 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
// Delete quiz.
$cm = get_coursemodule_from_instance('quiz', $this->quiz->id);
course_delete_module($cm->id);
phpunit_util::run_all_adhoc_tasks();
\phpunit_util::run_all_adhoc_tasks();
$quizzes = get_coursemodules_in_course('quiz', $this->course->id);
$this->assertEquals(0, count($quizzes));
@@ -240,7 +232,7 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
$attempts = quiz_get_user_attempts($cm->instance, $student->id);
$this->assertEquals(1, count($attempts));
$attempt = array_pop($attempts);
$attemptobj = quiz_attempt::create($attempt->id);
$attemptobj = \quiz_attempt::create($attempt->id);
$this->assertEquals($student->id, $attemptobj->get_userid());
$this->assertEquals(true, $attemptobj->is_finished());
}
@@ -270,7 +262,7 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
// Delete quiz.
$cm = get_coursemodule_from_instance('quiz', $this->quiz->id);
course_delete_module($cm->id);
phpunit_util::run_all_adhoc_tasks();
\phpunit_util::run_all_adhoc_tasks();
$quizzes = get_coursemodules_in_course('quiz', $this->course->id);
$this->assertEquals(0, count($quizzes));
@@ -303,17 +295,17 @@ class tool_recyclebin_course_bin_tests extends advanced_testcase {
quiz_add_quiz_question($numq->id, $quiz);
// Create quiz attempt.
$quizobj = quiz::create($quiz->id, $student->id);
$quba = question_engine::make_questions_usage_by_activity('mod_quiz', $quizobj->get_context());
$quizobj = \quiz::create($quiz->id, $student->id);
$quba = \question_engine::make_questions_usage_by_activity('mod_quiz', $quizobj->get_context());
$quba->set_preferred_behaviour($quizobj->get_quiz()->preferredbehaviour);
$timenow = time();
$attempt = quiz_create_attempt($quizobj, 1, false, $timenow, false, $student->id);
quiz_start_new_attempt($quizobj, $quba, $attempt, 1, $timenow);
quiz_attempt_save_started($quizobj, $quba, $attempt);
$attemptobj = quiz_attempt::create($attempt->id);
$attemptobj = \quiz_attempt::create($attempt->id);
$tosubmit = array(1 => array('answer' => '0'));
$attemptobj->process_submitted_actions($timenow, false, $tosubmit);
$attemptobj = quiz_attempt::create($attempt->id);
$attemptobj = \quiz_attempt::create($attempt->id);
$attemptobj->process_finish($timenow, false);
}
}
+3 -13
View File
@@ -14,26 +14,16 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* File containing tests for the mform class.
*
* @package tool_task
* @copyright 2014 onwards Ankit Agarwal <ankit.agrr@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
namespace tool_task;
/**
* Mform test class.
* Test for the task mform class.
*
* @package tool_task
* @copyright 2014 onwards Ankit Agarwal <ankit.agrr@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late
*/
class tool_task_form_testcase extends advanced_testcase {
class form_test extends \advanced_testcase {
/**
* Test validations for minute field.
+108 -38
View File
@@ -44,6 +44,12 @@ class tool_uploadcourse_course {
/** Outcome of the process: deleting the course */
const DO_DELETE = 3;
/** @var array assignable roles. */
protected $assignableroles = [];
/** @var array Roles context levels. */
protected $contextlevels = [];
/** @var array final import data. */
protected $data = array();
@@ -794,16 +800,15 @@ class tool_uploadcourse_course {
// Get enrolment data. Where the course already exists, we can also perform validation.
$this->enrolmentdata = tool_uploadcourse_helper::get_enrolment_data($this->rawdata);
if ($exists) {
$errors = $this->validate_enrolment_data($coursedata['id'], $this->enrolmentdata);
$courseid = $coursedata['id'] ?? 0;
$errors = $this->validate_enrolment_data($courseid, $this->enrolmentdata);
if (!empty($errors)) {
foreach ($errors as $key => $message) {
$this->error($key, $message);
}
return false;
if (!empty($errors)) {
foreach ($errors as $key => $message) {
$this->error($key, $message);
}
return false;
}
if (isset($this->rawdata['tags']) && strval($this->rawdata['tags']) !== '') {
@@ -913,6 +918,8 @@ class tool_uploadcourse_course {
* @return lang_string[] Errors keyed on error code
*/
protected function validate_enrolment_data(int $courseid, array $enrolmentdata): array {
global $DB;
// Nothing to validate.
if (empty($enrolmentdata)) {
return [];
@@ -924,46 +931,67 @@ class tool_uploadcourse_course {
$instances = enrol_get_instances($courseid, false);
foreach ($enrolmentdata as $method => $options) {
$plugin = $enrolmentplugins[$method];
// Find matching instances by enrolment method.
$methodinstances = array_filter($instances, static function(stdClass $instance) use ($method) {
return (strcmp($instance->enrol, $method) == 0);
});
if (isset($options['role'])) {
$role = $options['role'];
if ($courseid) {
if (!$this->validate_role_context($courseid, $role)) {
$errors['contextrolenotallowed'] = new lang_string('contextrolenotallowed', 'core_role', $role);
if (!empty($options['delete'])) {
// Ensure user is able to delete the instances.
foreach ($methodinstances as $methodinstance) {
if (!$plugin->can_delete_instance($methodinstance)) {
$errors['errorcannotdeleteenrolment'] = new lang_string('errorcannotdeleteenrolment', 'tool_uploadcourse',
$plugin->get_instance_name($methodinstance));
break;
}
} else {
// We can at least check that context level is correct while actual context not exist.
$roleid = $DB->get_field('role', 'id', ['shortname' => $role], MUST_EXIST);
if (!$this->validate_role_context_level($roleid)) {
$errors['contextrolenotallowed'] = new lang_string('contextrolenotallowed', 'core_role', $role);
break;
}
}
} else if (!empty($options['disable'])) {
// Ensure user is able to toggle instance statuses.
foreach ($methodinstances as $methodinstance) {
if (!$plugin->can_hide_show_instance($methodinstance)) {
$errors['errorcannotdisableenrolment'] =
new lang_string('errorcannotdisableenrolment', 'tool_uploadcourse',
}
if ($courseid) {
$plugin = $enrolmentplugins[$method];
// Find matching instances by enrolment method.
$methodinstances = array_filter($instances, static function (stdClass $instance) use ($method) {
return (strcmp($instance->enrol, $method) == 0);
});
if (!empty($options['delete'])) {
// Ensure user is able to delete the instances.
foreach ($methodinstances as $methodinstance) {
if (!$plugin->can_delete_instance($methodinstance)) {
$errors['errorcannotdeleteenrolment'] = new lang_string('errorcannotdeleteenrolment',
'tool_uploadcourse', $plugin->get_instance_name($methodinstance));
break;
}
}
} else if (!empty($options['disable'])) {
// Ensure user is able to toggle instance statuses.
foreach ($methodinstances as $methodinstance) {
if (!$plugin->can_hide_show_instance($methodinstance)) {
$errors['errorcannotdisableenrolment'] =
new lang_string('errorcannotdisableenrolment', 'tool_uploadcourse',
$plugin->get_instance_name($methodinstance));
break;
}
}
} else {
// Ensure user is able to create/update instance.
$methodinstance = empty($methodinstances) ? null : reset($methodinstances);
if ((empty($methodinstance) && !$plugin->can_add_instance($courseid)) ||
(!empty($methodinstance) && !$plugin->can_edit_instance($methodinstance))) {
$errors['errorcannotcreateorupdateenrolment'] =
new lang_string('errorcannotcreateorupdateenrolment', 'tool_uploadcourse',
$plugin->get_instance_name($methodinstance));
break;
}
}
} else {
// Ensure user is able to create/update instance.
$methodinstance = empty($methodinstances) ? null : reset($methodinstances);
if ((empty($methodinstance) && !$plugin->can_add_instance($courseid)) ||
(!empty($methodinstance) && !$plugin->can_edit_instance($methodinstance))) {
$errors['errorcannotcreateorupdateenrolment'] =
new lang_string('errorcannotcreateorupdateenrolment', 'tool_uploadcourse',
$plugin->get_instance_name($methodinstance));
break;
}
}
}
@@ -1079,8 +1107,15 @@ class tool_uploadcourse_course {
$instance->enrolenddate = $instance->enrolstartdate;
}
// Sort out the given role. This does not filter the roles allowed in the course.
// Sort out the given role.
if (isset($method['role'])) {
$role = $method['role'];
if (!$this->validate_role_context($course->id, $role)) {
$this->error('contextrolenotallowed',
new lang_string('contextrolenotallowed', 'core_role', $role));
break;
}
$roleids = tool_uploadcourse_helper::get_role_ids();
if (isset($roleids[$method['role']])) {
$instance->roleid = $roleids[$method['role']];
@@ -1093,6 +1128,41 @@ class tool_uploadcourse_course {
}
}
/**
* Check if role is allowed in course context
*
* @param int $courseid course context.
* @param string $role Role.
* @return bool
*/
protected function validate_role_context(int $courseid, string $role) : bool {
if (empty($this->assignableroles[$courseid])) {
$coursecontext = \context_course::instance($courseid);
$this->assignableroles[$courseid] = get_assignable_roles($coursecontext, ROLENAME_SHORT);
}
if (!in_array($role, $this->assignableroles[$courseid])) {
return false;
}
return true;
}
/**
* Check if role is allowed at this context level.
*
* @param int $roleid Role ID.
* @return bool
*/
protected function validate_role_context_level(int $roleid) : bool {
if (empty($this->contextlevels[$roleid])) {
$this->contextlevels[$roleid] = get_role_contextlevels($roleid);
}
if (!in_array(CONTEXT_COURSE, $this->contextlevels[$roleid])) {
return false;
}
return true;
}
/**
* Reset the current course.
*
@@ -325,6 +325,11 @@ class tool_uploadcourse_helper {
continue;
}
$rolenames['role_' . $rolesids[$matches[1]]] = $value;
} else if (preg_match('/^(.+)?_role$/', $field, $matches)) {
if (!isset($rolesids[$value])) {
$invalidroles[] = $value;
break;
}
}
}
@@ -219,6 +219,10 @@ class tool_uploadcourse_processor {
$data = array_merge($data, $course->get_data(), array('id' => $course->get_id()));
$tracker->output($this->linenb, true, $status, $data);
if ($course->has_errors()) {
$errors++;
$tracker->output($this->linenb, false, $course->get_errors(), $data);
}
} else {
$errors++;
$tracker->output($this->linenb, false, $course->get_errors(), $data);
@@ -105,3 +105,28 @@ Feature: An admin can create courses using a CSV file
And I should see "Field 3: b"
And I should see "Field 4: Hello"
And I should see "Field 5: Some text"
@javascript
Scenario: Validation of role for uploaded courses
Given I navigate to "Users > Permissions > Define roles" in site administration
And I click on "Add a new role" "button"
And I click on "Continue" "button"
And I set the following fields to these values:
| Short name | notallowed |
| Custom full name | notallowed |
| contextlevel80 | 1 |
And I click on "Create this role" "button"
And I navigate to "Courses > Upload courses" in site administration
And I upload "admin/tool/uploadcourse/tests/fixtures/enrolment_role.csv" file to "File" filemanager
And I click on "Preview" "button"
And I should see "Invalid role names: notexist"
And I should see "Role notallowed not allowed in this context."
When I click on "Upload courses" "button"
And I should see "Course created"
And I should see "Courses total: 3"
And I should see "Courses created: 1"
And I should see "Courses errors: 2"
And I should see "Invalid role names: notexist"
And I should see "Role notallowed not allowed in this context."
And I am on site homepage
And I should see "coursez"
@@ -1561,6 +1561,94 @@ class course_test extends \advanced_testcase {
$this->assertArrayHasKey('cannotrenameshortnamealreadyinuse', $co->get_errors());
}
/**
* Test when role doesn't exist.
*
* @covers \tool_uploadcourse_course::prepare
*/
public function test_role_not_exist() {
$this->resetAfterTest();
$this->setAdminUser();
$mode = tool_uploadcourse_processor::MODE_CREATE_NEW;
$updatemode = tool_uploadcourse_processor::UPDATE_NOTHING;
$upload = new tool_uploadcourse_course($mode, $updatemode, [
'category' => 1,
'fullname' => 'Testing',
'shortname' => 'T101',
'enrolment_1' => 'manual',
'enrolment_1_role' => 'notexist'
]);
$this->assertFalse($upload->prepare());
$this->assertArrayHasKey('invalidroles', $upload->get_errors());
}
/**
* Test when role not allowed in course context.
*
* @covers \tool_uploadcourse_course::proceed
*/
public function test_role_not_allowed() {
$this->resetAfterTest();
$this->setAdminUser();
$roleid = create_role('New student role', 'student2', 'New student description', 'student');
set_role_contextlevels($roleid, [CONTEXT_BLOCK]);
$mode = tool_uploadcourse_processor::MODE_CREATE_NEW;
$updatemode = tool_uploadcourse_processor::UPDATE_NOTHING;
$upload = new tool_uploadcourse_course($mode, $updatemode, [
'category' => 1,
'fullname' => 'Testing',
'shortname' => 'T101',
'enrolment_1' => 'manual',
'enrolment_1_role' => 'student2'
]);
$this->assertFalse($upload->prepare());
$this->assertArrayHasKey('contextrolenotallowed', $upload->get_errors());
}
/**
* Test when role is allowed.
*
* @covers \tool_uploadcourse_course::proceed
*/
public function test_role_allowed() {
global $DB;
$this->resetAfterTest();
$this->setAdminUser();
$mode = tool_uploadcourse_processor::MODE_UPDATE_ONLY;
$updatemode = tool_uploadcourse_processor::UPDATE_MISSING_WITH_DATA_OR_DEFAUTLS;
$course = $this->getDataGenerator()->create_course([
'shortname' => 'c1',
]);
$instances = enrol_get_instances($course->id, true);
$studentrole = $DB->get_record('role', ['shortname' => 'student']);
$teacherrole = $DB->get_record('role', ['shortname' => 'teacher']);
$instance = reset($instances);
$this->assertEquals($studentrole->id, $instance->roleid);
$upload = new tool_uploadcourse_course($mode, $updatemode, [
'shortname' => 'c1',
'enrolment_1' => 'manual',
'enrolment_1_role' => 'teacher'
]);
$this->assertTrue($upload->prepare());
$upload->proceed();
$instances = enrol_get_instances($course->id, true);
$instance = reset($instances);
$this->assertEquals($teacherrole->id, $instance->roleid);
}
/**
* Get custom field plugin generator
*
@@ -0,0 +1,4 @@
shortname,fullname,category,enrolment_1,enrolment_1_role
CX,coursex,1,manual,notexist
CY,coursey,1,manual,notallowed
CZ,coursez,1,manual,student
1 shortname fullname category enrolment_1 enrolment_1_role
2 CX coursex 1 manual notexist
3 CY coursey 1 manual notallowed
4 CZ coursez 1 manual student
+8 -16
View File
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for CLI tool_uploaduser.
*
* @package tool_uploaduser
* @copyright 2020 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use \tool_uploaduser\cli_helper;
namespace tool_uploaduser;
/**
* Tests for CLI tool_uploaduser.
@@ -31,7 +23,7 @@ use \tool_uploaduser\cli_helper;
* @copyright 2020 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_uploaduser_cli_testcase extends advanced_testcase {
class cli_test extends \advanced_testcase {
/**
* Generate cli_helper and mock $_SERVER['argv']
@@ -117,7 +109,7 @@ class tool_uploaduser_cli_testcase extends advanced_testcase {
$this->assertEquals('Users created: 2', $stats[0]);
// Users have default values applied.
$user1 = core_user::get_user_by_username('jonest');
$user1 = \core_user::get_user_by_username('jonest');
$this->assertEquals('Brighton', $user1->city);
$this->assertEquals('Purchasing', $user1->department);
}
@@ -149,7 +141,7 @@ class tool_uploaduser_cli_testcase extends advanced_testcase {
$this->assertEquals('Users created: 2', $stats[0]);
// Created users have data in the profile fields.
$user1 = core_user::get_user_by_username('reznort');
$user1 = \core_user::get_user_by_username('reznort');
$profilefields1 = profile_user_record($user1->id);
$this->assertEquals((object)['superfield' => 'Loves cats'], $profilefields1);
}
@@ -244,9 +236,9 @@ class tool_uploaduser_cli_testcase extends advanced_testcase {
$enrols = array_values(enrol_get_course_users($course->id));
$this->assertEqualsCanonicalizing(['jonest'], [$enrols[0]->username]);
// User reznor is not created.
$this->assertFalse(core_user::get_user_by_username('reznor'));
$this->assertFalse(\core_user::get_user_by_username('reznor'));
// User jonest is not updated.
$this->assertEquals('OLDNAME', core_user::get_user_by_username('jonest')->firstname);
$this->assertEquals('OLDNAME', \core_user::get_user_by_username('jonest')->firstname);
}
/**
@@ -287,8 +279,8 @@ class tool_uploaduser_cli_testcase extends advanced_testcase {
$enrols = array_values(enrol_get_course_users($course->id));
$this->assertEqualsCanonicalizing(['jonest'], [$enrols[0]->username]);
// User reznor is not created.
$this->assertFalse(core_user::get_user_by_username('reznor'));
$this->assertFalse(\core_user::get_user_by_username('reznor'));
// User jonest is updated, new first name is Tom.
$this->assertEquals('Tom', core_user::get_user_by_username('jonest')->firstname);
$this->assertEquals('Tom', \core_user::get_user_by_username('jonest')->firstname);
}
}
@@ -14,20 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for field value validators of tool_uploaduser.
*
* @package tool_uploaduser
* @copyright 2019 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_uploaduser;
use tool_uploaduser\local\field_value_validators;
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Tests for field value validators of tool_uploaduser.
*
@@ -35,7 +25,7 @@ global $CFG;
* @copyright 2019 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class field_value_validators_testcase extends advanced_testcase {
class field_value_validators_test extends \advanced_testcase {
/**
* Data provider for \field_value_validators_testcase::test_validate_theme().
+3
View File
@@ -129,5 +129,8 @@ function xmldb_tool_usertours_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2022040602, 'tool', 'usertours');
}
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 511 B

+1 -1
View File
@@ -1,3 +1,3 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
]><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid meet" overflow="visible"><path d="M7.9 16c4 0 7.4-3 7.8-7h-3c-.5 2-2.5 4-4.9 4-2.8 0-5-2.2-5-5s2.2-5 5-5c1.1 0 2.1 0 3 1h-1c-.5 0-.8.5-.8 1.1v1c0 .5.3.9.8.9h5c.6 0 1.2-.4 1.2-.9v-5c0-.6-.6-1.1-1.2-1.1h-1c-.5 0-.8.5-.8 1.1V2C12 .9 9.9.2 8 .2 3.6.2 0 3.7 0 8.1 0 12.4 3.5 16 7.9 16z" fill="#999"/></svg>
]><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" preserveAspectRatio="xMinYMid meet" overflow="visible"><path d="M7.9 16c4 0 7.4-3 7.8-7h-3c-.5 2-2.5 4-4.9 4-2.8 0-5-2.2-5-5s2.2-5 5-5c1.1 0 2.1 0 3 1h-1c-.5 0-.8.5-.8 1.1v1c0 .5.3.9.8.9h5c.6 0 1.2-.4 1.2-.9v-5c0-.6-.6-1.1-1.2-1.1h-1c-.5 0-.8.5-.8 1.1V2C12 .9 9.9.2 8 .2 3.6.2 0 3.7 0 8.1 0 12.4 3.5 16 7.9 16z" fill="#888"/></svg>

Before

Width:  |  Height:  |  Size: 569 B

After

Width:  |  Height:  |  Size: 569 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

After

Width:  |  Height:  |  Size: 342 B

+1 -1
View File
@@ -9,7 +9,7 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">
<defs>
</defs>
<path style="fill:#999999;" d="M12,7v4c0,0.5-0.5,1-1,1h-0.5l0,0H1c-0.5,0-1-0.5-1-1V7c0-0.5,0.5-1,1-1h0.5c0.5,0,1,0.5,1,1l0,2.5h7
<path style="fill:#888;" d="M12,7v4c0,0.5-0.5,1-1,1h-0.5l0,0H1c-0.5,0-1-0.5-1-1V7c0-0.5,0.5-1,1-1h0.5c0.5,0,1,0.5,1,1l0,2.5h7
V7c0-0.5,0.5-1,1-1H11C11.5,6,12,6.5,12,7z M9.9,3.6L6.6,0.3C6.4,0.1,6.2,0,5.9,0C5.7,0,5.4,0.1,5.2,0.3L1.9,3.6
C1.5,4,1.5,4.6,1.9,5l0.3,0.3c0.4,0.4,1,0.4,1.4,0l1-1.1l0,2.7c0,0.5,0.5,1,1,1l0.5,0c0.5,0,1-0.5,1-1l0-2.7l1,1
c0.4,0.4,1,0.4,1.4,0L10,5C10.3,4.6,10.3,4,9.9,3.6z"/>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -14,17 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for time filter.
*
* @package tool_usertours
* @copyright 2019 Tom Dickman <tomdickman@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_usertours;
defined('MOODLE_INTERNAL') || die();
use tool_usertours\tour;
use tool_usertours\local\filter\accessdate;
/**
@@ -34,7 +25,7 @@ use tool_usertours\local\filter\accessdate;
* @copyright 2019 Tom Dickman <tomdickman@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_usertours_accessdate_filter_test extends advanced_testcase {
class accessdate_filter_test extends \advanced_testcase {
public function setUp(): void {
$this->resetAfterTest(true);
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for role filter.
*
* @package tool_usertours
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
namespace tool_usertours;
/**
* Tests for role filter.
@@ -31,7 +23,7 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_usertours_role_filter_testcase extends advanced_testcase {
class role_filter_test extends \advanced_testcase {
/**
* @var $course Test course
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for theme filter.
*
* @package tool_usertours
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
namespace tool_usertours;
/**
* Tests for theme filter.
@@ -31,7 +23,7 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_usertours_theme_filter_testcase extends advanced_testcase {
class theme_filter_test extends \advanced_testcase {
/**
* Data Provider for filter_matches function.
+2 -10
View File
@@ -14,21 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests for tour.
*
* @package tool_usertours
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_usertours;
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once($CFG->libdir . '/formslib.php');
use tool_usertours\tour;
/**
* Tests for tour.
*
@@ -36,7 +28,7 @@ use tool_usertours\tour;
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tour_testcase extends advanced_testcase {
class tour_test extends \advanced_testcase {
/**
* @var moodle_database
+7
View File
@@ -1,5 +1,12 @@
This files describes API changes in /admin/*.
=== 4.0.1 ===
* A new callback xxx_pre_enable_plugin_actions has been added in admin/modules.php. Plugins can use this callback to
force additional actions (e.g. displaying notifications, modals, etc.) before enabling the plugin. The expected
return value (bool) from the plugin callback method specifies whether the process of enabling the plugin should
continue after the added actions or not.
=== 3.11 ===
* New admin setting admin_setting_encryptedpassword allows passwords in admin settings to be
+3
View File
@@ -52,5 +52,8 @@ function xmldb_auth_cas_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2021052501, 'auth', 'cas');
}
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -44,5 +44,8 @@ function xmldb_auth_db_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+8 -10
View File
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace auth_db;
/**
* External database auth sync tests, this also tests adodb drivers
* that are matching our four supported Moodle database drivers.
@@ -23,11 +25,7 @@
* @copyright 2012 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class auth_db_testcase extends advanced_testcase {
class db_test extends \advanced_testcase {
/** @var string Original error log */
protected $oldlog;
@@ -123,7 +121,7 @@ class auth_db_testcase extends advanced_testcase {
throw new exception('Unknown database family ' . $DB->get_dbfamily());
}
$table = new xmldb_table('auth_db_users');
$table = new \xmldb_table('auth_db_users');
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null);
$table->add_field('pass', XMLDB_TYPE_CHAR, '255', null, null, null);
@@ -168,7 +166,7 @@ class auth_db_testcase extends advanced_testcase {
global $DB;
$dbman = $DB->get_manager();
$table = new xmldb_table('auth_db_users');
$table = new \xmldb_table('auth_db_users');
$dbman->drop_table($table);
ini_set('error_log', $this->oldlog);
@@ -222,7 +220,7 @@ class auth_db_testcase extends advanced_testcase {
$this->assertCount(2, $DB->get_records('user'));
$trace = new null_progress_trace();
$trace = new \null_progress_trace();
// Sync users and make sure that two events user_created werer triggered.
$sink = $this->redirectEvents();
@@ -483,7 +481,7 @@ class auth_db_testcase extends advanced_testcase {
$extdbuser3 = (object)array('name'=>'u3', 'pass'=>'heslo', 'email'=>'u3@example.com',
'lastname' => 'user<script>alert(1);</script>xss');
$extdbuser3->id = $DB->insert_record('auth_db_users', $extdbuser3);
$trace = new null_progress_trace();
$trace = new \null_progress_trace();
// Let's test user sync make sure still works as expected..
$auth->sync_users($trace, true);
@@ -529,7 +527,7 @@ class auth_db_testcase extends advanced_testcase {
}
// Sync to moodle.
$trace = new null_progress_trace();
$trace = new \null_progress_trace();
$auth->sync_users($trace, true);
// Check user is there.
+3
View File
@@ -44,5 +44,8 @@ function xmldb_auth_email_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -52,5 +52,8 @@ function xmldb_auth_ldap_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2021052501, 'auth', 'ldap');
}
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -85,5 +85,8 @@ function xmldb_auth_lti_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2022030900, 'auth', 'lti');
}
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -44,5 +44,8 @@ function xmldb_auth_manual_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+4 -9
View File
@@ -14,14 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Manual authentication tests.
*
* @package auth_manual
* @category test
* @copyright 2014 Gilles-Philippe Leblanc <gilles-philippe.leblanc@umontreal.ca>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace auth_manual;
use auth_plugin_manual;
defined('MOODLE_INTERNAL') || die();
@@ -36,7 +31,7 @@ require_once($CFG->dirroot.'/auth/manual/auth.php');
* @copyright 2014 Gilles-Philippe Leblanc <gilles-philippe.leblanc@umontreal.ca>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class auth_manual_testcase extends advanced_testcase {
class manual_test extends \advanced_testcase {
/** @var auth_plugin_manual Keeps the authentication plugin. */
protected $authplugin;
+3
View File
@@ -44,5 +44,8 @@ function xmldb_auth_mnet_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -44,5 +44,8 @@ function xmldb_auth_none_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -81,5 +81,8 @@ function xmldb_auth_oauth2_upgrade($oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3 -12
View File
@@ -14,26 +14,17 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace auth_oauth2;
/**
* Auth oauth2 auth functions tests.
*
* @package auth_oauth2
* @category test
* @copyright 2019 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
/**
* Tests for the \auth_oauth2\auth class.
*
* @copyright 2019 Shamim Rezaie
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class auth_oauth2_auth_testcase extends advanced_testcase {
class auth_test extends \advanced_testcase {
public function test_get_password_change_info() {
$this->resetAfterTest();
+3
View File
@@ -66,5 +66,8 @@ function xmldb_auth_shibboleth_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2021052501, 'auth', 'shibboleth');
}
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+2 -1
View File
@@ -17,7 +17,8 @@ Feature: Test if the login form provides the correct feedback
Then I should see "Invalid login, please try again"
Scenario: Test login language selector
Given I log in as "admin"
Given remote langimport tests are enabled
And I log in as "admin"
And I navigate to "Language > Language packs" in site administration
And I set the field "Available language packs" to "nl,es"
And I press "Install selected language pack(s)"
+2 -10
View File
@@ -14,15 +14,7 @@
// 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 core_auth\digital_consent.
*
* @package core_auth
* @copyright 2018 Mihail Geshoski
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
namespace core_auth;
/**
* Digital consent helper testcase.
@@ -31,7 +23,7 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2018 Mihail Geshoski
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_auth_digital_consent_testcase extends advanced_testcase {
class digital_consent_test extends \advanced_testcase {
public function test_is_age_digital_consent_verification_enabled() {
global $CFG;

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