Merge branch 'MDL-65067_master' of https://github.com/dmonllao/moodle
authorAdrian Greeve <abgreeve@gmail.com>
Wed, 22 May 2019 08:29:52 +0000 (16:29 +0800)
committerAdrian Greeve <abgreeve@gmail.com>
Wed, 22 May 2019 08:29:52 +0000 (16:29 +0800)
142 files changed:
admin/tool/customlang/db/upgrade.php
admin/tool/customlang/templates/translator.mustache
admin/tool/dataprivacy/db/upgrade.php
admin/tool/log/db/upgrade.php
admin/tool/log/store/database/db/upgrade.php
admin/tool/log/store/standard/db/upgrade.php
admin/tool/mobile/db/upgrade.php
admin/tool/monitor/db/upgrade.php
admin/tool/policy/db/upgrade.php
admin/tool/usertours/db/upgrade.php
analytics/classes/local/target/base.php
auth/cas/db/upgrade.php
auth/db/db/upgrade.php
auth/email/db/upgrade.php
auth/ldap/db/upgrade.php
auth/manual/db/upgrade.php
auth/mnet/db/upgrade.php
auth/none/db/upgrade.php
auth/oauth2/db/upgrade.php
auth/shibboleth/db/upgrade.php
backup/backup.class.php
blocks/badges/db/upgrade.php
blocks/calendar_month/db/upgrade.php
blocks/calendar_upcoming/db/upgrade.php
blocks/community/db/upgrade.php
blocks/completionstatus/db/upgrade.php
blocks/course_summary/db/upgrade.php
blocks/html/db/upgrade.php
blocks/navigation/db/upgrade.php
blocks/quiz_results/db/upgrade.php
blocks/recent_activity/db/upgrade.php
blocks/rss_client/db/upgrade.php
blocks/section_links/db/upgrade.php
blocks/selfcompletion/db/upgrade.php
blocks/settings/db/upgrade.php
course/format/topics/db/upgrade.php
course/format/weeks/db/upgrade.php
enrol/database/db/upgrade.php
enrol/flatfile/db/upgrade.php
enrol/guest/db/upgrade.php
enrol/imsenterprise/db/upgrade.php
enrol/lti/db/upgrade.php
enrol/manual/db/upgrade.php
enrol/mnet/db/upgrade.php
enrol/paypal/db/upgrade.php
enrol/self/db/upgrade.php
filter/mathjaxloader/db/upgrade.php
filter/mediaplugin/db/upgrade.php
filter/tex/db/upgrade.php
grade/grading/form/guide/db/upgrade.php
grade/grading/form/rubric/db/upgrade.php
grade/report/overview/db/upgrade.php
grade/report/user/db/upgrade.php
install/lang/id/install.php [new file with mode: 0644]
install/lang/sw/moodle.php [new file with mode: 0644]
lib/antivirus/clamav/db/upgrade.php
lib/classes/session/manager.php
lib/db/upgrade.php
lib/editor/atto/db/upgrade.php
lib/editor/atto/plugins/equation/db/upgrade.php
lib/editor/tinymce/db/upgrade.php
lib/editor/tinymce/plugins/spellchecker/db/upgrade.php
lib/tablelib.php
lib/tests/tablelib_test.php
message/output/email/db/upgrade.php
message/output/jabber/db/upgrade.php
message/output/popup/db/upgrade.php
mod/assign/db/upgrade.php
mod/assign/feedback/comments/db/upgrade.php
mod/assign/feedback/editpdf/db/upgrade.php
mod/assign/feedback/file/db/upgrade.php
mod/assign/submission/comments/db/upgrade.php
mod/assign/submission/file/db/upgrade.php
mod/assign/submission/onlinetext/db/upgrade.php
mod/assignment/db/upgrade.php
mod/book/db/upgrade.php
mod/chat/db/upgrade.php
mod/choice/db/upgrade.php
mod/data/db/upgrade.php
mod/feedback/db/upgrade.php
mod/folder/db/upgrade.php
mod/forum/amd/build/inpage_reply.min.js
mod/forum/amd/build/posts_list.min.js
mod/forum/amd/build/repository.min.js
mod/forum/amd/src/inpage_reply.js
mod/forum/amd/src/posts_list.js
mod/forum/amd/src/repository.js
mod/forum/classes/subscriptions.php
mod/forum/db/upgrade.php
mod/forum/externallib.php
mod/forum/post.php
mod/forum/templates/inpage_reply.mustache
mod/forum/tests/externallib_test.php
mod/forum/tests/mail_test.php
mod/forum/upgrade.txt
mod/glossary/db/upgrade.php
mod/imscp/db/upgrade.php
mod/label/db/upgrade.php
mod/lesson/db/upgrade.php
mod/lesson/import_form.php
mod/lti/db/upgrade.php
mod/page/db/upgrade.php
mod/quiz/attemptlib.php
mod/quiz/classes/external.php
mod/quiz/db/upgrade.php
mod/quiz/report/overview/db/upgrade.php
mod/quiz/report/statistics/db/upgrade.php
mod/quiz/tests/behat/attempt_redo_questions.feature
mod/resource/db/upgrade.php
mod/scorm/db/upgrade.php
mod/survey/db/upgrade.php
mod/url/db/upgrade.php
mod/wiki/db/upgrade.php
mod/workshop/db/upgrade.php
mod/workshop/form/accumulative/db/upgrade.php
mod/workshop/form/comments/db/upgrade.php
mod/workshop/form/numerrors/db/upgrade.php
mod/workshop/form/rubric/db/upgrade.php
portfolio/boxnet/db/upgrade.php
portfolio/googledocs/db/upgrade.php
portfolio/picasa/db/upgrade.php
question/behaviour/manualgraded/db/upgrade.php
question/import_form.php
question/type/calculated/db/upgrade.php
question/type/ddmarker/db/upgrade.php
question/type/essay/db/upgrade.php
question/type/match/db/upgrade.php
question/type/multianswer/db/upgrade.php
question/type/multichoice/db/upgrade.php
question/type/numerical/db/upgrade.php
question/type/random/db/upgrade.php
question/type/randomsamatch/db/upgrade.php
question/type/shortanswer/db/upgrade.php
report/insights/amd/build/actions.min.js
report/insights/amd/src/actions.js
repository/boxnet/db/upgrade.php
repository/dropbox/db/upgrade.php
repository/flickr/db/upgrade.php
repository/googledocs/db/upgrade.php
repository/onedrive/db/upgrade.php
repository/picasa/db/upgrade.php
version.php

index 53fa80a..823c1e7 100644 (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;
 }
index 5092f68..e8e30fd 100644 (file)
                     <div class="d-md-none">
                         <strong>{{#str}}headingstandard, tool_customlang{{/str}}</strong>
                     </div>
-                    {{{ master }}}
+                    {{ master }}
                     <div class="info">
                         {{{ placeholderhelp }}}
                         {{{ outdatedhelp}}}
         </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}}
index 47989cb..49cedd6 100644 (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;
 }
index bbf1961..b3de05d 100644 (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;
 }
index b5536ab..e17a51e 100644 (file)
@@ -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;
 }
index e1ac5a2..a341ac8 100644 (file)
@@ -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;
 }
index 73748aa..6d5c5a7 100644 (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;
 }
index f8579c9..139dec7 100644 (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;
 }
index cf1a33b..87e9965 100644 (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;
 }
index 47e4994..523a453 100644 (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;
 }
index 0ea5e8b..3a5d9f2 100644 (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();
 
index 4df297c..3d05e54 100644 (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;
 }
index f860220..ec2c80e 100644 (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;
 }
index f636d6f..d1b6049 100644 (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;
 }
index 6c57255..cf73d4c 100644 (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;
 }
index 9209e9d..9f18bc7 100644 (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;
 }
index be29bcd..e8eb849 100644 (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;
 }
index 2d5fc97..a051a32 100644 (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;
 }
index 7582cc9..599faa4 100644 (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;
 }
index 640a023..d47ddad 100644 (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;
 }
index d21299e..03449e0 100644 (file)
@@ -146,7 +146,7 @@ abstract class backup implements checksumable {
     /**
      * Usually same than major release zero version, mainly for informative/historic purposes.
      */
-    const RELEASE = '3.7';
+    const RELEASE = '3.8';
 
     /**
      * Cipher to be used in backup and restore operations.
index 6948646..f1f069a 100644 (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;
 }
index 3205127..58d6546 100644 (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;
 }
index 14100c8..69a5774 100644 (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;
 }
index 0bdc51e..1a593de 100644 (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;
 }
index 8a9ec89..6d78948 100644 (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;
 }
index fb0cbae..f5732e5 100644 (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;
 }
index 4949b3f..62d89a6 100644 (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;
 }
index 97b1063..1022e84 100644 (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;
 }
index 60b035e..055bb61 100644 (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;
 }
index 77e6f61..1ad6e1a 100644 (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;
 }
index 878f198..84dc470 100644 (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;
 }
index 0a8e2b0..41638f4 100644 (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;
 }
index 9b8d87b..92b3268 100644 (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;
 }
index 7b8618d..f2b7327 100644 (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;
 }
index 055a902..6dc3841 100644 (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;
 }
index bbb141f..0309ac8 100644 (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;
 }
index ca2733c..9c288eb 100644 (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;
 }
index c286910..9e216f6 100644 (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;
 }
index a4f9d25..81fa08c 100644 (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;
 }
index d89f296..137602d 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_enrol_imsenterprise_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;
 }
index 7b5736b..21c0943 100644 (file)
@@ -66,5 +66,8 @@ function xmldb_enrol_lti_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;
 }
index 48dfc69..0546271 100644 (file)
@@ -39,5 +39,8 @@ function xmldb_enrol_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;
 }
index f6d9efb..62dd9bb 100644 (file)
@@ -39,5 +39,8 @@ function xmldb_enrol_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;
 }
index 93ebd50..40b8abd 100644 (file)
@@ -138,5 +138,8 @@ function xmldb_enrol_paypal_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;
 }
index cb255e8..4204666 100644 (file)
@@ -39,5 +39,8 @@ function xmldb_enrol_self_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;
 }
index e4bb953..c93d398 100644 (file)
@@ -160,5 +160,8 @@ MathJax.Hub.Config({
     // 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;
 }
index a8a43ac..b201df6 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_filter_mediaplugin_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;
 }
index ec40486..dae2257 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_filter_tex_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;
 }
index 290350d..e9e73f4 100644 (file)
@@ -49,5 +49,8 @@ function xmldb_gradingform_guide_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;
 }
index e7e0bdf..7b47339 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_gradingform_rubric_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;
 }
index 72726d8..6efe5a2 100644 (file)
@@ -54,5 +54,8 @@ function xmldb_gradereport_overview_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;
 }
index bc436ed..bca0694 100644 (file)
@@ -41,5 +41,8 @@ function xmldb_gradereport_user_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;
 }
diff --git a/install/lang/id/install.php b/install/lang/id/install.php
new file mode 100644 (file)
index 0000000..691d6d4
--- /dev/null
@@ -0,0 +1,61 @@
+<?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/>.
+
+/**
+ * Automatically generated strings for Moodle installer
+ *
+ * Do not edit this file manually! It contains just a subset of strings
+ * needed during the very first steps of installation. This file was
+ * generated automatically by export-installer.php (which is part of AMOS
+ * {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
+ * list of strings defined in /install/stringnames.txt.
+ *
+ * @package   installer
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$string['admindirname'] = 'Direktori admin';
+$string['availablelangs'] = 'Paket bahasa yang tersedia';
+$string['chooselanguagehead'] = 'Pilih bahasa';
+$string['chooselanguagesub'] = 'Silakan pilih bahasa untuk instalasi. Bahasa ini juga akan digunakan sebagai bahasa default untuk situs, meskipun mungkin akan diubah kemudian.';
+$string['clialreadyconfigured'] = 'Berkas konfigurasi config.php sudah ada. Silakan gunakan admin /cli/install_database.php untuk menginstal Moodle untuk situs ini.';
+$string['clialreadyinstalled'] = 'File konfigurasi config.php sudah ada. Silakan gunakan admin/cli/install_database.php untuk menginstal Moodle untuk situs ini.';
+$string['databasehost'] = 'Host basis data';
+$string['databasename'] = 'Nama basis data';
+$string['databasetypehead'] = 'Pilih pengandar basis data';
+$string['dataroot'] = 'Direktori data';
+$string['dbprefix'] = 'Prefiks tabel';
+$string['installation'] = 'Instalasi';
+$string['pathssubadmindir'] = 'Beberapa hosting menggunakan / admin sebagai URL khusus untuk Anda mengakses panel kontrol atau sesuatu. Sayangnya ini bertentangan dengan lokasi standar untuk halaman admin Moodle. Anda dapat memperbaikinya dengan mengganti nama direktori admin di instalasi Anda, dan meletakkan nama baru itu di sini. Misalnya: <em> moodleadmin </em>. Ini akan memperbaiki tautan admin di Moodle.';
+$string['pathssubdataroot'] = '<p> Direktori tempat Moodle akan menyimpan semua konten file yang diunggah oleh pengguna. </p> <p> Direktori ini harus dapat dibaca dan ditulis oleh pengguna server web (biasanya \'www-data\', \'nobody\', atau \' apache \'). </p> <p> Itu tidak boleh diakses secara langsung melalui web. </p> <p> Jika direktori saat ini tidak ada, proses instalasi akan berusaha membuatnya. </p>';
+$string['pathssubdirroot'] = '<p> Jalur lengkap ke direktori yang berisi kode Moodle. </p>';
+$string['pathssubwwwroot'] = '<p> Alamat lengkap tempat Moodle akan diakses yaitu alamat yang akan dimasukkan pengguna ke bilah alamat peramban mereka untuk mengakses Moodle. </p> <p> Tidak mungkin mengakses Moodle menggunakan banyak alamat. Jika situs Anda dapat diakses melalui beberapa alamat, maka pilih yang termudah dan buat pengalihan permanen untuk masing-masing alamat lainnya. </p> <p> Jika situs Anda dapat diakses baik dari Internet, dan dari jaringan internal (kadang-kadang disebut Intranet), lalu gunakan alamat publik di sini. </p> <p> Jika alamat saat ini tidak benar, silakan ubah URL di bilah alamat peramban Anda dan mulai kembali instalasi. </p>';
+$string['pathsunsecuredataroot'] = 'Lokasi dataroot tidak aman';
+$string['pathswrongadmindir'] = 'Direktori admin tidak ada';
+$string['phpextension'] = 'Ekstensi PHP {$a}';
+$string['phpversion'] = 'Versi PHP';
+$string['phpversionhelp'] = '<p> Moodle membutuhkan versi PHP setidaknya 5.6.5 atau 7.1 (7.0.x memiliki beberapa keterbatasan mesin). </p> <p> Anda saat ini menjalankan versi {$a}. </p> <p> Anda harus meningkatkan versi PHP atau pindah ke host dengan versi PHP yang lebih baru. </p>';
+$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
+$string['welcomep20'] = 'Anda melihat halaman ini karena Anda telah berhasil memasang dan meluncurkan paket <strong> {$a->packname} {$a->packversion}</strong> di komputer Anda. Selamat!';
+$string['welcomep30'] = 'Rilis <strong> {$a->installername}</strong> ini mencakup aplikasi untuk menciptakan lingkungan tempat <strong> Moodle </strong> yang akan digunakan, yaitu:';
+$string['welcomep40'] = 'Paket juga termasuk <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong>.';
+$string['welcomep50'] = 'Penggunaan semua aplikasi dalam paket ini diatur oleh lisensi masing-masing. Paket <strong>{$a->installername}</strong> lengkap adalah <a href="http://www.opensource.org/docs/definition_plain.html"> sumber terbuka </a> dan didistribusikan di bawah lisensi <a href="http://www.gnu.org/copyleft/gpl.html"> GPL </a>.';
+$string['welcomep60'] = 'Halaman-halaman berikut akan menuntun Anda melalui beberapa langkah yang mudah diikuti untuk mengonfigurasi dan menyiapkan <strong> Moodle </strong> di komputer Anda. Anda dapat menerima pengaturan bawaan atau, secara opsional, mengubahnya sesuai dengan kebutuhan Anda.';
+$string['welcomep70'] = 'Klik tombol "Selanjutnya" di bawah untuk melanjutkan dengan penyiapan <strong> Moodle </strong>.';
+$string['wwwroot'] = 'Alamat web';
diff --git a/install/lang/sw/moodle.php b/install/lang/sw/moodle.php
new file mode 100644 (file)
index 0000000..a00dcc3
--- /dev/null
@@ -0,0 +1,34 @@
+<?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/>.
+
+/**
+ * Automatically generated strings for Moodle installer
+ *
+ * Do not edit this file manually! It contains just a subset of strings
+ * needed during the very first steps of installation. This file was
+ * generated automatically by export-installer.php (which is part of AMOS
+ * {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
+ * list of strings defined in /install/stringnames.txt.
+ *
+ * @package   installer
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$string['next'] = 'Ijayo';
+$string['previous'] = 'Iliyopita';
index 493f0fd..189c81a 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_antivirus_clamav_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;
 }
index 6c0e171..36083dd 100644 (file)
@@ -933,6 +933,16 @@ class manager {
         if ($generateevent) {
             $event->trigger();
         }
+
+        // Queue migrating the messaging data, if we need to.
+        if (!get_user_preferences('core_message_migrate_data', false, $userid)) {
+            // Check if there are any legacy messages to migrate.
+            if (\core_message\helper::legacy_messages_exist($userid)) {
+                \core_message\task\migrate_message_data::queue_task($userid);
+            } else {
+                set_user_preference('core_message_migrate_data', true, $userid);
+            }
+        }
     }
 
     /**
index c32bcfe..f304bab 100644 (file)
@@ -3375,5 +3375,8 @@ function xmldb_main_upgrade($oldversion) {
         upgrade_main_savepoint(true, 2019051300.01);
     }
 
+    // Automatically generated Moodle v3.7.0 release upgrade line.
+    // Put any upgrade step following this.
+
     return true;
 }
index 2d91167..7b1f233 100644 (file)
@@ -100,5 +100,8 @@ function xmldb_editor_atto_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;
 }
index e10c52f..732be3e 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_atto_equation_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;
 }
index 76c25ef..09e2a48 100644 (file)
@@ -39,5 +39,8 @@ function xmldb_editor_tinymce_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;
 }
index 5408bf6..25c8cbc 100644 (file)
@@ -39,5 +39,8 @@ function xmldb_tinymce_spellchecker_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;
 }
index d1213b8..421632c 100644 (file)
@@ -35,6 +35,7 @@ define('TABLE_VAR_IFIRST', 4);
 define('TABLE_VAR_ILAST',  5);
 define('TABLE_VAR_PAGE',   6);
 define('TABLE_VAR_RESET',  7);
+define('TABLE_VAR_DIR',    8);
 /**#@-*/
 
 /**#@+
@@ -150,7 +151,8 @@ class flexible_table {
             TABLE_VAR_IFIRST => 'tifirst',
             TABLE_VAR_ILAST  => 'tilast',
             TABLE_VAR_PAGE   => 'page',
-            TABLE_VAR_RESET  => 'treset'
+            TABLE_VAR_RESET  => 'treset',
+            TABLE_VAR_DIR    => 'tdir',
         );
     }
 
@@ -516,14 +518,16 @@ class flexible_table {
                 (isset($this->columns[$sortcol]) || in_array($sortcol, get_all_user_name_fields())
                 && isset($this->columns['fullname']))) {
 
+            $sortdir = optional_param($this->request[TABLE_VAR_DIR], $this->sort_default_order, PARAM_INT);
+
             if (array_key_exists($sortcol, $this->prefs['sortby'])) {
                 // This key already exists somewhere. Change its sortorder and bring it to the top.
-                $sortorder = $this->prefs['sortby'][$sortcol] == SORT_ASC ? SORT_DESC : SORT_ASC;
+                $sortorder = $this->prefs['sortby'][$sortcol] = $sortdir;
                 unset($this->prefs['sortby'][$sortcol]);
                 $this->prefs['sortby'] = array_merge(array($sortcol => $sortorder), $this->prefs['sortby']);
             } else {
                 // Key doesn't exist, so just add it to the beginning of the array, ascending order
-                $this->prefs['sortby'] = array_merge(array($sortcol => SORT_ASC), $this->prefs['sortby']);
+                $this->prefs['sortby'] = array_merge(array($sortcol => $sortdir), $this->prefs['sortby']);
             }
 
             // Finally, make sure that no more than $this->maxsortkeys are present into the array
@@ -1362,8 +1366,19 @@ class flexible_table {
      * @return string HTML fragment.
      */
     protected function sort_link($text, $column, $isprimary, $order) {
-        return html_writer::link($this->baseurl->out(false,
-                array($this->request[TABLE_VAR_SORT] => $column)),
+        // If we are already sorting by this column, switch direction.
+        if (array_key_exists($column, $this->prefs['sortby'])) {
+            $sortorder = $this->prefs['sortby'][$column] == SORT_ASC ? SORT_DESC : SORT_ASC;
+        } else {
+            $sortorder = $order;
+        }
+
+        $params = [
+            $this->request[TABLE_VAR_SORT] => $column,
+            $this->request[TABLE_VAR_DIR] => $sortorder,
+        ];
+
+        return html_writer::link($this->baseurl->out(false, $params),
                 $text . get_accesshide(get_string('sortby') . ' ' .
                 $text . ' ' . $this->sort_order_name($isprimary, $order))) . ' ' .
                 $this->sort_icon($isprimary, $order);
index 9346e05..e43fdb1 100644 (file)
@@ -526,7 +526,6 @@ class core_tablelib_testcase extends basic_testcase {
     }
 
     public function test_can_be_reset() {
-
         // Table in its default state (as if seen for the first time), nothing to reset.
         $table = $this->prepare_table_for_reset_test(uniqid('tablelib_test_'));
         $table->setup();
@@ -538,21 +537,25 @@ class core_tablelib_testcase extends basic_testcase {
         $table->setup();
         $this->assertFalse($table->can_be_reset());
 
-        // Table explicitly sorted by the default column (reverses the order), can be reset.
+        // Table explicitly sorted by the default column & direction, nothing to reset.
         $table = $this->prepare_table_for_reset_test(uniqid('tablelib_test_'));
         $table->sortable(true, 'column1', SORT_DESC);
         $_GET['tsort'] = 'column1';
+        $_GET['tdir'] = SORT_DESC;
         $table->setup();
         unset($_GET['tsort']);
-        $this->assertTrue($table->can_be_reset());
+        unset($_GET['tdir']);
+        $this->assertFalse($table->can_be_reset());
 
-        // Table explicitly sorted twice by the default column (puts back to default order), nothing to reset.
+        // Table explicitly sorted twice by the default column & direction, nothing to reset.
         $table = $this->prepare_table_for_reset_test(uniqid('tablelib_test_'));
         $table->sortable(true, 'column1', SORT_DESC);
         $_GET['tsort'] = 'column1';
+        $_GET['tdir'] = SORT_DESC;
         $table->setup();
         $table->setup(); // Set up again to simulate the second page request.
         unset($_GET['tsort']);
+        unset($_GET['tdir']);
         $this->assertFalse($table->can_be_reset());
 
         // Table sorted by other than default column, can be reset.
@@ -563,6 +566,16 @@ class core_tablelib_testcase extends basic_testcase {
         unset($_GET['tsort']);
         $this->assertTrue($table->can_be_reset());
 
+        // Table sorted by other than default direction, can be reset.
+        $table = $this->prepare_table_for_reset_test(uniqid('tablelib_test_'));
+        $table->sortable(true, 'column1', SORT_DESC);
+        $_GET['tsort'] = 'column1';
+        $_GET['tdir'] = SORT_ASC;
+        $table->setup();
+        unset($_GET['tsort']);
+        unset($_GET['tdir']);
+        $this->assertTrue($table->can_be_reset());
+
         // Table sorted by the default column after another sorting previously selected.
         // This leads to different ORDER BY than just having a single sort defined, can be reset.
         $table = $this->prepare_table_for_reset_test(uniqid('tablelib_test_'));
index b4fe033..2be2946 100644 (file)
@@ -71,5 +71,8 @@ function xmldb_message_email_upgrade($oldversion) {
         upgrade_plugin_savepoint(true, 2019032500, 'message', 'email');
     }
 
+    // Automatically generated Moodle v3.7.0 release upgrade line.
+    // Put any upgrade step following this.
+
     return true;
 }
index f27426c..85f1740 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_message_jabber_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;
 }
index 5c179e5..e659afb 100644 (file)
@@ -82,5 +82,8 @@ function xmldb_message_popup_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;
 }
index 18a0391..254c126 100644 (file)
@@ -155,5 +155,8 @@ function xmldb_assign_upgrade($oldversion) {
         upgrade_mod_savepoint(true, 2018120500, 'assign');
     }
 
+    // Automatically generated Moodle v3.7.0 release upgrade line.
+    // Put any upgrade step following this.
+
     return true;
 }
index ae87b98..2ef8e87 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_assignfeedback_comments_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;
 }
index ef219b6..0e0a90b 100644 (file)
@@ -123,5 +123,8 @@ function xmldb_assignfeedback_editpdf_upgrade($oldversion) {
         upgrade_plugin_savepoint(true, 2019010800, 'assignfeedback', 'editpdf');
     }
 
+    // Automatically generated Moodle v3.7.0 release upgrade line.
+    // Put any upgrade step following this.
+
     return true;
 }
index 898839c..ee2291b 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_assignfeedback_file_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;
 }
index 3c41dfe..c134833 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_assignsubmission_comments_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;
 }
index 2f6c544..ec51258 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_assignsubmission_file_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;
 }
index 2b04ada..8c45377 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_assignsubmission_onlinetext_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;
 }
index a6187c6..a95733d 100644 (file)
@@ -36,5 +36,8 @@ function xmldb_assignment_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;
 }
index eeac64f..5a08ad2 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_book_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;
 }
index 5351271..a98d1b7 100644 (file)
@@ -68,5 +68,8 @@ function xmldb_chat_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;
 }
index 31f2963..84abf36 100644 (file)
@@ -36,5 +36,8 @@ function xmldb_choice_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;
 }
index 96d2f35..0ecbeff 100644 (file)
@@ -53,5 +53,8 @@ function xmldb_data_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;
 }
index 603521d..0ec677a 100644 (file)
@@ -81,5 +81,8 @@ function xmldb_feedback_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;
 }
index d106c21..27c9f55 100644 (file)
@@ -61,5 +61,8 @@ function xmldb_folder_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;
 }
index 33b572b..135ddbb 100644 (file)
Binary files a/mod/forum/amd/build/inpage_reply.min.js and b/mod/forum/amd/build/inpage_reply.min.js differ
index 644a004..df43413 100644 (file)
Binary files a/mod/forum/amd/build/posts_list.min.js and b/mod/forum/amd/build/posts_list.min.js differ
index 019d014..40df235 100644 (file)
Binary files a/mod/forum/amd/build/repository.min.js and b/mod/forum/amd/build/repository.min.js differ
index 7b03f1d..014e646 100644 (file)
@@ -42,6 +42,13 @@ define([
         FLAT_NEWEST_FIRST: -1
     };
 
+     /**
+      * Moodle formats taken from the FORMAT_* constants declared in lib/weblib.php.
+      * @type {Object}
+      */
+    var CONTENT_FORMATS = {
+        MOODLE: 0
+    };
     /**
      * Show the loading icon for the submit button.
      *
@@ -83,6 +90,11 @@ define([
             var allButtons = submitButton.parent().find(Selectors.post.inpageReplyButton);
             var form = submitButton.parents(Selectors.post.inpageReplyForm).get(0);
             var message = form.elements.post.value.trim();
+            // For now, we consider the inline reply post written using the FORMAT_MOODLE (because a textarea is displayed).
+            // In the future, other formats should be supported, letting users to use their preferred editor and format.
+            var messageformat = CONTENT_FORMATS.MOODLE;
+            // The message post will be converted from messageformat to FORMAT_HTML.
+            var topreferredformat = true;
             var postid = form.elements.reply.value;
             var subject = form.elements.subject.value;
             var currentRoot = submitButton.parents(Selectors.post.forumContent);
@@ -94,7 +106,7 @@ define([
                 showSubmitButtonLoadingIcon(submitButton);
                 allButtons.prop('disabled', true);
 
-                Repository.addDiscussionPost(postid, subject, message, isprivatereply)
+                Repository.addDiscussionPost(postid, subject, message, messageformat, isprivatereply, topreferredformat)
                     .then(function(context) {
                         var message = context.messages.reduce(function(carry, message) {
                             if (message.type == 'success') {
@@ -161,6 +173,7 @@ define([
     return {
         init: function(root) {
             registerEventListeners(root);
-        }
+        },
+        CONTENT_FORMATS: CONTENT_FORMATS
     };
 });
index e68c87e..5e24d7a 100644 (file)
@@ -60,7 +60,8 @@ define([
                 "reply_url": $(e.currentTarget).attr('href'),
                 sesskey: M.cfg.sesskey,
                 parentsubject: currentSubject.html(),
-                canreplyprivately: $(e.currentTarget).data('can-reply-privately')
+                canreplyprivately: $(e.currentTarget).data('can-reply-privately'),
+                postformat: InPageReply.CONTENT_FORMATS.MOODLE
             };
 
             if (!currentRoot.find(Selectors.post.inpageReplyContent).length) {
index 0533160..1e8e29d 100644 (file)
@@ -43,16 +43,20 @@ define(['core/ajax'], function(Ajax) {
         return Ajax.call([request])[0];
     };
 
-    var addDiscussionPost = function(postid, subject, message, isprivatereply) {
+    var addDiscussionPost = function(postid, subject, message, messageformat, isprivatereply, topreferredformat) {
         var request = {
             methodname: 'mod_forum_add_discussion_post',
             args: {
                 postid: postid,
                 message: message,
+                messageformat: messageformat,
                 subject: subject,
                 options: [{
                     name: "private",
                     value: isprivatereply,
+                }, {
+                    name: "topreferredformat",
+                    value: topreferredformat,
                 }]
             }
         };
index 5f50eb8..74181b6 100644 (file)
@@ -272,6 +272,7 @@ class subscriptions {
         $sql = "SELECT $fields
                 FROM {user} u
                 JOIN ($esql) je ON je.id = u.id
+               WHERE u.auth <> 'nologin' AND u.suspended = 0
             ORDER BY $sort";
 
         return $DB->get_records_sql($sql, $params);
@@ -442,6 +443,7 @@ class subscriptions {
                         ) subscriptions
                         JOIN {user} u ON u.id = subscriptions.userid
                         JOIN ($esql) je ON je.id = u.id
+                        WHERE u.auth <> 'nologin' AND u.suspended = 0
                         ORDER BY u.email ASC";
 
             } else {
@@ -450,7 +452,7 @@ class subscriptions {
                         JOIN ($esql) je ON je.id = u.id
                         JOIN {forum_subscriptions} s ON s.userid = u.id
                         WHERE
-                          s.forum = :forumid
+                          s.forum = :forumid AND u.auth <> 'nologin' AND u.suspended = 0
                         ORDER BY u.email ASC";
             }
             $results = $DB->get_records_sql($sql, $params);
index 7addc73..918ec72 100644 (file)
@@ -154,5 +154,8 @@ function xmldb_forum_upgrade($oldversion) {
         upgrade_mod_savepoint(true, 2019040402, 'forum');
     }
 
+    // Automatically generated Moodle v3.7.0 release upgrade line.
+    // Put any upgrade step following this.
+
     return true;
 }
index 4f5ab14..37f09d7 100644 (file)
@@ -1178,7 +1178,7 @@ class mod_forum_external extends external_api {
                 'postid' => new external_value(PARAM_INT, 'the post id we are going to reply to
                                                 (can be the initial discussion post'),
                 'subject' => new external_value(PARAM_TEXT, 'new post subject'),
-                'message' => new external_value(PARAM_RAW, 'new post message (only html format allowed)'),
+                'message' => new external_value(PARAM_RAW, 'new post message (html assumed if messageformat is not provided)'),
                 'options' => new external_multiple_structure (
                     new external_single_structure(
                         array(
@@ -1188,12 +1188,14 @@ class mod_forum_external extends external_api {
                                         private (bool); make this reply private to the author of the parent post, default to false.
                                         inlineattachmentsid              (int); the draft file area id for inline attachments
                                         attachmentsid       (int); the draft file area id for attachments
+                                        topreferredformat (bool); convert the message & messageformat to FORMAT_HTML, defaults to false
                             '),
                             'value' => new external_value(PARAM_RAW, 'the value of the option,
                                                             this param is validated in the external function.'
                         )
                     )
-                ), 'Options', VALUE_DEFAULT, array())
+                ), 'Options', VALUE_DEFAULT, array()),
+                'messageformat' => new external_format_value('message', VALUE_DEFAULT)
             )
         );
     }
@@ -1203,13 +1205,14 @@ class mod_forum_external extends external_api {
      *
      * @param int $postid the post id we are going to reply to
      * @param string $subject new post subject
-     * @param string $message new post message (only html format allowed)
+     * @param string $message new post message (html assumed if messageformat is not provided)
      * @param array $options optional settings
+     * @param string $messageformat The format of the message, defaults to FORMAT_HTML for BC
      * @return array of warnings and the new post id
      * @since Moodle 3.0
      * @throws moodle_exception
      */
-    public static function add_discussion_post($postid, $subject, $message, $options = array()) {
+    public static function add_discussion_post($postid, $subject, $message, $options = array(), $messageformat = FORMAT_HTML) {
         global $CFG, $USER;
         require_once($CFG->dirroot . "/mod/forum/lib.php");
 
@@ -1228,7 +1231,8 @@ class mod_forum_external extends external_api {
                 'postid' => $postid,
                 'subject' => $subject,
                 'message' => $message,
-                'options' => $options
+                'options' => $options,
+                'messageformat' => $messageformat,
             )
         );
 
@@ -1258,7 +1262,8 @@ class mod_forum_external extends external_api {
             'discussionsubscribe' => true,
             'private'             => false,
             'inlineattachmentsid' => 0,
-            'attachmentsid' => null
+            'attachmentsid' => null,
+            'topreferredformat'   => false
         );
         foreach ($params['options'] as $option) {
             $name = trim($option['name']);
@@ -1279,6 +1284,9 @@ class mod_forum_external extends external_api {
                         $value = 0;
                     }
                     break;
+                case 'topreferredformat':
+                    $value = clean_param($option['value'], PARAM_BOOL);
+                    break;
                 default:
                     throw new moodle_exception('errorinvalidparam', 'webservice', '', $name);
             }
@@ -1292,13 +1300,24 @@ class mod_forum_external extends external_api {
         $thresholdwarning = forum_check_throttling($forumrecord, $cm);
         forum_check_blocking_threshold($thresholdwarning);
 
+        // If we want to force a conversion to the preferred format, let's do it now.
+        if ($options['topreferredformat']) {
+            // We always are going to honor the preferred format. We are creating a new post.
+            $preferredformat = editors_get_preferred_format();
+            // If the post is not HTML and the preferred format is HTML, convert to it.
+            if ($params['messageformat'] != FORMAT_HTML and $preferredformat == FORMAT_HTML) {
+                $params['message'] = format_text($params['message'], $params['messageformat'], ['context' => $context]);
+            }
+            $params['messageformat'] = $preferredformat;
+        }
+
         // Create the post.
         $post = new stdClass();
         $post->discussion = $discussion->get_id();
         $post->parent = $parent->id;
         $post->subject = $params['subject'];
         $post->message = $params['message'];
-        $post->messageformat = FORMAT_HTML;   // Force formatting for now.
+        $post->messageformat = $params['messageformat'];
         $post->messagetrust = trusttext_trusted($context);
         $post->itemid = $options['inlineattachmentsid'];
         $post->attachments = $options['attachmentsid'];
index 94a13fb..ec2fa05 100644 (file)
@@ -36,6 +36,7 @@ $confirm = optional_param('confirm', 0, PARAM_INT);
 $groupid = optional_param('groupid', null, PARAM_INT);
 $subject = optional_param('subject', '', PARAM_TEXT);
 $prefilledpost = optional_param('post', '', PARAM_TEXT);
+$prefilledpostformat = optional_param('postformat', FORMAT_MOODLE, PARAM_INT);
 $prefilledprivatereply = optional_param('privatereply', false, PARAM_BOOL);
 
 $PAGE->set_url('/mod/forum/post.php', array(
@@ -251,6 +252,17 @@ if (!empty($forum)) {
         print_error('cannotreplytoprivatereply', 'forum');
     }
 
+    // We always are going to honor the preferred format. We are creating a new post.
+    $preferredformat = editors_get_preferred_format();
+
+    // Only if there are prefilled contents coming.
+    if (!empty($prefilledpost)) {
+        // If the prefilled post is not HTML and the preferred format is HTML, convert to it.
+        if ($prefilledpostformat != FORMAT_HTML and $preferredformat == FORMAT_HTML) {
+            $prefilledpost = format_text($prefilledpost, $prefilledpostformat, ['context' => $modcontext]);
+        }
+    }
+
     // Load up the $post variable.
     $post = new stdClass();
     $post->course      = $course->id;
@@ -261,6 +273,7 @@ if (!empty($forum)) {
     $post->userid      = $USER->id;
     $post->parentpostauthor = $parent->userid;
     $post->message     = $prefilledpost;
+    $post->messageformat  = $preferredformat;
     $post->isprivatereply = $prefilledprivatereply;
     $canreplyprivately = $capabilitymanager->can_reply_privately_to_post($USER, $parententity);
 
@@ -737,7 +750,8 @@ $mformpost->set_data(
         'subject' => $post->subject,
         'message' => array(
             'text' => $currenttext,
-            'format' => empty($post->messageformat) ? editors_get_preferred_format() : $post->messageformat,
+            'format' => !isset($post->messageformat) || !is_numeric($post->messageformat) ?
+                editors_get_preferred_format() : $post->messageformat,
             'itemid' => $draftideditor
         ),
         'discussionsubscribe' => $discussionsubscribe,
index dcc175c..8a99d1d 100644 (file)
@@ -39,6 +39,7 @@
             <div class="row pb-1">
                 <span>
                     <textarea rows="5" name="post" title="post" class="w-100" placeholder="{{#str}} replyplaceholder, forum {{/str}}"></textarea>
+                    <input type="hidden" name="postformat" value="{{postformat}}"/>
                 </span>
                 <input type="hidden" name="subject" value="{{#str}} inpagereplysubject, forum, {{parentsubject}} {{/str}}"/>
                 <input type="hidden" name="reply" value="{{postid}}"/>
index 3cfeb47..5e903ac 100644 (file)
@@ -1581,11 +1581,38 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
             if ($createdpost['postid'] == $thispost['id']) {
                 $this->assertEquals('some subject', $thispost['subject']);
                 $this->assertEquals('some text here...', $thispost['message']);
+                $this->assertEquals(FORMAT_HTML, $thispost['messageformat']); // This is the default if format was not specified.
                 $tested = true;
             }
         }
         $this->assertTrue($tested);
 
+        // Let's simulate a call with any other format, it should be stored that way.
+        global $DB; // Yes, we are going to use DB facilities too, because cannot rely on other functions for checking
+                    // the format. They eat it completely (going back to FORMAT_HTML. So we only can trust DB for further
+                    // processing.
+        $formats = [FORMAT_PLAIN, FORMAT_MOODLE, FORMAT_MARKDOWN, FORMAT_HTML];
+        $options = [];
+        foreach ($formats as $format) {
+            $createdpost = mod_forum_external::add_discussion_post($discussion->firstpost,
+                'with some format', 'some formatted here...', $options, $format);
+            $createdpost = external_api::clean_returnvalue(mod_forum_external::add_discussion_post_returns(), $createdpost);
+            $dbformat = $DB->get_field('forum_posts', 'messageformat', ['id' => $createdpost['postid']]);
+            $this->assertEquals($format, $dbformat);
+        }
+
+        // Now let's try the 'topreferredformat' option. That should end with the content
+        // transformed and the format being FORMAT_HTML (when, like in this case,  user preferred
+        // format is HTML, inferred from editor in preferences).
+        $options = [['name' => 'topreferredformat', 'value' => true]];
+        $createdpost = mod_forum_external::add_discussion_post($discussion->firstpost,
+            'interesting subject', 'with some https://example.com link', $options, FORMAT_MOODLE);
+        $createdpost = external_api::clean_returnvalue(mod_forum_external::add_discussion_post_returns(), $createdpost);
+        $dbpost = $DB->get_record('forum_posts', ['id' => $createdpost['postid']]);
+        // Format HTML and content converted, we should get.
+        $this->assertEquals(FORMAT_HTML, $dbpost->messageformat);
+        $this->assertEquals('<div class="text_to_html">with some https://example.com link</div>', $dbpost->message);
+
         // Test inline and regular attachment in post
         // Create a file in a draft area for inline attachments.
         $draftidinlineattach = file_get_unused_draft_itemid();
@@ -1658,7 +1685,6 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
         } catch (moodle_exception $e) {
             $this->assertEquals('nopostforum', $e->errorcode);
         }
-
     }
 
     /*
index e6ecae3..4b1654c 100644 (file)
@@ -764,6 +764,53 @@ class mod_forum_mail_testcase extends advanced_testcase {
         $this->send_notifications_and_assert($author, [$reply]);
     }
 
+    public function test_subscription_by_inactive_users() {
+        global $DB;
+        $this->resetAfterTest(true);
+
+        $course = $this->getDataGenerator()->create_course();
+
+        $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
+        $forum = $this->getDataGenerator()->create_module('forum', $options);
+
+        // Create two users enrolled in the course as students.
+        list($author, $u1, $u2, $u3) = $this->helper_create_users($course, 4);
+
+        // Subscribe the three users to the forum.
+        \mod_forum\subscriptions::subscribe_user($u1->id, $forum);
+        \mod_forum\subscriptions::subscribe_user($u2->id, $forum);
+        \mod_forum\subscriptions::subscribe_user($u3->id, $forum);
+
+        // Make the first user inactive - suspended.
+        $DB->set_field('user', 'suspended', 1, ['id' => $u1->id]);
+
+        // Make the second user inactive - unable to log in.
+        $DB->set_field('user', 'auth', 'nologin', ['id' => $u2->id]);
+
+        // Post a discussion to the forum.
+        list($discussion, $post) = $this->helper_post_to_forum($forum, $author);
+
+        $expect = [
+            (object) [
+                'userid' => $u1->id,
+                'messages' => 0,
+            ],
+            (object) [
+                'userid' => $u2->id,
+                'messages' => 0,
+            ],
+            (object) [
+                'userid' => $u3->id,
+                'messages' => 1,
+            ],
+        ];
+
+        $this->queue_tasks_and_assert($expect);
+        $this->send_notifications_and_assert($u1, []);
+        $this->send_notifications_and_assert($u2, []);
+        $this->send_notifications_and_assert($u3, [$post]);
+    }
+
     public function test_forum_message_inbound_multiple_posts() {
         $this->resetAfterTest(true);
 
index f4730d4..6f5c9b9 100644 (file)
@@ -14,6 +14,7 @@ information provided here is intended especially for developers.
   * New external function mod_forum_external::get_forum_discussions returns a list of forum discussions optionally sorted and paginated.
   * External function mod_forum_external::get_forum_discussions_paginated has been deprecated.
     Use mod_forum_external::get_forum_discussions instead.
+  * External function mod_forum_external::add_discussion_post() has a new 'messageformat' param to be able to handle other formats different from FORMAT_HTML (that continues being the default one). Also a new 'topreferredformat' option enables the automatic conversion between any format and the preferred format (given the editor preference) before contents are saved.
 
 === 3.6 ===
 
index 748a79a..b1a22ed 100644 (file)
@@ -100,5 +100,8 @@ function xmldb_glossary_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;
 }
index ac32ec4..c897c08 100644 (file)
@@ -43,5 +43,8 @@ function xmldb_imscp_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;
 }
index 7212edc..a6f9dc1 100644 (file)
@@ -70,5 +70,8 @@ function xmldb_label_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;
 }
index a3b5ce3..3d24f04 100644 (file)
@@ -110,5 +110,8 @@ function xmldb_lesson_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;
 }
index b152c0a..0ca0b1e 100644 (file)
@@ -59,6 +59,7 @@ class lesson_import_form extends moodleform {
      * @param array $data the submitted data.
      * @param array $errors the errors so far.
      * @return array the updated errors.
+     * @throws moodle_exception
      */
     protected function validate_uploaded_file($data, $errors) {
         global $CFG;
@@ -69,7 +70,7 @@ class lesson_import_form extends moodleform {
         }
 
         $files = $this->get_draft_files('questionfile');
-        if (count($files) < 1) {
+        if (!is_array($files) || count($files) < 1) {
             $errors['questionfile'] = get_string('required');
             return $errors;
         }
index 4d313e5..e605f01 100644 (file)
@@ -218,5 +218,8 @@ function xmldb_lti_upgrade($oldversion) {
         upgrade_mod_savepoint(true, 2019031302, 'lti');
     }
 
+    // Automatically generated Moodle v3.7.0 release upgrade line.
+    // Put any upgrade step following this.
+
     return true;
 }
index a284b2e..6e12641 100644 (file)
@@ -59,5 +59,8 @@ function xmldb_page_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;
 }
index 1f6674a..87d2943 100644 (file)
@@ -588,7 +588,7 @@ class quiz_attempt {
         $this->quba = question_engine::load_questions_usage_by_activity($this->attempt->uniqueid);
         $this->slots = $DB->get_records('quiz_slots',
                 array('quizid' => $this->get_quizid()), 'slot',
-                'slot, requireprevious, questionid, includingsubcategories');
+                'slot, id, requireprevious, questionid, includingsubcategories');
         $this->sections = array_values($DB->get_records('quiz_sections',
                 array('quizid' => $this->get_quizid()), 'firstslot'));
 
index 9c38f7e..cfdc4a8 100644 (file)
@@ -1299,7 +1299,8 @@ class mod_quiz_external extends external_api {
             if (!$attemptobj->is_finished()) {
                 throw new moodle_quiz_exception($attemptobj->get_quizobj(), 'attemptclosed');
             } else if (!$displayoptions->attempt) {
-                throw new moodle_exception($attemptobj->cannot_review_message());
+                throw new moodle_quiz_exception($attemptobj->get_quizobj(), 'noreview', null, '',
+                    $attemptobj->cannot_review_message());
             }
         } else if (!$attemptobj->is_review_allowed()) {
             throw new moodle_quiz_exception($attemptobj->get_quizobj(), 'noreviewattempt');
index fea86fb..7c0a426 100644 (file)
@@ -147,5 +147,8 @@ function xmldb_quiz_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;
 }
index 13ca01a..8979e3f 100644 (file)
@@ -79,5 +79,8 @@ function xmldb_quiz_overview_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;
 }
index a4c0d3f..264ff74 100644 (file)
@@ -42,5 +42,8 @@ function xmldb_quiz_statistics_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;
 }
index 218976a..fbadb44 100644 (file)
@@ -30,11 +30,11 @@ Feature: Allow students to redo questions in a practice quiz, without starting a
       | question | page | maxmark |
       | TF1      | 1    | 2       |
       | TF2      | 1    | 1       |
-    And I log in as "student"
-    And I am on "Course 1" course homepage
 
   @javascript
   Scenario: After completing a question, there is a redo question button that restarts the question
+    Given I log in as "student"
+    And I am on "Course 1" course homepage
     When I follow "Quiz 1"
     And I press "Attempt quiz now"
     And I click on "False" "radio" in the "First question" "question"
@@ -45,6 +45,8 @@ Feature: Allow students to redo questions in a practice quiz, without starting a
 
   @javascript
   Scenario: The redo question button is visible but disabled for teachers
+    Given I log in as "student"
+    And I am on "Course 1" course homepage
     When I follow "Quiz 1"
     And I press "Attempt quiz now"
     And I click on "False" "radio" in the "First question" "question"
@@ -59,6 +61,8 @@ Feature: Allow students to redo questions in a practice quiz, without starting a
 
   @javascript
   Scenario: The redo question buttons are no longer visible after the attempt is submitted.
+    Given I log in as "student"
+    And I am on "Course 1" course homepage
     When I follow "Quiz 1"
     And I press "Attempt quiz now"
     And I click on "False" "radio" in the "First question" "question"
@@ -70,6 +74,8 @@ Feature: Allow students to redo questions in a practice quiz, without starting a
 
   @javascript @_switch_window
   Scenario: Teachers reviewing can see all the qestions attempted in a slot
+    Given I log in as "student"
+    And I am on "Course 1" course homepage
     When I follow "Quiz 1"
     And I press "Attempt quiz now"
     And I click on "False" "radio" in the "First question" "question"
@@ -100,6 +106,8 @@ Feature: Allow students to redo questions in a practice quiz, without starting a
 
   @javascript
   Scenario: Redoing question 1 should save any changes to question 2 on the same page
+    Given I log in as "student"
+    And I am on "Course 1" course homepage
     When I follow "Quiz 1"
     And I press "Attempt quiz now"
     And I click on "False" "radio" in the "First question" "question"
@@ -108,3 +116,23 @@ Feature: Allow students to redo questions in a practice quiz, without starting a
     And I press "Try another question like this one"
     And I click on "Check" "button" in the "Second question" "question"
     Then the state of "Second question" question is shown as "Correct"
+
+  @javascript
+  Scenario: Redoing questions should work with random questions as well
+    Given the following "questions" exist:
+      | questioncategory | qtype       | name                    | questiontext |
+      | Test questions   | random      | Random (Test questions) | 0            |
+    And the following "activities" exist:
+      | activity   | name   | intro              | course | idnumber | preferredbehaviour | canredoquestions |
+      | quiz       | Quiz 2 | Quiz 2 description | C1     | quiz2    | immediatefeedback  | 1                |
+    And quiz "Quiz 2" contains the following questions:
+      | question                | page |
+      | Random (Test questions) | 1    |
+    And I log in as "student"
+    And I am on "Course 1" course homepage
+    When I follow "Quiz 2"
+    And I press "Attempt quiz now"
+    And I click on "False" "radio"
+    And I click on "Check" "button"
+    And I press "Try another question like this one"
+    Then "Check" "button" should exist
index 85b16c1..fc005c7 100644 (file)
@@ -59,5 +59,8 @@ function xmldb_resource_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;
 }
index 5d2380f..f1e661e 100644 (file)
@@ -79,5 +79,8 @@ function xmldb_scorm_upgrade($oldversion) {
         upgrade_mod_savepoint(true, 2018123100, 'scorm');
     }
 
+    // Automatically generated Moodle v3.7.0 release upgrade line.
+    // Put any upgrade step following this.
+
     return true;
 }
index 4a00899..33a81e6 100644 (file)
@@ -36,5 +36,8 @@ function xmldb_survey_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;
 }
index 3065e64..5543f20 100644 (file)
@@ -59,5 +59,8 @@ function xmldb_url_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;
 }
index 5b179a9..ad21e70 100644 (file)
@@ -52,5 +52,8 @@ function xmldb_wiki_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;
 }
index 9acd30f..fe16f0f 100644 (file)
@@ -109,5 +109,8 @@ function xmldb_workshop_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;
 }
index c5cb7bb..c2f52d5 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_workshopform_accumulative_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;
 }
index 79b166b..eacb0e9 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_workshopform_comments_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;
 }
index 9d53ee9..5eade3a 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_workshopform_numerrors_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;
 }
index d40d5e5..0984cb7 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_workshopform_rubric_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;
 }
index 0d8fc59..1cde289 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_portfolio_boxnet_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;
 }
index 2f957c1..0a9e08b 100644 (file)
@@ -35,5 +35,8 @@ function xmldb_portfolio_googledocs_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;
 }
index f745e0f..f006680 100644 (file)
@@ -35,5 +35,8 @@ function xmldb_portfolio_picasa_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;
 }
index 45f5cd0..5b49339 100644 (file)
@@ -42,5 +42,8 @@ function xmldb_qbehaviour_manualgraded_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;
 }
index ad2cc18..f4693e4 100644 (file)
@@ -112,6 +112,7 @@ class question_import_form extends moodleform {
      * @param array $data the submitted data.
      * @param array $errors the errors so far.
      * @return array the updated errors.
+     * @throws moodle_exception
      */
     protected function validate_uploaded_file($data, $errors) {
         if (empty($data['newfile'])) {
@@ -120,7 +121,7 @@ class question_import_form extends moodleform {
         }
 
         $files = $this->get_draft_files('newfile');
-        if (count($files) < 1) {
+        if (!is_array($files) || count($files) < 1) {
             $errors['newfile'] = get_string('required');
             return $errors;
         }
index a639b00..6769936 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_qtype_calculated_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;
 }
index 160f0f2..8dbd518 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_qtype_ddmarker_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;
 }
index 93acbb4..46e30cf 100644 (file)
@@ -61,5 +61,8 @@ function xmldb_qtype_essay_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;
 }
index 1dd18fc..bf8d924 100644 (file)
@@ -43,5 +43,8 @@ function xmldb_qtype_match_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;
 }
index e0bd450..f107175 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_qtype_multianswer_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;
 }
index b2dc15b..e182cae 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_qtype_multichoice_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;
 }
index e303c1d..8aef850 100644 (file)
@@ -58,5 +58,8 @@ function xmldb_qtype_numerical_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;
 }
index cb50b67..95ee4c4 100644 (file)
@@ -43,5 +43,8 @@ function xmldb_qtype_random_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;
 }
index c8471b4..d98bf53 100644 (file)
@@ -43,5 +43,8 @@ function xmldb_qtype_randomsamatch_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;
 }
index 63031fe..8b8c274 100644 (file)
@@ -44,5 +44,8 @@ function xmldb_qtype_shortanswer_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;
 }
index 71cc939..98e554b 100644 (file)
Binary files a/report/insights/amd/build/actions.min.js and b/report/insights/amd/build/actions.min.js differ
index 3c98868..833d32d 100644 (file)
@@ -26,7 +26,7 @@
  *
  * @module report_insights/actions
  */
-define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {
+define(['jquery', 'core/ajax', 'core/notification', 'core/url'], function($, Ajax, Notification, Url) {
 
     return {
 
@@ -34,9 +34,11 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat
          * Attach on click handlers to hide predictions.
          *
          * @param {Number} predictionId The prediction id.
+         * @param {Number} contextId The context in which the prediction was made.
+         * @param {Number} modelId The model id model with which the prediction was made.
          * @access public
          */
-        init: function(predictionId) {
+        init: function(predictionId, contextId, modelId) {
 
             // Select the prediction with the provided id ensuring that an external function is set as method name.
             $('a[data-prediction-methodname][data-prediction-id=' + predictionId + ']').on('click', function(e) {
@@ -57,11 +59,13 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat
 
                         // Move back if no remaining predictions.
                         if ($('.insights-list tr').length < 2) {
-                            if (document.referrer) {
-                                window.location.assign(document.referrer);
-                            } else {
-                                window.location.reload(true);
-                            }
+                            var params = {
+                                contextid: contextId,
+                                modelid: modelId
+                            };
+
+                            var queryparams = $.param(params);
+                            window.location.assign(Url.relativeUrl("report/insights/insights.php?" + queryparams));
                         }
                     }).fail(Notification.exception);
                 }
index 41d2126..baafa6d 100644 (file)
@@ -45,5 +45,8 @@ function xmldb_repository_boxnet_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;
 }
index 73aaf94..6207d49 100644 (file)
@@ -35,5 +35,8 @@ function xmldb_repository_dropbox_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;
 }
index 4698713..ef2d1f4 100644 (file)
@@ -53,5 +53,8 @@ function xmldb_repository_flickr_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;
 }
index 3266380..1ca4dd0 100644 (file)
@@ -67,5 +67,8 @@ function xmldb_repository_googledocs_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;
 }
index c27f339..b58098c 100644 (file)
@@ -40,5 +40,8 @@ function xmldb_repository_onedrive_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;
 }
index 3ec6125..5ac7ef1 100644 (file)
@@ -35,5 +35,8 @@ function xmldb_repository_picasa_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;
 }
index 59f1fe7..0f14a02 100644 (file)
 
 defined('MOODLE_INTERNAL') || die();
 
-$version  = 2019051600.00;              // YYYYMMDD      = weekly release date of this DEV branch.
+$version  = 2019052000.00;              // YYYYMMDD      = weekly release date of this DEV branch.
                                         //         RR    = release increments - 00 in DEV branches.
                                         //           .XX = incremental changes.
 
-$release  = '3.7rc2 (Build: 20190516)'; // Human-friendly version name
+$release  = '3.8dev (Build: 20190520)'; // Human-friendly version name
 
-$branch   = '37';                       // This version's branch.
-$maturity = MATURITY_RC;             // This version's maturity level.
+$branch   = '38';                       // This version's branch.
+$maturity = MATURITY_ALPHA;             // This version's maturity level.