Compare commits

...

289 Commits

Author SHA1 Message Date
Sara Arjona b198428e41 Moodle release 3.7.1 2019-07-05 12:27:23 +02:00
AMOS bot a5f09bca98 Automatically generated installer lang files 2019-07-05 00:09:46 +00:00
Eloy Lafuente (stronk7) 22124a36ca weekly release 3.7+ 2019-07-04 16:51:08 +02:00
Eloy Lafuente (stronk7) 50794f5278 Merge branch 'install_37_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_37_STABLE 2019-07-04 16:51:03 +02:00
AMOS bot e1cad3f07b Automatically generated installer lang files 2019-07-04 00:08:39 +00:00
Shamim Rezaie 2e4856a81f MDL-61114 mod_assign: Check if the teacher can access the override 2019-07-03 18:05:19 +02:00
Shamim Rezaie 211f6809b9 MDL-61114 mod_assign: assignment overrides to observe group membership 2019-07-03 18:05:19 +02:00
Shamim Rezaie ad75599c7b MDL-61115: mod_lesson: Check if the teacher can access the override 2019-07-03 17:49:58 +02:00
Shamim Rezaie ca908dd42c MDL-61115 mod_lesson: Lesson overrides to observe group membership 2019-07-03 17:49:58 +02:00
Sara Arjona 76129617e5 Merge branch 'MDL-65105-37' of git://github.com/bmbrands/moodle into MOODLE_37_STABLE 2019-07-03 15:05:42 +02:00
Sara Arjona 56f92fa069 Merge branch 'MDL-65958-37-v3' of git://github.com/lameze/moodle into MOODLE_37_STABLE 2019-07-03 14:53:28 +02:00
Simey Lameze d7815b0a79 MDL-65958 calendar: cover students default event type visibility 2019-07-03 20:41:04 +08:00
Simey Lameze 376a2f64f2 MDL-65958 calendar: students should not see course event type 2019-07-03 20:41:04 +08:00
Simey Lameze 634da01c65 MDL-65958 calendar: add behat to test calendar_adminseesall behaviour 2019-07-03 20:41:04 +08:00
Simey Lameze 8b0bb2389c MDL-65958 calendar: fix adminseesall logic in the event form 2019-07-03 20:41:03 +08:00
Sara Arjona 83b311dcb3 Merge branch 'MDL-64794_37' of https://github.com/stronk7/moodle into MOODLE_37_STABLE 2019-07-03 11:15:42 +02:00
Eloy Lafuente (stronk7) 299cdee4bf Merge branch 'MDL-65845_37' of git://github.com/dmonllao/moodle into MOODLE_37_STABLE 2019-07-03 02:25:39 +02:00
Eloy Lafuente (stronk7) 34b451dac4 Merge branch 'MDL-65656-37-2' of git://github.com/andrewnicols/moodle into MOODLE_37_STABLE 2019-07-03 02:16:54 +02:00
AMOS bot e2ac9903d9 Automatically generated installer lang files 2019-07-03 00:08:46 +00:00
AMOS bot ee22b6faba Automatically generated installer lang files 2019-07-03 00:08:46 +00:00
Eloy Lafuente (stronk7) a6c6690e79 Merge branch 'MDL-63268-37' of https://github.com/lucaboesch/moodle into MOODLE_37_STABLE 2019-07-03 00:13:15 +02:00
Sara Arjona acb0617d1b Merge branch 'MDL-64614_37' of git://github.com/stronk7/moodle into MOODLE_37_STABLE 2019-07-02 21:21:29 +02:00
Luca Bösch 370c8c4a06 MDL-63268 tool_uploadcourse: Keep source course section number. 2019-07-02 19:49:08 +02:00
Eloy Lafuente (stronk7) 4782bf39af Merge branch 'MDL-65707-37' of git://github.com/lameze/moodle into MOODLE_37_STABLE 2019-07-02 16:39:49 +02:00
Sara Arjona 39f9832ce5 Merge branch 'MDL-66062_37' of git://github.com/stronk7/moodle into MOODLE_37_STABLE 2019-07-02 15:16:02 +02:00
Sara Arjona ef0d79745f Merge branch 'MDL-65101_37' of git://github.com/markn86/moodle into MOODLE_37_STABLE 2019-07-02 14:50:22 +02:00
Eloy Lafuente (stronk7) e1b1217749 MDL-66062 travis: Force PHP 7.1.30 to avoid some unit test failures
Make this sticky because current default version (7.1.11)
has a bug with redis-extension outputting information and breaking
tests.
2019-07-02 13:00:41 +02:00
Eloy Lafuente (stronk7) 57886390a6 Merge branch 'MDL-65728-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-07-02 12:14:05 +02:00
Sara Arjona 2a6ee587d3 Merge branch 'MDL-65839_37' of git://github.com/dmonllao/moodle into MOODLE_37_STABLE 2019-07-02 10:42:10 +02:00
Eloy Lafuente (stronk7) 43ab5e777d Merge branch 'MDL-65853_m37' of git://github.com/gjb2048/moodle into MOODLE_37_STABLE 2019-07-02 10:25:36 +02:00
Shamim Rezaie 3f96ad977e MDL-34411 mod_quiz: Check if the teacher can access the override 2019-07-02 08:37:48 +02:00
Shamim Rezaie de068eb91a MDL-34411 groups: copy/paste error in test_groups_user_groups_visible 2019-07-02 08:37:48 +02:00
Shamim Rezaie e6539e7139 MDL-34411 mod_quiz: quiz overrides to observe group membership 2019-07-02 08:37:48 +02:00
Damyon Wiese 9a6c86b23f MDL-64623 glossary: Check the entry id
The entry must match the glossary before you can do any action on it.
2019-07-02 08:37:48 +02:00
Damyon Wiese ec2f7c0fe9 MDL-53689 xmldb: Require a sesskey to load xml
Loading and unloading xml files is not protected from XSS with a sesskey.
2019-07-02 08:37:48 +02:00
Sara Arjona 2077354356 Merge branch 'MDL-66049-37-workshopnamespace' of git://github.com/mudrd8mz/moodle into MOODLE_37_STABLE 2019-07-02 08:29:00 +02:00
Sara Arjona a3bce19260 Merge branch 'MDL-65901-37' of https://github.com/lucaboesch/moodle into MOODLE_37_STABLE 2019-07-02 08:10:27 +02:00
AMOS bot 08943d8121 Automatically generated installer lang files 2019-07-02 00:09:26 +00:00
Eloy Lafuente (stronk7) b053efae5d Merge branch 'MDL-64935-37' of git://github.com/bmbrands/moodle into MOODLE_37_STABLE 2019-07-02 00:06:59 +02:00
Eloy Lafuente (stronk7) b3bd9df0fd Merge branch 'MDL-64511-37' of https://github.com/paulholden/moodle into MOODLE_37_STABLE 2019-07-01 18:52:21 +02:00
Sara Arjona 1d5341843f Merge branch 'MDL-65297-37' of https://github.com/paulholden/moodle into MOODLE_37_STABLE 2019-07-01 18:34:52 +02:00
Sara Arjona 5da74261d3 Merge branch 'MDL-65892-37-inlinereply' of git://github.com/mudrd8mz/moodle into MOODLE_37_STABLE 2019-07-01 15:50:02 +02:00
David Mudrák ee3b7666f2 MDL-66049 workshop: Fix the fully qualified class name
Because of the missing slash, the class 'workshop' was not found in the
current namespace and the cron failed to work.
2019-07-01 14:49:34 +02:00
Sara Arjona 9c96a6fcf7 Merge branch 'MDL-65973-37' of git://github.com/jleyva/moodle into MOODLE_37_STABLE 2019-07-01 13:13:34 +02:00
Dan Marsden 6ab4eaf7f2 MDL-60347 core: debugsmtp should be a developer only setting. 2019-07-01 12:16:22 +02:00
Sara Arjona 46c4afbeaf Merge branch 'MDL-57884_37' of https://github.com/timhunt/moodle into MOODLE_37_STABLE 2019-07-01 09:57:48 +02:00
Eloy Lafuente (stronk7) e0e75192e8 MDL-64614 environment: mssql requirement up to 2012 (11.0) 2019-06-30 11:58:04 +02:00
Eloy Lafuente (stronk7) c0078c08df MDL-64614 environment: 3.8 base information
This is a direct copy of the 3.7 branch to have
changes under control easier for next commits.
2019-06-30 11:58:04 +02:00
AMOS bot e2c4f9d374 Automatically generated installer lang files 2019-06-30 00:09:17 +00:00
AMOS bot 1b26a3db64 Automatically generated installer lang files 2019-06-30 00:09:16 +00:00
AMOS bot fa5aa45de4 Automatically generated installer lang files 2019-06-29 00:09:17 +00:00
AMOS bot 9c9ac43919 Automatically generated installer lang files 2019-06-29 00:09:17 +00:00
David Monllaó b214024bda MDL-65845 mod_lesson: Fix wrong pointer to an object
We should be pointing to the array of timecreated values instead.
2019-06-28 21:06:22 +02:00
David Monllaó cd59d03500 MDL-65839 core_analytics: New indicator instances for each analysable 2019-06-28 21:00:25 +02:00
Paul Holden 0db181f9a9 MDL-64511 privacy: encode data URL when loading content.
Previously paths that included ? or # characters would break loading.
2019-06-28 13:16:55 +01:00
Paul Holden 868c037261 MDL-65297 atto_managefiles: improve filename decoding.
Filenames containing # character would previously be missed.
2019-06-28 13:13:49 +01:00
Sara Arjona a1714472d3 Merge branch 'MDL-65506-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-06-28 12:16:29 +02:00
Mark Nelson 7883551c72 MDL-65101 core_message: add Behat test 2019-06-28 18:14:30 +08:00
Mark Nelson bc11df440e MDL-65101 core_message: 'canmessage' should trump 'requirescontract' 2019-06-28 15:38:20 +08:00
AMOS bot 4efaec0a53 Automatically generated installer lang files 2019-06-28 00:09:47 +00:00
Gareth Barnard 0ded67ffd7 MDL-65853 format_base: Labels counted in section activity summary. 2019-06-27 23:36:06 +01:00
Luca Bösch 61923d3bdd MDL-65901 forum: Style advanced search form properly. 2019-06-27 21:58:19 +02:00
Eloy Lafuente (stronk7) 035d608c59 weekly release 3.7+ 2019-06-27 18:54:40 +02:00
Eloy Lafuente (stronk7) d49a5c7826 Merge branch 'install_37_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_37_STABLE 2019-06-27 18:54:38 +02:00
Andrew Nicols 7305ed72ec Merge branch 'MDL-53778_37' of https://github.com/stronk7/moodle into MOODLE_37_STABLE 2019-06-27 08:36:55 +08:00
Eloy Lafuente (stronk7) 7ab8ebf5b1 MDL-53778 quiz: ensure completion deps are fulfilled by behat
Behat backgrounds and scenarios must observe the new
interdependencies between quiz completion settings.

This commits just applies that to the tests missing it.
2019-06-27 01:12:44 +02:00
Eloy Lafuente (stronk7) c4b9758766 MDL-53778 quiz: ensure completion deps are fulfilled by generator uses
There are some mod_quiz generator issues where the new chain
of dependencies between completion settings was not being observed.

This patch just ensures that the now 3 chained settings are
enabled together (or new quiz options logic will proceed to
disable them).
2019-06-27 01:12:44 +02:00
Eloy Lafuente (stronk7) 679d2d1129 Merge branch 'MDL-66003-37-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_37_STABLE 2019-06-26 23:04:27 +02:00
Sara Arjona 4faf9ff6c6 Merge branch 'MDL-60088-37' of git://github.com/Chocolate-lightning/moodle into MOODLE_37_STABLE 2019-06-26 18:11:17 +02:00
Eloy Lafuente (stronk7) 0a77242e3c Merge branch 'MDL-53778_37' of https://github.com/anieminen/moodle into MOODLE_37_STABLE 2019-06-26 17:50:32 +02:00
Shamim Rezaie 1453ce1208 MDL-65506 forms: get the correct value for advcheckbox fields in js 2019-06-26 20:57:47 +10:00
Eloy Lafuente (stronk7) 798dc31ada Merge branch 'MDL-65249-37-fix' of https://github.com/snake/moodle into MOODLE_37_STABLE 2019-06-26 10:28:36 +02:00
Jake Dallimore 4a2a533fe1 MDL-65249 session: use redis host constant in unit tests 2019-06-26 16:11:05 +08:00
Ilya Tregubov 61373c843d MDL-65249 Session: Throw exception if number of attempts exceeded. 2019-06-26 14:49:23 +08:00
Jake Dallimore 2937760c27 Merge branch 'MDL-60978-37' of git://github.com/andrewnicols/moodle into MOODLE_37_STABLE 2019-06-26 13:17:04 +08:00
AMOS bot 03989cb776 Automatically generated installer lang files 2019-06-26 00:09:24 +00:00
Eloy Lafuente (stronk7) a4f78b52f6 Merge branch 'MDL-65181-37' of https://github.com/paulholden/moodle into MOODLE_37_STABLE 2019-06-26 00:43:50 +02:00
David Mudrák ecc1bd1c73 MDL-66003 lang: Use the updated strings in the tests 2019-06-25 21:30:27 +02:00
Helen Foster 694f33c2f6 MDL-66003 lang: Import fixed English strings (en_fix)
Significant string changes:

* moodleorghubname,core_admin and
  sitemustberegistered,message_airnotifier - 'Moodle.net' changed to
  'Moodle'

* registration_help,core_admin and registermoochtips,core_hub - removed
  erroneous 'access to Moodle.net our course sharing platform'

* trackingtype_help,mod_forum and formnotavailable,core_grading and
  showgrades_help,core and rolewarning_help,core_rating -
  'Administration block' changed to 'Actions menu or admin block',
  'navigation block' changed to 'navigation drawer or block'
2019-06-25 21:30:27 +02:00
David Mudrák d93cdd955b MDL-65892 forum: Fix styling of the inline reply textarea 2019-06-25 14:49:12 +02:00
Arto Nieminen d80d0b4142 MDL-53778 quiz settings: Ensure that disabled checkboxes have value 0 2019-06-25 13:26:29 +03:00
Simey Lameze b73ab4bf04 MDL-65707 calendar: behat scenario to test default event type 2019-06-25 10:23:34 +08:00
Simey Lameze a398df5381 MDL-65707 calendar: set the correct event type on site calendar 2019-06-25 10:23:34 +08:00
AMOS bot b0ff1a1600 Automatically generated installer lang files 2019-06-25 00:09:19 +00:00
Eloy Lafuente (stronk7) 98070f7020 Merge branch 'MDL-64340-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-06-25 00:54:00 +02:00
Bas Brands 40271e858d MDL-64935 theme: prevent activitynavigation link overflowing container 2019-06-24 14:48:53 +02:00
Bas Brands f839aff2b5 MDL-65105 theme_classic: use $dark variable for navbar-dark 2019-06-24 11:43:21 +02:00
Shamim Rezaie 0096c60d46 MDL-65728 tool_customlang: Escape html on the original translation field 2019-06-24 18:27:20 +10:00
Jake Dallimore 65424cea97 Merge branch 'MDL-65893-37' of https://github.com/nicoroeser/moodle into MOODLE_37_STABLE 2019-06-24 11:42:05 +08:00
AMOS bot 863b9081f5 Automatically generated installer lang files 2019-06-24 00:08:17 +00:00
Mathew May 44c178ec4f MDL-60088 travis: add dist:trusty to travis
We are doing this because travis changed its default release to xenial.
So this is a stop gap and we will add xenial support moving forward.
2019-06-23 23:58:51 +08:00
Andrew Nicols 0703eeca7c MDL-60978 travis: Re-enable Redis session tests 2019-06-21 14:36:13 +08:00
Andrew Nicols 866f014372 MDL-60978 session: Run redis tests in isolation 2019-06-21 14:36:13 +08:00
Andrew Nicols 22ad84cb00 MDL-60978 testing: Support ability to run phpunit in isolated process 2019-06-21 14:36:13 +08:00
Shamim Rezaie d56311006a MDL-64340 mod_quiz: not display "add random question" when no permission 2019-06-21 08:53:47 +10:00
Eloy Lafuente (stronk7) 30d4327769 weekly release 3.7+ 2019-06-20 17:43:09 +02:00
Eloy Lafuente (stronk7) d987202dff Merge branch 'install_37_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_37_STABLE 2019-06-20 17:43:05 +02:00
Juan Leyva 25d288d297 MDL-65973 calendar: Avoid sesskey checks in WS
External function submit_create_update_form should avoid any sesskey checks.
2019-06-20 15:07:43 +02:00
Jake Dallimore aa6b0c6d03 Merge branch 'MDL-65084-m37' of https://github.com/NeillM/moodle into MOODLE_37_STABLE 2019-06-20 09:40:26 +08:00
Jake Dallimore 6f3819a805 Merge branch 'MDL-65883-37' of git://github.com/lameze/moodle into MOODLE_37_STABLE 2019-06-20 09:13:02 +08:00
Andrew Nicols 2641b5e31e Merge branch 'MDL-61319-37' of git://github.com/bmbrands/moodle into MOODLE_37_STABLE 2019-06-20 08:10:10 +08:00
Eloy Lafuente (stronk7) 35db491a6d Merge branch 'MDL-64975-37' of https://github.com/nicoroeser/moodle into MOODLE_37_STABLE 2019-06-20 00:17:55 +02:00
Eloy Lafuente (stronk7) 27deb31ded Merge branch 'MDL-65910-37' of git://github.com/junpataleta/moodle into MOODLE_37_STABLE 2019-06-19 20:54:36 +02:00
Eloy Lafuente (stronk7) 511e5c933a Merge branch 'MDL-65665-37-2' of git://github.com/mihailges/moodle into MOODLE_37_STABLE 2019-06-19 20:29:38 +02:00
Eloy Lafuente (stronk7) 5574d3431b Merge branch 'MDL-65666-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-06-19 18:38:26 +02:00
Eloy Lafuente (stronk7) ee8c5098c9 Merge branch 'MDL-65806-m37' of https://github.com/sammarshallou/moodle into MOODLE_37_STABLE 2019-06-19 18:27:19 +02:00
Eloy Lafuente (stronk7) 480396103b Merge branch 'MDL-65864_37' of git://github.com/timhunt/moodle into MOODLE_37_STABLE 2019-06-19 18:09:28 +02:00
Eloy Lafuente (stronk7) 4e5ebf89ba Merge branch 'MDL-55821-37' of git://github.com/damyon/moodle into MOODLE_37_STABLE 2019-06-19 18:05:20 +02:00
Neill Magill 015607040a MDL-65084 recent items: Handle deleted courses
The method should not cause errors when a course with activities
that the user has visited no longer exists.

Ensuring that we only get records for courses still in the database
will stop any course not found erros from get_fast_modinfo()

(cherry picked from commit f1d4c355fb25321756cfbed3b38afbe6e91ccdf9)
2019-06-19 09:04:33 +01:00
Neill Magill c58a1e9067 MDL-65084 recent items: Test handling of deleted courses 2019-06-19 09:04:31 +01:00
Simey Lameze eecc04f29c MDL-65883 mod_quiz: replace all hardcoded urls to proper params 2019-06-19 15:27:22 +08:00
Simey Lameze f237e35755 MDL-65883 mod_quiz: change attemptlib_test to use data generators 2019-06-19 15:27:22 +08:00
Simey Lameze bee606d3b1 MDL-65883 mod_quiz: fix quiz navigation buttons href 2019-06-19 15:27:22 +08:00
Jake Dallimore 38b5816722 Merge branch 'MDL-65904-37' of git://github.com/merrill-oakland/moodle into MOODLE_37_STABLE 2019-06-19 14:59:06 +08:00
Tim Hunt 6e5e4cc208 MDL-57884 quiz: autosave should not send the value of submit buttons 2019-06-18 17:47:48 +01:00
Bas Brands 4af9077f26 MDL-61319 themes: prevent using @extend rules for complex classes
* the settings and navigation blocks scss extended .fa which caused
issues with native fontawesome classes like fa-pull-left.
2019-06-18 13:49:37 +02:00
M Kassaei 0b2c17a183 MDL-65840 qtype_ddmarker: coordinates of cirle shape
The coordinates of a circle shape are not allowed to be smaller than its radius.
By default, set the coordinates to be the same as the radius.
2019-06-18 09:45:37 +08:00
Andrew Nicols 2a55bff8f6 Merge branch 'MDL-65469-37_2' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-06-18 09:16:53 +08:00
Eloy Lafuente (stronk7) e235ef7bd9 MDL-65469 mod_forum: Check for existence before operating 2019-06-18 08:50:32 +08:00
Peter 47dd7dd840 MDL-65469 core: Backported updates from master 2019-06-18 08:40:21 +08:00
AMOS bot 70c75a7a47 Automatically generated installer lang files 2019-06-18 00:08:37 +00:00
Eloy Lafuente (stronk7) a7367b6cf3 Merge branch 'MDL-65869-37' of git://github.com/aanabit/moodle into MOODLE_37_STABLE 2019-06-18 00:14:18 +02:00
Eloy Lafuente (stronk7) ae8dfad361 Merge branch 'MDL-64383-37' of git://github.com/damyon/moodle into MOODLE_37_STABLE 2019-06-17 23:02:53 +02:00
Andrew Nicols a0bdd53e21 Merge branch 'MDL-65469-37' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-06-17 15:19:35 +08:00
Andrew Nicols c615b3e96b Merge branch 'MDL-65888-37' of git://github.com/mudrd8mz/moodle into MOODLE_37_STABLE 2019-06-17 10:52:48 +08:00
AMOS bot e3475fd088 Automatically generated installer lang files 2019-06-15 00:08:13 +00:00
Nicolas Roeser e934a351e9 MDL-64975 moodlelib: fix float formatting if decsep is ~ (tilde)
Commit 637da99edb has introduced changes
for removing trailing zeroes from the output of function format_float.
Due to a small omission, the function causes a PHP warning when the
string decsep is set to a tilde character ('~'). This is rarely the
case.

The bug lies in using PHP function preg_replace with a string that
contains external input (in this case, including decsep), but without
escaping it for PCRE processing.

This commit fixes the function to also support a tilde character in
string decsep. It also adds tests for having tilde as decimal separator.

Thanks-To:  Jake Dallimore <jake@moodle.com>
2019-06-14 13:04:37 +02:00
Paul Holden 564753102d MDL-65181 mod_data: show required field indicator for textarea fields. 2019-06-14 09:58:18 +01:00
Nicolas Roeser 91916adde5 MDL-65893 webservice: format site name (handle language tags etc.)
Allow web service clients (like the Moodle App) to benefit from a
formatted (filtered) site name. Select the filtered (localized etc.)
string on server side, before it is sent to the web service client.

For example, this translates a site name which uses language tags in
curly braces when using the filter_multilang2 plugin.

Thanks-To: Juan Leyva <juan@moodle.com>
Thanks-To: Kathrin Osswald <kathrin.osswald@uni-ulm.de>
2019-06-14 10:38:32 +02:00
Amaia Anabitarte 7af3ae4834 MDL-65869 behat: Moving @app behat tests from core to moodlemobileapp
As described in MDL-65869 we are moving @app behat tests to
https://github.com/moodlehq/moodle-local_moodlemobileapp to be easier to maintain
and be sure are working with different mobile versions.
So we are not deprecating tests from core, just removing them because will be
in a different location.
2019-06-14 10:17:17 +02:00
Jun Pataleta fdfd266454 MDL-65910 report_stats: Add stattype query condition for consistency 2019-06-14 13:01:32 +08:00
Mihail Geshoski f3e11eef99 MDL-65665 forum: WS does not respect subscribe on reply user preference 2019-06-14 08:45:59 +08:00
Mihail Geshoski 94c5e0ade7 MDL-65665 forum: Add unit test 2019-06-14 08:45:59 +08:00
Tim Hunt 55929d8a49 MDL-65864 question engine: fix re-saving a new usage
Before this fix, test_repeated_usage_saving_new_usage was failing but
test_repeated_usage_saving_existing_usage was passing. Now the
behaviour is consistent and they both pass.
2019-06-13 18:01:54 +01:00
Eloy Lafuente (stronk7) d0b1204d8e weekly release 3.7+ 2019-06-13 18:15:48 +02:00
Eloy Lafuente (stronk7) 81a3d127b1 Merge branch 'install_37_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_37_STABLE 2019-06-13 18:15:46 +02:00
Shamim Rezaie 4f7eaa8b46 MDL-65666 mod_forum: Highlight unread posts count in the discussion list 2019-06-14 01:26:36 +10:00
Andrew Nicols 54c6679153 Merge branch 'MDL-65814-37' of git://github.com/junpataleta/moodle into MOODLE_37_STABLE 2019-06-13 11:44:15 +08:00
Jun Pataleta 089fbd15cc MDL-65814 block_timeline: Bring back item counts for action events 2019-06-13 11:32:03 +08:00
Jun Pataleta 7132749e18 Merge branch 'MDL-55997-37' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-06-13 10:28:56 +08:00
Peter 9ca2c8dc52 MDL-55997 core_reports: modify user stats query to fix duplicate rows 2019-06-13 07:46:22 +08:00
Eloy Lafuente (stronk7) f55a4c094e Merge branch 'MDL-64484-37' of https://github.com/paulholden/moodle into MOODLE_37_STABLE 2019-06-12 20:08:12 +02:00
Eric Merrill 3a3a212405 MDL-65904 theme: Compile fallback css in the correct order 2019-06-12 13:08:54 -04:00
Paul Holden 0998cf8010 MDL-64484 user: cross-DB compatible profile field ordering. 2019-06-12 17:02:32 +01:00
Jun Pataleta 3766be85b2 Merge branch 'MDL-65803-37' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-06-12 13:58:45 +08:00
Andrew Nicols 83273d25b9 Merge branch 'MDL-65703-37' of git://github.com/lameze/moodle into MOODLE_37_STABLE 2019-06-12 12:39:05 +08:00
Peter b798b05411 MDL-65803 recentlyaccesseditems: Restrict response to valid courses.
* Additional hooks to cleanup data when a course or module is deleted
* Augmented unit tests to cover the situation when a course is deleted
* Upgrade step to cleanup existing data
2019-06-12 12:16:22 +08:00
Andrew Nicols 7eb50a3753 Merge branch 'MDL-65829_37' of git://github.com/dmonllao/moodle into MOODLE_37_STABLE 2019-06-12 10:33:03 +08:00
Andrew Nicols 4a4b4e28a4 Merge branch 'MDL-64484-37' of https://github.com/paulholden/moodle into MOODLE_37_STABLE 2019-06-12 09:01:21 +08:00
sam marshall 42c31d53c8 MDL-65806 Search: Solr does not find words in italic 2019-06-11 16:42:20 +01:00
Paul Holden ea770fe8c8 MDL-64484 user: show full profile field name in filter element. 2019-06-11 14:25:19 +01:00
David Mudrák 434a580558 MDL-65888 forum: Do not send notifications to unconfirmed users
Under certain conditions, users marked as not confirmed yet may be
returned as forum notification recipients. Such users are considered as
inactive though and the delivery adhoc task cannot be run as these
users, throwing an exception.

The solution is to make sure that fetch_subscribed_users() does not
include unconfirmed users, similarly to what was done for suspended
users and nologin users.

The added unit test also checks for deleted users. But these should
never be returned as subscribed because we consider enrolled users only
and deleted users are filtered out implicitly.
2019-06-11 09:49:59 +02:00
Andrew Nicols 9a7a447722 Merge branch 'MDL-65779-37' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-06-11 12:07:58 +08:00
Andrew Nicols 1bf28ecb43 Merge branch 'MDL-65817_37' of git://github.com/stronk7/moodle into MOODLE_37_STABLE 2019-06-11 11:06:13 +08:00
Andrew Nicols 9c99a5da5c Merge branch 'MDL-65183-MOODLE-37' of https://github.com/kristian-94/moodle into MOODLE_37_STABLE 2019-06-11 11:02:06 +08:00
Jun Pataleta 95008df6d9 Merge branch 'MDL-65336-37' of git://github.com/aanabit/moodle into MOODLE_37_STABLE 2019-06-10 19:37:15 +08:00
Jun Pataleta f499fa90f1 Merge branch 'MDL-55592-37' of git://github.com/damyon/moodle into MOODLE_37_STABLE 2019-06-10 15:25:05 +08:00
Andrew Nicols 015b617739 Merge branch 'm37_MDL-61038_Fix_uuid_extensions_usage_v2' of https://github.com/scara/moodle into MOODLE_37_STABLE 2019-06-10 14:11:07 +08:00
Matteo Scaramuccia 423c1d6c50 MDL-61038 setuplib: Fixed PECL UUID extension support 2019-06-08 22:35:37 +02:00
Amaia Anabitarte c4bee8e510 MDL-65336 core_message: New muted conversation generator and selectors 2019-06-07 10:41:08 +02:00
Amaia Anabitarte 023ea98fc1 MDL-65336 core_message: Behat tests for mute/unmute conversations 2019-06-07 10:41:08 +02:00
Peter f1e0128a43 MDL-65469 mod_forum: Use the formchange checker initializer 2019-06-07 08:49:10 +08:00
Peter 167b85e60c MDL-65469 core: Expose formchecker to initialize current form state 2019-06-07 08:49:10 +08:00
AMOS bot 4b6e850e68 Automatically generated installer lang files 2019-06-07 00:09:47 +00:00
Kristian Ringer e48dd422f9 MDL-65183 block_timeline: escape newline characters 2019-06-07 09:36:24 +10:00
Eloy Lafuente (stronk7) dc8b92e0b2 MDL-65817 behat: switch to forked repo towards php73 compatibility
It seems that https://github.com/instaclick/php-webdriver/pull/91
is being ignored (in fact the repository itself doesn't show much
activity). So we have decided to fork it and apply any fix able
to keep our (non-marionette) runs working.

Hopefully, soon, the new W3C drivers will be supported by our
behat->mink stack... and we'll be able to move to it (from current
JSonwire drivers). So all this will be hostory.
2019-06-06 19:50:44 +02:00
David Monllaó 840d6ba543 MDL-65829 analytics: Accept enrol start time after analysis time 2019-06-06 19:05:51 +02:00
Eloy Lafuente (stronk7) 078699a1a5 weekly release 3.7+ 2019-06-06 16:46:52 +02:00
Eloy Lafuente (stronk7) c0266bdaf6 Merge branch 'install_37_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_37_STABLE 2019-06-06 16:46:50 +02:00
Damyon Wiese 46f7f67db1 MDL-55821 assign: Show assign grade
When marking workflow is enabled and the grade is not released yet,
it would be helpful to show the assignment grade in the grading form.
2019-06-06 14:27:01 +08:00
Damyon Wiese e8b50bbe34 MDL-64383 user: Make username required
Username is a required field, we should indicate this even if it has a help icon.
2019-06-06 13:28:29 +08:00
AMOS bot 33113481b5 Automatically generated installer lang files 2019-06-06 00:08:17 +00:00
Jun Pataleta 8f11f7741a Merge branch 'MDL-65787-37' of git://github.com/sarjona/moodle into MOODLE_37_STABLE 2019-06-05 17:24:18 +08:00
Sara Arjona b31ec4dfbf MDL-65787 badges: fix warning count() with PHP 7.2 2019-06-05 11:03:11 +02:00
Sara Arjona 2b63da7763 Merge branch 'MDL-65777-37' of git://github.com/mihailges/moodle into MOODLE_37_STABLE 2019-06-05 09:01:00 +02:00
Mihail Geshoski 24bc58278f MDL-65777 assignment: Respect user full name in downloaded submissions 2019-06-05 11:14:51 +08:00
Adrian Greeve b59f56c259 Merge branch 'MDL-65731_37' of https://github.com/timhunt/moodle into MOODLE_37_STABLE 2019-06-05 10:40:41 +08:00
AMOS bot 29e40f3c13 Automatically generated installer lang files 2019-06-05 00:08:19 +00:00
Eloy Lafuente (stronk7) d2707c2d28 Merge branch 'MDL-65689-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-06-04 23:32:20 +02:00
Eloy Lafuente (stronk7) 898befb275 Merge branch 'MDL-65578-37' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-06-04 23:30:36 +02:00
Eloy Lafuente (stronk7) 938267b43a Merge branch 'MDL-65576-37' of git://github.com/andrewnicols/moodle into MOODLE_37_STABLE 2019-06-04 21:40:00 +02:00
Eloy Lafuente (stronk7) f9f5f5ddc8 Merge branch 'm37_MDL-65686_Fix_Incorrect_Function_Call' of https://github.com/scara/moodle into MOODLE_37_STABLE 2019-06-04 20:04:55 +02:00
Simey Lameze ca66ad24c8 MDL-65703 calendar: do not add course param for site calendar 2019-06-04 19:37:35 +08:00
Andreas Grabs e1f4756dfb MDL-65703 core_calendar: fix user event type filtering logic 2019-06-04 19:37:34 +08:00
Mathew May 12e04336a0 MDL-65658 mod_forum: Update the group image titles 2019-06-04 11:50:37 +02:00
Jun Pataleta 266aa66267 Merge branch 'MDL-65696-MOODLE-37' of https://github.com/kristian-94/moodle into MOODLE_37_STABLE 2019-06-04 16:54:52 +08:00
Peter af098adec2 MDL-65779 mod_forum: Add privatereplies to the backup process 2019-06-04 12:21:15 +08:00
Andrew Nicols 202cfa2987 MDL-65656 analytics: Stop covering memory-intensive tests 2019-06-04 11:18:49 +08:00
Andrew Nicols bafa907941 MDL-65656 core: Update composer.json for new PHPUnit version 2019-06-04 11:18:49 +08:00
AMOS bot f5131809c8 Automatically generated installer lang files 2019-06-04 00:08:14 +00:00
Eloy Lafuente (stronk7) 37c30f2249 Merge branch 'MDL-63240-37' of https://github.com/Kathrin84/moodle into MOODLE_37_STABLE 2019-06-03 17:57:49 +02:00
Eloy Lafuente (stronk7) 110a3639c3 Merge branch 'MDL-65660-37' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-06-03 17:51:43 +02:00
Eloy Lafuente (stronk7) 7631b43d33 Merge branch 'MDL-65675-37' of git://github.com/andrewnicols/moodle into MOODLE_37_STABLE 2019-06-03 17:37:21 +02:00
Sara Arjona a51f9bd003 Merge branch 'MDL-65658' of git://github.com/Chocolate-lightning/moodle into MOODLE_37_STABLE 2019-06-03 12:33:28 +02:00
AMOS bot e998b14686 Automatically generated installer lang files 2019-06-03 00:08:17 +00:00
Kristian Ringer 5ed8d694ee MDL-65696 assign: Fix width of editpdf comments 2019-06-03 09:29:28 +10:00
Andrew Nicols f0782cc57b MDL-65578 forum: Hide action menu where no actions exist 2019-05-31 12:43:52 +08:00
Mathew May 33b74df149 MDL-65658 mod_forum: Group images links and titles groups
After a change in Moodle 3.6 some links & titles went missing.
Here I am adding them back & incresing the output image to 100x100px
2019-05-31 08:17:59 +08:00
Andrew Nicols 24e0b238d3 MDL-65576 behat: Reset Selenium driver between scorm scenarios 2019-05-31 08:09:00 +08:00
Peter dfddaa8ab6 MDL-65660 mod_forum: Allow guest users to view post buttons and links
For a self enrolment enabled course allow guest users to see the add
discussion and reply buttons
2019-05-31 07:07:13 +08:00
Eloy Lafuente (stronk7) 57b83a4f41 MDL-64794 tcpdf: Bump to tcpdf 6.2.26 2019-05-30 23:48:14 +02:00
Matteo Scaramuccia c9be953f05 MDL-65686 setuplib: Fix missing round brackets 2019-05-30 22:42:21 +02:00
Eloy Lafuente (stronk7) 794391b978 weekly release 3.7+ 2019-05-30 12:18:38 +02:00
Eloy Lafuente (stronk7) a7df733250 Merge branch 'install_37_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_37_STABLE 2019-05-30 12:18:36 +02:00
Tim Hunt 15d5c9a276 MDL-65731 quiz manual grading: fix ambiguous order by idnumber 2019-05-29 16:55:01 +01:00
Kathrin Osswald ec60f63f59 MDL-63240 theme Boost: Removed z-indexes for border styling in navdrawer 2019-05-29 17:52:36 +02:00
Marina Glancy a024a024e8 MDL-65726 core_roles: allow to create roles in install.php 2019-05-29 10:47:36 +02:00
Damyon Wiese 09304bcbff MDL-55592 lti: Forget the key and secret
When the "Enter your consumer key and shared secret" form is displayed,
it should not contain the same values it had the last time it was opened.
2019-05-29 13:59:38 +08:00
Adrian Greeve 53ef327e54 Merge branch 'MDL-57729-37' of git://github.com/mihailges/moodle into MOODLE_37_STABLE 2019-05-29 11:40:48 +08:00
Adrian Greeve 685a71917b Merge branch 'MDL-65726-37' of git://github.com/marinaglancy/moodle into MOODLE_37_STABLE 2019-05-29 11:07:42 +08:00
Mihail Geshoski 04288af505 MDL-57729 enrol_lti: Escape the property values of the xpath elements 2019-05-29 09:56:52 +08:00
Jake Dallimore 4ac6149680 Merge branch 'MDL-65326-MOODLE_37_STABLE' of https://github.com/dmitriim/moodle into MOODLE_37_STABLE 2019-05-29 09:29:44 +08:00
AMOS bot 308046f1bc Automatically generated installer lang files 2019-05-29 00:09:19 +00:00
Marina Glancy d6c2bf620c MDL-65726 role: do not fail unittest if plugins create their roles 2019-05-28 19:08:29 +02:00
Adrian Greeve 8869cf8cd9 Merge branch 'MDL-65705-37' of git://github.com/sarjona/moodle into MOODLE_37_STABLE 2019-05-28 16:28:50 +08:00
Sara Arjona b32974f12a MDL-65705 badges: fix issued date for external badges
The preg_match('~^[1-9][0-9]*$~', x) calls have been replaced to
is_numeric(x).
2019-05-28 09:26:00 +02:00
Ryan Wyllie 48b3e4e9b2 MDL-65657 message: reduce message poll timer for behat tests 2019-05-28 14:06:05 +08:00
Jun Pataleta 4996f75a3b Merge branch 'MDL-65697-37' of git://github.com/lameze/moodle into MOODLE_37_STABLE 2019-05-28 13:31:21 +08:00
Jake Dallimore bf2cecc440 Merge branch 'MDL-65692-37' of git://github.com/abgreeve/moodle into MOODLE_37_STABLE 2019-05-28 13:27:01 +08:00
Dmitrii Metelkin ec920f7901 MDL-65326 backup: check caps exist before assigning 2019-05-28 11:17:24 +10:00
Jun Pataleta 1131af4409 Merge branch 'MDL-65606-37' of https://github.com/Chocolate-lightning/moodle into MOODLE_37_STABLE 2019-05-27 16:27:30 +08:00
Jake Dallimore 46d8ffcefa Merge branch 'MDL-64330-37' of git://github.com/andrewnicols/moodle into MOODLE_37_STABLE 2019-05-27 15:22:57 +08:00
Andrew Nicols e2ea9b4c09 MDL-64330 course: Correct course test assumptions 2019-05-27 15:08:25 +08:00
Adrian Greeve 523efc4cd0 Merge branch 'MDL-65699-37' of http://github.com/dravek/moodle into MOODLE_37_STABLE 2019-05-27 14:53:36 +08:00
Andrew Nicols 3f853115e9 Merge branch 'MDL-65708-37' of git://github.com/Chocolate-lightning/moodle into MOODLE_37_STABLE 2019-05-27 14:46:09 +08:00
Mathew May 8a8a02c903 MDL-65606 mod_data: Add approvalstatusclass to template 2019-05-27 13:39:36 +08:00
Ryan Wyllie 946533c623 MDL-65657 message: revert polling timeout back to old algorithm 2019-05-27 13:29:02 +08:00
Mathew May 1f686d7fdf MDL-65708 output: Get a base config from Boost
As a part of the removal of bootstrapbase & clean
I removed some logic that got the base config of bootstrapbase,
this should of been changed to get boosts config.
See: e00f1c663c
2019-05-27 13:21:24 +08:00
Andrew Nicols 4e9e994da4 MDL-65675 forum: Remove duplicate Re in subjects 2019-05-27 12:22:16 +08:00
Adrian Greeve 3ce4575dc0 Merge branch 'MDL-64523-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-05-27 10:49:22 +08:00
David Monllaó 88dfc54de9 MDL-65680 analytics: Fix random failure on slow test environments 2019-05-27 09:42:41 +08:00
AMOS bot d855dcd29e Automatically generated installer lang files 2019-05-25 00:08:34 +00:00
AMOS bot 5d4bf77a16 Automatically generated installer lang files 2019-05-25 00:08:33 +00:00
Shamim Rezaie fc00a6641c MDL-65689 task: fix typo in help string 2019-05-25 05:19:40 +10:00
Shamim Rezaie cee73270c7 MDL-64523 core_access: replace .delegate with .on
As of jQuery 3.0, .delegate() has been deprecated. It was superseded by
the .on() method since jQuery 1.7, so its use was already discouraged.
2019-05-25 04:27:54 +10:00
Shamim Rezaie 245de290f7 MDL-64523 core_access: Fix js racing issue when overriding permissions 2019-05-25 04:27:53 +10:00
Shamim Rezaie 1a6160df3c MDL-64523 core_access: Improve the title of the delete role links 2019-05-25 04:27:53 +10:00
Sara Arjona 2a3df3d55c Merge branch 'MDL-65060-37' of git://github.com/aanabit/moodle into MOODLE_37_STABLE 2019-05-24 12:35:25 +02:00
David Matamoros c227fc61f1 MDL-65699 core_calendar: Check string exists for event types 2019-05-24 12:20:59 +02:00
Amaia Anabitarte 38a9ba9bcd MDL-65060 core_message: Delete messages behat test 2019-05-24 12:15:44 +02:00
Simey Lameze a4e309709d MDL-65697 qtype_missingtype: include missing class 2019-05-24 07:02:10 +08:00
Eloy Lafuente (stronk7) e39f3b7db2 weekly release 3.7+ 2019-05-23 20:35:31 +02:00
Amaia Anabitarte 2a64720ac8 MDL-65060 core_message: Group message data generator 2019-05-23 15:31:19 +02:00
Eloy Lafuente (stronk7) cf0307a529 Merge branch 'MDL-65695-37' of git://github.com/andrewnicols/moodle into MOODLE_37_STABLE 2019-05-23 10:50:36 +02:00
Eloy Lafuente (stronk7) c4758ab813 Merge branch 'MDL-65694-37-gradeclassnotfound' of git://github.com/mudrd8mz/moodle into MOODLE_37_STABLE 2019-05-23 10:33:26 +02:00
Andrew Nicols d2c91281db MDL-65695 forum: Bump digest time to next day if in past 2019-05-23 15:06:23 +08:00
Adrian Greeve 9a88b8ec35 MDL-65692 backup: Default settings set on install and upgrade.
Asynchronous backup settings are now filled out with the defaults
on installation and upgrade.
2019-05-23 14:54:19 +08:00
David Mudrák 7a2beab44e MDL-65694 grade: Fix missing gradelib library
In the be8f453b74 the gradelib loading was removed by mistake. So
the library may not be loaded and executing the task may end with
the exception - class 'grade_grade' not found.
2019-05-23 07:48:54 +02:00
Tim Hunt a586240cc0 MDL-55197 filter_multilang: handle 'en' as parent lang better 2019-05-23 11:58:58 +08:00
Tim Hunt d2680dbb27 MDL-55197 filter_multilang: move preg_callback fn into class 2019-05-23 11:58:58 +08:00
Andrew Nicols c5b884bd51 Merge branch 'MDL-59650-37' of git://github.com/lameze/moodle into MOODLE_37_STABLE 2019-05-23 10:29:00 +08:00
Adrian Greeve 5d5313537b Merge branch 'MDL-65549_37' of git://github.com/dmonllao/moodle into MOODLE_37_STABLE 2019-05-23 10:10:25 +08:00
Adrian Greeve 5e6bc1b0f3 Merge branch 'MDL-65634_37' of git://github.com/dmonllao/moodle into MOODLE_37_STABLE 2019-05-23 09:54:47 +08:00
Andrew Nicols 65d4f096db Merge branch 'MDL-65654-37' of https://github.com/danielneis/moodle into MOODLE_37_STABLE 2019-05-23 09:49:20 +08:00
Adrian Greeve cb69e26b15 Merge branch 'MDL-64530_37' of git://github.com/stronk7/moodle into MOODLE_37_STABLE 2019-05-23 09:23:01 +08:00
Simey Lameze f25a7d2ac7 MDL-59650 core_calendar: remove limit from calendar UI 2019-05-23 08:40:00 +08:00
Simey Lameze de760475cf MDL-59650 core_calendar: remove limit from event exporter 2019-05-23 08:40:00 +08:00
Amaia Anabitarte a3824e559b MDL-65060 core_message: Group_message_message_content selector 2019-05-22 18:56:27 +02:00
Ryan Wyllie 67b64f85e9 MDL-65060 core_message: add render buffer to conversations
Change the conversation logic to render using a buffer so that we can
immediately save state. The render patches are based on the state so
the UI will always reach eventual consistency with the state since the
patches are processed in order.
2019-05-22 18:56:27 +02:00
Sara Arjona ac11f60853 Merge branch 'MDL-65661-37' of git://github.com/peterRd/moodle into MOODLE_37_STABLE 2019-05-22 14:57:56 +02:00
Tim Hunt 09558248e8 MDL-65636 filter_multilang: add some basic unit tests
This commit includes suggestions from Jun Pataleta on how to improve the
unit tests.
2019-05-22 19:36:55 +08:00
Peter d186ba2f81 MDL-65661 block_myoverview: Truncate category name 2019-05-22 19:34:54 +08:00
Peter 7ee550a943 MDL-65661 core_course: Truncate long course names 2019-05-22 19:34:54 +08:00
David Monllaó e260354fc9 MDL-65067 tool_analytics: Limit update_end_date to format_weeks 2019-05-22 16:31:03 +08:00
Didier 'OdyX' Raboud cd9c54c93c MDL-65067 analytics: Strengthen format_weeks detection
The public function get_section_dates($section, $startdate = false) is
only defined in format_weeks, not in format_base.

As other formats can (and format_topcoll has) declare a different
get_section_dates public method, merely checking that it exists is not
sufficient to guarantee that it can be called with just a section object.

Check that the format either is, or is a subclass of format_weeks.
2019-05-22 16:30:52 +08:00
Paul Holden 2cd4e5f8dc MDL-64784 core: update tablelib tests for explicit sort direction. 2019-05-22 14:49:41 +08:00
Paul Holden 8978731b82 MDL-64784 core: consistent column sort direction in flexible_table. 2019-05-22 14:49:28 +08:00
Andrew Nicols 5c06a1935b Merge branch 'MDL-65590-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-05-22 13:52:34 +08:00
Jun Pataleta c04e89b086 Merge branch 'MDL-65591-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-05-22 11:06:39 +08:00
Andrew Nicols 4909257b07 Merge branch 'MDL-65630-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-05-22 09:42:38 +08:00
Daniel Neis Araujo 695675483f MDL-65654 tool_uploaduser: Fix undefined variable warning 2019-05-21 14:02:03 -03:00
David Monllaó c3217a6b0d MDL-65549 tool_analytics: Reduce the context name length in models_view 2019-05-21 17:29:23 +02:00
David Monllaó 21527bf096 MDL-65634 analytics: Discard late and early student enrolments 2019-05-21 17:24:17 +02:00
Sara Arjona 8178cf1bb9 Merge branch 'MDL-65605-37' of git://github.com/rezaies/moodle into MOODLE_37_STABLE 2019-05-21 13:47:39 +02:00
Jun Pataleta bc4f56abc3 Merge branch 'MDL-65274-37' of git://github.com/jleyva/moodle into MOODLE_37_STABLE 2019-05-21 18:49:25 +08:00
Víctor Déniz Falcón 0864ebc14c MDL-60407 report_insights: Fix redirect when action on last prediction
When an actions is taken on the last prediction, the predictions
list page is reloaded.
2019-05-21 18:45:42 +08:00
Adrian Greeve 31354cc381 Merge branch 'MDL-65572-37' of git://github.com/damyon/moodle into MOODLE_37_STABLE 2019-05-21 15:20:30 +08:00
Andrew Nicols 422a34a6f5 Merge branch 'MDL-65644_37' of git://github.com/stronk7/moodle into MOODLE_37_STABLE 2019-05-21 12:51:49 +08:00
Shamim Rezaie d16540aa88 MDL-65590 tool_customlang: Escape html on the standard text field 2019-05-21 14:21:04 +10:00
Adrian Greeve d3a76147e0 Merge branch 'MDL-65655-37-forumcroninactiveusers' of git://github.com/mudrd8mz/moodle into MOODLE_37_STABLE 2019-05-21 11:39:58 +08:00
Eloy Lafuente (stronk7) c48f2c90cc MDL-64530 travis: Enabble PHP 7.3 and redis cache
This commit performs a number of changes:

- Enables PHP 7.3, replacing PHP 7.2 (max/min approach).
- Enables back the redis service
- Configures redis cache store tests to be run.
- Disables redis session tests for PHP 7.2 and up (MDL-60978)
2019-05-21 01:28:23 +02:00
Eloy Lafuente (stronk7) 1f2cde345a MDL-65644 upgrade: add 3.7.0 separation line to all upgrade scripts 2019-05-20 19:36:01 +02:00
Shamim Rezaie 171a83f79b MDL-65591 tool_customlang: Re-adding the save buttons at the bottom 2019-05-21 02:21:24 +10:00
Juan Leyva a137762fec MDL-65274 mod_quiz: Do not return a translated string
We should be returning proper error codes and the translated string can be part of the debug information.
2019-05-20 15:55:18 +02:00
Shamim Rezaie b52ceb2972 MDL-65630 mod_quiz: Allow redo within an attempt with random questions 2019-05-20 23:50:21 +10:00
Shamim Rezaie 400239c7c5 MDL-65630 mod_quiz: Move logging in to the start of tests
The background is for set up, the scenario is for the test. Logging in
to start the test is the start of the test and the end of the background
itself.
2019-05-20 23:50:20 +10:00
Shamim Rezaie 159f904af5 MDL-65605 core_question: Fix the issue when get_draft_files returns nul 2019-05-20 23:49:13 +10:00
Shamim Rezaie a01edef5be MDL-65605 mod_lesson: Fix the issue when get_draft_files returns null 2019-05-20 23:49:13 +10:00
Damyon Wiese cfa7d2653c MDL-65572 messaging: Loginas upgrade check
When using login as, we also need to check if there are legacy messages that
need updating and set the user preference if required.
2019-05-20 09:15:13 +08:00
409 changed files with 5855 additions and 1834 deletions
+22 -22
View File
@@ -11,10 +11,12 @@ notifications:
language: php
dist: trusty
php:
# We only run the highest and lowest supported versions to reduce the load on travis-ci.org.
- 7.2
- 7.1
- 7.3
- 7.1.30 # Make this sticky because current default version (7.1.11) has a bug with redis-extension output (MDL-66062)
addons:
postgresql: "9.6"
@@ -23,10 +25,6 @@ addons:
- mysql-client-core-5.6
- mysql-client-5.6
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
# services:
# - redis-server
env:
# Although we want to run these jobs and see failures as quickly as possible, we also want to get the slowest job to
# start first so that the total run time is not too high.
@@ -35,9 +33,6 @@ env:
# CI Tests should be second-highest in priority as these only take <= 60 seconds to run under normal circumstances.
# Postgres is significantly is pretty reasonable in its run-time.
# Run unit tests on MySQL
- DB=mysqli TASK=PHPUNIT
# Run CI Tests without running PHPUnit.
- DB=none TASK=CITEST
@@ -54,22 +49,22 @@ matrix:
fast_finish: true
include:
# Run mysql only on 7.3 - it's just too slow
- php: 7.3
env: DB=mysqli TASK=PHPUNIT
# Run grunt/npm install on highest version ('node' is an alias for the latest node.js version.)
- php: 7.2
env: DB=none TASK=GRUNT NVM_VERSION='lts/carbon'
exclude:
# MySQL - it's just too slow.
# Exclude it on all versions except for 7.2
- env: DB=mysqli TASK=PHPUNIT
php: 7.1
cache:
directories:
- $HOME/.composer/cache
- $HOME/.npm
before_install:
# Avoid IPv6 default binding as service (causes redis not to start).
sudo service redis-server start --bind 127.0.0.1
install:
- >
if [ "$DB" = 'mysqli' ];
@@ -99,10 +94,8 @@ install:
echo 'auth.json' >> .git/info/exclude
fi
# Enable Redis.
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
# echo 'extension="redis.so"' > /tmp/redis.ini
# phpenv config-add /tmp/redis.ini
echo 'extension="redis.so"' > /tmp/redis.ini
phpenv config-add /tmp/redis.ini
# Install composer dependencies.
# We need --no-interaction in case we hit API limits for composer. This causes it to fall back to a standard clone.
@@ -173,12 +166,19 @@ before_script:
mkdir -p "$HOME"/roots/phpunit
# The phpunit dataroot and prefix..
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
# -e "/require_once/i \\define('TEST_SESSION_REDIS_HOST', '127.0.0.1');" \
sed -i \
-e "/require_once/i \\\$CFG->phpunit_dataroot = '\/home\/travis\/roots\/phpunit';" \
-e "/require_once/i \\\$CFG->phpunit_prefix = 'p_';" \
config.php ;
# Redis cache store tests
sed -i \
-e "/require_once/i \\define('TEST_CACHESTORE_REDIS_TESTSERVERS', '127.0.0.1');" \
config.php ;
# Redis session tests, but not for PHP 7.2 and up. See MDL-60978 for more info.
redissession="define('TEST_SESSION_REDIS_HOST', '127.0.0.1');"
sed -i \
-e "/require_once/i \\${redissession}" \
config.php ;
# Initialise PHPUnit for Moodle.
php admin/tool/phpunit/cli/init.php
+181
View File
@@ -2799,4 +2799,185 @@
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="3.8" requires="3.2">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="5.5.31" />
<VENDOR name="mysql" version="5.6" />
<VENDOR name="postgres" version="9.4" />
<VENDOR name="mssql" version="11.0" />
<VENDOR name="oracle" version="11.2" />
</DATABASE>
<PHP version="7.1.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="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</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="xmlrpc" level="optional">
<FEEDBACK>
<ON_CHECK message="xmlrpcrecommended" />
</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_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_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+2 -2
View File
@@ -96,7 +96,7 @@ class core_role_permissions_table extends core_role_capability_table_base {
"linkclass" => "preventlink", "adminurl" => $adminurl->out(), "icon" => "", "iconalt" => "");
if (isset($overridableroles[$id]) and ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability)))) {
$templatecontext['icon'] = 't/delete';
$templatecontext['iconalt'] = get_string('delete');
$templatecontext['iconalt'] = get_string('deletexrole', 'core_role', $name);
}
$neededroles[$id] = $renderer->render_from_template('core/permissionmanager_role', $templatecontext);
}
@@ -109,7 +109,7 @@ class core_role_permissions_table extends core_role_capability_table_base {
"icon" => "", "iconalt" => "");
if (isset($overridableroles[$id]) and prohibit_is_removable($id, $context, $capability->name)) {
$templatecontext['icon'] = 't/delete';
$templatecontext['iconalt'] = get_string('delete');
$templatecontext['iconalt'] = get_string('deletexrole', 'core_role', $name);
}
$forbiddenroles[$id] = $renderer->render_from_template('core/permissionmanager_role', $templatecontext);
}
+1 -1
View File
@@ -213,7 +213,7 @@ $arguments = array('contextid' => $contextid,
$PAGE->requires->strings_for_js(
array('roleprohibitinfo', 'roleprohibitheader', 'roleallowinfo', 'roleallowheader',
'confirmunassigntitle', 'confirmroleunprohibit', 'confirmroleprevent', 'confirmunassignyes',
'confirmunassignno'), 'core_role');
'confirmunassignno', 'deletexrole'), 'core_role');
$PAGE->requires->js_call_amd('core/permissionmanager', 'initialize', array($arguments));
$table = new core_role_permissions_table($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles);
echo $OUTPUT->box_start('generalbox capbox');
+22 -18
View File
@@ -459,27 +459,31 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$ADMIN->add('backups', $temp);
// Create a page for asynchronous backup and restore configuration and defaults.
if (!empty($CFG->enableasyncbackup)) { // Only add settings if async mode is enable at site level.
$temp = new admin_settingpage('asyncgeneralsettings', new lang_string('asyncgeneralsettings', 'backup'));
$temp = new admin_settingpage('asyncgeneralsettings', new lang_string('asyncgeneralsettings', 'backup'));
$temp->add(new admin_setting_configcheckbox(
'backup/backup_async_message_users',
new lang_string('asyncemailenable', 'backup'),
new lang_string('asyncemailenabledetail', 'backup'), 0));
$temp->add(new admin_setting_configcheckbox('enableasyncbackup', new lang_string('enableasyncbackup', 'backup'),
new lang_string('enableasyncbackup_help', 'backup'), 0, 1, 0));
$temp->add(new admin_setting_configtext(
'backup/backup_async_message_subject',
new lang_string('asyncmessagesubject', 'backup'),
new lang_string('asyncmessagesubjectdetail', 'backup'),
new lang_string('asyncmessagesubjectdefault', 'backup')));
$temp->add(new admin_setting_configcheckbox(
'backup/backup_async_message_users',
new lang_string('asyncemailenable', 'backup'),
new lang_string('asyncemailenabledetail', 'backup'), 0));
$temp->hide_if('backup/backup_async_message_users', 'enableasyncbackup');
$temp->add(new admin_setting_confightmleditor(
'backup/backup_async_message',
new lang_string('asyncmessagebody', 'backup'),
new lang_string('asyncmessagebodydetail', 'backup'),
new lang_string('asyncmessagebodydefault', 'backup')));
$temp->add(new admin_setting_configtext(
'backup/backup_async_message_subject',
new lang_string('asyncmessagesubject', 'backup'),
new lang_string('asyncmessagesubjectdetail', 'backup'),
new lang_string('asyncmessagesubjectdefault', 'backup')));
$temp->hide_if('backup/backup_async_message_subject', 'backup/backup_async_message_users');
$ADMIN->add('backups', $temp);
}
$temp->add(new admin_setting_confightmleditor(
'backup/backup_async_message',
new lang_string('asyncmessagebody', 'backup'),
new lang_string('asyncmessagebodydetail', 'backup'),
new lang_string('asyncmessagebodydefault', 'backup')));
$temp->hide_if('backup/backup_async_message', 'backup/backup_async_message_users');
$ADMIN->add('backups', $temp);
}
-3
View File
@@ -51,7 +51,4 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$optionalsubsystems->add(new admin_setting_configcheckbox('enablecoursepublishing',
new lang_string('enablecoursepublishing', 'hub'), new lang_string('enablecoursepublishing_help', 'hub'), 0));
$optionalsubsystems->add(new admin_setting_configcheckbox('enableasyncbackup', new lang_string('enableasyncbackup', 'backup'),
new lang_string('enableasyncbackup_help', 'backup'), 0, 1, 0));
}
@@ -181,7 +181,7 @@ class models_list implements \renderable, \templatable {
if ($contextid == SYSCONTEXTID) {
$contextname = get_string('allpredictions', 'tool_analytics');
} else {
$contextname = shorten_text($context->get_context_name(true, true), 90);
$contextname = shorten_text($context->get_context_name(false, true), 40);
}
$predictioncontexts[$contextid] = $contextname;
}
@@ -173,7 +173,8 @@ function tool_analytics_calculate_course_dates($course, $options) {
$formatoptions = $format->get_format_options();
// Change this for a course formats API level call in MDL-60702.
if (method_exists($format, 'update_end_date') && $formatoptions['automaticenddate']) {
if ((get_class($format) == 'format_weeks' || is_subclass_of($format, 'format_weeks')) &&
method_exists($format, 'update_end_date') && $formatoptions['automaticenddate']) {
// Special treatment for weeks-based formats with automatic end date.
if ($options['update']) {
+1 -1
View File
@@ -31,7 +31,7 @@ $string['errordataroot'] = '$CFG->behat_dataroot is not set or is invalid.';
$string['errorsetconfig'] = '$CFG->behat_dataroot, $CFG->behat_prefix and $CFG->behat_wwwroot need to be set in config.php.';
$string['erroruniqueconfig'] = '$CFG->behat_dataroot, $CFG->behat_prefix and $CFG->behat_wwwroot values need to be different than $CFG->dataroot, $CFG->prefix, $CFG->wwwroot, $CFG->phpunit_dataroot and $CFG->phpunit_prefix values.';
$string['fieldvalueargument'] = 'Field value arguments';
$string['fieldvalueargument_help'] = 'This argument should be completed by a field value. There are many field types, including simple ones like checkboxes, selects or textareas, or complex ones like date selectors. See the dev documentation <a href="http://docs.moodle.org/dev/Acceptance_testing" target="_blank">Acceptance_testing</a> for details of expected field values.';
$string['fieldvalueargument_help'] = 'This argument should be completed by a field value. There are many field types, including simple ones like checkboxes, selects or textareas, or complex ones like date selectors. See the dev documentation <a href="https://docs.moodle.org/dev/Acceptance_testing" target="_blank">Acceptance_testing</a> for details of expected field values.';
$string['giveninfo'] = 'Given. Processes to set up the environment';
$string['infoheading'] = 'Info';
$string['installinfo'] = 'Read {$a} for installation and tests execution info';
+3
View File
@@ -41,5 +41,8 @@ function xmldb_tool_customlang_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -113,14 +113,14 @@
<div class="d-md-none">
<strong>{{#str}}headingstandard, tool_customlang{{/str}}</strong>
</div>
{{{ master }}}
{{ master }}
<div class="info">
{{{ placeholderhelp }}}
{{{ outdatedhelp}}}
</div>
{{#showoriginalvsmaster}}
<div class="alert-secondary mt-3 mt-1">
{{{ original }}}
{{ original }}
</div>
{{/showoriginalvsmaster}}
</div>
@@ -146,5 +146,14 @@
</div>
{{/strings}}
</div>
<fieldset class="m-a-1 m-3">
<button type="submit" name="savecontinue" class="btn btn-secondary">
{{#str}}savecontinue, tool_customlang{{/str}}
</button>
<button type="submit" name="savecheckin" class="btn btn-secondary">
{{#str}}savecheckin, tool_customlang{{/str}}
</button>
</fieldset>
</form>
{{/hasstrings}}
+3
View File
@@ -316,5 +316,8 @@ function xmldb_tool_dataprivacy_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -45,5 +45,8 @@ function xmldb_tool_log_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -1
View File
@@ -24,7 +24,7 @@
$string['actlogshdr'] = 'Available log stores';
$string['configlogplugins'] = 'Please enable all required plugins and arrange them in appropriate order.';
$string['exportlog'] = 'Include logs when exporting.';
$string['exportlog'] = 'Include logs when exporting';
$string['exportlogdetail'] = 'Include logs that relate to the user when exporting.';
$string['logging'] = 'Logging';
$string['managelogging'] = 'Manage log stores';
@@ -46,5 +46,8 @@ function xmldb_logstore_database_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2019032800, 'logstore', 'database');
}
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -46,5 +46,8 @@ function xmldb_logstore_standard_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2019032800, 'logstore', 'standard');
}
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -42,5 +42,8 @@ function xmldb_tool_mobile_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2019021100, 'tool', 'mobile');
}
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -62,5 +62,8 @@ function xmldb_tool_monitor_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -63,5 +63,8 @@ function xmldb_tool_policy_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -28,7 +28,7 @@ $string['spamauto'] = 'Autodetect common spam patterns';
$string['spamcannotdelete'] = 'Cannot delete this user';
$string['spamcannotfinduser'] = 'No users matching your search';
$string['spamcleanerintro'] = '<p>This script allows you to search all user profiles for certain strings and then delete those accounts which are obviously created by spammers. You can search for multiple keywords using commas (e.g. casino, porn).</p>
<p>For further information, see the documentation <a href="http://docs.moodle.org/en/Reducing_spam_in_Moodle">Reducing spam in Moodle</a>.</p>';
<p>For further information, see the documentation <a href="https://docs.moodle.org/en/Reducing_spam_in_Moodle">Reducing spam in Moodle</a>.</p>';
$string['spamdeleteall'] = 'Delete all these user accounts';
$string['spamdeleteallconfirm'] = 'Are you sure you want to delete all these user accounts? You can not undo this.';
$string['spamdeleteconfirm'] = 'Are you sure you want to delete this entry? You can not undo this.';
+1 -1
View File
@@ -50,7 +50,7 @@ Options:
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/tool/task/cli/scheduled_task.php --execute=\\\\core\\\\task\\\\session_cleanup_task
\$sudo -u www-data /usr/bin/php admin/tool/task/cli/schedule_task.php --execute=\\\\core\\\\task\\\\session_cleanup_task
";
+9 -1
View File
@@ -703,10 +703,18 @@ class tool_uploadcourse_course {
$coursedata += $courseformat->validate_course_format_options($this->rawdata);
}
// Special case, 'numsections' is not a course format option any more but still should apply from defaults.
// Special case, 'numsections' is not a course format option any more but still should apply from the template course,
// if any, and otherwise from defaults.
if (!$exists || !array_key_exists('numsections', $coursedata)) {
if (isset($this->rawdata['numsections']) && is_numeric($this->rawdata['numsections'])) {
$coursedata['numsections'] = (int)$this->rawdata['numsections'];
} else if (isset($this->options['templatecourse'])) {
$numsections = tool_uploadcourse_helper::get_coursesection_count($this->options['templatecourse']);
if ($numsections != 0) {
$coursedata['numsections'] = $numsections;
} else {
$coursedata['numsections'] = get_config('moodlecourse', 'numsections');
}
} else {
$coursedata['numsections'] = get_config('moodlecourse', 'numsections');
}
@@ -286,6 +286,25 @@ class tool_uploadcourse_helper {
return $roles;
}
/**
* Helper to detect how many sections a course with a given shortname has.
*
* @param string $shortname shortname of a course to count sections from.
* @return integer count of sections.
*/
public static function get_coursesection_count($shortname) {
global $DB;
if (!empty($shortname) || is_numeric($shortname)) {
// Creating restore from an existing course.
$course = $DB->get_record('course', array('shortname' => $shortname));
}
if (!empty($course)) {
$courseformat = course_get_format($course);
return $courseformat->get_last_section_number();
}
return 0;
}
/**
* Get the role renaming data from the passed data.
*
+2
View File
@@ -360,6 +360,7 @@ function uu_allowed_roles() {
*/
function uu_allowed_roles_cache() {
$allowedroles = get_assignable_roles(context_course::instance(SITEID), ROLENAME_SHORT);
$rolecache = [];
foreach ($allowedroles as $rid=>$rname) {
$rolecache[$rid] = new stdClass();
$rolecache[$rid]->id = $rid;
@@ -379,6 +380,7 @@ function uu_allowed_roles_cache() {
*/
function uu_allowed_sysroles_cache() {
$allowedroles = get_assignable_roles(context_system::instance(), ROLENAME_SHORT);
$rolecache = [];
foreach ($allowedroles as $rid => $rname) {
$rolecache[$rid] = new stdClass();
$rolecache[$rid]->id = $rid;
+3
View File
@@ -61,5 +61,8 @@ function xmldb_tool_usertours_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2019030600, 'tool', 'usertours');
}
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -38,9 +38,6 @@ class load_xml_file extends XMLDBAction {
$this->can_subaction = ACTION_NONE;
//$this->can_subaction = ACTION_HAVE_SUBACTIONS;
// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
// Get needed strings
$this->loadStrings(array(
// 'key' => 'module',
@@ -169,7 +169,7 @@ class main_view extends XMLDBAction {
file_exists($key . '/install.xml') &&
is_readable($key . '/install.xml') &&
empty($dbdir->xml_loaded)) {
$b .= '<a href="index.php?action=load_xml_file&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['load'] . ']</a>';
$b .= '<a href="index.php?action=load_xml_file&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['load'] . ']</a>';
} else {
$b .= '[' . $this->str['load'] . ']';
}
@@ -239,7 +239,7 @@ class main_view extends XMLDBAction {
is_readable($key . '/install.xml') &&
!empty($dbdir->xml_loaded) &&
empty($dbdir->xml_changed)) {
$b .= '<a href="index.php?action=unload_xml_file&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['unload'] . ']</a>';
$b .= '<a href="index.php?action=unload_xml_file&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['unload'] . ']</a>';
} else {
$b .= '[' . $this->str['unload'] . ']';
}
@@ -35,9 +35,6 @@ class unload_xml_file extends XMLDBAction {
function init() {
parent::init();
// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
// Get needed strings
$this->loadStrings(array(
// 'key' => 'module',
+3 -3
View File
@@ -34,7 +34,7 @@ $string['confirmdeleteindex'] = 'Are you absolutely sure that you want to delete
$string['confirmdeletekey'] = 'Are you absolutely sure that you want to delete the key:';
$string['confirmdeletetable'] = 'Are you absolutely sure that you want to delete the table:';
$string['confirmdeletexmlfile'] = 'Are you absolutely sure that you want to delete the file:';
$string['confirmcheckbigints'] = 'This functionality will search for <a href="http://tracker.moodle.org/browse/MDL-11038">potential wrong integer fields</a> in your Moodle server, generating (but not executing!) automatically the needed SQL statements to have all the integers in your DB properly defined.
$string['confirmcheckbigints'] = 'This functionality will search for <a href="https://tracker.moodle.org/browse/MDL-11038">potential wrong integer fields</a> in your Moodle server, generating (but not executing!) automatically the needed SQL statements to have all the integers in your DB properly defined.
Once generated you can copy such statements and execute them safely with your favourite SQL interface (don\'t forget to backup your data before doing that).
@@ -60,7 +60,7 @@ Once generated you can copy such statements and execute them safely with your fa
It\'s highly recommended to be running the latest (+ version) available of your Moodle release before executing the search of missing indexes.
This functionality doesn\'t perform any action against the DB (just reads from it), so can be safely executed at any moment.';
$string['confirmcheckoraclesemantics'] = 'This functionality will search for <a href="http://tracker.moodle.org/browse/MDL-29322">Oracle varchar2 columns using BYTE semantics</a> in your Moodle server, generating (but not executing!) automatically the needed SQL statements to have all the columns converted to use CHAR semantics instead (better for cross-db compatibility and increased contents max. length).
$string['confirmcheckoraclesemantics'] = 'This functionality will search for <a href="https://tracker.moodle.org/browse/MDL-29322">Oracle varchar2 columns using BYTE semantics</a> in your Moodle server, generating (but not executing!) automatically the needed SQL statements to have all the columns converted to use CHAR semantics instead (better for cross-db compatibility and increased contents max. length).
Once generated you can copy such statements and execute them safely with your favourite SQL interface (don\'t forget to backup your data before doing that).
@@ -140,7 +140,7 @@ $string['incorrecttablename'] = 'Incorrect table name';
$string['key'] = 'Key';
$string['keynameempty'] = 'The key name cannot be empty';
$string['keys'] = 'Keys';
$string['listreservedwords'] = 'List of Reserved Words<br />(used to keep <a href="http://docs.moodle.org/en/XMLDB_reserved_words" target="_blank">XMLDB_reserved_words</a> updated)';
$string['listreservedwords'] = 'List of reserved words<br />(used to keep <a href="https://docs.moodle.org/en/XMLDB_reserved_words" target="_blank">XMLDB reserved words</a> updated)';
$string['load'] = 'Load';
$string['main_view'] = 'Main view';
$string['masterprimaryuniqueordernomatch'] = 'The fields in your foreign key must be listed in the same order as they are listed in the UNIQUE KEY on the referenced table.';
+2 -1
View File
@@ -313,7 +313,8 @@ class analysis {
}
try {
$indicators = $this->analyser->get_indicators();
// Instantiate empty indicators to ensure that no garbage is dragged from previous analyses.
$indicators = $this->analyser->instantiate_indicators();
foreach ($indicators as $key => $indicator) {
// The analyser attaches the main entities the sample depends on and are provided to the
// indicator to calculate the sample.
+12
View File
@@ -237,6 +237,18 @@ abstract class base {
return $this->indicators;
}
/**
* Instantiate the indicators.
*
* @return \core_analytics\local\indicator\base[]
*/
public function instantiate_indicators() {
foreach ($this->indicators as $key => $indicator) {
$this->indicators[$key] = call_user_func(array($indicator, 'instance'));
}
return $this->indicators;
}
/**
* Samples data this analyser provides.
*
@@ -836,7 +836,8 @@ abstract class community_of_inquiry_activity extends linear {
// When the course is using format weeks we use the week's end date.
$format = course_get_format($activity->get_modinfo()->get_course());
// We should change this in MDL-60702.
if (method_exists($format, 'get_section_dates')) {
if (get_class($format) == 'format_weeks' || is_subclass_of($format, 'format_weeks')
&& method_exists($format, 'get_section_dates')) {
$dates = $format->get_section_dates($section);
// We need to consider the +2 hours added by get_section_dates.
+3 -1
View File
@@ -130,8 +130,10 @@ abstract class base extends \core_analytics\calculable {
global $PAGE;
$predictionid = $prediction->get_prediction_data()->id;
$contextid = $prediction->get_prediction_data()->contextid;
$modelid = $prediction->get_prediction_data()->modelid;
$PAGE->requires->js_call_amd('report_insights/actions', 'init', array($predictionid));
$PAGE->requires->js_call_amd('report_insights/actions', 'init', array($predictionid, $contextid, $modelid));
$actions = array();
+2 -2
View File
@@ -65,7 +65,7 @@ class analytics_analysis_testcase extends advanced_testcase {
$this->assertEquals($afewsecsago, $firstanalyses[$modelid . '_' . $course1->id]);
$this->assertEquals($afewsecsago + 1, $firstanalyses[$modelid . '_' . $course2->id]);
// The cached elements gets refreshed.
// The cached elements get refreshed.
$this->insert_used($modelid, $course1->id, 'prediction', $earliest);
$firstanalyses = \core_analytics\analysis::fill_firstanalyses_cache($modelid, $course1->id);
$this->assertCount(1, $firstanalyses);
@@ -78,7 +78,7 @@ class analytics_analysis_testcase extends advanced_testcase {
// The generated ranges should start from the cached firstanalysis value, which is $earliest.
$ranges = $seconds->get_all_ranges();
$this->assertCount(7, $ranges);
$this->assertGreaterThanOrEqual(7, count($ranges));
$firstrange = reset($ranges);
$this->assertEquals($earliest, $firstrange['time']);
}
+2
View File
@@ -436,6 +436,7 @@ class core_analytics_prediction_testcase extends advanced_testcase {
/**
* Basic test to check that prediction processors work as expected.
*
* @coversNothing
* @dataProvider provider_ml_test_evaluation_configuration
* @param string $modelquality
* @param int $ncourses
@@ -486,6 +487,7 @@ class core_analytics_prediction_testcase extends advanced_testcase {
/**
* Tests the evaluation of already trained models.
*
* @coversNothing
* @dataProvider provider_ml_processors
* @param string $predictionsprocessorclass
* @return null
+3
View File
@@ -51,5 +51,8 @@ function xmldb_auth_cas_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -51,5 +51,8 @@ function xmldb_auth_db_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -51,5 +51,8 @@ function xmldb_auth_email_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -1
View File
@@ -24,7 +24,7 @@
$string['auth_emaildescription'] = '<p>Email-based self-registration enables a user to create their own account via a \'Create new account\' button on the login page. The user then receives an email containing a secure link to a page where they can confirm their account. Future logins just check the username and password against the stored values in the Moodle database.</p><p>Note: In addition to enabling the plugin, email-based self-registration must also be selected from the self registration drop-down menu on the \'Manage authentication\' page.</p>';
$string['auth_emailnoemail'] = 'Tried to send you an email but failed!';
$string['auth_emailrecaptcha'] = 'Adds a visual/audio confirmation form element to the sign-up page for email self-registering users. This protects your site against spammers and contributes to a worthwhile cause. See http://www.google.com/recaptcha for more details.';
$string['auth_emailrecaptcha'] = 'Adds a visual/audio confirmation form element to the sign-up page for email self-registering users. This protects your site against spammers and contributes to a worthwhile cause. See https://www.google.com/recaptcha for more details.';
$string['auth_emailrecaptcha_key'] = 'Enable reCAPTCHA element';
$string['auth_emailsettings'] = 'Settings';
$string['pluginname'] = 'Email-based self-registration';
+3
View File
@@ -69,5 +69,8 @@ function xmldb_auth_ldap_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -1
View File
@@ -94,7 +94,7 @@ $string['auth_ldap_usertypeundefined2'] = 'config.user_type not defined or funct
$string['auth_ldap_version'] = 'The version of the LDAP protocol your server is using.';
$string['auth_ldap_version_key'] = 'Version';
$string['auth_ntlmsso'] = 'NTLM SSO';
$string['auth_ntlmsso_enabled'] = 'Set to yes to attempt Single Sign On with the NTLM domain. <strong>Note:</strong> this requires additional setup on the webserver to work, see <a href="http://docs.moodle.org/en/NTLM_authentication">http://docs.moodle.org/en/NTLM_authentication</a>';
$string['auth_ntlmsso_enabled'] = 'Set to yes to attempt Single Sign On with the NTLM domain. Note that this requires additional setup on the server to work. For further details, see the documentation <a href="https://docs.moodle.org/en/NTLM_authentication">NTLM authentication</a>.';
$string['auth_ntlmsso_enabled_key'] = 'Enable';
$string['auth_ntlmsso_ie_fastpath'] = 'Set to enable the NTLM SSO fast path (bypasses certain steps if the client\'s browser is MS Internet Explorer).';
$string['auth_ntlmsso_ie_fastpath_key'] = 'MS IE fast path?';
+3
View File
@@ -51,5 +51,8 @@ function xmldb_auth_manual_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -51,5 +51,8 @@ function xmldb_auth_mnet_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -51,5 +51,8 @@ function xmldb_auth_none_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -47,5 +47,8 @@ function xmldb_auth_oauth2_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -51,5 +51,8 @@ function xmldb_auth_shibboleth_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+1 -1
View File
@@ -28,7 +28,7 @@ $string['auth_shib_auth_method_description'] = 'Provide a name for the Shibbolet
$string['auth_shib_auth_logo'] = 'Authentication method logo';
$string['auth_shib_auth_logo_description'] = 'Provide a logo for the Shibboleth authentication method that is familiar to your users. This could be the logo of your Shibboleth federation, e.g. <tt>SWITCHaai Login</tt> or <tt>InCommon Login</tt> or similar.';
$string['auth_shib_contact_administrator'] = 'In case you are not associated with the given organizations and you need access to a course on this server, please contact the <a href="mailto:{$a}">Moodle Administrator</a>.';
$string['auth_shibbolethdescription'] = 'Using this method users are created and authenticated using <a href="http://shibboleth.internet2.edu/">Shibboleth</a>.<br />Be sure to read the <a href="../auth/shibboleth/README.txt">README</a> for Shibboleth on how to set up your Moodle with Shibboleth';
$string['auth_shibbolethdescription'] = 'Using this method users are created and authenticated using Shibboleth. For set-up details, see the <a href="../auth/shibboleth/README.txt">Shibboleth README</a>.';
$string['auth_shibboleth_errormsg'] = 'Please select the organization you are member of!';
$string['auth_shibboleth_login'] = 'Shibboleth login';
$string['auth_shibboleth_login_long'] = 'Login to Moodle via Shibboleth';
+12 -3
View File
@@ -1980,6 +1980,12 @@ class restore_course_structure_step extends restore_structure_step {
}
$capability = 'mod/' . $modname . ':addinstance';
if (!get_capability_info($capability)) {
$this->log("Capability '{$capability}' was not found!", backup::LOG_WARNING);
continue;
}
foreach ($roleids as $roleid) {
assign_capability($capability, CAP_PREVENT, $roleid, $context);
}
@@ -2107,9 +2113,12 @@ class restore_ras_and_caps_structure_step extends restore_structure_step {
$newroleid = $this->get_mappingid('role', $data->roleid);
// If newroleid and context are valid assign it via API (it handles dupes and so on)
if ($newroleid && $this->task->get_contextid()) {
// TODO: assign_capability() needs one userid param to be able to specify our restore userid
// TODO: it seems that assign_capability() doesn't check for valid capabilities at all ???
assign_capability($data->capability, $data->permission, $newroleid, $this->task->get_contextid());
if (!get_capability_info($data->capability)) {
$this->log("Capability '{$data->capability}' was not found!", backup::LOG_WARNING);
} else {
// TODO: assign_capability() needs one userid param to be able to specify our restore userid.
assign_capability($data->capability, $data->permission, $newroleid, $this->task->get_contextid());
}
}
}
}
+10 -9
View File
@@ -79,24 +79,25 @@ class collections extends moodleform {
$hasgroups = false;
if (!empty($groups)) {
foreach ($groups as $group) {
// Assertions or badges.
$count = 0;
// Handle attributes based on backpack's supported version.
if ($sitebackpack->apiversion == OPEN_BADGES_V2) {
// OpenBadges v2 data attributes.
if (empty($group->published)) {
// Only public collections.
continue;
}
}
if (!empty($group->assertions)) {
// Get the number of badges associated with this collection from the assertions array returned.
$count = count($group->assertions);
}
if (!empty($group->badges)) {
$count = count($group->badges);
}
if (!empty($group->groupId)) {
} else {
// OpenBadges v1 data attributes.
$group->entityId = $group->groupId;
// Get the number of badges associated with this collection. In that case, the number is returned directly.
$count = $group->badges;
}
if (!$hasgroups) {
$mform->addElement('static', 'selectgroup', '', get_string('selectgroup_start', 'badges'));
}
+8 -6
View File
@@ -420,12 +420,14 @@ class core_badges_renderer extends plugin_renderer_base {
$output .= $this->output->heading(get_string('issuancedetails', 'badges'), 3);
$dl = array();
$issued['issuedOn'] = !preg_match( '~^[1-9][0-9]*$~', $issued['issuedOn'] ) ?
strtotime($issued['issuedOn']) : $issued['issuedOn'];
if (!is_numeric($issued['issuedOn'])) {
$issued['issuedOn'] = strtotime($issued['issuedOn']);
}
$dl[get_string('dateawarded', 'badges')] = userdate($issued['issuedOn']);
if (isset($issued['expires'])) {
$issued['expires'] = !preg_match( '~^[1-9][0-9]*$~', $issued['expires'] ) ?
strtotime($issued['expires']) : $issued['expires'];
if (!is_numeric($issued['expires'])) {
$issued['expires'] = strtotime($issued['expires']);
}
if ($issued['expires'] < $now) {
$dl[get_string('expirydate', 'badges')] = userdate($issued['expires']) . get_string('warnexpired', 'badges');
@@ -508,7 +510,7 @@ class core_badges_renderer extends plugin_renderer_base {
}
$output .= html_writer::empty_tag('img', array('src' => $issued->image, 'width' => '100'));
if (isset($assertion->expires)) {
$expiration = !strtotime($assertion->expires) ? s($assertion->expires) : strtotime($assertion->expires);
$expiration = is_numeric($assertion->expires) ? $assertion->expires : strtotime($assertion->expires);
if ($expiration < $today) {
$output .= $this->output->pix_icon('i/expired',
get_string('expireddate', 'badges', userdate($expiration)),
@@ -564,7 +566,7 @@ class core_badges_renderer extends plugin_renderer_base {
$dl = array();
if (isset($assertion->issued_on)) {
$issuedate = !strtotime($assertion->issued_on) ? s($assertion->issued_on) : strtotime($assertion->issued_on);
$issuedate = is_numeric($assertion->issued_on) ? $assertion->issued_on : strtotime($assertion->issued_on);
$dl[get_string('dateawarded', 'badges')] = userdate($issuedate);
}
if (isset($assertion->expires)) {
+3
View File
@@ -57,5 +57,8 @@ function xmldb_block_badges_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -57,5 +57,8 @@ function xmldb_block_calendar_month_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -57,5 +57,8 @@ function xmldb_block_calendar_upcoming_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -58,5 +58,8 @@ function xmldb_block_community_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -60,5 +60,8 @@ function xmldb_block_completionstatus_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -60,5 +60,8 @@ function xmldb_block_course_summary_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -45,5 +45,8 @@ function xmldb_block_html_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -55,7 +55,7 @@
<span class="sr-only">
{{#str}}aria:coursecategory, core_course{{/str}}
</span>
<span class="categoryname">
<span class="categoryname text-truncate">
{{{coursecategory}}}
</span>
{{/coursecategory}}
+3
View File
@@ -67,5 +67,8 @@ function xmldb_block_navigation_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -57,5 +57,8 @@ function xmldb_block_quiz_results_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -59,5 +59,8 @@ function xmldb_block_recent_activity_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -53,11 +53,13 @@ class helper {
return $recentitems;
}
// Determine sort sql clause.
$sort = 'timeaccess DESC';
$paramsql = array('userid' => $userid);
$records = $DB->get_records('block_recentlyaccesseditems', $paramsql, $sort);
$sql = "SELECT rai.*
FROM {block_recentlyaccesseditems} rai
JOIN {course} c ON c.id = rai.courseid
WHERE userid = :userid
ORDER BY rai.timeaccess DESC";
$records = $DB->get_records_sql($sql, $paramsql);
$order = 0;
// Get array of items by course. Use $order index to keep sql sorted results.
@@ -0,0 +1,59 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This file keeps track of upgrades to the recentlyaccesseditems block
*
* Sometimes, changes between versions involve alterations to database structures
* and other major things that may break installations.
*
* The upgrade function in this file will attempt to perform all the necessary
* actions to upgrade your older installation to the current version.
*
* If there's something it cannot do itself, it will tell you what you need to do.
*
* The commands in here will all be database-neutral, using the methods of
* database_manager class
*
* Please do not forget to use upgrade_set_timeout()
* before any action that may take longer time to finish.
*
* @package block_recentlyaccesseditems
* @copyright 2019 Peter Dias
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Upgrade the recentlyaccesseditems db table.
*
* @param $oldversion
* @return bool
*/
function xmldb_block_recentlyaccesseditems_upgrade($oldversion, $block) {
global $DB;
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
if ($oldversion < 2019052001) {
$sql = "courseid NOT IN (SELECT c.id from {course} c) OR cmid NOT IN (SELECT cm.id from {course_modules} cm)";
$DB->delete_records_select("block_recentlyaccesseditems", $sql);
upgrade_block_savepoint(true, 2019052001, 'recentlyaccesseditems', false);
}
return true;
}
+47
View File
@@ -0,0 +1,47 @@
<?php
// This file is part of Moodle - https://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* The interface library between the core and the subsystem.
*
* @package block_recentlyaccesseditems
* @copyright 2019 Peter Dias <peter@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Pre-delete course module hook to cleanup any records with references to the deleted module.
*
* @param stdClass $cm The deleted course module
*/
function block_recentlyaccesseditems_pre_course_module_delete($cm) {
global $DB;
$DB->delete_records('block_recentlyaccesseditems', ['cmid' => $cm->id]);
}
/**
* Pre-delete course hook to cleanup any records with references to the deleted course.
*
* @param stdClass $course The deleted course
*/
function block_recentlyaccesseditems_pre_course_delete($course) {
global $DB;
$DB->delete_records('block_recentlyaccesseditems', ['courseid' => $course->id]);
}
@@ -103,5 +103,15 @@ class block_recentlyaccesseditems_externallib_testcase extends externallib_advan
}
$this->assertTrue($record->timeaccess < $result[$key - 1]->timeaccess);
}
// Delete a course and confirm it's activities don't get returned.
delete_course($courses[0], false);
$result = \block_recentlyaccesseditems\external::get_recent_items();
$this->assertCount((count($forum) + count($chat)) - 2, $result);
// Delete a single course module should still return.
course_delete_module($forum[1]->cmid);
$result = \block_recentlyaccesseditems\external::get_recent_items();
$this->assertCount((count($forum) + count($chat)) - 3, $result);
}
}
@@ -0,0 +1,71 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Block recentlyaccesseditems helper tests.
*
* @package block_recentlyaccesseditems
* @copyright 2019 University of Nottingham
* @author Neill Magill <neill.magill@nottingham.ac.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use block_recentlyaccesseditems\helper;
defined('MOODLE_INTERNAL') || die();
/**
* Block Recently accessed helper class tests.
*
* @package block_recentlyaccesseditems
* @copyright 2019 University of Nottingham
* @author Neill Magill <neill.magill@nottingham.ac.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class block_recentlyaccesseditems_helper_testcase extends advanced_testcase {
/**
* Tests that the get recent items method can handle getting records when courses have been deleted.
*/
public function test_get_recent_items() {
$this->resetAfterTest();
$course = self::getDataGenerator()->create_course();
$coursetodelete = self::getDataGenerator()->create_course();
$user = self::getDataGenerator()->create_and_enrol($course, 'student');
self::getDataGenerator()->enrol_user($user->id, $coursetodelete->id, 'student');
// Add an activity to each course.
$forum = self::getDataGenerator()->create_module('forum', ['course' => $course]);
$glossary = self::getDataGenerator()->create_module('glossary', ['course' => $coursetodelete]);
self::setUser($user);
// Get the user to visit the activities.
$event1params = ['context' => context_module::instance($forum->cmid), 'objectid' => $forum->id];
$event1 = \mod_forum\event\course_module_viewed::create($event1params);
$event1->trigger();
$event2params = ['context' => context_module::instance($glossary->cmid), 'objectid' => $glossary->id];
$event2 = \mod_glossary\event\course_module_viewed::create($event2params);
$event2->trigger();
$recent1 = helper::get_recent_items();
self::assertCount(2, $recent1);
$recentlimited = helper::get_recent_items(1);
self::assertCount(1, $recentlimited);
delete_course($coursetodelete, false);
// There should be no errors if a course has been deleted.
$recent2 = helper::get_recent_items();
self::assertCount(1, $recent2);
}
}
@@ -207,6 +207,60 @@ class block_recentlyaccesseditems_privacy_testcase extends \core_privacy\tests\p
// Confirm student's data is exported.
$writer = \core_privacy\local\request\writer::with_context($studentcontext);
$this->assertTrue($writer->has_any_data());
delete_course($course, false);
$sc = context_user::instance($student->id);
$approvedlist = new approved_contextlist($student, $component, [$sc->id]);
provider::export_user_data($approvedlist);
$writer = \core_privacy\local\request\writer::with_context($sc);
$this->assertTrue($writer->has_any_data());
}
/**
* Test exporting data for an approved contextlist with a deleted course
*/
public function test_export_user_data_with_deleted_course() {
global $DB;
$this->resetAfterTest();
$generator = $this->getDataGenerator();
$component = 'block_recentlyaccesseditems';
$student = $generator->create_user();
$studentcontext = context_user::instance($student->id);
// Enrol user in course and add course items.
$course = $generator->create_course();
$generator->enrol_user($student->id, $course->id, 'student');
$forum = $generator->create_module('forum', ['course' => $course]);
$chat = $generator->create_module('chat', ['course' => $course]);
// Generate some recent activity.
$this->setUser($student);
$event = \mod_forum\event\course_module_viewed::create(['context' => context_module::instance($forum->cmid),
'objectid' => $forum->id]);
$event->trigger();
$event = \mod_chat\event\course_module_viewed::create(['context' => context_module::instance($chat->cmid),
'objectid' => $chat->id]);
$event->trigger();
// Confirm data is present.
$params = [
'courseid' => $course->id,
'userid' => $student->id,
];
$result = $DB->count_records('block_recentlyaccesseditems', $params);
$this->assertEquals(2, $result);
delete_course($course, false);
// Export data for student.
$approvedlist = new approved_contextlist($student, $component, [$studentcontext->id]);
provider::export_user_data($approvedlist);
// Confirm student's data is exported.
$writer = \core_privacy\local\request\writer::with_context($studentcontext);
$this->assertFalse($writer->has_any_data());
}
/**
+1 -1
View File
@@ -22,6 +22,6 @@
*/
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2019052000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->version = 2019052001; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2019051100; // Requires this Moodle version.
$plugin->component = 'block_recentlyaccesseditems'; // Full name of the plugin (used for diagnostics).
+3
View File
@@ -45,5 +45,8 @@ function xmldb_block_rss_client_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -43,7 +43,7 @@ $string['editfeeds'] = 'Edit, subscribe or unsubscribe from RSS/Atom news feeds'
$string['editnewsfeeds'] = 'Edit news feeds';
$string['editrssblock'] = 'Edit RSS headline block';
$string['enableautodiscovery'] = 'Enable auto-discovery of feeds?';
$string['enableautodiscovery_help'] = 'If enabled, feeds on web pages are found automatically. For example, if http://docs.moodle.org is entered, then http://docs.moodle.org/en/index.php?title=Special:RecentChanges&feed=rss would be found.';
$string['enableautodiscovery_help'] = 'If enabled, feeds on web pages are found automatically. For example, if https://docs.moodle.org is entered, then https://docs.moodle.org/en/index.php?title=Special:RecentChanges&feed=rss would be found.';
$string['failedfeed'] = 'Feed failed to download - will retry after {$a}';
$string['failedfeeds'] = 'One or more RSS feeds have failed';
$string['feed'] = 'Feed';
+3
View File
@@ -61,5 +61,8 @@ function xmldb_block_section_links_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -60,5 +60,8 @@ function xmldb_block_selfcompletion_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -67,5 +67,8 @@ function xmldb_block_settings_upgrade($oldversion, $block) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -50,13 +50,16 @@
</div>
<div class="w-100 event-name-container text-truncate line-height-3">
<a href="{{url}}"
title="{{name}}"
aria-label='{{#str}} ariaeventlistitem, block_timeline, { "name": "{{name}}", "course": "{{course.fullnamedisplay}}", "date": "{{#userdate}} {{timesort}}, {{#str}} strftimedatetime, core_langconfig {{/str}} {{/userdate}}" } {{/str}}'
><h6 class="event-name text-truncate mb-0">{{{name}}}</h6></a>
<small class="text-muted text-truncate mb-0">{{{course.fullnamedisplay}}}</small>
title={{#quote}}{{{name}}}{{/quote}}
aria-label='{{#str}} ariaeventlistitem, block_timeline, { "name": {{#quote}}{{{name}}}{{/quote}}, "course": {{#quote}}{{{course.fullnamedisplay}}}{{/quote}}, "date": "{{#userdate}} {{timesort}}, {{#str}} strftimedatetime, core_langconfig {{/str}} {{/userdate}}" } {{/str}}'
><h6 class="event-name text-truncate mb-0">{{#quote}}{{{name}}}{{/quote}}</h6></a>
<small class="text-muted text-truncate mb-0">{{#quote}}{{{course.fullnamedisplay}}}{{/quote}}</small>
{{#action.actionable}}
<h6 class="mb-0 pt-2">
<a href="{{{action.url}}}" aria-label="{{{action.name}}}" title="{{{action.name}}}" class="list-group-item-action">{{{action.name}}}</a>
{{#action.showitemcount}}
<span class="badge badge-secondary">{{action.itemcount}}</span>
{{/action.showitemcount}}
</h6>
{{/action.actionable}}
</div>
+3 -1
View File
@@ -275,7 +275,9 @@ class event_exporter_base extends exporter {
}
$timesort = $event->get_times()->get_sort_time()->getTimestamp();
$iconexporter = new event_icon_exporter($event, ['context' => $context]);
$values['normalisedeventtypetext'] = get_string('type' . $values['normalisedeventtype'], 'calendar');
$identifier = 'type' . $values['normalisedeventtype'];
$stringexists = get_string_manager()->string_exists($identifier, 'calendar');
$values['normalisedeventtypetext'] = $stringexists ? get_string($identifier, 'calendar') : '';
$values['icon'] = $iconexporter->export($output);
-2
View File
@@ -100,8 +100,6 @@ class footer_options_exporter extends exporter {
$params['course'] = $this->calendar->course->id;
} else if (null !== $this->calendar->categoryid && $this->calendar->categoryid > 0) {
$params['category'] = $this->calendar->categoryid;
} else {
$params['course'] = SITEID;
}
return $params;
@@ -100,9 +100,6 @@ class event_vault implements event_vault_interface {
$ignorehidden = true,
callable $filter = null
) {
if ($limitnum < 1 || $limitnum > 200) {
throw new limit_invalid_parameter_exception("Limit must be between 1 and 200 (inclusive)");
}
$fromquery = function($field, $timefrom, $lastseenmethod, $afterevent, $withduration) {
if (!$timefrom) {
@@ -186,7 +183,11 @@ class event_vault implements event_vault_interface {
}
}
$offset += $limitnum;
if (!$limitnum) {
break;
} else {
$offset += $limitnum;
}
}
return $events;
@@ -98,7 +98,7 @@ trait eventtype {
$mform->hideIf('categoryid', 'eventtype', 'noteq', 'category');
}
$showall = $CFG->calendar_adminseesall && !has_capability('moodle/calendar:manageentries', \context_system::instance());
$showall = is_siteadmin() && !empty($CFG->calendar_adminseesall);
if (!empty($eventtypes['course'])) {
$mform->addElement('course', 'courseid', get_string('course'), ['limittoenrolled' => !$showall]);
$mform->hideIf('courseid', 'eventtype', 'noteq', 'course');
+2 -2
View File
@@ -186,9 +186,9 @@ if(!empty($what) && !empty($time)) {
die();
}
}
$limitnum = 0;
$events = calendar_get_legacy_events($timestart, $timeend, $users, $groups, array_keys($paramcourses), false, true,
$paramcategory);
$paramcategory, $limitnum);
$ical = new iCalendar;
$ical->add_property('method', 'PUBLISH');
+5
View File
@@ -870,6 +870,11 @@ class core_calendar_external extends external_api {
self::validate_context($context);
parse_str($params['formdata'], $data);
if (WS_SERVER) {
// Request via WS, ignore sesskey checks in form library.
$USER->ignoresesskey = true;
}
$eventtype = isset($data['eventtype']) ? $data['eventtype'] : null;
$coursekey = ($eventtype == 'group') ? 'groupcourseid' : 'courseid';
$courseid = (!empty($data[$coursekey])) ? $data[$coursekey] : null;
+7 -5
View File
@@ -3237,10 +3237,12 @@ function core_calendar_user_preferences() {
* or events in progress/already started selected as well
* @param boolean $ignorehidden whether to select only visible events or all events
* @param array $categories array of category ids and/or objects.
* @param int $limitnum Number of events to fetch or zero to fetch all.
*
* @return array $events of selected events or an empty array if there aren't any (or there was an error)
*/
function calendar_get_legacy_events($tstart, $tend, $users, $groups, $courses,
$withduration = true, $ignorehidden = true, $categories = []) {
$withduration = true, $ignorehidden = true, $categories = [], $limitnum = 0) {
// Normalise the users, groups and courses parameters so that they are compliant with \core_calendar\local\api::get_events().
// Existing functions that were using the old calendar_get_events() were passing a mixture of array, int, boolean for these
// parameters, but with the new API method, only null and arrays are accepted.
@@ -3277,7 +3279,7 @@ function calendar_get_legacy_events($tstart, $tend, $users, $groups, $courses,
null,
null,
null,
40,
$limitnum,
null,
$userparam,
$groupparam,
@@ -3314,7 +3316,7 @@ function calendar_get_view(\calendar_information $calendar, $view, $includenavig
$calendardate = $type->timestamp_to_date_array($calendar->time);
$date = new \DateTime('now', core_date::get_user_timezone_object(99));
$eventlimit = 200;
$eventlimit = 0;
if ($view === 'day') {
$tstart = $type->convert_to_timestamp($calendardate['year'], $calendardate['mon'], $calendardate['mday']);
@@ -3500,7 +3502,7 @@ function calendar_output_fragment_event_form($args) {
$eventtypes = calendar_get_allowed_event_types($courseid);
// If the user is on course context and is allowed to add course events set the event type default to course.
if ($courseid != SITEID && !empty($eventtypes['course'])) {
if (!empty($courseid) && !empty($eventtypes['course'])) {
$data['eventtype'] = 'course';
$data['courseid'] = $courseid;
$data['groupcourseid'] = $courseid;
@@ -3686,7 +3688,7 @@ function calendar_get_allowed_event_types(int $courseid = null) {
$types['user'] = has_capability('moodle/calendar:manageownentries', $context);
if (has_capability('moodle/calendar:manageentries', $context) || !empty($CFG->calendar_adminseesall)) {
if (has_capability('moodle/calendar:manageentries', $context)) {
$types['course'] = true;
$types['group'] = (!empty($groups) && has_capability('moodle/site:accessallgroups', $context))
+4
View File
@@ -129,6 +129,10 @@ $params = [];
$usedefaultfilters = true;
if (!empty($courseid) && $courseid == SITEID && !empty($types['site'])) {
$searches[] = "(eventtype = 'site')";
$usedefaultfilters = false;
}
if (!empty($types['user'])) {
$searches[] = "(eventtype = 'user' AND userid = :userid)";
$params['userid'] = $USER->id;
$usedefaultfilters = false;
+6 -4
View File
@@ -59,10 +59,12 @@
<div class="col-xs-1">{{#pix}} i/calendareventtime, core, {{#str}} when, core_calendar {{/str}} {{/pix}}</div>
<div class="col-xs-11">{{{formattedtime}}}</div>
</div>
<div class="row mt-1">
<div class="col-xs-1">{{#pix}} i/calendar, core, {{#str}} eventtype, core_calendar {{/str}} {{/pix}}</div>
<div class="col-xs-11">{{normalisedeventtypetext}}</div>
</div>
{{#normalisedeventtypetext}}
<div class="row mt-1">
<div class="col-xs-1">{{#pix}} i/calendar, core, {{#str}} eventtype, core_calendar {{/str}} {{/pix}}</div>
<div class="col-xs-11">{{normalisedeventtypetext}}</div>
</div>
{{/normalisedeventtypetext}}
{{#description}}
<div class="row mt-1">
<div class="col-xs-1">{{#pix}} i/calendareventdescription, core, {{#str}} description {{/str}} {{/pix}}</div>
+12
View File
@@ -124,4 +124,16 @@ class behat_calendar extends behat_base {
$this->getSession()->visit($this->locate_path('/calendar/view.php?view=month&course=1&time='.$time));
}
/**
* Navigate to site calendar.
*
* @Given /^I am viewing site calendar$/
* @throws coding_exception
* @return void
*/
public function i_am_viewing_site_calendar() {
$url = new moodle_url('/calendar/view.php', ['view' => 'month']);
$this->getSession()->visit($this->locate_path($url->out_as_local_url(false)));
}
}
+61
View File
@@ -14,6 +14,8 @@ Feature: Perform basic calendar functionality
And the following "courses" exist:
| fullname | shortname | format |
| Course 1 | C1 | topics |
| Course 2 | C2 | topics |
| Course 3 | C3 | topics |
And the following "course enrolments" exist:
| user | course | role |
| student1 | C1 | student |
@@ -177,3 +179,62 @@ Feature: Perform basic calendar functionality
And I set the field "Type of event" to "Course"
When I click on "Save" "button"
And I should see "Select a course" in the "Course" "form_row"
@javascript
Scenario: Default event type selection in the event form
Given I log in as "teacher1"
When I am viewing site calendar
And I click on "New event" "button"
Then the field "Type of event" matches value "User"
And I am on "Course 1" course homepage
And I follow "This month"
When I click on "New event" "button"
Then the field "Type of event" matches value "Course"
@javascript
Scenario: Admin can only see all courses if calendar_adminseesall setting is enabled.
Given I log in as "admin"
And I am on "Course 1" course homepage
And I enrol "admin" user as "Teacher"
And I am viewing site calendar
And I click on "New event" "button"
And I set the field "Type of event" to "Course"
When I open the autocomplete suggestions list
Then I should see "Course 1" in the ".form-autocomplete-suggestions" "css_element"
And I should not see "Course 2" in the ".form-autocomplete-suggestions" "css_element"
And I should not see "Course 3" in the ".form-autocomplete-suggestions" "css_element"
And I click on "Close" "button"
And I am on site homepage
And I navigate to "Appearance > Calendar" in site administration
And I set the field "Admins see all" to "1"
And I press "Save changes"
And I am viewing site calendar
And I click on "New event" "button"
And I set the field "Type of event" to "Course"
When I open the autocomplete suggestions list
Then I should see "Course 1" in the ".form-autocomplete-suggestions" "css_element"
And I should see "Course 2" in the ".form-autocomplete-suggestions" "css_element"
And I should see "Course 3" in the ".form-autocomplete-suggestions" "css_element"
@javascript
Scenario: Students can only see user event type by default.
Given I log in as "student1"
And I am viewing site calendar
When I click on "New event" "button"
Then I should see "User" in the "div#fitem_id_staticeventtype" "css_element"
And I am on "Course 1" course homepage
And I follow "This month"
When I click on "New event" "button"
Then I should see "User" in the "div#fitem_id_staticeventtype" "css_element"
And I click on "Close" "button"
And I log out
Given I log in as "admin"
And I navigate to "Appearance > Calendar" in site administration
And I set the field "Admins see all" to "1"
And I press "Save changes"
And I log out
Given I log in as "student1"
And I am on "Course 1" course homepage
And I follow "This month"
When I click on "New event" "button"
Then I should see "User" in the "div#fitem_id_staticeventtype" "css_element"
+8 -1
View File
@@ -4,10 +4,17 @@
"description": "Moodle - the world's open source learning platform",
"type": "project",
"homepage": "https://moodle.org",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/moodlehq/php-webdriver.git"
}
],
"require-dev": {
"phpunit/phpunit": "7.5.*",
"phpunit/dbunit": "4.0.*",
"moodlehq/behat-extension": "3.37.0",
"mikey179/vfsstream": "^1.6"
"mikey179/vfsstream": "^1.6",
"instaclick/php-webdriver": "dev-local as 1.x-dev"
}
}
Generated
+59 -42
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "3517a4473544055cd8523bb076cad8f6",
"content-hash": "6a672c1cc2c9d005b5eab7c22af1ac49",
"packages": [],
"packages-dev": [
{
@@ -808,16 +808,16 @@
},
{
"name": "instaclick/php-webdriver",
"version": "1.4.5",
"version": "dev-local",
"source": {
"type": "git",
"url": "https://github.com/instaclick/php-webdriver.git",
"reference": "6fa959452e774dcaed543faad3a9d1a37d803327"
"url": "https://github.com/moodlehq/php-webdriver.git",
"reference": "e311e55bf2c4746db9df72707f3cf1a731ad98aa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/6fa959452e774dcaed543faad3a9d1a37d803327",
"reference": "6fa959452e774dcaed543faad3a9d1a37d803327",
"url": "https://api.github.com/repos/moodlehq/php-webdriver/zipball/e311e55bf2c4746db9df72707f3cf1a731ad98aa",
"reference": "e311e55bf2c4746db9df72707f3cf1a731ad98aa",
"shasum": ""
},
"require": {
@@ -839,7 +839,6 @@
"WebDriver": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
@@ -863,7 +862,10 @@
"webdriver",
"webtest"
],
"time": "2017-06-30T04:02:48+00:00"
"support": {
"source": "https://github.com/moodlehq/php-webdriver/tree/local"
},
"time": "2019-06-03T22:55:37+00:00"
},
{
"name": "mikey179/vfsStream",
@@ -1633,16 +1635,16 @@
},
{
"name": "phpunit/phpunit",
"version": "7.5.9",
"version": "7.5.12",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "134669cf0eeac3f79bc7f0c793efbc158bffc160"
"reference": "9ba59817745b0fe0c1a5a3032dfd4a6d2994ad1c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/134669cf0eeac3f79bc7f0c793efbc158bffc160",
"reference": "134669cf0eeac3f79bc7f0c793efbc158bffc160",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9ba59817745b0fe0c1a5a3032dfd4a6d2994ad1c",
"reference": "9ba59817745b0fe0c1a5a3032dfd4a6d2994ad1c",
"shasum": ""
},
"require": {
@@ -1713,7 +1715,7 @@
"testing",
"xunit"
],
"time": "2019-04-19T15:50:46+00:00"
"time": "2019-05-28T11:59:40+00:00"
},
{
"name": "psr/container",
@@ -2469,16 +2471,16 @@
},
{
"name": "symfony/browser-kit",
"version": "v4.2.8",
"version": "v4.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
"reference": "c09c18cca96d7067152f78956faf55346c338283"
"reference": "3fa7d8cbd2e5006038a09b8ef93f3859a89b627e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/c09c18cca96d7067152f78956faf55346c338283",
"reference": "c09c18cca96d7067152f78956faf55346c338283",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/3fa7d8cbd2e5006038a09b8ef93f3859a89b627e",
"reference": "3fa7d8cbd2e5006038a09b8ef93f3859a89b627e",
"shasum": ""
},
"require": {
@@ -2487,6 +2489,8 @@
},
"require-dev": {
"symfony/css-selector": "~3.4|~4.0",
"symfony/http-client": "^4.3",
"symfony/mime": "^4.3",
"symfony/process": "~3.4|~4.0"
},
"suggest": {
@@ -2495,7 +2499,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.2-dev"
"dev-master": "4.3-dev"
}
},
"autoload": {
@@ -2522,11 +2526,11 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
"time": "2019-04-07T09:56:43+00:00"
"time": "2019-04-15T20:15:25+00:00"
},
{
"name": "symfony/class-loader",
"version": "v3.4.27",
"version": "v3.4.28",
"source": {
"type": "git",
"url": "https://github.com/symfony/class-loader.git",
@@ -2582,7 +2586,7 @@
},
{
"name": "symfony/config",
"version": "v3.4.27",
"version": "v3.4.28",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
@@ -2714,7 +2718,7 @@
},
{
"name": "symfony/css-selector",
"version": "v3.4.27",
"version": "v3.4.28",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
@@ -2767,16 +2771,16 @@
},
{
"name": "symfony/debug",
"version": "v3.4.27",
"version": "v3.4.28",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "681afbb26488903c5ac15e63734f1d8ac430c9b9"
"reference": "671fc55bd14800668b1d0a3708c3714940e30a8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/681afbb26488903c5ac15e63734f1d8ac430c9b9",
"reference": "681afbb26488903c5ac15e63734f1d8ac430c9b9",
"url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c",
"reference": "671fc55bd14800668b1d0a3708c3714940e30a8c",
"shasum": ""
},
"require": {
@@ -2819,7 +2823,7 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2019-04-11T09:48:14+00:00"
"time": "2019-05-18T13:32:47+00:00"
},
{
"name": "symfony/dependency-injection",
@@ -2893,16 +2897,16 @@
},
{
"name": "symfony/dom-crawler",
"version": "v4.2.8",
"version": "v4.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb"
"reference": "28edb1d371640654fbfb9df53d70fa03fdf69fb6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/53c97769814c80a84a8403efcf3ae7ae966d53bb",
"reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/28edb1d371640654fbfb9df53d70fa03fdf69fb6",
"reference": "28edb1d371640654fbfb9df53d70fa03fdf69fb6",
"shasum": ""
},
"require": {
@@ -2910,7 +2914,11 @@
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
"masterminds/html5": "<2.6"
},
"require-dev": {
"masterminds/html5": "^2.6",
"symfony/css-selector": "~3.4|~4.0"
},
"suggest": {
@@ -2919,7 +2927,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.2-dev"
"dev-master": "4.3-dev"
}
},
"autoload": {
@@ -2946,11 +2954,11 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
"time": "2019-02-23T15:17:42+00:00"
"time": "2019-04-26T05:53:56+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v3.4.27",
"version": "v3.4.28",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
@@ -3013,16 +3021,16 @@
},
{
"name": "symfony/filesystem",
"version": "v4.2.8",
"version": "v4.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "e16b9e471703b2c60b95f14d31c1239f68f11601"
"reference": "988ab7d70c267c34efa85772ca20de3fad11c74b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/e16b9e471703b2c60b95f14d31c1239f68f11601",
"reference": "e16b9e471703b2c60b95f14d31c1239f68f11601",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/988ab7d70c267c34efa85772ca20de3fad11c74b",
"reference": "988ab7d70c267c34efa85772ca20de3fad11c74b",
"shasum": ""
},
"require": {
@@ -3032,7 +3040,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.2-dev"
"dev-master": "4.3-dev"
}
},
"autoload": {
@@ -3059,7 +3067,7 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
"time": "2019-02-07T11:40:08+00:00"
"time": "2019-05-24T12:50:04+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -3439,9 +3447,18 @@
"time": "2018-12-25T11:19:39+00:00"
}
],
"aliases": [],
"aliases": [
{
"alias": "1.x-dev",
"alias_normalized": "1.9999999.9999999.9999999-dev",
"version": "dev-local",
"package": "instaclick/php-webdriver"
}
],
"minimum-stability": "stable",
"stability-flags": [],
"stability-flags": {
"instaclick/php-webdriver": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
@@ -122,6 +122,8 @@ abstract class course_enrolments extends \core_analytics\local\target\binary {
*/
public function is_valid_sample($sampleid, \core_analytics\analysable $course, $fortraining = true) {
$now = time();
$userenrol = $this->retrieve('user_enrolments', $sampleid);
if ($userenrol->timeend && $course->get_start() > $userenrol->timeend) {
// Discard enrolments which time end is prior to the course start. This should get rid of
@@ -139,9 +141,22 @@ abstract class course_enrolments extends \core_analytics\local\target\binary {
return false;
}
if (($userenrol->timestart && $userenrol->timestart > $course->get_end()) ||
(!$userenrol->timestart && $userenrol->timecreated > $course->get_end())) {
// Discard user enrolments that starts after the analysable official end.
if ($course->get_end()) {
if (($userenrol->timestart && $userenrol->timestart > $course->get_end()) ||
(!$userenrol->timestart && $userenrol->timecreated > $course->get_end())) {
// Discard user enrolments that starts after the analysable official end.
return false;
}
}
if ($now < $userenrol->timestart && $userenrol->timestart) {
// Discard enrolments whose start date is after now (no need to check timecreated > $now :P).
return false;
}
if (!$fortraining && $userenrol->timeend && $userenrol->timeend < $now) {
// We don't want to generate predictions for finished enrolments.
return false;
}
-5
View File
@@ -488,11 +488,6 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
foreach ($modinfo->sections[$section->section] as $cmid) {
$thismod = $modinfo->cms[$cmid];
if ($thismod->modname == 'label') {
// Labels are special (not interesting for students)!
continue;
}
if ($thismod->uservisible) {
if (isset($sectionmods[$thismod->modname])) {
$sectionmods[$thismod->modname]['name'] = $thismod->modplural;
+3
View File
@@ -65,5 +65,8 @@ function xmldb_format_topics_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -101,5 +101,8 @@ function xmldb_format_weeks_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3 -3
View File
@@ -43,8 +43,8 @@
</a>
<div class="card-body pr-1 course-info-container" id="course-info-container-{{id}}-{{uniqid}}">
<div class="d-flex align-items-start">
<div>
<div class="text-muted muted d-flex w-100 mb-1 text-truncate flex-wrap">
<div class="w-100 text-truncate">
<div class="text-muted muted d-flex mb-1 flex-wrap">
{{$coursecategory}}{{/coursecategory}}
{{#showshortname}}
{{$divider}}{{/divider}}
@@ -56,7 +56,7 @@
</div>
{{/showshortname}}
</div>
<a href="{{viewurl}}" class="coursename mr-2 text-truncate">
<a href="{{viewurl}}" class="coursename mr-2">
{{> core_course/favouriteicon }}
<span class="sr-only">
{{#str}}aria:coursename, core_course{{/str}}
@@ -1,36 +0,0 @@
@core @core_course @app @javascript
Feature: Check course completion feature.
In order to track the progress of the course on mobile device
As a student
I need to be able to update the activity completion status.
Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "courses" exist:
| fullname | shortname | category | enablecompletion |
| Course 1 | C1 | 0 | 1 |
And the following "course enrolments" exist:
| user | course | role |
| student1 | C1 | student |
Scenario: Complete the activity manually by clicking at the completion checkbox.
Given the following "activities" exist:
| activity | name | course | idnumber | completion | completionview |
| forum | First forum | C1 | forum1 | 1 | 0 |
| forum | Second forum | C1 | forum2 | 1 | 0 |
When I enter the app
And I log in as "student1"
And I press "Course 1" near "Recently accessed courses" in the app
# Set activities as completed.
And I should see "0%"
And I press "Not completed: First forum. Select to mark as complete." in the app
And I should see "50%"
And I press "Not completed: Second forum. Select to mark as complete." in the app
And I should see "100%"
# Set activities as not completed.
And I press "Completed: First forum. Select to mark as not complete." in the app
And I should see "50%"
And I press "Completed: Second forum. Select to mark as not complete." in the app
And I should see "0%"
-120
View File
@@ -1,120 +0,0 @@
@core @core_course @app @javascript
Feature: Test course list shown on app start tab
In order to select a course
As a student
I need to see the correct list of courses
Background:
Given the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
| Course 2 | C2 |
And the following "users" exist:
| username |
| student1 |
| student2 |
And the following "course enrolments" exist:
| user | course | role |
| student1 | C1 | student |
| student2 | C1 | student |
| student2 | C2 | student |
Scenario: Student is registered on one course
When I enter the app
And I log in as "student1"
Then I should see "Course 1"
And I should not see "Course 2"
Scenario: Student is registered on two courses (shortnames not displayed)
When I enter the app
And I log in as "student2"
Then I should see "Course 1"
And I should see "Course 2"
And I should not see "C1"
And I should not see "C2"
Scenario: Student is registered on two courses (shortnames displayed)
Given the following config values are set as admin:
| courselistshortnames | 1 |
When I enter the app
And I log in as "student2"
Then I should see "Course 1"
And I should see "Course 2"
And I should see "C1"
And I should see "C2"
Scenario: Student uses course list to enter course, then leaves it again
When I enter the app
And I log in as "student2"
And I press "Course 2" near "Course overview" in the app
Then the header should be "Course 2" in the app
And I press the back button in the app
Then the header should be "Acceptance test site" in the app
Scenario: Student uses filter feature to reduce course list
Given the following config values are set as admin:
| courselistshortnames | 1 |
And the following "courses" exist:
| fullname | shortname |
| Frog 3 | C3 |
| Frog 4 | C4 |
| Course 5 | C5 |
| Toad 6 | C6 |
And the following "course enrolments" exist:
| user | course | role |
| student2 | C3 | student |
| student2 | C4 | student |
| student2 | C5 | student |
| student2 | C6 | student |
# Create bogus courses so that the main ones aren't shown in the 'recently accessed' part.
# Because these come later in alphabetical order, they may not be displayed in the lower part
# which is OK.
And the following "courses" exist:
| fullname | shortname |
| Zogus 1 | Z1 |
| Zogus 2 | Z2 |
| Zogus 3 | Z3 |
| Zogus 4 | Z4 |
| Zogus 5 | Z5 |
| Zogus 6 | Z6 |
| Zogus 7 | Z7 |
| Zogus 8 | Z8 |
| Zogus 9 | Z9 |
| Zogus 10 | Z10 |
And the following "course enrolments" exist:
| user | course | role |
| student2 | Z1 | student |
| student2 | Z2 | student |
| student2 | Z3 | student |
| student2 | Z4 | student |
| student2 | Z5 | student |
| student2 | Z6 | student |
| student2 | Z7 | student |
| student2 | Z8 | student |
| student2 | Z9 | student |
| student2 | Z10 | student |
When I enter the app
And I log in as "student2"
Then I should see "C1"
And I should see "C2"
And I should see "C3"
And I should see "C4"
And I should see "C5"
And I should see "C6"
And I press "more" near "Course overview" in the app
And I press "Filter my courses" in the app
And I set the field "Filter my courses" to "fr" in the app
Then I should not see "C1"
And I should not see "C2"
And I should see "C3"
And I should see "C4"
And I should not see "C5"
And I should not see "C6"
And I press "more" near "Course overview" in the app
And I press "Filter my courses" in the app
Then I should see "C1"
And I should see "C2"
And I should see "C3"
And I should see "C4"
And I should see "C5"
And I should see "C6"
+9 -2
View File
@@ -5021,6 +5021,7 @@ class core_course_courselib_testcase extends advanced_testcase {
* Test the course_get_recent_courses function.
*/
public function test_course_get_recent_courses() {
global $DB;
$this->resetAfterTest();
$generator = $this->getDataGenerator();
@@ -5043,9 +5044,15 @@ class core_course_courselib_testcase extends advanced_testcase {
// No course accessed.
$this->assertCount(0, $result);
$time = time();
foreach ($courses as $course) {
$context = context_course::instance($course->id);
course_view($context);
$DB->set_field('user_lastaccess', 'timeaccess', $time, [
'userid' => $student->id,
'courseid' => $course->id,
]);
$time++;
}
// Every course accessed.
@@ -5056,10 +5063,10 @@ class core_course_courselib_testcase extends advanced_testcase {
$result = course_get_recent_courses($student->id, 2);
$this->assertCount(2, $result);
// Every course accessed, with limit and offset. Should return only the last created course ($course[2]).
// Every course accessed, with limit and offset should return the first course.
$result = course_get_recent_courses($student->id, 3, 2);
$this->assertCount(1, $result);
$this->assertArrayHasKey($courses[2]->id, $result);
$this->assertArrayHasKey($courses[0]->id, $result);
// Every course accessed, order by shortname DESC. The last create course ($course[2]) should have the greater shortname.
$result = course_get_recent_courses($student->id, 0, 0, 'shortname DESC');
@@ -55,8 +55,8 @@ class data_controller extends \core_customfield\data_controller {
$field = $this->get_field();
$config = $field->get('configdata');
$elementname = $this->get_form_element_name();
// TODO MDL-65506 element 'advcheckbox' does not support 'required' rule. If checkbox is required (i.e. "agree to terms")
// then use 'checkbox' form element.
// If checkbox is required (i.e. "agree to terms") then use 'checkbox' form element.
// The advcheckbox element cannot be used for required fields because advcheckbox elements always provide a value.
$isrequired = $field->get_configdata_property('required');
$mform->addElement($isrequired ? 'checkbox' : 'advcheckbox', $elementname, $this->get_field()->get_formatted_name());
$mform->setDefault($elementname, $config['checkbydefault']);
@@ -31,7 +31,7 @@ $string['errorconfiglinksyntax'] = 'The link must be a valid URL starting with e
$string['errorconfigmaxlen'] = 'The maximum number of characters allowed must be between 1 and 1333.';
$string['errormaxlength'] = 'The maximum number of characters allowed in this field is {$a}.';
$string['islink'] = 'Link field';
$string['islink_help'] = 'To transform the text into a link, enter a URL containing $$ as a placeholder, where $$ will be replaced with the text. For example, to transform a Twitter ID to a link, enter http://twitter.com/$$.';
$string['islink_help'] = 'To transform the text into a link, enter a URL containing $$ as a placeholder, where $$ will be replaced with the text. For example, to transform a Twitter ID to a link, enter https://twitter.com/$$.';
$string['ispassword'] = 'Password field';
$string['linktarget'] = 'Link target';
$string['maxlength'] = 'Maximum number of characters';
+3
View File
@@ -39,5 +39,8 @@ function xmldb_enrol_database_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -39,5 +39,8 @@ function xmldb_enrol_flatfile_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
+3
View File
@@ -39,5 +39,8 @@ function xmldb_enrol_guest_upgrade($oldversion) {
// Automatically generated Moodle v3.6.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.7.0 release upgrade line.
// Put any upgrade step following this.
return true;
}

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