Merge branch 'MDL-56459-master' of git://github.com/FMCorz/moodle
authorDan Poltawski <dan@moodle.com>
Mon, 5 Dec 2016 15:48:27 +0000 (15:48 +0000)
committerDan Poltawski <dan@moodle.com>
Mon, 5 Dec 2016 15:48:27 +0000 (15:48 +0000)
877 files changed:
admin/blocks.php
admin/roles/assign.php
admin/roles/check.php
admin/roles/permissions.php
admin/settings/grades.php
admin/templates/setting_configpasswordunmask.mustache
admin/tool/assignmentupgrade/version.php
admin/tool/availabilityconditions/version.php
admin/tool/behat/cli/run.php
admin/tool/behat/tests/behat/data_generators.feature
admin/tool/behat/tests/behat/manipulate_forms.feature
admin/tool/behat/version.php
admin/tool/capability/version.php
admin/tool/cohortroles/version.php
admin/tool/customlang/version.php
admin/tool/dbtransfer/version.php
admin/tool/filetypes/version.php
admin/tool/generator/version.php
admin/tool/health/version.php
admin/tool/innodb/version.php
admin/tool/installaddon/version.php
admin/tool/langimport/version.php
admin/tool/log/store/database/version.php
admin/tool/log/store/legacy/version.php
admin/tool/log/store/standard/version.php
admin/tool/log/version.php
admin/tool/lp/classes/external/cohort_summary_exporter.php
admin/tool/lp/classes/output/manage_competency_frameworks_page.php
admin/tool/lp/lang/en/tool_lp.php
admin/tool/lp/version.php
admin/tool/lpimportcsv/version.php
admin/tool/lpmigrate/tests/processor_test.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/launch.php
admin/tool/mobile/tests/externallib_test.php
admin/tool/mobile/version.php
admin/tool/monitor/classes/output/managerules/renderer.php
admin/tool/monitor/tests/behat/subscription.feature
admin/tool/monitor/version.php
admin/tool/multilangupgrade/version.php
admin/tool/phpunit/version.php
admin/tool/profiling/version.php
admin/tool/recyclebin/tests/behat/backup_user_data.feature
admin/tool/recyclebin/version.php
admin/tool/replace/version.php
admin/tool/spamcleaner/index.php
admin/tool/spamcleaner/version.php
admin/tool/task/version.php
admin/tool/templatelibrary/amd/src/search.js
admin/tool/templatelibrary/version.php
admin/tool/unsuproles/version.php
admin/tool/uploadcourse/version.php
admin/tool/uploaduser/version.php
admin/tool/usertours/amd/build/tour.min.js
admin/tool/usertours/amd/src/tour.js
admin/tool/usertours/classes/cache.php
admin/tool/usertours/classes/manager.php
admin/tool/usertours/classes/tour.php
admin/tool/usertours/db/install.php
admin/tool/usertours/db/upgrade.php [moved from message/output/airnotifier/style.css with 50% similarity]
admin/tool/usertours/lang/en/tool_usertours.php
admin/tool/usertours/tests/cache_test.php
admin/tool/usertours/tests/tour_test.php
admin/tool/usertours/thirdpartylibs.xml
admin/tool/usertours/tours/boost_administrator.json [new file with mode: 0644]
admin/tool/usertours/tours/boost_course_view.json [new file with mode: 0644]
admin/tool/usertours/version.php
admin/tool/xmldb/version.php
admin/upgradesettings.php
auth/cas/version.php
auth/db/auth.php
auth/db/version.php
auth/email/classes/external.php
auth/email/version.php
auth/fc/version.php
auth/imap/version.php
auth/ldap/version.php
auth/lti/version.php
auth/manual/version.php
auth/mnet/version.php
auth/nntp/version.php
auth/nologin/version.php
auth/none/version.php
auth/pam/lang/en/auth_pam.php
auth/pam/version.php
auth/pop3/version.php
auth/shibboleth/version.php
auth/tests/behat/behat_auth.php
auth/upgrade.txt
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/util/dbops/backup_controller_dbops.class.php
backup/util/ui/renderer.php
backup/util/ui/tests/behat/behat_backup.php
backup/util/ui/tests/behat/import_course.feature
backup/util/ui/tests/behat/import_groups.feature
blocks/activity_modules/version.php
blocks/activity_results/tests/behat/addblockinactivity.feature
blocks/activity_results/tests/behat/highscoreswithoutgroups.feature
blocks/activity_results/tests/behat/highscoreswithscales.feature
blocks/activity_results/tests/behat/highscoreswithscalesandgroups.feature
blocks/activity_results/tests/behat/highscoreswithseperategroups.feature
blocks/activity_results/tests/behat/highscoreswithvisiblegroups.feature
blocks/activity_results/tests/behat/lowscoreswithoutgroups.feature
blocks/activity_results/tests/behat/lowscoreswithscales.feature
blocks/activity_results/tests/behat/lowscoreswithscalesandgroups.feature
blocks/activity_results/tests/behat/lowscoreswithseperategroups.feature
blocks/activity_results/tests/behat/lowscoreswithvisiblegroups.feature
blocks/activity_results/version.php
blocks/admin_bookmarks/version.php
blocks/badges/version.php
blocks/blog_menu/version.php
blocks/blog_recent/version.php
blocks/blog_tags/version.php
blocks/calendar_month/version.php
blocks/calendar_upcoming/version.php
blocks/comments/version.php
blocks/community/forms.php
blocks/community/version.php
blocks/completionstatus/version.php
blocks/course_list/version.php
blocks/course_overview/renderer.php
blocks/course_overview/version.php
blocks/course_summary/block_course_summary.php
blocks/course_summary/tests/behat/block_course_summary_course.feature
blocks/course_summary/tests/behat/block_course_summary_frontpage.feature
blocks/course_summary/version.php
blocks/feedback/version.php
blocks/globalsearch/version.php
blocks/glossary_random/version.php
blocks/html/version.php
blocks/login/block_login.php
blocks/login/version.php
blocks/lp/version.php
blocks/mentees/version.php
blocks/messages/version.php
blocks/mnet_hosts/version.php
blocks/myprofile/version.php
blocks/navigation/version.php
blocks/news_items/version.php
blocks/online_users/version.php
blocks/participants/version.php
blocks/private_files/tests/behat/block_private_files_activity.feature
blocks/private_files/tests/behat/block_private_files_course.feature
blocks/private_files/version.php
blocks/quiz_results/version.php
blocks/recent_activity/version.php
blocks/rss_client/version.php
blocks/search_forums/version.php
blocks/section_links/version.php
blocks/selfcompletion/version.php
blocks/settings/version.php
blocks/site_main_menu/version.php
blocks/social_activities/tests/behat/edit_activities.feature
blocks/social_activities/version.php
blocks/tag_flickr/version.php
blocks/tag_youtube/version.php
blocks/tags/version.php
blocks/tests/behat/behat_blocks.php
blocks/tests/behat/restrict_available_blocks.feature
cache/locks/file/version.php
cache/stores/apcu/version.php
cache/stores/file/version.php
cache/stores/memcache/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
cache/tests/cache_test.php
calendar/renderer.php
calendar/tests/behat/calendar.feature
calendar/type/gregorian/version.php
calendar/view.php
comment/index.php
comment/locallib.php
completion/tests/behat/behat_completion.php
composer.json
composer.lock
course/classes/management/helper.php
course/edit_form.php
course/format/lib.php
course/format/singleactivity/version.php
course/format/social/lib.php
course/format/social/version.php
course/format/topics/lib.php
course/format/topics/version.php
course/format/upgrade.txt
course/format/weeks/lib.php
course/format/weeks/version.php
course/lib.php
course/publish/forms.php
course/publish/lib.php
course/renderer.php
course/switchrole.php
course/tests/behat/category_management.feature
course/tests/behat/rename_roles.feature
course/tests/courseformat_test.php
course/tests/courselib_test.php
course/tests/externallib_test.php
course/tests/management_helper_test.php
course/yui/build/moodle-course-categoryexpander/moodle-course-categoryexpander-debug.js
course/yui/build/moodle-course-categoryexpander/moodle-course-categoryexpander-min.js
course/yui/build/moodle-course-categoryexpander/moodle-course-categoryexpander.js
course/yui/src/categoryexpander/js/categoryexpander.js
dataformat/csv/version.php
dataformat/excel/version.php
dataformat/html/version.php
dataformat/json/version.php
dataformat/ods/version.php
enrol/category/version.php
enrol/cohort/version.php
enrol/database/version.php
enrol/flatfile/version.php
enrol/guest/version.php
enrol/imsenterprise/version.php
enrol/ldap/version.php
enrol/lti/version.php
enrol/manual/version.php
enrol/manual/yui/quickenrolment/assets/skins/sam/quickenrolment.css
enrol/manual/yui/quickenrolment/quickenrolment.js
enrol/meta/locallib.php
enrol/meta/version.php
enrol/mnet/version.php
enrol/paypal/version.php
enrol/self/version.php
enrol/tests/behat/behat_enrol.php
enrol/yui/rolemanager/rolemanager.js
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/version.php
filter/mediaplugin/filter.php
filter/mediaplugin/styles.css
filter/mediaplugin/version.php
filter/multilang/version.php
filter/tex/version.php
filter/tidy/version.php
filter/urltolink/version.php
grade/edit/tree/item_form.php
grade/export/ods/version.php
grade/export/txt/tests/behat/export.feature
grade/export/txt/version.php
grade/export/xls/version.php
grade/export/xml/tests/behat/export.feature
grade/export/xml/version.php
grade/grading/form/guide/renderer.php
grade/grading/form/guide/version.php
grade/grading/form/rubric/lang/en/gradingform_rubric.php
grade/grading/form/rubric/tests/behat/edit_rubric.feature
grade/grading/form/rubric/tests/behat/grade_calculation.feature
grade/grading/form/rubric/version.php
grade/import/csv/version.php
grade/import/direct/version.php
grade/import/xml/version.php
grade/lib.php
grade/report/grader/tests/behat/ajax_grader.feature
grade/report/grader/tests/behat/switch_views.feature
grade/report/grader/version.php
grade/report/history/tests/behat/basic_functionality.feature
grade/report/history/version.php
grade/report/outcomes/version.php
grade/report/overview/version.php
grade/report/singleview/tests/behat/singleview.feature
grade/report/singleview/version.php
grade/report/user/tests/behat/user_view.feature
grade/report/user/tests/behat/view_usereport.feature
grade/report/user/version.php
grade/tests/behat/behat_grade.php
grade/tests/behat/grade_UI_settings.feature
grade/tests/behat/grade_aggregation.feature
grade/tests/behat/grade_aggregation_changes.feature
grade/tests/behat/grade_average.feature
grade/tests/behat/grade_calculated_grade_items.feature
grade/tests/behat/grade_calculated_grade_items_20150627.feature
grade/tests/behat/grade_calculated_weights.feature
grade/tests/behat/grade_category_validation.feature
grade/tests/behat/grade_contribution_with_extra_credit.feature
grade/tests/behat/grade_grade_minmax_change.feature
grade/tests/behat/grade_hidden_items.feature
grade/tests/behat/grade_item_validation.feature
grade/tests/behat/grade_letter_boundary.feature
grade/tests/behat/grade_letter_boundary_20160518.feature
grade/tests/behat/grade_mingrade.feature
grade/tests/behat/grade_minmax.feature
grade/tests/behat/grade_natural_exclude_empty.feature
grade/tests/behat/grade_natural_exclude_empty_20150619.feature
grade/tests/behat/grade_natural_normalisation.feature
grade/tests/behat/grade_natural_normalisation_20150619.feature
grade/tests/behat/grade_override_letter.feature
grade/tests/behat/grade_scales.feature
grade/tests/behat/grade_scales_aggregation.feature
grade/tests/behat/grade_single_item_scales.feature
grade/tests/behat/grade_to_pass.feature
grade/tests/behat/grade_view.feature
group/autogroup_form.php
index.php
install/lang/cs/install.php
install/lang/da/install.php
install/lang/nl/install.php
install/lang/pl/install.php
install/lang/ro/install.php
lang/en/admin.php
lang/en/auth.php
lang/en/cache.php
lang/en/error.php
lang/en/message.php
lang/en/moodle.php
lib/accesslib.php
lib/ajax/service.php
lib/amd/build/addblockmodal.min.js [new file with mode: 0644]
lib/amd/build/backoff_timer.min.js [new file with mode: 0644]
lib/amd/build/chart_base.min.js
lib/amd/build/chart_pie.min.js
lib/amd/build/event.min.js
lib/amd/build/modal_cancel.min.js [new file with mode: 0644]
lib/amd/build/modal_factory.min.js
lib/amd/build/notification.min.js
lib/amd/src/addblockmodal.js [new file with mode: 0644]
lib/amd/src/backoff_timer.js [new file with mode: 0644]
lib/amd/src/chart_base.js
lib/amd/src/chart_pie.js
lib/amd/src/event.js
lib/amd/src/modal_cancel.js [new file with mode: 0644]
lib/amd/src/modal_factory.js
lib/amd/src/notification.js
lib/antivirus/clamav/version.php
lib/authlib.php
lib/behat/behat_base.php
lib/behat/classes/util.php
lib/behat/form_field/behat_form_passwordunmask.php
lib/behat/lib.php
lib/blocklib.php
lib/classes/chart_base.php
lib/classes/event/badge_listing_viewed.php
lib/classes/filetypes.php
lib/classes/upgrade/util.php
lib/configonlylib.php
lib/coursecatlib.php
lib/db/caches.php
lib/db/install.xml
lib/db/renamedclasses.php
lib/db/upgrade.php
lib/deprecatedlib.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/version.php
lib/editor/atto/plugins/fontcolor/version.php
lib/editor/atto/plugins/html/version.php
lib/editor/atto/plugins/image/styles.css
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/lang/en/atto_media.php
lib/editor/atto/plugins/media/lib.php
lib/editor/atto/plugins/media/styles.css [new file with mode: 0644]
lib/editor/atto/plugins/media/styles_clean.css [new file with mode: 0644]
lib/editor/atto/plugins/media/tests/behat/media.feature
lib/editor/atto/plugins/media/version.php
lib/editor/atto/plugins/media/yui/build/moodle-atto_media-button/moodle-atto_media-button-debug.js
lib/editor/atto/plugins/media/yui/build/moodle-atto_media-button/moodle-atto_media-button-min.js
lib/editor/atto/plugins/media/yui/build/moodle-atto_media-button/moodle-atto_media-button.js
lib/editor/atto/plugins/media/yui/src/button/js/button.js
lib/editor/atto/plugins/noautolink/version.php
lib/editor/atto/plugins/orderedlist/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/tests/fixtures/moodle-logo.mp4 [new file with mode: 0644]
lib/editor/atto/tests/fixtures/pretty-good-en.vtt [new file with mode: 0644]
lib/editor/atto/tests/fixtures/pretty-good-sv.vtt [new file with mode: 0644]
lib/editor/atto/version.php
lib/editor/atto/yui/build/moodle-editor_atto-editor/moodle-editor_atto-editor-debug.js
lib/editor/atto/yui/build/moodle-editor_atto-editor/moodle-editor_atto-editor-min.js
lib/editor/atto/yui/build/moodle-editor_atto-editor/moodle-editor_atto-editor.js
lib/editor/atto/yui/src/editor/js/editor.js
lib/editor/textarea/version.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/version.php
lib/editor/tinymce/plugins/wrap/version.php
lib/editor/tinymce/styles.css
lib/editor/tinymce/version.php
lib/filterlib.php
lib/form/amd/build/passwordunmask.min.js
lib/form/amd/src/passwordunmask.js
lib/form/editor.php
lib/form/selectgroups.php
lib/form/templates/element-passwordunmask.mustache
lib/messagelib.php
lib/moodlelib.php
lib/navigationlib.php
lib/outputcomponents.php
lib/outputfactories.php
lib/outputlib.php
lib/outputrenderers.php
lib/pagelib.php
lib/questionlib.php
lib/requirejs/moodle-config.js
lib/setup.php
lib/setuplib.php
lib/templates/action_link.mustache
lib/templates/add_block_body.mustache [new file with mode: 0644]
lib/templates/modal_cancel.mustache [new file with mode: 0644]
lib/templates/modal_confirm.mustache
lib/templates/modal_save_cancel.mustache
lib/templates/popover_region.mustache
lib/templates/settings_link_page.mustache
lib/tests/behat/behat_hooks.php
lib/tests/blocklib_test.php
lib/tests/coursecatlib_test.php
lib/tests/filelib_test.php
lib/tests/filterlib_test.php
lib/tests/upgrade_util_test.php
lib/tests/user_menu_test.php
lib/upgrade.txt
lib/upgradelib.php
lib/webdavlib.php
login/signup.php
media/classes/manager.php
media/classes/player.php
media/player/html5audio/version.php
media/player/html5video/version.php
media/player/swf/version.php
media/player/videojs/amd/build/Youtube.min.js
media/player/videojs/amd/build/loader.min.js [new file with mode: 0644]
media/player/videojs/amd/build/video.min.js
media/player/videojs/amd/src/Youtube.js
media/player/videojs/amd/src/loader.js [new file with mode: 0644]
media/player/videojs/amd/src/video.js
media/player/videojs/classes/plugin.php
media/player/videojs/readme_moodle.txt
media/player/videojs/styles.css
media/player/videojs/thirdpartylibs.xml
media/player/videojs/version.php
media/player/videojs/videojs/lang/de.js
media/player/videojs/videojs/lang/el.js
media/player/videojs/videojs/lang/en.js
media/player/videojs/videojs/lang/fr.js
media/player/videojs/videojs/video-js.swf [moved from media/player/videojs/video-js.swf with 100% similarity]
media/player/vimeo/version.php
media/player/youtube/version.php
message/amd/build/message_area.min.js
message/amd/build/message_area_contacts.min.js
message/amd/build/message_area_messages.min.js
message/amd/build/message_area_search.min.js
message/amd/src/message_area.js
message/amd/src/message_area_contacts.js
message/amd/src/message_area_messages.js
message/amd/src/message_area_search.js
message/classes/api.php
message/classes/helper.php
message/classes/output/messagearea/contact.php
message/classes/output/messagearea/message.php
message/classes/output/messagearea/message_area.php
message/classes/output/messagearea/messages.php
message/classes/output/messagearea/profile.php
message/classes/output/messagearea/user_search_results.php
message/classes/time_last_message_between_users.php [new file with mode: 0644]
message/externallib.php
message/index.php
message/lib.php
message/output/airnotifier/message_output_airnotifier.php
message/output/airnotifier/version.php
message/output/airnotifier/yui/build/moodle-message_airnotifier-toolboxes/moodle-message_airnotifier-toolboxes-debug.js
message/output/airnotifier/yui/build/moodle-message_airnotifier-toolboxes/moodle-message_airnotifier-toolboxes-min.js
message/output/airnotifier/yui/build/moodle-message_airnotifier-toolboxes/moodle-message_airnotifier-toolboxes.js
message/output/airnotifier/yui/src/toolboxes/js/toolboxes.js
message/output/email/version.php
message/output/jabber/version.php
message/output/popup/lib.php
message/output/popup/templates/message_popover.mustache
message/output/popup/templates/notification_content_item.mustache
message/output/popup/version.php
message/templates/message_area.mustache
message/templates/message_area_contact.mustache
message/templates/message_area_contacts_area.mustache
message/templates/message_area_message.mustache
message/templates/message_area_messages_area.mustache
message/templates/message_area_profile.mustache
message/templates/message_area_response.mustache
message/templates/message_area_user_search_results.mustache
message/templates/preferences_processor.mustache
message/tests/api_test.php
message/tests/behat/behat_message.php
message/tests/behat/search_messages.feature
message/tests/externallib_test.php
mnet/service/enrol/version.php
mod/assign/amd/build/grading_panel.min.js
mod/assign/amd/src/grading_panel.js
mod/assign/feedback/comments/version.php
mod/assign/feedback/editpdf/fpdi/fpdi_bridge.php
mod/assign/feedback/editpdf/fpdi/readme_moodle.txt
mod/assign/feedback/editpdf/tests/behat/annotate_pdf.feature
mod/assign/feedback/editpdf/version.php
mod/assign/feedback/file/version.php
mod/assign/feedback/offline/version.php
mod/assign/locallib.php
mod/assign/styles.css
mod/assign/submission/comments/version.php
mod/assign/submission/file/settings.php
mod/assign/submission/file/version.php
mod/assign/submission/onlinetext/version.php
mod/assign/tests/behat/steps_blind_marking.feature
mod/assign/version.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/tool/exportimscp/version.php
mod/book/tool/importhtml/version.php
mod/book/tool/print/version.php
mod/book/version.php
mod/chat/lang/en/chat.php
mod/chat/lib.php
mod/chat/tests/behat/chat_calendar_events.feature [new file with mode: 0644]
mod/chat/version.php
mod/chat/view.php
mod/choice/version.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/preset/imagegallery/version.php
mod/data/version.php
mod/feedback/tests/behat/behat_mod_feedback.php
mod/feedback/version.php
mod/folder/version.php
mod/forum/classes/observer.php
mod/forum/lib.php
mod/forum/pix/t/selected.png [new file with mode: 0644]
mod/forum/pix/t/selected.svg [new file with mode: 0644]
mod/forum/styles.css
mod/forum/version.php
mod/glossary/version.php
mod/imscp/version.php
mod/label/version.php
mod/lesson/edit.php
mod/lesson/tests/behat/duplicate_lesson_page.feature
mod/lesson/tests/behat/lesson_user_override.feature
mod/lesson/version.php
mod/lti/amd/build/tool_configure_controller.min.js
mod/lti/amd/src/tool_configure_controller.js
mod/lti/locallib.php
mod/lti/mod_form.js
mod/lti/mod_form.php
mod/lti/service/memberships/version.php
mod/lti/service/profile/version.php
mod/lti/service/toolproxy/version.php
mod/lti/service/toolsettings/version.php
mod/lti/tests/behat/addtool.feature
mod/lti/tests/behat/contentitem.feature
mod/lti/tests/locallib_test.php
mod/lti/upgrade.txt
mod/lti/version.php
mod/lti/view.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/classes/output/edit_renderer.php
mod/quiz/lib.php
mod/quiz/renderer.php
mod/quiz/report/attemptsreport_table.php
mod/quiz/report/grading/version.php
mod/quiz/report/overview/overview_table.php
mod/quiz/report/overview/report.php
mod/quiz/report/overview/version.php
mod/quiz/report/responses/report.php
mod/quiz/report/responses/version.php
mod/quiz/report/statistics/version.php
mod/quiz/styles.css
mod/quiz/version.php
mod/resource/version.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/completion_condition_require_status.feature
mod/scorm/version.php
mod/survey/version.php
mod/url/version.php
mod/wiki/editors/html.php
mod/wiki/editors/wiki_editor.php
mod/wiki/editors/wikieditor.php
mod/wiki/locallib.php
mod/wiki/pagelib.php
mod/wiki/styles.css
mod/wiki/version.php
mod/workshop/allocation/manual/version.php
mod/workshop/allocation/random/version.php
mod/workshop/allocation/scheduled/version.php
mod/workshop/eval/best/version.php
mod/workshop/form/accumulative/version.php
mod/workshop/form/comments/version.php
mod/workshop/form/numerrors/version.php
mod/workshop/form/rubric/version.php
mod/workshop/version.php
my/tests/behat/restrict_available_blocks.feature
portfolio/boxnet/version.php
portfolio/download/version.php
portfolio/flickr/version.php
portfolio/googledocs/version.php
portfolio/mahara/version.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/version.php
question/behaviour/missing/version.php
question/classes/bank/search/category_condition.php
question/classes/bank/view.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/preview.php
question/type/calculated/questiontype.php
question/type/calculated/version.php
question/type/calculatedmulti/version.php
question/type/calculatedsimple/version.php
question/type/ddimageortext/version.php
question/type/ddmarker/questiontype.php
question/type/ddmarker/tests/helper.php
question/type/ddmarker/tests/questiontype_test.php
question/type/ddmarker/version.php
question/type/ddmarker/yui/build/moodle-qtype_ddmarker-form/moodle-qtype_ddmarker-form-debug.js
question/type/ddmarker/yui/build/moodle-qtype_ddmarker-form/moodle-qtype_ddmarker-form-min.js
question/type/ddmarker/yui/build/moodle-qtype_ddmarker-form/moodle-qtype_ddmarker-form.js
question/type/ddmarker/yui/src/form/js/form.js
question/type/ddwtos/version.php
question/type/description/version.php
question/type/essay/version.php
question/type/gapselect/renderer.php
question/type/gapselect/version.php
question/type/match/renderer.php
question/type/match/version.php
question/type/missingtype/version.php
question/type/multianswer/renderer.php
question/type/multianswer/tests/walkthrough_test.php
question/type/multianswer/version.php
question/type/multichoice/renderer.php
question/type/multichoice/version.php
question/type/numerical/renderer.php
question/type/numerical/version.php
question/type/random/version.php
question/type/randomsamatch/version.php
question/type/shortanswer/renderer.php
question/type/shortanswer/version.php
question/type/truefalse/renderer.php
question/type/truefalse/version.php
question/yui/build/moodle-question-preview/moodle-question-preview-debug.js
question/yui/build/moodle-question-preview/moodle-question-preview-min.js
question/yui/build/moodle-question-preview/moodle-question-preview.js
question/yui/src/preview/js/preview.js
report/backups/version.php
report/competency/version.php
report/completion/index.php
report/completion/version.php
report/configlog/version.php
report/courseoverview/index.php
report/courseoverview/version.php
report/eventlist/version.php
report/log/classes/renderer.php
report/log/version.php
report/loglive/classes/renderer.php
report/loglive/version.php
report/outline/version.php
report/participation/index.php
report/participation/locallib.php
report/participation/styles.css
report/participation/version.php
report/performance/version.php
report/progress/version.php
report/questioninstances/index.php
report/questioninstances/version.php
report/security/locallib.php
report/security/version.php
report/stats/locallib.php
report/stats/version.php
report/usersessions/version.php
repository/areafiles/version.php
repository/boxnet/version.php
repository/coursefiles/version.php
repository/dropbox/version.php
repository/equella/version.php
repository/filepicker.js
repository/filesystem/version.php
repository/flickr/version.php
repository/flickr_public/version.php
repository/googledocs/version.php
repository/local/version.php
repository/merlot/version.php
repository/picasa/version.php
repository/recent/version.php
repository/s3/version.php
repository/skydrive/microsoftliveapi.php
repository/skydrive/version.php
repository/upload/version.php
repository/url/version.php
repository/user/version.php
repository/webdav/lib.php
repository/webdav/version.php
repository/wikimedia/version.php
repository/youtube/version.php
search/engine/solr/version.php
search/upgrade.txt [new file with mode: 0644]
theme/boost/amd/build/drawer.min.js
theme/boost/amd/build/form-display-errors.min.js
theme/boost/amd/build/loader.min.js
theme/boost/amd/src/drawer.js
theme/boost/amd/src/form-display-errors.js
theme/boost/amd/src/loader.js
theme/boost/classes/autoprefixer.php
theme/boost/classes/output/core_renderer.php
theme/boost/config.php
theme/boost/lang/en/theme_boost.php
theme/boost/layout/columns1.php
theme/boost/layout/columns2.php
theme/boost/layout/embedded.php
theme/boost/layout/login.php
theme/boost/layout/maintenance.php
theme/boost/layout/secure.php
theme/boost/lib.php
theme/boost/readme_moodle.txt
theme/boost/scss/bootstrap/_popover.scss
theme/boost/scss/moodle.scss
theme/boost/scss/moodle/admin.scss
theme/boost/scss/moodle/blocks.scss
theme/boost/scss/moodle/buttons.scss
theme/boost/scss/moodle/calendar.scss
theme/boost/scss/moodle/core.scss
theme/boost/scss/moodle/course.scss
theme/boost/scss/moodle/debug.scss
theme/boost/scss/moodle/expendable.scss
theme/boost/scss/moodle/filemanager.scss
theme/boost/scss/moodle/forms.scss
theme/boost/scss/moodle/grade.scss
theme/boost/scss/moodle/icons.scss
theme/boost/scss/moodle/login.scss
theme/boost/scss/moodle/message.scss
theme/boost/scss/moodle/modules.scss
theme/boost/scss/moodle/popover-region.scss
theme/boost/scss/moodle/print.scss [new file with mode: 0644]
theme/boost/scss/moodle/question.scss
theme/boost/scss/moodle/tool_usertours.scss
theme/boost/scss/moodle/undo.scss
theme/boost/scss/moodle/user.scss
theme/boost/templates/columns1.mustache
theme/boost/templates/columns2.mustache
theme/boost/templates/core/filemanager_fileselect.mustache
theme/boost/templates/core/filemanager_loginform.mustache
theme/boost/templates/core/filemanager_modal_generallayout.mustache
theme/boost/templates/core/filemanager_selectlayout.mustache
theme/boost/templates/core/login.mustache
theme/boost/templates/core/navbar.mustache
theme/boost/templates/core/settings_link_page.mustache
theme/boost/templates/core/signup_form_layout.mustache
theme/boost/templates/core/single_select.mustache
theme/boost/templates/core_admin/setting_configpasswordunmask.mustache [deleted file]
theme/boost/templates/core_form/element-advcheckbox-inline.mustache
theme/boost/templates/core_form/element-advcheckbox.mustache
theme/boost/templates/core_form/element-checkbox-inline.mustache
theme/boost/templates/core_form/element-checkbox.mustache
theme/boost/templates/core_form/element-date_selector-inline.mustache [new file with mode: 0644]
theme/boost/templates/core_form/element-date_selector.mustache
theme/boost/templates/core_form/element-passwordunmask.mustache
theme/boost/templates/core_form/element-radio-inline.mustache
theme/boost/templates/core_form/element-radio.mustache
theme/boost/templates/core_form/element-select.mustache
theme/boost/templates/core_form/element-template-inline.mustache
theme/boost/templates/core_form/element-template.mustache
theme/boost/templates/embedded.mustache
theme/boost/templates/flat_navigation.mustache
theme/boost/templates/gradingform_guide/comment_chooser.mustache [new file with mode: 0644]
theme/boost/templates/header-secure.mustache [new file with mode: 0644]
theme/boost/templates/header.mustache
theme/boost/templates/login.mustache
theme/boost/templates/maintenance.mustache
theme/boost/templates/nav-drawer.mustache
theme/boost/templates/secure.mustache
theme/boost/tests/behat/behat_theme_boost_behat_auth.php [deleted file]
theme/boost/tests/behat/behat_theme_boost_behat_blocks.php
theme/boost/tests/behat/behat_theme_boost_behat_navigation.php
theme/boost/tests/behat/contextmenu.feature [new file with mode: 0644]
theme/boost/tests/behat/regionmainsettingsmenu.feature [new file with mode: 0644]
theme/boost/version.php
theme/bootstrapbase/less/moodle/admin.less
theme/bootstrapbase/less/moodle/bs4-compat.less
theme/bootstrapbase/less/moodle/buttons.less
theme/bootstrapbase/less/moodle/calendar.less
theme/bootstrapbase/less/moodle/core.less
theme/bootstrapbase/less/moodle/forms.less
theme/bootstrapbase/less/moodle/message.less
theme/bootstrapbase/less/moodle/modules.less
theme/bootstrapbase/less/moodle/popover_region.less
theme/bootstrapbase/less/moodle/undo.less
theme/bootstrapbase/style/moodle.css
theme/bootstrapbase/version.php
theme/clean/style/custom.css
theme/clean/version.php
theme/more/style/custom.css
theme/more/version.php
theme/upgrade.txt
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/user_grade_navigation.feature
user/tests/behat/view_full_profile.feature
user/tests/userlib_test.php
version.php
webservice/rest/version.php
webservice/soap/version.php
webservice/xmlrpc/version.php

index dcf00f6..b31da9e 100644 (file)
@@ -4,6 +4,7 @@
 
     require_once('../config.php');
     require_once($CFG->libdir.'/adminlib.php');
+    require_once($CFG->libdir.'/blocklib.php');
     require_once($CFG->libdir.'/tablelib.php');
 
     admin_externalpage_setup('manageblocks');
         admin_get_root(true, false);  // settings not required - only pages
     }
 
-    if (!isset($CFG->undeletableblocktypes) || (!is_array($CFG->undeletableblocktypes) && !is_string($CFG->undeletableblocktypes))) {
-        $undeletableblocktypes = array('navigation', 'settings');
-    } else if (is_string($CFG->undeletableblocktypes)) {
-        $undeletableblocktypes = explode(',', $CFG->undeletableblocktypes);
-    } else {
-        $undeletableblocktypes = $CFG->undeletableblocktypes;
-    }
-
     if (!empty($protect) && confirm_sesskey()) {
-        if (!$block = $DB->get_record('block', array('id'=>$protect))) {
-            print_error('blockdoesnotexist', 'error');
-        }
-        if (!in_array($block->name, $undeletableblocktypes)) {
-            $undeletableblocktypes[] = $block->name;
-            set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
-        }
+        block_manager::protect_block((int)$protect);
         admin_get_root(true, false);  // settings not required - only pages
     }
 
     if (!empty($unprotect) && confirm_sesskey()) {
-        if (!$block = $DB->get_record('block', array('id'=>$unprotect))) {
-            print_error('blockdoesnotexist', 'error');
-        }
-        if (in_array($block->name, $undeletableblocktypes)) {
-            $undeletableblocktypes = array_diff($undeletableblocktypes, array($block->name));
-            set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
-        }
+        block_manager::unprotect_block((int)$unprotect);
         admin_get_root(true, false);  // settings not required - only pages
     }
 
+    $undeletableblocktypes = block_manager::get_undeletable_block_types();
+
     echo $OUTPUT->header();
     echo $OUTPUT->heading($strmanageblocks);
 
index f535866..889a2d1 100644 (file)
@@ -29,7 +29,7 @@ define("MAX_USERS_TO_LIST_PER_ROLE", 10);
 
 $contextid = required_param('contextid', PARAM_INT);
 $roleid    = optional_param('roleid', 0, PARAM_INT);
-$returnto  = optional_param('return', null, PARAM_ALPHANUMEXT);
+$returnurl = optional_param('returnurl', null, PARAM_LOCALURL);
 
 list($context, $course, $cm) = get_context_info_array($contextid);
 
@@ -53,7 +53,13 @@ if ($course) {
 // Security.
 require_login($course, false, $cm);
 require_capability('moodle/role:assign', $context);
-$PAGE->set_url($url);
+
+navigation_node::override_active_url($url);
+$pageurl = new moodle_url($url);
+if ($returnurl) {
+    $pageurl->param('returnurl', $returnurl);
+}
+$PAGE->set_url($pageurl);
 $PAGE->set_context($context);
 
 $contextname = $context->get_context_name();
@@ -141,6 +147,10 @@ if (!empty($user) && ($user->id != $USER->id)) {
 }
 
 $PAGE->set_pagelayout('admin');
+if ($context->contextlevel == CONTEXT_BLOCK) {
+    // Do not show blocks when changing block's settings, it is confusing.
+    $PAGE->blocks->show_only_fake_blocks(true);
+}
 $PAGE->set_title($title);
 
 switch ($context->contextlevel) {
@@ -186,9 +196,6 @@ if ($roleid) {
 
     // Print the form.
     $assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
-    if ($returnto !== null) {
-        $assignurl->param('return', $returnto);
-    }
 ?>
 <form id="assignform" method="post" action="<?php echo $assignurl ?>"><div>
   <input type="hidden" name="sesskey" value="<?php echo sesskey() ?>" />
@@ -235,18 +242,10 @@ if ($roleid) {
     // Print a form to swap roles, and a link back to the all roles list.
     echo '<div class="backlink">';
 
-    $newroleurl = new moodle_url($PAGE->url);
-    if ($returnto !== null) {
-        $newroleurl->param('return', $returnto);
-    }
-    $select = new single_select($newroleurl, 'roleid', $nameswithcounts, $roleid, null);
+    $select = new single_select($PAGE->url, 'roleid', $nameswithcounts, $roleid, null);
     $select->label = get_string('assignanotherrole', 'core_role');
     echo $OUTPUT->render($select);
-    $backurl = new moodle_url('/admin/roles/assign.php', array('contextid' => $contextid));
-    if ($returnto !== null) {
-        $backurl->param('return', $returnto);
-    }
-    echo '<p><a href="' . $backurl->out() . '">' . get_string('backtoallroles', 'core_role') . '</a></p>';
+    echo '<p><a href="' . $PAGE->url . '">' . get_string('backtoallroles', 'core_role') . '</a></p>';
     echo '</div>';
 
 } else if (empty($assignableroles)) {
@@ -284,9 +283,6 @@ if ($roleid) {
             }
         } else if ($assigncounts[$roleid] > MAX_USERS_TO_LIST_PER_ROLE) {
             $assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
-            if ($returnto !== null) {
-                $assignurl->param('return', $returnto);
-            }
             $roleholdernames[$roleid] = '<a href="'.$assignurl.'">'.$strmorethanmax.'</a>';
         } else {
             $roleholdernames[$roleid] = '';
@@ -307,9 +303,6 @@ if ($roleid) {
     foreach ($assignableroles as $roleid => $rolename) {
         $description = format_string($DB->get_field('role', 'description', array('id'=>$roleid)));
         $assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
-        if ($returnto !== null) {
-            $assignurl->param('return', $returnto);
-        }
         $row = array('<a href="'.$assignurl.'">'.$rolename.'</a>',
                 $description, $assigncounts[$roleid]);
         if ($showroleholders) {
@@ -322,8 +315,8 @@ if ($roleid) {
 
     if ($context->contextlevel > CONTEXT_USER) {
 
-        if ($context->contextlevel === CONTEXT_COURSECAT && $returnto === 'management') {
-            $url = new moodle_url('/course/management.php', array('categoryid' => $context->instanceid));
+        if ($returnurl) {
+            $url = new moodle_url($returnurl);
         } else {
             $url = $context->get_url();
         }
index 0f40308..10e173e 100644 (file)
@@ -25,6 +25,7 @@
 require_once(__DIR__ . '/../../config.php');
 
 $contextid = required_param('contextid', PARAM_INT);
+$returnurl  = optional_param('returnurl', null, PARAM_LOCALURL);
 
 list($context, $course, $cm) = get_context_info_array($contextid);
 
@@ -49,7 +50,13 @@ require_login($course, false, $cm);
 if (!has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:manage'), $context)) {
     print_error('nopermissions', 'error', '', get_string('checkpermissions', 'core_role'));
 }
-$PAGE->set_url($url);
+
+navigation_node::override_active_url($url);
+$pageurl = new moodle_url($url);
+if ($returnurl) {
+    $pageurl->param('returnurl', $returnurl);
+}
+$PAGE->set_url($pageurl);
 
 if ($context->contextlevel == CONTEXT_USER and $USER->id != $context->instanceid) {
     $PAGE->navbar->includesettingsbase = true;
@@ -75,6 +82,10 @@ $userselector->set_rows(20);
 $title = get_string('checkpermissionsin', 'core_role', $contextname);
 
 $PAGE->set_pagelayout('admin');
+if ($context->contextlevel == CONTEXT_BLOCK) {
+    // Do not show blocks when changing block's settings, it is confusing.
+    $PAGE->blocks->show_only_fake_blocks(true);
+}
 $PAGE->set_title($title);
 
 switch ($context->contextlevel) {
@@ -156,16 +167,7 @@ if (!is_null($reportuser)) {
 
 // Show UI for choosing a user to report on.
 echo $OUTPUT->box_start('generalbox boxwidthnormal boxaligncenter', 'chooseuser');
-echo '<form method="get" action="' . $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php" >';
-
-// Hidden fields.
-echo '<input type="hidden" name="contextid" value="' . $context->id . '" />';
-if (!empty($user->id)) {
-    echo '<input type="hidden" name="userid" value="' . $user->id . '" />';
-}
-if ($isfrontpage) {
-    echo '<input type="hidden" name="courseid" value="' . $courseid . '" />';
-}
+echo '<form method="post" action="' . $PAGE->url . '" >';
 
 // User selector.
 echo $OUTPUT->heading('<label for="reportuser">' . $selectheading . '</label>', 3);
@@ -180,7 +182,12 @@ echo $OUTPUT->box_end();
 // Appropriate back link.
 if ($context->contextlevel > CONTEXT_USER) {
     echo html_writer::start_tag('div', array('class'=>'backlink'));
-    echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>$context->get_url()));
+    if ($returnurl) {
+        $backurl = new moodle_url($returnurl);
+    } else {
+        $backurl = $context->get_url();
+    }
+    echo html_writer::link($backurl, get_string('backto', '', $contextname));
     echo html_writer::end_tag('div');
 }
 
index c83f819..89668dc 100644 (file)
@@ -33,7 +33,7 @@ $prevent    = optional_param('prevent', 0, PARAM_BOOL);
 $allow      = optional_param('allow', 0, PARAM_BOOL);
 $unprohibit = optional_param('unprohibit', 0, PARAM_BOOL);
 $prohibit   = optional_param('prohibit', 0, PARAM_BOOL);
-$return     = optional_param('return', null, PARAM_ALPHANUMEXT);
+$returnurl  = optional_param('returnurl', null, PARAM_LOCALURL);
 
 list($context, $course, $cm) = get_context_info_array($contextid);
 
@@ -56,7 +56,13 @@ if ($course) {
 // Security first.
 require_login($course, false, $cm);
 require_capability('moodle/role:review', $context);
-$PAGE->set_url($url);
+
+navigation_node::override_active_url($url);
+$pageurl = new moodle_url($url);
+if ($returnurl) {
+    $pageurl->param('returnurl', $returnurl);
+}
+$PAGE->set_url($pageurl);
 
 if ($context->contextlevel == CONTEXT_USER and $USER->id != $context->instanceid) {
     $PAGE->navbar->includesettingsbase = true;
@@ -85,6 +91,11 @@ $straction = get_string('permissions', 'core_role'); // Used by tabs.php.
 $currenttab = 'permissions';
 
 $PAGE->set_pagelayout('admin');
+if ($context->contextlevel == CONTEXT_BLOCK) {
+    // Do not show blocks when changing block's settings, it is confusing.
+    $PAGE->blocks->show_only_fake_blocks(true);
+}
+
 $PAGE->set_title($title);
 switch ($context->contextlevel) {
     case CONTEXT_SYSTEM:
@@ -219,8 +230,8 @@ echo $OUTPUT->box_end();
 
 if ($context->contextlevel > CONTEXT_USER) {
 
-    if ($context->contextlevel === CONTEXT_COURSECAT && $return === 'management') {
-        $url = new moodle_url('/course/management.php', array('categoryid' => $context->instanceid));
+    if ($returnurl) {
+        $url = new moodle_url($returnurl);
     } else {
         $url = $context->get_url();
     }
index bd9ea98..8dfceea 100644 (file)
@@ -53,7 +53,8 @@ if (has_capability('moodle/grade:manage', $systemcontext)
                                                          '3' => '3',
                                                          '4' => '4',
                                                          '5' => '5')));
-        $temp->add(new admin_setting_configselect('grade_navmethod', new lang_string('navmethod', 'grades'), null, 0,
+        $temp->add(new admin_setting_configselect('grade_navmethod', new lang_string('navmethod', 'grades'), null,
+                                                  GRADE_NAVMETHOD_TABS,
                                                   array(GRADE_NAVMETHOD_DROPDOWN => new lang_string('dropdown', 'grades'),
                                                         GRADE_NAVMETHOD_TABS => new lang_string('tabs', 'grades'),
                                                         GRADE_NAVMETHOD_COMBO => new lang_string('combo', 'grades'))));
index cf7565c..8cb2d66 100644 (file)
 }}
 <div class="form-password">
     <span data-passwordunmask="wrapper" data-passwordunmaskid="{{ id }}">
-        <span class="visibleifjs">
-            <span data-passwordunmask="editor">
-                <input  type="hidden"
-                        name="{{ name }}"
-                        id="{{ id }}"
-                        value="{{ value }}"
-                        size="{{ size }}"
-                        >
-            </span>
-            <a href="#" data-passwordunmask="edit" title="{{ edithint }}">
-                <span data-passwordunmask="displayvalue">{{> core_form/element-passwordunmask-fill }}</span>
-                {{# pix }} t/passwordunmask-edit, core, {{# str }} passwordunmaskedithint, form {{/ str }}{{/ pix }}
-            </a>
-            <a href="#" data-passwordunmask="unmask" title="{{ unmaskhint }}">
-                {{# pix }} t/passwordunmask-reveal, core, {{# str }} passwordunmaskrevealhint, form {{/ str }}{{/ pix }}
-            </a>
-            <span data-passwordunmask="instructions" class="form-text text-muted" style="display: none;">
-                {{# str }} passwordunmaskinstructions, form {{/ str }}
-            </span>
-        </span>
-        <noscript>
-            <!-- Backwards compatability for Behat -->
-            <input  type="password"
+        <span data-passwordunmask="editor">
+            <input  type="hidden"
                     name="{{ name }}"
                     id="{{ id }}"
                     value="{{ value }}"
-                    size="{{ size }}"
+                    data-size="{{ size }}"
+                    class="form-control d-inline-block"
                     >
-        </noscript>
+        </span>
+        <a href="#" data-passwordunmask="edit" title="{{ edithint }}">
+            <span data-passwordunmask="displayvalue">{{> core_form/element-passwordunmask-fill }}</span>
+            {{# pix }} t/passwordunmask-edit, core, {{# str }} passwordunmaskedithint, form {{/ str }}{{/ pix }}
+        </a>
+        <a href="#" data-passwordunmask="unmask" title="{{ unmaskhint }}">
+            {{# pix }} t/passwordunmask-reveal, core, {{# str }} passwordunmaskrevealhint, form {{/ str }}{{/ pix }}
+        </a>
+        <span data-passwordunmask="instructions" class="form-text text-muted" style="display: none;">
+            {{# str }} passwordunmaskinstructions, form {{/ str }}
+        </span>
     </span>
 </div>
 {{#js}}
index c733736..c44e6a3 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300;
-$plugin->requires  = 2016051900;
+$plugin->version   = 2016120500;
+$plugin->requires  = 2016112900;
 $plugin->component = 'tool_assignmentupgrade';
-$plugin->dependencies = array('mod_assign' => 2016051900);
+$plugin->dependencies = array('mod_assign' => 2016112900);
index 6c9f390..88205f6 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2016052300;
-$plugin->requires = 2016051900;
+$plugin->version = 2016120500;
+$plugin->requires = 2016112900;
 $plugin->component = 'tool_availabilityconditions';
index 2775a5f..a228caf 100644 (file)
@@ -26,7 +26,6 @@ if (isset($_SERVER['REMOTE_ADDR'])) {
     die(); // No access from web!
 }
 
-define('BEHAT_UTIL', true);
 define('CLI_SCRIPT', true);
 define('ABORT_AFTER_CONFIG', true);
 define('CACHE_DISABLE_ALL', true);
index 6b6d5ed..051dd86 100644 (file)
@@ -325,7 +325,7 @@ Feature: Set up contextual data for tests
     And I am on site homepage
     And I follow "Courses"
     And I follow "Course 1"
-    And I click on "Grades" "link" in the "Navigation" "block"
+    And I go to "View > Grader report" in the course gradebook
     Then I should see "Grade category 1"
     And I should see "Grade sub category 2"
 
@@ -349,9 +349,7 @@ Feature: Set up contextual data for tests
     When I log in as "admin"
     And I am on site homepage
     And I follow "Course 1"
-    And I click on "Grades" "link" in the "Navigation" "block"
-    And I expand "Setup" node
-    And I follow "Gradebook setup"
+    And I go to "Setup > Gradebook setup" in the course gradebook
     Then I should see "Test Grade Item 1"
     And I follow "Edit   Test Grade Item 1"
     And I expand all fieldsets
@@ -380,8 +378,7 @@ Feature: Set up contextual data for tests
     When I log in as "admin"
     And I am on site homepage
     And I follow "Course 1"
-    And I click on "Grades" "link" in the "Navigation" "block"
-    And I follow "Scales"
+    And I go to "Scales" in the course gradebook
     Then I should see "Test Scale 1"
     And I should see "Disappointing,  Good,  Very good,  Excellent"
 
@@ -432,9 +429,7 @@ Feature: Set up contextual data for tests
     When I log in as "admin"
     And I am on site homepage
     And I follow "Course 1"
-    And I click on "Grades" "link" in the "Navigation" "block"
-    And I expand "Setup" node
-    And I follow "Gradebook setup"
+    And I go to "Setup > Gradebook setup" in the course gradebook
     Then I should see "Test Outcome Grade Item 1"
     And I follow "Edit   Test Outcome Grade Item 1"
     And the field "Outcome" matches value "Grade outcome 1"
index ed97899..a26fd20 100644 (file)
@@ -15,6 +15,7 @@ Feature: Forms manipulation
     Then the field "First name" matches value "Field value"
     And the "Select a country" select box should contain "Japan"
     And the field "New password" matches value "TestPass"
+    And I take focus off "Update profile" "button"
     And I press "Update profile"
 
   @javascript
index b4ddc77..e79651f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300;   // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900;   // Requires this Moodle version
+$plugin->version   = 2016120500;   // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900;   // Requires this Moodle version
 $plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
index eb15c22..8fd2642 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics).
index 36c53f3..f65a0fb 100644 (file)
@@ -25,8 +25,8 @@
 defined('MOODLE_INTERNAL') || die();
 
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_cohortroles'; // Full name of the plugin (used for diagnostics).
 
 $plugin->dependencies = array(
index e2b4192..b2a4907 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300;
-$plugin->requires  = 2016051900;
+$plugin->version   = 2016120500;
+$plugin->requires  = 2016112900;
 $plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
index 57c8112..0f52139 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_dbtransfer'; // Full name of the plugin (used for diagnostics).
index 7140400..05ad249 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2016052300;
-$plugin->requires = 2016051900;
+$plugin->version = 2016120500;
+$plugin->requires = 2016112900;
 $plugin->component = 'tool_filetypes';
index 3119367..2e19cbb 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2016052300;
-$plugin->requires = 2016051900;
+$plugin->version = 2016120500;
+$plugin->requires = 2016112900;
 $plugin->component = 'tool_generator';
index e643668..e7e62f8 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_health'; // Full name of the plugin (used for diagnostics)
 
 $plugin->maturity  = MATURITY_ALPHA; // this version's maturity level
index 900370a..439c750 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_innodb'; // Full name of the plugin (used for diagnostics)
index ec774f4..b9426f4 100644 (file)
@@ -24,6 +24,6 @@
 defined('MOODLE_INTERNAL') || die();
 
 $plugin->component  = 'tool_installaddon';
-$plugin->version    = 2016052300;
-$plugin->requires   = 2016051900;
+$plugin->version    = 2016120500;
+$plugin->requires   = 2016112900;
 $plugin->maturity   = MATURITY_STABLE;
index 846d206..6b2724e 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_langimport'; // Full name of the plugin (used for diagnostics)
index d041ec4..13e0a29 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2016051900; // Requires this Moodle version.
+$plugin->version = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2016112900; // Requires this Moodle version.
 $plugin->component = 'logstore_database'; // Full name of the plugin (used for diagnostics).
index 4c77f30..d8eb2b4 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2016051900; // Requires this Moodle version.
+$plugin->version = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2016112900; // Requires this Moodle version.
 $plugin->component = 'logstore_legacy'; // Full name of the plugin (used for diagnostics).
index c2a4cde..36da7a1 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2016051900; // Requires this Moodle version.
+$plugin->version = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2016112900; // Requires this Moodle version.
 $plugin->component = 'logstore_standard'; // Full name of the plugin (used for diagnostics).
index 0edfcb1..59fc1ff 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2016051900; // Requires this Moodle version.
+$plugin->version = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_log'; // Full name of the plugin (used for diagnostics).
index a22ac9f..cd00a6f 100644 (file)
@@ -50,7 +50,8 @@ class cohort_summary_exporter extends \core_competency\external\exporter {
             ),
             'idnumber' => array(
                 'type' => PARAM_RAW,        // ID numbers are plain text.
-                'default' => ''
+                'default' => '',
+                'null' => NULL_ALLOWED
             ),
             'visible' => array(
                 'type' => PARAM_BOOL,
index 3864cbf..7a2181b 100644 (file)
@@ -74,6 +74,12 @@ class manage_competency_frameworks_page implements renderable, templatable {
                 'get'
             );
             $this->navigation[] = $addpage;
+            $competenciesrepository = new single_button(
+                new moodle_url('https://moodle.net/competencies'),
+                get_string('competencyframeworksrepository', 'tool_lp'),
+                'get'
+            );
+            $this->navigation[] = $competenciesrepository;
         }
 
         $this->competencyframeworks = api::list_frameworks('shortname', 'ASC', 0, 0, $this->pagecontext);
index 412419d..4719b6c 100644 (file)
@@ -61,6 +61,7 @@ $string['competencyframeworkcreated'] = 'Competency framework created.';
 $string['competencyframeworkname'] = 'Name';
 $string['competencyframeworkroot'] = 'No parent (top-level competency)';
 $string['competencyframeworks'] = 'Competency frameworks';
+$string['competencyframeworksrepository'] = 'Competency frameworks repository';
 $string['competencyframeworkupdated'] = 'Competency framework updated.';
 $string['competencyoutcome_complete'] = 'Mark as complete';
 $string['competencyoutcome_evidence'] = 'Attach an evidence';
index de0a106..84d7b12 100644 (file)
@@ -25,6 +25,6 @@
 defined('MOODLE_INTERNAL') || die();
 
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_lp'; // Full name of the plugin (used for diagnostics).
index e17aa4a..79a1d15 100644 (file)
@@ -25,8 +25,8 @@
 defined('MOODLE_INTERNAL') || die();
 
 
-$plugin->version   = 2016083000; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_lpimportcsv'; // Full name of the plugin (used for diagnostics).
-$plugin->dependencies = array('tool_lp' => 2016052300);
+$plugin->dependencies = array('tool_lp' => 2016112900);
 
index 792a902..78eb45b 100644 (file)
@@ -396,12 +396,8 @@ class tool_lpmigrate_framework_processor_testcase extends advanced_testcase {
     }
 
     public function test_permission_exception() {
-        global $DB;
-        if ($DB->get_dbfamily() === 'postgres' or $DB->get_dbfamily() === 'mssql') {
-            $this->markTestSkipped('The processor is having issues with the transaction initialised in '
-                . 'advanced_testcase::runBare().');
-            return;
-        }
+
+        $this->preventResetByRollback(); // Test uses transactions, so we cannot use them for speedy reset.
 
         $dg = $this->getDataGenerator();
         $u = $dg->create_user();
index 235f48e..0eb8e8c 100644 (file)
@@ -24,8 +24,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_lpmigrate'; // Full name of the plugin (used for diagnostics).
 $plugin->dependencies = array(
     'tool_lp' => ANY_VERSION
index fe33923..775f006 100644 (file)
@@ -125,9 +125,7 @@ class manager {
 
         } catch (\Horde_Imap_Client_Exception $e) {
             $message = $e->getMessage();
-            mtrace("Unable to connect to IMAP server. Failed with '{$message}'");
-
-            return false;
+            throw new \moodle_exception('imapconnectfailure', 'tool_messageinbound', '', null, $message);
         }
     }
 
index 4932076..9b419f3 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300;
-$plugin->requires  = 2016051900;
+$plugin->version   = 2016120500;
+$plugin->requires  = 2016112900;
 $plugin->component = 'tool_messageinbound';
index e25a57b..9885b4e 100644 (file)
@@ -31,7 +31,7 @@ use moodle_url;
 use moodle_exception;
 
 /**
- * API exposed by tool_mobile
+ * API exposed by tool_mobile, to be used mostly by external functions.
  *
  * @copyright  2016 Juan Leyva
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@@ -101,11 +101,14 @@ class api {
      */
     public static function get_public_config() {
         global $CFG, $SITE, $PAGE, $OUTPUT;
+        require_once($CFG->libdir . '/authlib.php');
 
         $context = context_system::instance();
         // We need this to make work the format text functions.
         $PAGE->set_context($context);
 
+        list($authinstructions, $notusedformat) = external_format_text($CFG->auth_instructions, FORMAT_MOODLE, $context->id);
+        list($maintenancemessage, $notusedformat) = external_format_text($CFG->maintenance_message, FORMAT_MOODLE, $context->id);
         $settings = array(
             'wwwroot' => $CFG->wwwroot,
             'httpswwwroot' => $CFG->httpswwwroot,
@@ -115,12 +118,12 @@ class api {
             'authloginviaemail' => $CFG->authloginviaemail,
             'registerauth' => $CFG->registerauth,
             'forgottenpasswordurl' => $CFG->forgottenpasswordurl,
-            'authinstructions' => format_text($CFG->auth_instructions),
+            'authinstructions' => $authinstructions,
             'authnoneenabled' => (int) is_enabled_auth('none'),
             'enablewebservices' => $CFG->enablewebservices,
             'enablemobilewebservice' => $CFG->enablemobilewebservice,
             'maintenanceenabled' => $CFG->maintenance_enabled,
-            'maintenancemessage' => format_text($CFG->maintenance_message),
+            'maintenancemessage' => $maintenancemessage,
         );
 
         $typeoflogin = get_config('tool_mobile', 'typeoflogin');
@@ -130,8 +133,12 @@ class api {
         }
         $settings['typeoflogin'] = $typeoflogin;
 
+        // Check if the user can sign-up to return the launch URL in that case.
+        $cansignup = signup_is_enabled();
+
         if ($typeoflogin == self::LOGIN_VIA_BROWSER or
-                $typeoflogin == self::LOGIN_VIA_EMBEDDED_BROWSER) {
+                $typeoflogin == self::LOGIN_VIA_EMBEDDED_BROWSER or
+                $cansignup) {
             $url = new moodle_url("/$CFG->admin/tool/mobile/launch.php");
             $settings['launchurl'] = $url->out(false);
         }
@@ -162,9 +169,15 @@ class api {
         if (empty($section) or $section == 'frontpagesettings') {
             require_once($CFG->dirroot . '/course/format/lib.php');
             // First settings that anyone can deduce.
-            $settings->fullname = $SITE->fullname;
-            $settings->shortname = $SITE->shortname;
-            $settings->summary = $SITE->summary;
+            $settings->fullname = external_format_string($SITE->fullname, $context->id);
+            $settings->shortname = external_format_string($SITE->shortname, $context->id);
+
+            // Return to a var instead of directly to $settings object because of differences between
+            // list() in php5 and php7. {@link http://php.net/manual/en/function.list.php}
+            $formattedsummary = external_format_text($SITE->summary, $SITE->summaryformat,
+                                                                                        $context->id);
+            $settings->summary = $formattedsummary[0];
+            $settings->summaryformat = $formattedsummary[1];
             $settings->frontpage = $CFG->frontpage;
             $settings->frontpageloggedin = $CFG->frontpageloggedin;
             $settings->maxcategorydepth = $CFG->maxcategorydepth;
index 7600862..a5a7154 100644 (file)
@@ -94,7 +94,8 @@ $isios = core_useragent::is_ios();
 if ($confirmed or $isios) {
     $PAGE->set_context(context_system::instance());
     $PAGE->set_heading($COURSE->fullname);
-    $PAGE->set_url('/local/mobile/launch.php', array('service' => $serviceshortname, 'passport' => $passport, 'urlscheme' => $urlscheme));
+    $params = array('service' => $serviceshortname, 'passport' => $passport, 'urlscheme' => $urlscheme, 'confirmed' => $confirmed);
+    $PAGE->set_url("/$CFG->admin/tool/mobile/launch.php", $params);
 
     echo $OUTPUT->header();
     if ($confirmed) {
index 010b1c9..fbbca7d 100644 (file)
@@ -64,6 +64,9 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
 
         // Test default values.
         $context = context_system::instance();
+        list($authinstructions, $notusedformat) = external_format_text($CFG->auth_instructions, FORMAT_MOODLE, $context->id);
+        list($maintenancemessage, $notusedformat) = external_format_text($CFG->maintenance_message, FORMAT_MOODLE, $context->id);
+
         $expected = array(
             'wwwroot' => $CFG->wwwroot,
             'httpswwwroot' => $CFG->httpswwwroot,
@@ -73,12 +76,12 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
             'authloginviaemail' => $CFG->authloginviaemail,
             'registerauth' => $CFG->registerauth,
             'forgottenpasswordurl' => $CFG->forgottenpasswordurl,
-            'authinstructions' => format_text($CFG->auth_instructions),
+            'authinstructions' => $authinstructions,
             'authnoneenabled' => (int) is_enabled_auth('none'),
             'enablewebservices' => $CFG->enablewebservices,
             'enablemobilewebservice' => $CFG->enablemobilewebservice,
             'maintenanceenabled' => $CFG->maintenance_enabled,
-            'maintenancemessage' => format_text($CFG->maintenance_message),
+            'maintenancemessage' => $maintenancemessage,
             'typeoflogin' => api::LOGIN_VIA_APP,
             'warnings' => array()
         );
@@ -92,8 +95,9 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
         set_config('logo', 'mock.png', 'core_admin');
         set_config('logocompact', 'mock.png', 'core_admin');
 
+        list($authinstructions, $notusedformat) = external_format_text($authinstructions, FORMAT_MOODLE, $context->id);
         $expected['registerauth'] = 'email';
-        $expected['authinstructions'] = format_text($authinstructions);
+        $expected['authinstructions'] = $authinstructions;
         $expected['typeoflogin'] = api::LOGIN_VIA_BROWSER;
         $expected['launchurl'] = "$CFG->wwwroot/$CFG->admin/tool/mobile/launch.php";
 
@@ -120,12 +124,16 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
         $result = external::get_config();
         $result = external_api::clean_returnvalue(external::get_config_returns(), $result);
 
+        // SITE summary is null in phpunit which gets transformed to an empty string by format_text.
+        list($sitesummary, $unused) = external_format_text($SITE->summary, $SITE->summaryformat, context_system::instance()->id);
+
         // Test default values.
         $context = context_system::instance();
         $expected = array(
             array('name' => 'fullname', 'value' => $SITE->fullname),
             array('name' => 'shortname', 'value' => $SITE->shortname),
-            array('name' => 'summary', 'value' => $SITE->summary),
+            array('name' => 'summary', 'value' => $sitesummary),
+            array('name' => 'summaryformat', 'value' => FORMAT_HTML),
             array('name' => 'frontpage', 'value' => $CFG->frontpage),
             array('name' => 'frontpageloggedin', 'value' => $CFG->frontpageloggedin),
             array('name' => 'maxcategorydepth', 'value' => $CFG->maxcategorydepth),
@@ -141,9 +149,9 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
 
         // Change a value and retrieve filtering by section.
         set_config('commentsperpage', 1);
-        $expected[9]['value'] = 1;
-        unset($expected[10]);
+        $expected[10]['value'] = 1;
         unset($expected[11]);
+        unset($expected[12]);
 
         $result = external::get_config('frontpagesettings');
         $result = external_api::clean_returnvalue(external::get_config_returns(), $result);
index 8c3f25b..27001ad 100644 (file)
@@ -23,6 +23,6 @@
  */
 
 defined('MOODLE_INTERNAL') || die();
-$plugin->version   = 2016052305; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_mobile'; // Full name of the plugin (used for diagnostics).
index 5eaed9f..217eab2 100644 (file)
@@ -77,7 +77,7 @@ class renderer extends \plugin_renderer_base {
     protected function render_add_button($courseid) {
         global $CFG;
 
-        $button = \html_writer::tag('button', get_string('addrule', 'tool_monitor'));
+        $button = \html_writer::tag('button', get_string('addrule', 'tool_monitor'), ['class' => 'btn btn-primary']);
         $addurl = new \moodle_url($CFG->wwwroot. '/admin/tool/monitor/edit.php', array('courseid' => $courseid));
         return \html_writer::link($addurl, $button);
     }
index 4b29277..aa15d83 100644 (file)
@@ -115,7 +115,7 @@ Feature: tool_monitor_subscriptions
     And I trigger cron
     And I am on site homepage
     When I click on ".popover-region-notifications" "css_element"
-    And I click on "View more" "link" in the ".popover-region-notifications" "css_element"
+    And I click on "View full notification" "link" in the ".popover-region-notifications" "css_element"
     Then I should see "New rule site level"
     And I should see "The course was viewed"
 
@@ -137,7 +137,7 @@ Feature: tool_monitor_subscriptions
     And I trigger cron
     And I am on site homepage
     When I click on ".popover-region-notifications" "css_element"
-    And I click on "View more" "link" in the ".popover-region-notifications" "css_element"
+    And I click on "View full notification" "link" in the ".popover-region-notifications" "css_element"
     Then I should see "New rule course level"
     And I should see "The course was viewed"
 
index 9e5a5a3..6724fb0 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version   = 2016052305;     // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900;     // Requires this Moodle version.
+$plugin->version   = 2016120500;     // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900;     // Requires this Moodle version.
 $plugin->component = 'tool_monitor'; // Full name of the plugin (used for diagnostics).
index 554aaa0..e5d7f88 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_multilangupgrade'; // Full name of the plugin (used for diagnostics)
 
index 878297a..1e4f201 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_phpunit'; // Full name of the plugin (used for diagnostics)
 
index e9de840..c5392cd 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_profiling'; // Full name of the plugin (used for diagnostics)
index c0bc961..9f18cbd 100644 (file)
@@ -65,6 +65,6 @@ Feature: Backup user data
     And I log out
     And I log in as "student1"
     And I follow "Course 1"
-    When I click on "Grades" "link" in the "Navigation" "block"
+    When I go to "User report" in the course gradebook
     Then "Quiz 1" row "Grade" column of "user-grade" table should contain "5"
     And "Quiz 1" row "Percentage" column of "user-grade" table should contain "50"
index 227d96c..3f175ff 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_recyclebin'; // Full name of the plugin (used for diagnostics).
index 26fe31a..02187ed 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_replace'; // Full name of the plugin (used for diagnostics)
 
 $plugin->maturity  = MATURITY_ALPHA; // this version's maturity level
index ec4b117..27da1b6 100644 (file)
@@ -96,12 +96,12 @@ echo $OUTPUT->box_start();     // The forms section at the top
 
 <div class="mdl-align">
 
-<form method="post" action="index.php">
+<form method="post" action="index.php" class="form-inline spamcleanerform">
   <div>
     <label class="accesshide" for="keyword_el"><?php print_string('spamkeyword', 'tool_spamcleaner') ?></label>
-    <input type="text" name="keyword" id="keyword_el" value="<?php p($keyword) ?>" />
+    <input type="text" class="form-control" name="keyword" id="keyword_el" value="<?php p($keyword) ?>" />
     <input type="hidden" name="sesskey" value="<?php echo sesskey();?>" />
-    <input type="submit" value="<?php echo get_string('spamsearch', 'tool_spamcleaner')?>" />
+    <input type="submit" class="btn btn-primary" value="<?php echo get_string('spamsearch', 'tool_spamcleaner')?>" />
   </div>
 </form>
 <p><?php echo get_string('spameg', 'tool_spamcleaner');?></p>
@@ -110,7 +110,8 @@ echo $OUTPUT->box_start();     // The forms section at the top
 
 <form method="post"  action="index.php">
   <div>
-    <input type="submit" name="autodetect" value="<?php echo get_string('spamauto', 'tool_spamcleaner');?>" />
+    <input type="submit" class="btn btn-primary" name="autodetect"
+           value="<?php echo get_string('spamauto', 'tool_spamcleaner');?>" />
   </div>
 </form>
 
@@ -256,7 +257,9 @@ function print_user_list($users_rs, $keywords) {
     foreach ($users_rs as $rs){
         foreach ($rs as $user) {
             if (!$count) {
-                echo '<table border="1" width="100%" id="data-grid"><tr><th>&nbsp;</th><th>'.get_string('user','admin').'</th><th>'.get_string('spamdesc', 'tool_spamcleaner').'</th><th>'.get_string('spamoperation', 'tool_spamcleaner').'</th></tr>';
+                echo '<table class="table table-bordered" border="1" width="100%" id="data-grid"><tr><th>&nbsp;</th>
+                    <th>'.get_string('user', 'admin').'</th><th>'.get_string('spamdesc', 'tool_spamcleaner').'</th>
+                    <th>'.get_string('spamoperation', 'tool_spamcleaner').'</th></tr>';
             }
             $count++;
             filter_user($user, $keywords, $count);
@@ -269,7 +272,7 @@ function print_user_list($users_rs, $keywords) {
     } else {
         echo '</table>';
         echo '<div class="mld-align">
-              <button id="removeall_btn">'.get_string('spamdeleteall', 'tool_spamcleaner').'</button>
+              <button id="removeall_btn" class="btn btn-secondary">'.get_string('spamdeleteall', 'tool_spamcleaner').'</button>
               </div>';
     }
 }
@@ -357,8 +360,10 @@ function print_user_entry($user, $keywords, $count) {
 
         $html .= '<td align="left">'.format_text($user->description, $user->descriptionformat, array('overflowdiv'=>true)).'</td>';
         $html .= '<td width="100px" align="center">';
-        $html .= '<button onclick="M.tool_spamcleaner.del_user(this,'.$user->id.')">'.get_string('deleteuser', 'admin').'</button><br />';
-        $html .= '<button onclick="M.tool_spamcleaner.ignore_user(this,'.$user->id.')">'.get_string('ignore', 'admin').'</button>';
+        $html .= '<button class="btn btn-primary" onclick="M.tool_spamcleaner.del_user(this,'.$user->id.')">'.
+            get_string('deleteuser', 'admin').'</button><br />';
+        $html .= '<button class="btn btn-secondary" onclick="M.tool_spamcleaner.ignore_user(this,'.$user->id.')">'.
+            get_string('ignore', 'admin').'</button>';
         $html .= '</td>';
         $html .= '</tr>';
         return $html;
index cf021d3..6bbc743 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300;
-$plugin->requires  = 2016051900;
+$plugin->version   = 2016120500;
+$plugin->requires  = 2016112900;
 $plugin->component = 'tool_spamcleaner'; // Full name of the plugin (used for diagnostics)
 
index 9e87a95..5b18888 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_task'; // Full name of the plugin (used for diagnostics)
 
index 04d27b0..18623df 100644 (file)
@@ -41,6 +41,7 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
      * Get the current values for the form inputs and refresh the list of matching templates.
      *
      * @method refreshSearch
+     * @param {String} themename The naeme of the theme.
      */
     var refreshSearch = function(themename) {
         var componentStr = $('[data-field="component"]').val();
index 9f4a6c2..76bfae2 100644 (file)
@@ -21,6 +21,6 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 defined('MOODLE_INTERNAL') || die();
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900; // Requires this Moodle version.
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_templatelibrary'; // Full name of the plugin (used for diagnostics).
index c22aea6..3a26e06 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_unsuproles'; // Full name of the plugin (used for diagnostics)
 
index fe0225d..871661f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300;            // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2016051900;            // Requires this Moodle version.
+$plugin->version   = 2016120500;            // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2016112900;            // Requires this Moodle version.
 $plugin->component = 'tool_uploadcourse';   // Full name of the plugin (used for diagnostics).
index e2a4ba0..912729d 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2016052300; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2016051900; // Requires this Moodle version
+$plugin->version   = 2016120500; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2016112900; // Requires this Moodle version
 $plugin->component = 'tool_uploaduser'; // Full name of the plugin (used for diagnostics)
 
index 20f5d4f..eaeb288 100644 (file)
Binary files a/admin/tool/usertours/amd/build/tour.min.js and b/admin/tool/usertours/amd/build/tour.min.js differ
index 3a77250..d09a505 100644 (file)
@@ -37,6 +37,20 @@ function Tour(config) {
  */
 Tour.prototype.tourName;
 
+/**
+ * The name of the tour storage key.
+ *
+ * @property    {String}    storageKey
+ */
+Tour.prototype.storageKey;
+
+/**
+ * The session storage object
+ *
+ * @property    {Storage}   storage
+ */
+Tour.prototype.storage;
+
 /**
  * The original configuration as passed into the constructor.
  *
@@ -120,6 +134,14 @@ Tour.prototype.init = function (config) {
     // Apply configuration.
     this.configure.apply(this, arguments);
 
+    try {
+        this.storage = window.sessionStorage;
+        this.storageKey = 'tourstate_' + this.tourName;
+    } catch (e) {
+        this.storage = false;
+        this.storageKey = '';
+    }
+
     return this;
 };
 
@@ -280,6 +302,15 @@ Tour.prototype.getCurrentStepNumber = function () {
  */
 Tour.prototype.setCurrentStepNumber = function (stepNumber) {
     this.currentStepNumber = stepNumber;
+    if (this.storage) {
+        try {
+            this.storage.setItem(this.storageKey, stepNumber);
+        } catch (e) {
+            if (e.code === DOMException.QUOTA_EXCEEDED_ERR) {
+                this.storage.removeItem(this.storageKey);
+            }
+        }
+    }
 };
 
 /**
@@ -957,6 +988,16 @@ Tour.prototype.handleKeyDown = function (e) {
  * @chainable
  */
 Tour.prototype.startTour = function (startAt) {
+    if (this.storage && typeof startAt === 'undefined') {
+        var storageStartValue = this.storage.getItem(this.storageKey);
+        if (storageStartValue) {
+            var storageStartAt = parseInt(storageStartValue, 10);
+            if (storageStartAt <= this.steps.length) {
+                startAt = storageStartAt;
+            }
+        }
+    }
+
     if (typeof startAt === 'undefined') {
         startAt = this.getCurrentStepNumber();
     }
index cefc779..71857e4 100644 (file)
@@ -76,15 +76,22 @@ EOF;
     /**
      * Fetch all enabled tours matching the specified target.
      *
-     * @param   string      $targetmatch    The URL to match.
+     * @param   moodle_url  $targetmatch    The URL to match.
      */
-    public static function get_matching_tourdata($targetmatch) {
+    public static function get_matching_tourdata(\moodle_url $targetmatch) {
         $tours = self::get_enabled_tourdata();
 
-        return array_filter($tours, function($tour) use ($targetmatch) {
+        // Attempt to determine whether this is the front page.
+        // This is a special case because the frontpage uses a shortened page path making it difficult to detect exactly.
+        $isfrontpage = $targetmatch->compare(new \moodle_url('/'), URL_MATCH_BASE);
+        $target = $targetmatch->out_as_local_url();
+        return array_filter($tours, function($tour) use ($isfrontpage, $target) {
+            if ($isfrontpage && $tour->pathmatch === 'FRONTPAGE') {
+                return true;
+            }
             $pattern = preg_quote($tour->pathmatch, '@');
             $pattern = str_replace('%', '.*', $pattern);
-            return !!preg_match("@{$pattern}@", $targetmatch);
+            return !!preg_match("@{$pattern}@", $target);
         });
     }
 
index af94d76..2a9c8ce 100644 (file)
@@ -28,6 +28,7 @@ defined('MOODLE_INTERNAL') || die();
 
 use tool_usertours\local\forms;
 use tool_usertours\local\table;
+use core\notification;
 
 /**
  * Tour manager.
@@ -117,6 +118,21 @@ class manager {
      */
     const ACTION_RESETFORALL = 'resetforall';
 
+    /**
+     * @var CONFIG_SHIPPED_TOUR
+     */
+    const CONFIG_SHIPPED_TOUR = 'shipped_tour';
+
+    /**
+     * @var CONFIG_SHIPPED_FILENAME
+     */
+    const CONFIG_SHIPPED_FILENAME = 'shipped_filename';
+
+    /**
+     * @var CONFIG_SHIPPED_VERSION
+     */
+    const CONFIG_SHIPPED_VERSION = 'shipped_version';
+
     /**
      * This is the entry point for this controller class.
      *
@@ -349,6 +365,10 @@ class manager {
             if (empty($tour)) {
                 $this->header('newtour');
             } else {
+                if (!empty($tour->get_config(self::CONFIG_SHIPPED_TOUR))) {
+                    notification::add(get_string('modifyshippedtourwarning', 'tool_usertours'), notification::WARNING);
+                }
+
                 $this->header($tour->get_name());
                 $data = $tour->prepare_data_for_form();
 
@@ -559,7 +579,7 @@ class manager {
     public static function get_matching_tours(\moodle_url $pageurl) {
         global $PAGE;
 
-        $tours = cache::get_matching_tourdata($pageurl->out_as_local_url());
+        $tours = cache::get_matching_tourdata($pageurl);
 
         foreach ($tours as $record) {
             $tour = tour::load_from_record($record);
@@ -646,6 +666,11 @@ class manager {
         }
 
         $tour = $step->get_tour();
+
+        if (!empty($tour->get_config(self::CONFIG_SHIPPED_TOUR))) {
+            notification::add(get_string('modifyshippedtourwarning', 'tool_usertours'), notification::WARNING);
+        }
+
         $PAGE->navbar->add($tour->get_name(), $tour->get_view_link());
         if (isset($id)) {
             $PAGE->navbar->add($step->get_title(), $step->get_edit_link());
@@ -750,4 +775,68 @@ class manager {
         $step->remove();
         redirect($tour->get_view_link());
     }
+
+    /**
+     * Make sure all of the default tours that are shipped with Moodle are created
+     * and up to date with the latest version.
+     */
+    public static function update_shipped_tours() {
+        global $DB, $CFG;
+
+        // A list of tours that are shipped with Moodle. They are in
+        // the format filename => version. The version value needs to
+        // be increased if the tour has been updated.
+        $shippedtours = [
+            'boost_administrator.json' => 1,
+            'boost_course_view.json' => 1,
+        ];
+
+        $existingtourrecords = $DB->get_recordset('tool_usertours_tours');
+
+        // Get all of the existing shipped tours and check if they need to be
+        // updated.
+        foreach ($existingtourrecords as $tourrecord) {
+            $tour = tour::load_from_record($tourrecord);
+
+            if (!empty($tour->get_config(self::CONFIG_SHIPPED_TOUR))) {
+                $filename = $tour->get_config(self::CONFIG_SHIPPED_FILENAME);
+                $version = $tour->get_config(self::CONFIG_SHIPPED_VERSION);
+
+                // If we know about this tour (otherwise leave it as is).
+                if (isset($shippedtours[$filename])) {
+                    // And the version in the DB is an older version.
+                    if ($version < $shippedtours[$filename]) {
+                        // Remove the old version because it's been updated
+                        // and needs to be recreated.
+                        $tour->remove();
+                    } else {
+                        // The tour has not been updated so we don't need to
+                        // do anything with it.
+                        unset($shippedtours[$filename]);
+                    }
+                }
+            }
+        }
+
+        $existingtourrecords->close();
+
+        foreach ($shippedtours as $filename => $version) {
+            $filepath = $CFG->dirroot . '/admin/tool/usertours/tours/' . $filename;
+            $tourjson = file_get_contents($filepath);
+            $tour = self::import_tour_from_json($tourjson);
+
+            // Set some additional config data to record that this tour was
+            // added as a shipped tour.
+            $tour->set_config(self::CONFIG_SHIPPED_TOUR, true);
+            $tour->set_config(self::CONFIG_SHIPPED_FILENAME, $filename);
+            $tour->set_config(self::CONFIG_SHIPPED_VERSION, $version);
+
+            if (defined('BEHAT_SITE_RUNNING') || (defined('PHPUNIT_TEST') && PHPUNIT_TEST)) {
+                // Disable this tour if this is behat or phpunit.
+                $tour->set_enabled(false);
+            }
+
+            $tour->persist();
+        }
+    }
 }
index 473a077..5717e24 100644 (file)
@@ -608,6 +608,8 @@ class tour {
      * This is used in the session cookie to determine whether the user has seen this tour before.
      */
     public function get_tour_key() {
+        global $USER;
+
         $tourtime = $this->get_config('majorupdatetime', null);
 
         if ($tourtime === null) {
@@ -622,7 +624,7 @@ class tour {
             $tourtime = max($tourtime, $userresetdate);
         }
 
-        return sprintf('tool_usertours_%d_%s', $this->get_id(), $tourtime);
+        return sprintf('tool_usertours_%d_%d_%s', $USER->id, $this->get_id(), $tourtime);
     }
 
     /**
diff --git