Compare commits

..

602 Commits

Author SHA1 Message Date
Jun Pataleta fdbcfa1b15 Moodle release 4.0.5 2022-11-12 12:55:21 +08:00
Sara Arjona cda2e48134 weekly release 4.0.4+ 2022-11-11 15:01:48 +01:00
Sara Arjona d3b1e4da07 NOBUG: Fixed file access permissions 2022-11-11 15:01:48 +01:00
Jake Dallimore b1bad4dbbc Merge branch 'MDL-76213-400-fix' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-11-11 17:38:27 +08:00
Jun Pataleta 44883e4f32 MDL-76213 mod_assign: Pass correct parameters to override query 2022-11-11 16:12:19 +08:00
Mathew May 6ade6d6060 MDL-71920 libraries: Migrate LTI lib away from pure curl 2022-11-11 12:54:11 +08:00
Mathew May e3ce8c37bd MDL-71920 core: update filelib opt name definition 2022-11-11 12:54:11 +08:00
Adrian Greeve 56a9861094 Merge branch 'MDL-76099-400' of https://github.com/stevandoMoodle/moodle into MOODLE_400_STABLE 2022-11-11 12:24:43 +08:00
Jake Dallimore 6981b82c41 Merge branch 'MDL-75872-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-11 11:45:39 +08:00
Jun Pataleta f5644a9a79 Merge branch 'MDL-76213-400' of https://github.com/Chocolate-lightning/moodle into MOODLE_400_STABLE 2022-11-11 11:34:01 +08:00
Mathew May c110ef6c79 MDL-76213 mod_assign: Improve group override info for teachers 2022-11-11 11:17:03 +08:00
Jun Pataleta 6904a25eb2 Merge branch 'MDL-63037-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-11-11 10:42:19 +08:00
Sara Arjona dee4c975ae Merge branch 'MDL-76253-400' of https://github.com/justusdieckmann/moodle into MOODLE_400_STABLE 2022-11-10 17:17:51 +01:00
Sara Arjona 1c38f5031b Merge branch 'MDL-76070-400' of https://github.com/meirzamoodle/moodle into MOODLE_400_STABLE 2022-11-10 16:56:50 +01:00
Sara Arjona 188de51d23 Merge branch 'MDL-71951-400' of https://github.com/stevandoMoodle/moodle into MOODLE_400_STABLE 2022-11-10 16:37:30 +01:00
Paul Holden bbdb70f1d2 Merge branch 'MDL-75890-400' of https://github.com/meirzamoodle/moodle into MOODLE_400_STABLE 2022-11-10 15:30:25 +00:00
Sara Arjona c91ebee573 Merge branch 'MOODLE_400_MDL-75874' of https://github.com/matheusot/moodle into MOODLE_400_STABLE 2022-11-10 16:22:15 +01:00
Sara Arjona a529aac615 Merge branch 'MDL-74606-400-support-multilang-group-names-in-mod_assign' of https://github.com/krostas1983/moodle into MOODLE_400_STABLE 2022-11-10 16:04:39 +01:00
Jun Pataleta 0905aae5c6 Merge branch 'master_MDL-75126-allow-multiple-bulk-action-40' of https://github.com/catalyst/moodle-MDL-72752 into MOODLE_400_STABLE 2022-11-10 22:12:07 +08:00
Matheus Rodrigues 5a4a2e9baa MDL-75874 aiken_html: correctly display HTML chars for Aiken questions
Updates the Aiken Format class to process answers correctly, enabling
support for special HTML characteres such as <, >, and &.

Co-authored-by: Leticia Luz <leticia.adrielli.luz@gmail.com>
2022-11-10 09:59:34 -03:00
Safat Shahin 047d341465 MDL-75126 core_question: Allow multiple bulk action from qbank plugins
This commit implements the bulk action api to allow multiple bulk
actions from the qbank plugins instead of one. Any qbank plugin
wants to implement bulk action can now define an array of bulk
actions as a plugin feature.
2022-11-10 23:42:55 +11:00
Sara Arjona 759a87273f Merge branch 'MDL-75448-MOODLE_400' of https://github.com/golenkovm/moodle into MOODLE_400_STABLE 2022-11-10 13:19:42 +01:00
Paul Holden 6c983fda3c Merge branch 'MDL-68550-400' of https://github.com/rezaies/moodle into MOODLE_400_STABLE 2022-11-10 11:59:55 +00:00
Sara Arjona a08e8032c5 Merge branch 'MDL-75974-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-10 12:51:40 +01:00
Paul Holden fbd321ea90 Merge branch 'MDL-76011-400' of https://github.com/abgreeve/moodle into MOODLE_400_STABLE 2022-11-10 11:49:54 +00:00
Sara Arjona fe3ea2fe53 Merge branch 'MDL-75876-MOODLE_400_STABLE' of https://github.com/praxisdigital/moodle into MOODLE_400_STABLE 2022-11-10 12:47:17 +01:00
Sara Arjona 9d1b79c074 Merge branch 'MDL-76167-400' of https://github.com/davewoloszyn/moodle into MOODLE_400_STABLE 2022-11-10 12:42:19 +01:00
Paul Holden a7eab36f96 Merge branch 'MDL-76224-400' of https://github.com/justusdieckmann/moodle into MOODLE_400_STABLE 2022-11-10 08:54:09 +00:00
Paul Holden 3fd54014ae MDL-75862 backup: omit sesskey for continue buttons using get method.
It's automatically added by the rendered single_button instance when
using post method, so no need to add it unconditionally.
2022-11-10 10:17:19 +08:00
Andrew Nicols 87002d24be Merge branch 'MDL-75917-400' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_400_STABLE 2022-11-10 08:48:27 +08:00
Shamim Rezaie c3aba13f79 MDL-68550 tablelib: Use aria-role=button
Use the aria-role=button for:
- show/hide links
- sort links
- reset table preferences link
2022-11-10 06:19:31 +11:00
Shamim Rezaie ba32b852e5 MDL-68550 output: Improve accessibility of the initials bar
- The current item should be focusable otherwise the focus will be lost
  as soon as a user clicks on an item in the initials bar
- Modified behat tests to not mistakenly click on the 'All' link
- The currently selected item is specified by aria-current
- Useed aria-current=true rather than =page because the links of each
  item in the initials bar is missing the pagination information
2022-11-10 06:17:58 +11:00
Shamim Rezaie f4039ba2a9 MDL-68550 output: Improve accessibility of the paging bar
The use of aria-current is based on the example at
https://design-system.w3.org/components/pagination.html
2022-11-10 06:17:58 +11:00
Shamim Rezaie c11f5aa005 MDL-68550 theme: Not showing the gap in the initial bar
The gap issue was a regression from MDL-66670.
2022-11-10 06:17:57 +11:00
Paul Holden c3367700c2 MDL-75872 mod_lesson: allow unlimited attempts default value.
Related change in 252e85be added a similar value per activity, we
should also allow it to be chosen as a default for the site.
2022-11-09 18:54:08 +00:00
Sara Arjona b680dd8894 Merge branch 'MDL-50935-400-2' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-11-09 16:01:24 +01:00
Meirza 3259a19a6a MDL-76131 core_user: encode social profile fields data. 2022-11-09 15:49:39 +01:00
Justus Dieckmann 11f8109d4c MDL-76253 calendar: Use activities monologo pix 2022-11-09 15:22:08 +01:00
Jun Pataleta 2172f91656 Merge branch 'MDL-76185-400' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-11-09 21:51:25 +08:00
Jun Pataleta ed7137f7f1 Merge branch 'MDL-76054_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-11-09 20:09:04 +08:00
Sara Arjona de3a8678cd Merge branch 'MDL-75889-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-09 12:36:48 +01:00
Sara Arjona a0af8ccba9 Merge branch 'MDL-76059-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-09 12:31:38 +01:00
David Woloszyn 7eadd4979c MDL-76091 lib: Add additional check to local URLs params 2022-11-09 19:24:27 +08:00
Sara Arjona 63f9d1edc4 Merge branch 'MDL-75766-400' of https://github.com/aanabit/moodle into MOODLE_400_STABLE 2022-11-09 11:57:32 +01:00
Sara Arjona 5231856a76 Merge branch 'MDL-74201-400' of https://github.com/aanabit/moodle into MOODLE_400_STABLE 2022-11-09 11:49:40 +01:00
Víctor Déniz cf86a03796 Merge branch 'MDL-76000-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-09 10:11:38 +00:00
Jun Pataleta 14c5642fa7 Merge branch 'MDL-76170-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-11-09 15:44:27 +08:00
Jake Dallimore 921e34a607 MDL-76099 core_backup: set selected overflow node in restore and copy
These pages sit under the 'restore' and 'copy' menu items respectively
but the selected menu item isn't correct because the 'restore.php' and
'copyprogress.php' page URLs don't match the node action for their
respective 'restore' and 'copy' nodes. Force set the selected node in
each case to resolve this.
2022-11-09 15:22:51 +08:00
Stevani Andolo 7d9ab768a4 MDL-76099 core_navigation: allow setting selected course overflow node
Allow pages to choose which course reuse overflow node is selected, to
handle cases where the default selection (based on matching PAGE->url
to the node action URL) isn't possible (such as when several pages need
to exist under the same selected node).
2022-11-09 15:22:51 +08:00
Jake Dallimore 4938cb25b1 MDL-76170 enrol_lti: fix missing secret in enrol_lti_users
If member sync runs before the user launches the tool, a partial record
is created, without consumer secret. Subsequent launches of the tool by
that member don't resolve this and this results in grade sync failing
for any affected users. This patch:
- data fixes the existing affected rows
- fixes the launch code, ensuring secret is recorded on launch,
irrespective of whether the user info record has been created already
or not.
2022-11-09 10:03:50 +08:00
Frédéric Massart bb66f7e425 MDL-74201 backup: Restore reference to content bank files 2022-11-08 20:18:30 +01:00
Eloy Lafuente (stronk7) f1a8f0059c MDL-76054 environment: Remove the php-xmlrpc extension check
For Moodle 4.1 and up, the php-xmlrpc is not needed anymore:
- All the MNet stuff has been moved to use php library (MDL-76055).
- The webservice/xmlrpc has been moved from core to contrib (MDL-76052).

So we just remove the check here. Starting with 4.1, it's not
needed for any core functionality.

No lang string changes in this branch, only in master (4.1dev).
2022-11-08 16:45:44 +01:00
Víctor Déniz 543b0e0055 weekly release 4.0.4+ 2022-11-08 13:44:44 +00:00
Jake Dallimore df8a9bdde7 MDL-63037 mnet: fix hostexists string usage 2022-11-08 17:05:06 +08:00
Jake Dallimore 98d5109d91 Merge branch 'MDL-75941-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-08 12:04:29 +08:00
Jun Pataleta 9508492e28 Merge branch 'MDL-76113-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-11-08 12:01:54 +08:00
Jake Dallimore 590bfd9029 Merge branch 'MDL-76071-400' of https://github.com/laurentdavid/moodle into MOODLE_400_STABLE 2022-11-08 11:44:17 +08:00
Jake Dallimore 475784b2b5 Merge branch 'MDL-72882-400-3' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-11-08 11:32:06 +08:00
Jun Pataleta d77935d8ea Merge branch 'MDL-76207-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-11-08 10:25:35 +08:00
Paul Holden 31889f9b20 MDL-75974 tool_customlang: check out language pack in CLI import. 2022-11-07 22:41:01 +00:00
Paul Holden 7526bfd8b7 MDL-75889 core: compare domain names in a case-insensitive manner.
As per https://www.rfc-editor.org/rfc/rfc1035#section-3.1
2022-11-07 22:37:07 +00:00
Justus Dieckmann f4b822a178 MDL-76224 Resource: Set correct page url in /mod/label/view.php 2022-11-07 18:46:20 +01:00
Andrew Nicols 3886236dae Merge branch 'MDL-75880_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-11-07 21:57:05 +08:00
Andrew Nicols b2b7a091b7 Merge branch 'MDL-73624-400' of https://github.com/meirzamoodle/moodle into MOODLE_400_STABLE 2022-11-07 21:52:11 +08:00
Andrew Nicols 8858280766 Merge branch 'MDL-75519-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-11-07 21:41:49 +08:00
Víctor Déniz c95c319fad Merge branch 'm40_MDL-74912_Fix_RegExp_Word_Boundaries_On_MySQL8' of https://github.com/scara/moodle into MOODLE_400_STABLE 2022-11-07 10:20:03 +00:00
Jun Pataleta 1a35908e1f MDL-50935 atto_equation: Add upgrade step to fix existing sites 2022-11-07 15:14:17 +08:00
Jun Pataleta d474d4f3cf MDL-50935 atto_equation: Fix display of matrix template
Thanks to Geoffrey Rowland's fix suggestion.
2022-11-07 15:13:06 +08:00
Andrew Nicols cbc0b075b7 MDL-74468 mod_bigbluebuttonbn: Coding style violation fix 2022-11-07 12:14:21 +08:00
Andrew Nicols 3698429d29 Merge branch 'MDL-74468-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-11-07 12:14:17 +08:00
Andrew Nicols 7b18e8ad63 MDL-76207 contentbank: Switch to opened window 2022-11-07 10:03:08 +08:00
Matteo Scaramuccia a052c15e6a MDL-74912 dml: Fix PHP coding style problems 2022-11-05 10:08:13 +01:00
Matteo Scaramuccia 1a84f17a20 MDL-74912 dml: Fix missing nullable marker 2022-11-05 10:08:13 +01:00
Matteo Scaramuccia 8c0d6a1869 MDL-74912 mod_forum: Fix regexp word boundaries markers in MySQL 8 2022-11-05 10:08:13 +01:00
anisa kusumadewi ab42a71563 MDL-75766 core_h5p: Added index for pathnamehash to h5p table 2022-11-04 16:54:38 +01:00
Eloy Lafuente (stronk7) 88f2c9bb45 MDL-75880 phpunit: fix all @coversDefaultClass missing @covers
Because @coversDefaultClass doesn't indicate any coverage (it's
just an alias to avoid having to write the class name in @covers),
this commit fixes all the files that were using that annotation
and missing any @covers.

Basically, replacing one by the other and done.
2022-11-04 16:51:24 +01:00
Víctor Déniz d7e367af90 Merge branch 'MDL-76130-400' of https://github.com/meirzamoodle/moodle into MOODLE_400_STABLE 2022-11-04 15:36:56 +00:00
Sara Arjona 28043b9b2e weekly release 4.0.4+ 2022-11-04 14:51:59 +01:00
Sara Arjona 3f30ad9df0 Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-11-04 14:51:56 +01:00
hieuvu 001fdb5f29 MDL-75917 moodle_page: add a modname to body tag.
This is a backport of MDL-75844
2022-11-04 16:04:02 +07:00
Laurent David 79153d99cd MDL-74468 mod_bigbluebuttonbn: Fix logger count method
* The logger::count_callback_events was confusing and needs clarification
and small refactoring.
2022-11-04 09:38:11 +01:00
Laurent David f75aed1c54 MDL-74468 mod_bigbluebuttonbn: Remove getallheader
* getallheader is only fully compatible with Apache servers. Replace it
with a polyfill.
2022-11-04 09:38:11 +01:00
Shamiso.Jaravaza 4436dd0fea MDL-74468 mod_bigbluebuttonbn: Fix custom completion for BBB
* BBB has specific completion indicator that need to be taken into account
* Fix mock requests so we can send participant id and then attach events to them
* Refactor slightly the broker to split meeting logic from request (decoding)
* Fix update completion state cron
2022-11-04 09:38:11 +01:00
Meirza 296fa4b83d MDL-76130 install: make the button to the center position 2022-11-04 11:23:21 +07:00
Jun Pataleta bbc586af7e Merge branch 'MDL-76103-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-11-04 11:34:36 +08:00
Marina Glancy 1ec11f0761 MDL-76103 search: skip solr behat tests if solr is not installed 2022-11-04 11:22:13 +08:00
Jun Pataleta 61e0c07247 Merge branch 'MDL-76072-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-11-04 11:13:14 +08:00
Víctor Déniz 8902acf217 Merge branch 'MDL-70071-400' of https://github.com/Chocolate-lightning/moodle into MOODLE_400_STABLE 2022-11-04 11:13:14 +08:00
Sara Arjona 38f0e86110 Merge branch 'MDL-76169-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-11-04 11:13:14 +08:00
Sara Arjona df8978e969 Merge branch 'MDL-75759-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-11-04 11:13:14 +08:00
Andrew Nicols ab6a1b655b Merge branch 'MDL-75904-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-04 11:13:14 +08:00
Andrew Nicols d0c489dab7 Merge branch 'MDL-75784-400' of https://github.com/JBThong/moodle into MOODLE_400_STABLE 2022-11-04 11:13:14 +08:00
AMOS bot 437ce92e1b Automatically generated installer lang files 2022-11-04 00:07:35 +00:00
David Woloszyn 82d7777ca5 MDL-76167 installer: Corrected dockblock param types 2022-11-04 10:46:20 +11:00
Mihail Geshoski c37c8fd6fa MDL-76185 mod_glossary: Remove separator in continuous display format 2022-11-03 23:54:09 +08:00
Andrew Nicols 1d8d73c761 MDL-70071 forum: Convert post threshold warnings to info 2022-11-03 15:03:44 +08:00
Jun Pataleta 8ef225eb62 MDL-72882 tool_langimport: Set default language when deleting lang pack
* When the language pack being deleted is
  - the same as the site default language, we must set the site default
    language to 'en'.
  - fix the user's current language to the default site language.
2022-11-03 14:00:11 +08:00
Jun Pataleta 9cca971abc MDL-72882 core: Use default site lang when user lang no longer available
* Check that the lang attribute for the output HTML exists. If not,
use the default site language.
* Also fix the current language for the user.
2022-11-03 14:00:09 +08:00
Andrew Nicols 6509945bcd MDL-76169 question: General behat fixes
Whilst amending these tests I discovered some other minor fixes to be
made.
2022-11-03 13:28:52 +08:00
Andrew Nicols b4a53cba59 MDL-76169 question: Use action menu steps consistently 2022-11-03 13:28:52 +08:00
Andrew Nicols 5e0b235790 MDL-76169 mod_quiz: Add quiz question bank behat resolver 2022-11-03 13:28:52 +08:00
Andrew Nicols e53e25af94 MDL-76169 behat: Normalise exception message in should (not) steps
These steps have accepted a NodeElement instance as an argument for some
time, but were trying to cast it to string when formulating exception
messages, making it harder to debug and, in the case of the 'should see'
step, not work at all.

This patch introduces a new function to produce a consistent naming for
them.
2022-11-03 13:28:52 +08:00
Andrew Nicols 414a99535b MDL-76169 behat: Add improved steps for using action menus
This commit adds new steps related to action menus to support:
* Choosing an item in a named action menu
* Choosing an item in a named action menu within a container
* Confirming that an action menu item does or does not exist in a named
  action menu
* Confirming that an action menu item does or does not exist in a named
  action menu within a container

The existing action menu steps were insufficient as they assume that
there is only one action menu within he container, which is not
necessarily the case.

The existing action menu steps are not non-JS friendly and will error if
JS is disabled, without providing any fallback when one is easily
available.

Unfortunately these steps cannot be used to replace the existing steps
without manual intervention.
2022-11-03 13:28:51 +08:00
Jun Pataleta 1ae08553b7 MDL-75759 courseformat: Link classes in PHPDocs with @see tags
- Linking classes/methods mentioned in PHPDoc with @see tags help devs
checking the PHPDoc to quickly navigate to the class/method mentioned
and also helps us ensure that it points to the correct class/method.
- Some typo/grammar fixes as well in existing PHPDoc descriptions.
- Fixed parameter type in execute()'s PHPDoc block.
2022-11-03 11:58:18 +08:00
Simey Lameze 97c3804ac3 MDL-75759 courseformat: fix documentation of stateupdates tests 2022-11-03 11:58:18 +08:00
Jun Pataleta 55f0f4e0f4 MDL-75759 courseformat: Fix stateactions test
* Require lib/externallib.php in
\core_courseformat\output\local\state\cm::export_for_template()
* Point @coversDefaultClass to the proper class.
2022-11-03 11:58:18 +08:00
Simey Lameze cd642570f1 MDL-76072 tool_lp: only init inlineGrader module if user can grade 2022-11-03 11:42:02 +08:00
Jake Dallimore d7b4dd9a6a MDL-76113 enrol_lti: Fix secret on lti user for LTI 2.0 consumers
Fixes the enrol_lti_users.consumersecret field for LTI 2.0 users.
This field erroneously contained the tool secret and not the consumer
secret needed for service requests when used with LTI 2.0 consumers,
which resulted in complete grade sync failure for LTI 2.0 consumers.
This patch:
- adds an upgrade step to address existing incorrect secrets for LTI
2.0 launched users. It sets these to the correct consumer secret.
- fixes the way the secret is first set during a launch, ensuring
this->consumer->secret is used, which properly captures either the
tool secret (for 1.1 launches) or the consumer secret (for 2.0
launches).
2022-11-02 17:00:49 +08:00
Sara Arjona dc02b1bbb2 Merge branch 'MDL-61880-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-11-02 08:30:14 +01:00
Jun Pataleta 18ce123c4e Merge branch 'MDL-75038-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-02 13:39:21 +08:00
Jun Pataleta 1a61b0bb6c Merge branch 'MDL-75848-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-11-02 13:20:06 +08:00
Jake Dallimore 93318586a5 MDL-61880 tool_oauth2: don't rely on discovery when editing issuers
Adjusts the testing scenarios so that we don't rely on endpoint
discovery being run during an issuer edit, which is no longer the case.
For scenarios that need a userinfo endpoint, set this manually.
2022-11-02 11:12:03 +08:00
Jake Dallimore 177caaa3b5 MDL-61880 core: don't clear issuer fields not present in form data
In cases where we have an id, load the persistent and then set new data
before saving. This ensures we don't delete fields which are missing in
the form data.
2022-11-02 11:12:03 +08:00
Yannick Forget 33b1897e55 MDL-61880 core: Retain OAuth 2.0 user field mappings after issuer update 2022-11-02 11:11:51 +08:00
Paul Holden abebddafc2 MDL-75038 blog: link back to user only when one specified. 2022-11-01 21:26:54 +00:00
Ilya Tregubov dca920d105 weekly release 4.0.4+ 2022-11-01 15:00:01 +03:00
Andrew Nicols 254eb24e80 Merge branch '400-mdl-75010' of https://github.com/danmarsden/moodle into MOODLE_400_STABLE 2022-11-01 11:52:45 +08:00
Jun Pataleta 8552936427 Merge branch 'MDL-76120-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-11-01 09:17:03 +08:00
Sara Arjona f683ec0990 Merge branch 'MDL-75771-MOODLE_400_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_400_STABLE 2022-10-31 13:39:49 +01:00
Jun Pataleta c4b81d09dc Merge branch 'MDL-76108-400' of https://github.com/aanabit/moodle into MOODLE_400_STABLE 2022-10-31 16:49:14 +08:00
Jake Dallimore 8d9ae08d7a Merge branch 'MDL-76041-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-10-31 11:44:09 +08:00
Jun Pataleta 889e427df0 Merge branch 'MDL-75358-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-10-31 10:10:09 +08:00
Dan Marsden 2c99c5fa4d MDL-75010 core: Prevent user last access update on user key login 2022-10-31 14:19:31 +13:00
Víctor Déniz c26e24b613 Merge branch 'MDL-68437-400' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-10-28 18:26:48 +01:00
Amaia Anabitarte 97c52ca3a1 MDL-76108 mod_lesson: improving count call for PHP8.0 2022-10-28 18:17:52 +02:00
Philipp Memmel 42b3b6da8d MDL-75771 core_courseformat: Add behat test for show_editor function 2022-10-28 17:25:52 +02:00
Philipp Memmel 8db30d32f8 MDL-75771 core_courseformat: Fix capability for edit controls
course_format\base:show_editor now by default uses 'moodle/course:manageactivities', but also accepts other capabilities as param
2022-10-28 17:25:29 +02:00
Andrew Nicols b35468292e MDL-76120 behat: Swap click on select option to set field
Recent versions of Marionette do not like to click on the option
element so we must always use the set field option.

Change-Id: I9e1397700db53328d15e049e2f4c565888975079
2022-10-28 21:14:07 +08:00
Sara Arjona 141e369a01 weekly release 4.0.4+ 2022-10-28 14:09:16 +02:00
Meirza 0b8ab0da36 MDL-76070 dataformat_json: Fix data loss in the exported file. 2022-10-28 13:16:04 +07:00
Jake Dallimore 27bbd43730 MDL-68943 assignfeedback_editpdf: fix version numbers 2022-10-28 12:05:21 +08:00
Jake Dallimore 666e68d5dc Merge branch 'MDL-68943-400' of https://github.com/cameron1729/moodle into MOODLE_400_STABLE 2022-10-28 11:49:59 +08:00
Cameron Ball 064b544465 MDL-68943 assignfeedback_editpdf: Upgrade step for stale conversions 2022-10-28 11:25:45 +08:00
Cameron Ball 32094232c7 MDL-68943 assignfeedback_editpdf: Reconvert updated files 2022-10-28 11:25:45 +08:00
Jake Dallimore 27acd15fb4 Merge branch 'MDL-76069-400' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-10-28 09:36:08 +08:00
Sara Arjona a8e813a289 Merge branch 'MDL-76023-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-27 17:03:57 +02:00
Víctor Déniz 789e0a41dc Merge branch 'MDL-75969-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-27 15:44:59 +01:00
Mihail Geshoski 145a0690da MDL-76069 enrol_manual: Fix missing breadcrumbs 2022-10-27 21:57:04 +08:00
Meirza 10ac386fd2 MDL-73624 lib_spout: encode output file name 2022-10-27 16:50:17 +07:00
Adrian Greeve 91bf85846e MDL-76011 lib: Updated the zip writer to retain the modified date. 2022-10-27 15:06:31 +08:00
Meirza aceac725e6 MDL-75890 block_myoverview: Added new wrapper element
Added a new element to wrap filter control in Course Overview,
so it will display well on desktop and mobile.

Co-authored-by: Huong Nguyen (huongnv13@gmail.com)
2022-10-26 16:21:22 +07:00
Thong Bui 744cd41a4d MDL-75784 Forms: Fix issues multi expand all/collapse buttons on a page 2022-10-26 14:05:50 +07:00
Marina Glancy 281fe1161a MDL-75519 reportbuilder: set default sortorder for Users datasource 2022-10-25 11:19:21 +02:00
Jun Pataleta dbb2deed8c weekly release 4.0.4+ 2022-10-25 17:17:09 +08:00
Jun Pataleta 59bcc16e26 Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-10-25 17:17:06 +08:00
Laurent David 9b1a88cbd9 MDL-76071 mod_choice: fix choice display on graphs
* The setting "Display mode" modifies the choices alignment of radio choice button
from horizontally to vertically. It should also display the list of choices in
the graph in the same directions.
2022-10-25 10:42:49 +02:00
Stevani Andolo 1fe377b410 MDL-71951 calendar: Accessbility issue fix 2022-10-25 13:07:16 +08:00
Jake Dallimore 8888b7756f Merge branch 'MDL-75727_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-10-25 11:56:24 +08:00
Andrew Nicols 8f2dc4b229 Merge branch 'MDL-76049_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-10-25 11:49:46 +08:00
Andrew Nicols f993f02826 Merge branch 'MDL-75763-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-10-25 11:11:40 +08:00
Jake Dallimore 84b7fd82b6 Merge branch 'MDL-74315-400' of https://github.com/roland04/moodle into MOODLE_400_STABLE 2022-10-25 11:09:17 +08:00
Víctor Déniz a6448908ed Merge branch 'MDL-75074-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-10-24 16:43:19 +01:00
Andrew Nicols 86a3a3d9c0 Merge branch 'MDL-74911-400' of https://github.com/matthewhilton/moodle into MOODLE_400_STABLE 2022-10-24 22:23:03 +08:00
Sara Arjona 2184c2368f Merge branch 'MDL-73030-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-24 15:47:27 +02:00
Sara Arjona 023b30e1bb Merge branch 'MDL-75897-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-24 15:35:36 +02:00
Jun Pataleta b2e715f33d Merge branch 'MDL-75936-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-24 15:58:05 +08:00
Andrew Nicols 34845eaad2 MDL-75936 core_message: Drawer must be ready before firing drawer events
This commit addresses a race condition when showing the message drawer
and opening the settings page from the Message preferences page.

In that situation, the message/edit.php page calls the
message_drawer_helper.showSettings function, which publishes a request
to show the drawer.

In some conditions (notably faster machines, or after MDL-66107) this
event is fired before the message_drawer.init has listened to it.

The solution here is to delay firing of the event until the drawer
announces itself as ready.

This ensures that the event is subscribed to before it is fired.

Change-Id: Id90df6b90f8803e25df0be6260a435c09031cf45
2022-10-24 14:30:32 +08:00
Jun Pataleta 6c8db244c7 Merge branch 'MDL-76018-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-10-24 13:16:06 +08:00
Matthew Hilton 1169179385 MDL-74911 assignfeedback_editpdf: unlock session when polling conversion
Polling conversions will run the document conversion immediately if the
conversion has not already been completed.

Releasing the session lock while doing this ensures large conversions
do not unnecessarily hold the users session.
2022-10-24 12:57:33 +10:00
Matthew Hilton c431058d92 MDL-74911 assignfeedback_editpdf: per-assignment conversion poll lock
The lock ensures that multiple conversions do not happen for the same
assignment submission.

Otherwise, subsequent conversions will fail when trying to save the
converted file.
2022-10-24 12:57:31 +10:00
AMOS bot 19c42ef49d Automatically generated installer lang files 2022-10-23 00:08:16 +00:00
Paul Holden ec0c7a2788 MDL-75904 admin: ignore $CFG->allowcategorythemes during installation. 2022-10-21 23:22:28 +01:00
Paul Holden ef34b06efa MDL-76059 forms: graceful early exit for invalid button elements.
Ensure login form tries to capture guest button only if it exists.
2022-10-21 19:36:36 +01:00
Paul Holden 96f8c0a106 MDL-75848 editor_atto: fix console error when clicking toolbar menu. 2022-10-21 19:19:16 +01:00
Sara Arjona bf0bf4be24 Merge branch 'MDL-72828-400' of https://github.com/davewoloszyn/moodle into MOODLE_400_STABLE 2022-10-21 16:24:47 +02:00
Ilya Tregubov 9d7609f39c weekly release 4.0.4+ 2022-10-21 15:33:49 +03:00
David Woloszyn 90553e9f6e MDL-72828 js: get_strings supports jquery objects 2022-10-21 15:02:33 +11:00
Tim Hunt 06f1241f24 MDL-76049 quiz generator: update calendar events for new overrides 2022-10-20 23:45:32 +01:00
Sara Arjona 92ef33c4e0 Merge branch 'MDL-75791-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-10-20 16:36:54 +02:00
Ilya Tregubov 20288fee39 Merge branch 'MDL-72058-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-20 15:42:48 +03:00
Paul Holden 50568e9382 MDL-75897 output: safer checking of course reuse action nodes.
Also ensure that if course reuse contains only a single node (e.g.
reset), then it is still accessible from secondary navigation.

Co-authored-by: Meirza Arson <meirza.arson@moodle.com>
2022-10-20 11:08:32 +01:00
Víctor Déniz a8444275b1 Merge branch 'MDL-75907-400' of https://github.com/golenkovm/moodle into MOODLE_400_STABLE 2022-10-20 10:46:35 +01:00
Jun Pataleta 2875fb574a Merge branch 'MDL-75497-400' of https://github.com/raortegar/moodle into MOODLE_400_STABLE 2022-10-20 17:29:04 +08:00
Jun Pataleta e519e93871 Merge branch 'MDL-75599-400' of https://github.com/laurentdavid/moodle into MOODLE_400_STABLE 2022-10-20 17:26:02 +08:00
raortegar f39af49969 MDL-75497 mod_data: Review Check existence of field.class.php 2022-10-20 10:01:14 +02:00
Andrew Nicols 44518ff64d Merge branch 'MDL-75834-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-10-20 14:37:49 +08:00
Jun Pataleta 952079533c Merge branch 'MDL-59458-400' of https://github.com/laurentdavid/moodle into MOODLE_400_STABLE 2022-10-20 13:08:50 +08:00
Laurent David 7af2bad4e2 MDL-75599 mod_data: Fix warning message
* Fix warning message when accessing advanced search page with a date field.
2022-10-20 06:53:07 +02:00
Víctor Déniz 9416a1a399 Merge branch 'MDL-75962-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-20 00:44:49 +01:00
Paul Holden f006c73a17 MDL-75941 theme_boost: don't auto grow breadcrumb items.
On mobile/small breakpoint, display breadcrumb items without
excess whitespace.
2022-10-19 21:57:00 +01:00
Paul Holden 7d883400d9 MDL-76000 theme_boost: reset form padding when in tertiary navigation. 2022-10-19 21:06:14 +01:00
Laurent David c0d17ca8ba MDL-76041 mod_bigbluebuttonbn: Exception on Recording only page
* This fixes a the parameter provided to the get_recordings method of recording class
2022-10-19 21:18:53 +02:00
Paul Holden 4d9b3c9839 MDL-76023 course: fix access to custom data in notification task.
The message class `customdata` property is automatically JSON encoded
via magic setter method, so we can't append to it directly.
2022-10-19 18:52:35 +01:00
Jun Pataleta 984057c7cd Merge branch 'MDL-75985-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-19 21:27:48 +08:00
Andrew Nicols 825f039968 MDL-75985 behat: Return newline character for \n
Somehow part of this commit was lost during the push and/or squash.
2022-10-19 20:27:13 +08:00
Sara Arjona d1a16f5f4a Merge branch 'MDL-76020-400' of https://github.com/mickhawkins/moodle into MOODLE_400_STABLE 2022-10-19 13:01:04 +02:00
Sara Arjona f00b1a838e Merge branch 'MDL-76010_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-10-19 12:56:25 +02:00
Michael Hawkins baba4d8cc2 MDL-76020 theme: Add missing support links to footer in Classic theme
The "Services and support" and "Contact site support" links were
missing from the footer in the Classic theme (which now has its own
footer template), so there was no way to navigate to the relevant links.
2022-10-19 17:52:54 +08:00
Jun Pataleta eb4b144e13 Merge branch 'MDL-75645_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-10-19 15:37:26 +08:00
Ilya Tregubov d20501ecf2 Merge branch 'MDL-74654-400' of https://github.com/ssj365/moodle into MOODLE_400_STABLE 2022-10-19 09:23:34 +03:00
Jun Pataleta 36afea55eb Merge branch 'MDL-75985-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-19 10:55:52 +08:00
Shamiso.Jaravaza afd07d1e42 MDL-74654 mod_bigbluebuttonbn: Add role parameter 2022-10-18 08:23:54 -06:00
Mikel Martín 320d99378c MDL-74315 reportbuilder: Fix report filters hidden under top navbar
- Add scrolling to big filter containers to avoid them to be hidden under header
- Remove custom reportbuilder scrollbar mixin and replace it with 'thin-scrolls'
  standard mixin
2022-10-18 15:34:02 +02:00
Eloy Lafuente (stronk7) 06f4976cab MDL-75645 mnet: Stop caching OpenSSLAsymmetricKey keys
The mnet_environment->keypair array contains the following
elements (and more, just focussing on these):
- keypair_PEM : textual representation of the private key.
- certificate : textual representation of the public key.
- privatekey  : OpenSSLAsymmetricKey representation of the private key,
                generated from keypair_PEM. See get_private_key().
- publickey   : OpenSSLAsymmetricKey representation if the public key,
                generated from certificate. See get_public_key().

The last 2 elements in the array are only used as "caching", to avoid
having to call to openssl_pkey_get_private() and
openssl_pkey_get_public() to convert from the textual representation
to the OpenSSLAsymmetricKey representation that is the one required
by a number of openssl functions.

Problems arrive when, as part of the MNet protocol, the mnet_environment
is serialised, because, since PHP 8.0 those OpenSSLAsymmetricKey objects
aren't serialisable any more.

So, as far as they are only used for internal caching it's perfectly ok
to remove the caching bits and use the openssl_pkey_get_xxx() methods
to calculate them under demand.

The alternative to this would be to implement into the mnet_environment
some custom serialisation, skipping those OpenSSLAsymmetricKey
instances, using __sleep(), the Serializabla interface or __serialize(),
but that seems unnecessary because, as explained above, the uses are
really limited and easily replaceable.

That's what this patch does.
2022-10-18 14:30:56 +02:00
Eloy Lafuente (stronk7) 0bf0f82444 MDL-76010 behat: New scenario to verify that manual attempts work
This is basically the manual background that was removed in the
previous commit, with 4 attempts here. Note it includes the 2
waits that are REQUIRED to make it pass in too-quick environments.

If they are removed, they begin to fail because it seems that
the attempts need a minimum of separation between them.
2022-10-18 14:27:59 +02:00
Eloy Lafuente (stronk7) 7b9adf44bf MDL-76010 behat: Move feature to use attempts generator
This moves away from manual attempts and uses the activity
attempts generator instead. Quicker and not exposed to the
problems with clicks, refreshes and missing attempts.

Note that there is a small change in the attempt generator
so, now, when a new attempt is created, if the activity has
tracking enabled, the final result / grades are recalculated.

That's the real behaviour when the activity settings are
changes in the edition form and it's natural to get them
recalculated without having to visit the form. Specifically,
this allows the 1st scenario to pass, because in that scenario
no changes to the form are being performed.

Also, little detail, amend a dupe scenario name.
2022-10-18 14:27:59 +02:00
Sara Arjona 3d2710653e weekly release 4.0.4+ 2022-10-18 13:09:54 +02:00
Ilya Tregubov 6dba57ee81 Merge branch 'MDL-75173-400-fix' of https://github.com/sarjona/moodle into MOODLE_400_STABLE 2022-10-18 10:18:11 +03:00
Sara Arjona ecc896f4b4 MDL-75173 completion: Remove ordering from PHPUnit
To avoid getting some random errors with Oracle, the order for the
students have been removed from the tests (to check they are there,
regardless the order they are returned, because in that case, the
order is not important).
2022-10-18 08:37:57 +02:00
Jun Pataleta 616e01911e Merge branch 'MDL-75783-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-18 10:06:40 +08:00
Andrew Nicols 524d855f6b MDL-75783 javascript: Add optional jsconfig configuration
This commit adds a new Grunt task which generates a jsconfig.json file.

This file is described at
https://code.visualstudio.com/docs/languages/jsconfig and can be used
to configure vscode and other similar editors to understand our module
loading.

This task is an optional task for Grunt and can be run with:

    npx grunt jsconfig

The file is git-ignored and will not affect normal usage.
2022-10-18 09:33:04 +08:00
Víctor Déniz 0d855827c7 Merge branch 'MDL-75983_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-10-18 01:07:54 +01:00
sam marshall 1d9d855172 MDL-76018 core_navigation: Activity header warning if no module intro 2022-10-17 17:28:36 +01:00
Sara Arjona 1cb527de1c Merge branch 'MDL-75711-400' of https://github.com/ssj365/moodle into MOODLE_400_STABLE 2022-10-17 16:55:59 +02:00
Sara Arjona df5626b1a3 Merge branch 'MDL-72836-400' of https://github.com/mickhawkins/moodle into MOODLE_400_STABLE 2022-10-17 16:39:53 +02:00
Sara Arjona 27c2863777 Merge branch 'MDL-75077-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-17 16:32:40 +02:00
Sara Arjona b169ba0121 Merge branch 'MDL-74814-400-1' of https://github.com/HuongNV13/moodle into MOODLE_400_STABLE 2022-10-17 15:30:53 +02:00
Sara Arjona c317ee7de0 Merge branch 'MDL-75173-400' of https://github.com/ilyatregubov/moodle into MOODLE_400_STABLE 2022-10-17 15:18:03 +02:00
Jun Pataleta 3f7c4d65e9 Merge branch 'MDL-74958-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-10-17 21:10:45 +08:00
sam marshall e49bd4e798 MDL-74958 core_navigation: Add renamed classes to renamedclasses.php
The renamed secondary navigation classes have been adeed to
renamedclasses.php files.
2022-10-17 10:56:15 +01:00
sam marshall e555d057e9 MDL-74958 core_navigation: Secondary nav in plugins, change namespace
This is a backport of MDL-74733.

Secondary nav previously had to be in my_plugin\local\views\secondary;
this location continues to work but will be deprecated in 4.1. The new
location is my_plugin\navigation\views\secondary.
2022-10-17 10:55:41 +01:00
Huong Nguyen c5c13aa9ae MDL-74814 forms: Fix accessibility issue in edit profile page
- Fixed legend tag issue
 - Modified the passwordunmask Javascript hide/unhide the password field by CSS class
2022-10-17 15:51:54 +07:00
Andrew Nicols b01fee2008 MDL-75969 behat: Allow the editor field to request a save
Some editors do not immediately store their content to the textarea they
represent and only do so when the form is submitted or they are
requested to.

This change adds to the existing API to allow an (optional)
`store_current_value` function to be defined for the editor type so that
it can use the JavaScript API to persist any current content to the
editor.
2022-10-14 23:46:25 +08:00
Andrew Nicols 3418b4d61c MDL-75985 behat: Standardise HTML output when comparing editor content
This commit adds a standardise_html function and updates the matches
function to compare normalised content.

This allows for a wider variety of valid editor output to be handled
using the standard value matching steps in Behat, thus supporting
editors other than Atto better.
2022-10-14 23:44:11 +08:00
Víctor Déniz dfd9b50595 Merge branch 'MDL-75736-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-10-14 16:10:43 +01:00
Eloy Lafuente (stronk7) 5b60a837d1 MDL-75983 gha: Update used actions to be node16 compatible
Node12 is being deprecated in github for actions:

https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/

So we need to ensure we are using node16 actions.
2022-10-14 13:27:26 +02:00
Sara Arjona 00ad2a14da weekly release 4.0.4+ 2022-10-14 12:49:18 +02:00
Sara Arjona 764d2cd510 Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-10-14 12:49:15 +02:00
Ilya Tregubov ddb0f7dc92 MDL-75173 core_completion: More unit tests and Behat. 2022-10-14 11:47:50 +03:00
Ilya Tregubov 59303de673 MDL-75173 core_completion: Fixes after review.
Unit tests added. Used new steps in Behat. Code style fix for long line.
2022-10-14 11:47:50 +03:00
Ilya Tregubov 1a7d05eca7 MDL-75173 core_completion: Fix completion for different settings. 2022-10-14 11:47:50 +03:00
Ilya Tregubov 289d5f3faa MDL-75173 core_completion: Inconsistent status check.
There is inconsistent status check for course completion block and
completion details page. Completion block was taking to account
pending statuses for completion criteria while completion details
page was ignoring those.
2022-10-14 11:47:50 +03:00
Ilya Tregubov aa34b109a4 MDL-75173 behat: Fix broken test.
Test was testing failing state when student didn't receive passing
grade. But it was expecting that completion criteria is completed
which was wrong.
2022-10-14 11:47:50 +03:00
Ilya Tregubov c4cd3a61c8 MDL-75173 core_completion: Fix course completion criteria marking.
SQL was fetching activities where completion state was 'completed,
but not passed reqyured grade'. For course completion such states
must be ignored.

Also fixed progress bar on my courses page. Same reasoning as above.
2022-10-14 11:47:49 +03:00
AMOS bot f4e4bfd3da Automatically generated installer lang files 2022-10-14 00:07:36 +00:00
Víctor Déniz 3cd5cbd327 Merge branch 'MDL-74789-400' of https://github.com/lucaboesch/moodle into MOODLE_400_STABLE 2022-10-13 21:32:19 +01:00
Jun Pataleta 6d805b7774 Merge branch 'MDL-74887-MOODLE_400_STABLE' of https://github.com/sh-csg/moodle into MOODLE_400_STABLE 2022-10-14 00:29:24 +08:00
Paul Holden 38c8f8be7d MDL-75811 reportbuilder: concatenate using list seperator lang config. 2022-10-13 16:26:18 +02:00
Sara Arjona 180048ad9e Merge branch 'MDL-75959-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-13 16:03:37 +02:00
Simey Lameze df1f4b8178 MDL-75984 admin_presets: split test into smaller ones 2022-10-13 15:55:26 +02:00
Ilya Tregubov d5e6b7e7eb Merge branch 'MDL-75970-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-13 14:08:56 +03:00
Stefan Hanauska c9bd3a20b6 MDL-74887 mod_label: Update visibility 2022-10-13 12:42:26 +02:00
Shamim Rezaie a85d347227 Merge branch 'MDL-75642-400' of https://github.com/BruceGoodGuy/moodle into MOODLE_400_STABLE 2022-10-13 16:28:52 +11:00
Tim Hunt b4ed5e95b5 MDL-75727 question regrading: fix each attempt builds on last
This fixes a regression caused by MDL-74752. If you regraded
a subsequent quiz attempt in a quiz using the 'Each attempt
builds on last' option, then the student's response could get lost.
2022-10-12 11:11:18 +01:00
Paul Holden 2700c84d7e MDL-75970 tool_customlang: clarify CLI export target/filename. 2022-10-12 10:16:31 +01:00
Andrew Nicols 24953e5d46 MDL-75962 js: Fix jsdoc violations 2022-10-12 10:07:45 +08:00
Jun Pataleta a2487cbe55 Merge branch 'MDL-75431_400' of https://github.com/AnupamaSarjoshi/moodle into MOODLE_400_STABLE 2022-10-12 09:39:14 +08:00
Jun Pataleta d88a746ec5 Merge branch 'MDL-75887-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-12 09:23:01 +08:00
Simey Lameze 8e5396a6b1 MDL-75887 behat: Add ability to set value regardless of the editor
Prior to this commit, the behat_form_editor integration was hard-coded
to use Atto.

This change allows other editors to be used to set editor values, and
breaks that hard bond. Following this change, any editor is able to
define a behat_editor_[name].php file defining a function which meets
the following signature:

  set_editor_value(string $editorid, string $value): void

Each editor is responsible for checking whether its own API is available
and calling any relevant functions to force the editor to set the
content.

Please note: Behat is unable to determine the current editor in use on
the page automatically.
2022-10-12 06:44:30 +08:00
Andrew Nicols e2ea6b2a8a MDL-75959 customfield: Correct inappropriate class import
I suspect this was an incorrect tab completion import by an IDE which
was missed.
2022-10-12 06:40:33 +08:00
sam marshall a7d47d7813 MDL-75736 lib: Course cache can be rebuilt unnecessarily
This change puts back the behaviour that get_fast_modinfo will accept
a cached version of modinfo that is newer than expected (according to
the course cacherev).

Not accepting newer versions can lead to poor performance in cases
where multiple requests take place at once, or using a clustered
database.
2022-10-11 16:59:59 +01:00
Jun Pataleta 3af0824487 weekly release 4.0.4+ 2022-10-11 23:16:36 +08:00
Jun Pataleta 9872e6f74f Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-10-11 23:16:34 +08:00
AMOS bot 5368babac0 Automatically generated installer lang files 2022-10-11 00:07:33 +00:00
sam marshall d450c5931b MDL-75834 lib: Focus lock JS bug when focus area removed 2022-10-10 16:35:21 +01:00
Sara Arjona 74a5ef1332 Merge branch 'MDL-75656-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-10 16:16:26 +02:00
Anupama Sarjoshi 689a57fa74 MDL-75431 qbank: fix tests with CodeRunner installed 2022-10-10 12:57:52 +01:00
Jun Pataleta 3d32032451 Merge branch 'MDL-75923-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-10 18:24:29 +08:00
Jun Pataleta eee7623eb8 Merge branch 'MDL-75909-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-10 18:08:20 +08:00
Jun Pataleta 30dbafdcdf Merge branch 'MDL-75922-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-10 14:55:26 +08:00
Jun Pataleta 169cb76c9e Merge branch 'MDL-75910-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-10 11:07:15 +08:00
Simey Lameze 7edd9db682 MDL-75923 tool_usertours: Update tour content to match formatted content
When an HTML content area contains invalid HTML, some editors will clean
and validate the content upon submission.

In this case the content was:

    <b>Test content</b>

But this should be wrapped in some form of container which accepts
phrasing content (such as a <p> tag).

Some editors, such as TinyMCE, will normalise the content and add the
wrapping paragraph tags to it.

Furthermore, the bold tag is purely stylistic and does not have semantic
meaning. As a result, the <strong> tag is favoured and some editors,
again such as TinyMCE, will replace bold tags with strong tags.

We should update the content here to be valid HTML (wrap the bold tag
in a para), and use a strong tag rather than bold. This allows this test
to pass both with Atto, and other stricter editors such as TinyMCE 6.
2022-10-10 09:13:41 +08:00
Simey Lameze 583b3e5b3f MDL-75922 behat: Apply @editor_atto tag to tests requiring Atto
These steps are currently using Atto-specific UI features and must
therefore make use of the @editor_atto tag to ensure that they continue
to run using Atto.

A new issue will be raised to migrate each of these to be
editor-agnostic.
2022-10-09 20:26:58 +08:00
Andrew Nicols 45ea8119c6 Merge branch 'MDL-61395-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-09 13:13:16 +08:00
Stefan Hanauska 56cc6bf703 MDL-74887 course: Hide stealth mode without view page 2022-10-08 08:09:38 +02:00
AMOS bot 9cd9153777 Automatically generated installer lang files 2022-10-08 00:07:33 +00:00
Luca Bösch 60c61a832a MDL-74789 course: category full width 2022-10-07 09:25:55 +02:00
Michael Hawkins 8430dc556f MDL-72836 core: Updated security.txt expiry and policy URL 2022-10-07 14:12:05 +08:00
Mikhail Golenkov e9b68a5f13 MDL-75907 core: Add index on temp table to optimise stats cron 2022-10-07 16:18:13 +11:00
Andrew Nicols b4493c2a16 weekly release 4.0.4+ 2022-10-07 13:03:55 +08:00
Andrew Nicols e51085274a Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-10-07 13:03:53 +08:00
Khoa Nguyen Dang 3a886db065 MDL-75642 quiz: Delete multiple (random) questions from quiz 2022-10-07 11:04:02 +07:00
AMOS bot 816e396380 Automatically generated installer lang files 2022-10-07 00:07:39 +00:00
Simey Lameze fc40e74d15 MDL-75910 core_form: Allow editor field to set a hidden label
When an editor is used in a form as part of a group, it is missing its
label element.

This happens because there is no inline template for the editor, and
therefore it reverts to using the old `toHtml` function. The legacy
function does not cater to the editor being in a group, and therefore
does not add the hidden label.

In addition, the hiddenLabel attribute was missing from the editor
element. This is a semi-standard element but must be added to each
supporting element.

Both the missing inline template for the editor, and the hidden label
attribute must be present:
- If the hidden label attribute is not present, then the standard inline
  template will add a visible label within the group.
- If the inline editor template is missing, then the label is not shown
  at all.
2022-10-06 22:54:05 +08:00
Andrew Nicols dc27423087 MDL-75909 mod_data: Make template editor use html editor
When the template editor is configured to use the HTML Editor, it should
indicate this to Behat by setting the `data-fieldtype` to "editor".

This indicates to the behat field manager that the editor is in use,
which ensures that the correct value setting can take place.

This is important in the context of MDL-75887.
2022-10-06 21:48:25 +08:00
Andrew Nicols d62139e86b MDL-71686 core_form: Include missing build 2022-10-06 14:44:17 +08:00
Andrew Nicols fa0dd0abab MDL-71686 core_form: Move form serializer to shared function 2022-10-06 10:21:24 +08:00
Andrew Nicols 5d6424de33 Merge branch 'MDL-71686-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-10-06 10:21:20 +08:00
Shamim Rezaie 3a70d7e816 Merge branch 'MDL-75886-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-10-06 12:24:24 +11:00
Andrew Nicols b3f611a14e MDL-75752 question: Bind contextid param in comment backup
In source_sql, unmapped values must be bound using the
backup_helper::is_sql_param() function.
2022-10-06 09:07:42 +08:00
Andrew Nicols e3b8864cc4 Merge branch 'MDL-75752_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-10-06 09:07:31 +08:00
Víctor Déniz 7c46149ec5 Merge branch 'MDL-74569-400' of https://github.com/lucaboesch/moodle into MOODLE_400_STABLE 2022-10-06 01:44:07 +01:00
Víctor Déniz 3276137f1a Merge branch 'MDL-75192-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-06 01:08:57 +01:00
Víctor Déniz 1eaf570ea7 Merge branch 'MDL-75729-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-10-05 22:07:56 +01:00
Paul Holden 3afbd2a0ad MDL-75077 output: prevent duplicate ID errors in custom menus.
Following on from 8e4a7c6b, we should apply a similar change to
custom menus to account for being collapsed into the "More" menu.
2022-10-05 18:30:08 +01:00
Thorsten Siegmund Bartel 02e99e4a4d MDL-74606 mod_assign: Support multilanguage strings in group names. 2022-10-05 12:54:09 +02:00
Andrew Nicols 80799bfec1 MDL-75886 atto: Always use Atto for @atto tests
This change, which should be easy to mimic for other editors.

This will ensure that the correct editor is used for tests relating to
that editor, or its subplugins.
2022-10-05 09:54:48 +08:00
Jun Pataleta 4d9a42c7d8 Merge branch 'MDL-75351_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-10-04 20:36:10 +08:00
Jun Pataleta 3eba3dc263 Merge branch 'MDL-66955-m400' of https://github.com/NeillM/moodle into MOODLE_400_STABLE 2022-10-04 16:36:34 +08:00
AMOS bot 95c0628b61 Automatically generated installer lang files 2022-10-04 00:07:36 +00:00
Shamiso.Jaravaza 5ee9422b3d MDL-75711 mod_bigbluebuttonbn: Fix recent activity 2022-10-03 11:03:42 -06:00
Frederik Milling Pytlick df530a7012 MDL-75876 core_calendar: Add raise_memory_limit call to export_execute
Added a call to raise_memory_limit in /calendar/export_execute.php as it can be very memory intensive.
2022-10-03 12:47:14 +02:00
sam marshall 0a5b0201b4 MDL-75074 core_courseformat: Output classes are not inherited
If you have one course format that extends another one, any course
format output classes that are not defined in the child format will
now inherit from the parent (instead of from the base class as
before).
2022-10-03 11:22:05 +01:00
Paul Holden 320d38bb49 MDL-73030 backup: case-insensitive detection of Moodle backups. 2022-10-03 09:32:11 +01:00
Paul Holden 21478a1e5e MDL-72058 reportbuilder: replace custom dataformat export format.
The formatting of exported dataformat content is now always dependent
on whether the format supports HTML or not, so we no longer need our
custom export class for providing the same.
2022-10-03 09:15:58 +01:00
Paul Holden e69c09d756 MDL-72058 dataformat: remove HTML when export format lacks support. 2022-10-03 09:15:58 +01:00
Andrew Nicols aba165140b Merge branch 'MDL-75836_400' of https://github.com/jrchamp/moodle into MOODLE_400_STABLE 2022-10-02 21:44:21 +08:00
Tim Hunt 9cd481431b MDL-75351 question comments: don't hard-code system context id 2022-09-30 18:46:43 +02:00
Andrew Nicols 5de4468345 MDL-75614 dml: Unit tests must test something 2022-09-30 16:38:12 +08:00
Andrew Nicols 632bbfafe1 Merge branch 'MDL-75614-debugsqltrace-MOODLE_400_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_400_STABLE 2022-09-30 16:38:08 +08:00
Neill Magill 152d919261 MDL-66955 messages: Improve speed of message search
The OR conditions in the WHERE clause prevented the query from
effectively filtering the messages related to the user quickly, this
change helps gets around this by allowing the database to limit
the rows in the messages table it needs to scan significantly.
2022-09-30 08:30:05 +01:00
Luca Bösch 81f390069d MDL-74569 theme_boost: remove unit from top: 0; 2022-09-30 08:38:47 +02:00
Mihail Geshoski ca77344ead MDL-68437 forum: Support to show only active course users in grader
The following change adds support to show only active course users
in the forum grader and generally replicates the behaviour from the
assignment grader which relies on certain config settings, user
permissions and capabilities.
2022-09-30 12:02:08 +08:00
Mihail Geshoski 7e0b0bc14b MDL-68437 course: ws support to optionally fetch only active users
Modifies the 'core_course_get_enrolled_users_by_cmid' webservice and
the generic js methods that call this webservice and enables defining
whether the ws should only return the active users or all enrolled
users in the course.
2022-09-30 12:02:08 +08:00
Jake Dallimore cdd954430f weekly release 4.0.4+ 2022-09-30 10:17:34 +08:00
Tim Hunt 6ddf63486d MDL-75752 question comments: fix backup query so it uses the index
This should greatly improve the performance.
2022-09-29 11:38:36 +02:00
Andrew Nicols 21e1d60833 Merge branch 'MDL-74922_MOODLE_400_STABLE_fix_storage_wrapper_validate_cache' of https://github.com/gthomas2/moodle into MOODLE_400_STABLE 2022-09-29 12:06:28 +08:00
Andrew Nicols d7f8f844bd Merge branch 'MDL-75721-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-29 11:57:27 +08:00
Jun Pataleta 643d5ec406 Merge branch 'MDL-75782-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-09-29 11:54:04 +08:00
Andrew Nicols 5ce0f28de8 Merge branch 'MDL-75738-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-09-29 11:40:06 +08:00
Jun Pataleta 3304dec7c5 Merge branch 'MDL-75559-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-09-29 10:54:11 +08:00
Jun Pataleta f1e67ccfa3 Merge branch 'MDL-66902_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-28 23:15:42 +08:00
Andrew Nicols 9ff194ffba Merge branch 'MDL-75459-400' of https://github.com/davewoloszyn/moodle into MOODLE_400_STABLE 2022-09-28 22:47:51 +08:00
Paul Holden 6f5fc5f1ee MDL-75192 reportbuilder: observe start day in current week filter.
Ensure we observe the site configuration/preference for calendar
first day of the week, in the current week date filter.
2022-09-28 13:37:01 +01:00
Jun Pataleta df56d5659d Merge branch 'MDL-75827-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-28 20:36:05 +08:00
Jake Dallimore 4938cbd0af Merge branch '40_mdl75668' of https://github.com/danmarsden/moodle into MOODLE_400_STABLE 2022-09-28 16:35:54 +08:00
Andrew Nicols e6983a7a09 Merge branch 'MDL-75447-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-28 12:43:27 +08:00
Jun Pataleta ffac7011b3 Merge branch 'MDL-72490-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-09-28 11:55:16 +08:00
Jun Pataleta d59e83c423 Merge branch 'MDL-75726_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-28 08:12:03 +08:00
Jun Pataleta 2d337c94eb Merge branch 'MDL-75776_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-28 08:06:50 +08:00
Jonathan Champ 1dc488e333 MDL-75836 activities: preserve moodleform validation errors 2022-09-27 14:24:05 -04:00
Andrew Nicols 54f90e39a1 Merge branch 'MDL-75168-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-27 23:42:25 +08:00
Paul Holden e46420e57e MDL-75168 tag: cleanup module tag instances upon course deletion. 2022-09-27 14:10:57 +01:00
Jun Pataleta 409fb784db Merge branch 'MDL-75800-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-27 20:20:00 +08:00
Andrew Nicols 00d62550c6 Merge branch 'MDL-27570_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-09-27 17:02:13 +08:00
Jun Pataleta 3d08e501fe Merge branch 'MDL-71531-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-09-27 16:29:10 +08:00
Andrew Nicols f215a8b9cc Merge branch 'MDL-75460-400' of https://github.com/ssj365/moodle into MOODLE_400_STABLE 2022-09-27 13:03:43 +08:00
Andrew Nicols acc1354295 MDL-75744 qtype_gapselect: Remove unnecessary javascript tag 2022-09-27 12:45:57 +08:00
Andrew Nicols 9af9a0da85 Merge branch 'MDL-75744-400' of https://github.com/NashTechOpenUniversity/moodle into MOODLE_400_STABLE 2022-09-27 12:37:55 +08:00
Paul Holden 789e3f42c0 MDL-75827 theme_boost: append table elements to popover whitelist.
This allows for their use within popover tooltips, such as those
used for showing help icon dialogues.
2022-09-26 16:00:10 +01:00
Eloy Lafuente (stronk7) d24f96a248 MDL-66902 tests: Fix all incorrect namespaces
This issue just goes over all the currently incorrect
namespaces in test cases and:

1. Change the namespace to the correct one.
2. Move/rename it to correct location if needed (level 2 and down).
3. Remove not needed MOODLE_INTERNAL check when possible.
4. Remove file phpdoc when the file only has one class.
5. Make small adjustments in case the change of namespace requires it.
2022-09-26 14:30:41 +02:00
sam marshall 76c7206927 MDL-75738 tool_moodlenet: Upgrade clean user profile slow, pointless
There is an upgrade to clean the moodlenetprofile field which
performs very poorly, but it is also not needed because an upgrade
further down sets this field to empty string anyway.
2022-09-26 11:25:50 +01:00
Hien Dinh b82b0f6ce5 MDL-72490 availability: Show error if conflict in date restriction 2022-09-26 11:20:51 +01:00
Paul Holden 9a68b6ea7e MDL-61395 forms: style frozen tag element values. 2022-09-26 11:16:04 +01:00
Paul Holden bd048774dd MDL-75656 tag: decode entities in tags element values. 2022-09-26 10:56:33 +01:00
Eloy Lafuente (stronk7) a67daf6b24 MDL-75726 ci: Bump GHA to Ubuntu 22.04
Have tried to also bump Travis to 22.04 (jammy) but it
was not working ok, with problems trying to find both
PHP and PostgreSQL versions.

Surely that's because 22.04 support is really new (Sep 9, 2022):

https://blog.travis-ci.com/22-9-9-ubuntujammy

So we'll have to wait a little more before being able to, also,
bump Travis to use 22.04
2022-09-22 17:45:10 +02:00
Eloy Lafuente (stronk7) da4772d234 MDL-75776 composer: minor updates
In stables, just minors updates to components.

Generated using the instructions @ https://docs.moodle.org/dev/Composer
and using PHP 7.3 (always the min version supported) to generate the
lock file.
2022-09-22 17:44:38 +02:00
Eloy Lafuente (stronk7) d708740c3f weekly release 4.0.4+ 2022-09-22 17:05:44 +02:00
Tim Hunt b20f6471b6 MDL-27570 quiz timing: add unit test and simplify top of process_attempt 2022-09-22 11:12:23 +01:00
Eloy Lafuente (stronk7) 84f03ab16d Merge branch 'MDL-74762_400' of https://github.com/catalyst/moodle-MDL-72752 into MOODLE_400_STABLE 2022-09-21 14:26:40 +02:00
Philipp Imhof bebdb51753 MDL-27570 quiz: check if time is really up 2022-09-21 11:38:24 +01:00
David Woloszyn 4f14495420 MDL-75459 Collapsable Form Sections: Default state bug fix
In circumstances where all collapsible form sections were expanded on
page load, a check is now made to ensure the expand all/collapse all
button behaves as intended.
2022-09-21 12:30:10 +10:00
Nathan Nguyen 1c843805eb MDL-74762 qbank_statistics: fix unit test failure with Oracle DB 2022-09-21 12:10:12 +10:00
Paul Holden d08559b8ae MDL-75800 enrol: correct instance deleted event name. 2022-09-20 14:09:34 +01:00
Jun Pataleta 1febfbebcd Merge branch 'MDL-75777_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-20 15:12:15 +08:00
Víctor Déniz ae317e6527 Merge branch 'MDL-74941-400' of https://github.com/lucaboesch/moodle into MOODLE_400_STABLE 2022-09-20 08:09:06 +01:00
Laurent David d74f805126 MDL-75763 mod_bigbluebuttonbn: Fix get_server_not_available_url
* The redirection should go to xxx?section=modsettingbigbluebuttonbn in case of error
2022-09-20 08:39:10 +02:00
Steve Bader 30cc7e5c1e MDL-74941 qtype_calculated: Copy dataset from previous question version 2022-09-20 08:09:13 +02:00
Luca Bösch 0acbe6914d MDL-74941 qtype_calculated: Fix for usage calculation
The patch for the helper functions is by Nathan Nguyen
<nathannguyen@catalyst-au.net> whom I wish to thank.
2022-09-20 08:09:02 +02:00
Marina Glancy 9ddc556300 MDL-75791 reportbuilder: set persistent for active conditions 2022-09-19 16:54:21 +02:00
Marina Glancy be60921e14 MDL-75358 reportbuilder: display nulls as empty cells in aggregation 2022-09-19 14:44:01 +02:00
Marina Glancy 4e8013e418 MDL-75358 reportbuilder: display nulls as empty cells for numeric/bool 2022-09-19 14:43:56 +02:00
Ilya Tregubov 236b14a90f Merge branch 'MDL-75065-401' of https://github.com/devlionco/moodle into MOODLE_400_STABLE 2022-09-19 14:01:36 +04:00
Eloy Lafuente (stronk7) be02cc3687 MDL-75777 phpunit: Move tests to use correct names and ns (take#6)
Applied the following changes to various testcase classes:

- Namespaced with component[\level2-API]
- Moved to level2-API subdirectory when required.
- Fixed incorrect use statements with leading backslash.
- Remove file phpdoc block
- Remove MOODLE_INTERNAL if not needed.
- Changed code to point to global scope when needed.
- Fix some relative paths and comments here and there.
- All them passing individually.
- Complete runs passing too.
2022-09-19 11:02:50 +02:00
Jun Pataleta 5bd5f5b4c9 Merge branch 'MDL-75757_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-19 13:01:57 +08:00
Andrew Nicols 493ef64d13 MDL-75782 mod_quiz: Make TinyMCE autosave less fragile
This commit amends the quiz autosave feature to not assume the
components of the Tiny API as much, and add support for newer versions
of TinyMCE.
2022-09-19 12:55:41 +08:00
Eloy Lafuente (stronk7) dff5793807 MDL-75757 phpunit: Add some tolerance to a few failing assertions
Recently, PHPUnit (all versions) did some changes about how the
comparators worked and this has caused some float comparisons
to stop working.

We need to move them to assertEqualsWithDelta(), allowing a small
tolerance to workaround the floats comparison problem.

0.00001 has been decided. And applied to all the similar assertions
within the unittest function, so if more cases are added to them
better be copied with the agreed tolerance.
2022-09-18 15:57:01 +02:00
Víctor Déniz 3657cfa88c Merge branch 'MDL-74762_400' of https://github.com/catalyst/moodle-MDL-72752 into MOODLE_400_STABLE 2022-09-16 14:24:53 +01:00
Nathan Nguyen 92f979948f MDL-74762 qbank_statistics: improve performance loading the data
This issue greatly improves the performance of displaying statistics in
the question bank.

1. The required quiz statistics are now pre-computed by a scheduled task.

2. Cached statistics in the database are now never cleaned up, so the
   pre-computed stats are always available.

3. The way the cached statistics are loaded for each question
   that is being displayed is now a bit more efficient.

4. Related to that, there is a new callback which activities can implement,
   if they want their question statistics to be included in the ones shown
   in the question bank.

Note, there is still further improvement possible to load the statistics
for all questions being displayed in bulk. However, that must wait for a
future issue, MDL-75576. The other improvements in this issue are
significant and we did not want to delay releasing them.

Co-authored-by: Jonathan Champ <jrchamp@ncsu.edu>
Co-authored-by: Tim Hunt <t.j.hunt@open.ac.uk>
2022-09-16 21:15:27 +10:00
Sara Arjona 5b90f71153 Merge branch 'MDL-75108-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-09-16 11:23:21 +02:00
Paul Holden 3e97c3ee83 MDL-75721 reportbuilder: select from main table in absence of columns.
Ensure any joins added to the report itself are also present.
2022-09-15 17:07:20 +01:00
Sara Arjona 844abeaf5d weekly release 4.0.4+ 2022-09-15 16:11:51 +02:00
Sara Arjona e7e0609857 Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-09-15 16:11:49 +02:00
hieuvu 3b1ef88cb4 MDL-75744 gapselect: remove empty choices option. 2022-09-15 15:45:35 +07:00
Andrew Nicols 049288a65d MDL-71531 cachestore_file: Stop locking cache files to read
The cache file is only ever written to in the `write_file` function,
where it does so by writing to a temp file and performing an atomic
rename of that file. When writing, the target file is never locked.

The cache file is only ever read in the `get` function, and there is no
need for an exclusive lock in that situation.

There is therefore no need to obtain any lock, shared or exclusive, to
read the cache file. Doing so only affects performance of the file sytem
as file locks must be needlessly obtained and written to disk for a read
operation which does not benefit from them.
2022-09-15 10:14:00 +08:00
Jun Pataleta f5f40abd28 Merge branch 'MDL-75716_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-15 09:55:48 +08:00
Jun Pataleta 24a00a0d97 Merge branch 'MDL-75714_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-15 09:26:13 +08:00
Eloy Lafuente (stronk7) 6e672c0a82 MDL-75714 navigation: Cover a couple of situations with behat
- Guest user attempting to access to single-activity course.
- Not enrolled user attempt to access to single-activity course.

Both should, by default, land to the "cannot access/enrol" page.
2022-09-14 23:41:25 +02:00
Stefan Hanauska ed369e32ef MDL-75714 navigation: Check if node is false 2022-09-14 23:41:25 +02:00
Víctor Déniz fb049600c3 Merge branch 'MDL-75558-400' of https://github.com/ssj365/moodle into MOODLE_400_STABLE 2022-09-14 22:33:57 +01:00
Víctor Déniz a19e234dd3 Merge branch 'MDL-74965-400' of https://github.com/ssj365/moodle into MOODLE_400_STABLE 2022-09-14 20:23:01 +01:00
Ferran Recio 5d6d91b706 MDL-75625 core_courseformat: fix MDL-71979 comments 2022-09-14 20:05:32 +01:00
Marina Glancy bf896b01dc MDL-71686 forms: allow arrays in dynamic forms args 2022-09-14 17:59:10 +02:00
Shamiso.Jaravaza 8f090ac85d MDL-74965 mod_bigbluebuttonbn: Fix error in role 2022-09-14 09:06:00 -06:00
Sara Arjona 49705b1f40 Merge branch 'MDL-74010-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-14 11:41:47 +02:00
Paul Holden 4bd6777cfb MDL-75729 reportbuilder: improve handling of card toggle button. 2022-09-14 10:18:55 +01:00
Jun Pataleta 497e9da529 Merge branch 'MDL-75308-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-14 05:32:57 +08:00
Eloy Lafuente (stronk7) ad01614e9c MDL-75716 phpunit: Move tests to use correct names and ns (take#5)
Applied the following changes to various testcase classes:

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

Special mention to:

- In lib/tests/blocklib_test.php 2 helper classes have been
  moved to tests/fixtures, because they needed to be namespace-free.
2022-09-12 19:29:11 +02:00
Sara Arjona 152bdb1aa1 Merge branch 'MDL-75051_400' of https://github.com/mkassaei/moodle into MOODLE_400_STABLE 2022-09-12 12:30:31 +02:00
Andrew Nicols 0a63b5c08d MDL-75559 behat: Sort behat_hooks to top of context list 2022-09-12 12:33:31 +08:00
AMOS bot 0693f196e7 Automatically generated installer lang files 2022-09-11 00:07:58 +00:00
Eloy Lafuente (stronk7) 8febbe3973 Moodle release 4.0.4 2022-09-10 12:15:57 +02:00
Jun Pataleta f4172c491c Merge branch 'MDL-75708-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-09 20:49:04 +08:00
Paul Holden 190558640e MDL-75708 reportbuilder: consider stress tests as requiring longtest.
We should respect the value of the PHPUNIT_LONGTEST constant in the
report source stress tests, as it was discovered after 165e26fa that
the default configuration of some CIs (GHA) was not sufficient to run
them.

Hence, use the PHPUNIT_LONGTEST to determine whether to execute said
tests. Note this constant is enabled on internal CI.
2022-09-09 11:18:55 +01:00
Mahmoud Kassaei 7c7505e428 MDL-75051 Questions: Selecting idnumber in the question bank,
the copy/pasting, includes extraneous text in Chrome
2022-09-09 10:35:55 +01:00
Jun Pataleta 5b90938614 weekly release 4.0.3+ 2022-09-09 08:36:47 +08:00
Jun Pataleta 306fe2e5d8 Merge branch 'MDL-75227-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-09-08 09:39:45 +08:00
Jun Pataleta 02425dd8d6 Merge branch 'MDL-74081-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-09-08 09:04:54 +08:00
Michael Hawkins 4b434b3264 MDL-68066 output: Apply disable lambda rendering to Mustache renderer 2022-09-07 23:56:29 +08:00
Lars Bonczek ec77ff8474 MDL-68066 output: Mustache - Add option to disable lambda rendering
This commit is based on an outstanding pull request to the Mustache repo
2022-09-07 23:56:29 +08:00
Laurent David 52ae580ad6 MDL-75227 mod_bigbluebuttonbn: Optimize User logs retrieval
* When loading a course with the Recent Activity block the bigbluebuttonbn_print_recent_activity
takes too much time to load the logs. Using the courseid (index of log table) improves the
time taken by the query.
2022-09-07 17:38:06 +02:00
Laurent David 4519964111 MDL-74081 mod_bigbluebuttonbn: Fix codechecker related issues
* Opening braces should be on the same line
* Unwanted MOODLE_INTERNAL
* Behat edit_instance.feature should use "activity editing" page locator
* Coverage indication
2022-09-07 17:27:58 +02:00
Paul Holden f0d5a81699 MDL-72012 mod_h5pactivity: respect user access when getting report. 2022-09-07 22:10:41 +08:00
Jun Pataleta 92c332f491 MDL-75283 core: Fetch proper column mapping for sort
Calling \core_user\fields::get_sql() incerements a static uniqueid
variable. This should be called only once and not make a separate call
for the sort mapping data as it doing so will result to an incorrect
table alias for the sort mapping data.
2022-09-07 17:11:53 +04:00
Ilya Tregubov 49b55a357a Merge branch 'MDL-75555-400' of https://github.com/justusdieckmann/moodle into MOODLE_400_STABLE 2022-09-07 16:37:18 +04:00
Ilya Tregubov ffc2b63cd1 Merge branch 'MDL-74782-400' of https://github.com/ssj365/moodle into MOODLE_400_STABLE 2022-09-07 15:49:35 +04:00
Sara Arjona e20149a2b4 Merge branch 'MDL-74866-400' of https://github.com/HuongNV13/moodle into MOODLE_400_STABLE 2022-09-07 13:10:17 +02:00
stevando b3041d3a0f MDL-75283 admin: Update admin user fetching to use sort helper 2022-09-07 13:18:29 +08:00
Jun Pataleta 2190e59647 Merge branch 'MDL-75553-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-09-07 12:59:34 +08:00
Jun Pataleta 74b24ddc5f MDL-75553 mod_data: Fix wording of data fields in Behat tests 2022-09-07 12:57:18 +08:00
Huong Nguyen c4b1115e8c MDL-74866 bennu: Fix parameter parsing
Some parameter values are wrapped by DQUOTE character.
We need to go through and get the actual value inside the quoted string.
2022-09-07 11:15:52 +07:00
Dan Marsden 4603578b43 MDL-75668 backup: Save context mapping of duplicate blocks. 2022-09-07 12:40:20 +12:00
Paul Holden ab69d5373f MDL-75405 block_html: safer unserialize during old block conversion. 2022-09-07 00:45:20 +02:00
Jun Pataleta 89ee7a5fb7 Merge branch 'MDL-74749-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-09-07 06:40:21 +08:00
Jun Pataleta bd211c77e6 MDL-74749 mod_bigbluebuttonbn: Run import button check scenario in nonJS 2022-09-07 06:39:45 +08:00
Shamiso.Jaravaza a49411b80c MDL-74749 mod_bigbluebuttonbn: Fix import button 2022-09-07 06:39:45 +08:00
David Mudrák a920cd70e3 MDL-75553 lang: Fix Behat regressions in scenario files 2022-09-06 21:48:14 +02:00
Jun Pataleta f47c75b8ae Merge branch 'MDL-75311_400' of https://github.com/lostrogit/moodle into MOODLE_400_STABLE 2022-09-07 00:19:12 +08:00
Jun Pataleta 796962c848 Merge branch 'MDL-75231-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-09-06 23:49:20 +08:00
Jun Pataleta 53a7ba2c5a Merge branch 'MDL-75040-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-06 21:49:30 +08:00
Ilya Tregubov 383581d276 Merge branch 'MDL-73938-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-06 14:29:11 +04:00
Sara Arjona d8f9c2f2a3 Merge branch 'MDL-75548_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-09-05 13:09:45 +02:00
Paul Holden bded9dee9d MDL-73938 reportbuilder: better Oracle support of long text columns.
Specifically during column grouping/aggregation, we need to avoid CLOB
datatype inconsistencies (ORA-00932).
2022-09-05 12:08:57 +01:00
Paul Holden c507f660f7 MDL-73938 reportbuilder: helper methods for automating report tests.
Implement stress tester methods for iterating over report columns,
aggregation and conditions. Assert that each works correctly in
isolation, and when used in conjunction with other columns.
2022-09-05 12:07:13 +01:00
Ilya Tregubov c04f9ad6b3 Merge branch 'MDL-60666-400' of https://github.com/ilyatregubov/moodle into MOODLE_400_STABLE 2022-09-05 14:37:36 +04:00
Sara Arjona 0b319d563b Merge branch 'MDL-75608-m400' of https://github.com/sammarshallou/moodle into MOODLE_400_STABLE 2022-09-05 12:25:04 +02:00
Peter Sistrom 03f4fb4c74 MDL-60666 auth_ldap: One transaction per user 2022-09-05 14:22:43 +04:00
Paul Holden 459334249b MDL-73938 reportbuilder: add filters API to support stress testing.
Filter types can now define sample values, to be used in forthcoming
stress test helpers, in order for them to become active in a report.
2022-09-05 11:15:30 +01:00
Sara Arjona 6846949785 Merge branch 'MDL-75550-400' of https://github.com/mickhawkins/moodle into MOODLE_400_STABLE 2022-09-05 08:57:31 +02:00
Sara Arjona 26af1b6723 Merge branch 'MDL-75199-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-09-05 08:43:53 +02:00
Jun Pataleta 651bf5711d Merge branch 'MDL-75641_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-09-05 14:37:21 +08:00
Helen Foster 132dba3ed2 MDL-75553 lang: Import fixed English strings (en_fix) 2022-09-04 20:49:22 +02:00
Eloy Lafuente (stronk7) 8b0fa0dc75 MDL-75641 core_lang: Add string for new Europe/Kyiv timezone
With IANA TZDB (timezone database) release 2022b, Europe/Kiev
has been renamed to Europe/Kyiv. So we need to add this string
to our list to keep tests passing.

Note that the old Europe/Kiev continues working (is an alias) and,
also, there are places in core where we are using it. Just we cannot
remove/replace those uses in core until we ensure that everybody is
using PHP 8.0.23 (TZDB 2022b) or more recent versions. Hence,
not changing those uses now.
2022-09-04 10:11:39 +02:00
Paul Holden 2ae6bde9dc MDL-75447 reportbuilder: return only valid audience instances. 2022-09-02 12:33:59 +01:00
Ilya Tregubov b2e9ca957a weekly release 4.0.3+ 2022-09-02 08:49:16 +04:00
Brendan Heywood 65d259ef55 MDL-75614 dml: Fixed debugsqltrace with anon classes bug 2022-09-02 11:42:31 +10:00
Jun Pataleta abca7c9ba0 Merge branch 'MDL-74770-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-09-01 11:32:08 +08:00
Jun Pataleta d50f0c1af6 Merge branch 'MDL-75092-MOODLE_400_STABLE' of https://github.com/PhMemmel/moodle into MOODLE_400_STABLE 2022-09-01 11:05:09 +08:00
Laurent David 5f396bff51 MDL-75199 mod_bigbluebuttonbn: Add CLI command to migrate recordings
* Sometimes recordings are not migrated when upgrating from pre-4.0 release
version. The additional script will allow to launch the migration once again
either for specific courses or activities.
2022-08-31 17:42:16 +02:00
Jun Pataleta aa9ee6b727 Merge branch 'MDL-75111_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-08-31 23:05:53 +08:00
Sara Arjona 347054c624 Merge branch 'MDL-73076-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-08-31 15:45:35 +02:00
Jun Pataleta 842db17331 Merge branch 'MDL-75019-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-08-31 20:25:17 +08:00
Ilya Tregubov 9b2a17d6cb Merge branch 'MDL-74901-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-08-31 16:01:13 +04:00
Marina Glancy 1d926fabd4 MDL-74969 core_form: same style for headers without shortforms 2022-08-31 12:29:37 +02:00
Paul Holden c2083cdfc1 MDL-75040 block_completionstatus: correct current course navigation. 2022-08-31 09:56:32 +01:00
Ilya Tregubov b3b2fb4681 Merge branch 'MDL-74861-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-08-31 11:52:51 +04:00
Michael Hawkins f238d324af MDL-75550 lib: Update Mustache const to reflect correct version
Mustache version 2.14.1 is already included, but the VERSION const
incorrectly listed 2.14.0 in the tagged Mustache release. A later
upstream commit corrected this in the library, which this now matches.
2022-08-31 15:29:44 +08:00
Sara Arjona 96d1fbcaa5 Merge branch 'MDL-74873-m400' of https://github.com/dthies/moodle into MOODLE_400_STABLE 2022-08-30 16:10:14 +02:00
Sara Arjona 401c26aa38 Merge branch 'MDL-68717-400' of https://github.com/laurentdavid/moodle into MOODLE_400_STABLE 2022-08-30 16:05:04 +02:00
Paul Holden fc0bd43f9d MDL-75308 task: explicit check for tasks of disabled plugins.
The enabled state of a plugin is a tri-state value (boolean or
null). We should be consistent with elsewhere by only considering
boolean false as an actually disabled plugin.

See also cdcb53a1 for similar change in task management.
2022-08-30 13:03:52 +01:00
Víctor Déniz 76102e0f11 Merge branch 'MDL-75360-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-08-30 11:43:10 +01:00
sam marshall 630ccf76e3 MDL-75608 Behat: Expand all fieldsets step fails with single fieldset 2022-08-30 11:18:36 +01:00
Jun Pataleta 6f01131eeb MDL-70480 mod_assign: Apply proper upgrade savepoint version 2022-08-30 17:20:22 +08:00
Jun Pataleta 231a77fb58 MDL-70480 mod_assign: Bump version.php properly 2022-08-30 17:02:35 +08:00
Víctor Déniz e61ec8f0a8 Merge branch 'MDL-70480-400' of https://github.com/chanqihui/moodle into MOODLE_400_STABLE 2022-08-30 09:16:15 +01:00
Ilya Tregubov 0022f54de5 Merge branch 'MDL-71662-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-08-30 08:00:08 +04:00
Jun Pataleta e198efde5a Merge branch 'MDL-73685-admin-role-bug-MOODLE_400_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_400_STABLE 2022-08-29 15:47:49 +08:00
Eloy Lafuente (stronk7) 5c884e835e MDL-75111 phpunit: Move tests to use correct names and ns (take#4)
Applied the following changes to various testcase classes:

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

Special mention to:

- The following task tests have been moved within the level2 directory:
  - \core\adhoc_task_test => \core\task\adhoc_task_test
  - \core\scheduled_task_test => \core\task\scheduled_task_test
  - \core\calendar_cron_task_test => \core\task\calendar_cron_task_test
  - \core\h5p_get_content_types_task_test => \core\task\h5p_get_content_types_task_test
  - \core\task_database_logger_test => \core\task\database_logger_test
  - \core\task_logging_test => \core\task\logging_test

- The following event tests have been moved within level2 directory:
  - \core\event_context_locked_test => \core\event\context_locked_test
  - \core\event_deprecated_test => \core\event\deprecated_test
  - \core\event_grade_deleted_test => \core\event\grade_deleted_test
  - \core\event_profile_field_test => \core\event\profile_field_test
  - \core\event_unknown_logged_test => \core\event\unknown_logged_test
  - \core\event_user_graded_test => \core\event\user_graded_test
  - \core\event_user_password_updated_test => \core\event\user_password_updated_test

- The following output tests have been moved within level2 directory:
  - \core\mustache_template_finder_test => \core\output\mustache_template_finder_test
  - \core\mustache_template_source_loader_test => \core\output\mustache_template_source_loader_test
  - \core\output_mustache_helper_collection_test => \core\output\mustache_helper_collection_test

- The following tests have been moved to their correct tests directories:
  - lib/tests/time_splittings_test.php => analytics/tests/time_splittings_test.php

- All the classes and tests under lib/filebrowser and lib/filestorage
  belong to core, not to core_files. Some day we should move
  them to their correct subsystem.
- All the classes and tests under lib/grade belong to core, not
  to core_grades. Some day we should move them to their correct
  subsystem.
- The core_grades_external class and its \core\grades_external_test
  unit test should belong to the grades subsystem or, alternatively,
  to \core\external, they both should be moved together.
- The core_grading_external class and its \core\grading_external_test
  unit test should belong to the grading subsystem or, alternatively,
  to \core\external, they both should be moved together.
- The \core\message\message and \core\message\inbound (may be others)
  classes, and their associated tests should go to the core_message
  subsystem.
- The core_user class, and its associated tests should go to the
  core_user subsystem.
- The \core\update namespace is plain wrong (update is not valid API)
  and needs action 1) create it or 2) move elsewhere.
2022-08-26 16:34:24 +02:00
Shamim Rezaie cd11b40558 weekly release 4.0.3+ 2022-08-26 21:07:38 +10:00
Justus Dieckmann d6ff7db956 MDL-75555 core_courseformat: Remove duplicate section collapse requests
Previously, by simulating a click, the section toggle listener
was invoked again. Instead, it now uses the bootstrap collapse
function directly.
2022-08-25 23:19:27 +02:00
Shamiso.Jaravaza d30eabf344 MDL-75558 mod_bigbluebuttonbn: Fix alert banner 2022-08-23 17:19:06 -06:00
Tim Hunt 9a0c490680 MDL-75548 misc: final Required parameter follows optional notices 2022-08-22 15:19:34 +01:00
Simey Lameze 0a3c2be3a7 MDL-75231 files: make bucket calculations more precise
This commit changes changes the unit test calculations to
keep track of the time the bucket starts/finishes bursting
and use milliseconds instead of seconds to have a precise
time to sleep.
2022-08-22 13:54:03 +08:00
Philipp Memmel e066c613c7 MDL-75092 backup: Fix selector for adding select all/none link 2022-08-19 17:23:13 +02:00
Sara Arjona 78f0557607 Moodle release 4.0.3 2022-08-19 09:50:23 +02:00
Mikhail Golenkov 02cca91bfe MDL-75448 assignfeedback_editpdf: Fix conversion for rotated images 2022-08-19 15:38:03 +10:00
Mikhail Golenkov c3474f0fb7 MDL-75448 stored_file: Cover rotate_image() method with unit tests 2022-08-19 15:38:03 +10:00
Paul Holden ae8059d346 MDL-74770 gradereport_grader: allow sorting by all user fields. 2022-08-18 15:58:17 +01:00
Sara Arjona dd1a805bae weekly release 4.0.2+ 2022-08-18 14:54:15 +02:00
Laurent David 00e3145a61 MDL-75210 mod_quiz: fix sequential quiz access
* As a student I should only be able to access the next question or the current question
* The API should not show more than the current question
* Once the quiz is previewed we can see the question in any order (existing behaviour)
* Related to ticket MDL-71728

Co-authored-by: Rajneel Totaram <rjnlfj@yahoo.com>
Co-authored-by: Tim Hunt <t.j.hunt@open.ac.uk>
2022-08-18 08:08:00 +04:00
Brendan Heywood 9b77e1974c MDL-73685 admin: Fix regression from MDL-69498 2022-08-18 13:57:40 +10:00
Andrew Nicols dfb8817998 Merge branch 'MDL-75029-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-08-18 11:17:43 +08:00
Sara Arjona 76e2b6ef9f Merge branch 'MDL-75063-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-08-17 16:53:10 +02:00
Sara Arjona d5c66fa1a4 Merge branch 'MDL-75312-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-08-17 12:26:44 +02:00
Shamim Rezaie e9a7520a17 Merge branch 'MDL-75386-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-08-17 13:29:28 +10:00
Shamim Rezaie c13b24dcaa Merge branch 'MDL-73876-400' of https://github.com/ilyatregubov/moodle into MOODLE_400_STABLE 2022-08-17 02:32:27 +10:00
Sara Arjona db67f81aa6 Merge branch 'MDL-72178-400' of https://github.com/NoelDeMartin/moodle into MOODLE_400_STABLE 2022-08-16 16:58:35 +02:00
Shamiso.Jaravaza 0e27c5f7a5 MDL-75460 mod_bigbluebuttonbn: Fix lock on start 2022-08-15 23:51:21 -06:00
Laurent David c84606f5a7 MDL-59458 mod_data: Fix sorting data query
* When activating sorting on a different field than the original field
the list of records is empty
2022-08-15 17:13:28 +02:00
Simey Lameze 547a925d39 MDL-73076 completion: split criteria duration test into two tests 2022-08-12 17:13:11 +08:00
Mark Johnson e851106c8f MDL-75388 lib: Update mustache to 2.14.1
MDL-67114 and MDL-73586 local changes removed as they are now available
upstream.
2022-08-12 04:15:20 +02:00
Petr Skoda 754b7af680 MDL-75237 core: improve PARAM_SAFEPATH docs 2022-08-12 04:15:20 +02:00
Petr Skoda d0fd8c6ff4 MDL-75237 qformat_blackboard_six: sanitise blackboard import file paths 2022-08-12 04:15:20 +02:00
Petr Skoda b0388fdc49 MDL-75237 core: Revert MDL-72029
This reverts commit a212b1ec3e.
2022-08-12 04:15:20 +02:00
Petr Skoda 3cbcba14ca MDL-75237 qformat_blackboard_six: Revert MDL-72029
This reverts commit f38397544a.
2022-08-12 04:15:19 +02:00
Paul Holden cdbdc89b32 MDL-75326 h5p: require sesskey to toggle library enabled state. 2022-08-12 04:15:19 +02:00
Shamim Rezaie bcd0bdaf51 weekly release 4.0.2+ 2022-08-12 11:52:51 +10:00
Daniel Thies 1b5c8d3be1 MDL-74873 core_message: Disable notification preferences controls 2022-08-11 12:36:33 -05:00
Noel De Martin d53fbbdd5c MDL-72178 feedback: Implement behat generators
Based on Andrew's WIP from https://github.com/andrewnicols/moodle/commit/b3d40cb20d1f0edf0bf21077c8f94bce5dec56db

Co-authored-by: Andrew Nicols <andrew@nicols.co.uk>
2022-08-11 10:49:41 +02:00
Anton b674666081 MDL-75065 qbank_editquestion: fix creating simple calculated question 2022-08-10 09:43:33 +03:00
Jun Pataleta cb0ab077ff Merge branch 'MDL-75375-400' of https://github.com/junpataleta/moodle into MOODLE_400_STABLE 2022-08-10 00:25:55 +08:00
Brendan Heywood 4e3b6edaaf MDL-75375 cache: Fix file store path cleaning 2022-08-09 23:53:55 +08:00
Jun Pataleta 66401fdedb Merge branch 'MDL-74636_400' of https://github.com/timhunt/moodle into MOODLE_400_STABLE 2022-08-09 11:11:11 +08:00
Jun Pataleta a3d771cdca Merge branch 'MDL-74800-400' of https://github.com/ferranrecio/moodle into MOODLE_400_STABLE 2022-08-08 22:34:12 +08:00
Jun Pataleta a034c10238 MDL-74800 core: block actions fix suggestion 2022-08-08 14:51:28 +02:00
Jun Pataleta 1a7939778b MDL-74800 core: action menu role fix
The action menu could have a role button or menubar depending on the
number of options available.
2022-08-08 14:51:28 +02:00
Ferran Recio 68b3f1e4a7 MDL-74800 core_courseformat: fix accessibility checks 2022-08-08 14:51:23 +02:00
Ferran Recio 357960c02f MDL-74800 output: fix edit button accessibility 2022-08-08 14:49:01 +02:00
Ferran Recio 798edb457c MDL-74800 message: fix invalid aria-label attributes 2022-08-08 14:49:01 +02:00
Laurent David ce372c1185 MDL-68717 core_calendar: Hide completed event
* "expectcompletionon" type of event should be hidden if the related
activity is completed
2022-08-08 07:18:57 +02:00
Jun Pataleta 4e0aa8af6c Merge branch 'MDL-74211-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-08-08 11:14:52 +08:00
Shamiso.Jaravaza 013378277a MDL-74782 mod_bigbluebuttonbn: Fix only imported
* When Show imported links only is enabled in activity or config, only imported recordings will appear
* Logic for activity/default overrides implemented
2022-08-05 09:58:53 -06:00
Paul Holden 59ce247b72 MDL-74010 core: check defined MDL_PERF* values in conditionals. 2022-08-05 11:03:02 +01:00
Angelia Dela Cruz 9dca9da48c MDL-75063 behat: BigBlueButton behat generators use UI
Replace steps that manually add BigBlueButton instances via the UI
and use Behat generators. This improves the speed of the Behat test
runs.

Co-authored-by: Simey Lameze <simey@moodle.com>
2022-08-05 17:29:51 +08:00
Ilya Tregubov ee48012f9c Merge branch 'MDL-74475-400' of https://github.com/aanabit/moodle into MOODLE_400_STABLE 2022-08-05 12:26:37 +04:00
Andrew Nicols a9a1791fe7 MDL-75386 theme: Include CSS from editor subplugins in editor style
Editor stylesheets are kept separately to standard plugin stylesheets so
that they can be provided to style individual iframes where loading the
standard Moodle stylesheets would be incorrect.

Unfortunately the editor stylesheet system does not consider that
subplugins may want to add small individual styling to the editor but
this is required in some situations.
2022-08-05 14:18:42 +08:00
Angelia Dela Cruz 1f464b4045 MDL-75019 behat: Folder behat generators use UI
Replace steps that manually add Folder instances via the UI and
use Behat generators. This improves the speed of the Behat test
runs.
2022-08-05 14:06:06 +08:00
Ilya Tregubov 8eb4217a49 weekly release 4.0.2+ 2022-08-05 08:29:17 +04:00
Andrew Lyons eb1ea16009 MDL-73876 behat: Show exceptions stack trace 2022-08-04 16:51:44 +04:00
Paul Holden b9277ef5e2 MDL-75029 block_news_items: indicate posts made by deleted users. 2022-08-04 09:43:23 +01:00
Qihui Chan 57d91f1f2a MDL-70480 mod_assign: fix user and group submission and update database 2022-08-04 18:06:01 +10:00
Jun Pataleta 61421c7930 Merge branch 'MDL-74895-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-08-04 11:35:39 +08:00
Jun Pataleta 287d2a5e12 Merge branch 'MDL-69251-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-08-04 11:16:13 +08:00
Andrew Nicols ff60bfb0bf Merge branch 'MDL-56923-400' of https://github.com/rezaies/moodle into MOODLE_400_STABLE 2022-08-04 11:12:56 +08:00
Andrew Nicols 8a79df8f2a Merge branch 'MDL-74502-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-08-04 11:08:58 +08:00
Jake Dallimore f5342a222d Merge branch 'MDL-74766-400' of https://github.com/JBThong/moodle into MOODLE_400_STABLE 2022-08-04 10:59:37 +08:00
Andrew Nicols 1cc0b4832d Merge branch 'MDL-75080-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-08-04 10:44:51 +08:00
Andrew Nicols 3363d697f6 Merge branch 'MDL-74655-400' of https://github.com/NoelDeMartin/moodle into MOODLE_400_STABLE 2022-08-04 10:08:46 +08:00
Andrew Nicols b1837e6cf9 MDL-74492 editor_atto: Comment the regex change 2022-08-04 10:04:59 +08:00
Philipp Imhof 4fecc12ea1 MDL-74492 editor_atto: <line> tags should not be confused with <li> tags 2022-08-04 10:04:59 +08:00
Simey Lameze 2937e76650 MDL-74211 behat: convert few more steps to use new data generators 2022-08-04 09:47:08 +08:00
Simey Lameze b1f8463bc1 MDL-74211 behat: replace steps to use new categories page type 2022-08-04 09:47:08 +08:00
Simey Lameze 1947886e0e MDL-74211 behat: add course question categories page type 2022-08-04 09:47:08 +08:00
Simey Lameze 38d68b8f3e MDL-74211 quiz: make use of question data generators 2022-08-04 09:47:08 +08:00
Paul Holden 1a225bc908 MDL-71662 mod_h5pactivity: add group filter to attempts report. 2022-08-03 15:30:42 +01:00
Ilya Tregubov c4b3e06f8a Merge branch 'MDL-75185-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-08-03 16:27:46 +04:00
Jun Pataleta 9ff2f0d7de Merge branch 'MDL-75285-400' of https://github.com/marinaglancy/moodle into MOODLE_400_STABLE 2022-08-03 18:04:05 +08:00
Jun Pataleta e9ae523134 Merge branch 'MDL-74740-400-1' of https://github.com/mihailges/moodle into MOODLE_400_STABLE 2022-08-03 17:03:50 +08:00
Jun Pataleta 16c5a3a0dd Merge branch 'MDL-62959-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-08-03 16:52:04 +08:00
Noel De Martin 8dae0dec69 MDL-74655 competency: Implement behat generators 2022-08-03 10:48:36 +02:00
Amaia Anabitarte e839fe812d MDL-74475 core_badges: Behat test using new step 2022-08-03 10:36:08 +02:00
Amaia Anabitarte f164065979 MDL-74475 behat: Option to jump to course edit page 2022-08-03 10:36:08 +02:00
Andrew Nicols 58dd489eae Merge branch 'MDL-72430-400' of https://github.com/HuongNV13/moodle into MOODLE_400_STABLE 2022-08-03 12:49:35 +08:00
Paul Holden ba1c2e8d86 MDL-75360 user: relax initial parameter types of external method.
Defer cleaning of supplied text to inside the method, so we don't
throw confusing exceptions if a user enters "unsafe" characters in
the form input.
2022-08-02 21:04:34 +01:00
Jun Pataleta 05875057c6 Merge branch 'MDL-75205-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-08-02 23:18:21 +08:00
Paul Holden 8ee995dfad MDL-75205 reportbuilder: include report parameters on filters reset.
When resetting report filters, we need to include the original report
parameters in the external method call to ensure all those that are
required during validation are present (e.g. when determining if user
can view the current system report).
2022-08-02 12:43:55 +01:00
Jun Pataleta f313b73822 Merge branch 'MDL-74947-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-08-02 10:00:44 +08:00
Marina Glancy 492bac151d MDL-75285 core_reportbuilder: allow left joins on category entity 2022-07-29 12:48:20 +02:00
Tim Hunt 241b6628f5 MDL-74636 behat: step to skip this scenario if a plugin isn't installed 2022-07-29 09:49:09 +01:00
Jun Pataleta 5f68f288a0 Merge branch 'MDL-75244-400' of https://github.com/andrewnicols/moodle into MOODLE_400_STABLE 2022-07-29 15:29:50 +08:00
Andrew Nicols 1c47240630 Merge branch 'MDL-72349_M400_update_strip_double_headers_function' of https://github.com/christina-roperto/moodle into MOODLE_400_STABLE 2022-07-29 12:11:56 +08:00
Jun Pataleta a866652ea4 weekly release 4.0.2+ 2022-07-29 10:56:42 +08:00
Angelia Dela Cruz 80b9cafca8 MDL-75080 behat: Chat behat generators use UI
Replace steps that manually add Chat instances via the UI and use
Behat generators. This improves the speed of the Behat test runs.
2022-07-29 10:25:54 +08:00
Andrew Nicols b81c83e461 MDL-75244 form: Change checker should check existence of tinyMCE API
The window.tinyMCE.editors API was present in version 3 of TinyMCE, but
is not present in later versions. As a result, this check tries to loop
over a variable which does not exist and throws an error in the process.

We should check that window.tinyMCE *and* window.tinyMCE.editors both
exist before attempting to loop over them.
2022-07-28 16:09:21 +08:00
Carlos Castillo 8eee29fb93 MDL-75311 reportbuilder: Fix error when send report schedule 2022-07-27 08:52:44 -05:00
Jun Pataleta b360784c5b Merge branch 'MDL-74964-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-07-27 17:12:56 +08:00
Jun Pataleta 306a4e04aa Merge branch 'MDL-74656-400-fix' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-07-27 16:37:38 +08:00
Simey Lameze 092213c80d MDL-62959 calendar: add behat to test event type changing 2022-07-27 15:45:11 +08:00
Paul Holden 321a8cb0ca MDL-74656 reportbuilder: cast fields to char on mssql during concat. 2022-07-27 08:22:10 +01:00
Jun Pataleta 0f62627d13 Merge branch 'MDL-74808-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-07-27 13:22:03 +08:00
Simey Lameze 319a50649e MDL-62959 calendar: fix event data mapping for group id 2022-07-27 11:46:14 +08:00
Marina Glancy 5715b74d3a MDL-74964 core_enrol: enrolment page UI fixes 2022-07-27 08:18:10 +08:00
Paul Holden c83345aa11 MDL-75312 question: predictable ordering of available questions.
This solves sporadic test failure that tried to assert their order.
2022-07-26 17:12:51 +01:00
Jun Pataleta 9d03236862 Merge branch 'MDL-74656-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-07-26 20:03:17 +08:00
Huong Nguyen 1b40599fbf MDL-72430 Calendar: Fix admin cannot edit course event 2022-07-26 11:49:26 +07:00
Andrew Nicols 7cd2e70ec9 Merge branch 'MDL-73788-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-07-26 11:38:21 +08:00
Jun Pataleta 15d70438bc Merge branch 'MDL-74057-400' of https://github.com/andelacruz/moodle into MOODLE_400_STABLE 2022-07-26 11:02:17 +08:00
Paul Holden eb5cce9b4e MDL-74895 h5p: more resilient error handling during content fetching.
On new installs, the task for downloading new H5P content types would
throw exceptions and exit when encountering unexpected and/or missing
data.
2022-07-25 20:05:38 +01:00
Ilya Tregubov c096179b1c Merge branch 'MDL-75083-MOODLE_400_STABLE' of https://github.com/rzhtwberlin/moodle into MOODLE_400_STABLE 2022-07-25 14:56:08 +04:00
Angelia Dela Cruz 1a6985d6e2 MDL-74057 behat: SCORM behat generators use UI
Replace steps that manually add SCORM instances via the UI and use
Behat generators. This improves the speed of Behat test runs.
2022-07-25 18:33:18 +08:00
Jake Dallimore ed09a5ace4 MDL-74901 core_navigation: support callbacks in frontpage secondary nav
Fixes the site home secondary nav, so that nodes added by plugins
implementing the PLUGIN_extend_navigation_frontpage callback can be
displayed for users who don't have the 'course:update' capability.
This change comprises:
- Removed course:update capability checks from site home (index.php)
and from the secondary nav view. This isn't needed since the nav is
capability aware.
- Fixed the initialisation of the secondary nav for the frontpage
course, removing erroneous duplicate 'home' nodes. The nav is now only
shown if there are nodes to display.
2022-07-25 15:06:54 +08:00
Thong Bui abb6bc93a6 MDL-74766 html_editor: Fix form is submitted as an empty string 2022-07-22 10:14:05 +07:00
Ilya Tregubov 2ccd0743fb weekly release 4.0.2+ 2022-07-21 21:29:51 +04:00
Ilya Tregubov 80f90252b9 NOBUG: Fixed SVG browser compatibility 2022-07-21 21:29:49 +04:00
Ilya Tregubov b5d567068c Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-07-21 21:29:49 +04:00
Jun Pataleta bfcaab9a0f Merge branch 'MDL-75181-400' of https://github.com/call-learning/moodle into MOODLE_400_STABLE 2022-07-21 11:59:31 +08:00
Jun Pataleta 350d1df507 Merge branch 'MDL-75208_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-07-21 11:27:01 +08:00
Víctor Déniz 0de2f98aaa Merge branch 'MDL-73332-400' of https://github.com/martygilbert/moodle into MOODLE_400_STABLE 2022-07-20 19:55:51 +01:00
Laurent David e658f9f04a MDL-75181 mod_bigbluebuttonbn: Fix activity completion exception
* Fix exception raised in core completion module due to the absence of
completionview in get_sort_order
2022-07-20 13:55:51 -04:00
Jun Pataleta 017833a2ab Merge branch 'MDL-75182-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-07-19 22:47:00 +08:00
Christina Thee Roperto 8c9179174d MDL-72349 filelib: update strip_double_headers function 2022-07-19 19:18:35 +10:00
Eloy Lafuente (stronk7) 8cb6079b4f MDL-75208 oracle: Amend a couple of queries to make Oracle happy
The changes introduced here are completely safe, just we stop
binding SITEID and, instead, embed it in the SQL.

Why? Because Oracle 21 has started to return non-sense results
when SITEID is bound.

After lots of tests, attempts, debugging... we have been unable
to find any logic to the need of this change and also, have been
unable to reproduce the problem with a standalone script that
pretty much runs the same queries that the ones changed here.

I'm sure that there is something, somewhere, but have failed
to find it, grrr.

Please read MDL-75208 and linked issues to find more information
about this problem, that is one of the biggest mysteries I've
seen recently. Maybe at the end there is a tiny detail that
explains it all, but it's really well hidden.
2022-07-19 09:52:31 +02:00
Paul Holden 39d606ec27 MDL-74656 reportbuilder: ensure nulls preserved in column callbacks.
When concatenating column fields in order to perform aggregation on
them (e.g. group concatenation), we need to preserve all null values
in the data passed to each column callback.

Co-authored-by: Carlos Castillo <carlos.castillo@moodle.com>
2022-07-19 08:42:30 +01:00
Ilya Tregubov d6cf61731e Merge branch 'MDL-68843-400' of https://github.com/snake/moodle into MOODLE_400_STABLE 2022-07-18 14:16:26 +04:00
Angelia Dela Cruz 9294b6a37f MDL-73788 behat: URL behat generators use UI
Replace steps that manually add URL instances via the UI and use
Behat generators. This improves the speed of Behat test runs.
2022-07-18 17:58:14 +08:00
Jun Pataleta 4525bada77 Merge branch 'MDL-74925-400' of https://github.com/lameze/moodle into MOODLE_400_STABLE 2022-07-18 16:25:43 +08:00
Jake Dallimore 993cc8ff8a MDL-68843 enrol_lti: add tests covering disabled instances in tasks
Verify the expected behaviour of the sync_members and sync_grades tasks
when enrolment instances are disabled, whether as a byproduct of module
deletion, or as status change made by the user.
2022-07-18 16:25:30 +08:00
Jake Dallimore 5ac9ff15a0 MDL-68843 enrol_lti: auto disable orphaned enrolment instances
- pre_course_module_deletion hook to disable on mod delete
- upgrade step dealing with legacy orphaned records
2022-07-18 16:25:30 +08:00
Jake Dallimore 15eec33f91 MDL-68843 enrol_lti: add deleted activity warning to published tools
Adds a warning to the 'name' column of the tables, letting teachers know
that the activity exposed by the method has been deleted and what their
options are.
2022-07-18 16:25:30 +08:00
Simey Lameze 437db87b3e MDL-74925 course: use the correct 'remove' action 2022-07-18 14:50:43 +08:00
Simey Lameze 73d5d4d51f MDL-74925 phpunit: add missing course/format test suite 2022-07-18 14:50:43 +08:00
Jun Pataleta 7d36cf9b34 Merge branch 'MDL-74768-bulkmove-question-after-affects' of https://github.com/catalyst/moodle-MDL-72752 into MOODLE_400_STABLE 2022-07-18 13:49:58 +08:00
Shamim Rezaie 0483366b23 Merge branch 'MDL-74826-400' of https://github.com/rmady/moodle into MOODLE_400_STABLE 2022-07-18 12:19:42 +10:00
AMOS bot f374651109 Automatically generated installer lang files 2022-07-16 00:08:07 +00:00
Denis Brat fef4736613 MDL-69251 enrol_lti: fix sync_members task inconsistent internal state 2022-07-15 12:20:34 +08:00
Marty 4a27fe0a25 MDL-73332 mustache: Fix shortentext helper
In the docs, it claims you can provide length to
the shortentext template helper as a context variable.
In reality, that is not the case.
2022-07-14 09:36:13 -04:00
Víctor Déniz c1910fc822 weekly release 4.0.2+ 2022-07-14 12:06:06 +01:00
Víctor Déniz daf6a7c39e Merge branch 'install_400_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_400_STABLE 2022-07-14 12:06:03 +01:00
Safat Shahin fd82af2f5e MDL-74768 core_question: Fix for question category movement 2022-07-14 11:12:19 +10:00
Víctor Déniz 0fa050c328 Merge branch 'MDL-74671-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-07-14 01:46:25 +01:00
Víctor Déniz 890828d9b4 Merge branch 'MDL-74681-written_time_in_query_end_400' of https://github.com/catalyst/moodle into MOODLE_400_STABLE 2022-07-12 11:54:20 +01:00
Srdjan ffbea7e4fc MDL-74681 lib/dml: moodle_read_slave_trait: written table timestamping
Moved written table timestamping from query_start() to query_end():
We are adjusting table last written times at the end of transaction.
That does not apply to immediate database writes that are not performed
within transaction. This change is to set last written time after the query
has finished for such writes, rather than before it started. That way
long write operations cannot spill over the latency parameter.
2022-07-12 14:42:15 +10:00
Jun Pataleta de0773cb42 Merge branch 'MDL-74595-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-07-12 11:44:08 +08:00
Jun Pataleta b5fc4139c8 Merge branch 'MDL-71747_400' of https://github.com/stronk7/moodle into MOODLE_400_STABLE 2022-07-12 10:50:34 +08:00
AMOS bot 1dab36ae65 Automatically generated installer lang files 2022-07-12 00:08:03 +00:00
Jun Pataleta 60af848bb3 Merge branch 'MDL-74282-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE 2022-07-11 20:35:31 +08:00
Jun Pataleta cf7274f36e Merge branch 'MDL-73215-undef-plagiarismlinks-400' of https://github.com/leonstr/moodle into MOODLE_400_STABLE 2022-07-11 17:02:02 +08:00
Jun Pataleta 0476854339 Merge branch 'MDL-74784-400' of https://github.com/sarjona/moodle into MOODLE_400_STABLE 2022-07-11 16:53:58 +08:00
Jake Dallimore 25a9d276e1 MDL-74947 mod_lti: remove text validation from password field
This is a password field so should not be cleaned.
2022-07-11 13:38:52 +08:00
Johannes Burk cb5943094d MDL-75083 login: prevent double submission
Apply core_form/submit JavaScript code to prevent double submission of login form and guest login button.
Add ID to guest login button to make it addressable.
2022-07-08 16:28:46 +02:00
Paul Holden af0e9fd216 MDL-74282 grade: omit outcomes report if outcomes aren't enabled. 2022-07-08 10:43:34 +01:00
Paul Holden fdca502808 MDL-75185 reportbuilder: order report source listing alphabetically. 2022-07-08 10:07:18 +01:00
Simey Lameze 6f9a0826d7 MDL-74808 lib: replace type summary span by a div 2022-07-08 14:38:04 +08:00
Simey Lameze 8dc41648e3 MDL-74808 question: remove span element from label 2022-07-08 14:38:04 +08:00
Simey Lameze f62ae260f4 MDL-74808 question: only add title attr if tooltip is set 2022-07-08 14:38:04 +08:00
Simey Lameze fe7c20d157 MDL-74808 question: use the correct attr for checked checkboxes 2022-07-08 14:38:04 +08:00
Jake Dallimore 30533452cf MDL-75182 enrol_lti: remove installed lang assumptions from unit tests
Don't assume 'fr' isn't installed, or that 'en' is. Use known
non-existent languages and known installed languages for the relevant
test cases.
2022-07-08 10:11:27 +08:00
Eloy Lafuente (stronk7) ee2e8890f8 MDL-71747 environment: Ensure that check_xmlrpc_usage is in >=39
This is a partial backport of MDL-73270 to ensure that the
check_xmlrpc_usage custom check is present in all the supported
branches and it's applied to all branches able to run php80:

- MOODLE_311_STABLE
- MOODLE_400_STABLE
- master (aka, 4.1 and up)

Note that the whole patch has not been backported, only the
environmental check (xml file and check implementation).
2022-07-07 23:45:39 +02:00
Eloy Lafuente (stronk7) 140f43198d MDL-71747 environment: Apply agreed changes
- PHP 7.4 required.
- Moodle 3.9 required.
- MariaDB 10.4 required.
- PostgreSQL 12 required.
- Oracle 19c required.
2022-07-07 19:19:49 +02:00
Eloy Lafuente (stronk7) ef8eeba26c MDL-71747 environment: 4.1 base information
This is a direct copy of the 4.0 information, to
have the changes under control in the next commit.
2022-07-07 19:19:49 +02:00
Shamim Rezaie 31ad2a3e0e MDL-56923 gradingform_guide: Fix icon positioning in RTL 2022-07-07 16:03:22 +10:00
sam marshall 3c82c11f72 MDL-75108 block_html: Search tries to index directory entries
Search attach_files function should only attach indexable files,
not directory entries which are 0 bytes and cannot be indexed.
2022-07-01 14:09:51 +01:00
Marina Glancy 3c3090b6f9 MDL-74502 behat: when setting a field value it may not be visible
for example in case of editor field, the textarea element is hidden by wysiwyg widget but we still need to be able to set it
2022-07-01 10:31:21 +02:00
Mihail Geshoski 1a1684a6fc MDL-74740 boost: Display the skip links from the blocks drawer
Due to fixed positioning of the block drawer and the navbar, the
z-index css property on the skip link elements from the drawer
is not respected. This ultimately results in the skip links being
stacked behind the navbar. As a workaround, an absolute positioning
will be temporary applied to the block drawer once the current
focus is on an element within the drawer which will stack the
skip links infront of the navbar.
2022-07-01 01:22:45 +08:00
Paul Holden c4ed6da1c5 MDL-74671 phpunit: remove file/directory coverage duplicates. 2022-06-27 10:16:22 +01:00
Paul Holden a12fbfae35 MDL-74595 calendar: consistent breadcrumbs navigating site calendar.
Take #3, see also 7a529cc8 and 81b0d053.
2022-06-24 10:14:56 +01:00
Rodrigo Mady da Silva 948616f4a0 MDL-74826 tool_mobile: Add reportbuilder option in disabledfeatures 2022-06-21 11:29:50 -03:00
Angelia Dela Cruz d324358906 MDL-74861 behat: H5Pactivity behat generators use UI
Replace steps that manually add H5Pactivity instances via the UI
and use Behat generators. This improves the speed of the Behat test
runs.
2022-06-17 16:28:09 +08:00
Angelia Dela Cruz f8c9d93455 MDL-74861 behat: H5P behat generators use UI
Fixed H5P file upload error by adding root directory to detect
the file path and upload package file successfully.
2022-06-17 16:27:38 +08:00
gthomas2 137cfc18ee MDL-74922 javascript: storragewrapper validateCache fix 2022-06-08 09:34:20 +01:00
Leon Stringer 2ea21b9ccf MDL-73215 assign: Undefined var: plagiarismlinks
Fix: $plagiarismlinks is concatenated in return but may not have been
initialised.
2022-05-27 08:55:45 +01:00
Sara Arjona b259811d7a MDL-74784 core_badges: Fix exception with related badges
System badges with related badges were displaying an error before this patch,
because the is_guest($context) function expects a context_course.
2022-05-18 09:16:08 +02:00
1024 changed files with 15729 additions and 9096 deletions
+7 -7
View File
@@ -13,14 +13,14 @@ env:
jobs:
Grunt:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- name: Checking out code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Configuring node & npm
uses: actions/setup-node@v2
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
@@ -54,11 +54,11 @@ jobs:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
php: 7.3
extensions:
db: mysqli
- os: ubuntu-20.04
- os: ubuntu-22.04
php: 8.0
db: pgsql
extensions: xmlrpc-beta
@@ -85,7 +85,7 @@ jobs:
postgresql password: test
- name: Configuring git vars
uses: rlespinasse/github-slug-action@v3.x
uses: rlespinasse/github-slug-action@v4
- name: Setting up PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
@@ -96,7 +96,7 @@ jobs:
coverage: none
- name: Checking out code from ${{ env.GITHUB_REF_SLUG }}
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Setting up PHPUnit
env:
+1
View File
@@ -55,3 +55,4 @@ moodle-plugin-ci.phar
/admin/tool/componentlibrary/hugo/site/data/my-index.json
.hugo_build.lock
.phpcs.xml
jsconfig.json
+1
View File
@@ -233,6 +233,7 @@ const getOwningComponentDirectory = checkPath => {
};
module.exports = {
fetchComponentData,
getAmdSrcGlobList,
getComponentFromPath,
getComponentPaths,
+3
View File
@@ -47,6 +47,9 @@ module.exports = grunt => {
// Load ESLint.
require('./eslint')(grunt);
// Load jsconfig.
require('./jsconfig')(grunt);
// Load JSDoc.
require('./jsdoc')(grunt);
+53
View File
@@ -0,0 +1,53 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2022 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const configuration = {
compilerOptions: {
baseUrl: ".",
paths: {
},
target: "es2015",
allowSyntheticDefaultImports: false,
},
exclude: [
"node_modules",
],
include: [],
};
module.exports = (grunt) => {
const handler = () => {
const jsconfigData = Object.assign({}, configuration);
const path = require('path');
const {fetchComponentData} = require(path.join(process.cwd(), '.grunt', 'components.js'));
const componentData = fetchComponentData().components;
for (const [thisPath, component] of Object.entries(componentData)) {
jsconfigData.compilerOptions.paths[`${component}/*`] = [`${thisPath}/amd/src/*`];
jsconfigData.include.push(`${thisPath}/amd/src/**/*`);
}
grunt.file.write('jsconfig.json', JSON.stringify(jsconfigData, null, " ") + "\n");
};
grunt.registerTask('jsconfig', 'Generate a jsconfig configuration compatible with the LSP', handler);
};
+189
View File
@@ -3539,6 +3539,8 @@
</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_xmlrpc_usage" level="optional">
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="4.0" requires="3.6">
@@ -3733,4 +3735,191 @@
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="4.1" requires="3.9">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="10.4" />
<VENDOR name="mysql" version="5.7" />
<VENDOR name="postgres" version="12" />
<VENDOR name="mssql" version="14.0" />
<VENDOR name="oracle" version="19" />
</DATABASE>
<PHP version="7.4.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="optional"/>
<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="optional">
<FEEDBACK>
<ON_CHECK message="sixtyfourbitswarning" />
</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>
+2 -3
View File
@@ -59,9 +59,8 @@ class mnet_simple_host_form extends moodleform {
$wwwroot = 'http://'.$wwwroot;
}
if ($host = $DB->get_record('mnet_host', array('wwwroot' => $wwwroot))) {
global $CFG;
return array('wwwroot' => get_string('hostexists', 'mnet',
new moodle_url('/admin/mnet/peers.php', array('hostid' => $host->id))));
$str = get_string('hostexists', 'mnet', (new moodle_url('/admin/mnet/peers.php', ['hostid' => $host->id]))->out());
return array('wwwroot' => $str);
}
return array();
}
@@ -87,8 +87,12 @@ class core_role_admins_existing_selector extends user_selector_base {
} else {
$groupnameprefix = get_string('extusers', 'core_role');
foreach ($availableusers as $user) {
$domain = substr($user->email, strpos($user->email, '@'));
$groupname = "$groupnameprefix $domain";
if (isset($user->email)) {
$domain = substr($user->email, strpos($user->email, '@'));
$groupname = "$groupnameprefix $domain";
} else {
$groupname = $groupnameprefix;
}
$result[$groupname][] = $user;
}
}
+1 -1
View File
@@ -63,7 +63,7 @@ Feature: View task logs report and use its filters
Then I should see "Filters applied"
And I should see "Filters (1)" in the "#dropdownFiltersButton" "css_element"
And I should see "Nothing to display"
And I click on "Reset" "button" in the "[data-region='report-filters']" "css_element"
And I click on "Reset all" "button" in the "[data-region='report-filters']" "css_element"
And I should see "Filters reset"
And I should not see "Filters (1)" in the "#dropdownFiltersButton" "css_element"
And I should see "Filters" in the "#dropdownFiltersButton" "css_element"
@@ -1,18 +1,20 @@
@tool @tool_admin_presets
Feature: I can download a preset
Background:
Given I log in as "admin"
And the following "tool_admin_presets > preset" exist:
Given the following "tool_admin_presets > preset" exist:
| name |
| Custom preset |
And I navigate to "Site admin presets" in site administration
@javascript
Scenario: Core and custom preset settings can be downloaded
Scenario: Custom preset settings can be downloaded
Given I log in as "admin"
And I navigate to "Site admin presets" in site administration
When I open the action menu in "Custom preset" "table_row"
Then following "Download" "link" in the "Custom preset" "table_row" should download between "0" and "5000" bytes
And I open the action menu in "Starter" "table_row"
And following "Download" "link" in the "Starter" "table_row" should download between "0" and "5000" bytes
@javascript
Scenario: Core preset settings can be downloaded
Given I log in as "admin"
And I navigate to "Site admin presets" in site administration
When I open the action menu in "Starter" "table_row"
Then following "Download" "link" in the "Starter" "table_row" should download between "0" and "5000" bytes
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\preset_deleted
* @covers \tool_admin_presets\event\preset_deleted
*/
class preset_deleted_test extends \advanced_testcase {
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\preset_downloaded
* @covers \tool_admin_presets\event\preset_downloaded
*/
class preset_downloaded_test extends \advanced_testcase {
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\preset_exported
* @covers \tool_admin_presets\event\preset_exported
*/
class preset_exported_test extends \advanced_testcase {
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\preset_imported
* @covers \tool_admin_presets\event\preset_imported
*/
class preset_imported_test extends \advanced_testcase {
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\preset_loaded
* @covers \tool_admin_presets\event\preset_loaded
*/
class preset_loaded_test extends \advanced_testcase {
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\preset_previewed
* @covers \tool_admin_presets\event\preset_previewed
*/
class preset_previewed_test extends \advanced_testcase {
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\preset_reverted
* @covers \tool_admin_presets\event\preset_reverted
*/
class preset_reverted_test extends \advanced_testcase {
@@ -23,7 +23,7 @@ namespace tool_admin_presets\event;
* @category test
* @copyright 2021 Sara Arjona (sara@moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \tool_admin_presets\event\presets_listed
* @covers \tool_admin_presets\event\presets_listed
*/
class presets_listed_test extends \advanced_testcase {
@@ -7,8 +7,8 @@ Feature: Behat steps for interacting with form work
@javascript
Scenario: Test fields in containers
Given the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
| fullname | shortname | summary | summaryformat |
| Course 1 | C1 | Red | 1 |
When I log in as "admin"
And I am on "Course 1" course homepage
# Just get to any form.
@@ -17,11 +17,15 @@ Feature: Behat steps for interacting with form work
And I set the following fields in the "Appearance" "fieldset" to these values:
| Show activity reports | Yes |
| Number of announcements | 1 |
And I set the following fields in the "Description" "fieldset" to these values:
| Course summary | Green |
Then the field "Show activity reports" in the "Appearance" "fieldset" matches value "Yes"
And the field "Show activity reports" in the "Appearance" "fieldset" does not match value "No"
And the following fields in the "region-main" "region" match these values:
| Course full name | Frog |
| Number of announcements | 1 |
| Course summary | Green |
And the following fields in the "region-main" "region" do not match these values:
| Course full name | Course 1 |
| Number of announcements | 5 |
| Course summary | Red |
@@ -323,7 +323,7 @@ class accessibility {
/**
* This function runs one specified check on the html item
*
* @param string $html The html string to be analysed; might be NULL.
* @param string|null $html The html string to be analysed; might be NULL.
* @param int $contentid The content area ID
* @param int $errid The error ID
* @param string $check The check name to run
@@ -333,7 +333,7 @@ class accessibility {
* @throws \dml_exception
*/
public static function run_one_check(
string $html = null,
?string $html,
int $contentid,
int $errid,
string $check,
+6 -5
View File
@@ -36,7 +36,7 @@ Useful for uploading custom langstrings to AMOS or importing or syncing them to
Options:
-l, --lang Comma seperated language ids to export, default: all
-c, --components Comma seperated components to export, default: all
-t, --target Target to copy the zip files to, default: $CFG->tempdir/customlang
-t, --target Target directory to copy the zip files to, default: $CFG->tempdir/customlang
-o, --overwrite Overwrite existing files in the target folder.
Note: If the target is not set, the files are always overwritten!
-h, --help Print out this help
@@ -73,9 +73,10 @@ if ($options['help']) {
echo $usage;
die;
}
if (!file_exists($options['target'])) {
mkdir($options['target'], 0777, true);
}
// Ensure target directory exists.
$options['target'] = rtrim($options['target'], '/') . '/';
check_dir_exists($options['target']);
cli_writeln(get_string('cliexportheading', 'tool_customlang'));
$langs = [];
@@ -90,7 +91,7 @@ foreach ($langs as $lang) {
$filename = $options['target'] . get_string('exportzipfilename', 'tool_customlang', ['lang' => $lang]);
// If the file exists and we are not using the temp folder it requires an ovewrite.
if ($options['target'] != $dafaulttarget && file_exists($filename) && !$options['overwrite']) {
cli_problem(get_string('cliexportfileexists', 'tool_customlang', $lang));
cli_problem(get_string('cliexportfileexists', 'tool_customlang', ['lang' => $lang]));
continue;
}
cli_heading(get_string('cliexportstartexport', 'tool_customlang', $lang));
+10
View File
@@ -160,6 +160,16 @@ foreach ($langfiles as $lng => $files) {
cli_heading(get_string('clifiles', 'tool_customlang', $lng));
// If we intend to check in any changes, we must first check them out.
if ($checkin) {
cli_writeln(get_string('checkout', 'tool_customlang'));
$progressbar = new progress_bar();
$progressbar->create();
tool_customlang_utils::checkout($lng, $progressbar);
}
foreach ($files as $file) {
// Generate a valid stored_file from this file.
$record = (object)[
@@ -50,6 +50,7 @@ $string['customlang:export'] = 'Export local translation';
$string['customlang:view'] = 'View local translation';
$string['export'] = 'Export custom strings';
$string['exportfilter'] = 'Select component(s) to export';
$string['exportzipfilename'] = 'customlang-export-{$a->lang}.zip';
$string['editlangpack'] = 'Edit language pack';
$string['filter'] = 'Filter strings';
$string['filtercomponent'] = 'Show strings of these components';
+3 -1
View File
@@ -89,7 +89,9 @@ class tool_customlang_utils {
* @param progress_bar $progressbar optionally, the given progress bar can be updated
*/
public static function checkout($lang, progress_bar $progressbar = null) {
global $DB;
global $DB, $CFG;
require_once("{$CFG->libdir}/adminlib.php");
// For behat executions we are going to load only a few components in the
// language customisation structures. Using the whole "en" langpack is
@@ -22,8 +22,7 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_httpsreplace\tests;
namespace tool_httpsreplace;
defined('MOODLE_INTERNAL') || die();
@@ -124,6 +124,12 @@ class controller {
}
if ($rm1 or $rm2) {
// Set the default site language to en if the deleted language pack is the default site language.
if ($CFG->lang === $lang) {
set_config('lang', 'en');
// Fix the user's current language to the default site language.
fix_current_language($CFG->lang);
}
$this->info[] = get_string('langpackremoved', 'tool_langimport', $lang);
event\langpack_removed::event_with_langcode($lang)->trigger();
return true;
@@ -77,9 +77,10 @@
ucw.registerEvents('[data-region="user-competency-status"]');
ucw.on('status-changed', infoReloader.reload.bind(infoReloader));
ucw.on('error-occured', infoReloader.reload.bind(infoReloader));
var inlineGrader = new mod('#rate_{{uniqid}}', '{{competency.scaleid}}', '{{competency.competency.id}}', '{{user.id}}', '{{plan.id}}', '', '{{#str}}chooserating, tool_lp{{/str}}');
inlineGrader.on('competencyupdated', infoReloader.reload.bind(infoReloader));
{{#cangrade}}
var inlineGrader = new mod('#rate_{{uniqid}}', '{{competency.scaleid}}', '{{competency.competency.id}}', '{{user.id}}', '{{plan.id}}', '', '{{#str}}chooserating, tool_lp{{/str}}');
inlineGrader.on('competencyupdated', infoReloader.reload.bind(infoReloader));
{{/cangrade}}
});
{{/js}}
{{/usercompetency}}
@@ -95,13 +95,14 @@
{{#js}}
require(['jquery', 'tool_lp/grade_user_competency_inline', 'tool_lp/user_competency_info'], function($, mod, info) {
var inlineGrader = new mod('#rate_{{uniqid}}', '{{competency.scaleid}}', '{{competency.competency.id}}', '{{user.id}}', '', '{{course.id}}', '{{#str}}chooserating, tool_lp{{/str}}');
var competencyElement = $('[data-region-id="{{uniqid}}"]');
var displayuser = ('{{displayuser}}' == 'true') ? true : false;
var infoReloader = new info(competencyElement, '{{competency.competency.id}}', '{{user.id}}', '', '{{course.id}}', displayuser);
inlineGrader.on('competencyupdated', infoReloader.reload.bind(infoReloader));
{{#cangrade}}
var inlineGrader = new mod('#rate_{{uniqid}}', '{{competency.scaleid}}', '{{competency.competency.id}}', '{{user.id}}', '', '{{course.id}}', '{{#str}}chooserating, tool_lp{{/str}}');
inlineGrader.on('competencyupdated', infoReloader.reload.bind(infoReloader));
{{/cangrade}}
});
{{/js}}
@@ -63,4 +63,67 @@ class behat_tool_lp extends behat_base {
$this->execute('behat_general::i_click_on', [$xpathtarget, 'xpath_element']);
}
/**
* Convert page names to URLs for steps like 'When I am on the "[identifier]" "[page type]" page'.
*
* Recognised page names are:
* | pagetype | name meaning | description |
* | Course competencies | Course name | The course competencies page |
*
* @param string $page identifies which type of page this is, e.g. 'Course competencies'.
* @param string $identifier identifies the particular page, e.g. 'C1'.
* @return moodle_url the corresponding URL.
* @throws Exception with a meaningful error message if the specified page cannot be found.
*/
protected function resolve_page_instance_url(string $page, string $identifier): moodle_url {
switch (strtolower($page)) {
case 'course competencies':
$courseid = $this->get_course_id($identifier);
return new moodle_url('/admin/tool/lp/coursecompetencies.php', [
'courseid' => $courseid,
]);
default:
throw new Exception("Unrecognised page type '{$page}'");
}
}
/**
* Return a list of the exact named selectors for the component.
*
* @return behat_component_named_selector[]
*/
public static function get_exact_named_selectors(): array {
return [
new behat_component_named_selector('competency', [
"//*[@data-region='coursecompetencies']//table[contains(@class,'managecompetencies')]".
"//tr[contains(., //a[@title='View details'][contains(., %locator%)])]",
]),
new behat_component_named_selector('learning plan', [
"//*[@data-region='plan-competencies']//table[contains(@class,'managecompetencies')]".
"//tr[@data-node='user-competency'][contains(., //a[@data-usercompetency='true'][contains(., %locator%)])]",
]),
new behat_component_named_selector('competency description', [
"//td/p[contains(., %locator%)]",
]),
new behat_component_named_selector('competency grade', [
"//span[contains(concat(' ', normalize-space(@class), ' '), ' badge ')][contains(., %locator%)]",
]),
new behat_component_named_selector('learning plan rating', [
"//td[position()=2][contains(., %locator%)]",
]),
new behat_component_named_selector('learning plan proficiency', [
"//td[position()=3][contains(., %locator%)]",
]),
new behat_component_named_selector('competency page proficiency', [
"//dt[contains(., 'Proficient')]/following-sibling::dd[1][contains(., %locator%)]",
]),
new behat_component_named_selector('competency page rating', [
"//dt[contains(., 'Rating')]/following-sibling::dd[1][contains(., %locator%)]",
]),
new behat_component_named_selector('competency page related competency', [
"//*[@data-region='relatedcompetencies']//a[contains(., %locator%)]",
]),
];
}
}
@@ -0,0 +1,187 @@
@tool @tool_lp @javascript
Feature: View competencies
In order to access competency information
As a user
I need to view user competencies
Background:
Given the following "users" exist:
| username | firstname | lastname |
| student1 | Student | first |
| teacher1 | Teacher | first |
And the following "system role assigns" exist:
| user | role | contextlevel |
| teacher1 | editingteacher | System |
And the following "permission overrides" exist:
| capability | permission | role | contextlevel | reference |
| moodle/competency:planview | Allow | editingteacher | System | |
And the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
And the following "course enrolments" exist:
| user | course | role |
| student1 | C1 | student |
| teacher1 | C1 | editingteacher |
And the following "scales" exist:
| name | scale |
| Test Scale | Bad, Good, Great |
And the following "core_competency > frameworks" exist:
| shortname | idnumber | scale |
| Cookery | cookery | Test Scale |
| Literacy | literacy | Test Scale |
And the following "core_competency > competencies" exist:
| shortname | idnumber | description | competencyframework |
| Salads | salads | Salads are important | cookery |
| Desserts | desserts | Desserts are important | cookery |
| Cakes | cakes | Cakes are important | cookery |
| Reading | reading | Reading is important | literacy |
| Writing | writing | Writing is important | literacy |
And the following "core_competency > related_competencies" exist:
| competency | relatedcompetency |
| desserts | cakes |
And the following "core_competency > plans" exist:
| name | description | competencies | user |
| Cookery | Cookery is important | salads, desserts, cakes | student1 |
| Literacy | Literacy is important | reading, writing | student1 |
And the following "core_competency > course_competencies" exist:
| course | competency |
| C1 | salads |
| C1 | desserts |
| C1 | cakes |
| C1 | reading |
| C1 | writing |
And the following "core_competency > user_competency" exist:
| competency | user | grade |
| salads | student1 | Good |
| desserts | student1 | Great |
| cakes | student1 | Great |
And the following "core_competency > user_competency_courses" exist:
| course | competency | user | grade |
| C1 | salads | student1 | Good |
| C1 | desserts | student1 | Great |
| C1 | cakes | student1 | Great |
Scenario: Student view
# Course competencies
Given I am on the "C1" "tool_lp > course competencies" page logged in as "student1"
Then I should see "You are proficient in 3 out of 5 competencies in this course"
And "Salads are important" "tool_lp > competency description" should exist in the "Salads" "tool_lp > competency"
And "Good" "tool_lp > competency grade" should exist in the "Salads" "tool_lp > competency"
And "Desserts are important" "tool_lp > competency description" should exist in the "Desserts" "tool_lp > competency"
And "Great" "tool_lp > competency grade" should exist in the "Desserts" "tool_lp > competency"
And "Cakes are important" "tool_lp > competency description" should exist in the "Cakes" "tool_lp > competency"
And "Great" "tool_lp > competency grade" should exist in the "Cakes" "tool_lp > competency"
And "Reading is important" "tool_lp > competency description" should exist in the "Reading" "tool_lp > competency"
And "Good" "tool_lp > competency grade" should not exist in the "Reading" "tool_lp > competency"
And "Great" "tool_lp > competency grade" should not exist in the "Reading" "tool_lp > competency"
And "Bad" "tool_lp > competency grade" should not exist in the "Reading" "tool_lp > competency"
And "Writing is important" "tool_lp > competency description" should exist in the "Writing" "tool_lp > competency"
And "Good" "tool_lp > competency grade" should not exist in the "Writing" "tool_lp > competency"
And "Great" "tool_lp > competency grade" should not exist in the "Writing" "tool_lp > competency"
And "Bad" "tool_lp > competency grade" should not exist in the "Writing" "tool_lp > competency"
# Course competencies details
And I click on "Desserts" "link" in the "Desserts" "tool_lp > competency"
And I should see "Desserts are important"
And "Yes" "tool_lp > competency page proficiency" should exist
And "Great" "tool_lp > competency page rating" should exist
# Course competencies summary
And I click on "Cakes" "link"
And I should see "Cakes are important"
# Learning plans
And I click on "Close" "button" in the "Cakes" "dialogue"
And I follow "Profile" in the user menu
And I click on "Learning plans" "link"
And I should see "Cookery"
And I should see "Literacy"
# Learning plans details
And I click on "Cookery" "link"
And I should see "Cookery is important"
And I should see "3 out of 3 competencies are proficient"
And "Good" "tool_lp > learning plan rating" should exist in the "Salads" "tool_lp > learning plan"
And "Yes" "tool_lp > learning plan proficiency" should exist in the "Salads" "tool_lp > learning plan"
And "Great" "tool_lp > learning plan rating" should exist in the "Desserts" "tool_lp > learning plan"
And "Yes" "tool_lp > learning plan proficiency" should exist in the "Desserts" "tool_lp > learning plan"
And "Great" "tool_lp > learning plan rating" should exist in the "Cakes" "tool_lp > learning plan"
And "Yes" "tool_lp > learning plan proficiency" should exist in the "Cakes" "tool_lp > learning plan"
And I should not see "Literacy"
And I should not see "Reading"
And I should not see "Writing"
# Learning plans competency details
And I click on "Desserts" "link" in the "Desserts" "tool_lp > learning plan"
And I should see "Desserts are important"
And "Yes" "tool_lp > competency page proficiency" should exist
And "Great" "tool_lp > competency page rating" should exist
# Learning plans competency summary
And I click on "Cakes cakes" "link"
And I should see "Cakes are important"
Scenario: Teacher view
# Participant competencies
Given I am on the "C1" "report_competency > breakdown" page logged in as "teacher1"
Then I should see "Student first"
And "Good" "report_competency > breakdown rating" should exist in the "Salads" "report_competency > breakdown"
And "Great" "report_competency > breakdown rating" should exist in the "Desserts" "report_competency > breakdown"
And "Great" "report_competency > breakdown rating" should exist in the "Cakes" "report_competency > breakdown"
And "Not rated" "report_competency > breakdown rating" should exist in the "Reading" "report_competency > breakdown"
And "Not rated" "report_competency > breakdown rating" should exist in the "Writing" "report_competency > breakdown"
# Participant competencies details
And I click on "Great" "report_competency > breakdown rating" in the "Desserts" "report_competency > breakdown"
And "Yes" "tool_lp > competency page proficiency" should exist
And "Great" "tool_lp > competency page rating" should exist
# Participant competencies summary
And I click on "Cakes" "tool_lp > competency page related competency"
And I should see "Cakes are important"
# Participant learning plans
And I click on "Close" "button" in the "Cakes" "dialogue"
And I click on "Close" "button" in the "User competency summary" "dialogue"
And I navigate to course participants
And I click on "Student first" "link"
And I click on "Learning plans" "link"
And I should see "Cookery"
And I should see "Literacy"
# Participant learning plans details
And I click on "Cookery" "link"
And I should see "Cookery is important"
And I should see "3 out of 3 competencies are proficient"
And "Good" "tool_lp > learning plan rating" should exist in the "Salads" "tool_lp > learning plan"
And "Yes" "tool_lp > learning plan proficiency" should exist in the "Salads" "tool_lp > learning plan"
And "Great" "tool_lp > learning plan rating" should exist in the "Desserts" "tool_lp > learning plan"
And "Yes" "tool_lp > learning plan proficiency" should exist in the "Desserts" "tool_lp > learning plan"
And "Great" "tool_lp > learning plan rating" should exist in the "Cakes" "tool_lp > learning plan"
And "Yes" "tool_lp > learning plan proficiency" should exist in the "Cakes" "tool_lp > learning plan"
And I should not see "Literacy"
And I should not see "Reading"
And I should not see "Writing"
# Learning plans competency details
And I click on "Desserts" "link"
And I should see "Desserts are important"
And "Yes" "tool_lp > competency page proficiency" should exist
And "Great" "tool_lp > competency page rating" should exist
# Learning plans competency summary
And I click on "Cakes" "tool_lp > competency page related competency"
And I should see "Cakes are important"
+1
View File
@@ -504,6 +504,7 @@ class api {
'NoDelegate_H5POffline' => new lang_string('h5poffline', 'tool_mobile'),
'NoDelegate_DarkMode' => new lang_string('darkmode', 'tool_mobile'),
'CoreFilterDelegate' => new lang_string('type_filter_plural', 'plugin'),
'CoreReportBuilderDelegate' => new lang_string('reportbuilder', 'core_reportbuilder'),
),
"$mainmenu" => array(
'$mmSideMenuDelegate_mmaFrontpage' => new lang_string('sitehome'),
-18
View File
@@ -105,24 +105,6 @@ function xmldb_tool_moodlenet_upgrade(int $oldversion) {
// Automatically generated Moodle v3.9.0 release upgrade line.
// Put any upgrade step following this.
if ($oldversion < 2021052501) {
// Find out if there are users with MoodleNet profiles set.
$sql = "SELECT u.*
FROM {user} u
WHERE u.moodlenetprofile IS NOT NULL";
$records = $DB->get_records_sql($sql);
foreach ($records as $record) {
// Force clean user value just incase there is something malicious.
$record->moodlenetprofile = clean_text($record->moodlenetprofile, PARAM_NOTAGS);
$DB->update_record('user', $record);
}
upgrade_plugin_savepoint(true, 2021052501, 'tool', 'moodlenet');
}
if ($oldversion < 2022021600) {
// This is a special case for if MoodleNet integration has never been enabled,
// or if defaultmoodlenet is not set for whatever reason.
@@ -14,24 +14,19 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the import_handler_info class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_moodlenet\local\tests;
namespace tool_moodlenet\local;
use tool_moodlenet\local\import_handler_info;
use tool_moodlenet\local\import_strategy;
use tool_moodlenet\local\import_strategy_file;
defined('MOODLE_INTERNAL') || die();
/**
* Class tool_moodlenet_import_handler_info_testcase, providing test cases for the import_handler_info class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class import_handler_info_test extends \advanced_testcase {
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the import_handler_registry class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_moodlenet\local\tests;
namespace tool_moodlenet\local;
use tool_moodlenet\local\import_handler_registry;
use tool_moodlenet\local\import_handler_info;
@@ -31,10 +23,13 @@ use tool_moodlenet\local\import_strategy_link;
use tool_moodlenet\local\remote_resource;
use tool_moodlenet\local\url;
defined('MOODLE_INTERNAL') || die();
/**
* Class tool_moodlenet_import_handler_registry_testcase, providing test cases for the import_handler_registry class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class import_handler_registry_test extends \advanced_testcase {
@@ -14,24 +14,19 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the import_info class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_moodlenet\local\tests;
namespace tool_moodlenet\local;
use tool_moodlenet\local\import_info;
use tool_moodlenet\local\remote_resource;
use tool_moodlenet\local\url;
defined('MOODLE_INTERNAL') || die();
/**
* Class tool_moodlenet_import_info_testcase, providing test cases for the import_info class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class import_info_test extends \advanced_testcase {
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the import_processor class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_moodlenet\local\tests;
namespace tool_moodlenet\local;
use tool_moodlenet\local\import_handler_registry;
use tool_moodlenet\local\import_processor;
@@ -31,10 +23,13 @@ use tool_moodlenet\local\import_strategy_link;
use tool_moodlenet\local\remote_resource;
use tool_moodlenet\local\url;
defined('MOODLE_INTERNAL') || die();
/**
* Class tool_moodlenet_import_processor_testcase, providing test cases for the import_processor class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class import_processor_test extends \advanced_testcase {
@@ -14,24 +14,19 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_moodlenet\local;
use tool_moodlenet\local\remote_resource;
use tool_moodlenet\local\url;
/**
* Unit tests for the remote_resource class.
* Class tool_moodlenet_remote_resource_testcase, providing test cases for the remote_resource class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_moodlenet\local\tests;
use tool_moodlenet\local\remote_resource;
use tool_moodlenet\local\url;
defined('MOODLE_INTERNAL') || die();
/**
* Class tool_moodlenet_remote_resource_testcase, providing test cases for the remote_resource class.
*/
class remote_resource_test extends \advanced_testcase {
/**
@@ -14,23 +14,18 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_moodlenet\local;
use tool_moodlenet\local\url;
/**
* Unit tests for the url class.
* Class tool_moodlenet_url_testcase, providing test cases for the url class.
*
* @package tool_moodlenet
* @category test
* @copyright 2020 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_moodlenet\local\tests;
use tool_moodlenet\local\url;
defined('MOODLE_INTERNAL') || die();
/**
* Class tool_moodlenet_url_testcase, providing test cases for the url class.
*/
class url_test extends \advanced_testcase {
/**
@@ -135,7 +135,6 @@ Feature: Basic OAuth2 functionality
And I set the following fields to these values:
| Name | Testing service modified |
And I press "Save changes"
And I should see "Could not discover service endpoints"
And I should see "Testing service modified"
And I click on "Delete" "link" in the "Testing service modified" "table_row"
And I should see "Are you sure you want to delete the identity issuer \"Testing service modified\"?"
@@ -240,13 +239,12 @@ Feature: Basic OAuth2 functionality
And I press "Save changes"
And "Do not allow login" "icon" should exist in the "Valid custom" "table_row"
And "Allow services" "icon" should exist in the "Valid custom" "table_row"
And "Service discovery successful" "icon" should exist in the "Valid custom" "table_row"
And I should see "-" in the "Valid custom" "table_row"
And I click on "Edit" "link" in the "Valid custom service" "table_row"
And I set the following fields to these values:
| Name | Invalid custom service |
| Service base URL | https://dc.imsglobal.org/ |
And I press "Save changes"
Then I should see "Could not discover end points for identity issuer: Invalid custom service"
And I should see "-" in the "Invalid custom service" "table_row"
And I click on "Delete" "link" in the "Invalid custom service" "table_row"
And I should see "Are you sure you want to delete the identity issuer \"Invalid custom service\"?"
@@ -282,13 +280,12 @@ Feature: Basic OAuth2 functionality
And I press "Save changes"
And "Do not allow login" "icon" should exist in the "Valid custom" "table_row"
And "Allow services" "icon" should exist in the "Valid custom" "table_row"
And "Service discovery successful" "icon" should exist in the "Valid custom" "table_row"
And I should see "-" in the "Valid custom" "table_row"
And I click on "Edit" "link" in the "Valid custom service" "table_row"
And I set the following fields to these values:
| Name | Invalid custom service |
| Service base URL | https://dc.imsglobal.org/ |
And I press "Save changes"
Then I should see "Could not discover end points for identity issuer: Invalid custom service"
And I should see "-" in the "Invalid custom service" "table_row"
And I click on "Edit" "link" in the "Invalid custom service" "table_row"
And I set the following fields to these values:
@@ -352,9 +349,12 @@ Feature: Basic OAuth2 functionality
And I should see "Custom display name" in the "Empty custom service" "table_row"
And "Not configured" "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"
And I click on "Edit" "link" in the "Empty custom service" "table_row"
And I click on "Configure endpoints" "link" in the "Empty custom service" "table_row"
And I press "Create new endpoint for issuer \"Empty custom service\""
And I set the following fields to these values:
| Service base URL | https://accounts.google.com |
| Name | userinfo_endpoint |
| URL | https://example.com/userinfo |
And I press "Save changes"
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"
+2 -3
View File
@@ -213,10 +213,9 @@ class tool_task_renderer extends plugin_renderer_base {
* @return string HTML.
*/
public function next_run_time(scheduled_task $task): string {
$plugininfo = core_plugin_manager::instance()->get_plugin_info($task->get_component());
$nextrun = $task->get_next_run_time();
if ($plugininfo && $plugininfo->is_enabled() === false && !$task->get_run_if_component_disabled()) {
if (!$task->is_component_enabled() && !$task->get_run_if_component_disabled()) {
$nextrun = get_string('plugindisabled', 'tool_task');
} else if ($task->get_disabled()) {
$nextrun = get_string('taskdisabled', 'tool_task');
@@ -58,7 +58,7 @@ Feature: Apply content type to a tour
And I click on "New step" "link"
And I set the field "Title" to "tour_activityinfo_course_teacher_title,tool_usertours"
And I select "Manual" from the "Content type" singleselect
And I set the field "id_content" to "<b>Test content</b>"
And I set the field "id_content" to "<p><strong>Test content</strong></p>"
And I press "Save changes"
And I should see "New: Activity information"
And I should see "Test content"
@@ -66,7 +66,7 @@ Feature: Apply content type to a tour
And I should see "Editing \"New: Activity information\""
And I should not see "Language string ID" in the "#fitem_id_contentlangstring" "css_element"
And the field "Title" matches value "tour_activityinfo_course_teacher_title,tool_usertours"
And the field "id_content" matches value "<b>Test content</b>"
And the field "id_content" matches value "<p><strong>Test content</strong></p>"
@javascript
Scenario: Tour name and description can be translatable
+5 -14
View File
@@ -14,17 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the analysis class.
*
* @package core_analytics
* @copyright 2019 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/fixtures/test_timesplitting_upcoming_seconds.php');
namespace core_analytics;
/**
* Unit tests for the analysis class.
@@ -33,18 +23,19 @@ require_once(__DIR__ . '/fixtures/test_timesplitting_upcoming_seconds.php');
* @copyright 2019 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class analytics_analysis_testcase extends advanced_testcase {
class analysis_test extends \advanced_testcase {
/**
* Test fill_firstanalyses_cache.
* @return null
*/
public function test_fill_firstanalyses_cache() {
require_once(__DIR__ . '/fixtures/test_timesplitting_upcoming_seconds.php');
$this->resetAfterTest();
$modelid = 1;
$params = ['startdate' => (new DateTimeImmutable('-5 seconds'))->getTimestamp()];
$params = ['startdate' => (new \DateTimeImmutable('-5 seconds'))->getTimestamp()];
$course1 = $this->getDataGenerator()->create_course($params);
$course2 = $this->getDataGenerator()->create_course($params);
$analysable1 = new \core_analytics\course($course1);
@@ -72,7 +63,7 @@ class analytics_analysis_testcase extends advanced_testcase {
$this->assertEquals($earliest, $firstanalyses[$modelid . '_' . $course1->id]);
// Upcoming periodic time-splitting methods can read and process the cached data.
$seconds = new test_timesplitting_upcoming_seconds();
$seconds = new \test_timesplitting_upcoming_seconds();
$seconds->set_modelid($modelid);
$seconds->set_analysable($analysable1);
+6 -15
View File
@@ -14,18 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the calculation info cache.
*
* @package core_analytics
* @copyright 2019 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/fixtures/test_indicator_max.php');
require_once(__DIR__ . '/fixtures/test_indicator_min.php');
namespace core_analytics;
/**
* Unit tests for the calculation info cache.
@@ -34,7 +23,7 @@ require_once(__DIR__ . '/fixtures/test_indicator_min.php');
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class analytics_calculation_info_testcase extends advanced_testcase {
class calculation_info_test extends \advanced_testcase {
/**
* test_calculation_info description
@@ -47,12 +36,14 @@ class analytics_calculation_info_testcase extends advanced_testcase {
* @return null
*/
public function test_calculation_info_add_pull($info1, $info2, $info3, $info4) {
require_once(__DIR__ . '/fixtures/test_indicator_max.php');
require_once(__DIR__ . '/fixtures/test_indicator_min.php');
$this->resetAfterTest();
$atimesplitting = new \core\analytics\time_splitting\quarters();
$indicator1 = new test_indicator_min();
$indicator2 = new test_indicator_max();
$indicator1 = new \test_indicator_min();
$indicator2 = new \test_indicator_max();
$calculationinfo = new \core_analytics\calculation_info();
$calculationinfo->add_shared(111, [111 => $info1]);
+2 -10
View File
@@ -14,15 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the dataset manager.
*
* @package core_analytics
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
namespace core_analytics;
/**
* Unit tests for the dataset manager.
@@ -31,7 +23,7 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class dataset_manager_testcase extends advanced_testcase {
class dataset_manager_test extends \advanced_testcase {
/**
* setUp
+3 -9
View File
@@ -14,13 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for the indicator API.
*
* @package core_analytics
* @copyright 2019 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_analytics;
defined('MOODLE_INTERNAL') || die();
@@ -35,7 +29,7 @@ require_once(__DIR__ . '/fixtures/test_indicator_min.php');
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class analytics_indicator_testcase extends advanced_testcase {
class indicator_test extends \advanced_testcase {
/**
* test_validate_calculated_value
@@ -79,7 +73,7 @@ class analytics_indicator_testcase extends advanced_testcase {
->onlyMethods(['calculate_sample'])
->getMock();
$indicatormock->method('calculate_sample')->willReturn($willreturn);
$this->expectException(coding_exception::class);
$this->expectException(\coding_exception::class);
list($values, $unused) = $indicatormock->calculate([1], 'notrelevanthere');
}
+10 -8
View File
@@ -22,6 +22,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_analytics;
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/fixtures/test_indicator_max.php');
@@ -39,7 +41,7 @@ require_once(__DIR__ . '/fixtures/test_analysis.php');
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class analytics_model_testcase extends advanced_testcase {
class model_test extends \advanced_testcase {
public function setUp(): void {
@@ -183,7 +185,7 @@ class analytics_model_testcase extends advanced_testcase {
global $DB;
$this->resetAfterTest();
$statictarget = new test_static_target_shortname();
$statictarget = new \test_static_target_shortname();
$indicators['test_indicator_max'] = \core_analytics\manager::get_indicator('test_indicator_max');
$model = \core_analytics\model::create($statictarget, $indicators, '\core\analytics\time_splitting\quarters');
$modelobj = $model->get_model_obj();
@@ -301,11 +303,11 @@ class analytics_model_testcase extends advanced_testcase {
$courses[$analysable->get_id()] = $course;
}
$target = new test_target_course_level_shortname();
$target = new \test_target_course_level_shortname();
$analyser = new \core\analytics\analyser\courses(1, $target, [], [], []);
$result = new \core_analytics\local\analysis\result_array(1, false, []);
$analysis = new test_analysis($analyser, false, $result);
$analysis = new \test_analysis($analyser, false, $result);
// Each analysable element takes 0.5 secs minimum (test_analysis), so the max (and likely) number of analysable
// elements that will be processed is 2.
@@ -342,7 +344,7 @@ class analytics_model_testcase extends advanced_testcase {
// Training and prediction data do not get mixed.
$result = new \core_analytics\local\analysis\result_array(1, false, []);
$analysis = new test_analysis($analyser, false, $result);
$analysis = new \test_analysis($analyser, false, $result);
$analysis->run();
$params = array('modelid' => 1, 'action' => 'training');
$this->assertLessThanOrEqual(2, $DB->count_records('analytics_used_analysables', $params));
@@ -402,7 +404,7 @@ class analytics_model_testcase extends advanced_testcase {
$this->model->update(true, [], false);
$this->assertFalse($this->model->can_export_configuration());
$statictarget = new test_static_target_shortname();
$statictarget = new \test_static_target_shortname();
$indicators['test_indicator_max'] = \core_analytics\manager::get_indicator('test_indicator_max');
$model = \core_analytics\model::create($statictarget, $indicators, '\\core\\analytics\\time_splitting\\quarters');
$this->assertFalse($model->can_export_configuration());
@@ -418,7 +420,7 @@ class analytics_model_testcase extends advanced_testcase {
$modelconfig = new \core_analytics\model_config($this->model);
$method = new ReflectionMethod('\\core_analytics\\model_config', 'export_model_data');
$method = new \ReflectionMethod('\\core_analytics\\model_config', 'export_model_data');
$method->setAccessible(true);
$modeldata = $method->invoke($modelconfig);
@@ -566,7 +568,7 @@ class analytics_model_testcase extends advanced_testcase {
private function add_fake_log() {
global $DB, $USER;
$log = new stdClass();
$log = new \stdClass();
$log->modelid = $this->modelobj->id;
$log->version = $this->modelobj->version;
$log->target = $this->modelobj->target;
+2 -8
View File
@@ -14,13 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for prediction actions.
*
* @package core_analytics
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_analytics;
defined('MOODLE_INTERNAL') || die();
@@ -34,7 +28,7 @@ require_once(__DIR__ . '/fixtures/test_target_shortname.php');
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class analytics_prediction_actions_testcase extends advanced_testcase {
class prediction_actions_test extends \advanced_testcase {
/**
* Common startup tasks
+12 -18
View File
@@ -14,21 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for evaluation, training and prediction.
*
* NOTE: in order to execute this test using a separate server for the
* python ML backend you need to define these variables in your config.php file:
*
* define('TEST_MLBACKEND_PYTHON_HOST', '127.0.0.1');
* define('TEST_MLBACKEND_PYTHON_PORT', 5000);
* define('TEST_MLBACKEND_PYTHON_USERNAME', 'default');
* define('TEST_MLBACKEND_PYTHON_PASSWORD', 'sshhhh');
*
* @package core_analytics
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_analytics;
defined('MOODLE_INTERNAL') || die();
@@ -48,11 +34,19 @@ require_once(__DIR__ . '/../../course/lib.php');
/**
* Unit tests for evaluation, training and prediction.
*
* NOTE: in order to execute this test using a separate server for the
* python ML backend you need to define these variables in your config.php file:
*
* define('TEST_MLBACKEND_PYTHON_HOST', '127.0.0.1');
* define('TEST_MLBACKEND_PYTHON_PORT', 5000);
* define('TEST_MLBACKEND_PYTHON_USERNAME', 'default');
* define('TEST_MLBACKEND_PYTHON_PASSWORD', 'sshhhh');
*
* @package core_analytics
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_analytics_prediction_testcase extends advanced_testcase {
class prediction_test extends \advanced_testcase {
/**
* Purge all the mlbackend outputs.
@@ -746,7 +740,7 @@ class core_analytics_prediction_testcase extends advanced_testcase {
$samples,
$ranges
);
$dataset = phpunit_util::call_internal_method($analysis, 'calculate_indicators', $params,
$dataset = \phpunit_util::call_internal_method($analysis, 'calculate_indicators', $params,
'\core_analytics\analysis');
$this->assertArrayHasKey('123-0', $dataset);
$this->assertArrayHasKey('123-1', $dataset);
@@ -770,7 +764,7 @@ class core_analytics_prediction_testcase extends advanced_testcase {
$samples,
$ranges
);
$dataset = phpunit_util::call_internal_method($analysis, 'calculate_indicators', $params,
$dataset = \phpunit_util::call_internal_method($analysis, 'calculate_indicators', $params,
'\core_analytics\analysis');
$this->assertArrayNotHasKey('123-0', $dataset);
$this->assertArrayNotHasKey('123-1', $dataset);
+4 -9
View File
@@ -14,14 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Provides the {@link analytics_stats_testcase} class.
*
* @package core_analytics
* @category test
* @copyright 2019 David Mudrák <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_analytics;
defined('MOODLE_INTERNAL') || die();
@@ -31,10 +24,12 @@ require_once(__DIR__ . '/fixtures/test_target_shortname.php');
/**
* Unit tests for the analytics stats.
*
* @package core_analytics
* @category test
* @copyright 2019 David Mudrák <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class analytics_stats_testcase extends advanced_testcase {
class stats_test extends \advanced_testcase {
/**
* Set up the test environment.
@@ -14,30 +14,26 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Unit tests for core time splitting methods.
*
* @package core
* @category analytics
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_analytics;
use test_timesplitting_seconds;
use test_timesplitting_upcoming_seconds;
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/../../analytics/tests/fixtures/test_timesplitting_seconds.php');
require_once(__DIR__ . '/../../analytics/tests/fixtures/test_timesplitting_upcoming_seconds.php');
require_once(__DIR__ . '/fixtures/test_timesplitting_seconds.php');
require_once(__DIR__ . '/fixtures/test_timesplitting_upcoming_seconds.php');
require_once(__DIR__ . '/../../lib/enrollib.php');
/**
* Unit tests for core time splitting methods.
*
* @package core
* @category analytics
* @category test
* @copyright 2017 David Monllaó {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_analytics_time_splittings_testcase extends advanced_testcase {
class time_splittings_test extends \advanced_testcase {
/**
* setUp
@@ -214,7 +210,7 @@ class core_analytics_time_splittings_testcase extends advanced_testcase {
// We now use an ongoing course not yet ready to generate predictions.
$threedaysago = new DateTime('-3 days');
$threedaysago = new \DateTime('-3 days');
$params = array(
'startdate' => $threedaysago->getTimestamp(),
);
@@ -229,7 +225,7 @@ class core_analytics_time_splittings_testcase extends advanced_testcase {
// We now use a ready-to-predict ongoing course.
$onemonthago = new DateTime('-30 days');
$onemonthago = new \DateTime('-30 days');
$params = array(
'startdate' => $onemonthago->getTimestamp(),
);
@@ -284,10 +280,10 @@ class core_analytics_time_splittings_testcase extends advanced_testcase {
// We now check how new ranges get added as time passes.
$fewsecsago = new DateTime('-5 seconds');
$fewsecsago = new \DateTime('-5 seconds');
$params = array(
'startdate' => $fewsecsago->getTimestamp(),
'enddate' => (new DateTimeImmutable('+1 year'))->getTimestamp(),
'enddate' => (new \DateTimeImmutable('+1 year'))->getTimestamp(),
);
$course = $this->getDataGenerator()->create_course($params);
$analysable = new \core_analytics\course($course);
+4 -9
View File
@@ -866,11 +866,8 @@ class auth_plugin_ldap extends auth_plugin_base {
if (!empty($users)) {
print_string('userentriestoupdate', 'auth_ldap', count($users));
$transaction = $DB->start_delegated_transaction();
$xcount = 0;
$maxxcount = 100;
foreach ($users as $user) {
$transaction = $DB->start_delegated_transaction();
echo "\t"; print_string('auth_dbupdatinguser', 'auth_db', array('name'=>$user->username, 'id'=>$user->id));
$userinfo = $this->get_userinfo($user->username);
if (!$this->update_user_record($user->username, $updatekeys, true,
@@ -878,12 +875,11 @@ class auth_plugin_ldap extends auth_plugin_base {
echo ' - '.get_string('skipped');
}
echo "\n";
$xcount++;
// Update system roles, if needed.
$this->sync_roles($user);
$transaction->allow_commit();
}
$transaction->allow_commit();
unset($users); // free mem
}
} else { // end do updates
@@ -904,8 +900,8 @@ class auth_plugin_ldap extends auth_plugin_base {
print_string('userentriestoadd', 'auth_ldap', count($add_users));
$errors = 0;
$transaction = $DB->start_delegated_transaction();
foreach ($add_users as $user) {
$transaction = $DB->start_delegated_transaction();
$user = $this->get_userinfo_asobj($user->username);
// Prep a few params
@@ -947,7 +943,7 @@ class auth_plugin_ldap extends auth_plugin_base {
// Add roles if needed.
$this->sync_roles($euser);
$transaction->allow_commit();
}
// Display number of user creation errors, if any.
@@ -955,7 +951,6 @@ class auth_plugin_ldap extends auth_plugin_base {
print_string('invalidusererrors', 'auth_ldap', $errors);
}
$transaction->allow_commit();
unset($add_users); // free mem
} else {
print_string('nouserstobeadded', 'auth_ldap');
+2 -2
View File
@@ -482,13 +482,13 @@ class tree extends tree_node {
*
* @param bool $not True if there is a NOT in effect
* @param info $info Information about location of condition tree
* @param result $result Result object if this is a student display, else null
* @param result|null $result Result object if this is a student display, else null
* @param bool $root True if this is the root item
* @param bool $hidden Staff display; true if this tree has show=false (from parent)
* @return string|renderable Information to render
*/
protected function get_full_information_recursive(
$not, info $info, result $result = null, $root, $hidden = false) {
$not, info $info, ?result $result, $root, $hidden = false) {
// Get list of children - either full list, or those which are shown.
$children = $this->children;
$staff = true;
@@ -49,7 +49,7 @@ class frontend extends \core_availability\frontend {
protected function get_javascript_strings() {
return array('ajaxerror', 'direction_before', 'direction_from', 'direction_until',
'direction_label');
'direction_label', 'error_dateconflict');
}
/**
@@ -28,6 +28,7 @@ $string['direction_from'] = 'from';
$string['direction_label'] = 'Direction';
$string['direction_until'] = 'until';
$string['description'] = 'Prevent access until (or from) a specified date and time.';
$string['error_dateconflict'] = 'Conflicts with other date restrictions';
$string['full_from'] = 'It is after <strong>{$a}</strong>';
$string['full_from_date'] = 'It is on or after <strong>{$a}</strong>';
$string['full_until'] = 'It is before <strong>{$a}</strong>';
@@ -142,5 +142,84 @@ M.availability_date.form.fillValue = function(value, node) {
value.t = parseInt(node.getData('time'), 10);
};
/**
* List out Date node value in an array node.
*
* This will go through all array node and list from earlier date node to current date node.
*
* @method convertTreeDateValue
* @param {array} tree Tree node to convert
* @param {array} arrayDateNode
* @param {array} currentNode current node.
*
* @return {array} arrayDateNode
*/
M.availability_date.form.convertTreeDateValue = function(tree, arrayDateNode, currentNode) {
var shouldSkip = false;
tree.forEach(function(node) {
if (shouldSkip) {
return;
}
if (node.type === 'date') {
// We go through all tree node, if we meet the current node then return.
if (node.t === parseInt(currentNode.getData('time'), 10)
&& currentNode.one('select[name=direction]').get('value') == node.d) {
shouldSkip = true;
return;
}
arrayDateNode.push(node);
} else if (node.type === undefined) {
M.availability_date.form.convertTreeDateValue(node.c, arrayDateNode, currentNode);
}
});
return arrayDateNode;
};
/**
* Check current node.
*
* This will check current date node with all date node in tree node.
*
* @method checkConditionDate
* @param {array} currentNode The curent node.
*
* @return {boolean} error Return true if the date is conflict.
*/
M.availability_date.form.checkConditionDate = function(currentNode) {
var error = false;
if (M.core_availability.form.rootList.getValue().op === '&') {
var jsValue = M.core_availability.form.rootList.getValue().c;
var arrayDateNode = M.availability_date.form.convertTreeDateValue(jsValue, [], currentNode);
var currentNodeDirection = currentNode.one('select[name=direction]').get('value');
var currentNodeTime = parseInt(currentNode.getData('time'), 10);
arrayDateNode.forEach(function(checkNode) {
// Validate if the date is conflict.
if (checkNode.d === '<') {
if (currentNodeDirection === '>=' && currentNodeTime >= checkNode.t) {
error = true;
}
} else {
if (currentNodeDirection === '<' && currentNodeTime <= checkNode.t) {
error = true;
}
}
return error;
});
return error;
} else {
if (currentNode.one('div > .badge-warning')) {
currentNode.one('div > .badge-warning').remove();
}
return error;
}
};
M.availability_date.form.fillErrors = function(errors, node) {
var error = M.availability_date.form.checkConditionDate(node);
if (error) {
errors.push('availability_date:error_dateconflict');
}
};
}, '@VERSION@', {"requires": ["base", "node", "event", "io", "moodle-core_availability-form"]});
@@ -1 +1 @@
YUI.add("moodle-availability_date-form",function(o,e){M.availability_date=M.availability_date||{},M.availability_date.form=o.Object(M.core_availability.plugin),M.availability_date.form.initInner=function(e,a){this.html=e,this.defaultTime=a},M.availability_date.form.getNode=function(e){var t,i,a='<span class="col-form-label pr-3">'+M.util.get_string("direction_before","availability_date")+'</span> <span class="availability-group"><label><span class="accesshide">'+M.util.get_string("direction_label","availability_date")+' </span><select name="direction" class="custom-select"><option value="&gt;=">'+M.util.get_string("direction_from","availability_date")+'</option><option value="&lt;">'+M.util.get_string("direction_until","availability_date")+"</option></select></label></span> "+this.html,n=o.Node.create("<span>"+a+"</span>");return e.t!==undefined?(n.setData("time",e.t),n.all("select:not([name=direction])").each(function(e){e.set("disabled",!0)}),a=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=fromtime&time="+e.t,o.io(a,{on:{success:function(e,a){var t,i,l=o.JSON.parse(a.responseText);for(t in l)(i=n.one("select[name=x\\["+t+"\\]]")).set("value",""+l[t]),i.set("disabled",!1)},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})):n.setData("time",this.defaultTime),e.d!==undefined&&n.one("select[name=direction]").set("value",e.d),M.availability_date.form.addedEvents||(M.availability_date.form.addedEvents=!0,(a=o.one(".availability-field")).delegate("change",function(){M.core_availability.form.update()},".availability_date select[name=direction]"),a.delegate("change",function(){M.availability_date.form.updateTime(this.ancestor("span.availability_date"))},".availability_date select:not([name=direction])")),n.one("a[href=#]")&&(M.form.dateselector.init_single_date_selector(n),t=n.one("select[name=x\\[year\\]]"),i=t.set,t.set=function(e,a){i.call(t,e,a),"selectedIndex"===e&&setTimeout(function(){M.availability_date.form.updateTime(n)},0)}),n},M.availability_date.form.updateTime=function(t){var e=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=totime&year="+t.one("select[name=x\\[year\\]]").get("value")+"&month="+t.one("select[name=x\\[month\\]]").get("value")+"&day="+t.one("select[name=x\\[day\\]]").get("value")+"&hour="+t.one("select[name=x\\[hour\\]]").get("value")+"&minute="+t.one("select[name=x\\[minute\\]]").get("value");o.io(e,{on:{success:function(e,a){t.setData("time",a.responseText),M.core_availability.form.update()},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})},M.availability_date.form.fillValue=function(e,a){e.d=a.one("select[name=direction]").get("value"),e.t=parseInt(a.getData("time"),10)}},"@VERSION@",{requires:["base","node","event","io","moodle-core_availability-form"]});
YUI.add("moodle-availability_date-form",function(o,e){M.availability_date=M.availability_date||{},M.availability_date.form=o.Object(M.core_availability.plugin),M.availability_date.form.initInner=function(e,a){this.html=e,this.defaultTime=a},M.availability_date.form.getNode=function(e){var t,i,a='<span class="col-form-label pr-3">'+M.util.get_string("direction_before","availability_date")+'</span> <span class="availability-group"><label><span class="accesshide">'+M.util.get_string("direction_label","availability_date")+' </span><select name="direction" class="custom-select"><option value="&gt;=">'+M.util.get_string("direction_from","availability_date")+'</option><option value="&lt;">'+M.util.get_string("direction_until","availability_date")+"</option></select></label></span> "+this.html,n=o.Node.create("<span>"+a+"</span>");return e.t!==undefined?(n.setData("time",e.t),n.all("select:not([name=direction])").each(function(e){e.set("disabled",!0)}),a=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=fromtime&time="+e.t,o.io(a,{on:{success:function(e,a){var t,i,l=o.JSON.parse(a.responseText);for(t in l)(i=n.one("select[name=x\\["+t+"\\]]")).set("value",""+l[t]),i.set("disabled",!1)},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})):n.setData("time",this.defaultTime),e.d!==undefined&&n.one("select[name=direction]").set("value",e.d),M.availability_date.form.addedEvents||(M.availability_date.form.addedEvents=!0,(a=o.one(".availability-field")).delegate("change",function(){M.core_availability.form.update()},".availability_date select[name=direction]"),a.delegate("change",function(){M.availability_date.form.updateTime(this.ancestor("span.availability_date"))},".availability_date select:not([name=direction])")),n.one("a[href=#]")&&(M.form.dateselector.init_single_date_selector(n),t=n.one("select[name=x\\[year\\]]"),i=t.set,t.set=function(e,a){i.call(t,e,a),"selectedIndex"===e&&setTimeout(function(){M.availability_date.form.updateTime(n)},0)}),n},M.availability_date.form.updateTime=function(t){var e=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=totime&year="+t.one("select[name=x\\[year\\]]").get("value")+"&month="+t.one("select[name=x\\[month\\]]").get("value")+"&day="+t.one("select[name=x\\[day\\]]").get("value")+"&hour="+t.one("select[name=x\\[hour\\]]").get("value")+"&minute="+t.one("select[name=x\\[minute\\]]").get("value");o.io(e,{on:{success:function(e,a){t.setData("time",a.responseText),M.core_availability.form.update()},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})},M.availability_date.form.fillValue=function(e,a){e.d=a.one("select[name=direction]").get("value"),e.t=parseInt(a.getData("time"),10)},M.availability_date.form.convertTreeDateValue=function(e,a,t){var i=!1;return e.forEach(function(e){i||("date"===e.type?e.t!==parseInt(t.getData("time"),10)||t.one("select[name=direction]").get("value")!=e.d?a.push(e):i=!0:e.type===undefined&&M.availability_date.form.convertTreeDateValue(e.c,a,t))}),a},M.availability_date.form.checkConditionDate=function(e){var a,t,i,l=!1;return"&"===M.core_availability.form.rootList.getValue().op?(a=M.core_availability.form.rootList.getValue().c,a=M.availability_date.form.convertTreeDateValue(a,[],e),t=e.one("select[name=direction]").get("value"),i=parseInt(e.getData("time"),10),a.forEach(function(e){return"<"===e.d?">="===t&&i>=e.t&&(l=!0):"<"===t&&i<=e.t&&(l=!0),l})):e.one("div > .badge-warning")&&e.one("div > .badge-warning").remove(),l},M.availability_date.form.fillErrors=function(e,a){M.availability_date.form.checkConditionDate(a)&&e.push("availability_date:error_dateconflict")}},"@VERSION@",{requires:["base","node","event","io","moodle-core_availability-form"]});
@@ -142,5 +142,84 @@ M.availability_date.form.fillValue = function(value, node) {
value.t = parseInt(node.getData('time'), 10);
};
/**
* List out Date node value in an array node.
*
* This will go through all array node and list from earlier date node to current date node.
*
* @method convertTreeDateValue
* @param {array} tree Tree node to convert
* @param {array} arrayDateNode
* @param {array} currentNode current node.
*
* @return {array} arrayDateNode
*/
M.availability_date.form.convertTreeDateValue = function(tree, arrayDateNode, currentNode) {
var shouldSkip = false;
tree.forEach(function(node) {
if (shouldSkip) {
return;
}
if (node.type === 'date') {
// We go through all tree node, if we meet the current node then return.
if (node.t === parseInt(currentNode.getData('time'), 10)
&& currentNode.one('select[name=direction]').get('value') == node.d) {
shouldSkip = true;
return;
}
arrayDateNode.push(node);
} else if (node.type === undefined) {
M.availability_date.form.convertTreeDateValue(node.c, arrayDateNode, currentNode);
}
});
return arrayDateNode;
};
/**
* Check current node.
*
* This will check current date node with all date node in tree node.
*
* @method checkConditionDate
* @param {array} currentNode The curent node.
*
* @return {boolean} error Return true if the date is conflict.
*/
M.availability_date.form.checkConditionDate = function(currentNode) {
var error = false;
if (M.core_availability.form.rootList.getValue().op === '&') {
var jsValue = M.core_availability.form.rootList.getValue().c;
var arrayDateNode = M.availability_date.form.convertTreeDateValue(jsValue, [], currentNode);
var currentNodeDirection = currentNode.one('select[name=direction]').get('value');
var currentNodeTime = parseInt(currentNode.getData('time'), 10);
arrayDateNode.forEach(function(checkNode) {
// Validate if the date is conflict.
if (checkNode.d === '<') {
if (currentNodeDirection === '>=' && currentNodeTime >= checkNode.t) {
error = true;
}
} else {
if (currentNodeDirection === '<' && currentNodeTime <= checkNode.t) {
error = true;
}
}
return error;
});
return error;
} else {
if (currentNode.one('div > .badge-warning')) {
currentNode.one('div > .badge-warning').remove();
}
return error;
}
};
M.availability_date.form.fillErrors = function(errors, node) {
var error = M.availability_date.form.checkConditionDate(node);
if (error) {
errors.push('availability_date:error_dateconflict');
}
};
}, '@VERSION@', {"requires": ["base", "node", "event", "io", "moodle-core_availability-form"]});
+79
View File
@@ -139,3 +139,82 @@ M.availability_date.form.fillValue = function(value, node) {
value.d = node.one('select[name=direction]').get('value');
value.t = parseInt(node.getData('time'), 10);
};
/**
* List out Date node value in an array node.
*
* This will go through all array node and list from earlier date node to current date node.
*
* @method convertTreeDateValue
* @param {array} tree Tree node to convert
* @param {array} arrayDateNode
* @param {array} currentNode current node.
*
* @return {array} arrayDateNode
*/
M.availability_date.form.convertTreeDateValue = function(tree, arrayDateNode, currentNode) {
var shouldSkip = false;
tree.forEach(function(node) {
if (shouldSkip) {
return;
}
if (node.type === 'date') {
// We go through all tree node, if we meet the current node then return.
if (node.t === parseInt(currentNode.getData('time'), 10)
&& currentNode.one('select[name=direction]').get('value') == node.d) {
shouldSkip = true;
return;
}
arrayDateNode.push(node);
} else if (node.type === undefined) {
M.availability_date.form.convertTreeDateValue(node.c, arrayDateNode, currentNode);
}
});
return arrayDateNode;
};
/**
* Check current node.
*
* This will check current date node with all date node in tree node.
*
* @method checkConditionDate
* @param {array} currentNode The curent node.
*
* @return {boolean} error Return true if the date is conflict.
*/
M.availability_date.form.checkConditionDate = function(currentNode) {
var error = false;
if (M.core_availability.form.rootList.getValue().op === '&') {
var jsValue = M.core_availability.form.rootList.getValue().c;
var arrayDateNode = M.availability_date.form.convertTreeDateValue(jsValue, [], currentNode);
var currentNodeDirection = currentNode.one('select[name=direction]').get('value');
var currentNodeTime = parseInt(currentNode.getData('time'), 10);
arrayDateNode.forEach(function(checkNode) {
// Validate if the date is conflict.
if (checkNode.d === '<') {
if (currentNodeDirection === '>=' && currentNodeTime >= checkNode.t) {
error = true;
}
} else {
if (currentNodeDirection === '<' && currentNodeTime <= checkNode.t) {
error = true;
}
}
return error;
});
return error;
} else {
if (currentNode.one('div > .badge-warning')) {
currentNode.one('div > .badge-warning').remove();
}
return error;
}
};
M.availability_date.form.fillErrors = function(errors, node) {
var error = M.availability_date.form.checkConditionDate(node);
if (error) {
errors.push('availability_date:error_dateconflict');
}
};
@@ -971,7 +971,21 @@ M.core_availability.Item.prototype.fillErrors = function(errors) {
// If any errors were added, add the marker to this item.
var errorLabel = this.node.one('> .badge-warning');
if (errors.length !== before && !errorLabel.get('firstChild')) {
errorLabel.appendChild(document.createTextNode(M.util.get_string('invalid', 'availability')));
var errorString = '';
// Fetch the last error code from the array of errors and split using the ':' delimiter.
var langString = errors[errors.length - 1].split(':');
var component = langString[0];
var identifier = langString[1];
// If get_string can't find the string, it will return the string in this format.
var undefinedString = '[[' + identifier + ',' + component + ']]';
// Get the lang string.
errorString = M.util.get_string(identifier, component);
if (errorString === undefinedString) {
// Use a generic invalid input message when the error lang string cannot be loaded.
errorString = M.util.get_string('invalid', 'availability');
}
// Show the error string.
errorLabel.appendChild(document.createTextNode(errorString));
} else if (errors.length === before && errorLabel.get('firstChild')) {
errorLabel.get('firstChild').remove();
}
File diff suppressed because one or more lines are too long
@@ -971,7 +971,21 @@ M.core_availability.Item.prototype.fillErrors = function(errors) {
// If any errors were added, add the marker to this item.
var errorLabel = this.node.one('> .badge-warning');
if (errors.length !== before && !errorLabel.get('firstChild')) {
errorLabel.appendChild(document.createTextNode(M.util.get_string('invalid', 'availability')));
var errorString = '';
// Fetch the last error code from the array of errors and split using the ':' delimiter.
var langString = errors[errors.length - 1].split(':');
var component = langString[0];
var identifier = langString[1];
// If get_string can't find the string, it will return the string in this format.
var undefinedString = '[[' + identifier + ',' + component + ']]';
// Get the lang string.
errorString = M.util.get_string(identifier, component);
if (errorString === undefinedString) {
// Use a generic invalid input message when the error lang string cannot be loaded.
errorString = M.util.get_string('invalid', 'availability');
}
// Show the error string.
errorLabel.appendChild(document.createTextNode(errorString));
} else if (errors.length === before && errorLabel.get('firstChild')) {
errorLabel.get('firstChild').remove();
}
+15 -1
View File
@@ -969,7 +969,21 @@ M.core_availability.Item.prototype.fillErrors = function(errors) {
// If any errors were added, add the marker to this item.
var errorLabel = this.node.one('> .badge-warning');
if (errors.length !== before && !errorLabel.get('firstChild')) {
errorLabel.appendChild(document.createTextNode(M.util.get_string('invalid', 'availability')));
var errorString = '';
// Fetch the last error code from the array of errors and split using the ':' delimiter.
var langString = errors[errors.length - 1].split(':');
var component = langString[0];
var identifier = langString[1];
// If get_string can't find the string, it will return the string in this format.
var undefinedString = '[[' + identifier + ',' + component + ']]';
// Get the lang string.
errorString = M.util.get_string(identifier, component);
if (errorString === undefinedString) {
// Use a generic invalid input message when the error lang string cannot be loaded.
errorString = M.util.get_string('invalid', 'availability');
}
// Show the error string.
errorLabel.appendChild(document.createTextNode(errorString));
} else if (errors.length === before && errorLabel.get('firstChild')) {
errorLabel.get('firstChild').remove();
}
+1
View File
@@ -48,6 +48,7 @@ $PAGE->set_title($title);
$PAGE->set_heading($title);
$PAGE->set_secondary_active_tab('coursereuse');
$PAGE->requires->js_call_amd('core_backup/async_backup', 'asyncCopyAllStatus');
$PAGE->secondarynav->set_overflow_selected_node('copy');
// Build the page output.
echo $OUTPUT->header();
+14 -5
View File
@@ -4239,7 +4239,8 @@ class restore_block_instance_structure_step extends restore_structure_step {
// Look for the parent contextid
if (!$data->parentcontextid = $this->get_mappingid('context', $data->parentcontextid)) {
throw new restore_step_exception('restore_block_missing_parent_ctx', $data->parentcontextid);
// Parent contextid does not exist, ignore this block.
return false;
}
// TODO: it would be nice to use standard plugin supports instead of this instance_allow_multiple()
@@ -4285,14 +4286,17 @@ class restore_block_instance_structure_step extends restore_structure_step {
$params['subpagepattern'] = $data->subpagepattern;
}
$exists = $DB->record_exists_sql("SELECT bi.id
$existingblock = $DB->get_records_sql("SELECT bi.id
FROM {block_instances} bi
JOIN {block} b ON b.name = bi.blockname
WHERE bi.blockname = :blockname
AND $contextsql
AND bi.pagetypepattern $pagetypepatternsql
AND $subpagepatternsql", $params);
if ($exists) {
if (!empty($existingblock)) {
// Save the context mapping in case something else is linking to this block's context.
$newcontext = context_block::instance(reset($existingblock)->id);
$this->set_mapping('context', $oldcontextid, $newcontext->id);
// There is at least one very similar block visible on the page where we
// are trying to restore the block. In these circumstances the block API
// would not allow the user to add another instance of the block, so we
@@ -4311,6 +4315,9 @@ class restore_block_instance_structure_step extends restore_structure_step {
if ($birecs = $DB->get_records('block_instances', $params)) {
foreach($birecs as $birec) {
if ($birec->configdata == $data->configdata) {
// Save the context mapping in case something else is linking to this block's context.
$newcontext = context_block::instance($birec->id);
$this->set_mapping('context', $oldcontextid, $newcontext->id);
return false;
}
}
@@ -5446,7 +5453,8 @@ class restore_process_file_aliases_queue extends restore_execution_step {
continue;
}
if ($info->oldfile->repositorytype === 'local' or $info->oldfile->repositorytype === 'coursefiles') {
if ($info->oldfile->repositorytype === 'local' || $info->oldfile->repositorytype === 'coursefiles'
|| $info->oldfile->repositorytype === 'contentbank') {
// Aliases to Server files and Legacy course files may refer to a file
// contained in the backup file or to some existing file (if we are on the
// same site).
@@ -5609,7 +5617,8 @@ class restore_process_file_aliases_queue extends restore_execution_step {
// Both Server files and Legacy course files repositories have a single
// instance at the system context to use. Let us try to find it.
if ($info->oldfile->repositorytype === 'local' or $info->oldfile->repositorytype === 'coursefiles') {
if ($info->oldfile->repositorytype === 'local' || $info->oldfile->repositorytype === 'coursefiles'
|| $info->oldfile->repositorytype === 'contentbank') {
$sql = "SELECT ri.id
FROM {repository} r
JOIN {repository_instances} ri ON ri.typeid = r.id
+2
View File
@@ -53,6 +53,8 @@ $PAGE->set_secondary_active_tab('coursereuse');
require_login($course, null, $cm);
require_capability('moodle/restore:restorecourse', $context);
$PAGE->secondarynav->set_overflow_selected_node('restore');
if (is_null($course)) {
$coursefullname = $SITE->fullname;
$courseshortname = $SITE->shortname;
+5 -3
View File
@@ -145,9 +145,11 @@ abstract class convert_helper {
$firstchars = fread($handle, 200);
$status = fclose($handle);
if (strpos($firstchars,'<?xml version="1.0" encoding="UTF-8"?>') !== false and
strpos($firstchars,'<moodle_backup>') !== false and
strpos($firstchars,'<information>') !== false) {
// Look for expected XML elements (case-insensitive to account for encoding attribute).
if (stripos($firstchars, '<?xml version="1.0" encoding="UTF-8"?>') !== false &&
strpos($firstchars, '<moodle_backup>') !== false &&
strpos($firstchars, '<information>') !== false) {
return true;
}
+1 -1
View File
@@ -643,7 +643,7 @@ class backup_ui_stage_complete extends backup_ui_stage_final {
}
$output .= $renderer->get_samesite_notification();
$output .= $renderer->notification(get_string('executionsuccess', 'backup'), 'notifysuccess');
$output .= $renderer->continue_button($restorerul);
$output .= $renderer->continue_button($restorerul, 'get');
$output .= $renderer->box_end();
return $output;
+2 -2
View File
@@ -553,7 +553,8 @@ class core_backup_renderer extends plugin_renderer_base {
}
/**
* Displays a continue button
* Displays a continue button, overriding core renderer method of the same in order
* to override submission method of the button form
*
* @param string|moodle_url $url
* @param string $method
@@ -566,7 +567,6 @@ class core_backup_renderer extends plugin_renderer_base {
if ($method != 'post') {
$method = 'get';
}
$url->param('sesskey', sesskey());
$button = new single_button($url, get_string('continue'), $method, true);
$button->class = 'continuebutton';
return $this->render($button);
+4 -2
View File
@@ -1161,8 +1161,10 @@ class restore_ui_stage_complete extends restore_ui_stage_process {
$html .= $renderer->notification(get_string('restorefileweremissing', 'backup'), 'notifyproblem');
}
$html .= $renderer->notification(get_string('restoreexecutionsuccess', 'backup'), 'notifysuccess');
$html .= $renderer->continue_button(new moodle_url('/course/view.php', array(
'id' => $this->get_ui()->get_controller()->get_courseid())), 'get');
$courseurl = course_get_url($this->get_ui()->get_controller()->get_courseid());
$html .= $renderer->continue_button($courseurl, 'get');
$html .= $renderer->box_end();
return $html;
@@ -12,9 +12,10 @@ Feature: Restore Moodle 2 course backups
| Course 3 | C3 | 0 | topics | 2 | 0 |
| Course 4 | C4 | 0 | topics | 20 | 0 |
And the following "activities" exist:
| activity | course | idnumber | name | intro | section |
| assign | C3 | assign1 | Test assign name | Assign description | 1 |
| data | C3 | data1 | Test database name | Database description | 2 |
| activity | course | idnumber | name | intro | section | externalurl |
| assign | C3 | assign1 | Test assign name | Assign description | 1 | |
| data | C3 | data1 | Test database name | Database description | 2 | |
| url | C1 | url1 | Test URL name | Test URL description | 3 | http://www.moodle.org |
And I log in as "admin"
And I am on "Course 1" course homepage with editing mode on
And I add a "Forum" to section "1" and I fill the form with:
@@ -108,11 +109,7 @@ Feature: Restore Moodle 2 course backups
@javascript
Scenario: Restore a backup in an existing course retaining the backup course settings
Given I add a "URL" to section "3" and I fill the form with:
| Name | Test URL name |
| Description | Test URL description |
| id_externalurl | http://www.moodle.org |
And I hide section "3"
Given I hide section "3"
And I hide section "7"
When I backup "Course 1" course using this options:
| Confirmation | Filename | test_backup.mbz |
@@ -134,11 +131,7 @@ Feature: Restore Moodle 2 course backups
@javascript
Scenario: Restore a backup in an existing course keeping the target course settings
Given I add a "URL" to section "3" and I fill the form with:
| Name | Test URL name |
| Description | Test URL description |
| id_externalurl | http://www.moodle.org |
And I hide section "3"
Given I hide section "3"
And I hide section "7"
When I backup "Course 1" course using this options:
| Confirmation | Filename | test_backup.mbz |
@@ -160,11 +153,7 @@ Feature: Restore Moodle 2 course backups
@javascript
Scenario: Restore a backup in an existing course deleting contents and retaining the backup course settings
Given I add a "URL" to section "3" and I fill the form with:
| Name | Test URL name |
| Description | Test URL description |
| id_externalurl | http://www.moodle.org |
And I hide section "3"
Given I hide section "3"
And I hide section "7"
When I backup "Course 1" course using this options:
| Initial | Include enrolled users | 0 |
@@ -188,11 +177,7 @@ Feature: Restore Moodle 2 course backups
@javascript
Scenario: Restore a backup in an existing course deleting contents and keeping the current course settings
Given I add a "URL" to section "3" and I fill the form with:
| Name | Test URL name |
| Description | Test URL description |
| id_externalurl | http://www.moodle.org |
And I hide section "3"
Given I hide section "3"
And I hide section "7"
When I backup "Course 1" course using this options:
| Initial | Include enrolled users | 0 |
@@ -216,11 +201,7 @@ Feature: Restore Moodle 2 course backups
@javascript
Scenario: Restore a backup in an existing course deleting contents decreasing the number of sections
Given I add a "URL" to section "3" and I fill the form with:
| Name | Test URL name |
| Description | Test URL description |
| id_externalurl | http://www.moodle.org |
And I hide section "3"
Given I hide section "3"
And I hide section "7"
When I backup "Course 1" course using this options:
| Initial | Include enrolled users | 0 |
@@ -21,7 +21,7 @@ Feature: Restore Moodle 2 course backups with different user data settings
| data | Test database name | n | C1 | data1 |
And I log in as "teacher1"
And I am on "Course 1" course homepage
And I add a "Text input" field to "Test database name" database and I fill the form with:
And I add a "Short text" field to "Test database name" database and I fill the form with:
| Field name | Test field name |
| Field description | Test field description |
And I navigate to "Templates" in current page administration
@@ -60,7 +60,7 @@ M.core_backup.backupselectall = function(modnames) {
'</div>';
};
var firstsection = Y.one('fieldset#id_coursesettings .fcontainer.clearfix .grouped_settings.section_level');
var firstsection = Y.one('fieldset#id_coursesettings .fcontainer .grouped_settings.section_level');
if (!firstsection) {
// This is not a relevant page.
return;
@@ -1 +1 @@
YUI.add("moodle-backup-backupselectall",function(g,e){M.core_backup=M.core_backup||{},M.core_backup.backupselectall=function(e){var t,n,i,d,c,o,r,p,l=null,a=function(e,t,i,n){var c,o;e.preventDefault(),c=void 0!==n?"setting_activity_"+n+"_":"",o=i.length,g.all('input[type="checkbox"]').each(function(e){var n=e.get("name");c&&n.substring(0,c.length)!==c||n.substring(n.length-o)===i&&e.set("checked",t)}),l&&M.form&&M.form.updateFormState(l)},u=function(e,n,t,i){return void 0===i&&(i=""),'<div class="'+e+'"><div class="fitem fitem_fcheckbox backup_selector"><div class="fitemtitle">'+t+'</div><div class="felement"><a id="backup-all-'+n+'" href="#">'+M.util.get_string("all","moodle")+'</a> / <a id="backup-none-'+n+'" href="#">'+M.util.get_string("none","moodle")+"</a>"+i+"</div></div></div>"},s=g.one("fieldset#id_coursesettings .fcontainer.clearfix .grouped_settings.section_level");if(s&&s.one('input[type="checkbox"]')){for(o in l=s.ancestor("form").getAttribute("id"),t=!1,g.all('input[type="checkbox"]').each(function(e){e=e.get("name");"_userdata"===e.substring(e.length-9)?t="_userdata":"_userinfo"===e.substring(e.length-9)&&(t="_userinfo")}),n=u("include_setting section_level","included",M.util.get_string("select","moodle"),' (<a id="backup-bytype" href="#">'+M.util.get_string("showtypes","backup")+"</a>)"),t&&(n+=u("normal_setting","userdata",M.util.get_string("select","moodle"))),i=g.Node.create('<div class="grouped_settings section_level">'+n+"</div>"),s.insert(i,"before"),d=function(e,n){g.one("#backup-all-mod_"+n).on("click",function(e){a(e,!0,"_included",n)}),g.one("#backup-none-mod_"+n).on("click",function(e){a(e,!1,"_included",n)}),t&&(g.one("#backup-all-userdata-mod_"+n).on("click",function(e){a(e,!0,t,n)}),g.one("#backup-none-userdata-mod_"+n).on("click",function(e){a(e,!1,t,n)}))},(c=g.Node.create('<div id="mod_select_links">')).hide(),c.currentlyshown=!1,i.appendChild(c),e)e.hasOwnProperty(o)&&(n=u("include_setting section_level","mod_"+o,e[o]),t&&(n+=u("normal_setting","userdata-mod_"+o,e[o])),r=g.Node.create('<div class="grouped_settings section_level">'+n+"</div>"),c.appendChild(r),d(0,o));p=function(){var e,n=g.one("#backup-bytype");c.currentlyshown?n.setHTML(M.util.get_string("showtypes","backup")):n.setHTML(M.util.get_string("hidetypes","backup")),c.currentlyshown=!c.currentlyshown,n={node:c,duration:.2},c.currentlyshown?(c.show(),n.to={maxHeight:c.get("clientHeight")+"px"},c.setStyle("maxHeight","0px"),(e=new g.Anim(n)).on("end",function(){c.setStyle("maxHeight","none")})):(n.to={maxHeight:"0px"},c.setStyle("maxHeight",c.get("clientHeight")+"px"),(e=new g.Anim(n)).on("end",function(){c.hide(),c.setStyle("maxHeight","none")})),e.run()},g.one("#backup-bytype").on("click",function(e){e.preventDefault(),p()}),g.one("#backup-all-included").on("click",function(e){a(e,!0,"_included")}),g.one("#backup-none-included").on("click",function(e){a(e,!1,"_included")}),t&&(g.one("#backup-all-userdata").on("click",function(e){a(e,!0,t)}),g.one("#backup-none-userdata").on("click",function(e){a(e,!1,t)}))}}},"@VERSION@",{requires:["node","event","node-event-simulate","anim"]});
YUI.add("moodle-backup-backupselectall",function(g,e){M.core_backup=M.core_backup||{},M.core_backup.backupselectall=function(e){var t,n,i,d,o,c,r,p,l=null,a=function(e,t,i,n){var o,c;e.preventDefault(),o=void 0!==n?"setting_activity_"+n+"_":"",c=i.length,g.all('input[type="checkbox"]').each(function(e){var n=e.get("name");o&&n.substring(0,o.length)!==o||n.substring(n.length-c)===i&&e.set("checked",t)}),l&&M.form&&M.form.updateFormState(l)},u=function(e,n,t,i){return void 0===i&&(i=""),'<div class="'+e+'"><div class="fitem fitem_fcheckbox backup_selector"><div class="fitemtitle">'+t+'</div><div class="felement"><a id="backup-all-'+n+'" href="#">'+M.util.get_string("all","moodle")+'</a> / <a id="backup-none-'+n+'" href="#">'+M.util.get_string("none","moodle")+"</a>"+i+"</div></div></div>"},s=g.one("fieldset#id_coursesettings .fcontainer .grouped_settings.section_level");if(s&&s.one('input[type="checkbox"]')){for(c in l=s.ancestor("form").getAttribute("id"),t=!1,g.all('input[type="checkbox"]').each(function(e){e=e.get("name");"_userdata"===e.substring(e.length-9)?t="_userdata":"_userinfo"===e.substring(e.length-9)&&(t="_userinfo")}),n=u("include_setting section_level","included",M.util.get_string("select","moodle"),' (<a id="backup-bytype" href="#">'+M.util.get_string("showtypes","backup")+"</a>)"),t&&(n+=u("normal_setting","userdata",M.util.get_string("select","moodle"))),i=g.Node.create('<div class="grouped_settings section_level">'+n+"</div>"),s.insert(i,"before"),d=function(e,n){g.one("#backup-all-mod_"+n).on("click",function(e){a(e,!0,"_included",n)}),g.one("#backup-none-mod_"+n).on("click",function(e){a(e,!1,"_included",n)}),t&&(g.one("#backup-all-userdata-mod_"+n).on("click",function(e){a(e,!0,t,n)}),g.one("#backup-none-userdata-mod_"+n).on("click",function(e){a(e,!1,t,n)}))},(o=g.Node.create('<div id="mod_select_links">')).hide(),o.currentlyshown=!1,i.appendChild(o),e)e.hasOwnProperty(c)&&(n=u("include_setting section_level","mod_"+c,e[c]),t&&(n+=u("normal_setting","userdata-mod_"+c,e[c])),r=g.Node.create('<div class="grouped_settings section_level">'+n+"</div>"),o.appendChild(r),d(0,c));p=function(){var e,n=g.one("#backup-bytype");o.currentlyshown?n.setHTML(M.util.get_string("showtypes","backup")):n.setHTML(M.util.get_string("hidetypes","backup")),o.currentlyshown=!o.currentlyshown,n={node:o,duration:.2},o.currentlyshown?(o.show(),n.to={maxHeight:o.get("clientHeight")+"px"},o.setStyle("maxHeight","0px"),(e=new g.Anim(n)).on("end",function(){o.setStyle("maxHeight","none")})):(n.to={maxHeight:"0px"},o.setStyle("maxHeight",o.get("clientHeight")+"px"),(e=new g.Anim(n)).on("end",function(){o.hide(),o.setStyle("maxHeight","none")})),e.run()},g.one("#backup-bytype").on("click",function(e){e.preventDefault(),p()}),g.one("#backup-all-included").on("click",function(e){a(e,!0,"_included")}),g.one("#backup-none-included").on("click",function(e){a(e,!1,"_included")}),t&&(g.one("#backup-all-userdata").on("click",function(e){a(e,!0,t)}),g.one("#backup-none-userdata").on("click",function(e){a(e,!1,t)}))}}},"@VERSION@",{requires:["node","event","node-event-simulate","anim"]});
@@ -60,7 +60,7 @@ M.core_backup.backupselectall = function(modnames) {
'</div>';
};
var firstsection = Y.one('fieldset#id_coursesettings .fcontainer.clearfix .grouped_settings.section_level');
var firstsection = Y.one('fieldset#id_coursesettings .fcontainer .grouped_settings.section_level');
if (!firstsection) {
// This is not a relevant page.
return;
@@ -58,7 +58,7 @@ M.core_backup.backupselectall = function(modnames) {
'</div>';
};
var firstsection = Y.one('fieldset#id_coursesettings .fcontainer.clearfix .grouped_settings.section_level');
var firstsection = Y.one('fieldset#id_coursesettings .fcontainer .grouped_settings.section_level');
if (!firstsection) {
// This is not a relevant page.
return;
+1 -1
View File
@@ -208,7 +208,7 @@ class issued_badge implements renderable {
$data->hasrelatedbadges = true;
$data->relatedbadges = [];
foreach ($relatedbadges as $related) {
if (isloggedin() && !is_guest($context)) {
if (isloggedin() && ($context instanceof context_course && !is_guest($context))) {
$related->url = (new moodle_url('/badges/overview.php', ['id' => $related->id]))->out(false);
}
$data->relatedbadges[] = (array)$related;
@@ -30,9 +30,7 @@ Feature: Award badges with separate groups
| teacher1 | CB |
| student2 | CA |
| teacher2 | CA |
And I log in as "teacher1"
And I am on "Course 1" course homepage
And I navigate to "Settings" in current page administration
And I am on the "Course 1" "course editing" page logged in as "teacher1"
And I expand all fieldsets
And I set the field "Group mode" to "Separate groups"
And I press "Save and display"
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_accessreview\tests;
namespace block_accessreview;
use ReflectionClass;
use advanced_testcase;
+1 -1
View File
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_badges\tests;
namespace block_badges;
use advanced_testcase;
use block_badges;
+1 -1
View File
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_blog_menu\tests;
namespace block_blog_menu;
use advanced_testcase;
use block_blog_menu;
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_blog_recent\tests;
namespace block_blog_recent;
use advanced_testcase;
use block_blog_recent;
+1 -1
View File
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_blog_tags\tests;
namespace block_blog_tags;
use advanced_testcase;
use block_blog_tags;
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_block\local\views;
namespace core_block\navigation\views;
/**
* Class secondary
+1 -1
View File
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_comments\tests;
namespace block_comments;
use advanced_testcase;
use block_comments;
+32 -30
View File
@@ -41,7 +41,7 @@ if ($userid) {
}
// Check permissions.
require_login();
require_login($course);
if (!completion_can_view_data($user->id, $course)) {
print_error('cannotviewreport');
@@ -66,10 +66,6 @@ if (!$info->is_tracked_user($user->id)) {
}
}
// Display page.
$PAGE->set_context(context_course::instance($course->id));
// Print header.
$page = get_string('completionprogressdetails', 'block_completionstatus');
$title = format_string($course->fullname) . ': ' . $page;
@@ -114,7 +110,36 @@ $params = array(
);
$ccompletion = new completion_completion($params);
if ($coursecomplete) {
// Save row data.
$rows = array();
// Flag to set if current completion data is inconsistent with what is stored in the database.
$pendingupdate = false;
// Load criteria to display.
$completions = $info->get_completions($user->id);
// Loop through course criteria.
foreach ($completions as $completion) {
$criteria = $completion->get_criteria();
if (!$pendingupdate && $criteria->is_pending($completion)) {
$pendingupdate = true;
}
$row = array();
$row['type'] = $criteria->criteriatype;
$row['title'] = $criteria->get_title();
$row['status'] = $completion->get_status();
$row['complete'] = $completion->is_complete();
$row['timecompleted'] = $completion->timecompleted;
$row['details'] = $criteria->get_details($completion);
$rows[] = $row;
}
if ($pendingupdate) {
echo html_writer::tag('i', get_string('pending', 'completion'));
} else if ($coursecomplete) {
echo get_string('complete');
} else if (!$criteriacomplete && !$ccompletion->timestarted) {
echo html_writer::tag('i', get_string('notyetstarted', 'completion'));
@@ -125,9 +150,6 @@ if ($coursecomplete) {
echo html_writer::end_tag('td');
echo html_writer::end_tag('tr');
// Load criteria to display.
$completions = $info->get_completions($user->id);
// Check if this course has any criteria.
if (empty($completions)) {
echo html_writer::start_tag('tr');
@@ -170,23 +192,6 @@ if (empty($completions)) {
echo html_writer::tag('th', get_string('completiondate', 'report_completion'), array('class' => 'c5 header', 'scope' => 'col'));
echo html_writer::end_tag('tr');
// Save row data.
$rows = array();
// Loop through course criteria.
foreach ($completions as $completion) {
$criteria = $completion->get_criteria();
$row = array();
$row['type'] = $criteria->criteriatype;
$row['title'] = $criteria->get_title();
$row['status'] = $completion->get_status();
$row['complete'] = $completion->is_complete();
$row['timecompleted'] = $completion->timecompleted;
$row['details'] = $criteria->get_details($completion);
$rows[] = $row;
}
// Print table.
$last_type = '';
$agg_type = false;
@@ -256,8 +261,5 @@ if (empty($completions)) {
echo html_writer::end_tag('tbody');
echo html_writer::end_tag('table');
}
$courseurl = new moodle_url("/course/view.php", array('id' => $course->id));
echo html_writer::start_tag('div', array('class' => 'buttons'));
echo $OUTPUT->single_button($courseurl, get_string('returntocourse', 'block_completionstatus'), 'get');
echo html_writer::end_tag('div');
echo $OUTPUT->footer();
@@ -133,4 +133,4 @@ Feature: Enable Block Completion in a course using activity completion
And I am on "Course 1" course homepage
And I follow "More details"
And I should see "Achieving grade, Achieving passing grade" in the "Activity completion" "table_row"
And I should see "Yes" in the "Activity completion" "table_row"
And I should see "No" in the "Activity completion" "table_row"
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_completionstatus\tests;
namespace block_completionstatus;
use advanced_testcase;
use block_completionstatus;
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_globalsearch\tests;
namespace block_globalsearch;
use advanced_testcase;
use block_globalsearch;
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_glossary_random\tests;
namespace block_glossary_random;
use advanced_testcase;
use block_glossary_random;
+2 -2
View File
@@ -36,7 +36,7 @@ class moodle1_block_html_handler extends moodle1_block_handler {
$contextid = $this->converter->get_contextid(CONTEXT_BLOCK, $olddata['id']);
$decodeddata = base64_decode($olddata['configdata']);
list($updated, $configdata) = upgrade_fix_serialized_objects($decodeddata);
$configdata = unserialize($configdata);
$configdata = unserialize_object($configdata);
// get a fresh new file manager for this instance
$this->fileman = $this->converter->get_file_manager($contextid, 'block_html');
@@ -44,7 +44,7 @@ class moodle1_block_html_handler extends moodle1_block_handler {
// convert course files embedded in the block content
$this->fileman->filearea = 'content';
$this->fileman->itemid = 0;
$configdata->text = moodle1_converter::migrate_referenced_files($configdata->text, $this->fileman);
$configdata->text = moodle1_converter::migrate_referenced_files($configdata->text ?? '', $this->fileman);
$configdata->format = FORMAT_HTML;
return base64_encode(serialize($configdata));
+2 -1
View File
@@ -83,7 +83,8 @@ class content extends \core_search\base_block {
$context = \context::instance_by_id($document->get('contextid'));
$files = $fs->get_area_files($context->id, 'block_html', 'content');
$files = $fs->get_area_files($context->id, 'block_html', 'content',
false, 'itemid, filepath, filename', false);
foreach ($files as $file) {
$document->add_stored_file($file);
}
+2 -4
View File
@@ -137,11 +137,9 @@ class search_content_test extends \advanced_testcase {
$this->assertCount(0, $doc->get_files());
$area->attach_files($doc);
$files = $doc->get_files();
$this->assertCount(2, $files);
// The directory entry should NOT be provided for indexing.
$this->assertCount(1, $files);
foreach ($files as $file) {
if ($file->is_directory()) {
continue;
}
$this->assertEquals('file.txt', $file->get_filename());
$this->assertEquals('File content', $file->get_content());
}
+1 -1
View File
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_lp\tests;
namespace block_lp;
use advanced_testcase;
use block_lp;
+1 -1
View File
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace block_mnet_hosts\tests;
namespace block_mnet_hosts;
use advanced_testcase;
use block_mnet_hosts;
@@ -22,12 +22,12 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$string['allincludinghidden'] = 'All (including archived)';
$string['allincludinghidden'] = 'All (including removed from view)';
$string['all'] = 'All';
$string['addtofavourites'] = 'Star this course';
$string['aria:addtofavourites'] = 'Star for';
$string['aria:allcoursesincludinghidden'] = 'Show all courses';
$string['aria:allcourses'] = 'Show all courses except archived courses';
$string['aria:allcourses'] = 'Show all courses except courses removed from view';
$string['aria:card'] = 'Switch to card view';
$string['aria:controls'] = 'Course overview controls';
$string['aria:courseactions'] = 'Actions for current course';
@@ -77,11 +77,11 @@ $string['summary'] = 'Summary';
$string['title'] = 'Course name';
$string['aria:hidecourse'] = 'Remove {$a} from view';
$string['aria:showcourse'] = 'Restore {$a} to view';
$string['aria:hiddencourses'] = 'Show archived courses';
$string['hidden'] = 'Archived courses';
$string['hidecourse'] = 'Archive';
$string['hiddencourses'] = 'Archived';
$string['show'] = 'Unarchive';
$string['aria:hiddencourses'] = 'Show courses removed from view';
$string['hidden'] = 'Courses removed from view';
$string['hidecourse'] = 'Remove from view';
$string['hiddencourses'] = 'Removed from view';
$string['show'] = 'Restore to view';
$string['sortbytitle'] = 'Sort by course name';
$string['sortbylastaccessed'] = 'Sort by last accessed';
$string['sortbyshortname'] = 'Sort by short name';
+8 -6
View File
@@ -27,15 +27,17 @@
<hr class="mt-0"/>
<div data-region="filter" class="d-flex align-items-center my-2" aria-label="{{#str}} aria:controls, block_myoverview {{/str}}">
{{> block_myoverview/nav-grouping-selector }}
<div class="row no-gutters">
{{> block_myoverview/nav-grouping-selector }}
{{> block_myoverview/nav-search-widget }}
{{> block_myoverview/nav-search-widget }}
{{> block_myoverview/nav-sort-selector }}
{{> block_myoverview/nav-sort-selector }}
{{#displaydropdown}}
{{> block_myoverview/nav-display-selector }}
{{/displaydropdown}}
{{#displaydropdown}}
{{> block_myoverview/nav-display-selector }}
{{/displaydropdown}}
</div>
</div>
<div class="container-fluid p-0">

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