Merge branch 'MDL-65438-master' of git://github.com/bmbrands/moodle
authorAdrian Greeve <abgreeve@gmail.com>
Mon, 10 Jun 2019 05:56:51 +0000 (13:56 +0800)
committerAdrian Greeve <abgreeve@gmail.com>
Mon, 10 Jun 2019 05:56:51 +0000 (13:56 +0800)
996 files changed:
.eslintignore
.stylelintignore
.travis.yml
admin/message.php
admin/roles/classes/permissions_table.php
admin/roles/permissions.php
admin/settings/badges.php
admin/settings/courses.php
admin/settings/frontpage.php
admin/settings/subsystems.php
admin/templates/setting_configduration.mustache
admin/tests/behat/enable_multiple_accounts_use_same_email.feature
admin/tests/behat/filter_users.feature
admin/tool/analytics/amd/build/model.min.js
admin/tool/analytics/amd/src/model.js
admin/tool/analytics/classes/output/models_list.php
admin/tool/analytics/classes/output/renderer.php
admin/tool/analytics/cli/enable_model.php
admin/tool/analytics/cli/evaluate_model.php
admin/tool/analytics/cli/guess_course_start_and_end.php
admin/tool/analytics/lang/en/deprecated.txt [new file with mode: 0644]
admin/tool/analytics/lang/en/tool_analytics.php
admin/tool/analytics/model.php
admin/tool/analytics/templates/models_list.mustache
admin/tool/analytics/version.php
admin/tool/availabilityconditions/version.php
admin/tool/behat/version.php
admin/tool/capability/version.php
admin/tool/cohortroles/version.php
admin/tool/customlang/db/upgrade.php
admin/tool/customlang/templates/translator.mustache
admin/tool/customlang/version.php
admin/tool/dataprivacy/db/upgrade.php
admin/tool/dataprivacy/templates/my_data_requests.mustache
admin/tool/dataprivacy/templates/request_details.mustache
admin/tool/dataprivacy/version.php
admin/tool/dbtransfer/version.php
admin/tool/filetypes/version.php
admin/tool/generator/version.php
admin/tool/health/version.php
admin/tool/httpsreplace/version.php
admin/tool/innodb/version.php
admin/tool/installaddon/version.php
admin/tool/langimport/version.php
admin/tool/log/db/upgrade.php
admin/tool/log/store/database/db/upgrade.php
admin/tool/log/store/database/version.php
admin/tool/log/store/legacy/version.php
admin/tool/log/store/standard/db/upgrade.php
admin/tool/log/store/standard/version.php
admin/tool/log/version.php
admin/tool/lp/amd/build/competencies.min.js
admin/tool/lp/amd/build/course_competency_settings.min.js
admin/tool/lp/amd/build/module_navigation.min.js [new file with mode: 0644]
admin/tool/lp/amd/src/competencies.js
admin/tool/lp/amd/src/course_competency_settings.js
admin/tool/lp/amd/src/module_navigation.js [new file with mode: 0644]
admin/tool/lp/classes/external.php
admin/tool/lp/classes/output/course_competencies_page.php
admin/tool/lp/classes/output/module_navigation.php [new file with mode: 0644]
admin/tool/lp/classes/output/renderer.php
admin/tool/lp/coursecompetencies.php
admin/tool/lp/lang/en/tool_lp.php
admin/tool/lp/templates/course_competencies_page.mustache
admin/tool/lp/templates/module_navigation.mustache [new file with mode: 0644]
admin/tool/lp/tests/behat/course_competencies.feature [new file with mode: 0644]
admin/tool/lp/tests/externallib_test.php
admin/tool/lp/version.php
admin/tool/lpimportcsv/version.php
admin/tool/lpmigrate/version.php
admin/tool/messageinbound/classes/manager.php
admin/tool/messageinbound/version.php
admin/tool/mobile/classes/api.php
admin/tool/mobile/db/upgrade.php
admin/tool/mobile/version.php
admin/tool/monitor/db/upgrade.php
admin/tool/monitor/version.php
admin/tool/multilangupgrade/version.php
admin/tool/oauth2/version.php
admin/tool/phpunit/version.php
admin/tool/policy/db/upgrade.php
admin/tool/policy/version.php
admin/tool/profiling/version.php
admin/tool/recyclebin/version.php
admin/tool/replace/version.php
admin/tool/spamcleaner/version.php
admin/tool/task/cli/schedule_task.php
admin/tool/task/version.php
admin/tool/templatelibrary/version.php
admin/tool/unsuproles/version.php
admin/tool/uploadcourse/version.php
admin/tool/uploaduser/classes/local/field_value_validators.php [new file with mode: 0644]
admin/tool/uploaduser/index.php
admin/tool/uploaduser/lang/en/tool_uploaduser.php
admin/tool/uploaduser/locallib.php
admin/tool/uploaduser/tests/behat/upload_users.feature
admin/tool/uploaduser/tests/field_value_validators_test.php [new file with mode: 0644]
admin/tool/uploaduser/version.php
admin/tool/usertours/db/upgrade.php
admin/tool/usertours/version.php
admin/tool/xmldb/version.php
analytics/classes/analysis.php
analytics/classes/local/indicator/community_of_inquiry_activity.php
analytics/classes/local/target/base.php
analytics/classes/local/time_splitting/base.php
analytics/classes/model.php
analytics/tests/analysis_test.php
analytics/tests/stats_test.php
analytics/upgrade.txt
auth/cas/db/upgrade.php
auth/cas/version.php
auth/db/db/upgrade.php
auth/db/tests/db_test.php
auth/db/version.php
auth/email/db/upgrade.php
auth/email/version.php
auth/ldap/db/upgrade.php
auth/ldap/lang/en/auth_ldap.php
auth/ldap/version.php
auth/lti/version.php
auth/manual/db/upgrade.php
auth/manual/version.php
auth/mnet/db/upgrade.php
auth/mnet/version.php
auth/nologin/version.php
auth/none/db/upgrade.php
auth/none/version.php
auth/oauth2/db/upgrade.php
auth/oauth2/version.php
auth/shibboleth/db/upgrade.php
auth/shibboleth/version.php
auth/webservice/version.php
availability/condition/completion/version.php
availability/condition/date/version.php
availability/condition/grade/version.php
availability/condition/group/version.php
availability/condition/grouping/version.php
availability/condition/profile/version.php
backup/backup.class.php
backup/moodle2/restore_stepslib.php
backup/tests/async_backup_test.php
backup/util/helper/async_helper.class.php
backup/util/helper/backup_cron_helper.class.php
backup/util/helper/tests/cronhelper_test.php
badges/action.php
badges/alignment.php
badges/assertion.php
badges/backpack-add.php [new file with mode: 0644]
badges/backpack.js
badges/backpackemailverify.php
badges/backpacks.php [new file with mode: 0644]
badges/badge.php
badges/badge_json.php
badges/classes/assertion.php
badges/classes/backpack_api.php [new file with mode: 0644]
badges/classes/backpack_api_mapping.php [new file with mode: 0644]
badges/classes/badge.php [new file with mode: 0644]
badges/classes/external.php
badges/classes/external/alignment_exporter.php
badges/classes/external/assertion_exporter.php [new file with mode: 0644]
badges/classes/external/backpack_exporter.php [new file with mode: 0644]
badges/classes/external/badgeclass_exporter.php [new file with mode: 0644]
badges/classes/external/collection_exporter.php [new file with mode: 0644]
badges/classes/external/issuer_exporter.php [new file with mode: 0644]
badges/classes/external/recipient_exporter.php [new file with mode: 0644]
badges/classes/external/user_badge_exporter.php
badges/classes/external/verification_exporter.php [new file with mode: 0644]
badges/classes/form/backpack.php [moved from badges/backpack_form.php with 60% similarity]
badges/classes/form/badge.php [moved from badges/edit_form.php with 71% similarity]
badges/classes/form/collections.php [new file with mode: 0644]
badges/classes/form/external_backpack.php [new file with mode: 0644]
badges/classes/form/message.php [new file with mode: 0644]
badges/classes/observer.php
badges/classes/output/badge_alignments.php [new file with mode: 0644]
badges/classes/output/badge_collection.php [new file with mode: 0644]
badges/classes/output/badge_management.php [new file with mode: 0644]
badges/classes/output/badge_recipients.php [new file with mode: 0644]
badges/classes/output/badge_related.php [new file with mode: 0644]
badges/classes/output/badge_user_collection.php [new file with mode: 0644]
badges/classes/output/external_backpacks_page.php [new file with mode: 0644]
badges/classes/output/external_backpacks_table.php [new file with mode: 0644]
badges/classes/output/external_badge.php [new file with mode: 0644]
badges/classes/output/issued_badge.php [new file with mode: 0644]
badges/classes/privacy/provider.php
badges/criteria/award_criteria_competency.php
badges/edit.php
badges/external.php
badges/index.php
badges/lib/backpacklib.php [deleted file]
badges/mybackpack.php
badges/mybadges.php
badges/newbadge.php
badges/recipients.php
badges/related.php
badges/renderer.php
badges/templates/external_backpacks_page.mustache [new file with mode: 0644]
badges/tests/badgeslib_test.php
badges/tests/behat/add_badge.feature
badges/tests/behat/criteria_competency.feature
badges/tests/external_test.php
badges/upgrade.txt
badges/view.php
blocks/activity_modules/version.php
blocks/activity_results/version.php
blocks/admin_bookmarks/version.php
blocks/badges/db/upgrade.php
blocks/badges/version.php
blocks/blog_menu/version.php
blocks/blog_recent/version.php
blocks/blog_tags/version.php
blocks/calendar_month/db/upgrade.php
blocks/calendar_month/version.php
blocks/calendar_upcoming/db/upgrade.php
blocks/calendar_upcoming/version.php
blocks/comments/version.php
blocks/community/db/upgrade.php
blocks/community/version.php
blocks/completionstatus/db/upgrade.php
blocks/completionstatus/version.php
blocks/course_list/version.php
blocks/course_summary/db/upgrade.php
blocks/course_summary/version.php
blocks/feedback/version.php
blocks/globalsearch/version.php
blocks/glossary_random/version.php
blocks/html/db/upgrade.php
blocks/html/version.php
blocks/login/version.php
blocks/lp/version.php
blocks/mentees/version.php
blocks/mnet_hosts/version.php
blocks/moodleblock.class.php
blocks/myoverview/templates/view-cards.mustache
blocks/myoverview/version.php
blocks/myprofile/version.php
blocks/navigation/db/upgrade.php
blocks/navigation/version.php
blocks/news_items/version.php
blocks/online_users/version.php
blocks/participants/version.php
blocks/private_files/version.php
blocks/quiz_results/db/upgrade.php
blocks/quiz_results/version.php
blocks/recent_activity/db/upgrade.php
blocks/recent_activity/version.php
blocks/recentlyaccessedcourses/version.php
blocks/recentlyaccesseditems/version.php
blocks/rss_client/db/upgrade.php
blocks/rss_client/version.php
blocks/search_forums/version.php
blocks/section_links/db/upgrade.php
blocks/section_links/version.php
blocks/selfcompletion/db/upgrade.php
blocks/selfcompletion/version.php
blocks/settings/db/upgrade.php
blocks/settings/version.php
blocks/site_main_menu/version.php
blocks/social_activities/version.php
blocks/starredcourses/version.php
blocks/tag_flickr/version.php
blocks/tag_youtube/version.php
blocks/tags/version.php
blocks/timeline/version.php
cache/locks/file/version.php
cache/stores/apcu/version.php
cache/stores/file/version.php
cache/stores/memcached/version.php
cache/stores/mongodb/version.php
cache/stores/redis/version.php
cache/stores/session/version.php
cache/stores/static/version.php
calendar/classes/external/event_exporter_base.php
calendar/classes/local/event/data_access/event_vault.php
calendar/export_execute.php
calendar/lib.php
calendar/templates/event_details.mustache
calendar/type/gregorian/version.php
cohort/tests/externallib_test.php
cohort/upload.php
cohort/upload_form.php
competency/tests/external_test.php
competency/tests/privacy_test.php
composer.json
composer.lock
course/classes/analytics/target/course_competencies.php
course/classes/analytics/target/course_completion.php
course/classes/analytics/target/course_dropout.php
course/classes/analytics/target/course_enrolments.php
course/classes/analytics/target/course_gradetopass.php
course/classes/external/course_summary_exporter.php
course/format/singleactivity/version.php
course/format/social/version.php
course/format/topics/db/upgrade.php
course/format/topics/tests/format_topics_test.php
course/format/topics/version.php
course/format/weeks/db/upgrade.php
course/format/weeks/tests/format_weeks_test.php
course/format/weeks/version.php
course/publish/backup.php
course/templates/coursecard.mustache
course/tests/courselib_test.php
course/tests/externallib_test.php
course/upgrade.txt
customfield/amd/build/form.min.js
customfield/amd/src/form.js
customfield/field/checkbox/classes/data_controller.php
customfield/field/checkbox/version.php
customfield/field/date/version.php
customfield/field/select/version.php
customfield/field/text/version.php
customfield/field/textarea/tests/behat/default_value.feature
customfield/field/textarea/version.php
customfield/tests/behat/edit_fields_settings.feature
customfield/tests/data_controller_test.php
dataformat/csv/version.php
dataformat/excel/version.php
dataformat/html/version.php
dataformat/json/version.php
dataformat/ods/version.php
dataformat/pdf/version.php
enrol/category/version.php
enrol/cohort/version.php
enrol/database/db/upgrade.php
enrol/database/tests/sync_test.php
enrol/database/version.php
enrol/flatfile/db/upgrade.php
enrol/flatfile/version.php
enrol/guest/db/upgrade.php
enrol/guest/version.php
enrol/imsenterprise/db/upgrade.php
enrol/imsenterprise/version.php
enrol/ldap/version.php
enrol/lti/classes/helper.php
enrol/lti/db/upgrade.php
enrol/lti/version.php
enrol/manual/db/upgrade.php
enrol/manual/version.php
enrol/meta/version.php
enrol/mnet/db/upgrade.php
enrol/mnet/version.php
enrol/paypal/db/upgrade.php
enrol/paypal/version.php
enrol/self/db/upgrade.php
enrol/self/tests/self_test.php
enrol/self/version.php
favourites/classes/local/service/component_favourite_service.php [new file with mode: 0644]
favourites/classes/service_factory.php
favourites/tests/component_favourite_service_test.php [new file with mode: 0644]
favourites/tests/repository_test.php
favourites/tests/user_favourite_service_test.php [moved from favourites/tests/service_test.php with 100% similarity]
files/converter/googledrive/version.php
files/converter/unoconv/version.php
filter/activitynames/version.php
filter/algebra/version.php
filter/censor/version.php
filter/data/version.php
filter/emailprotect/version.php
filter/emoticon/version.php
filter/glossary/version.php
filter/mathjaxloader/db/upgrade.php
filter/mathjaxloader/version.php
filter/mediaplugin/db/upgrade.php
filter/mediaplugin/version.php
filter/multilang/filter.php
filter/multilang/tests/filter_test.php [new file with mode: 0644]
filter/multilang/version.php
filter/tex/db/upgrade.php
filter/tex/version.php
filter/tidy/version.php
filter/urltolink/version.php
grade/export/ods/version.php
grade/export/txt/version.php
grade/export/xls/version.php
grade/export/xml/version.php
grade/grading/form/guide/db/upgrade.php
grade/grading/form/guide/version.php
grade/grading/form/rubric/db/upgrade.php
grade/grading/form/rubric/edit.php
grade/grading/form/rubric/version.php
grade/import/csv/version.php
grade/import/direct/version.php
grade/import/xml/version.php
grade/report/grader/version.php
grade/report/history/version.php
grade/report/outcomes/version.php
grade/report/overview/db/upgrade.php
grade/report/overview/version.php
grade/report/singleview/version.php
grade/report/user/db/upgrade.php
grade/report/user/version.php
grade/templates/edit_tree.mustache
group/tests/privacy_provider_test.php
install.php
install/css.php
install/lang/ca_wp/langconfig.php [new file with mode: 0644]
install/lang/el/admin.php
install/lang/el/error.php
install/lang/el/install.php
install/lang/el_wp/admin.php [new file with mode: 0644]
install/lang/el_wp/langconfig.php [new file with mode: 0644]
install/lang/el_wp/moodle.php [new file with mode: 0644]
install/lang/es_ve/langconfig.php
install/lang/id/install.php [new file with mode: 0644]
install/lang/pt/install.php
install/lang/rw/langconfig.php [new file with mode: 0644]
install/lang/sw/moodle.php [moved from lib/sessionkeepalive_ajax.php with 59% similarity]
lang/en/analytics.php
lang/en/badges.php
lang/en/customfield.php
lang/en/deprecated.txt
lang/en/error.php
lang/en/group.php
lang/en/message.php
lang/en/moodle.php
lib/ajax/service.php
lib/amd/build/ajax.min.js
lib/amd/build/network.min.js [new file with mode: 0644]
lib/amd/build/page_global.min.js
lib/amd/build/permissionmanager.min.js
lib/amd/src/ajax.js
lib/amd/src/network.js [new file with mode: 0644]
lib/amd/src/page_global.js
lib/amd/src/permissionmanager.js
lib/antivirus/clamav/db/upgrade.php
lib/antivirus/clamav/version.php
lib/badgeslib.php
lib/behat/classes/partial_named_selector.php
lib/behat/lib.php
lib/classes/component.php
lib/classes/hub/registration.php
lib/classes/message/inbound/private_files_handler.php
lib/classes/plugin_manager.php
lib/classes/session/external.php [new file with mode: 0644]
lib/classes/session/manager.php
lib/classes/task/grade_cron_task.php
lib/db/analytics.php
lib/db/install.php
lib/db/install.xml
lib/db/services.php
lib/db/upgrade.php
lib/editor/atto/db/upgrade.php
lib/editor/atto/plugins/accessibilitychecker/version.php
lib/editor/atto/plugins/accessibilityhelper/version.php
lib/editor/atto/plugins/align/version.php
lib/editor/atto/plugins/backcolor/version.php
lib/editor/atto/plugins/bold/version.php
lib/editor/atto/plugins/charmap/version.php
lib/editor/atto/plugins/clear/version.php
lib/editor/atto/plugins/collapse/version.php
lib/editor/atto/plugins/emoticon/version.php
lib/editor/atto/plugins/equation/db/upgrade.php
lib/editor/atto/plugins/equation/version.php
lib/editor/atto/plugins/fontcolor/version.php
lib/editor/atto/plugins/html/version.php
lib/editor/atto/plugins/image/version.php
lib/editor/atto/plugins/indent/version.php
lib/editor/atto/plugins/italic/version.php
lib/editor/atto/plugins/link/version.php
lib/editor/atto/plugins/managefiles/version.php
lib/editor/atto/plugins/media/version.php
lib/editor/atto/plugins/noautolink/version.php
lib/editor/atto/plugins/orderedlist/version.php
lib/editor/atto/plugins/recordrtc/version.php
lib/editor/atto/plugins/rtl/version.php
lib/editor/atto/plugins/strike/version.php
lib/editor/atto/plugins/subscript/version.php
lib/editor/atto/plugins/superscript/version.php
lib/editor/atto/plugins/table/version.php
lib/editor/atto/plugins/title/version.php
lib/editor/atto/plugins/underline/version.php
lib/editor/atto/plugins/undo/version.php
lib/editor/atto/plugins/unorderedlist/version.php
lib/editor/atto/version.php
lib/editor/classes/privacy/provider.php
lib/editor/tests/privacy_provider_test.php
lib/editor/textarea/version.php
lib/editor/tinymce/db/upgrade.php
lib/editor/tinymce/plugins/ctrlhelp/version.php
lib/editor/tinymce/plugins/managefiles/version.php
lib/editor/tinymce/plugins/moodleemoticon/version.php
lib/editor/tinymce/plugins/moodleimage/version.php
lib/editor/tinymce/plugins/moodlemedia/version.php
lib/editor/tinymce/plugins/moodlenolink/version.php
lib/editor/tinymce/plugins/pdw/version.php
lib/editor/tinymce/plugins/spellchecker/db/upgrade.php
lib/editor/tinymce/plugins/spellchecker/version.php
lib/editor/tinymce/plugins/wrap/version.php
lib/editor/tinymce/version.php
lib/filelib.php
lib/form/cancel.php
lib/form/submit.php
lib/formslib.php
lib/installlib.php
lib/mlbackend/php/lang/en/mlbackend_php.php
lib/mlbackend/php/version.php
lib/mlbackend/python/version.php
lib/outputlib.php
lib/outputrenderers.php
lib/outputrequirementslib.php
lib/php-jwt/LICENSE [new file with mode: 0644]
lib/php-jwt/README.md [new file with mode: 0644]
lib/php-jwt/composer.json [new file with mode: 0644]
lib/php-jwt/readme_moodle.txt [new file with mode: 0644]
lib/php-jwt/src/BeforeValidException.php [new file with mode: 0644]
lib/php-jwt/src/ExpiredException.php [new file with mode: 0644]
lib/php-jwt/src/JWT.php [new file with mode: 0644]
lib/php-jwt/src/SignatureInvalidException.php [new file with mode: 0644]
lib/setuplib.php
lib/tablelib.php
lib/templates/block.mustache
lib/templates/dataformat_selector.mustache
lib/testing/generator/data_generator.php
lib/tests/accesslib_test.php
lib/tests/behat/behat_data_generators.php
lib/tests/behat/permissionmanager.feature [new file with mode: 0644]
lib/tests/fixtures/upload_users_themes.csv [new file with mode: 0644]
lib/tests/other/pdflibtestpage.php
lib/tests/tablelib_test.php
lib/tests/targets_test.php
lib/thirdpartylibs.xml
lib/upgrade.txt
lib/yui/build/moodle-core-checknet/assets/checknet.txt [deleted file]
lib/yui/build/moodle-core-checknet/moodle-core-checknet-debug.js [deleted file]
lib/yui/build/moodle-core-checknet/moodle-core-checknet-min.js [deleted file]
lib/yui/build/moodle-core-checknet/moodle-core-checknet.js [deleted file]
lib/yui/src/checknet/assets/checknet.txt [deleted file]
lib/yui/src/checknet/build.json [deleted file]
lib/yui/src/checknet/js/checknet.js [deleted file]
lib/yui/src/checknet/meta/checknet.json [deleted file]
media/player/html5audio/version.php
media/player/html5video/version.php
media/player/swf/version.php
media/player/videojs/version.php
media/player/vimeo/version.php
media/player/youtube/version.php
message/amd/build/message_drawer_view_conversation.min.js
message/amd/build/message_drawer_view_conversation_constants.min.js
message/amd/build/message_drawer_view_conversation_patcher.min.js
message/amd/build/message_drawer_view_conversation_renderer.min.js
message/amd/build/message_drawer_view_conversation_state_manager.min.js
message/amd/build/message_repository.min.js
message/amd/src/message_drawer_view_conversation.js
message/amd/src/message_drawer_view_conversation_constants.js
message/amd/src/message_drawer_view_conversation_patcher.js
message/amd/src/message_drawer_view_conversation_renderer.js
message/amd/src/message_drawer_view_conversation_state_manager.js
message/amd/src/message_repository.js
message/classes/api.php
message/classes/helper.php
message/externallib.php
message/lib.php
message/output/airnotifier/version.php
message/output/email/db/upgrade.php
message/output/email/version.php
message/output/jabber/db/upgrade.php
message/output/jabber/version.php
message/output/popup/db/upgrade.php
message/output/popup/version.php
message/templates/message_drawer_view_conversation_body.mustache
message/templates/message_drawer_view_conversation_body_confirm_dialogue.mustache
message/tests/api_test.php
message/tests/behat/delete_messages.feature [new file with mode: 0644]
message/tests/behat/favourite_conversations.feature
message/tests/behat/group_conversation.feature
message/tests/behat/message_delete_conversation.feature
message/tests/behat/message_drawer_manage_contacts.feature
message/tests/behat/message_manage_preferences.feature
message/tests/behat/message_send_messages.feature
message/tests/behat/self_conversation.feature [new file with mode: 0644]
message/tests/behat/unread_messages.feature
message/tests/externallib_test.php
message/tests/privacy_provider_test.php
message/upgrade.txt
mnet/service/enrol/version.php
mod/assign/db/upgrade.php
mod/assign/feedback/comments/db/upgrade.php
mod/assign/feedback/comments/version.php
mod/assign/feedback/editpdf/db/upgrade.php
mod/assign/feedback/editpdf/styles.css
mod/assign/feedback/editpdf/version.php
mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-debug.js
mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor-min.js
mod/assign/feedback/editpdf/yui/build/moodle-assignfeedback_editpdf-editor/moodle-assignfeedback_editpdf-editor.js
mod/assign/feedback/editpdf/yui/src/editor/js/annotationstamp.js
mod/assign/feedback/editpdf/yui/src/editor/js/comment.js
mod/assign/feedback/file/db/upgrade.php
mod/assign/feedback/file/importzipform.php
mod/assign/feedback/file/version.php
mod/assign/feedback/offline/version.php
mod/assign/locallib.php
mod/assign/submission/comments/db/upgrade.php
mod/assign/submission/comments/version.php
mod/assign/submission/file/db/upgrade.php
mod/assign/submission/file/version.php
mod/assign/submission/onlinetext/db/upgrade.php
mod/assign/submission/onlinetext/version.php
mod/assign/version.php
mod/assignment/db/upgrade.php
mod/assignment/type/offline/version.php
mod/assignment/type/online/version.php
mod/assignment/type/upload/version.php
mod/assignment/type/uploadsingle/version.php
mod/assignment/version.php
mod/book/db/upgrade.php
mod/book/tests/behat/display_book_description.feature [new file with mode: 0644]
mod/book/tool/exportimscp/version.php
mod/book/tool/importhtml/version.php
mod/book/tool/print/version.php
mod/book/version.php
mod/book/view.php
mod/chat/db/upgrade.php
mod/chat/version.php
mod/choice/db/upgrade.php
mod/choice/version.php
mod/data/db/upgrade.php
mod/data/field/checkbox/version.php
mod/data/field/date/version.php
mod/data/field/file/version.php
mod/data/field/latlong/version.php
mod/data/field/menu/version.php
mod/data/field/multimenu/version.php
mod/data/field/number/version.php
mod/data/field/picture/version.php
mod/data/field/radiobutton/version.php
mod/data/field/text/version.php
mod/data/field/textarea/version.php
mod/data/field/url/version.php
mod/data/lib.php
mod/data/preset/imagegallery/version.php
mod/data/version.php
mod/feedback/classes/completion.php
mod/feedback/db/upgrade.php
mod/feedback/tests/completion_test.php [new file with mode: 0644]
mod/feedback/version.php
mod/folder/db/upgrade.php
mod/folder/version.php
mod/forum/amd/build/discussion.min.js
mod/forum/amd/build/discussion_list.min.js
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/build/selectors.min.js
mod/forum/amd/src/discussion.js
mod/forum/amd/src/discussion_list.js
mod/forum/amd/src/inpage_reply.js
mod/forum/amd/src/posts_list.js
mod/forum/amd/src/repository.js
mod/forum/amd/src/selectors.js
mod/forum/classes/local/builders/exported_discussion_summaries.php
mod/forum/classes/local/exporters/author.php
mod/forum/classes/local/exporters/discussion.php
mod/forum/classes/local/exporters/discussion_summaries.php
mod/forum/classes/local/exporters/discussion_summary.php
mod/forum/classes/local/exporters/forum.php
mod/forum/classes/local/exporters/post.php
mod/forum/classes/local/factories/exporter.php
mod/forum/classes/local/factories/url.php
mod/forum/classes/local/managers/capability.php
mod/forum/classes/local/renderers/discussion.php
mod/forum/classes/local/renderers/discussion_list.php
mod/forum/classes/local/vaults/discussion_list.php
mod/forum/classes/local/vaults/post.php
mod/forum/classes/post_form.php
mod/forum/classes/subscriptions.php
mod/forum/classes/task/cron_task.php
mod/forum/db/upgrade.php
mod/forum/discuss.php
mod/forum/externallib.php
mod/forum/lang/en/deprecated.txt [new file with mode: 0644]
mod/forum/lang/en/forum.php
mod/forum/lib.php
mod/forum/post.php
mod/forum/styles.css
mod/forum/templates/discussion_list.mustache
mod/forum/templates/forum_discussion.mustache
mod/forum/templates/forum_discussion_post.mustache
mod/forum/templates/inpage_reply.mustache
mod/forum/tests/behat/inpage_reply.feature
mod/forum/tests/behat/split_forum_discussion.feature
mod/forum/tests/exporters_post_test.php
mod/forum/tests/externallib_test.php
mod/forum/tests/mail_test.php
mod/forum/tests/maildigest_test.php
mod/forum/tests/managers_capability_test.php
mod/forum/tests/vaults_post_test.php
mod/forum/upgrade.txt
mod/forum/version.php
mod/glossary/db/upgrade.php
mod/glossary/version.php
mod/imscp/db/upgrade.php
mod/imscp/tests/behat/display_imscp_description.feature [new file with mode: 0644]
mod/imscp/version.php
mod/imscp/view.php
mod/label/db/upgrade.php
mod/label/version.php
mod/lesson/continue.php
mod/lesson/db/upgrade.php
mod/lesson/import_form.php
mod/lesson/lang/en/lesson.php
mod/lesson/pagetypes/essay.php
mod/lesson/renderer.php
mod/lesson/tests/behat/display_lesson_description.feature [new file with mode: 0644]
mod/lesson/version.php
mod/lti/OAuthBody.php
mod/lti/amd/build/tool_card_controller.min.js
mod/lti/amd/src/tool_card_controller.js
mod/lti/auth.php [new file with mode: 0644]
mod/lti/backup/moodle2/backup_lti_stepslib.php
mod/lti/certs.php [new file with mode: 0644]
mod/lti/classes/external.php
mod/lti/classes/local/ltiservice/resource_base.php
mod/lti/classes/local/ltiservice/response.php
mod/lti/classes/local/ltiservice/service_base.php
mod/lti/classes/output/tool_configure_page.php
mod/lti/classes/task/clean_access_tokens.php [new file with mode: 0644]
mod/lti/contentitem.php
mod/lti/contentitem_return.php
mod/lti/db/install.php [new file with mode: 0644]
mod/lti/db/install.xml
mod/lti/db/services.php
mod/lti/db/tasks.php [new file with mode: 0644]
mod/lti/db/upgrade.php
mod/lti/edit_form.php
mod/lti/instructor_edit_tool_type.php
mod/lti/lang/en/lti.php
mod/lti/launch.php
mod/lti/locallib.php
mod/lti/mod_form.php
mod/lti/service.php
mod/lti/service/basicoutcomes/classes/local/resources/basicoutcomes.php [new file with mode: 0644]
mod/lti/service/basicoutcomes/classes/local/service/basicoutcomes.php [new file with mode: 0644]
mod/lti/service/basicoutcomes/classes/privacy/provider.php [new file with mode: 0644]
mod/lti/service/basicoutcomes/lang/en/ltiservice_basicoutcomes.php [new file with mode: 0644]
mod/lti/service/basicoutcomes/version.php [new file with mode: 0644]
mod/lti/service/gradebookservices/classes/local/resources/lineitem.php
mod/lti/service/gradebookservices/classes/local/resources/lineitems.php
mod/lti/service/gradebookservices/classes/local/resources/results.php
mod/lti/service/gradebookservices/classes/local/resources/scores.php
mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php
mod/lti/service/gradebookservices/lang/en/ltiservice_gradebookservices.php
mod/lti/service/gradebookservices/version.php
mod/lti/service/memberships/classes/local/resources/contextmemberships.php
mod/lti/service/memberships/classes/local/resources/linkmemberships.php
mod/lti/service/memberships/classes/local/service/memberships.php
mod/lti/service/memberships/lang/en/ltiservice_memberships.php
mod/lti/service/memberships/version.php
mod/lti/service/profile/classes/local/resources/profile.php
mod/lti/service/profile/version.php
mod/lti/service/toolproxy/classes/local/resources/toolproxy.php
mod/lti/service/toolproxy/version.php
mod/lti/service/toolsettings/classes/local/resources/contextsettings.php
mod/lti/service/toolsettings/classes/local/resources/linksettings.php
mod/lti/service/toolsettings/classes/local/resources/systemsettings.php
mod/lti/service/toolsettings/classes/local/service/toolsettings.php
mod/lti/service/toolsettings/lang/en/ltiservice_toolsettings.php
mod/lti/service/toolsettings/version.php
mod/lti/servicelib.php
mod/lti/services.php
mod/lti/templates/tool_card.mustache
mod/lti/templates/tool_config_modal_body.mustache [new file with mode: 0644]
mod/lti/templates/tool_config_modal_footer.mustache [new file with mode: 0644]
mod/lti/tests/locallib_test.php
mod/lti/tests/task_clean_access_tokens_test.php [new file with mode: 0644]
mod/lti/token.php [new file with mode: 0644]
mod/lti/typessettings.php
mod/lti/upgrade.txt
mod/lti/upgradelib.php [new file with mode: 0644]
mod/lti/version.php
mod/lti/view.php
mod/page/db/upgrade.php
mod/page/version.php
mod/quiz/accessrule/delaybetweenattempts/version.php
mod/quiz/accessrule/ipaddress/version.php
mod/quiz/accessrule/numattempts/version.php
mod/quiz/accessrule/offlineattempts/version.php
mod/quiz/accessrule/openclosedate/version.php
mod/quiz/accessrule/password/version.php
mod/quiz/accessrule/safebrowser/version.php
mod/quiz/accessrule/securewindow/version.php
mod/quiz/accessrule/timelimit/version.php
mod/quiz/amd/build/modal_quiz_question_bank.min.js
mod/quiz/amd/src/modal_quiz_question_bank.js
mod/quiz/attemptlib.php
mod/quiz/classes/external.php
mod/quiz/classes/output/edit_renderer.php
mod/quiz/classes/structure.php
mod/quiz/db/upgrade.php
mod/quiz/lang/en/quiz.php
mod/quiz/report/grading/report.php
mod/quiz/report/grading/tests/behat/grading.feature
mod/quiz/report/grading/version.php
mod/quiz/report/overview/db/upgrade.php
mod/quiz/report/overview/version.php
mod/quiz/report/responses/version.php
mod/quiz/report/statistics/db/upgrade.php
mod/quiz/report/statistics/version.php
mod/quiz/styles.css
mod/quiz/tests/behat/attempt_redo_questions.feature
mod/quiz/tests/behat/editing_add_from_question_bank.feature
mod/quiz/tests/behat/editing_remove_multiple_questions.feature
mod/quiz/tests/structure_test.php
mod/quiz/version.php
mod/quiz/yui/build/moodle-mod_quiz-toolboxes/moodle-mod_quiz-toolboxes-debug.js
mod/quiz/yui/build/moodle-mod_quiz-toolboxes/moodle-mod_quiz-toolboxes-min.js
mod/quiz/yui/build/moodle-mod_quiz-toolboxes/moodle-mod_quiz-toolboxes.js
mod/quiz/yui/src/toolboxes/js/resource.js
mod/quiz/yui/src/toolboxes/js/toolbox.js
mod/resource/db/upgrade.php
mod/resource/version.php
mod/scorm/db/upgrade.php
mod/scorm/player.php
mod/scorm/report/basic/version.php
mod/scorm/report/graphs/version.php
mod/scorm/report/interactions/version.php
mod/scorm/report/objectives/version.php
mod/scorm/tests/behat/behat_mod_scorm.php [new file with mode: 0644]
mod/scorm/version.php
mod/survey/db/upgrade.php
mod/survey/version.php
mod/url/db/upgrade.php
mod/url/version.php
mod/wiki/db/upgrade.php
mod/wiki/version.php
mod/workshop/allocation/manual/version.php
mod/workshop/allocation/random/version.php
mod/workshop/allocation/scheduled/version.php
mod/workshop/db/upgrade.php
mod/workshop/eval/best/version.php
mod/workshop/form/accumulative/db/upgrade.php
mod/workshop/form/accumulative/version.php
mod/workshop/form/comments/db/upgrade.php
mod/workshop/form/comments/version.php
mod/workshop/form/numerrors/db/upgrade.php
mod/workshop/form/numerrors/version.php
mod/workshop/form/rubric/db/upgrade.php
mod/workshop/form/rubric/version.php
mod/workshop/version.php
pix/moodlelogo-med-white.gif [deleted file]
pix/moodlelogo-med.gif [deleted file]
pix/moodlelogo-med.png [deleted file]
pix/moodlelogo.gif [deleted file]
pix/moodlelogo.png
pix/moodlelogo.svg
pix/moodlelogo_grayhat.png [new file with mode: 0644]
pix/moodlelogo_grayhat.svg [new file with mode: 0644]
pix/movehere.svg [new file with mode: 0644]
portfolio/boxnet/db/upgrade.php
portfolio/boxnet/version.php
portfolio/download/version.php
portfolio/flickr/version.php
portfolio/googledocs/db/upgrade.php
portfolio/googledocs/version.php
portfolio/mahara/version.php
portfolio/picasa/db/upgrade.php
portfolio/picasa/version.php
question/behaviour/adaptive/version.php
question/behaviour/adaptivenopenalty/version.php
question/behaviour/deferredcbm/version.php
question/behaviour/deferredfeedback/version.php
question/behaviour/immediatecbm/version.php
question/behaviour/immediatefeedback/version.php
question/behaviour/informationitem/version.php
question/behaviour/interactive/version.php
question/behaviour/interactivecountback/version.php
question/behaviour/manualgraded/db/upgrade.php
question/behaviour/manualgraded/version.php
question/behaviour/missing/version.php
question/format/aiken/version.php
question/format/blackboard_six/version.php
question/format/examview/version.php
question/format/gift/version.php
question/format/missingword/version.php
question/format/multianswer/version.php
question/format/webct/version.php
question/format/xhtml/version.php
question/format/xml/version.php
question/import_form.php
question/type/calculated/db/upgrade.php
question/type/calculated/version.php
question/type/calculatedmulti/version.php
question/type/calculatedsimple/version.php
question/type/ddimageortext/version.php
question/type/ddmarker/db/upgrade.php
question/type/ddmarker/lang/en/qtype_ddmarker.php
question/type/ddmarker/version.php
question/type/ddwtos/amd/build/ddwtos.min.js
question/type/ddwtos/amd/src/ddwtos.js
question/type/ddwtos/version.php
question/type/description/version.php
question/type/essay/db/upgrade.php
question/type/essay/version.php
question/type/gapselect/version.php
question/type/match/db/upgrade.php
question/type/match/version.php
question/type/missingtype/tests/missingtype_test.php
question/type/missingtype/version.php
question/type/multianswer/db/upgrade.php
question/type/multianswer/renderer.php
question/type/multianswer/version.php
question/type/multichoice/amd/build/clearchoice.min.js
question/type/multichoice/amd/src/clearchoice.js
question/type/multichoice/db/upgrade.php
question/type/multichoice/version.php
question/type/numerical/db/upgrade.php
question/type/numerical/version.php
question/type/questionbase.php
question/type/random/db/upgrade.php
question/type/random/version.php
question/type/randomsamatch/db/upgrade.php
question/type/randomsamatch/version.php
question/type/shortanswer/db/upgrade.php
question/type/shortanswer/version.php
question/type/truefalse/version.php
report/backups/version.php
report/competency/amd/build/grading_popup.min.js
report/competency/amd/src/grading_popup.js
report/competency/templates/report.mustache
report/competency/version.php
report/completion/version.php
report/configlog/version.php
report/courseoverview/version.php
report/eventlist/version.php
report/insights/amd/build/actions.min.js
report/insights/amd/src/actions.js
report/insights/lang/en/report_insights.php
report/insights/version.php
report/log/version.php
report/loglive/version.php
report/outline/version.php
report/participation/version.php
report/performance/version.php
report/progress/version.php
report/questioninstances/version.php
report/security/version.php
report/stats/version.php
report/usersessions/version.php
repository/areafiles/version.php
repository/boxnet/db/upgrade.php
repository/boxnet/version.php
repository/coursefiles/version.php
repository/dropbox/db/upgrade.php
repository/dropbox/version.php
repository/equella/version.php
repository/filesystem/version.php
repository/flickr/db/upgrade.php
repository/flickr/version.php
repository/flickr_public/version.php
repository/googledocs/db/upgrade.php
repository/googledocs/version.php
repository/local/version.php
repository/merlot/version.php
repository/nextcloud/version.php
repository/onedrive/db/upgrade.php
repository/onedrive/version.php
repository/picasa/db/upgrade.php
repository/picasa/version.php
repository/recent/version.php
repository/s3/version.php
repository/skydrive/version.php
repository/upload/version.php
repository/url/locallib.php
repository/url/version.php
repository/user/pix/icon.png
repository/user/pix/icon.svg
repository/user/version.php
repository/webdav/version.php
repository/wikimedia/version.php
repository/youtube/version.php
search/engine/simpledb/version.php
search/engine/solr/version.php
search/templates/index_requests.mustache
theme/boost/scss/moodle/blocks.scss
theme/boost/scss/moodle/core.scss
theme/boost/scss/moodle/course.scss
theme/boost/scss/moodle/drawer.scss
theme/boost/scss/moodle/icons.scss
theme/boost/style/moodle.css
theme/boost/version.php
theme/classic/scss/preset/default.scss
theme/classic/style/moodle.css
theme/classic/version.php
user/edit_form.php
user/editadvanced_form.php
user/emailupdate.php
user/filters/lib.php
user/lib.php
user/profile/field/checkbox/version.php
user/profile/field/datetime/version.php
user/profile/field/menu/version.php
user/profile/field/text/version.php
user/profile/field/textarea/version.php
user/tests/behat/addnewuser.feature
version.php
webservice/rest/version.php
webservice/soap/version.php
webservice/xmlrpc/version.php

index 14e635f..a262404 100644 (file)
@@ -64,6 +64,7 @@ lib/amd/src/adapter.js
 lib/validateurlsyntax.php
 lib/amd/src/popper.js
 lib/geopattern-php/
+lib/php-jwt/
 media/player/videojs/amd/src/video-lazy.js
 media/player/videojs/amd/src/Youtube-lazy.js
 media/player/videojs/videojs/
index 128c038..6bcaefe 100644 (file)
@@ -65,6 +65,7 @@ lib/amd/src/adapter.js
 lib/validateurlsyntax.php
 lib/amd/src/popper.js
 lib/geopattern-php/
+lib/php-jwt/
 media/player/videojs/amd/src/video-lazy.js
 media/player/videojs/amd/src/Youtube-lazy.js
 media/player/videojs/videojs/
index ec1b68c..4c48a16 100644 (file)
@@ -13,7 +13,7 @@ language: php
 
 php:
     # We only run the highest and lowest supported versions to reduce the load on travis-ci.org.
-    - 7.2
+    - 7.3
     - 7.1
 
 addons:
@@ -23,10 +23,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 +31,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 +47,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 +92,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 +164,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="if (version_compare(PHP_VERSION, '7.2.0', '<')) { 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
index 9a43f61..166accc 100644 (file)
@@ -60,7 +60,7 @@ if (($form = data_submitted()) && confirm_sesskey()) {
                 // setting for each possible processor. Note that this block will
                 // always be processed first after entring parental foreach iteration
                 // so we can change form values on this stage.
-                foreach ($allprocessors as $processor) {
+                foreach ($processors as $processor) {
                     $value = '';
                     if (isset($form->{$componentprovidersetting}[$processor->name])) {
                         $value = $form->{$componentprovidersetting}[$processor->name];
index 80e4b20..b877a70 100644 (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);
             }
index 89668dc..bc54948 100644 (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');
index 276582c..0ea5193 100644 (file)
@@ -57,9 +57,11 @@ if (($hassiteconfig || has_any_capability(array(
             new lang_string('badgesalt_desc', 'badges'),
             'badges' . $SITE->timecreated, PARAM_ALPHANUM));
 
-    $globalsettings->add(new admin_setting_configcheckbox('badges_allowexternalbackpack',
-            new lang_string('allowexternalbackpack', 'badges'),
-            new lang_string('allowexternalbackpack_desc', 'badges'), 1));
+    $backpacks = badges_get_site_backpacks();
+    $choices = array();
+    foreach ($backpacks as $backpack) {
+        $choices[$backpack->id] = $backpack->backpackweburl;
+    }
 
     $globalsettings->add(new admin_setting_configcheckbox('badges_allowcoursebadges',
             new lang_string('allowcoursebadges', 'badges'),
@@ -91,4 +93,32 @@ if (($hassiteconfig || has_any_capability(array(
             array('moodle/badges:createbadge'), empty($CFG->enablebadges)
         )
     );
+    $backpacksettings = new admin_settingpage('backpacksettings', new lang_string('backpacksettings', 'badges'),
+            array('moodle/badges:manageglobalsettings'), empty($CFG->enablebadges));
+
+    $backpacksettings->add(new admin_setting_configcheckbox('badges_allowexternalbackpack',
+            new lang_string('allowexternalbackpack', 'badges'),
+            new lang_string('allowexternalbackpack_desc', 'badges'), 1));
+
+    $backpacksettings->add(new admin_setting_configselect('badges_site_backpack',
+            new lang_string('sitebackpack', 'badges'),
+            new lang_string('sitebackpack_help', 'badges'),
+            1, $choices));
+
+    $warning = badges_verify_site_backpack();
+    if (!empty($warning)) {
+        $backpacksettings->add(new admin_setting_description('badges_site_backpack_verify',
+            new lang_string('sitebackpackverify', 'badges'),
+            $warning));
+    }
+
+    $ADMIN->add('badges', $backpacksettings);
+
+    $ADMIN->add('badges',
+        new admin_externalpage('managebackpacks',
+            new lang_string('managebackpacks', 'badges'),
+            new moodle_url('/badges/backpacks.php'),
+            array('moodle/badges:manageglobalsettings'), empty($CFG->enablebadges) || empty($CFG->badges_allowexternalbackpack)
+        )
+    );
 }
index 99892d6..ace90d3 100644 (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->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_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_confightmleditor(
-                'backup/backup_async_message',
-                new lang_string('asyncmessagebody', 'backup'),
-                new lang_string('asyncmessagebodydetail', 'backup'),
-                new lang_string('asyncmessagebodydefault', 'backup')));
-
-        $ADMIN->add('backups', $temp);
-    }
+    $temp = new admin_settingpage('asyncgeneralsettings', new lang_string('asyncgeneralsettings', 'backup'));
+
+    $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_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_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');
+
+    $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);
 
 }
index d435022..3eed171 100644 (file)
@@ -58,7 +58,7 @@ if (!during_initial_install()) { //do not use during installation
         foreach ($roles as $role) {
             if (empty($role->archetype) or $role->archetype === 'guest' or $role->archetype === 'frontpage' or $role->archetype === 'student') {
                 $options[$role->id] = $role->localname;
-                if ($role->archetype === 'frontpage') {
+                if ($role->archetype === 'frontpage' && !$defaultfrontpageroleid) {
                     $defaultfrontpageroleid = $role->id;
                 }
             }
index 0b62749..e5c660b 100644 (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));
 }
index d2faa4a..d20dabc 100644 (file)
@@ -40,7 +40,7 @@
     <div class="form-inline">
         <input type="text" size="5" id="{{id}}v" name="{{name}}[v]" value="{{value}}" class="form-control text-ltr">
         <label class="sr-only" for="{{id}}u">{{#str}}durationunits, admin{{/str}}</label>
-        <select id="{{id}}u" name="{{name}}[u]" class="form-control">
+        <select id="{{id}}u" name="{{name}}[u]" class="form-control custom-select">
             {{#options}}
                 <option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
             {{/options}}
index 65dffa3..29eeb4b 100644 (file)
@@ -1,57 +1,74 @@
-@core @core_admin
-Feature: Enable multiple accounts to have the same email address
-  In order to have multiple accounts registerd on the system with the same email address
+@core @core_admin @core_user
+Feature: Allowing multiple accounts to have the same email address
+  In order to manage user accounts
   As an admin
-  I need to enable multiple accounts to be registered with the same email address and verify it is applied
+  I need to be able to set whether to allow multiple accounts with the same email or not
 
-  Background:
-    Given I log in as "admin"
-
-  Scenario: Enable registration of multiple accounts with the same email address
+  Scenario Outline: Create a user with the same email as an existing user
     Given the following config values are set as admin:
-      | allowaccountssameemail | 1 |
-    When I navigate to "Users > Accounts > Add a new user" in site administration
-    And I set the following fields to these values:
-      | Username                        | testmultiemailuser1             |
-      | Choose an authentication method | Manual accounts                 |
-      | New password                    | test@User1                      |
-      | First name                      | Test                            |
-      | Surname                         | Multi1                          |
-      | Email address                   | testmultiemailuser@example.com  |
-    And I press "Create user"
-    And I should see "Test Multi1"
-    And I press "Add a new user"
+      | allowaccountssameemail | <allowsameemail> |
+    And the following "users" exist:
+      | username  | firstname | lastname | email           |
+      | s1        | John      | Doe      | s1@example.com  |
+    When I log in as "admin"
+    And I navigate to "Users > Accounts > Add a new user" in site administration
     And I set the following fields to these values:
-      | Username                        | testmultiemailuser2             |
-      | Choose an authentication method | Manual accounts                 |
-      | New password                    | test@User2                      |
-      | First name                      | Test                            |
-      | Surname                         | Multi2                          |
-      | Email address                   | testmultiemailuser@example.com  |
+      | Username      | s2      |
+      | First name    | Jane    |
+      | Surname       | Doe     |
+      | Email address | <email> |
+      | New password  | test    |
     And I press "Create user"
-    Then I should see "Test Multi2"
-    And I should not see "This email address is already registered"
+    Then I should <expect> "This email address is already registered."
 
-  Scenario: Disable registration of multiple accounts with the same email address
+    Examples:
+      | allowsameemail | email          | expect  |
+      | 0              | s1@example.com | see     |
+      | 0              | S1@EXAMPLE.COM | see     |
+      | 1              | s1@example.com | not see |
+      | 1              | S1@EXAMPLE.COM | not see |
+
+  Scenario Outline: Update a user with the same email as an existing user
     Given the following config values are set as admin:
-      | allowaccountssameemail | 0 |
-    When I navigate to "Users > Accounts > Add a new user" in site administration
-    And I set the following fields to these values:
-      | Username                        | testmultiemailuser1             |
-      | Choose an authentication method | Manual accounts                 |
-      | New password                    | test@User1                      |
-      | First name                      | Test                            |
-      | Surname                         | Multi1                          |
-      | Email address                   | testmultiemailuser@example.com  |
-    And I press "Create user"
-    And I should see "Test Multi1"
-    And I press "Add a new user"
-    And I set the following fields to these values:
-      | Username                        | testmultiemailuser2             |
-      | Choose an authentication method | Manual accounts                 |
-      | New password                    | test@User2                      |
-      | First name                      | Test                            |
-      | Surname                         | Multi2                          |
-      | Email address                   | testmultiemailuser@example.com  |
-    And I press "Create user"
-    Then I should see "This email address is already registered"
\ No newline at end of file
+      | allowaccountssameemail | <allowsameemail> |
+    And the following "users" exist:
+      | username  | firstname | lastname | email           |
+      | s1        | John      | Doe      | s1@example.com  |
+      | s2        | Jane      | Doe      | s2@example.com  |
+    When I log in as "admin"
+    And I navigate to "Users > Accounts > Browse list of users" in site administration
+    And I click on "Edit" "link" in the "Jane Doe" "table_row"
+    And I set the field "Email address" to "<email>"
+    And I press "Update profile"
+    Then I should <expect> "This email address is already registered."
+
+    Examples:
+      | allowsameemail | email          | expect  |
+      | 0              | s1@example.com | see     |
+      | 0              | S1@EXAMPLE.COM | see     |
+      | 1              | s1@example.com | not see |
+      | 1              | S1@EXAMPLE.COM | not see |
+      | 0              | S2@EXAMPLE.COM | not see |
+      | 1              | S2@EXAMPLE.COM | not see |
+
+  Scenario Outline: Update own user profile with the same email as an existing user
+    Given the following config values are set as admin:
+      | allowaccountssameemail | <allowsameemail> |
+    And the following "users" exist:
+      | username  | firstname | lastname | email           |
+      | s1        | John      | Doe      | s1@example.com  |
+      | s2        | Jane      | Doe      | s2@example.com  |
+    When I log in as "s2"
+    And I open my profile in edit mode
+    And I set the field "Email address" to "<email>"
+    And I press "Update profile"
+    Then I should <expect> "This email address is already registered."
+
+    Examples:
+      | allowsameemail | email          | expect  |
+      | 0              | s1@example.com | see     |
+      | 0              | S1@EXAMPLE.COM | see     |
+      | 1              | s1@example.com | not see |
+      | 1              | S1@EXAMPLE.COM | not see |
+      | 0              | S2@EXAMPLE.COM | not see |
+      | 1              | S2@EXAMPLE.COM | not see |
index 75e2b42..34088d5 100644 (file)
@@ -6,11 +6,11 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
 
   Background:
     Given the following "users" exist:
-      | username | firstname | lastname | email | auth | confirmed |
-      | user1 | User | One | one@example.com | manual | 0 |
-      | user2 | User | Two | two@example.com | ldap | 1 |
-      | user3 | User | Three | three@example.com | manual | 1 |
-      | user4 | User | Four | four@example.com | ldap | 0 |
+      | username | firstname | lastname | email | auth | confirmed | lastip |
+      | user1 | User | One | one@example.com | manual | 0 | 127.0.1.1 |
+      | user2 | User | Two | two@example.com | ldap | 1 | 0.0.0.0 |
+      | user3 | User | Three | three@example.com | manual | 1 | 0.0.0.0 |
+      | user4 | User | Four | four@example.com | ldap | 0 | 127.0.1.2 |
     And the following "cohorts" exist:
       | name | idnumber |
       | Cohort 1 | CH1 |
@@ -82,3 +82,25 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
     And I should not see "User Two"
     And I should not see "User Three"
     And I should see "User Four"
+
+  Scenario: Filter user accounts by last IP address
+    When I set the following fields to these values:
+      | id_lastip | 127.0.1.1 |
+    And I press "Add filter"
+    Then I should see "User One"
+    And I should not see "User Two"
+    And I should not see "User Three"
+    And I should not see "User Four"
+    And I press "Remove all filters"
+    And I set the following fields to these values:
+      | id_lastip | 127.0.1.2 |
+    And I press "Add filter"
+    And I should not see "User One"
+    And I should not see "User Two"
+    And I should not see "User Three"
+    And I should see "User Four"
+    And I press "Remove all filters"
+    And I should see "User One"
+    And I should see "User Two"
+    And I should see "User Three"
+    And I should see "User Four"
index fd1374c..15a5501 100644 (file)
Binary files a/admin/tool/analytics/amd/build/model.min.js and b/admin/tool/analytics/amd/build/model.min.js differ
index 7a33345..919993c 100644 (file)
@@ -55,7 +55,15 @@ define(['jquery', 'core/str', 'core/log', 'core/notification', 'core/modal_facto
      * @return {String}
      */
     var getModelName = function(actionItem) {
-        return $(actionItem.closest('tr')[0]).find('span.target-name').text();
+        var wrap = $(actionItem).closest('[data-model-name]');
+
+        if (wrap.length) {
+            return wrap.attr('data-model-name');
+
+        } else {
+            log.error('Unexpected DOM error - unable to obtain the model name');
+            return '';
+        }
     };
 
     /** @alias module:tool_analytics/model */
@@ -223,4 +231,4 @@ define(['jquery', 'core/str', 'core/log', 'core/notification', 'core/modal_facto
             });
         }
     };
-});
\ No newline at end of file
+});
index c6831d0..fbbc227 100644 (file)
@@ -156,7 +156,7 @@ class models_list implements \renderable, \templatable {
                     $modeldata->timesplittinghelp = $helpicon->export_for_template($output);
                 } else {
                     // We really want to encourage developers to add help to their time splitting methods.
-                    debugging("The time splitting method '{$modeldata->timesplitting}' should include a '{$identifier}_help'
+                    debugging("The analysis interval '{$modeldata->timesplitting}' should include a '{$identifier}_help'
                         string to describe its purpose.", DEBUG_DEVELOPER);
                 }
             } else {
@@ -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;
                     }
@@ -216,10 +216,11 @@ class models_list implements \renderable, \templatable {
 
             // Get predictions.
             if (!$onlycli && $modeldata->enabled && !empty($modeldata->timesplitting)) {
-                $urlparams['action'] = 'getpredictions';
+                $urlparams['action'] = 'scheduledanalysis';
                 $url = new \moodle_url('model.php', $urlparams);
-                $icon = new \action_menu_link_secondary($url, new \pix_icon('i/notifications',
-                    get_string('getpredictions', 'tool_analytics')), get_string('getpredictions', 'tool_analytics'));
+                $icon = new \action_menu_link_secondary($url,
+                    new \pix_icon('i/notifications', get_string('executescheduledanalysis', 'tool_analytics')),
+                    get_string('executescheduledanalysis', 'tool_analytics'));
                 $actionsmenu->add($icon);
             }
 
index 67c4406..743844e 100644 (file)
@@ -90,9 +90,9 @@ class renderer extends plugin_renderer_base {
                 $langstrdata = (object)array('name' => $timesplitting->get_name(), 'id' => $timesplittingid);
 
                 if (CLI_SCRIPT) {
-                    $output .= $OUTPUT->heading(get_string('getpredictionsresultscli', 'tool_analytics', $langstrdata), 3);
+                    $output .= $OUTPUT->heading(get_string('scheduledanalysisresultscli', 'tool_analytics', $langstrdata), 3);
                 } else {
-                    $output .= $OUTPUT->heading(get_string('getpredictionsresults', 'tool_analytics', $langstrdata), 3);
+                    $output .= $OUTPUT->heading(get_string('scheduledanalysisresults', 'tool_analytics', $langstrdata), 3);
                 }
             }
 
index e31dfec..ed8e3fc 100644 (file)
@@ -32,20 +32,20 @@ $help = "Enables the provided model.
 Options:
 --modelid           Model id
 --list              List models
---timesplitting     Time splitting method full class name
+--analysisinterval  Time splitting method full class name
 -h, --help          Print out this help
 
 Example:
-\$ php admin/tool/analytics/cli/enable_model.php --modelid=1 --timesplitting=\"\\core\\analytics\\time_splitting\\quarters\"
+\$ php admin/tool/analytics/cli/enable_model.php --modelid=1 --analysisinterval=\"\\core\\analytics\\time_splitting\\quarters\"
 ";
 
 // Now get cli options.
 list($options, $unrecognized) = cli_get_params(
     array(
-        'help'            => false,
-        'list'            => false,
-        'modelid'         => false,
-        'timesplitting'   => false
+        'help'             => false,
+        'list'             => false,
+        'modelid'          => false,
+        'analysisinterval' => false
     ),
     array(
         'h' => 'help',
@@ -62,7 +62,7 @@ if ($options['list'] || $options['modelid'] === false) {
     exit(0);
 }
 
-if ($options['timesplitting'] === false) {
+if ($options['analysisinterval'] === false) {
     echo $help;
     exit(0);
 }
@@ -73,7 +73,7 @@ if ($options['timesplitting'] === false) {
 $model = new \core_analytics\model($options['modelid']);
 
 // Evaluate its suitability to predict accurately.
-$model->enable($options['timesplitting']);
+$model->enable($options['analysisinterval']);
 
 cli_heading(get_string('success'));
 exit(0);
index 8473aba..067320e 100644 (file)
@@ -33,7 +33,7 @@ Options:
 --modelid              Model id
 --list                 List models
 --non-interactive      Not interactive questions
---timesplitting        Restrict the evaluation to 1 single time splitting method (Optional)
+--analysisinterval     Restrict the evaluation to 1 single analysis interval (Optional)
 --filter               Analyser dependant. e.g. A courseid would evaluate the model using a single course (Optional)
 --mode                 'configuration' or 'trainedmodel'. You can only use mode=trainedmodel when the trained" .
     " model was imported" . "
@@ -42,7 +42,7 @@ Options:
 -h, --help             Print out this help
 
 Example:
-\$ php admin/tool/analytics/cli/evaluate_model.php --modelid=1 --timesplitting='\\core\\analytics\\time_splitting\\quarters' --filter=123,321
+\$ php admin/tool/analytics/cli/evaluate_model.php --modelid=1 --analysisinterval='\\core\\analytics\\time_splitting\\quarters' --filter=123,321
 ";
 
 // Now get cli options.
@@ -51,7 +51,7 @@ list($options, $unrecognized) = cli_get_params(
         'help'                  => false,
         'modelid'               => false,
         'list'                  => false,
-        'timesplitting'         => false,
+        'analysisinterval'      => false,
         'mode'                  => 'configuration',
         'reuse-prev-analysed'   => true,
         'non-interactive'       => false,
@@ -87,8 +87,8 @@ if ($options['mode'] !== 'configuration' && $options['mode'] !== 'trainedmodel')
     cli_error('Error: The provided mode is not supported');
 }
 
-if ($options['mode'] == 'trainedmodel' && $options['timesplitting']) {
-    cli_error('Sorry, no time splitting method can be specified when using \'trainedmodel\' mode.');
+if ($options['mode'] == 'trainedmodel' && $options['analysisinterval']) {
+    cli_error('Sorry, no analysis interval can be specified when using \'trainedmodel\' mode.');
 }
 
 // We need admin permissions.
@@ -104,7 +104,7 @@ if ($options['reuse-prev-analysed']) {
 
 $analyseroptions = array(
     'filter' => $options['filter'],
-    'timesplitting' => $options['timesplitting'],
+    'timesplitting' => $options['analysisinterval'],
     'reuseprevanalysed' => $options['reuse-prev-analysed'],
     'mode' => $options['mode'],
 );
index f8a8aa5..f6e653b 100644 (file)
@@ -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']) {
diff --git a/admin/tool/analytics/lang/en/deprecated.txt b/admin/tool/analytics/lang/en/deprecated.txt
new file mode 100644 (file)
index 0000000..f308e25
--- /dev/null
@@ -0,0 +1 @@
+getpredictions,tool_analytics
\ No newline at end of file
index 9e7f30d..0979652 100644 (file)
@@ -24,8 +24,9 @@
 
 $string['accuracy'] = 'Accuracy';
 $string['allpredictions'] = 'All predictions';
-$string['alltimesplittingmethods'] = 'All time-splitting methods';
+$string['alltimesplittingmethods'] = 'All analysis intervals';
 $string['analysingsitedata'] = 'Analysing the site';
+$string['analysis'] = 'Analysis';
 $string['analyticmodels'] = 'Analytics models';
 $string['bettercli'] = 'Evaluating models and generating predictions may involve heavy processing. It is recommended to run these actions from the command line.';
 $string['cantguessstartdate'] = 'Can\'t guess the start date';
@@ -33,7 +34,7 @@ $string['cantguessenddate'] = 'Can\'t guess the end date';
 $string['classdoesnotexist'] = 'Class {$a} does not exist';
 $string['clearpredictions'] = 'Clear predictions';
 $string['clearmodelpredictions'] = 'Are you sure you want to clear all "{$a}" predictions?';
-$string['clienablemodel'] = 'You can enable the model by selecting a time-splitting method by its ID. Note that you can also enable it later using the web interface (\'none\' to exit).';
+$string['clienablemodel'] = 'You can enable the model by selecting an analysis interval by its ID. Note that you can also enable it later using the web interface (\'none\' to exit).';
 $string['clievaluationandpredictions'] = 'A scheduled task iterates through enabled models and gets predictions. Models evaluation via the web interface is disabled. You can allow these processes to be executed manually via the web interface by disabling the <a href="{$a}">\'onlycli\'</a> analytics setting.';
 $string['clievaluationandpredictionsnoadmin'] = 'A scheduled task iterates through enabled models and gets predictions. Models evaluation via the web interface is disabled. It may be enabled by a site administrator.';
 $string['component'] = 'Component';
@@ -41,14 +42,14 @@ $string['componentcore'] = 'Core';
 $string['componentselect'] = 'Select all models provided by the component \'{$a}\'';
 $string['componentselectnone'] = 'Unselect all';
 $string['createmodel'] = 'Create model';
-$string['currenttimesplitting'] = 'Current time-splitting method';
+$string['currenttimesplitting'] = 'Current analysis interval';
 $string['delete'] = 'Delete';
 $string['deletemodelconfirmation'] = 'Are you sure you want to delete "{$a}"? These changes cannot be reverted.';
 $string['disabled'] = 'Disabled';
 $string['editmodel'] = 'Edit "{$a}" model';
-$string['edittrainedwarning'] = 'This model has already been trained. Note that changing its indicators or its time-splitting method will delete its previous predictions and start generating new predictions.';
+$string['edittrainedwarning'] = 'This model has already been trained. Note that changing its indicators or its analysis interval will delete its previous predictions and start generating new predictions.';
 $string['enabled'] = 'Enabled';
-$string['errorcantenablenotimesplitting'] = 'You need to select a time-splitting method before enabling the model';
+$string['errorcantenablenotimesplitting'] = 'You need to select an analysis interval before enabling the model';
 $string['errornoenabledandtrainedmodels'] = 'There are no enabled and trained models to predict.';
 $string['errornoenabledmodels'] = 'There are no enabled models to train.';
 $string['errornoexport'] = 'Only trained models can be exported';
@@ -71,15 +72,13 @@ $string['evaluationmodecoltrainedmodel'] = 'Trained model';
 $string['evaluationmodecolconfiguration'] = 'Configuration';
 $string['evaluationmodeconfiguration'] = 'Evaluate the model configuration';
 $string['evaluationinbatches'] = 'The site contents are calculated and stored in batches. The evaluation process may be stopped at any time. The next time it is run, it will continue from the point when it was stopped.';
+$string['executescheduledanalysis'] = 'Execute scheduled analysis';
 $string['export'] = 'Export';
 $string['exportincludeweights'] = 'Include the weights of the trained model';
 $string['exportmodel'] = 'Export configuration';
 $string['exporttrainingdata'] = 'Export training data';
-$string['getpredictionsresultscli'] = 'Results using {$a->name} (id: {$a->id}) time-splitting method';
-$string['getpredictionsresults'] = 'Results using {$a->name} time-splitting method';
 $string['extrainfo'] = 'Info';
 $string['generalerror'] = 'Evaluation error. Status code {$a}';
-$string['getpredictions'] = 'Get predictions';
 $string['goodmodel'] = 'This is a good model for using to obtain predictions. Enable it to start obtaining predictions.';
 $string['importmodel'] = 'Import model';
 $string['indicators'] = 'Indicators';
@@ -103,12 +102,12 @@ $string['modelid'] = 'Model ID';
 $string['modelinvalidanalysables'] = 'Invalid analysable elements for "{$a}" model';
 $string['modelname'] = 'Model name';
 $string['modelresults'] = '{$a} results';
-$string['modeltimesplitting'] = 'Time splitting';
+$string['modeltimesplitting'] = 'Analysis interval';
 $string['newmodel'] = 'New model';
 $string['nextpage'] = 'Next page';
 $string['nodatatoevaluate'] = 'There is no data to evaluate the model';
-$string['nodatatopredict'] = 'No new elements to get predictions for';
-$string['nodatatotrain'] = 'There is no new data that can be used for training';
+$string['nodatatopredict'] = 'No new elements to get predictions for.';
+$string['nodatatotrain'] = 'There is no new data that can be used for training.';
 $string['noinvalidanalysables'] = 'This site does not contain any invalid analysable element.';
 $string['notdefined'] = 'Not yet defined';
 $string['pluginname'] = 'Analytic models';
@@ -125,12 +124,14 @@ $string['restoredefaultsome'] = 'Succesfully re-created {$a->count} new model(s)
 $string['restoredefaultsubmit'] = 'Restore selected';
 $string['samestartdate'] = 'Current start date is good';
 $string['sameenddate'] = 'Current end date is good';
-$string['selecttimesplittingforevaluation'] = 'Select the time-splitting method you want to use to evaluate the model configuration.';
+$string['scheduledanalysisresults'] = 'Results using {$a->name} analysis interval';
+$string['scheduledanalysisresultscli'] = 'Results using {$a->name} (id: {$a->id}) analysis interval';
+$string['selecttimesplittingforevaluation'] = 'Select the analysis interval you want to use to evaluate the model configuration.';
 $string['target'] = 'Target';
 $string['target_help'] = 'The target is what the model will predict.';
 $string['target_link'] = 'Targets';
-$string['timesplittingnotdefined'] = 'Time splitting is not defined.';
-$string['timesplittingnotdefined_help'] = 'You need to select a time-splitting method before enabling the model.';
+$string['timesplittingnotdefined'] = 'No analysis interval is defined.';
+$string['timesplittingnotdefined_help'] = 'You need to select an analysis interval before enabling the model.';
 $string['trainandpredictmodel'] = 'Training model and calculating predictions';
 $string['trainingprocessfinished'] = 'Training process finished';
 $string['trainingresults'] = 'Training results';
@@ -140,3 +141,6 @@ $string['viewlog'] = 'Evaluation log';
 $string['weeksenddateautomaticallyset'] = 'End date automatically set based on start date and the number of sections';
 $string['weeksenddatedefault'] = 'End date automatically calculated from the course start date.';
 $string['privacy:metadata'] = 'The Analytic models plugin does not store any personal data.';
+
+// Deprecated since Moodle 3.8.
+$string['getpredictions'] = 'Get predictions';
\ No newline at end of file
index c6cc950..ae2c8dc 100644 (file)
@@ -45,8 +45,8 @@ switch ($action) {
     case 'evaluate':
         $title = get_string('evaluatemodel', 'tool_analytics');
         break;
-    case 'getpredictions':
-        $title = get_string('getpredictions', 'tool_analytics');
+    case 'scheduledanalysis':
+        $title = get_string('analysis', 'tool_analytics');
         break;
     case 'log':
         $title = get_string('viewlog', 'tool_analytics');
@@ -200,7 +200,7 @@ switch ($action) {
         echo $renderer->render_evaluate_results($results, $model->get_analyser()->get_logs());
         break;
 
-    case 'getpredictions':
+    case 'scheduledanalysis':
         confirm_sesskey();
 
         if ($onlycli) {
index 39d8e6b..640a6f1 100644 (file)
     Data attributes required for JS:
     * [data-widget="toggle"] indicates the clickable element for expanding/collapsing
       the list of indicators used by the given model.
+    * [data-model-name="..."] should be provided by an element wrapping the model's actions menu
+      and contain the plain text name of the model.
 
     Context variables required for this template:
     * models: array - list of models to display
         - id: int - model unique identifier
+        - modelname: string - name of the model
         - name: object - data for the inplace editable element template
         - target: string - name of the target associated with the model
         - targetclass: string - fully qualified name of the target class
@@ -50,6 +53,7 @@
         "models": [
             {
                 "id": 11,
+                "modelname": "Prevent devs at risk",
                 "name": {
                     "component": "local_analyticsdemo",
                     "itemtype": "modelname",
         </thead>
         <tbody>
         {{#models}}
-            <tr>
+            <tr data-model-name="{{modelname}}">
                 <td>
                     {{#name}}
                         <span class="model-name">{{>core/inplace_editable}}</span>
index fae12cb..03c5187 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2019032800; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2019032200; // Requires this Moodle version.
+$plugin->version   = 2019052000; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2019051100; // Requires this Moodle version.
 $plugin->component = 'tool_analytics'; // Full name of the plugin (used for diagnostics).
index 06c1679..93abae8 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2018120300;
-$plugin->requires = 2018112800;
+$plugin->version = 2019052000;
+$plugin->requires = 2019051100;
 $plugin->component = 'tool_availabilityconditions';
index 951e778..cf851e4 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2018120300;   // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2018112800;   // Requires this Moodle version
+$plugin->version   = 2019052000;   // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2019051100;   // Requires this Moodle version
 $plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
index 243e159..24be970 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2018112800; // Requires this Moodle version.
+$plugin->version   = 2019052000; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2019051100; // Requires this Moodle version.
 $plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics).
index c6b10ad..d740274 100644 (file)
@@ -25,8 +25,8 @@
 defined('MOODLE_INTERNAL') || die();
 
 
-$plugin->version   = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2018112800; // Requires this Moodle version.
+$plugin->version   = 2019052000; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2019051100; // Requires this Moodle version.
 $plugin->component = 'tool_cohortroles'; // Full name of the plugin (used for diagnostics).
 
 $plugin->dependencies = array(
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 46bf6e5..f00ae9e 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2018120300;
-$plugin->requires  = 2018112800;
+$plugin->version   = 2019052000;
+$plugin->requires  = 2019051100;
 $plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
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 bb4cc65..78d0c5b 100644 (file)
               }} data-status="{{status}}"{{!
               }}>
                 <td>{{typename}}</td>
-                <td>{{#userdate}} {{timecreated}}, {{#str}} strftimedatetime {{/str}} {{/userdate}}</td>
+                <td>{{#userdate}} {{timecreated}}, {{#str}} strftimedatetime, core_langconfig {{/str}} {{/userdate}}</td>
                 <td><a href="{{requestedbyuser.profileurl}}" title="{{#str}}viewprofile{{/str}}">{{requestedbyuser.fullname}}</a></td>
                 <td>
                     <span class="badge {{statuslabelclass}}" title="{{statuslabeltitle}}">{{statuslabel}}</span>