Merge branch 'MDL-52199-incoming-nice-fail' of https://github.com/brendanheywood...
authorDan Poltawski <dan@moodle.com>
Wed, 30 Nov 2016 09:52:35 +0000 (09:52 +0000)
committerDan Poltawski <dan@moodle.com>
Wed, 30 Nov 2016 09:52:35 +0000 (09:52 +0000)
933 files changed:
admin/category.php
admin/roles/admins.php
admin/roles/allow.php
admin/roles/assign.php
admin/roles/check.php
admin/roles/classes/define_role_table_advanced.php
admin/roles/module.js
admin/roles/override.php
admin/roles/permissions.php
admin/settings/appearance.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/amd/build/menubar.min.js
admin/tool/lp/amd/src/menubar.js
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/templates/competency_plan_navigation.mustache
admin/tool/lp/templates/course_competencies_page.mustache
admin/tool/lp/templates/manage_competencies_page.mustache
admin/tool/lp/templates/manage_competency_frameworks_page.mustache
admin/tool/lp/templates/manage_templates_page.mustache
admin/tool/lp/templates/plan_page.mustache
admin/tool/lp/templates/plans_page.mustache
admin/tool/lp/templates/user_competency_course_navigation.mustache
admin/tool/lp/templates/user_evidence_list_page.mustache
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/version.php
admin/tool/mobile/classes/api.php
admin/tool/mobile/lang/en/tool_mobile.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/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/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/version.php
admin/tool/xmldb/version.php
admin/upgradesettings.php
auth/cas/version.php
auth/db/version.php
auth/email/auth.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/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/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/lang/en/cachestore_redis.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/lang/en/enrol_self.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/lang/en/filter_mediaplugin.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/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/admin.php
install/lang/da/error.php
install/lang/da/install.php
install/lang/ro/install.php
lang/en/admin.php
lang/en/auth.php
lang/en/cache.php
lang/en/deprecated.txt
lang/en/error.php
lang/en/media.php
lang/en/message.php
lang/en/moodle.php
lang/en/role.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/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/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/component.php
lib/classes/event/badge_listing_viewed.php
lib/classes/filetypes.php
lib/classes/plugininfo/theme.php
lib/classes/plugininfo/webservice.php
lib/classes/session/redis.php
lib/classes/upgrade/util.php
lib/configonlylib.php
lib/coursecatlib.php
lib/db/caches.php
lib/db/install.xml
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/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/portfoliolib.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/upgrade_util_test.php
lib/tests/user_menu_test.php
lib/upgrade.txt
lib/upgradelib.php
lib/webdavlib.php
lib/weblib.php
lib/yui/build/moodle-core-notification-confirm/moodle-core-notification-confirm-debug.js
lib/yui/build/moodle-core-notification-confirm/moodle-core-notification-confirm-min.js
lib/yui/build/moodle-core-notification-confirm/moodle-core-notification-confirm.js
lib/yui/src/notification/js/confirm.js
login/confirm.php
login/signup.php
media/classes/manager.php
media/classes/player.php
media/player/html5audio/lang/en/media_html5audio.php
media/player/html5audio/version.php
media/player/html5video/lang/en/media_html5video.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/lang/en/media_videojs.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/lang/en/media_vimeo.php
media/player/vimeo/version.php
media/player/youtube/lang/en/media_youtube.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/build/preferences_notifications_list_controller.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/amd/src/preferences_notifications_list_controller.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/style.css [deleted file]
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/lang/en/assign.php
mod/assign/locallib.php
mod/assign/styles.css
mod/assign/submission/comments/version.php
mod/assign/submission/file/version.php
mod/assign/submission/onlinetext/version.php
mod/assign/tests/behat/steps_blind_marking.feature
mod/assign/upgrade.txt
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/gui_ajax/index.php
mod/chat/gui_ajax/module.js
mod/chat/gui_basic/index.php
mod/chat/lang/en/chat.php
mod/chat/lib.php
mod/chat/report.php
mod/chat/tests/behat/chat_calendar_events.feature [new file with mode: 0644]
mod/chat/version.php
mod/chat/view.php
mod/choice/renderer.php
mod/choice/report.php
mod/choice/styles.css [deleted file]
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/field.class.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/renderer.php
mod/folder/version.php
mod/forum/classes/observer.php
mod/forum/discuss.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/export.php
mod/glossary/lib.php
mod/glossary/styles.css
mod/glossary/version.php
mod/glossary/view.php
mod/imscp/version.php
mod/label/version.php
mod/lesson/edit.php
mod/lesson/pagetypes/branchtable.php
mod/lesson/pagetypes/matching.php
mod/lesson/pagetypes/numerical.php
mod/lesson/pagetypes/shortanswer.php
mod/lesson/report.php
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/amd/build/preflightcheck.min.js
mod/quiz/amd/src/preflightcheck.js
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/version.php
mod/quiz/report/statistics/version.php
mod/quiz/styles.css
mod/quiz/tests/behat/preview.feature [new file with mode: 0644]
mod/quiz/version.php
mod/quiz/view.php
mod/resource/version.php
mod/scorm/locallib.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/styles.css
mod/scorm/tests/behat/completion_condition_require_status.feature
mod/scorm/version.php
mod/scorm/view.php
mod/survey/lib.php
mod/survey/report.php
mod/survey/version.php
mod/survey/view.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/classes/portfolio_caller.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
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/backup-restore.scss
theme/boost/scss/moodle/blocks.scss
theme/boost/scss/moodle/buttons.scss
theme/boost/scss/moodle/calendar.scss
theme/boost/scss/moodle/chat.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/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_button.mustache
theme/boost/templates/core/single_select.mustache
theme/boost/templates/core/url_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-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/selector/lib.php
user/selector/module.js
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 7847b2d..cb83e0d 100644 (file)
@@ -120,7 +120,7 @@ foreach ($settingspage->children as $childpage) {
 }
 if ($savebutton) {
     $outputhtml .= html_writer::start_tag('div', array('class' => 'form-buttons'));
-    $outputhtml .= html_writer::empty_tag('input', array('class' => 'form-submit', 'type' => 'submit', 'value' => get_string('savechanges','admin')));
+    $outputhtml .= html_writer::empty_tag('input', array('class' => 'btn btn-primary form-submit', 'type' => 'submit', 'value' => get_string('savechanges','admin')));
     $outputhtml .= html_writer::end_tag('div');
 }
 
index 57833b6..8245949 100644 (file)
@@ -133,9 +133,12 @@ echo $OUTPUT->header();
           </td>
       <td id="buttonscell">
         <p class="arrow_button">
-            <input name="add" id="add" type="submit" value="<?php echo $OUTPUT->larrow().'&nbsp;'.get_string('add'); ?>" title="<?php print_string('add'); ?>" /><br />
-            <input name="remove" id="remove" type="submit" value="<?php echo get_string('remove').'&nbsp;'.$OUTPUT->rarrow(); ?>" title="<?php print_string('remove'); ?>" />
-            <input name="main" id="main" type="submit" value="<?php echo get_string('mainadminset', 'core_role'); ?>" title="<?php print_string('mainadminset', 'core_role'); ?>" />
+            <input name="add" id="add" type="submit" value="<?php echo $OUTPUT->larrow().'&nbsp;'.get_string('add'); ?>"
+                   title="<?php print_string('add'); ?>" class="btn btn-secondary"/><br />
+            <input name="remove" id="remove" type="submit" value="<?php echo get_string('remove').'&nbsp;'.$OUTPUT->rarrow(); ?>"
+                   title="<?php print_string('remove'); ?>" class="btn btn-secondary"/><br />
+            <input name="main" id="main" type="submit" value="<?php echo get_string('mainadminset', 'core_role'); ?>"
+                   title="<?php print_string('mainadminset', 'core_role'); ?>" class="btn btn-secondary"/>
         </p>
       </td>
       <td id="potentialcell">
index 45f8b88..916e6c2 100644 (file)
@@ -80,7 +80,7 @@ echo $OUTPUT->box($controller->get_intro_text());
 echo '<form action="' . $baseurl . '" method="post">';
 echo '<input type="hidden" name="sesskey" value="' . sesskey() . '" />';
 echo html_writer::table($table);
-echo '<div class="submitbuttons">';
+echo '<div class="buttons">';
 echo '<input type="submit" class="btn btn-primary" name="submit" value="' . get_string('savechanges') . '"/>';
 echo '</div></form>';
 
index 3d723b8..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() ?>" />
@@ -201,11 +208,13 @@ if ($roleid) {
       </td>
       <td id="buttonscell">
           <div id="addcontrols">
-              <input name="add" id="add" type="submit" value="<?php echo $OUTPUT->larrow().'&nbsp;'.get_string('add'); ?>" title="<?php print_string('add'); ?>" /><br />
+              <input name="add" id="add" type="submit" value="<?php echo $OUTPUT->larrow().'&nbsp;'.get_string('add'); ?>"
+                     title="<?php print_string('add'); ?>" class="btn btn-secondary"/><br />
           </div>
 
           <div id="removecontrols">
-              <input name="remove" id="remove" type="submit" value="<?php echo get_string('remove').'&nbsp;'.$OUTPUT->rarrow(); ?>" title="<?php print_string('remove'); ?>" />
+              <input name="remove" id="remove" type="submit" value="<?php echo get_string('remove').'&nbsp;'.$OUTPUT->rarrow(); ?>"
+                     title="<?php print_string('remove'); ?>" class="btn btn-secondary"/>
           </div>
       </td>
       <td id="potentialcell">
@@ -233,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)) {
@@ -282,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] = '';
@@ -305,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) {
@@ -320,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 6649aaf..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,30 +167,27 @@ 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);
 $userselector->display();
 
 // Submit button and the end of the form.
-echo '<p id="chooseusersubmit"><input type="submit" value="' . get_string('showthisuserspermissions', 'core_role') . '" /></p>';
+echo '<p id="chooseusersubmit"><input type="submit" value="' . get_string('showthisuserspermissions', 'core_role') . '" ' .
+     'class="btn btn-primary"/></p>';
 echo '</form>';
 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 303855b..bcf6a49 100644 (file)
@@ -471,13 +471,13 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
     }
 
     protected function get_name_field($id) {
-        return '<input type="text" class="form-control" id="' . $id . '" name="' . $id . '" size="30"
-            value="' . s($this->role->name) . '" />';
+        return '<input type="text" id="' . $id . '" name="' . $id . '" maxlength="254" value="' . s($this->role->name) . '"' .
+                ' class="form-control"/>';
     }
 
     protected function get_shortname_field($id) {
-        return '<input type="text" class="form-control" id="' . $id . '" name="' . $id . '" size="30"
-            value="' . s($this->role->shortname) . '" />';
+        return '<input type="text" id="' . $id . '" name="' . $id . '" maxlength="254" value="' . s($this->role->shortname) . '"' .
+                ' class="form-control"/>';
     }
 
     protected function get_description_field($id) {
index bbfe602..243fd67 100644 (file)
@@ -54,7 +54,8 @@ M.core_role.init_cap_table_filter = function(Y, tableid, contextid) {
             this.input = Y.Node.create('<input class="form-control m-x-1" type="text"' +
                 ' id="'+this.table.get('id')+'capabilitysearch" value="'+Y.Escape.html(filtervalue)+'" />');
             // Create a label for the search input.
-            this.label = Y.Node.create('<label for="'+this.input.get('id')+'">'+M.util.get_string('filter', 'moodle')+' </label>');
+            this.label = Y.Node.create('<label for="' + this.input.get('id') + '">' +
+                M.util.get_string('filter', 'moodle') + ' </label>');
             // Create a clear button to clear the input.
             this.button = Y.Node.create('<input type="button" class="btn btn-primary"' +
                 ' value="'+M.util.get_string('clear', 'moodle')+'" />').set('disabled', filtervalue=='');
index 1583fab..878c820 100644 (file)
@@ -177,8 +177,10 @@ if (!empty($capabilities)) {
     }
 
     echo html_writer::start_tag('div', array('class'=>'submit_buttons'));
-    echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'savechanges', 'value'=>get_string('savechanges')));
-    echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'cancel', 'value'=>get_string('cancel')));
+    $attrs = array('type'=>'submit', 'name'=>'savechanges', 'value'=>get_string('savechanges'), 'class'=>'btn btn-primary');
+    echo html_writer::empty_tag('input', $attrs);
+    $attrs = array('type'=>'submit', 'name'=>'cancel', 'value'=>get_string('cancel'), 'class' => 'btn btn-secondary');
+    echo html_writer::empty_tag('input', $attrs);
     echo html_writer::end_tag('div');
     echo html_writer::end_tag('div');
     echo html_writer::end_tag('form');
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 95ab246..5a20af8 100644 (file)
@@ -181,7 +181,7 @@ preferences,moodle|/user/preferences.php|preferences',
     $temp->add(new admin_setting_configselect('navsortmycoursessort', new lang_string('navsortmycoursessort', 'admin'), new lang_string('navsortmycoursessort_help', 'admin'), 'sortorder', $sortoptions));
     $temp->add(new admin_setting_configtext('navcourselimit',new lang_string('navcourselimit','admin'),new lang_string('confignavcourselimit', 'admin'),20,PARAM_INT));
     $temp->add(new admin_setting_configcheckbox('usesitenameforsitepages', new lang_string('usesitenameforsitepages', 'admin'), new lang_string('configusesitenameforsitepages', 'admin'), 0));
-    $temp->add(new admin_setting_configcheckbox('linkadmincategories', new lang_string('linkadmincategories', 'admin'), new lang_string('linkadmincategories_help', 'admin'), 0));
+    $temp->add(new admin_setting_configcheckbox('linkadmincategories', new lang_string('linkadmincategories', 'admin'), new lang_string('linkadmincategories_help', 'admin'), 1));
     $temp->add(new admin_setting_configcheckbox('linkcoursesections', new lang_string('linkcoursesections', 'admin'), new lang_string('linkcoursesections_help', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('navshowfrontpagemods', new lang_string('navshowfrontpagemods', 'admin'), new lang_string('navshowfrontpagemods_help', 'admin'), 1));
     $temp->add(new admin_setting_configcheckbox('navadduserpostslinks', new lang_string('navadduserpostslinks', 'admin'), new lang_string('navadduserpostslinks_help', 'admin'), 1));
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 6d50e26..627c7b7 100644 (file)
Binary files a/admin/tool/lp/amd/build/menubar.min.js and b/admin/tool/lp/amd/build/menubar.min.js differ
index 76595fe..4673e3d 100644 (file)
@@ -794,6 +794,7 @@ define(['jquery'], function($) {
         this.allItems.addClass('tool-lp-menu-item');
         this.rootMenus.addClass('tool-lp-root-menu');
         this.subMenus.addClass('tool-lp-sub-menu');
+        this.subMenuItems.addClass('dropdown-item');
     };
 
     return /** @alias module:tool_lp/menubar */ {
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 21bd7af..d658ea3 100644 (file)
@@ -36,7 +36,7 @@
 {{#hascompetencies}}
 <span>
 <label for="competency-nav-{{uniqid}}" class="accesshide">{{#str}}jumptocompetency, tool_lp{{/str}}</label>
-<select id="competency-nav-{{uniqid}}">
+<select class="custom-select" id="competency-nav-{{uniqid}}">
 {{#competencies}}
 <option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{{shortname}}} {{idnumber}}</option>
 {{/competencies}}
index 39b061e..eaa0f43 100644 (file)
@@ -85,7 +85,7 @@
         <div data-region="coursecompetency-ruleoutcome">
             <label>
                 {{#str}}uponcoursecompletion, tool_lp{{/str}}
-                <select data-field="ruleoutcome" data-id="{{coursecompetency.id}}">
+                <select data-field="ruleoutcome" data-id="{{coursecompetency.id}}" class="custom-select">
                   {{#ruleoutcomeoptions}}
                      <option value="{{value}}" {{#selected}}selected{{/selected}}>{{text}}</option>
                   {{/ruleoutcomeoptions}}
index 8349d31..bf43b5d 100644 (file)
@@ -63,7 +63,7 @@
                             <ul title="{{#str}}edit{{/str}}" class="competencyactionsmenu">
                                 <li>
                                     <a href="#">{{#str}}edit{{/str}}</a><b class="caret"></b>
-                                    <ul class="dropdown-menu">
+                                    <ul class="dropdown dropdown-menu">
                                     <li class="dropdown-item">
                                         <a href="#" data-action="edit">
                                             {{#pix}}t/edit{{/pix}} {{#str}}edit{{/str}}
index f3d6a3e..2fcac12 100644 (file)
@@ -60,7 +60,7 @@
             <ul title="{{#str}}edit{{/str}}" class="competencyframeworkactions">
                 <li>
                     <a href="#">{{#str}}edit{{/str}}</a><b class="caret"></b>
-                    <ul class="dropdown-menu">
+                    <ul class="dropdown dropdown-menu">
                         <li class="dropdown-item">
                             <a href="{{pluginbaseurl}}/editcompetencyframework.php?id={{id}}&amp;pagecontextid={{pagecontextid}}">
                                 {{#pix}}t/edit{{/pix}} {{#str}}edit{{/str}}
index f0af972..4a267f6 100644 (file)
@@ -62,7 +62,7 @@
             <ul class="templateactions">
                 <li>
                     <a href="#">{{#str}}edit{{/str}}</a><b class="caret"></b>
-                    <ul class="dropdown-menu">
+                    <ul class="dropdown dropdown-menu">
                         <li class="dropdown-item">
                             <a href="{{pluginbaseurl}}/edittemplate.php?id={{id}}&amp;pagecontextid={{pagecontextid}}&amp;return=templates">
                                 {{#pix}}t/edit{{/pix}} {{#str}}edit{{/str}}
index d927eae..96f13f0 100644 (file)
                             <ul title="{{#str}}edit{{/str}}" class="user-competency-actions">
                                 <li>
                                     <a href="#">{{#str}}edit{{/str}}</a><b class="caret"></b>
-                                    <ul class="dropdown-menu">
+                                    <ul class="dropdown dropdown-menu">
                                         {{#usercompetency.isrequestreviewallowed}}
                                             <li class="dropdown-item">
                                                 <a href="#" data-action="request-review">{{#pix}}t/edit, core{{/pix}} {{#str}}requestreview, tool_lp{{/str}}</a>
index 84a4b66..8a3af99 100644 (file)
@@ -70,7 +70,7 @@
                 <ul title="{{#str}}edit{{/str}}" class="planactions">
                 <li>
                     <a href="#">{{#str}}edit{{/str}}</a><b class="caret"></b>
-                    <ul class="dropdown-menu">
+                    <ul class="dropdown dropdown-menu">
                     <li class="{{^canbeedited}} disabled {{/canbeedited}} dropdown-item">
                         <a href="{{#canbeedited}}
                                     {{pluginbaseurl}}/editplan.php?id={{id}}&amp;userid={{userid}}&amp;return=plans
index 533d01f..31e51ca 100644 (file)
@@ -41,7 +41,7 @@
 {{#hasusers}}
 <span>
 <label for="user-nav-{{uniqid}}" class="accesshide">{{#str}}jumptouser, tool_lp{{/str}}</label>
-<select id="user-nav-{{uniqid}}">
+<select id="user-nav-{{uniqid}}" class="custom-select">
 {{#users}}
 <option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{fullname}}</option>
 {{/users}}
@@ -52,7 +52,7 @@
 {{#hascompetencies}}
 <span>
 <label for="competency-nav-{{uniqid}}" class="accesshide">{{#str}}jumptocompetency, tool_lp{{/str}}</label>
-<select id="competency-nav-{{uniqid}}">
+<select id="competency-nav-{{uniqid}}" class="custom-select">
 {{#competencies}}
 <option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{{shortname}}} {{idnumber}}</option>
 {{/competencies}}
index d24f138..16ae1b7 100644 (file)
@@ -89,7 +89,7 @@
                 <ul title="{{#str}}edit{{/str}}" class="user-evidence-actions">
                 <li>
                     <a href="#">{{#str}}edit{{/str}}</a><b class="caret"></b>
-                    <ul class="dropdown-menu">
+                    <ul class="dropdown dropdown-menu">
                         <li class="dropdown-item">
                             <a href="{{pluginbaseurl}}/user_evidence_edit.php?id={{id}}&amp;userid={{userid}}&amp;return=list">
                                 {{#pix}}t/edit{{/pix}} {{#str}}editthisuserevidence, tool_lp{{/str}}
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 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 c5862e7..53081b0 100644 (file)
@@ -22,8 +22,8 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['autologinkeygenerationlockout'] = 'Auto-login key generation is locked out, too much requests in an hour.';
-$string['autologinnotallowedtoadmins'] = 'Auto-login is not allowed to site admins';
+$string['autologinkeygenerationlockout'] = 'Auto-login key generation is blocked because of too many requests within an hour.';
+$string['autologinnotallowedtoadmins'] = 'Auto-login is not allowed for site admins.';
 $string['clickheretolaunchtheapp'] = 'Click here if the app does not open automatically.';
 $string['configmobilecssurl'] = 'A CSS file to customise your mobile app interface.';
 $string['enablesmartappbanners'] = 'Enable Smart App Banners';
index 030daba..a5a7154 100644 (file)
@@ -31,6 +31,7 @@ require_once($CFG->libdir . '/externallib.php');
 $serviceshortname  = required_param('service',  PARAM_ALPHANUMEXT);
 $passport          = required_param('passport',  PARAM_RAW);    // Passport send from the app to validate the response URL.
 $urlscheme         = optional_param('urlscheme', 'moodlemobile', PARAM_NOTAGS); // The URL scheme the app supports.
+$confirmed         = optional_param('confirmed', false, PARAM_BOOL);  // If we are being redirected after user confirmation.
 
 // Check web services enabled.
 if (!$CFG->enablewebservices) {
@@ -39,7 +40,8 @@ if (!$CFG->enablewebservices) {
 
 // Check if the plugin is properly configured.
 $typeoflogin = get_config('tool_mobile', 'typeoflogin');
-if ($typeoflogin != tool_mobile\api::LOGIN_VIA_BROWSER and
+if (empty($SESSION->justloggedin) and
+        $typeoflogin != tool_mobile\api::LOGIN_VIA_BROWSER and
         $typeoflogin != tool_mobile\api::LOGIN_VIA_EMBEDDED_BROWSER) {
     throw new moodle_exception('pluginnotenabledorconfigured', 'tool_mobile');
 }
@@ -61,8 +63,8 @@ $token = external_generate_token_for_current_user($service);
 $privatetoken = $token->privatetoken;
 external_log_token_request($token);
 
-// Invalidate the private token if external_generate_token_for_current_user did not create a new token.
-if ($token->timecreated < $timenow) {
+// Don't return the private token if the user didn't just log in and a new token wasn't created.
+if (empty($SESSION->justloggedin) and $token->timecreated < $timenow) {
     $privatetoken = null;
 }
 
@@ -87,11 +89,25 @@ if (!empty($forcedurlscheme)) {
 $location = "$urlscheme://token=$apptoken";
 
 // For iOS 10 onwards, we have to simulate a user click.
-if (core_useragent::is_ios()) {
-    $PAGE->set_context(null);
-    $PAGE->set_url('/local/mobile/launch.php', array('service' => $serviceshortname, 'passport' => $passport, 'urlscheme' => $urlscheme));
+// If we come from the confirmation page, we should display a nicer page.
+$isios = core_useragent::is_ios();
+if ($confirmed or $isios) {
+    $PAGE->set_context(context_system::instance());
+    $PAGE->set_heading($COURSE->fullname);
+    $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) {
+        $confirmedstr = get_string('confirmed');
+        $PAGE->navbar->add($confirmedstr);
+        $PAGE->set_title($confirmedstr);
+        echo $OUTPUT->notification($confirmedstr, \core\output\notification::NOTIFY_SUCCESS);
+        echo $OUTPUT->box_start('generalbox centerpara boxwidthnormal boxaligncenter');
+        echo $OUTPUT->single_button(new moodle_url('/course/'), get_string('courses'));
+        echo $OUTPUT->box_end();
+    }
+
     $notice = get_string('clickheretolaunchtheapp', 'tool_mobile');
     echo html_writer::link($location, $notice,&n