Compare commits

...

784 Commits

Author SHA1 Message Date
Jun Pataleta 033858e249 Moodle release 4.1.2 2023-03-11 13:10:39 +08:00
Jun Pataleta 83c3ac53bf weekly release 4.1.1+ 2023-03-10 22:09:52 +08:00
Jun Pataleta 1e5f8ee1a2 Merge branch 'install_401_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_401_STABLE 2023-03-10 22:09:50 +08:00
Ilya Tregubov d5d64e1c8b Merge branch 'MDL-77429-401-fix' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE 2023-03-10 14:52:02 +08:00
Andrew Nicols f8b1b4092f MDL-77429 course: Change course date to previous day
When a test runs just after midnight, and the user time zone is not the
same as the server timezone, and the course is created using a generator
(which runs in server time zone) but the UI presented in the user
timezone, the course start time is still in the future.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

It's covered by an explicit test:

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

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

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

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

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

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

Add behat test to avoid MDL-67109 issue.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

table > thead > tr > th

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

It also updates the lang string for unsupported PHP version.

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

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

Wrong parameter count for Redis::zRem()

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

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

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

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

 X AND Y OR Z

When what we actually wanted was:

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

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

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

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

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

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

Thanks to @toniginard who provided a base solution for me to work
off.
2022-11-29 11:50:41 +08:00
Jonathan Champ 189c4ce4de MDL-76506 core\lock: Fix MDL_PERF and perfdebug checks 2022-11-28 18:54:13 -05:00
Paul Holden e3840909f5 MDL-76380 tool_oauth2: remove double persistent load on update.
The method already loaded the validated persistent model data on the
previous line, there's no need to do it again (while also trying to
load unvalidated properties).
2022-11-28 19:38:52 +00:00
Paul Holden 523b590711 MDL-76250 mod_assign: disable form change checker for grading options.
This was previously fixed in 8e9efe60, but seems to have regressed
somewhere along the way.
2022-11-28 16:07:29 +00:00
Paul Holden b391ed9941 MDL-76226 admin: account for preset config checkboxes other than bool.
The assumption that the settings checkbox always stores boolean values
(e.g. 0/1) isn't correct. The `perfdebug` configuration instead uses
the values 7/15.
2022-11-28 16:04:43 +00:00
Marina Glancy a5f92c041e MDL-74853 various: add second parameter to htmlentities functions
Default value of the $flag argument changed in PHP 8.1 from ENT_COMPAT to ENT_QUOTES | ENT_SUBSTITUTE
To ensure consistent behavior across different PHP version the second parameter is now required for the functions:
htmlspecialchars(), htmlentities(), htmlspecialchars_decode(), html_entity_decode() and get_html_translation_table()
2022-11-28 16:12:32 +01:00
Marina Glancy cfe0945ffb MDL-76495 libs: patch TCPDF for PHP 8.1 compatibility 2022-11-28 16:02:03 +01:00
Marina Glancy 6989097a3c MDL-76495 lib: test for qrcode in TCPDF 2022-11-28 16:02:03 +01:00
Marina Glancy 847f08dcd4 MDL-76494 libs: patch Box::Spout for PHP 8.1 compatibility 2022-11-28 15:56:54 +01:00
Marina Glancy 02430ee562 MDL-76494 core_reportbuilder: behat test for downloading report 2022-11-28 15:56:54 +01:00
Marina Glancy a8e90aaae1 MDL-76494 dataformat: tests for Excel and ODS writers 2022-11-28 15:56:53 +01:00
Paul Holden fac0c27efb MDL-76284 webservice: early exit if no users for missing capabilities. 2022-11-28 11:53:23 +00:00
Marina Glancy a7e7cd71cb MDL-76355 lib: apply a patch to googleapi for php 8.1 compatibility 2022-11-28 12:01:05 +01:00
Marina Glancy 37be6bfa4d MDL-76088 blocks: fixed incorrect use of static cache 2022-11-28 11:59:46 +01:00
Marina Glancy d311cab0c0 MDL-76493 core: make sure format_string(null) works on PHP 8.1 2022-11-28 11:55:50 +01:00
Meirza fb5a3dd643 MDL-75826 profile: Redirect to profile page if returnto is profile. 2022-11-28 16:39:11 +07:00
1646 changed files with 50217 additions and 39797 deletions
+1
View File
@@ -87,6 +87,7 @@
'no-octal-escape': 'error',
'no-proto': 'error',
'no-redeclare': 'warn',
'no-restricted-globals': ['error', { 'name': 'Notification' }],
'no-return-assign': 'error',
'no-script-url': 'error',
'no-self-assign': 'error',
+5 -4
View File
@@ -9,7 +9,7 @@ on:
- v[0-9]+.[0-9]+.[0-9]+*
env:
php: 8.0
php: 8.1
jobs:
Grunt:
@@ -59,14 +59,13 @@ jobs:
extensions:
db: mysqli
- os: ubuntu-22.04
php: 8.0
php: 8.1
db: pgsql
extensions: xmlrpc-beta
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: johanmeiring/mysql-action@tmpfs-patch
uses: moodlehq/mysql-action@v1
with:
collation server: utf8mb4_bin
mysql version: 5.7
@@ -74,6 +73,8 @@ jobs:
mysql user: test
mysql password: test
use tmpfs: true
tmpfs size: '1024M'
extra conf: --skip-log-bin
- name: Setting up DB pgsql
if: ${{ matrix.db == 'pgsql' }}
+1 -1
View File
@@ -54,5 +54,5 @@ moodle-plugin-ci.phar
/admin/tool/componentlibrary/docs
/admin/tool/componentlibrary/hugo/site/data/my-index.json
.hugo_build.lock
.phpcs.xml
phpcs.xml
jsconfig.json
+2 -2
View File
@@ -39,7 +39,7 @@ module.exports = grunt => {
{
rule: {
_attrs: {
ref: './.phpcs.xml.dist',
ref: './phpcs.xml.dist',
},
},
},
@@ -52,7 +52,7 @@ module.exports = grunt => {
});
});
grunt.file.write('.phpcs.xml', toXML(config, {
grunt.file.write('phpcs.xml', toXML(config, {
header: true,
indent: ' ',
}) + "\n");
+8 -7
View File
@@ -50,20 +50,20 @@ jobs:
php: 7.4
env: DB=mysqli TASK=PHPUNIT
# Then, conditionally, all the highest php ones (8.0)
# Then, conditionally, all the highest php ones (8.1)
- if: env(MOODLE_PHP) = "all"
php: 8.0
php: 8.1
env: DB=none TASK=CITEST
- if: env(MOODLE_PHP) = "all"
php: 8.0
php: 8.1
env: DB=none TASK=GRUNT
- if: env(MOODLE_PHP) = "all" AND (env(MOODLE_DATABASE) = "pgsql" OR env(MOODLE_DATABASE) = "all" OR env(MOODLE_DATABASE) IS NOT present)
php: 8.0
php: 8.1
env: DB=pgsql TASK=PHPUNIT
- if: env(MOODLE_PHP) = "all" AND (env(MOODLE_DATABASE) = "mysqli" OR env(MOODLE_DATABASE) = "all")
php: 8.0
php: 8.1
env: DB=mysqli TASK=PHPUNIT
cache:
@@ -90,7 +90,8 @@ install:
sudo service mysql stop
sudo mv /var/lib/mysql /mnt/ramdisk
sudo ln -s /mnt/ramdisk/mysql /var/lib/mysql
sudo service mysql restart
echo -e "[mysqld]\nskip-log-bin" | sudo tee -a /etc/mysql/my.cnf
sudo service mysql start
fi
- >
if [ "$DB" = 'pgsql' ];
@@ -101,6 +102,7 @@ install:
sudo mv /var/lib/postgresql /mnt/ramdisk
sudo ln -s /mnt/ramdisk/postgresql /var/lib/postgresql
sudo service postgresql start
sh -c 'until pg_isready -p $PGPORT; do echo "Waiting for the DB to be up..."; sleep 2; done'
fi
- >
if [ "$TASK" = 'PHPUNIT' ];
@@ -127,7 +129,6 @@ install:
fi
before_script:
- if [[ ${TRAVIS_PHP_VERSION:0:1} -gt 7 ]]; then pecl install xmlrpc-beta; fi
- echo 'max_input_vars=5000' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
- phpenv config-rm xdebug.ini
- >
+53 -35
View File
@@ -1,48 +1,66 @@
MOODLE TRADEMARKS POLICY
========================
The word "Moodle" is trademarked in many countries around the world. The word
was originally coined as an acronym: Modular Object-Oriented Dynamic Learning
Environment. The trademark is owned by Martin Dougiamas, Founder and Director
of Moodle.
The Moodle Trademark
--------------------
The law obligates trademark owners to police their marks and prevent the use of
confusingly similar names by third parties. Through this policy wed like to
make it clear how Moodle-related projects, organisations, and people can use
the Moodle trademark. Wed also like to be clear about how use of the word is
restricted when used to promote commercial Moodle services. We do this to
protect the very business model that allows us to continue developing Moodle
for you.
The brand and word "Moodle" has trade mark protection in many countries around
the world. Various Moodle™ trade marks are owned by either Moodle Pty Ltd or
one of its associated entities. The law obligates trade mark owners to police
their trade marks and prevent the use of confusingly similar names by
third parties.
Allowed uses
------------
We have created a more concise and thorough set of Trademark Guidelines
(https://moodle.com/wp-content/uploads/2023/02/Moodle-Trademark-Guidelines-2023-4.pdf)
to help you understand how to comply with Moodle's trade mark requirements.
The Trademark Guidelines will also assist our Moodle Certified Partners and the
community to understand some of the principles that inform Moodle's stance
whenever potential infringement has been detected by us or our community.
The following uses dont require any permission at all:
We need to be clear about use of the word "Moodle" and how we restrict its use
when promoting commercial Moodle™ branded services. The proper use of
trade marks reliably assures consumers about the quality of the associated
products or services and where they have been derived from. Because the
Moodle LMS is made available under the open source GNU General Public License'
that permits you to modify the copyrighted software, the distribution of such
modified software in combination with Moodle trade marks can potentially
mislead others in the community. To be clear, the GNU GPL does not include an
implied right or licence to use Moodle's trade marks.
* Referring to the software or the Moodle project.
* Describing your own Moodle implementation (including within corporate
settings).
We do all this to protect the very business model that allows us to continue
developing various Moodle software solutions for you.
Allowed uses of "Moodle"
------------------------
The following uses don't require any permission at all:
* Referring to the software or the Moodle project as the "Moodle™ software"
or the "Moodle™ project"
* Describing your own implementation of the Moodle™ software platform
(including within corporate settings).
* Describing a Moodle-based community hub.
* Describing some software youve made that integrates with Moodle
(eg a Moodle integration feature on another system).
* Describing certain software you've made that integrates with Moodle
branded software (e.g. a Moodle integration feature on another system).
Restricted uses
---------------
Restricted uses of "Moodle"
---------------------------
The following uses are generally prohibited without explicit and direct
permission being granted to you by Moodle Pty Ltd. We do this to protect the
Moodle project from software and sites which could confuse people. Please
contact us to ask for permission in writing.
Moodle project from software and sites which could confuse people. If in
doubt, reach out for clarification at <trademarks@moodle.com>
* You cant use "Moodle" in the name of your software (including Mobile apps)
* You cant use "Moodle" in your company name
* You cant use "Moodle" in your domain name
* You cant use "Moodle" in advertising-related keywords (such as Adsense)
* You cant use "Moodle" to describe services around Moodle (such as hosting,
training, support, consulting, course creation services, theme development,
customisation, installation, integration and certification). This applies
even if you do not charge for the services. Note that usually only Moodle
Partners have this permission.
For information about the Moodle Partner Certification Mark as well as for how
to contact us, please see <https://moodle.com/trademarks/>.
* You can't use the word "Moodle" or any Moodle logos for commercial purposes
without prior written permission from Moodle HQ.
* You can't use "Moodle" in the name of your software (including Mobile apps).
* You can't use "Moodle" in your company name.
* You can't use "Moodle" in your domain name.
* You can't use "Moodle" in advertising-related keywords (such as Adsense).
* You can't use "Moodle" to describe services around Moodle
(such as hosting, training, support, consulting, course creation services,
theme development, customisation, installation, integration, analytics
and certification) that cause consumers to be confused that you are
associated with Moodle HQ if you are not.
This applies even if you do not charge for the services.
Note that usually only Moodle Partners have this permission.
+189
View File
@@ -3371,6 +3371,7 @@
<VENDOR name="oracle" version="11.2" />
</DATABASE>
<PHP version="7.3.0" level="required">
<RESTRICT function="restrict_php_version_81" message="unsupportedphpversion81" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -3557,6 +3558,7 @@
<VENDOR name="oracle" version="11.2" />
</DATABASE>
<PHP version="7.3.0" level="required">
<RESTRICT function="restrict_php_version_81" message="unsupportedphpversion81" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -3922,4 +3924,191 @@
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="4.2" requires="3.11.8">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="10.6.7" />
<VENDOR name="mysql" version="8.0" />
<VENDOR name="postgres" version="13" />
<VENDOR name="mssql" version="14.0" />
<VENDOR name="oracle" version="19" />
</DATABASE>
<PHP version="8.0.0" level="required">
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="required">
<FEEDBACK>
<ON_ERROR message="mbstringrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="required">
<FEEDBACK>
<ON_ERROR message="opensslrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlreader" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="required">
<FEEDBACK>
<ON_ERROR message="intlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
<PHP_EXTENSION name="fileinfo" level="required"/>
<PHP_EXTENSION name="sodium" level="required"/>
<PHP_EXTENSION name="exif" level="optional"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbstorageengine" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_unoconv_version" level="optional">
<FEEDBACK>
<ON_CHECK message="unoconvwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_format" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfileformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_per_table" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfilepertable" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_large_prefix" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddblargeprefix" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_is_https" level="optional">
<FEEDBACK>
<ON_CHECK message="ishttpswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_incomplete_unicode_support" level="optional">
<FEEDBACK>
<ON_CHECK message="incompleteunicodesupport" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_sixtyfour_bits" level="required">
<FEEDBACK>
<ON_ERROR message="sixtyfourbitsrequired" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_max_input_vars" level="optional">
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_admin_dir_usage" level="optional">
<FEEDBACK>
<ON_CHECK message="iscustomadminwarnings" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_xmlrpc_usage" level="optional">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+18 -3
View File
@@ -46,11 +46,23 @@
$formcontinue = new single_button(new moodle_url('index.php', array('confirm' => md5($mnet->public_key))), get_string('yes'));
$formcancel = new single_button(new moodle_url('index.php', array()), get_string('no'));
echo $OUTPUT->header();
echo $OUTPUT->confirm(get_string("deletekeycheck", "mnet"), $formcontinue, $formcancel);
echo $OUTPUT->footer();
exit;
} else {
// We're deleting
// If no/cancel then redirect back to the network setting page.
if (!isset($form->confirm)) {
redirect(
new moodle_url('/admin/mnet/index.php'),
get_string('keydeletedcancelled', 'mnet'),
null,
\core\output\notification::NOTIFY_SUCCESS
);
}
if (!isset($SESSION->mnet_confirm_delete_key)) {
// fail - you're being attacked?
@@ -63,8 +75,12 @@
if($time < time() - 60) {
// fail - you're out of time.
throw new \moodle_exception ('deleteoutoftime', 'mnet', 'index.php');
exit;
redirect(
new moodle_url('/admin/mnet/index.php'),
get_string('deleteoutoftime', 'mnet'),
null,
\core\output\notification::NOTIFY_WARNING
);
}
if ($key != md5(sha1($mnet->keypair['keypair_PEM']))) {
@@ -75,7 +91,6 @@
$mnet->replace_keys();
redirect('index.php', get_string('keydeleted','mnet'));
exit;
}
}
$hosts = $DB->get_records_select('mnet_host', "id <> ? AND deleted = 0", array($CFG->mnet_localhost_id), 'wwwroot ASC');
+10 -19
View File
@@ -31,29 +31,20 @@
if (!empty($hide) and confirm_sesskey()) {
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
$class::enable_plugin($hide, false);
admin_get_root(true, false); // settings not required - only pages
if ($class::enable_plugin($hide, false)) {
// Settings not required - only pages.
admin_get_root(true, false);
}
redirect(new moodle_url('/admin/modules.php'));
}
if (!empty($show) and confirm_sesskey()) {
$canenablemodule = true;
$modulename = $show;
// Invoking a callback function that enables plugins to force additional actions (e.g. displaying notifications,
// modals, etc.) and also specify through its returned value (bool) whether the process of enabling the plugin
// should continue after these actions or not.
if (component_callback_exists("mod_{$modulename}", 'pre_enable_plugin_actions')) {
$canenablemodule = component_callback("mod_{$modulename}", 'pre_enable_plugin_actions');
}
if ($canenablemodule) {
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
$class::enable_plugin($show, true);
admin_get_root(true, false); // Settings not required - only pages.
redirect(new moodle_url('/admin/modules.php'));
if (!empty($show) && confirm_sesskey()) {
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
if ($class::enable_plugin($show, true)) {
// Settings not required - only pages.
admin_get_root(true, false);
}
redirect(new moodle_url('/admin/modules.php'));
}
echo $OUTPUT->header();
@@ -16,6 +16,8 @@
namespace core_adminpresets\local\setting;
use admin_setting_configcheckbox;
/**
* Checkbox setting.
*
@@ -26,15 +28,15 @@ namespace core_adminpresets\local\setting;
*/
class adminpresets_admin_setting_configcheckbox extends adminpresets_setting {
protected function set_value($value) {
$this->value = clean_param($value, PARAM_BOOL);
$this->set_visiblevalue();
return true;
}
/**
* Sets the visible name for the setting selected value
*/
protected function set_visiblevalue() {
if ($this->value) {
/** @var admin_setting_configcheckbox $settingdata */
$settingdata = $this->get_settingdata();
// We need to compare the "yes" value of the inner checkbox, which isn't necessarily boolean.
if ($this->value == $settingdata->yes) {
$str = get_string('yes');
} else {
$str = get_string('no');
@@ -34,7 +34,7 @@ class adminpresets_admin_setting_configselect extends adminpresets_setting {
*/
protected function set_value($value) {
// When we intantiate the class we need the choices.
if (empty($this->settindata->choices) && method_exists($this->settingdata, 'load_choices')) {
if (empty($this->settingdata->choices) && method_exists($this->settingdata, 'load_choices')) {
$this->settingdata->load_choices();
}
+17 -29
View File
@@ -24,6 +24,7 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core_question\local\bank\question_version_status;
require_once(__DIR__ . '/../config.php');
require_once($CFG->libdir . '/questionlib.php');
@@ -42,36 +43,23 @@ $qtypes = question_bank::get_all_qtypes();
$pluginmanager = core_plugin_manager::instance();
// Get some data we will need - question counts and which types are needed.
$hiddenstatus = \core_question\local\bank\question_version_status::QUESTION_STATUS_HIDDEN;
$draftstatus = \core_question\local\bank\question_version_status::QUESTION_STATUS_DRAFT;
// The second JOIN on question_versions (qv2) is to get the latest version of each question. 
// (Using this sort of JOIN is a known trick for doing this in the fastest possible way.)
$counts = $DB->get_records_sql("
SELECT q.qtype,
COUNT(qv.id) AS numquestions,
SUM(CASE WHEN qv.status = :hiddenstatus THEN 1 ELSE 0 END) AS numhidden,
SUM(CASE WHEN qv.status = :draftstatus THEN 1 ELSE 0 END) AS numdraft
FROM {question} q
JOIN {question_versions} qv ON q.id = qv.questionid
LEFT JOIN {question_versions} qv2 ON qv.questionbankentryid = qv2.questionbankentryid AND qv.version < qv2.version
WHERE qv2.questionbankentryid IS NULL
GROUP BY q.qtype
", [
'hiddenstatus' => question_version_status::QUESTION_STATUS_HIDDEN,
'draftstatus' => question_version_status::QUESTION_STATUS_DRAFT,
]);
$sql = "SELECT result.qtype,
SUM(result.numquestions) AS numquestions,
SUM(result.numhidden) AS numhidden,
SUM(result.numdraft) AS numdraft
FROM (SELECT data.qtype,
data.versionid,
COUNT(data.numquestions) AS numquestions,
(SELECT COUNT(qv.id)
FROM {question_versions} qv
WHERE qv.id = data.versionid
AND qv.status = :hiddenstatus) AS numhidden,
(SELECT COUNT(qv.id)
FROM {question_versions} qv
WHERE qv.id = data.versionid
AND qv.status = :draftstatus) AS numdraft
FROM (SELECT q.qtype, qv.id AS versionid, 1 AS numquestions
FROM {question} q
JOIN {question_versions} qv ON qv.questionid = q.id
JOIN {question_bank_entries} qbe ON qbe.id = qv.questionbankentryid
AND qv.version = (SELECT MAX(v.version)
FROM {question_versions} v
JOIN {question_bank_entries} be ON be.id = v.questionbankentryid
WHERE be.id = qbe.id)) data
GROUP BY data.qtype, data.versionid) result
GROUP BY result.qtype";
$counts = $DB->get_records_sql($sql, ['hiddenstatus' => $hiddenstatus, 'draftstatus' => $draftstatus]);
$needed = [];
foreach ($qtypes as $qtypename => $qtype) {
if (!isset($counts[$qtypename])) {
@@ -533,7 +533,7 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
protected function get_description_field($id) {
return '<textarea class="form-textarea form-control" id="'. s($id) .'" name="description" rows="10" cols="50">' .
htmlspecialchars($this->role->description) .
htmlspecialchars($this->role->description, ENT_COMPAT) .
'</textarea>';
}
+1 -1
View File
@@ -187,7 +187,7 @@ class provider_test extends provider_testcase {
$writer = writer::with_context($context);
$this->assertTrue($writer->has_any_data());
if ($context->contextlevel == CONTEXT_MODULE) {
if ($data = $writer->get_data($subcontextstudent)) {
if ($data = (array)$writer->get_data($subcontextstudent)) {
$this->assertEquals($user->id, reset($data)->userid);
}
if ($data = (array)$writer->get_data($subcontextrc)) {
+2 -1
View File
@@ -477,7 +477,8 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_heading('automatedsettings', new lang_string('automatedsettings','backup'), new lang_string('recyclebin_desc', 'backup')));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_users', new lang_string('generalusers', 'backup'), new lang_string('configgeneralusers', 'backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_role_assignments', new lang_string('generalroleassignments','backup'), new lang_string('configgeneralroleassignments','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_activities', new lang_string('generalactivities','backup'), new lang_string('configgeneralactivities','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_activities', new lang_string('generalactivities', 'backup'),
new lang_string('backupautoactivitiesdescription', 'backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_blocks', new lang_string('generalblocks','backup'), new lang_string('configgeneralblocks','backup'), 1));
$temp->add(new admin_setting_configcheckbox(
'backup/backup_auto_files',
+1 -1
View File
@@ -101,7 +101,7 @@ if ($hassiteconfig) {
new lang_string('limitconcurrentlogins', 'core_auth'),
new lang_string('limitconcurrentlogins_desc', 'core_auth'), 0, $options));
$temp->add(new admin_setting_configtext('alternateloginurl', new lang_string('alternateloginurl', 'auth'),
new lang_string('alternatelogin', 'auth', htmlspecialchars(get_login_url())), ''));
new lang_string('alternatelogin', 'auth', htmlspecialchars(get_login_url(), ENT_COMPAT)), ''));
$temp->add(new admin_setting_configtext('forgottenpasswordurl', new lang_string('forgottenpasswordurl', 'auth'),
new lang_string('forgottenpassword', 'auth'), '', PARAM_URL));
$temp->add(new admin_setting_confightmleditor('auth_instructions', new lang_string('instructions', 'auth'),
@@ -51,12 +51,12 @@
<div class="form-password">
<span data-passwordunmask="wrapper" data-passwordunmaskid="{{ id }}">
<span data-passwordunmask="editor">
<input type="hidden"
<input type="password"
name="{{ name }}"
id="{{ id }}"
value="{{ value }}"
data-size="{{ size }}"
class="form-control d-inline-block"
class="form-control d-none"
>
</span>
<a href="#" data-passwordunmask="edit" title="{{ edithint }}">
+3 -3
View File
@@ -18,7 +18,7 @@ Feature: An administrator can browse user accounts
When I navigate to "Users > Accounts > Browse list of users" in site administration
# Name field always present, email field is default for showidentity.
Then the following should exist in the "users" table:
| First name / Surname | Email address |
| First name / Last name | Email address |
| User One | one@example.com |
| User Two | two@example.com |
# Should not see other identity fields or non-default name fields.
@@ -34,7 +34,7 @@ Feature: An administrator can browse user accounts
| alternativefullnameformat | firstnamephonetic lastname |
When I navigate to "Users > Accounts > Browse list of users" in site administration
Then the following should exist in the "users" table:
| First name - phonetic / Surname | Email address |
| First name - phonetic / Last name | Email address |
| Yewzer One | one@example.com |
| Yoozare Two | two@example.com |
@@ -43,7 +43,7 @@ Feature: An administrator can browse user accounts
| showuseridentity | department,profile_field_frog |
When I navigate to "Users > Accounts > Browse list of users" in site administration
Then the following should exist in the "users" table:
| First name / Surname | Favourite frog | Department |
| First name / Last name | Favourite frog | Department |
| User One | Kermit | Attack |
| User Two | Tree | Defence |
And I should not see "Email address" in the "table" "css_element"
@@ -15,7 +15,7 @@ Feature: Allowing multiple accounts to have the same email address
And I set the following fields to these values:
| Username | s2 |
| First name | Jane |
| Surname | Doe |
| Last name | Doe |
| Email address | <email> |
| New password | test |
And I press "Create user"
@@ -35,9 +35,7 @@ Feature: Allowing multiple accounts to have the same email address
| username | firstname | lastname | email |
| s1 | John | Doe | s1@example.com |
| s2 | Jane | Doe | s2@example.com |
When I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
And I click on "Edit" "link" in the "Jane Doe" "table_row"
When I am on the "s2" "user > editing" page logged in as "admin"
And I set the field "Email address" to "<email>"
And I press "Update profile"
Then I should <expect> "This email address is already registered."
@@ -8,7 +8,7 @@ Feature: An administrator can configure the available user list filters
When I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
@@ -30,7 +30,7 @@ Feature: An administrator can configure the available user list filters
And I should not see "MNet ID provider" in the "New filter" "fieldset"
And I navigate to "Users > Accounts > Bulk user actions" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
@@ -57,7 +57,7 @@ Feature: An administrator can configure the available user list filters
And I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should see "Username" in the "New filter" "fieldset"
And I should see "Email address" in the "New filter" "fieldset"
@@ -79,7 +79,7 @@ Feature: An administrator can configure the available user list filters
And I should not see "MNet ID provider" in the "New filter" "fieldset"
And I navigate to "Users > Accounts > Bulk user actions" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should see "Username" in the "New filter" "fieldset"
And I should see "Email address" in the "New filter" "fieldset"
@@ -106,7 +106,7 @@ Feature: An administrator can configure the available user list filters
And I log in as "admin"
And I navigate to "Users > Accounts > Browse list of users" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
@@ -128,7 +128,7 @@ Feature: An administrator can configure the available user list filters
And I should not see "MNet ID provider" in the "New filter" "fieldset"
And I navigate to "Users > Accounts > Bulk user actions" in site administration
Then I should see "User full name"
And I should not see "Surname" in the "New filter" "fieldset"
And I should not see "Last name" in the "New filter" "fieldset"
And I should not see "Firstname" in the "New filter" "fieldset"
And I should not see "Username" in the "New filter" "fieldset"
And I should not see "Email address" in the "New filter" "fieldset"
@@ -11,8 +11,11 @@ Feature: I can add a new preset with current settings
And I set the field "Name" to "Starter"
And I set the field "Description" to "Non-core starter preset"
When I click on "Create preset" "button"
Then I should see "Moodle with all of the most popular features" in the "Starter" "table_row"
And I should see "Starter" in the "Non-core starter preset" "table_row"
Then the following should exist in the "Site admin presets table" table:
| Name | Description |
| Starter | Moodle with all of the most popular features, including Assignment, Feedback, Forum, H5P, Quiz and Completion tracking. |
| Full | All the Starter features plus External (LTI) tool, SCORM, Workshop, Analytics, Badges, Competencies, Learning plans and lots more. |
| Starter | Non-core starter preset |
Scenario: Export current settings
Given I click on "Create preset" "button"
@@ -45,7 +45,7 @@ class helper {
// Form field is PARAM_ALPHANUMEXT and we are sending fully qualified class names
// as option names, but replacing the backslash for a string that is really unlikely
// to ever be part of a class name.
return str_replace('\\', '__', $class);
return str_replace('\\', '__', $class ?? '');
}
/**
+11
View File
@@ -0,0 +1,11 @@
define("tool_behat/steps",["exports","core/ajax","core/templates","core/pending"],(function(_exports,_ajax,_templates,_pending){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
/**
* Enhancements for the step definitions page.
*
* @module tool_behat/steps
* @copyright 2022 Catalyst IT EU
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_templates=_interopRequireDefault(_templates),_pending=_interopRequireDefault(_pending);_exports.init=()=>{document.addEventListener("change",(async e=>{const entityElement=e.target.closest(".entities"),stepElement=e.target.closest(".stepcontent");if(!entityElement||!stepElement)return;const pendingPromise=new _pending.default("tool_behat/steps:change"),entityData=await(entityType=e.target.value,_ajax.default.call([{methodname:"tool_behat_get_entity_generator",args:{entitytype:entityType}}])[0]);var entityType;const{html:html,js:js}=await(entityData=>{var _entityData$required;return null!==(_entityData$required=entityData.required)&&void 0!==_entityData$required&&_entityData$required.length?_templates.default.renderForPromise("tool_behat/steprequiredfields",{fields:entityData.required}):Promise.resolve({html:"",js:""})})(entityData),stepRequiredFields=stepElement.querySelector(".steprequiredfields");stepRequiredFields?await _templates.default.replaceNode(stepRequiredFields,html,js):await _templates.default.appendNodeContents(stepElement,html,js),pendingPromise.resolve()}))}}));
//# sourceMappingURL=steps.min.js.map
@@ -0,0 +1 @@
{"version":3,"file":"steps.min.js","sources":["../src/steps.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\nimport Ajax from 'core/ajax';\nimport Templates from 'core/templates';\nimport PendingJS from 'core/pending';\n\n/**\n * Enhancements for the step definitions page.\n *\n * @module tool_behat/steps\n * @copyright 2022 Catalyst IT EU\n * @author Mark Johnson <mark.johnson@catalyst-eu.net>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * Call the get_entity_generator web service function\n *\n * Takes the name of an entity generator and returns an object containing a list of the required fields.\n *\n * @param {String} entityType\n * @returns {Promise}\n */\nconst getGeneratorEntities = (entityType) => Ajax.call([{\n methodname: 'tool_behat_get_entity_generator',\n args: {entitytype: entityType}\n}])[0];\n\n/**\n * Render HTML for required fields\n *\n * Takes the entity data returned from getGeneratorEntities and renders the HTML to display the required fields.\n *\n * @param {String} entityData\n * @return {Promise}\n */\nconst getRequiredFieldsContent = (entityData) => {\n if (!entityData.required?.length) {\n return Promise.resolve({\n html: '',\n js: ''\n });\n }\n return Templates.renderForPromise('tool_behat/steprequiredfields', {fields: entityData.required});\n};\n\nexport const init = () => {\n // When an entity is selected in the \"the following exist\" step, fetch and display the required fields.\n document.addEventListener('change', async(e) => {\n const entityElement = e.target.closest('.entities');\n const stepElement = e.target.closest('.stepcontent');\n if (!entityElement || !stepElement) {\n return;\n }\n\n const pendingPromise = new PendingJS('tool_behat/steps:change');\n\n const entityData = await getGeneratorEntities(e.target.value);\n const {html, js} = await getRequiredFieldsContent(entityData);\n\n const stepRequiredFields = stepElement.querySelector('.steprequiredfields');\n if (stepRequiredFields) {\n await Templates.replaceNode(stepRequiredFields, html, js);\n } else {\n await Templates.appendNodeContents(stepElement, html, js);\n }\n pendingPromise.resolve();\n });\n};\n"],"names":["document","addEventListener","async","entityElement","e","target","closest","stepElement","pendingPromise","PendingJS","entityData","entityType","value","Ajax","call","methodname","args","entitytype","html","js","required","_entityData$required","length","Templates","renderForPromise","fields","Promise","resolve","getRequiredFieldsContent","stepRequiredFields","querySelector","replaceNode","appendNodeContents"],"mappings":";;;;;;;;4NA2DoB,KAEhBA,SAASC,iBAAiB,UAAUC,MAAAA,UAC1BC,cAAgBC,EAAEC,OAAOC,QAAQ,aACjCC,YAAcH,EAAEC,OAAOC,QAAQ,oBAChCH,gBAAkBI,yBAIjBC,eAAiB,IAAIC,iBAAU,2BAE/BC,iBAlCgBC,WAkCwBP,EAAEC,OAAOO,MAlClBC,cAAKC,KAAK,CAAC,CACpDC,WAAY,kCACZC,KAAM,CAACC,WAAYN,eACnB,IAH0BA,IAAAA,iBAmChBO,KAACA,KAADC,GAAOA,SAtBaT,CAAAA,0EACzBA,WAAWU,0CAAXC,qBAAqBC,OAMnBC,mBAAUC,iBAAiB,gCAAiC,CAACC,OAAQf,WAAWU,WAL5EM,QAAQC,QAAQ,CACnBT,KAAM,GACNC,GAAI,MAkBiBS,CAAyBlB,YAE5CmB,mBAAqBtB,YAAYuB,cAAc,uBACjDD,yBACMN,mBAAUQ,YAAYF,mBAAoBX,KAAMC,UAEhDI,mBAAUS,mBAAmBzB,YAAaW,KAAMC,IAE1DX,eAAemB"}
+82
View File
@@ -0,0 +1,82 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import Ajax from 'core/ajax';
import Templates from 'core/templates';
import PendingJS from 'core/pending';
/**
* Enhancements for the step definitions page.
*
* @module tool_behat/steps
* @copyright 2022 Catalyst IT EU
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Call the get_entity_generator web service function
*
* Takes the name of an entity generator and returns an object containing a list of the required fields.
*
* @param {String} entityType
* @returns {Promise}
*/
const getGeneratorEntities = (entityType) => Ajax.call([{
methodname: 'tool_behat_get_entity_generator',
args: {entitytype: entityType}
}])[0];
/**
* Render HTML for required fields
*
* Takes the entity data returned from getGeneratorEntities and renders the HTML to display the required fields.
*
* @param {String} entityData
* @return {Promise}
*/
const getRequiredFieldsContent = (entityData) => {
if (!entityData.required?.length) {
return Promise.resolve({
html: '',
js: ''
});
}
return Templates.renderForPromise('tool_behat/steprequiredfields', {fields: entityData.required});
};
export const init = () => {
// When an entity is selected in the "the following exist" step, fetch and display the required fields.
document.addEventListener('change', async(e) => {
const entityElement = e.target.closest('.entities');
const stepElement = e.target.closest('.stepcontent');
if (!entityElement || !stepElement) {
return;
}
const pendingPromise = new PendingJS('tool_behat/steps:change');
const entityData = await getGeneratorEntities(e.target.value);
const {html, js} = await getRequiredFieldsContent(entityData);
const stepRequiredFields = stepElement.querySelector('.steprequiredfields');
if (stepRequiredFields) {
await Templates.replaceNode(stepRequiredFields, html, js);
} else {
await Templates.appendNodeContents(stepElement, html, js);
}
pendingPromise.resolve();
});
};
@@ -0,0 +1,92 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Return data about an entity generator.
*
* @package tool_behat
* @copyright 2022 onwards Catalyst IT EU {@link https://catalyst-eu.net}
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_behat\external;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/externallib.php');
/**
* External function for getting properties of entity generators.
*/
class get_entity_generator extends \external_api {
/**
* Define parameters for external function.
*
* The parameter is either in the format 'entity' or 'component_name > entity'. There is no appropriate param type for a
* string like this containing angle brackets, so we will do PARAM_RAW. The value will be parsed by
* behat_data_generators::parse_entity_type, which validates the format of the parameter and throws an exception if it is not
* correct.
*
* @return \external_function_parameters
*/
public static function execute_parameters(): \external_function_parameters {
return new \external_function_parameters([
'entitytype' => new \external_value(PARAM_RAW, 'Entity type that can be created by a generator.'),
]);
}
/**
* Return a list of the required fields for a given entity type.
*
* @param string $entitytype
* @return array
*/
public static function execute(string $entitytype): array {
global $CFG;
// Ensure we can load Behat and Facebook namespaces in behat libraries.
require_once("{$CFG->dirroot}/vendor/autoload.php");
require_once("{$CFG->libdir}/tests/behat/behat_data_generators.php");
$params = self::validate_parameters(self::execute_parameters(), ['entitytype' => $entitytype]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
$generators = new \behat_data_generators();
$entity = $generators->get_entity($params['entitytype']);
return ['required' => $entity['required']];
}
/**
* Define return values.
*
* Return required fields
*
* @return \external_single_structure
*/
public static function execute_returns(): \external_single_structure {
return new \external_single_structure([
'required' => new \external_multiple_structure(
new \external_value(PARAM_TEXT, 'Required field'),
'Required fields',
VALUE_OPTIONAL
),
]);
}
}
+2 -2
View File
@@ -278,7 +278,7 @@ if (empty($parallelrun)) {
// Print combined run o/p from processes.
$exitcodes = print_combined_run_output($processes, $stoponfail);
// Time to finish run.
$time = round(microtime(true) - $time, 1);
$time = round(microtime(true) - $time, 0);
echo "Finished in " . gmdate("G\h i\m s\s", $time) . PHP_EOL . PHP_EOL;
ksort($exitcodes);
@@ -437,7 +437,7 @@ function print_combined_run_output($processes, $stoponfail = false) {
$process->stop(0);
}
$strlentoprint = strlen($update);
$strlentoprint = strlen($update ?? '');
// If not enough dots printed on line then just print.
if ($strlentoprint < $remainingprintlen) {
+1 -1
View File
@@ -360,7 +360,7 @@ function print_combined_drop_output($processes) {
$op = $process->getIncrementalOutput();
if (trim($op)) {
$update = preg_filter('#^\s*([FS\.\-]+)(?:\s+\d+)?\s*$#', '$1', $op);
$strlentoprint = strlen($update);
$strlentoprint = $update ? strlen($update) : 0;
// If not enough dots printed on line then just print.
if ($strlentoprint < $remainingprintlen) {
+37
View File
@@ -0,0 +1,37 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Define web service functions for tool_behat
*
* @package tool_behat
* @copyright 2022 onwards Catalyst IT EU {@link https://catalyst-eu.net}
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$functions = [
'tool_behat_get_entity_generator' => [
'classname' => 'tool_behat\\external\\get_entity_generator',
'methodname' => 'execute',
'description' => 'Get the generator details for an entity',
'type' => 'read',
'ajax' => true,
'capabilities' => 'moodle/site:config'
]
];
+1
View File
@@ -56,6 +56,7 @@ if ($components) {
$form = new steps_definitions_form(null, array('components' => $componentswithsteps));
// Output contents.
$PAGE->requires->js_call_amd('tool_behat/steps', 'init');
$renderer = $PAGE->get_renderer('tool_behat');
echo $renderer->render_stepsdefinitions($steps, $form);
+28
View File
@@ -24,6 +24,8 @@
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/behat/classes/behat_generator_base.php');
/**
* Renderer for behat tool web features
*
@@ -106,6 +108,32 @@ class tool_behat_renderer extends plugin_renderer_base {
},
$stepsdefinitions
);
$elementstrings = [];
$count = 1;
$stepsdefinitions = preg_replace_callback('/(the following ")ELEMENT\d?_STRING(" exist:)/',
function($matches) use (&$elementstrings, &$count) {
// Replace element type arguments with a user-friendly select.
if (empty($elementstrings)) {
$behatgenerators = new behat_data_generators();
$componententities = $behatgenerators->get_all_entities();
ksort($componententities);
$elementstrings = [];
foreach ($componententities as $component => $entities) {
asort($entities);
foreach ($entities as $entity) {
$string = ($component === 'core') ? $entity : $component . ' > ' . $entity;
$elementstrings[$string] = $string;
}
}
}
$select = html_writer::select($elementstrings, 'entities' . $count, '', ['' => 'choosedots'],
['class' => 'entities']);
$count++;
return $matches[1] . $select . $matches[2];
},
$stepsdefinitions
);
}
// Steps definitions.
+6
View File
@@ -29,3 +29,9 @@
#page-admin-tool-behat-index .steps-definitions .stepregex {
color: #060;
}
#page-admin-tool-behat-index .steprequiredfields {
font-weight: bold;
font-size: 1em;
margin-top: 1em;
}
@@ -1,5 +1,5 @@
{{!
This file is part of Moodle - http://moodle.org/
This file is part of Moodle - https://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,19 +15,19 @@
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_question/showtext_checkbox
@template tool_behat/steprequiredfields
Display a Gherkin-style table row showing required columns for a step.
Example context (json):
{
"sortdata": [
{
"checked": "true/false"
}
"fields": [
"user",
"role",
"context"
]
}
}}
<div>
<input type="hidden" name="qbshowtext" value="0" id="qbshowtext_off">
<input id="qbshowtext_on" class="searchoptions mr-1" type="checkbox" value="1" name="qbshowtext" {{#checked}} checked{{/checked}}>
<label for="qbshowtext_on">{{#str}} showquestiontext, question {{/str}}</label>
</div>
<pre class="steprequiredfields">
|{{#fields}} {{{.}}} |{{/fields}}
</pre>
@@ -30,10 +30,9 @@ Feature: Verify that all form fields values can be get and set
| student2 | G2 |
| student3 | G2 |
And the following "activities" exist:
| activity | course | idnumber | name | intro | firstpagetitle | wikimode | visible |
| wiki | C1 | wiki1 | Test this one | Test this one | Test this one | collaborative | 0 |
And I log in as "admin"
And I am on the "Course 1" "reset" page
| activity | course | idnumber | name | firstpagetitle | wikimode | visible |
| wiki | C1 | wiki1 | Test this one | Test this one | collaborative | 0 |
And I am on the "Course 1" "reset" page logged in as admin
# Select (multi-select) - Checking "the select box should contain".
And I expand all fieldsets
And the "Unenrol users" select box should contain "No roles"
@@ -60,16 +59,14 @@ Feature: Verify that all form fields values can be get and set
# Checkbox - Checking "I set the field" and "The field matches value" ticked.
And I set the field "Force format" to "1"
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the field "Force format" matches value "1"
And the field "Force format" does not match value ""
# Checkbox - Checking "I set the field" and "The field matches value" unticked.
And I set the field "Force format" to ""
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the field "Force format" matches value ""
And the field "Force format" does not match value "1"
@@ -77,8 +74,7 @@ Feature: Verify that all form fields values can be get and set
And I set the following fields to these values:
| Force format | 1 |
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the following fields match these values:
| Force format | 1 |
@@ -88,8 +84,7 @@ Feature: Verify that all form fields values can be get and set
And I set the following fields to these values:
| Force format | |
And I press "Save and return to course"
And I am on the "Test this one" "wiki activity" page
And I navigate to "Settings" in current page administration
And I am on the "Test this one" "wiki activity editing" page
And I expand all fieldsets
And the following fields match these values:
| Force format | |
@@ -142,10 +137,11 @@ Feature: Verify that all form fields values can be get and set
And I navigate to "Settings" in current page administration
And the field "Course ID number" matches value "Course id number"
Scenario: with JS disabled all form fields getters and setters works as expected
@javascript
Scenario: with JS enabled all form fields getters and setters works as expected
Given the following "activities" exist:
| activity | course | name |
| lesson | C1 | Test lesson |
Then I am on the "Course 1" "groups" page
# Select (multi-select & AJAX) - Checking "I set the field" and "select box should contain".
And I set the field "groups" to "Group 2"
@@ -157,11 +153,8 @@ Feature: Verify that all form fields values can be get and set
And the "members" select box should contain "Student 2 (s2@example.com)"
And the "members" select box should not contain "Student 3 (s3@example.com)"
# Checkbox (AJAX) - Checking "I set the field" and "I set the following fields to these values".
And I am on "Course 1" course homepage
And I add a "Lesson" to section "1"
And I am on the "Test lesson" "lesson activity editing" page
And I set the following fields to these values:
| Name | Test lesson |
| Description | Test lesson description |
| available[enabled] | 1 |
And I set the field "deadline[enabled]" to "1"
# Checkbox (AJAX) - Checking "the field matches value" before saving.
@@ -13,6 +13,10 @@ Feature: List the system steps definitions
Scenario: Accessing the list
Then I should see "Step definitions"
And I should not see "There aren't steps definitions matching this filter"
And I should not see "the following \"ELEMENT_STRING\" exist:"
And "entities1" "select" should exist
And the "entities1" select box should contain "users"
And the "entities1" select box should contain "mod_assign > submissions"
@javascript
Scenario: Filtering by type
@@ -34,3 +38,11 @@ Feature: List the system steps definitions
Then I should not see "There aren't steps definitions matching this filter"
And I should see "Checks the provided element and selector type exists in the current page."
And I should see "Checks that an element and selector type exists in another element and selector type on the current page."
@javascript
Scenario: Get required fields
Given I set the field "entities1" to "users"
And I should see "| username |"
When I set the field "entities1" to "mod_quiz > user overrides"
Then I should not see "| username |"
And I should see "| quiz | user |"
@@ -13,24 +13,24 @@ Feature: Transform steps arguments
And I open my profile in edit mode
Scenario: Use nasty strings on steps arguments
When I set the field "Surname" to "$NASTYSTRING1"
When I set the field "Last name" to "$NASTYSTRING1"
And I set the field "Description" to "$NASTYSTRING2"
And I set the field "City/town" to "$NASTYSTRING3"
And I press "Update profile"
And I click on "Edit profile" "link" in the "region-main" "region"
Then I should not see "NASTYSTRING"
And the field "Surname" matches value "$NASTYSTRING1"
And the field "Last name" matches value "$NASTYSTRING1"
And the field "City/town" matches value "$NASTYSTRING3"
Scenario: Use nasty strings on table nodes
When I set the following fields to these values:
| Surname | $NASTYSTRING1 |
| Last name | $NASTYSTRING1 |
| Description | $NASTYSTRING2 |
| City/town | $NASTYSTRING3 |
And I press "Update profile"
And I click on "Edit profile" "link" in the "region-main" "region"
Then I should not see "NASTYSTRING"
And the field "Surname" matches value "$NASTYSTRING1"
And the field "Last name" matches value "$NASTYSTRING1"
And the field "City/town" matches value "$NASTYSTRING3"
Scenario: Use double quotes
@@ -48,11 +48,11 @@ Feature: Transform steps arguments
Scenario: Nasty strings with other contents
When I set the field "First name" to "My Firstname $NASTYSTRING1"
And I set the following fields to these values:
| Surname | My Surname $NASTYSTRING2 |
| Last name | My Last name $NASTYSTRING2 |
And I press "Update profile"
And I click on "Edit profile" "link" in the "region-main" "region"
Then I should not see "NASTYSTRING"
And I should see "My Firstname"
And I should see "My Surname"
And I should see "My Last name"
And the field "First name" matches value "My Firstname $NASTYSTRING1"
And the field "Surname" matches value "My Surname $NASTYSTRING2"
And the field "Last name" matches value "My Last name $NASTYSTRING2"
@@ -0,0 +1,104 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for get_entity_generator web service
*
* @package tool_behat
* @copyright 2022 onwards Catalyst IT EU {@link https://catalyst-eu.net}
* @author Mark Johnson <mark.johnson@catalyst-eu.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_behat\external;
/**
* Tests for get_entity_generator web service
*
* @covers \tool_behat\external\get_entity_generator
*/
class get_entity_generator_test extends \advanced_testcase {
/**
* Log in as admin
*
* @return void
*/
public function setUp(): void {
$this->resetAfterTest();
$this->setAdminUser();
}
/**
* Get the generator for a core entity.
*
* @return void
*/
public function test_execute_core_entity(): void {
$generator = get_entity_generator::execute('users');
$this->assertEquals(['required' => ['username']], $generator);
}
/**
* Get the generator for the plugin entity.
*
* @return void
*/
public function test_execute_plugin_entity(): void {
$generator = get_entity_generator::execute('mod_book > chapters');
$this->assertEquals(['required' => ['book', 'title', 'content']], $generator);
}
/**
* Get the generator for an entity with no required fields.
*
* @return void
*/
public function test_execute_no_requried(): void {
$generator = get_entity_generator::execute('mod_forum > posts');
$this->assertEquals(['required' => []], $generator);
}
/**
* Attempt to get the generator for a core entity that does not exist.
*
* @return void
*/
public function test_execute_invalid_entity(): void {
$this->expectException('coding_exception');
get_entity_generator::execute('foo');
}
/**
* Attempt to get a generator form a plugin that does not exist.
*
* @return void
*/
public function test_execute_invalid_plugin(): void {
$this->expectException('coding_exception');
get_entity_generator::execute('foo > bar');
}
/**
* Attempt to get a generator for an entity that does not exist, from a plugin that does.
*
* @return void
*/
public function test_execute_invalid_plugin_entity(): void {
$this->expectException('coding_exception');
get_entity_generator::execute('mod_book > bar');
}
}
+1 -1
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2022112800; // The current plugin version (Date: YYYYMMDDXX).
$plugin->version = 2022112801; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2022111800; // Requires this Moodle version.
$plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
@@ -48,12 +48,7 @@ class accessibility {
public static function is_accessibility_enabled(): bool {
global $CFG;
if (isset($CFG->enableaccessibilitytools)) {
return $CFG->enableaccessibilitytools;
}
// Enabled by default.
return true;
return !empty($CFG->enableaccessibilitytools);
}
/**
@@ -388,13 +383,13 @@ class accessibility {
// Confirm if error is reported separately.
if ($DB->record_exists_select(manager::DB_ERRORS,
'resultid = ? AND ' . $DB->sql_compare_text('htmlcode', 255) . ' = ' . $DB->sql_compare_text('?', 255),
[$resultid, html_entity_decode($tmp->html)])) {
[$resultid, html_entity_decode($tmp->html, ENT_COMPAT)])) {
continue;
}
$error = new stdClass();
$error->resultid = $resultid;
$error->linenumber = $tmp->line;
$error->htmlcode = html_entity_decode($tmp->html);
$error->htmlcode = html_entity_decode($tmp->html, ENT_COMPAT);
$errors[] = $error;
}
@@ -43,7 +43,7 @@ class report_array extends brickfield_accessibility_reporter {
$output[$testname]['body'] = $translation['description'];
foreach ($test as $k => $problem) {
if (is_object($problem)) {
$output[$testname]['problems'][$k]['element'] = htmlentities($problem->get_html());
$output[$testname]['problems'][$k]['element'] = htmlentities($problem->get_html(), ENT_COMPAT);
$output[$testname]['problems'][$k]['line'] = $problem->get_line();
if ($problem->message) {
$output[$testname]['problems']['message'] = $problem->message;
@@ -67,7 +67,7 @@ class report_codehighlight extends \tool_brickfield\local\htmlchecker\brickfield
}
}
$this->dom->formatOutput = true;
$html = htmlspecialchars($this->dom->saveHTML());
$html = htmlspecialchars($this->dom->saveHTML(), ENT_COMPAT);
$html = str_replace('&quot;', '"', $html);
foreach ($this->classnames as $name) {
$html = preg_replace('/&lt;'. $name .'([^&]+)+\&gt;/', '<span \\1>', $html);
@@ -49,7 +49,7 @@ class report_xml extends brickfield_accessibility_reporter {
$output .= "\n\t<htmlchecker:problems>";
foreach ($test as $problem) {
if (is_object($problem)) {
$output .= "\n\t<htmlchecker:entities><![CDATA[" . htmlentities($problem->get_html()) .
$output .= "\n\t<htmlchecker:entities><![CDATA[" . htmlentities($problem->get_html(), ENT_COMPAT) .
"]]></htmlchecker:entities>";
$output .= "\n\t<htmlchecker:line>". $problem->get_line() ."</htmlchecker:line>";
if ($problem->message) {
+1 -1
View File
@@ -205,7 +205,7 @@ class manager {
* @return string
*/
public static function get_contenthash(?string $content = null): string {
return sha1($content);
return sha1($content ?? '');
}
/**
@@ -180,7 +180,7 @@ class renderer extends \tool_brickfield\output\renderer {
];
$data->errordata = !empty($data->errordata) ? $data->errordata : [];
foreach ($data->errordata as $err) {
$err->htmlcode = htmlentities($err->htmlcode);
$err->htmlcode = htmlentities($err->htmlcode, ENT_COMPAT);
$row = [$data->tarlabels[$err->component], $err->shortname, $err->errline, $err->htmlcode];
$table->data[] = $row;
}
+3
View File
@@ -47,5 +47,8 @@ function xmldb_tool_cohortroles_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -81,6 +81,30 @@ $activity-icon-colors: (
);
{{</ highlight >}}
### Custom activity icons
Some activities allow icons to be customised. This can be done by implementing callback XXX_get_coursemodule_info() returning instance of object e.g. mod/lti/lib.php
{{< php >}}
$info = new cached_cm_info();
$info->iconurl = new moodle_url('https://moodle.org/theme/moodleorg/pix/moodle_logo_small.svg');
{{< /php >}}
To get this customised icon, use:
{{< php >}}
$iconurl = get_fast_modinfo($courseid)->get_cm($cmid)->get_icon_url()->out(false);
{{< /php >}}
<div class="media mb-3">
<div class="activityiconcontainer lti mr-3">
<img alt="lti icon" title="lti icon" src="https://moodle.org/theme/moodleorg/pix/moodle_logo_small.svg" class="activityicon "> </div>
<div class="media-body align-self-center">
<div class="text-uppercase small">external</div>
<div class="activityname"><a href="#">External tool module</a></div>
</div>
</div>
## Examples
<div class="media mb-3">
+3
View File
@@ -35,5 +35,8 @@ function xmldb_tool_customlang_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -1
View File
@@ -5,6 +5,6 @@
* @copyright 2018 Adrian Greeve
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define("tool_dataprivacy/expand_contract",["jquery","core/url","core/str"],(function($,url,str){var expandedImage=$('<img alt="" src="'+url.imageUrl("t/expanded")+'"/>'),collapsedImage=$('<img alt="" src="'+url.imageUrl("t/collapsed")+'"/>'),CLASSES_EXPAND="fa-caret-right",CLASSES_COLLAPSE="fa-caret-down";return{expandCollapse:function(targetnode,thisnode){targetnode.hasClass("hide")?(targetnode.removeClass("hide"),targetnode.addClass("visible"),targetnode.attr("aria-expanded",!0),thisnode.find(":header i.fa").removeClass(CLASSES_EXPAND),thisnode.find(":header i.fa").addClass(CLASSES_COLLAPSE),thisnode.find(":header img.icon").attr("src",expandedImage.attr("src"))):(targetnode.removeClass("visible"),targetnode.addClass("hide"),targetnode.attr("aria-expanded",!1),thisnode.find(":header i.fa").removeClass(CLASSES_COLLAPSE),thisnode.find(":header i.fa").addClass(CLASSES_EXPAND),thisnode.find(":header img.icon").attr("src",collapsedImage.attr("src")))},expandCollapseAll:function(nextstate){var currentstate="visible"==nextstate?"hide":"visible",ariaexpandedstate="visible"==nextstate,iconclassnow="visible"==nextstate?CLASSES_EXPAND:CLASSES_COLLAPSE,iconclassnext="visible"==nextstate?CLASSES_COLLAPSE:CLASSES_EXPAND,imagenow="visible"==nextstate?expandedImage.attr("src"):collapsedImage.attr("src");$("."+currentstate).each((function(){$(this).removeClass(currentstate),$(this).addClass(nextstate),$(this).attr("aria-expanded",ariaexpandedstate)})),$(".tool_dataprivacy-expand-all").data("visibilityState",currentstate),str.get_string(currentstate,"tool_dataprivacy").then((function(langString){$(".tool_dataprivacy-expand-all").html(langString)})).catch(Notification.exception),$(":header i.fa").each((function(){$(this).removeClass(iconclassnow),$(this).addClass(iconclassnext)})),$(":header img.icon").each((function(){$(this).attr("src",imagenow)}))}}}));
define("tool_dataprivacy/expand_contract",["jquery","core/url","core/str","core/notification"],(function($,url,str,Notification){var expandedImage=$('<img alt="" src="'+url.imageUrl("t/expanded")+'"/>'),collapsedImage=$('<img alt="" src="'+url.imageUrl("t/collapsed")+'"/>'),CLASSES_EXPAND="fa-caret-right",CLASSES_COLLAPSE="fa-caret-down";return{expandCollapse:function(targetnode,thisnode){targetnode.hasClass("hide")?(targetnode.removeClass("hide"),targetnode.addClass("visible"),targetnode.attr("aria-expanded",!0),thisnode.find(":header i.fa").removeClass(CLASSES_EXPAND),thisnode.find(":header i.fa").addClass(CLASSES_COLLAPSE),thisnode.find(":header img.icon").attr("src",expandedImage.attr("src"))):(targetnode.removeClass("visible"),targetnode.addClass("hide"),targetnode.attr("aria-expanded",!1),thisnode.find(":header i.fa").removeClass(CLASSES_COLLAPSE),thisnode.find(":header i.fa").addClass(CLASSES_EXPAND),thisnode.find(":header img.icon").attr("src",collapsedImage.attr("src")))},expandCollapseAll:function(nextstate){var currentstate="visible"==nextstate?"hide":"visible",ariaexpandedstate="visible"==nextstate,iconclassnow="visible"==nextstate?CLASSES_EXPAND:CLASSES_COLLAPSE,iconclassnext="visible"==nextstate?CLASSES_COLLAPSE:CLASSES_EXPAND,imagenow="visible"==nextstate?expandedImage.attr("src"):collapsedImage.attr("src");$("."+currentstate).each((function(){$(this).removeClass(currentstate),$(this).addClass(nextstate),$(this).attr("aria-expanded",ariaexpandedstate)})),$(".tool_dataprivacy-expand-all").data("visibilityState",currentstate),str.get_string(currentstate,"tool_dataprivacy").then((function(langString){$(".tool_dataprivacy-expand-all").html(langString)})).catch(Notification.exception),$(":header i.fa").each((function(){$(this).removeClass(iconclassnow),$(this).addClass(iconclassnext)})),$(":header img.icon").each((function(){$(this).attr("src",imagenow)}))}}}));
//# sourceMappingURL=expand_contract.min.js.map
File diff suppressed because one or more lines are too long
@@ -21,7 +21,7 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/url', 'core/str'], function($, url, str) {
define(['jquery', 'core/url', 'core/str', 'core/notification'], function($, url, str, Notification) {
var expandedImage = $('<img alt="" src="' + url.imageUrl('t/expanded') + '"/>');
var collapsedImage = $('<img alt="" src="' + url.imageUrl('t/collapsed') + '"/>');
@@ -47,7 +47,7 @@ class data_registry {
* @return string[]
*/
public static function var_names_from_context($classname, $pluginname = '') {
$pluginname = trim($pluginname);
$pluginname = trim($pluginname ?? '');
if (!empty($pluginname)) {
$categoryvar = $classname . '_' . $pluginname . '_category';
$purposevar = $classname . '_' . $pluginname . '_purpose';
@@ -111,7 +111,7 @@ class purpose_exporter extends persistent_exporter {
$values['formattedlawfulbases'] = $formattedbases;
$formattedsensitivereasons = [];
$sensitivereasons = explode(',', $this->persistent->get('sensitivedatareasons'));
$sensitivereasons = explode(',', $this->persistent->get('sensitivedatareasons') ?? '');
if (!empty($sensitivereasons)) {
foreach ($sensitivereasons as $reason) {
if (empty(trim($reason))) {
+3
View File
@@ -84,5 +84,8 @@ function xmldb_tool_dataprivacy_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2022053000, 'tool', 'dataprivacy');
}
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -276,7 +276,7 @@ $string['requesttypedelete'] = 'Delete all of my personal data';
$string['requesttypedeleteshort'] = 'Delete';
$string['requesttypeexport'] = 'Export all of my personal data';
$string['requesttypeexportshort'] = 'Export';
$string['requesttypeothers'] = 'General inquiry';
$string['requesttypeothers'] = 'General enquiry';
$string['requesttypeothersshort'] = 'Message';
$string['requireallenddatesforuserdeletion'] = 'Consider courses without end date as active';
$string['requireallenddatesforuserdeletion_desc'] = 'When calculating user expiry, several factors are considered:
@@ -20,7 +20,7 @@ Feature: Contact the privacy officer
And I click on "Send" "button" in the "Contact the privacy officer" "dialogue"
Then I should see "Your request has been submitted to the privacy officer"
And I click on "Data requests" "link"
And I should see "Hello DPO!" in the "General inquiry" "table_row"
And I should see "Hello DPO!" in the "General enquiry" "table_row"
Scenario: Contacting the privacy officer when not enabled
When I log in as "student1"
+1 -1
View File
@@ -5,6 +5,6 @@ define("tool_langimport/search",["exports","core/pending","core/utils"],(functio
* @module tool_langimport/search
* @copyright 2021 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};const SELECTORS_AVAILABLE_LANG_SELECT="select",SELECTORS_AVAILABLE_LANG_SEARCH='[data-action="search"]';var _default={init:form=>{const availableLangsElement=form.querySelector(SELECTORS_AVAILABLE_LANG_SELECT),availableLangsFilter=event=>{const pendingPromise=new _pending.default("tool_langimport/search:filter");availableLangsElement.querySelectorAll("option").forEach((option=>{option.remove()}));const searchTerm=event.target.value.toLowerCase(),availableLanguages=JSON.parse(availableLangsElement.dataset.availableLanguages),filteredLanguages=Object.keys(availableLanguages).reduce(((matches,langcode)=>(availableLanguages[langcode].toLowerCase().includes(searchTerm)&&(matches[langcode]=availableLanguages[langcode]),matches)),[]);Object.entries(filteredLanguages).forEach((_ref=>{let[langcode,langname]=_ref;const option=document.createElement("option");option.value=langcode,option.innerText=langname,availableLangsElement.append(option)})),pendingPromise.resolve()},availableLanguages={};availableLangsElement.querySelectorAll("option").forEach((option=>{availableLanguages[option.value]=option.text})),availableLangsElement.dataset.availableLanguages=JSON.stringify(availableLanguages);const availableLangsSearch=form.querySelector(SELECTORS_AVAILABLE_LANG_SEARCH);availableLangsSearch.addEventListener("keydown",(event=>{"Enter"===event.key&&event.preventDefault()})),availableLangsSearch.addEventListener("keyup",(event=>{const pendingPromise=new _pending.default("tool_langimport/search:keyup");(0,_utils.debounce)(availableLangsFilter,250)(event),setTimeout((()=>{pendingPromise.resolve()}),250)}))}};return _exports.default=_default,_exports.default}));
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};const SELECTORS_AVAILABLE_LANG_SELECT="select",SELECTORS_AVAILABLE_LANG_SEARCH='[data-action="search"]';_exports.init=form=>{const availableLangsElement=form.querySelector(SELECTORS_AVAILABLE_LANG_SELECT),availableLanguages={};availableLangsElement.querySelectorAll("option").forEach((option=>{availableLanguages[option.value]=option.text})),availableLangsElement.dataset.availableLanguages=JSON.stringify(availableLanguages);const availableLangsSearch=form.querySelector(SELECTORS_AVAILABLE_LANG_SEARCH);availableLangsSearch.addEventListener("keydown",(event=>{"Enter"===event.key&&event.preventDefault()}));const availableLangsSearchDebounce=(0,_utils.debounce)((event=>{const pendingPromise=new _pending.default("tool_langimport/search:filter");availableLangsElement.querySelectorAll("option").forEach((option=>{option.remove()}));const searchTerm=event.target.value.toLowerCase(),availableLanguages=JSON.parse(availableLangsElement.dataset.availableLanguages),filteredLanguages=Object.keys(availableLanguages).reduce(((matches,langcode)=>(availableLanguages[langcode].toLowerCase().includes(searchTerm)&&(matches[langcode]=availableLanguages[langcode]),matches)),[]);Object.entries(filteredLanguages).forEach((_ref=>{let[langcode,langname]=_ref;const option=document.createElement("option");option.value=langcode,option.innerText=langname,availableLangsElement.append(option)})),pendingPromise.resolve()}),250);availableLangsSearch.addEventListener("keyup",(event=>{const pendingPromise=new _pending.default("tool_langimport/search:keyup");availableLangsSearchDebounce(event),setTimeout((()=>{pendingPromise.resolve()}),250)}))}}));
//# sourceMappingURL=search.min.js.map
File diff suppressed because one or more lines are too long
+3 -6
View File
@@ -36,7 +36,7 @@ const DEBOUNCE_TIMER = 250;
*
* @param {Element} form
*/
const init = (form) => {
export const init = form => {
const availableLangsElement = form.querySelector(SELECTORS.AVAILABLE_LANG_SELECT);
const availableLangsFilter = (event) => {
@@ -84,16 +84,13 @@ const init = (form) => {
});
// Debounce the event listener to allow the user to finish typing.
const availableLangsSearchDebounce = debounce(availableLangsFilter, DEBOUNCE_TIMER);
availableLangsSearch.addEventListener('keyup', (event) => {
const pendingPromise = new Pending('tool_langimport/search:keyup');
debounce(availableLangsFilter, DEBOUNCE_TIMER)(event);
availableLangsSearchDebounce(event);
setTimeout(() => {
pendingPromise.resolve();
}, DEBOUNCE_TIMER);
});
};
export default {
init: init,
};
+14 -1
View File
@@ -79,6 +79,19 @@ class locale {
* @return string|false Returns the new current locale, or FALSE on error.
*/
protected function set_locale(int $category = LC_ALL, string $locale = '0') {
return setlocale($category, $locale);
if (strlen($locale) <= 255 || PHP_OS_FAMILY === 'BSD' || PHP_OS_FAMILY === 'Darwin') {
// We can set the whole locale all together.
return setlocale($category, $locale);
}
// Too long locale with linux or windows, let's split it into known and supported categories.
$split = explode(';', $locale);
foreach ($split as $element) {
[$category, $value] = explode('=', $element);
if (defined($category)) { // Only if the category exists, there are OS differences.
setlocale(constant($category), $value);
}
}
return setlocale(LC_ALL, 0); // Finally, return the complete configured locale.
}
}
+101 -11
View File
@@ -14,14 +14,6 @@
// 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 \tool_langimport\locale class.
*
* @package tool_langimport
* @copyright 2018 Université Rennes 2 {@link https://www.univ-rennes2.fr}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_langimport;
/**
@@ -29,6 +21,7 @@ namespace tool_langimport;
*
* @package tool_langimport
* @category test
* @coversDefaultClass \tool_langimport\locale
* @copyright 2018 Université Rennes 2 {@link https://www.univ-rennes2.fr}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
@@ -36,6 +29,7 @@ class locale_test extends \advanced_testcase {
/**
* Test that \tool_langimport\locale::check_locale_availability() works as expected.
*
* @covers ::check_locale_availability
* @return void
*/
public function test_check_locale_availability() {
@@ -43,7 +37,7 @@ class locale_test extends \advanced_testcase {
// - first setlocale() call which backup current locale
// - second setlocale() call which try to set new 'es' locale
// - third setlocale() call which restore locale.
$mock = $this->getMockBuilder(\tool_langimport\locale::class)
$mock = $this->getMockBuilder(locale::class)
->onlyMethods(['set_locale'])
->getMock();
$mock->method('set_locale')->will($this->onConsecutiveCalls('en', 'es', 'en'));
@@ -56,7 +50,7 @@ class locale_test extends \advanced_testcase {
// - first setlocale() call which backup current locale
// - second setlocale() call which fail to set new locale
// - third setlocale() call which restore locale.
$mock = $this->getMockBuilder(\tool_langimport\locale::class)
$mock = $this->getMockBuilder(locale::class)
->onlyMethods(['set_locale'])
->getMock();
$mock->method('set_locale')->will($this->onConsecutiveCalls('en', false, 'en'));
@@ -66,8 +60,104 @@ class locale_test extends \advanced_testcase {
$this->assertFalse($result);
// Test an invalid parameter.
$locale = new \tool_langimport\locale();
$locale = new locale();
$this->expectException(\coding_exception::class);
$locale->check_locale_availability('');
}
/**
* Test \tool_langimport\locale::set_locale() own logic.
*
* We have to explicitly test set_locale() own logic and results,
* that effectively sets the current locale, so we need to restore
* the original locale after every test (ugly, from a purist unit test
* point of view, but needed).
*
* @dataProvider set_locale_provider
* @covers ::set_locale
*
* @param string $set locale string to be set.
* @param string $ret expected results returned after setting the locale.
*/
public function test_set_locale(string $set, string $ret) {
// Make set_locale() public.
$loc = new locale();
$rc = new \ReflectionClass(locale::class);
$rm = $rc->getMethod('set_locale');
$rm->setAccessible(true);
// Capture current locale for later restore (funnily, using the set_locale() method itself.
$originallocale = $rm->invokeArgs($loc, [LC_ALL, 0]);
// Assert we get the locale defined as expected.
$this->assertEquals($ret, $rm->invokeArgs($loc, [LC_ALL, $set]));
// We have finished, restore the original locale, so this doesn't affect other tests at distance.
// (again, funnily, using the very same set_locale() method).
$rm->invokeArgs($loc, [LC_ALL, $originallocale]);
}
/**
* Data provider for test_set_locale().
*
* Provides a locale to be set (as 'set') and a expected return value (as 'ret'). Note that
* some of the locales are OS dependent, so only the ones matching the OS will be provided.
*
* We make extensive use of the en_AU.UTF-8/English_Australia.1252 locale that is mandatory to
* be installed in any system running PHPUnit tests.
*/
public function set_locale_provider(): array {
// Let's list the allowed categories by OS.
$bsdallowed = ['LC_COLLATE', 'LC_CTYPE', 'LC_MESSAGES', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME'];
$winallowed = ['LC_COLLATE', 'LC_CTYPE', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME'];
$linuxallowed = [
'LC_COLLATE', 'LC_CTYPE', 'LC_MESSAGES', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME',
'LC_PAPER', 'LC_NAME', 'LC_ADDRESS', 'LC_TELEPHONE', 'LC_MEASUREMENT', 'LC_IDENTIFICATION'
];
// The base locale name is also OS dependent.
$baselocale = get_string('locale', 'langconfig');
if (PHP_OS_FAMILY === 'Windows') {
$baselocale = get_string('localewin', 'langconfig');
}
// Here we'll go accumulating cases to be provided.
$cases = [];
// First, the simplest case, just pass a locale name, without categories.
$cases['rawlocale'] = [
'set' => $baselocale,
'ret' => $baselocale,
];
// Now, let's fill ALL LC categories, we should get back the locale name if all them are set with same value.
// Note that this case is the one that, under Linux only, covers the changes performed to the set_locale() method.
// Pick the correct categories depending on the OS.
$oscategories = $bsdallowed; // Default to BSD/Dawrwin ones because they are the standard 6 supported by PHP.
if (PHP_OS_FAMILY === 'Windows') {
$oscategories = $winallowed;
} else if (PHP_OS_FAMILY === 'Linux') {
$oscategories = $linuxallowed;
}
$localestr = '';
foreach ($oscategories as $category) {
// Format is different by OS too, so let build the string conditionally.
if (PHP_OS_FAMILY === 'BSD' || PHP_OS_FAMILY === 'Darwin') {
// BSD uses slashes (/) separated list of the 6 values in exact order.
$localestr .= '/' . $baselocale;
} else {
// Linux/Windows use semicolon (;) separated list of category=value pairs.
$localestr .= ';' . $category . '=' . $baselocale;
}
}
$cases['allcategories'] = [
'set' => trim($localestr, ';/'),
'ret' => $baselocale,
];
// Return all the built cases.
return $cases;
}
}
@@ -33,3 +33,26 @@ Feature: Licence manager
And "This is the site default licence" "icon" should exist in the "cc" "table_row"
And "Enable licence" "icon" should not exist in the "cc" "table_row"
And "This is the site default licence" "icon" should not exist in the "public" "table_row"
@javascript @_file_upload
Scenario Outline: User licence preference is remembered depending of setting value
Given the following config values are set as admin:
| sitedefaultlicense | cc |
| rememberuserlicensepref | <rememberuserlicensepref> |
And I log in as "admin"
And I follow "Private files" in the user menu
And I follow "Add..."
And I follow "Upload a file"
And the field with xpath "//select[@name='license']" matches value "Creative Commons"
And I click on "Close" "button" in the "File picker" "dialogue"
When I upload "lib/tests/fixtures/empty.txt" file to "Files" filemanager as:
| Save as | empty_copy.txt |
| license | Public domain |
And I press "Save changes"
And I follow "Add..."
Then the field with xpath "//select[@name='license']" matches value "<expectedlicence>"
Examples:
| rememberuserlicensepref | expectedlicence |
| 0 | Creative Commons |
| 1 | Public domain |
+2 -2
View File
@@ -74,10 +74,10 @@ trait reader {
* @return mixed Decoded value
*/
public static function decode_other(?string $other) {
if ($other === 'N;' || preg_match('~^.:~', $other)) {
if ($other === 'N;' || preg_match('~^.:~', $other ?? '')) {
return unserialize($other);
} else {
return json_decode($other, true);
return json_decode($other ?? '', true);
}
}
+1 -1
View File
@@ -57,7 +57,7 @@ trait store {
throw new \coding_exception("Store $called doesn't define classes in correct namespaces.");
}
$this->component = $parts[0];
$this->store = str_replace('logstore_', '', $this->store);
$this->store = str_replace('logstore_', '', $this->component);
}
/**
+3
View File
@@ -39,5 +39,8 @@ function xmldb_tool_log_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -33,5 +33,8 @@ function xmldb_logstore_database_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -33,8 +33,7 @@ class store_test extends \advanced_testcase {
* Tests log writing.
*
* @param bool $jsonformat True to test with JSON format
* @dataProvider test_log_writing_provider
* @throws moodle_exception
* @dataProvider log_writing_provider
*/
public function test_log_writing(bool $jsonformat) {
global $DB, $CFG;
@@ -252,9 +251,9 @@ class store_test extends \advanced_testcase {
* Returns different JSON format settings so the test can be run with JSON format either on or
* off.
*
* @return [bool] Array of true/false
* @return bool[] Array of true/false
*/
public static function test_log_writing_provider(): array {
public static function log_writing_provider(): array {
return [
[false],
[true]
@@ -311,17 +310,16 @@ class store_test extends \advanced_testcase {
$logmanager = get_log_manager();
$allreports = \core_component::get_plugin_list('report');
$supportedreports = array(
'report_log' => '/report/log',
'report_loglive' => '/report/loglive'
);
// Make sure all supported reports are installed.
$expectedreports = array_keys(array_intersect_key($allreports, $supportedreports));
$reports = $logmanager->get_supported_reports('logstore_database');
$reports = array_keys($reports);
$expectedreports = array_intersect_key([
'log' => 'report_log',
'loglive' => 'report_loglive',
], $allreports);
$supportedreports = $logmanager->get_supported_reports('logstore_database');
foreach ($expectedreports as $expectedreport) {
$this->assertContains($expectedreport, $reports);
$this->assertArrayHasKey($expectedreport, $supportedreports);
}
}
}
@@ -217,20 +217,19 @@ class store_test extends \advanced_testcase {
$logmanager = get_log_manager();
$allreports = \core_component::get_plugin_list('report');
$supportedreports = array(
'report_log' => '/report/log',
'report_loglive' => '/report/loglive',
'report_outline' => '/report/outline',
'report_participation' => '/report/participation',
'report_stats' => '/report/stats'
);
// Make sure all supported reports are installed.
$expectedreports = array_keys(array_intersect_key($allreports, $supportedreports));
$reports = $logmanager->get_supported_reports('logstore_legacy');
$reports = array_keys($reports);
$expectedreports = array_intersect_key([
'log' => 'report_log',
'loglive' => 'report_loglive',
'outline' => 'report_outline',
'participation' => 'report_participation',
'stats' => 'report_stats'
], $allreports);
$supportedreports = $logmanager->get_supported_reports('logstore_legacy');
foreach ($expectedreports as $expectedreport) {
$this->assertContains($expectedreport, $reports);
$this->assertArrayHasKey($expectedreport, $supportedreports);
}
}
@@ -60,5 +60,8 @@ function xmldb_logstore_standard_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2022053000, 'logstore', 'standard');
}
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -38,8 +38,7 @@ class store_test extends \advanced_testcase {
* Tests log writing.
*
* @param bool $jsonformat True to test with JSON format
* @dataProvider test_log_writing_provider
* @throws moodle_exception
* @dataProvider log_writing_provider
*/
public function test_log_writing(bool $jsonformat) {
global $DB;
@@ -227,9 +226,9 @@ class store_test extends \advanced_testcase {
* Returns different JSON format settings so the test can be run with JSON format either on or
* off.
*
* @return [bool] Array of true/false
* @return bool[] Array of true/false
*/
public static function test_log_writing_provider(): array {
public static function log_writing_provider(): array {
return [
[false],
[true]
@@ -243,20 +242,19 @@ class store_test extends \advanced_testcase {
$logmanager = get_log_manager();
$allreports = \core_component::get_plugin_list('report');
$supportedreports = array(
'report_log' => '/report/log',
'report_loglive' => '/report/loglive',
'report_outline' => '/report/outline',
'report_participation' => '/report/participation',
'report_stats' => '/report/stats'
);
// Make sure all supported reports are installed.
$expectedreports = array_keys(array_intersect_key($allreports, $supportedreports));
$reports = $logmanager->get_supported_reports('logstore_standard');
$reports = array_keys($reports);
$expectedreports = array_intersect_key([
'log' => 'report_log',
'loglive' => 'report_loglive',
'outline' => 'report_outline',
'participation' => 'report_participation',
'stats' => 'report_stats'
], $allreports);
$supportedreports = $logmanager->get_supported_reports('logstore_standard');
foreach ($expectedreports as $expectedreport) {
$this->assertContains($expectedreport, $reports);
$this->assertArrayHasKey($expectedreport, $supportedreports);
}
}
@@ -372,7 +370,7 @@ class store_test extends \advanced_testcase {
* Tests the decode_other function can cope with both JSON and PHP serialized format.
*
* @param mixed $value Value to encode and decode
* @dataProvider test_decode_other_provider
* @dataProvider decode_other_provider
*/
public function test_decode_other($value) {
$this->assertEquals($value, \logstore_standard\log\store::decode_other(serialize($value)));
@@ -391,7 +389,7 @@ class store_test extends \advanced_testcase {
*
* @return array Array of parameters
*/
public function test_decode_other_provider(): array {
public function decode_other_provider(): array {
return [
[['info' => 'd2819896', 'logurl' => 'discuss.php?d=2819896']],
[null],
@@ -404,8 +402,7 @@ class store_test extends \advanced_testcase {
* Checks that backup and restore of log data works correctly.
*
* @param bool $jsonformat True to test with JSON format
* @dataProvider test_log_writing_provider
* @throws moodle_exception
* @dataProvider log_writing_provider
*/
public function test_backup_restore(bool $jsonformat) {
global $DB;
-2
View File
@@ -229,7 +229,6 @@ class page_helper {
$PAGE->set_pagelayout('standard');
$PAGE->set_url($url);
$PAGE->set_title($title);
$PAGE->set_heading(fullname($user));
if (!empty($plan)) {
$PAGE->navbar->add($title, $planurl);
@@ -303,7 +302,6 @@ class page_helper {
$PAGE->set_pagelayout('standard');
$PAGE->set_url($url);
$PAGE->set_title($title);
$PAGE->set_heading(fullname($user));
if (!empty($evidence)) {
$PAGE->navbar->add($title, $evidenceurl);
+3
View File
@@ -41,5 +41,8 @@ function xmldb_tool_mobile_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+11 -7
View File
@@ -59,22 +59,26 @@ class api_test extends \externallib_advanced_testcase {
*/
public function test_get_potential_config_issues() {
global $CFG;
require_once($CFG->dirroot . '/message/lib.php');
$this->resetAfterTest(true);
$this->setAdminUser();
$CFG->userquota = '73289234723498234723423489273423497234234';
// Set non-SSL wwwroot, to avoid spurious certificate checking.
$CFG->wwwroot = 'http://www.example.com';
$CFG->debugdisplay = 1;
set_config('debugauthdb', 1, 'auth_db');
set_config('debugdb', 1, 'enrol_database');
$expectedissues = array('adodbdebugwarning', 'displayerrorswarning');
// Get potential issues, obtain their keys for comparison.
$issues = api::get_potential_config_issues();
$this->assertCount(count($expectedissues), $issues);
foreach ($issues as $issue) {
$this->assertTrue(in_array($issue[0], $expectedissues));
}
$issuekeys = array_column($issues, 0);
$this->assertEqualsCanonicalizing([
'nohttpsformobilewarning',
'adodbdebugwarning',
'displayerrorswarning',
], $issuekeys);
}
/**
+3
View File
@@ -69,5 +69,8 @@ function xmldb_tool_monitor_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2022053000, 'tool', 'monitor');
}
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -60,8 +60,8 @@ class remote_resource {
public function __construct(\curl $curl, url $url, \stdClass $metadata) {
$this->curl = $curl;
$this->url = $url;
$this->filename = pathinfo($this->url->get_path(), PATHINFO_FILENAME);
$this->extension = pathinfo($this->url->get_path(), PATHINFO_EXTENSION);
$this->filename = pathinfo($this->url->get_path() ?? '', PATHINFO_FILENAME);
$this->extension = pathinfo($this->url->get_path() ?? '', PATHINFO_EXTENSION);
$this->metadata = $metadata;
}
+3
View File
@@ -149,5 +149,8 @@ function xmldb_tool_moodlenet_upgrade(int $oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -2
View File
@@ -108,7 +108,7 @@ class issuer extends persistent {
$mform->addHelpButton('clientsecret', 'issuerclientsecret', 'tool_oauth2');
// Use basic authentication.
$mform->addElement('checkbox', 'basicauth', get_string('usebasicauth', 'tool_oauth2'));
$mform->addElement('advcheckbox', 'basicauth', get_string('usebasicauth', 'tool_oauth2'));
$mform->addHelpButton('basicauth', 'usebasicauth', 'tool_oauth2');
// Base Url.
@@ -244,7 +244,6 @@ class issuer extends persistent {
* @return array of additional errors, or overridden errors.
*/
protected function extra_validation($data, $files, array &$errors) {
$errors = [];
if ($data->showonloginpage != \core\oauth2\issuer::SERVICEONLY) {
if (!strlen(trim($data->loginscopes))) {
$errors['loginscopes'] = get_string('required');
@@ -218,9 +218,13 @@ Feature: Basic OAuth2 functionality
| Name | Invalid custom service |
| Client ID | thisistheclientid |
| Client secret | supersecret |
| Service base URL | https://dc.imsglobal.org/ |
| Service base URL | http://dc.imsglobal.org/ |
When I press "Save changes"
Then I should see "Could not discover end points for identity issuer: Invalid custom service"
Then I should see "For security reasons only https connections are allowed, sorry"
And I set the following fields to these values:
| Service base URL | https://dc.imsglobal.org/ |
And I press "Save changes"
And I should see "Could not discover end points for identity issuer: Invalid custom service"
And I should see "URL: https://dc.imsglobal.org/.well-known/openid-configuration"
And "Allow services" "icon" should exist in the "Invalid custom service" "table_row"
And "Do not allow login" "icon" should exist in the "Invalid custom service" "table_row"
@@ -358,3 +362,21 @@ Feature: Basic OAuth2 functionality
And I navigate to "Server > OAuth 2 services" in site administration
And "Allow login" "icon" should exist in the "Empty custom service" "table_row"
And "Do not allow services" "icon" should exist in the "Empty custom service" "table_row"
@javascript
Scenario: Changes to "Authenticate token requests via HTTP headers" are saved
Given I press "Custom"
And I set the following fields to these values:
| Name | Custom service |
| Client ID | thisistheclientid |
| Client secret | supersecret |
And I press "Save changes"
When I click on "Edit" "link" in the "Custom service" "table_row"
And I click on "Authenticate token requests via HTTP headers" "checkbox"
And I press "Save changes"
And I click on "Edit" "link" in the "Custom service" "table_row"
And the field "Authenticate token requests via HTTP headers" matches value "1"
And I click on "Authenticate token requests via HTTP headers" "checkbox"
And I press "Save changes"
And I click on "Edit" "link" in the "Custom service" "table_row"
Then the field "Authenticate token requests via HTTP headers" matches value ""
@@ -278,7 +278,7 @@ class page_agreedocs implements renderable, templatable {
$cache = \cache::make('core', 'presignup');
$cachekey = 'tool_policy_viewedpolicies';
$viewedpolicies = $cache->get($cachekey);
$viewedpolicies = $cache->get($cachekey) ?: [];
if (!empty($viewedpolicies)) {
// Get the list of the policies docs which the user haven't viewed during this session.
$pendingpolicies = array_diff($currentpolicyversionids, $viewedpolicies);
+3
View File
@@ -40,5 +40,8 @@ function xmldb_tool_policy_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -1
View File
@@ -98,7 +98,7 @@ $string['nopermissiontoagreedocs'] = 'No permission to agree to the policies';
$string['nopermissiontoagreedocs_desc'] = 'Sorry, you do not have the required permissions to agree to the policies.<br />You will not be able to use this site until the following policies are agreed:';
$string['nopermissiontoagreedocsbehalf'] = 'No permission to agree to the policies on behalf of this user';
$string['nopermissiontoagreedocsbehalf_desc'] = 'Sorry, you do not have the required permission to agree to the following policies on behalf of {$a}:';
$string['nopermissiontoagreedocscontact'] = 'For further assistance:';
$string['nopermissiontoagreedocscontact'] = 'For more help:';
$string['nopermissiontoviewpolicyversion'] = 'You do not have permissions to view this policy version.';
$string['nopolicies'] = 'There are no policies for registered users with an active version.';
$string['selectpolicyandversion'] = 'Use the filter above to select policy and/or version';
+11 -11
View File
@@ -19,7 +19,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -53,7 +53,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -98,7 +98,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -157,7 +157,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -210,7 +210,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -462,7 +462,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
And I am on site homepage
And I change window size to "large"
And I follow "Log in"
When I press "Log in as a guest"
When I press "Access as a guest"
Then I should see "If you continue browsing this website, you agree to our policies"
# Confirm when navigating, the pop-up policies are displayed.
When I am on the "My courses" page
@@ -522,7 +522,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
When I press "Create my new account"
Then I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -626,7 +626,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
And I am on site homepage
And I follow "Log in"
# First log in as a guest
And I press "Log in as a guest"
And I press "Access as a guest"
# Now sign up
And I follow "Log in"
When I click on "Create new account" "link"
@@ -647,7 +647,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -716,7 +716,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -858,7 +858,7 @@ Feature: User must accept policy managed by this plugin when logging in and sign
| Email address | user1@address.invalid |
| Email (again) | user1@address.invalid |
| First name | User1 |
| Surname | L1 |
| Last name | L1 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user1@address.invalid"
@@ -86,7 +86,7 @@ Feature: Optional policies
| Email address | user3@address.invalid |
| Email (again) | user3@address.invalid |
| First name | User3 |
| Surname | L3 |
| Last name | L3 |
And I press "Create my new account"
And I should see "Confirm your account"
And I should see "An email should have been sent to your address at user3@address.invalid"
+6
View File
@@ -51,6 +51,12 @@ if ($listurl) {
$PAGE->navbar->add($listurl, $listurlnav);
}
// Add a new nav item to make $listurl clickable for the Boost theme.
if (isset($script)) {
$lastrunnav = get_string('lastrun', 'tool_profiling');
$PAGE->navbar->add($lastrunnav);
}
// Header
echo $OUTPUT->header();
@@ -41,6 +41,7 @@ $string['importok'] = 'File "{$a}" imported successfully.';
$string['importprefix'] = 'Import prefix';
$string['importproblem'] = 'Some problem happened importing the file "{$a}".';
$string['lastrunof'] = 'Summary of last run of {$a}';
$string['lastrun'] = 'Summary of last run';
$string['markreferencerun'] = 'Mark as reference run/comment';
$string['memory'] = 'Memory used';
$string['pluginname'] = 'Profiling runs';
@@ -243,6 +243,16 @@ class category_bin extends base_bin {
throw new \moodle_exception("Could not create course to restore into.");
}
// As far as recycle bin is using MODE_AUTOMATED, it observes the General restore settings.
// For recycle bin we want to ensure that backup files are always restore the users and groups information.
// In order to achieve that, we hack the setting here via $CFG->forced_plugin_settings,
// so it won't interfere other operations.
// See MDL-65218 and MDL-35773 for more information.
// This hack will be removed once recycle bin switches to use its own backup mode, with
// own preferences and 100% separate from MOODLE_AUTOMATED.
// TODO: Remove this as part of MDL-65228.
$CFG->forced_plugin_settings['restore'] = ['restore_general_users' => 1, 'restore_general_groups' => 1];
// Define the import.
$controller = new \restore_controller(
$tempdir,
@@ -277,6 +287,10 @@ class category_bin extends base_bin {
// Run the import.
$controller->execute_plan();
// We don't need the forced setting anymore, hence unsetting it.
// TODO: Remove this as part of MDL-65228.
unset($CFG->forced_plugin_settings['restore']);
// Have finished with the controller, let's destroy it, freeing mem and resources.
$controller->destroy();
@@ -133,6 +133,16 @@ class course_bin extends base_bin {
\backup::MODE_AUTOMATED,
$user->id
);
// When "backup_auto_activities" setting is disabled, activities can't be restored from recycle bin.
$plan = $controller->get_plan();
$activitiessettings = $plan->get_setting('activities');
$settingsvalue = $activitiessettings->get_value();
if (empty($settingsvalue)) {
$controller->destroy();
return;
}
$controller->execute_plan();
// We don't need the forced setting anymore, hence unsetting it.
@@ -234,6 +244,16 @@ class course_bin extends base_bin {
$fb = get_file_packer('application/vnd.moodle.backup');
$fb->extract_to_pathname($file, $fulltempdir);
// As far as recycle bin is using MODE_AUTOMATED, it observes the General restore settings.
// For recycle bin we want to ensure that backup files are always restore the users and groups information.
// In order to achieve that, we hack the setting here via $CFG->forced_plugin_settings,
// so it won't interfere other operations.
// See MDL-65218 and MDL-35773 for more information.
// This hack will be removed once recycle bin switches to use its own backup mode, with
// own preferences and 100% separate from MOODLE_AUTOMATED.
// TODO: Remove this as part of MDL-65228.
$CFG->forced_plugin_settings['restore'] = ['restore_general_users' => 1, 'restore_general_groups' => 1];
// Define the import.
$controller = new \restore_controller(
$tempdir,
@@ -264,6 +284,10 @@ class course_bin extends base_bin {
// Run the import.
$controller->execute_plan();
// We don't need the forced setting anymore, hence unsetting it.
// TODO: Remove this as part of MDL-65228.
unset($CFG->forced_plugin_settings['restore']);
// Have finished with the controller, let's destroy it, freeing mem and resources.
$controller->destroy();
@@ -22,35 +22,30 @@ Feature: Backup user data
And the following "activities" exist:
| activity | course | section | name | intro |
| quiz | C1 | 1 | Quiz 1 | Test quiz description |
And the following "question categories" exist:
| contextlevel | reference | name |
| Course | C1 | Test questions |
And the following "questions" exist:
| questioncategory | qtype | name | questiontext |
| Test questions | truefalse | TF1 | First question |
| Test questions | truefalse | TF2 | Second question |
And quiz "Quiz 1" contains the following questions:
| question | page |
| TF1 | 1 |
| TF2 | 1 |
@javascript
Scenario: Delete and restore a quiz with user data
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 |
| General feedback | Thank you, this is the general feedback |
| 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 add a "True/False" question to the "Quiz 1" quiz with:
| Question name | TF2 |
| Question text | Second question |
| General feedback | Thank you, this is the general feedback |
| 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
Scenario Outline: Delete and restore a quiz with user data
Given the following config values are set as admin:
| restore_general_users | <include_user> | restore |
And I am on the "Quiz 1" "quiz activity" page logged in as student1
And I press "Attempt quiz"
And I click on "True" "radio" in the "First question" "question"
And I click on "False" "radio" in the "Second question" "question"
And I press "Finish attempt"
And I press "Submit all and finish"
And I click on "Submit" "button" in the "Submit all your answers and finish?" "dialogue"
And I should see "5.00 out of 10.00"
And I should see "50.00 out of 100.00"
And I log out
And I log in as "teacher1"
And I am on "Course 1" course homepage with editing mode on
@@ -63,5 +58,10 @@ Feature: Backup user data
And I log in as "student1"
And I am on "Course 1" course homepage
When I navigate to "User report" in the course gradebook
Then "Quiz 1" row "Grade" column of "user-grade" table should contain "5"
Then "Quiz 1" row "Grade" column of "user-grade" table should contain "50"
And "Quiz 1" row "Percentage" column of "user-grade" table should contain "50"
Examples:
| include_user | case_explanation |
| 1 | Checked |
| 1 | Unchecked |
@@ -190,6 +190,11 @@ class category_bin_test extends \advanced_testcase {
(object)['plugin' => 'backup', 'name' => 'backup_auto_storage', 'value' => 2],
(object)['plugin' => 'backup', 'name' => 'backup_auto_destination', 'value' => true],
]],
'restore/restore_general_users moodle' => [[
(object)['plugin' => 'restore', 'name' => 'restore_general_users', 'value' => 0],
(object)['plugin' => 'restore', 'name' => 'restore_general_groups', 'value' => 0],
]],
];
}
@@ -187,6 +187,11 @@ class course_bin_test extends \advanced_testcase {
(object)['plugin' => 'backup', 'name' => 'backup_auto_storage', 'value' => 2],
(object)['plugin' => 'backup', 'name' => 'backup_auto_destination', 'value' => true],
]],
'restore/restore_general_users moodle' => [[
(object)['plugin' => 'restore', 'name' => 'restore_general_users', 'value' => 0],
(object)['plugin' => 'restore', 'name' => 'restore_general_groups', 'value' => 0],
]],
];
}
@@ -237,6 +242,29 @@ class course_bin_test extends \advanced_testcase {
$this->assertEquals(true, $attemptobj->is_finished());
}
/**
* Test that the activity is NOT stored in bin when
* in Automated backup setup settings "backup_auto_activities" is disabled.
*
* @dataProvider recycle_bin_settings_provider
* @covers ::store_item
*/
public function test_coursemodule_restore_with_activity_setting_disabled() {
// Set the configuration to not include activities in the automated backup.
set_config('backup_auto_activities', false, 'backup');
// Delete the course module.
course_delete_module($this->quiz->cmid);
// Now, run the course module deletion adhoc task.
\phpunit_util::run_all_adhoc_tasks();
// Check there is no items in the recycle bin.
$recyclebin = new \tool_recyclebin\course_bin($this->course->id);
$this->assertEquals(0, count($recyclebin->get_items()));
}
/**
* Tests that user data is not restored when module is restored.
*
@@ -38,15 +38,6 @@ use core\check\result;
*/
class adhocqueue extends check {
/**
* Constructor
*/
public function __construct() {
global $CFG;
$this->id = 'adhocqueue';
$this->name = get_string('checkadhocqueue', 'tool_task');
}
/**
* Return result
* @return result
+7 -10
View File
@@ -38,17 +38,14 @@ use core\check\result;
class cronrunning extends check {
/**
* Constructor
* A link the running tasks report
*
* @return action_link|null
*/
public function __construct() {
global $CFG;
$this->id = 'cronrunning';
$this->name = get_string('checkcronrunning', 'tool_task');
if (empty($CFG->cronclionly)) {
$this->actionlink = new \action_link(
new \moodle_url('/admin/cron.php'),
get_string('cron', 'admin'));
}
public function get_action_link(): ?\action_link {
return new \action_link(
new \moodle_url('/admin/tool/task/runningtasks.php'),
get_string('runningtasks', 'tool_task'));
}
/**
@@ -39,15 +39,13 @@ use core\check\result;
class maxfaildelay extends check {
/**
* Constructor
* Links to the task log report
*
* @return \action_link|null
*/
public function __construct() {
global $CFG;
$this->id = 'cronfaildelay';
$this->name = get_string('checkmaxfaildelay', 'tool_task');
$this->actionlink = new \action_link(
new \moodle_url('/admin/tool/task/scheduledtasks.php'),
get_string('scheduledtasks', 'tool_task'));
public function get_action_link(): ?\action_link {
$url = new \moodle_url('/admin/tasklogs.php');
return new \action_link($url, get_string('tasklogs', 'tool_task'));
}
/**
@@ -66,14 +66,10 @@ Feature: Upload users
@javascript
Scenario: Upload users with custom profile fields
# Create user profile field.
Given I log in as "admin"
And I navigate to "Users > Accounts > User profile fields" in site administration
And I click on "Create a new profile field" "link"
And I click on "Text area" "link"
And I set the following fields to these values:
| Short name | superfield |
| Name | Super field |
And I click on "Save changes" "button"
Given the following "custom profile fields" exist:
| datatype | shortname | name |
| text | superfield | Super field |
And I log in as "admin"
# Upload users.
When I navigate to "Users > Accounts > Upload users" in site administration
And I upload "lib/tests/fixtures/upload_users_profile.csv" file to "File" filemanager
@@ -129,12 +125,10 @@ Feature: Upload users
And I should see "Users created: 4"
And I press "Continue"
# Boost check.
And I navigate to "Users > Accounts > Browse list of users" in site administration
And I click on ".icon[title=Edit]" "css_element" in the "jonest@example.com" "table_row"
And I am on the "jonest@example.com" "user > editing" page
And I should see "Boost"
# Classic check.
And I navigate to "Users > Accounts > Browse list of users" in site administration
And I click on ".icon[title=Edit]" "css_element" in the "reznor@example.com" "table_row"
And I am on the "reznor@example.com" "user > editing" page
And I should see "Classic"
@javascript
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+127 -4
View File
@@ -44,7 +44,7 @@ import {prefetchStrings} from 'core/prefetch';
* @constant
* @type {number}
*/
const MINSPACING = 50;
const MINSPACING = 10;
/**
* A user tour.
@@ -83,6 +83,12 @@ const Tour = class {
// Apply configuration.
this.configure.apply(this, arguments);
// Unset recalculate state.
this.possitionNeedToBeRecalculated = false;
// Unset recalculate count.
this.recalculatedNo = 0;
try {
this.storage = window.sessionStorage;
this.storageKey = 'tourstate_' + this.tourName;
@@ -396,6 +402,11 @@ const Tour = class {
return false;
}
// Check if the CSS styles are allowed on the browser or not.
if (!this.isCSSAllowed()) {
return false;
}
let target = this.getStepTarget(stepConfig);
if (target && target.length && target.is(':visible')) {
// Without a target, there can be no step.
@@ -405,6 +416,22 @@ const Tour = class {
return false;
}
/**
* Is the browser actually allow CSS styles?
*
* @returns {boolean} True if the browser is allowing CSS styles
*/
isCSSAllowed() {
const testCSSElement = document.createElement('div');
testCSSElement.classList.add('hide');
document.body.appendChild(testCSSElement);
const styles = window.getComputedStyle(testCSSElement);
const isAllowed = styles.display === 'none';
testCSSElement.remove();
return isAllowed;
}
/**
* Go to the next step in the tour.
*
@@ -924,6 +951,7 @@ const Tour = class {
// Configure ARIA attributes on the target.
let target = this.getStepTarget(stepConfig);
if (target) {
target.data('original-tabindex', target.attr('tabindex'));
if (!target.attr('tabindex')) {
target.attr('tabindex', 0);
}
@@ -1150,6 +1178,12 @@ const Tour = class {
if (target.data('original-tabindex')) {
target.attr('tabindex', target.data('tabindex'));
} else {
// If the target does not have the tabindex attribute at the beginning. We need to remove it.
// We should wait a little here before removing the attribute to prevent the browser from adding it again.
window.setTimeout(() => {
target.removeAttr('tabindex');
}, 400);
}
}
@@ -1296,6 +1330,7 @@ const Tour = class {
*/
positionStep(stepConfig) {
let content = this.currentStepNode;
let thisT = this;
if (!content || !content.length) {
// Unable to find the step node.
return this;
@@ -1335,9 +1370,15 @@ const Tour = class {
},
onCreate: function(data) {
recalculateArrowPosition(data);
recalculateStepPosition(data);
},
onUpdate: function(data) {
recalculateArrowPosition(data);
if (thisT.possitionNeedToBeRecalculated) {
thisT.recalculatedNo++;
thisT.possitionNeedToBeRecalculated = false;
recalculateStepPosition(data);
}
},
};
@@ -1387,6 +1428,90 @@ const Tour = class {
}
};
const recalculateStepPosition = function(data) {
const placement = data.placement.split('-')[0];
const isVertical = ['left', 'right'].indexOf(placement) !== -1;
const popperElement = $(data.instance.popper);
const targetElement = $(data.instance.reference);
const arrowElement = popperElement.find('[data-role="arrow"]');
const stepElement = popperElement.find('[data-role="flexitour-step"]');
const viewportHeight = $(window).height();
const viewportWidth = $(window).width();
const arrowHeight = parseFloat(arrowElement.outerHeight(true));
const popperHeight = parseFloat(popperElement.outerHeight(true));
const targetHeight = parseFloat(targetElement.outerHeight(true));
const arrowWidth = parseFloat(arrowElement.outerWidth(true));
const popperWidth = parseFloat(popperElement.outerWidth(true));
const targetWidth = parseFloat(targetElement.outerWidth(true));
let maxHeight;
if (thisT.recalculatedNo > 1) {
// The current screen is too small, and cannot fit with the original placement.
// We should set the placement to auto so the PopperJS can calculate the perfect placement.
thisT.currentStepPopper.options.placement = isVertical ? 'auto-left' : 'auto-bottom';
}
if (thisT.recalculatedNo > 2) {
// Return here to prevent recursive calling.
return;
}
if (isVertical) {
// Find the best place to put the tour: Left of right.
const leftSpace = targetElement.offset().left > 0 ? targetElement.offset().left : 0;
const rightSpace = viewportWidth - leftSpace - targetWidth;
const remainingSpace = leftSpace >= rightSpace ? leftSpace : rightSpace;
maxHeight = viewportHeight - MINSPACING * 2;
if (remainingSpace < (popperWidth + arrowWidth)) {
const maxWidth = remainingSpace - MINSPACING - arrowWidth;
if (maxWidth > 0) {
popperElement.css({
'max-width': maxWidth + 'px',
});
// Not enough space, flag true to make Popper to recalculate the position.
thisT.possitionNeedToBeRecalculated = true;
}
} else if (maxHeight < popperHeight) {
// Check if the Popper's height can fit the viewport height or not.
// If not, set the correct max-height value for the Popper element.
popperElement.css({
'max-height': maxHeight + 'px',
});
}
} else {
// Find the best place to put the tour: Top of bottom.
const topSpace = targetElement.offset().top > 0 ? targetElement.offset().top : 0;
const bottomSpace = viewportHeight - topSpace - targetHeight;
const remainingSpace = topSpace >= bottomSpace ? topSpace : bottomSpace;
maxHeight = remainingSpace - MINSPACING - arrowHeight;
if (remainingSpace < (popperHeight + arrowHeight)) {
// Not enough space, flag true to make Popper to recalculate the position.
thisT.possitionNeedToBeRecalculated = true;
}
}
// Check if the Popper's height can fit the viewport height or not.
// If not, set the correct max-height value for the body.
const currentStepBody = stepElement.find('[data-placeholder="body"]').first();
const headerEle = stepElement.find('.modal-header').first();
const footerEle = stepElement.find('.modal-footer').first();
const headerHeight = headerEle.outerHeight(true) ?? 0;
const footerHeight = footerEle.outerHeight(true) ?? 0;
maxHeight = maxHeight - headerHeight - footerHeight;
if (maxHeight > 0) {
headerEle.removeClass('minimal');
footerEle.removeClass('minimal');
currentStepBody.css({
'max-height': maxHeight + 'px',
'overflow': 'auto',
});
} else {
headerEle.addClass('minimal');
footerEle.addClass('minimal');
}
// Call the Popper update method to update the position.
thisT.currentStepPopper.update();
};
let background = $('[data-flexitour="step-background"]');
if (background.length) {
target = background;
@@ -1503,9 +1628,7 @@ const Tour = class {
}
let targetPosition = this.calculatePosition(targetNode);
if (targetPosition === 'fixed') {
background.css('top', 0);
} else if (targetPosition === 'absolute') {
if (targetPosition === 'absolute') {
background.css('position', 'fixed');
}
+3
View File
@@ -131,5 +131,8 @@ function xmldb_tool_usertours_upgrade($oldversion) {
// Automatically generated Moodle v4.0.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v4.1.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+6
View File
@@ -14,6 +14,12 @@ span[data-flexitour="container"] .modal-dialog .modal-content .modal-header {
border-bottom: 0;
}
span[data-flexitour="container"] .modal-dialog .modal-content .modal-header.minimal,
span[data-flexitour="container"] .modal-dialog .modal-content .modal-footer.minimal {
padding-top: 0;
padding-bottom: 0;
}
span[data-flexitour="container"] .modal-dialog .modal-content .modal-footer {
justify-content: flex-start;
border-top: 0;
@@ -152,14 +152,11 @@ Feature: Apply tour filters to a tour
| fullname | shortname | format | enablecompletion |
| Course 1 | C1 | topics | 1 |
| Course 2 | C2 | topics | 1 |
And the following "activities" exist:
| activity | course | name | firstpagetitle | wikimode |
| wiki | C1 | Test wiki name | First page | collaborative |
And I log in as "admin"
And I am on "Course 1" course homepage with editing mode on
And I add a "Wiki" to section "1" and I fill the form with:
| Wiki name | Test wiki name |
| Description | Test wiki description |
| First page name | First page |
| Wiki mode | Collaborative wiki |
And I am on "Course 2" course homepage
And I am on "Course 2" course homepage with editing mode on
And I add a "Forum" to section "1" and I fill the form with:
| Forum name | Test forum name |
| Forum type | Standard forum for general use |
+23 -6
View File
@@ -22,6 +22,8 @@
* @package core
*/
use core_user\fields;
define('NO_OUTPUT_BUFFERING', true);
require_once('../../config.php');
require_once($CFG->libdir.'/adminlib.php');
@@ -37,7 +39,7 @@ if (empty($SESSION->bulk_users)) {
}
if ($dataformat) {
$fields = array('id' => 'id',
$originfields = array('id' => 'id',
'username' => 'username',
'email' => 'email',
'firstname' => 'firstname',
@@ -51,8 +53,10 @@ if ($dataformat) {
'country' => 'country');
$extrafields = profile_get_user_fields_with_data(0);
$profilefields = [];
foreach ($extrafields as $formfield) {
$fields['profile_field_'.$formfield->get_shortname()] = 'profile_field_'.$formfield->get_shortname();
$profilefields[fields::PROFILE_FIELD_PREFIX . $formfield->get_shortname()] = fields::PROFILE_FIELD_PREFIX .
$formfield->get_shortname();
}
$filename = clean_filename(get_string('users'));
@@ -60,17 +64,17 @@ if ($dataformat) {
$downloadusers = new ArrayObject($SESSION->bulk_users);
$iterator = $downloadusers->getIterator();
\core\dataformat::download_data($filename, $dataformat, $fields, $iterator, function($userid, $supportshtml)
use ($extrafields, $fields) {
\core\dataformat::download_data($filename, $dataformat, array_merge($originfields, $profilefields), $iterator,
function($userid, $supportshtml) use ($originfields) {
global $DB;
if (!$user = $DB->get_record('user', array('id' => $userid))) {
return null;
}
profile_load_data($user);
$userprofiledata = array();
foreach ($fields as $field => $unused) {
foreach ($originfields as $field) {
// Custom user profile textarea fields come in an array
// The first element is the text and the second is the format.
// We only take the text.
@@ -82,6 +86,19 @@ if ($dataformat) {
$userprofiledata[$field] = $user->$field;
}
}
// Formatting extra field if transform is true.
$extrafields = profile_get_user_fields_with_data($userid);
foreach ($extrafields as $field) {
$fieldkey = fields::PROFILE_FIELD_PREFIX . $field->get_shortname();
if ($field->is_transform_supported()) {
$userprofiledata[$fieldkey] = $field->display_data();
} else {
$userprofiledata[$fieldkey] = $field->data;
}
}
return $userprofiledata;
});

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