Merge branch 'wip-mdl-52066' of https://github.com/rajeshtaneja/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 10 Nov 2015 22:27:50 +0000 (23:27 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 10 Nov 2015 22:27:50 +0000 (23:27 +0100)
515 files changed:
admin/blocks.php
admin/registration/register.php
admin/settings/security.php
admin/settings/top.php
admin/tool/assignmentupgrade/version.php
admin/tool/availabilityconditions/version.php
admin/tool/behat/version.php
admin/tool/capability/version.php
admin/tool/customlang/version.php
admin/tool/dbtransfer/version.php
admin/tool/filetypes/version.php
admin/tool/generator/classes/course_backend.php
admin/tool/generator/version.php
admin/tool/health/version.php
admin/tool/innodb/version.php
admin/tool/installaddon/lang/en/tool_installaddon.php
admin/tool/installaddon/version.php
admin/tool/langimport/lang/en/tool_langimport.php
admin/tool/langimport/tests/behat/manage_langpacks.feature
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/messageinbound/version.php
admin/tool/monitor/version.php
admin/tool/multilangupgrade/version.php
admin/tool/phpunit/version.php
admin/tool/profiling/version.php
admin/tool/replace/version.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/xmldb/version.php
auth/cas/version.php
auth/db/version.php
auth/email/version.php
auth/fc/version.php
auth/imap/version.php
auth/ldap/lang/en/auth_ldap.php
auth/ldap/version.php
auth/manual/version.php
auth/mnet/version.php
auth/nntp/version.php
auth/nologin/version.php
auth/none/version.php
auth/pam/version.php
auth/pop3/version.php
auth/radius/version.php
auth/shibboleth/version.php
auth/webservice/version.php
availability/condition/completion/version.php
availability/condition/date/version.php
availability/condition/grade/version.php
availability/condition/group/version.php
availability/condition/grouping/version.php
availability/condition/profile/version.php
backup/backup.class.php
badges/overview.php
badges/view.php
blocks/activity_modules/version.php
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/version.php
blocks/completionstatus/version.php
blocks/course_list/version.php
blocks/course_overview/version.php
blocks/course_summary/version.php
blocks/feedback/version.php
blocks/glossary_random/version.php
blocks/html/version.php
blocks/login/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/block_online_users.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/version.php
blocks/tag_flickr/version.php
blocks/tag_youtube/lang/en/block_tag_youtube.php
blocks/tag_youtube/version.php
blocks/tags/block_tags.php
blocks/tags/edit_form.php
blocks/tags/version.php
blog/edit.php
cache/classes/loaders.php
cache/locks/file/version.php
cache/stores/file/version.php
cache/stores/memcache/version.php
cache/stores/memcached/version.php
cache/stores/mongodb/version.php
cache/stores/session/version.php
cache/stores/static/version.php
cache/tests/cache_test.php
calendar/type/gregorian/version.php
completion/criteria/completion_criteria.php
completion/criteria/completion_criteria_activity.php
completion/criteria/completion_criteria_date.php
completion/criteria/completion_criteria_grade.php
completion/criteria/completion_criteria_self.php
completion/criteria/completion_criteria_unenrol.php
course/format/renderer.php
course/format/singleactivity/version.php
course/format/social/version.php
course/format/topics/version.php
course/format/weeks/version.php
enrol/category/version.php
enrol/cohort/version.php
enrol/database/version.php
enrol/externallib.php
enrol/flatfile/version.php
enrol/guest/version.php
enrol/imsenterprise/version.php
enrol/ldap/version.php
enrol/manual/version.php
enrol/meta/version.php
enrol/mnet/version.php
enrol/paypal/version.php
enrol/self/lang/en/enrol_self.php
enrol/self/tests/behat/self_enrolment.feature
enrol/self/version.php
enrol/tests/externallib_test.php
enrol/upgrade.txt
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/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/version.php
grade/export/xls/version.php
grade/export/xml/version.php
grade/grading/form/guide/version.php
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/lib.php
grade/report/grader/module.js
grade/report/grader/version.php
grade/report/history/version.php
grade/report/outcomes/version.php
grade/report/overview/version.php
grade/report/singleview/version.php
grade/report/user/version.php
index.php
install/lang/ca/install.php
install/lang/cs/admin.php
install/lang/nl/admin.php
install/lang/ro/error.php
lang/en/availability.php
lang/en/badges.php
lang/en/completion.php
lang/en/enrol.php
lang/en/error.php
lang/en/grades.php
lang/en/message.php
lang/en/moodle.php
lang/en/plugin.php
lang/en/webservice.php
lib/amd/build/form-autocomplete.min.js
lib/amd/src/form-autocomplete.js
lib/behat/behat_field_manager.php
lib/behat/form_field/behat_form_field.php
lib/classes/task/manager.php
lib/dml/mysqli_native_moodle_database.php
lib/editor/atto/autosave-ajax.php
lib/editor/atto/lib.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/version.php
lib/editor/atto/plugins/image/yui/build/moodle-atto_image-button/moodle-atto_image-button-debug.js
lib/editor/atto/plugins/image/yui/build/moodle-atto_image-button/moodle-atto_image-button-min.js
lib/editor/atto/plugins/image/yui/build/moodle-atto_image-button/moodle-atto_image-button.js
lib/editor/atto/plugins/image/yui/src/button/js/button.js
lib/editor/atto/plugins/indent/version.php
lib/editor/atto/plugins/italic/version.php
lib/editor/atto/plugins/link/version.php
lib/editor/atto/plugins/managefiles/version.php
lib/editor/atto/plugins/media/version.php
lib/editor/atto/plugins/noautolink/version.php
lib/editor/atto/plugins/orderedlist/version.php
lib/editor/atto/plugins/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/lang/en/atto_table.php
lib/editor/atto/plugins/table/version.php
lib/editor/atto/plugins/title/version.php
lib/editor/atto/plugins/underline/version.php
lib/editor/atto/plugins/undo/version.php
lib/editor/atto/plugins/unorderedlist/version.php
lib/editor/atto/version.php
lib/editor/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/version.php
lib/flowplayer/flowplayer-3.2.18.swf
lib/flowplayer/flowplayer-3.2.18.swf.bin [new file with mode: 0644]
lib/flowplayer/flowplayer-3.2.18.swf.php [new file with mode: 0644]
lib/flowplayer/flowplayer.audio-3.2.11.swf
lib/flowplayer/flowplayer.audio-3.2.11.swf.bin [new file with mode: 0644]
lib/flowplayer/flowplayer.audio-3.2.11.swf.php [new file with mode: 0644]
lib/flowplayer/flowplayer.controls-3.2.16.swf
lib/flowplayer/flowplayer.controls-3.2.16.swf.bin [new file with mode: 0644]
lib/flowplayer/flowplayer.controls-3.2.16.swf.php [new file with mode: 0644]
lib/flowplayer/lib.php [new file with mode: 0644]
lib/flowplayer/readme_moodle.txt
lib/form/autocomplete.php
lib/form/tags.php
lib/javascript-static.js
lib/outputrenderers.php
lib/outputrequirementslib.php
lib/tablelib.php
lib/templates/form_autocomplete_input.mustache
lib/tests/behat/action_menu.feature [new file with mode: 0644]
lib/tests/behat/behat_general.php
lib/tests/behat/behat_navigation.php
lib/tests/fixtures/testable_flexible_table.php [new file with mode: 0644]
lib/tests/outputrequirementslib_test.php
lib/tests/tablelib_test.php
lib/yui/build/moodle-core-actionmenu/moodle-core-actionmenu-debug.js
lib/yui/build/moodle-core-actionmenu/moodle-core-actionmenu-min.js
lib/yui/build/moodle-core-actionmenu/moodle-core-actionmenu.js
lib/yui/src/actionmenu/js/actionmenu.js
login/index.php
message/ajax.php
message/index.php
message/lib.php
message/output/airnotifier/version.php
message/output/email/version.php
message/output/jabber/version.php
message/output/popup/version.php
message/tests/behat/block_noncontacts.feature [new file with mode: 0644]
message/tests/behat/block_users.feature
message/tests/behat/send_message.feature
message/tests/messagelib_test.php
message/yui/build/moodle-core_message-messenger/moodle-core_message-messenger-debug.js
message/yui/build/moodle-core_message-messenger/moodle-core_message-messenger-min.js
message/yui/build/moodle-core_message-messenger/moodle-core_message-messenger.js
message/yui/src/messenger/js/manager.js
mnet/service/enrol/version.php
mod/assign/feedback/comments/locallib.php
mod/assign/feedback/comments/version.php
mod/assign/feedback/editpdf/version.php
mod/assign/feedback/file/version.php
mod/assign/feedback/offline/version.php
mod/assign/gradeform.php
mod/assign/gradingtable.php
mod/assign/locallib.php
mod/assign/submission/comments/version.php
mod/assign/submission/file/version.php
mod/assign/submission/onlinetext/version.php
mod/assign/tests/behat/submission_comments.feature
mod/assign/tests/locallib_test.php
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/version.php
mod/choice/lib.php
mod/choice/tests/events_test.php
mod/choice/tests/lib_test.php
mod/choice/version.php
mod/choice/view.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/lang/en/data.php
mod/data/lib.php
mod/data/preset/imagegallery/version.php
mod/data/tests/lib_test.php
mod/data/version.php
mod/feedback/version.php
mod/folder/version.php
mod/forum/discuss.php
mod/forum/tests/behat/move_discussion.feature [new file with mode: 0644]
mod/forum/version.php
mod/glossary/version.php
mod/imscp/version.php
mod/label/version.php
mod/lesson/mediafile.php
mod/lesson/renderer.php
mod/lesson/version.php
mod/lesson/view.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/version.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/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/locallib.php
mod/quiz/report/grading/version.php
mod/quiz/report/overview/version.php
mod/quiz/report/responses/version.php
mod/quiz/report/statistics/version.php
mod/quiz/tests/behat/manually_mark_question.feature
mod/quiz/tests/events_test.php
mod/quiz/version.php
mod/resource/lang/en/resource.php
mod/resource/lib.php
mod/resource/locallib.php
mod/resource/tests/behat/display_resource.feature
mod/resource/version.php
mod/scorm/lib.php
mod/scorm/loadSCO.php
mod/scorm/player.php
mod/scorm/report/basic/version.php
mod/scorm/report/graphs/version.php
mod/scorm/report/interactions/version.php
mod/scorm/report/objectives/version.php
mod/scorm/version.php
mod/scorm/view.php
mod/survey/lib.php
mod/survey/report.php
mod/survey/version.php
mod/url/version.php
mod/wiki/version.php
mod/workshop/allocation/manual/version.php
mod/workshop/allocation/random/version.php
mod/workshop/allocation/scheduled/version.php
mod/workshop/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
pix/i/completion_self.png [new file with mode: 0644]
pix/i/completion_self.svg [new file with mode: 0644]
pix/i/duration.png [new file with mode: 0644]
pix/i/duration.svg [new file with mode: 0644]
pix/i/role.png [new file with mode: 0644]
pix/i/role.svg [new file with mode: 0644]
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/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/type/calculated/version.php
question/type/calculatedmulti/version.php
question/type/calculatedsimple/version.php
question/type/ddimageortext/lang/en/qtype_ddimageortext.php
question/type/ddimageortext/version.php
question/type/ddmarker/lang/en/qtype_ddmarker.php
question/type/ddmarker/shapes.php
question/type/ddmarker/tests/behat/add.feature
question/type/ddmarker/tests/question_test.php
question/type/ddmarker/tests/shapes_test.php
question/type/ddmarker/version.php
question/type/ddwtos/lang/en/qtype_ddwtos.php
question/type/ddwtos/version.php
question/type/description/version.php
question/type/essay/version.php
question/type/gapselect/lang/en/qtype_gapselect.php
question/type/gapselect/version.php
question/type/match/version.php
question/type/missingtype/version.php
question/type/multianswer/version.php
question/type/multichoice/version.php
question/type/numerical/version.php
question/type/random/version.php
question/type/randomsamatch/version.php
question/type/shortanswer/version.php
question/type/truefalse/version.php
report/backups/version.php
report/completion/index.php
report/completion/version.php
report/configlog/version.php
report/courseoverview/version.php
report/eventlist/version.php
report/log/classes/table_log.php
report/log/version.php
report/loglive/version.php
report/outline/version.php
report/participation/version.php
report/performance/version.php
report/progress/version.php
report/questioninstances/version.php
report/security/version.php
report/stats/version.php
report/usersessions/version.php
repository/alfresco/version.php
repository/areafiles/version.php
repository/boxnet/version.php
repository/coursefiles/version.php
repository/dropbox/version.php
repository/equella/version.php
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/version.php
repository/upload/version.php
repository/url/version.php
repository/user/version.php
repository/webdav/version.php
repository/wikimedia/version.php
repository/youtube/version.php
theme/base/version.php
theme/bootstrapbase/version.php
theme/canvas/version.php
theme/clean/version.php
theme/more/version.php
user/editadvanced_form.php
user/index.php
user/lib.php
user/profile/field/checkbox/version.php
user/profile/field/datetime/version.php
user/profile/field/menu/version.php
user/profile/field/text/version.php
user/profile/field/textarea/version.php
user/tests/externallib_test.php
version.php
webservice/amf/version.php
webservice/rest/version.php
webservice/soap/version.php
webservice/xmlrpc/version.php

index a37af21..77febe6 100644 (file)
             } else if ($blocksettings instanceof admin_settingpage) {
                 $settings = '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/settings.php?section=blocksetting'.$block->name.'">'.$strsettings.'</a>';
             } else {
-                $settings = '<a href="block.php?block='.$blockid.'">'.$strsettings.'</a>';
+                debugging('Warning: block_'.$block->name.' returns true in has_config() but does not provide a settings.php file',
+                    DEBUG_DEVELOPER);
             }
         }
 
index 4206089..86ac102 100644 (file)
@@ -39,6 +39,8 @@ require_once($CFG->dirroot . '/' . $CFG->admin . '/registration/forms.php');
 require_once($CFG->dirroot . '/webservice/lib.php');
 require_once($CFG->dirroot . '/' . $CFG->admin . '/registration/lib.php');
 
+require_sesskey();
+
 $huburl = required_param('huburl', PARAM_URL);
 $huburl = rtrim($huburl, "/");
 
index 66cae6b..8703d35 100644 (file)
@@ -35,7 +35,8 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $params = new stdClass();
     $params->bytes = $defaultuserquota;
     $params->displaysize = display_size($defaultuserquota);
-    $temp->add(new admin_setting_configtext('userquota', new lang_string('userquota', 'admin'), new lang_string('configuserquota', 'admin', $params), $defaultuserquota));
+    $temp->add(new admin_setting_configtext('userquota', new lang_string('userquota', 'admin'),
+                new lang_string('configuserquota', 'admin', $params), $defaultuserquota, PARAM_INT, 30));
 
     $temp->add(new admin_setting_configcheckbox('allowobjectembed', new lang_string('allowobjectembed', 'admin'), new lang_string('configallowobjectembed', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('enabletrusttext', new lang_string('enabletrusttext', 'admin'), new lang_string('configenabletrusttext', 'admin'), 0));
index 768d287..4736f06 100644 (file)
@@ -11,7 +11,7 @@ $hassiteconfig = has_capability('moodle/site:config', $systemcontext);
 $ADMIN->add('root', new admin_externalpage('adminnotifications', new lang_string('notifications'), "$CFG->wwwroot/$CFG->admin/index.php"));
 
 $ADMIN->add('root', new admin_externalpage('registrationmoodleorg', new lang_string('registration', 'admin'),
-        "$CFG->wwwroot/$CFG->admin/registration/register.php?huburl=" . HUB_MOODLEORGHUBURL . "&hubname=Moodle.org"));
+        "$CFG->wwwroot/$CFG->admin/registration/register.php?huburl=" . HUB_MOODLEORGHUBURL . "&hubname=Moodle.org&sesskey=" . sesskey()));
 $ADMIN->add('root', new admin_externalpage('registrationhub', new lang_string('registerwith', 'hub'),
         "$CFG->wwwroot/$CFG->admin/registration/register.php", 'moodle/site:config', true));
 $ADMIN->add('root', new admin_externalpage('registrationhubs', new lang_string('hubs', 'admin'),
index e459706..a26edfd 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;
-$plugin->requires  = 2015050500;
+$plugin->version   = 2015111600;
+$plugin->requires  = 2015111000;
 $plugin->component = 'tool_assignmentupgrade';
-$plugin->dependencies = array('mod_assign' => 2015050500);
+$plugin->dependencies = array('mod_assign' => 2015111000);
index 52cdd4a..4598707 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'tool_availabilityconditions';
index e5cea8c..721b644 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;   // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;   // Requires this Moodle version
+$plugin->version   = 2015111600;   // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;   // Requires this Moodle version
 $plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
index e1128f6..270be18 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500; // Requires this Moodle version.
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000; // Requires this Moodle version.
 $plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics).
index cdba1b3..4f3c8db 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;
-$plugin->requires  = 2015050500;
+$plugin->version   = 2015111600;
+$plugin->requires  = 2015111000;
 $plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
index 95201c8..75b116a 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500; // Requires this Moodle version.
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000; // Requires this Moodle version.
 $plugin->component = 'tool_dbtransfer'; // Full name of the plugin (used for diagnostics).
index b615e7c..582294e 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'tool_filetypes';
index 2c2ca85..0219ebe 100644 (file)
@@ -253,7 +253,8 @@ class tool_generator_course_backend extends tool_generator_backend {
         $courserecord = array(
             'shortname' => $this->shortname,
             'fullname' => $this->fullname,
-            'numsections' => self::$paramsections[$this->size]
+            'numsections' => self::$paramsections[$this->size],
+            'startdate' => usergetmidnight(time())
         );
         if (strlen($this->summary) > 0) {
             $courserecord['summary'] = $this->summary;
index e80291c..93bcf0e 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'tool_generator';
index b284087..c2c6f1d 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // 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 ef52c4e..76304f4 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_innodb'; // Full name of the plugin (used for diagnostics)
index da1aee9..6d9a4ea 100644 (file)
@@ -37,7 +37,7 @@ $string['installfromzip'] = 'Install plugin from ZIP file';
 $string['installfromzip_help'] = 'An alternative to installing a plugin directly from the Moodle plugins directory is to upload a ZIP package of the plugin. The ZIP package should have the same structure as a package downloaded from the Moodle plugins directory.';
 $string['installfromzipfile'] = 'ZIP package';
 $string['installfromzipfile_help'] = 'The plugin ZIP package must contain just one directory, named to match the plugin name. The ZIP will be extracted into an appropriate location for the plugin type. If the package has been downloaded from the Moodle plugins directory then it will have this structure.';
-$string['installfromzipinvalid'] = 'The plugin ZIP package must contain just one directory, named to match the plugin name. Provided file is not a valid plugin ZIP package.';
+$string['installfromzipinvalid'] = 'The plugin ZIP package must contain just one directory, named to match the plugin name. The file provided is not a valid plugin ZIP package.';
 $string['installfromziprootdir'] = 'Rename the root directory';
 $string['installfromziprootdir_help'] = 'Some ZIP packages, such as those generated by Github, may contain an incorrect root directory name. If so, the correct name may be entered here.';
 $string['installfromzipsubmit'] = 'Install plugin from the ZIP file';
index 00f0c61..3c39b1b 100644 (file)
@@ -24,6 +24,6 @@
 defined('MOODLE_INTERNAL') || die();
 
 $plugin->component  = 'tool_installaddon';
-$plugin->version    = 2015080601;
-$plugin->requires   = 2015050500;
+$plugin->version    = 2015111600;
+$plugin->requires   = 2015111000;
 $plugin->maturity   = MATURITY_STABLE;
index a2ccf4e..d62d843 100644 (file)
@@ -39,12 +39,12 @@ $string['langpackupdatedevent'] = 'Language pack updated';
 $string['langupdatecomplete'] = 'Language pack update completed';
 $string['missingcfglangotherroot'] = 'Missing configuration value $CFG->langotherroot';
 $string['missinglangparent'] = 'Missing parent language <em>{$a->parent}</em> of <em>{$a->lang}</em>.';
-$string['noenglishuninstall'] = 'English language pack can not be uninstalled';
+$string['noenglishuninstall'] = 'The English language pack cannot be uninstalled.';
 $string['nolangupdateneeded'] = 'All your language packs are up to date, no update is needed';
 $string['pluginname'] = 'Language packs';
 $string['purgestringcaches'] = 'Purge string caches';
 $string['remotelangnotavailable'] = 'Because Moodle cannot connect to download.moodle.org, it is not possible for language packs to be installed automatically. Please download the appropriate ZIP file(s) from <a href="https://download.moodle.org/langpack/">download.moodle.org/langpack</a>, copy them to your {$a} directory and unzip them manually.';
-$string['selectlangs'] = 'Select languages to unistall!';
+$string['selectlangs'] = 'Select languages to uninstall';
 $string['uninstall'] = 'Uninstall selected language pack(s)';
 $string['uninstallconfirm'] = 'You are about to completely uninstall these language packs: <strong>{$a}</strong>. Are you sure?';
 $string['updatelangs'] = 'Update all installed language packs';
index 757d46e..4d518de 100644 (file)
@@ -53,7 +53,7 @@ Feature: Manage language packs
     And I navigate to "Language packs" node in "Site administration > Language"
     When I set the field "Installed language packs" to "English (en)"
     And I press "Uninstall selected language pack(s)"
-    Then I should see "English language pack can not be uninstalled"
+    Then I should see "The English language pack cannot be uninstalled."
     And I navigate to "Live logs" node in "Site administration > Reports"
     And I should not see "Language pack uninstalled"
     And I log out
index ba6f1e5..b5d5839 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_langimport'; // Full name of the plugin (used for diagnostics)
index 6c635b4..c474829 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2015050500; // Requires this Moodle version.
+$plugin->version = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2015111000; // Requires this Moodle version.
 $plugin->component = 'logstore_database'; // Full name of the plugin (used for diagnostics).
index e1917a7..c17eb5b 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015070700; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2015050500; // Requires this Moodle version.
+$plugin->version = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2015111000; // Requires this Moodle version.
 $plugin->component = 'logstore_legacy'; // Full name of the plugin (used for diagnostics).
index 3d6cb31..73c131e 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015070700; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2015050500; // Requires this Moodle version.
+$plugin->version = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2015111000; // Requires this Moodle version.
 $plugin->component = 'logstore_standard'; // Full name of the plugin (used for diagnostics).
index bdc5cbd..0036126 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2015050500; // Requires this Moodle version.
+$plugin->version = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2015111000; // Requires this Moodle version.
 $plugin->component = 'tool_log'; // Full name of the plugin (used for diagnostics).
index 43d8ba9..839e1d4 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;
-$plugin->requires  = 2015050500;
+$plugin->version   = 2015111600;
+$plugin->requires  = 2015111000;
 $plugin->component = 'tool_messageinbound';
index 7647741..4962e90 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version   = 2015051100;     // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500;     // Requires this Moodle version.
+$plugin->version   = 2015111600;     // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000;     // Requires this Moodle version.
 $plugin->component = 'tool_monitor'; // Full name of the plugin (used for diagnostics).
index 41a66bc..15274f8 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_multilangupgrade'; // Full name of the plugin (used for diagnostics)
 
index 2134945..197eb06 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_phpunit'; // Full name of the plugin (used for diagnostics)
 
index 15afdbb..9b9e96e 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_profiling'; // Full name of the plugin (used for diagnostics)
index 3f8b27e..81f0102 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // 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 86bcdc2..63ee126 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;
-$plugin->requires  = 2015050500;
+$plugin->version   = 2015111600;
+$plugin->requires  = 2015111000;
 $plugin->component = 'tool_spamcleaner'; // Full name of the plugin (used for diagnostics)
 
index 963c798..dcca7a3 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_task'; // Full name of the plugin (used for diagnostics)
 
index e97195e..b9577a1 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   = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500; // Requires this Moodle version.
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000; // Requires this Moodle version.
 $plugin->component = 'tool_templatelibrary'; // Full name of the plugin (used for diagnostics).
index 19b39af..f146b7e 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_unsuproles'; // Full name of the plugin (used for diagnostics)
 
index 4e5c7c2..a45923c 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;            // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500;            // Requires this Moodle version.
+$plugin->version   = 2015111600;            // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000;            // Requires this Moodle version.
 $plugin->component = 'tool_uploadcourse';   // Full name of the plugin (used for diagnostics).
index 955b346..9259420 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_uploaduser'; // Full name of the plugin (used for diagnostics)
 
index c3f74db..5dc9b04 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500; // Requires this Moodle version
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000; // Requires this Moodle version
 $plugin->component = 'tool_xmldb'; // Full name of the plugin (used for diagnostics)
 
index 342f88a..9736e6e 100644 (file)
@@ -26,8 +26,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015100600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_cas';        // Full name of the plugin (used for diagnostics)
 
-$plugin->dependencies = array('auth_ldap' => 2015050500);
+$plugin->dependencies = array('auth_ldap' => 2015111000);
index 9e7cc6d..b3282fe 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_db';         // Full name of the plugin (used for diagnostics)
index c865be5..e681cbe 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_email';      // Full name of the plugin (used for diagnostics)
index 54bf166..f72c0ef 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_fc';         // Full name of the plugin (used for diagnostics)
index e4757b8..a89361d 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_imap';       // Full name of the plugin (used for diagnostics)
index c4c8c1d..6812abe 100644 (file)
@@ -47,7 +47,7 @@ $string['auth_ldap_expiration_desc'] = 'Select No to disable expired password ch
 $string['auth_ldap_expiration_key'] = 'Expiration';
 $string['auth_ldap_expiration_warning_desc'] = 'Number of days before password expiration warning is issued.';
 $string['auth_ldap_expiration_warning_key'] = 'Expiration warning';
-$string['auth_ldap_expireattr_desc'] = 'Optional: overrides ldap-attribute that stores password expiration time';
+$string['auth_ldap_expireattr_desc'] = 'Optional: Overrides the LDAP attribute that stores password expiration time.';
 $string['auth_ldap_expireattr_key'] = 'Expiration attribute';
 $string['auth_ldapextrafields'] = 'These fields are optional.  You can choose to pre-fill some Moodle user fields with information from the <b>LDAP fields</b> that you specify here. <p>If you leave these fields blank, then nothing will be transferred from LDAP and Moodle defaults will be used instead.</p><p>In either case, the user will be able to edit all of these fields after they log in.</p>';
 $string['auth_ldap_graceattr_desc'] = 'Optional: Overrides  gracelogin attribute';
@@ -71,7 +71,7 @@ $string['auth_ldap_noconnect_all'] = 'LDAP-module cannot connect to any servers:
 $string['auth_ldap_noextension'] = '<em>The PHP LDAP module does not seem to be present. Please ensure it is installed and enabled if you want to use this authentication plugin.</em>';
 $string['auth_ldap_no_mbstring'] = 'You need the mbstring extension to create users in Active Directory.';
 $string['auth_ldapnotinstalled'] = 'Cannot use LDAP authentication. The PHP LDAP module is not installed.';
-$string['auth_ldap_objectclass'] = 'Optional: Overrides objectClass used to name/search users on ldap_user_type. Usually you dont need to chage this.';
+$string['auth_ldap_objectclass'] = 'Optional: Overrides objectClass used to name/search users on ldap_user_type. Usually you don\'t need to change this.';
 $string['auth_ldap_objectclass_key'] = 'Object class';
 $string['auth_ldap_opt_deref'] = 'Determines how aliases are handled during search. Select one of the following values: "No" (LDAP_DEREF_NEVER) or "Yes" (LDAP_DEREF_ALWAYS)';
 $string['auth_ldap_opt_deref_key'] = 'Dereference aliases';
index 91846b2..9e70060 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015100600;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_ldap';       // Full name of the plugin (used for diagnostics)
index 573d5ef..419c7f9 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_manual';     // Full name of the plugin (used for diagnostics)
index 2e9668b..9744f6f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_mnet';       // Full name of the plugin (used for diagnostics)
index 813b5c8..97d483d 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_nntp';       // Full name of the plugin (used for diagnostics)
index a7fdbb2..a8e658c 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_nologin';    // Full name of the plugin (used for diagnostics)
index 6113c59..6b6098f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_none';       // Full name of the plugin (used for diagnostics)
index 5f6b188..c8949b8 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_pam';       // Full name of the plugin (used for diagnostics)
index de2dc69..5fd0118 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_pop3';       // Full name of the plugin (used for diagnostics)
index 088074e..8a94df0 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_radius';     // Full name of the plugin (used for diagnostics)
index 5b348a2..e84684a 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_shibboleth'; // Full name of the plugin (used for diagnostics)
index 3236b02..f7a3b2a 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'auth_webservice'; // Full name of the plugin (used for diagnostics)
index 4a85804..c99e0e1 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'availability_completion';
index ff4b70b..ceccc4b 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'availability_date';
index 089ae12..658273f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'availability_grade';
index 1fed9e5..6d5a2e4 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'availability_group';
index b9c68b9..a77b890 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'availability_grouping';
index d1a2a5e..c57a372 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
 $plugin->component = 'availability_profile';
index f0e4e99..894aebd 100644 (file)
@@ -131,7 +131,7 @@ abstract class backup implements checksumable {
      * point is backup when some behavior/approach channged, in order to allow
      * conditional coding based on it.
      */
-    const VERSION = 2015051100;
+    const VERSION = 2015111600;
     /**
      * Usually same than major release zero version, mainly for informative/historic purposes.
      */
index 7801674..fa5e640 100644 (file)
@@ -61,6 +61,8 @@ $PAGE->set_heading($badge->name);
 $PAGE->set_title($badge->name);
 $PAGE->navbar->add($badge->name);
 
+require_capability('moodle/badges:viewbadges', $context);
+
 echo $OUTPUT->header();
 echo $OUTPUT->heading(print_badge_image($badge, $context, 'small') . ' ' . $badge->name);
 
@@ -75,4 +77,4 @@ echo $output->print_badge_status_box($badge);
 $output->print_badge_tabs($badgeid, $context, 'overview');
 echo $output->print_badge_overview($badge, $context);
 
-echo $OUTPUT->footer();
\ No newline at end of file
+echo $OUTPUT->footer();
index ed0780b..ed1aa7d 100644 (file)
@@ -75,6 +75,8 @@ if ($type == BADGE_TYPE_SITE) {
     $PAGE->set_heading($coursename);
 }
 
+require_capability('moodle/badges:viewbadges', $PAGE->context);
+
 $PAGE->set_title($title);
 $output = $PAGE->get_renderer('core', 'badges');
 
index 7c30935..08f03ac 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_activity_modules'; // Full name of the plugin (used for diagnostics)
index f7b7ea3..a512b39 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;               // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500;               // Requires this Moodle version.
+$plugin->version   = 2015111600;               // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000;               // Requires this Moodle version.
 $plugin->component = 'block_activity_results'; // Full name of the plugin (used for diagnostics).
\ No newline at end of file
index ebf8854..f364525 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_admin_bookmarks'; // Full name of the plugin (used for diagnostics)
index 1560229..3d17681 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500;        // Requires this Moodle version.
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000;        // Requires this Moodle version.
 $plugin->component = 'block_badges';
index 2abf7d5..39a6e18 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_blog_menu'; // Full name of the plugin (used for diagnostics)
index e6c271a..6a66beb 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_blog_recent'; // Full name of the plugin (used for diagnostics)
index 50ee81a..2554823 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_blog_tags'; // Full name of the plugin (used for diagnostics)
index f2df6bd..8318948 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_calendar_month'; // Full name of the plugin (used for diagnostics)
index 1022fde..cac3f9d 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_calendar_upcoming'; // Full name of the plugin (used for diagnostics)
index 42a700d..e474c65 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_comments'; // Full name of the plugin (used for diagnostics)
index fd90f23..f7b2e87 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_community'; // Full name of the plugin (used for diagnostics)
index 36fb11a..7540c36 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version      = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires     = 2015050500; // Requires this Moodle version.
+$plugin->version      = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires     = 2015111000; // Requires this Moodle version.
 $plugin->component    = 'block_completionstatus';
-$plugin->dependencies = array('report_completion' => 2015050500);
+$plugin->dependencies = array('report_completion' => 2015111000);
index 7341ab1..5f36cc8 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_course_list'; // Full name of the plugin (used for diagnostics)
index 8dddd9e..b9b00ea 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_course_overview'; // Full name of the plugin (used for diagnostics)
index 36b552e..3ffb05d 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_course_summary'; // Full name of the plugin (used for diagnostics)
index 0e0238c..3f8f48d 100644 (file)
@@ -24,8 +24,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_feedback';  // Full name of the plugin (used for diagnostics)
 
-$plugin->dependencies = array('mod_feedback' => 2015050500);
+$plugin->dependencies = array('mod_feedback' => 2015111000);
index 431028e..aad4684 100644 (file)
@@ -24,8 +24,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_glossary_random'; // Full name of the plugin (used for diagnostics)
 
-$plugin->dependencies = array('mod_glossary' => 2015050500);
+$plugin->dependencies = array('mod_glossary' => 2015111000);
index 15a59ef..06b583d 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_html';      // Full name of the plugin (used for diagnostics)
index bfa1ae0..a4816d7 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_login';     // Full name of the plugin (used for diagnostics)
index 7e017d6..ae06093 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_mentees';   // Full name of the plugin (used for diagnostics)
index 7ee02e0..65a1d91 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_messages';  // Full name of the plugin (used for diagnostics)
index 79d2a05..44b2a7e 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_mnet_hosts'; // Full name of the plugin (used for diagnostics)
index ad7c8f7..3f9eafb 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_myprofile'; // Full name of the plugin (used for diagnostics)
index 2347259..439fffe 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_navigation'; // Full name of the plugin (used for diagnostics)
index 9bb5170..33bd81b 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;         // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;         // Requires this Moodle version
+$plugin->version   = 2015111600;         // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;         // Requires this Moodle version
 $plugin->component = 'block_news_items'; // Full name of the plugin (used for diagnostics)
-$plugin->dependencies = array('mod_forum' => 2015050500);
+$plugin->dependencies = array('mod_forum' => 2015111000);
index d524a23..13ed51c 100644 (file)
@@ -69,8 +69,8 @@ class block_online_users extends block_base {
 
         $sitelevel = $this->page->course->id == SITEID || $this->page->context->contextlevel < CONTEXT_COURSE;
 
-        $onlineusers = new fetcher($currentgroup, $now, $timetoshowusers, $sitelevel,
-                $this->page->context, $this->page->course->id);
+        $onlineusers = new fetcher($currentgroup, $now, $timetoshowusers, $this->page->context,
+                $sitelevel, $this->page->course->id);
 
         //Calculate minutes
         $minutes  = floor($timetoshowusers/60);
index 701625e..aca78a8 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_online_users'; // Full name of the plugin (used for diagnostics)
index 2689fde..463c6f8 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_participants'; // Full name of the plugin (used for diagnostics)
index d403fb5..68e2619 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_private_files'; // Full name of the plugin (used for diagnostics)
index 16c0205..e4fb57a 100644 (file)
@@ -24,8 +24,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_quiz_results'; // Full name of the plugin (used for diagnostics)
 
-$plugin->dependencies = array('mod_quiz' => 2015050500);
+$plugin->dependencies = array('mod_quiz' => 2015111000);
index d05b021..cd44bc1 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_recent_activity'; // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 24*3600;           // Cron interval 1 day.
\ No newline at end of file
index 2e2cea9..436827b 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015071700;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_rss_client'; // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 300;               // Set min time between cron executions to 300 secs (5 mins)
index 0070205..7249622 100644 (file)
@@ -24,8 +24,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_search_forums'; // Full name of the plugin (used for diagnostics)
 
-$plugin->dependencies = array('mod_forum' => 2015050500);
+$plugin->dependencies = array('mod_forum' => 2015111000);
index 4b561b8..a6a521f 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_section_links'; // Full name of the plugin (used for diagnostics)
index 39cffd3..2b2f9d2 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_selfcompletion'; // Full name of the plugin (used for diagnostics)
index 3758cc7..16876d4 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_settings';  // Full name of the plugin (used for diagnostics)
index 35bc185..9795aa9 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_site_main_menu'; // Full name of the plugin (used for diagnostics)
index e02790b..8e7eeef 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_social_activities'; // Full name of the plugin (used for diagnostics)
index 6f400a8..f1ebcfe 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_tag_flickr'; // Full name of the plugin (used for diagnostics)
index d56c330..2016fd3 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 $string['anycategory'] = 'Any category';
-$string['apierror'] = 'The Youtube API key is not set. Contact your administrator.';
+$string['apierror'] = 'The YouTube API key is not set. Contact your administrator.';
 $string['apikey'] = 'API key';
 $string['apikeyinfo'] = 'Get a <a href="https://developers.google.com/youtube/v3/getting-started">Google API key</a> for your Moodle site.';
 $string['autosvehicles'] = 'Autos &amp; Vehicles';
@@ -42,7 +42,7 @@ $string['numberofvideos'] = 'Number of videos';
 $string['peopleblogs'] = 'People &amp; Blogs';
 $string['petsanimals'] = 'Pets &amp; Animals';
 $string['pluginname'] = 'YouTube';
-$string['requesterror'] = 'Data could not be obtained from the server. Contact your administrator if the problem persist.';
+$string['requesterror'] = 'Data could not be obtained from the server. Contact your administrator if the problem persists.';
 $string['scienceandtech'] = 'Science &amp; Tech';
 $string['sports'] = 'Sports';
 $string['tag_youtube:addinstance'] = 'Add a new YouTube block';
index 832b9f1..4e307ee 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051101;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_tag_youtube'; // Full name of the plugin (used for diagnostics)
index ff9e88b..329eb3f 100644 (file)
@@ -31,10 +31,6 @@ class block_tags extends block_base {
         return true;
     }
 
-    public function has_config() {
-        return true;
-    }
-
     public function applicable_formats() {
         return array('all' => true);
     }
@@ -74,10 +70,6 @@ class block_tags extends block_base {
             $this->config->numberoftags = 80;
         }
 
-        if (empty($this->config->tagtype)) {
-            $this->config->tagtype = '';
-        }
-
         if ($this->content !== NULL) {
             return $this->content;
         }
index b1b2acf..e6c80f1 100644 (file)
@@ -43,9 +43,5 @@ class block_tags_edit_form extends block_edit_form {
         }
         $mform->addElement('select', 'config_numberoftags', get_string('numberoftags', 'blog'), $numberoftags);
         $mform->setDefault('config_numberoftags', 80);
-
-        $defaults = array('default'=>'default', 'official'=>'official', ''=>'both');
-        $mform->addElement('select', 'config_tagtype', get_string('defaultdisplay', 'block_tags'), $defaults);
-        $mform->setDefault('config_tagtype', '');
     }
 }
index 0ad5c6a..1fc2fb0 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'block_tags';      // Full name of the plugin (used for diagnostics)
index d82b244..7ff8333 100644 (file)
@@ -26,6 +26,7 @@
 require_once(dirname(dirname(__FILE__)).'/config.php');
 require_once('lib.php');
 require_once('locallib.php');
+require_once($CFG->dirroot .'/comment/lib.php');
 
 $action   = required_param('action', PARAM_ALPHA);
 $id       = optional_param('entryid', 0, PARAM_INT);
@@ -115,6 +116,9 @@ $output = $PAGE->get_renderer('blog');
 $strblogs = get_string('blogs', 'blog');
 
 if ($action === 'delete') {
+    // Init comment JS strings.
+    comment::init();
+
     if (empty($entry->id)) {
         print_error('wrongentryid', 'blog');
     }
index 9d623e2..e0a7723 100644 (file)
@@ -1270,7 +1270,9 @@ class cache_application extends cache implements cache_loader_with_locking {
                 $this->delete_many($todelete);
             }
             // Set the time of the last invalidation.
-            $this->set('lastinvalidation', cache::now());
+            if ($purgeall || !empty($todelete)) {
+                $this->set('lastinvalidation', cache::now());
+            }
         }
     }
 
@@ -1669,7 +1671,9 @@ class cache_session extends cache {
                 $this->delete_many($todelete);
             }
             // Set the time of the last invalidation.
-            $this->set('lastsessioninvalidation', cache::now());
+            if ($purgeall || !empty($todelete)) {
+                $this->set('lastsessioninvalidation', cache::now());
+            }
         }
     }
 
index 2f88b90..b40fadb 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'cachelock_file';  // Full name of the plugin (used for diagnostics)
index 468a169..a1e4a95 100644 (file)
@@ -27,6 +27,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version = 2015051100;    // The current module version (Date: YYYYMMDDXX)
-$plugin->requires = 2015050500;    // Requires this Moodle version.
+$plugin->version = 2015111600;    // The current module version (Date: YYYYMMDDXX)
+$plugin->requires = 2015111000;    // Requires this Moodle version.
 $plugin->component = 'cachestore_file';  // Full name of the plugin.
\ No newline at end of file
index 4925d80..588bf6b 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version = 2015051100;    // The current module version (Date: YYYYMMDDXX)
-$plugin->requires = 2015050500;    // Requires this Moodle version.
+$plugin->version = 2015111600;    // The current module version (Date: YYYYMMDDXX)
+$plugin->requires = 2015111000;    // Requires this Moodle version.
 $plugin->component = 'cachestore_memcache';  // Full name of the plugin.
index 962ac55..b7bcdb8 100644 (file)
@@ -26,6 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version   = 2015051100;    // The current module version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;    // Requires this Moodle version.
+$plugin->version   = 2015111600;    // The current module version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;    // Requires this Moodle version.
 $plugin->component = 'cachestore_memcached';  // Full name of the plugin.
\ No newline at end of file
index 03f1135..09a9a73 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version   = 2015051100;    // The current module version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;    // Requires this Moodle version.
+$plugin->version   = 2015111600;    // The current module version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;    // Requires this Moodle version.
 $plugin->component = 'cachestore_mongodb';  // Full name of the plugin.
\ No newline at end of file
index 34fb203..28da31d 100644 (file)
@@ -27,6 +27,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version = 2015051100;    // The current module version (Date: YYYYMMDDXX)
-$plugin->requires = 2015050500;    // Requires this Moodle version.
+$plugin->version = 2015111600;    // The current module version (Date: YYYYMMDDXX)
+$plugin->requires = 2015111000;    // Requires this Moodle version.
 $plugin->component = 'cachestore_session';  // Full name of the plugin.
\ No newline at end of file
index 7bd5806..0f6ef22 100644 (file)
@@ -27,6 +27,6 @@
 
 defined('MOODLE_INTERNAL') || die;
 
-$plugin->version   = 2015051100;    // The current module version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;    // Requires this Moodle version.
+$plugin->version   = 2015111600;    // The current module version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;    // Requires this Moodle version.
 $plugin->component = 'cachestore_static';  // Full name of the plugin.
\ No newline at end of file
index 0d6daa7..6c9f14c 100644 (file)
@@ -989,6 +989,48 @@ class core_cache_testcase extends advanced_testcase {
         ));
         $cache = cache::make('phpunit', 'eventinvalidationtest');
         $this->assertFalse($cache->get('testkey1'));
+
+        // Test 3: Verify that an existing lastinvalidation cache file is updated when needed.
+
+        // Make a new cache class.  This should should invalidate testkey2.
+        $cache = cache::make('phpunit', 'eventinvalidationtest');
+        // Timestamp should have updated to cache::now().
+        $this->assertEquals(cache::now(), $cache->get('lastinvalidation'));
+
+        // Set testkey2 data.
+        $cache->set('testkey2', 'test data 2');
+        // Backdate the event invalidation time by 30 seconds.
+        $invalidationcache = cache::make('core', 'eventinvalidation');
+        $invalidationcache->set('crazyevent', array('testkey2' => cache::now() - 30));
+        // Lastinvalidation should already be cache::now().
+        $this->assertEquals(cache::now(), $cache->get('lastinvalidation'));
+        // Set it to 15 seconds ago so that we know if it changes.
+        $cache->set('lastinvalidation', cache::now() - 15);
+        // Make a new cache class.  This should not invalidate anything.
+        cache_factory::instance()->reset_cache_instances();
+        $cache = cache::make('phpunit', 'eventinvalidationtest');
+        // Lastinvalidation shouldn't change since it was already newer than invalidation event.
+        $this->assertEquals(cache::now() - 15, $cache->get('lastinvalidation'));
+
+        // Now set the event invalidation to newer than the lastinvalidation time.
+        $invalidationcache->set('crazyevent', array('testkey2' => cache::now() - 5));
+        // Make a new cache class.  This should should invalidate testkey2.
+        cache_factory::instance()->reset_cache_instances();
+        $cache = cache::make('phpunit', 'eventinvalidationtest');
+        // Lastinvalidation timestamp should have updated to cache::now().
+        $this->assertEquals(cache::now(), $cache->get('lastinvalidation'));
+
+        // Now simulate a purge_by_event 5 seconds ago.
+        $invalidationcache = cache::make('core', 'eventinvalidation');
+        $invalidationcache->set('crazyevent', array('purged' => cache::now() - 5));
+        // Set our lastinvalidation timestamp to 15 seconds ago.
+        $cache->set('lastinvalidation', cache::now() - 15);
+        // Make a new cache class.  This should invalidate the cache.
+        cache_factory::instance()->reset_cache_instances();
+        $cache = cache::make('phpunit', 'eventinvalidationtest');
+        // Lastinvalidation timestamp should have updated to cache::now().
+        $this->assertEquals(cache::now(), $cache->get('lastinvalidation'));
+
     }
 
     /**
index 60aa4ea..3c07347 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500; // Requires this Moodle version.
+$plugin->version   = 2015111600; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000; // Requires this Moodle version.
 $plugin->component = 'calendartype_gregorian'; // Full name of the plugin (used for diagnostics).
index 3275587..bec45a2 100644 (file)
@@ -232,6 +232,20 @@ abstract class completion_criteria extends data_object {
      */
     abstract public function get_details($completion);
 
+    /**
+     * Return pix_icon for display in reports.
+     *
+     * @param string $alt The alt text to use for the icon
+     * @param array $attributes html attributes
+     * @return pix_icon
+     */
+    public function get_icon($alt, array $attributes = null) {
+        global $COMPLETION_CRITERIA_TYPES;
+
+        $criteriatype = $COMPLETION_CRITERIA_TYPES[$this->criteriatype];
+        return new pix_icon('i/'.$criteriatype, $alt, 'moodle', $attributes);
+    }
+
     /**
      * Return criteria status text for display in reports
      *
index c64805e..05eda15 100644 (file)
@@ -288,4 +288,15 @@ class completion_criteria_activity extends completion_criteria {
 
         return $details;
     }
+
+    /**
+     * Return pix_icon for display in reports.
+     *
+     * @param string $alt The alt text to use for the icon
+     * @param array $attributes html attributes
+     * @return pix_icon
+     */
+    public function get_icon($alt, array $attributes = null) {
+        return new pix_icon('icon', $alt, 'mod_'.$this->module, $attributes);
+    }
 }
index 883fa5a..9327466 100644 (file)
@@ -202,4 +202,15 @@ class completion_criteria_date extends completion_criteria {
 
         return $details;
     }
+
+    /**
+     * Return pix_icon for display in reports.
+     *
+     * @param string $alt The alt text to use for the icon
+     * @param array $attributes html attributes
+     * @return pix_icon
+     */
+    public function get_icon($alt, array $attributes = null) {
+        return new pix_icon('i/calendar', $alt, 'moodle', $attributes);
+    }
 }
index 2e9655f..e43d324 100644 (file)
@@ -248,4 +248,15 @@ class completion_criteria_grade extends completion_criteria {
 
         return $details;
     }
+
+    /**
+     * Return pix_icon for display in reports.
+     *
+     * @param string $alt The alt text to use for the icon
+     * @param array $attributes html attributes
+     * @return pix_icon
+     */
+    public function get_icon($alt, array $attributes = null) {
+        return new pix_icon('i/grades', $alt, 'moodle', $attributes);
+    }
 }
index 065f00f..9631f7f 100644 (file)
@@ -149,4 +149,15 @@ class completion_criteria_self extends completion_criteria {
 
         return $details;
     }
+
+    /**
+     * Return pix_icon for display in reports.
+     *
+     * @param string $alt The alt text to use for the icon
+     * @param array $attributes html attributes
+     * @return pix_icon
+     */
+    public function get_icon($alt, array $attributes = null) {
+        return new pix_icon('i/completion_self', $alt, 'moodle', $attributes);
+    }
 }
index 6eaab0e..b461cdf 100644 (file)
@@ -131,4 +131,15 @@ class completion_criteria_unenrol extends completion_criteria {
         $details['status'] = '';
         return $details;
     }
+
+    /**
+     * Return pix_icon for display in reports.
+     *
+     * @param string $alt The alt text to use for the icon
+     * @param array $attributes html attributes
+     * @return pix_icon
+     */
+    public function get_icon($alt, array $attributes = null) {
+        return new pix_icon('i/user', $alt, 'moodle', $attributes);
+    }
 }
index d557d76..0e0a143 100644 (file)
@@ -104,7 +104,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
                 $url = empty($value['url']) ? '' : $value['url'];
                 $icon = empty($value['icon']) ? '' : $value['icon'];
                 $name = empty($value['name']) ? '' : $value['name'];
-                $attr = empty($value['attr']) ? '' : $value['attr'];
+                $attr = empty($value['attr']) ? array() : $value['attr'];
                 $class = empty($item['pixattr']['class']) ? '' : $item['pixattr']['class'];
                 $alt = empty($item['pixattr']['alt']) ? '' : $item['pixattr']['alt'];
                 $al = new action_menu_link_secondary(
index 55f506a..365640e 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;              // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;              // Requires this Moodle version
+$plugin->version   = 2015111600;              // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;              // Requires this Moodle version
 $plugin->component = 'format_singleactivity'; // Full name of the plugin (used for diagnostics)
index 4e9200a..92b38b0 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015102100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'format_social';   // Full name of the plugin (used for diagnostics)
index 006e501..0ff814e 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500;        // Requires this Moodle version.
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000;        // Requires this Moodle version.
 $plugin->component = 'format_topics';    // Full name of the plugin (used for diagnostics).
index 30927d5..7abf09a 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires  = 2015050500;        // Requires this Moodle version.
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires  = 2015111000;        // Requires this Moodle version.
 $plugin->component = 'format_weeks';    // Full name of the plugin (used for diagnostics).
index 0f535de..ce7bfa1 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_category';  // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 60;
index 0c8b089..1502733 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_cohort';    // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 60*60;             // run cron every hour by default, it is not out-of-sync often
index 13b59bd..59a9146 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_database';  // Full name of the plugin (used for diagnostics)
 //TODO: should we add cron sync?
index c520d5b..7e64f21 100644 (file)
@@ -378,7 +378,10 @@ class core_enrol_external extends external_api {
                         )
                     ), 'Option names:
                             * withcapability (string) return only users with this capability. This option requires \'moodle/role:review\' on the course context.
-                            * groupid (integer) return only users in this group id. This option requires \'moodle/site:accessallgroups\' on the course context.
+                            * groupid (integer) return only users in this group id. If the course has groups enabled and this param
+                                                isn\'t defined, returns all the viewable users.
+                                                This option requires \'moodle/site:accessallgroups\' on the course context if the
+                                                user doesn\'t belong to the group.
                             * onlyactive (integer) return only users with active enrolments and matching time restrictions. This option requires \'moodle/course:enrolreview\' on the course context.
                             * userfields (\'string, string, ...\') return only the values of these user fields.
                             * limitfrom (integer) sql limit from.
@@ -466,7 +469,7 @@ class core_enrol_external extends external_api {
             require_capability('moodle/role:review', $coursecontext);
         }
         // need accessallgroups capability if you want to overwrite this option
-        if (!empty($groupid) && groups_is_member($groupid)) {
+        if (!empty($groupid) && !groups_is_member($groupid)) {
             require_capability('moodle/site:accessallgroups', $coursecontext);
         }
         // to overwrite this option, you need course:enrolereview permission
@@ -478,10 +481,29 @@ class core_enrol_external extends external_api {
         $ctxselect = ', ' . context_helper::get_preload_record_columns_sql('ctx');
         $ctxjoin = "LEFT JOIN {context} ctx ON (ctx.instanceid = u.id AND ctx.contextlevel = :contextlevel)";
         $enrolledparams['contextlevel'] = CONTEXT_USER;
-        $sql = "SELECT u.* $ctxselect
-                  FROM {user} u $ctxjoin
-                 WHERE u.id IN ($enrolledsql)
-                 ORDER BY u.id ASC";
+
+        $groupjoin = '';
+        if (empty($groupid) && groups_get_course_groupmode($course) == SEPARATEGROUPS &&
+                !has_capability('moodle/site:accessallgroups', $coursecontext)) {
+            // Filter by groups the user can view.
+            $usergroups = groups_get_user_groups($course->id);
+            if (!empty($usergroups['0'])) {
+                list($groupsql, $groupparams) = $DB->get_in_or_equal($usergroups['0'], SQL_PARAMS_NAMED);
+                $groupjoin = "JOIN {groups_members} gm ON (u.id = gm.userid AND gm.groupid $groupsql)";
+                $enrolledparams = array_merge($enrolledparams, $groupparams);
+            } else {
+                // User doesn't belong to any group, so he can't see any user. Return an empty array.
+                return array();
+            }
+        }
+        $sql = "SELECT us.*
+                  FROM {user} us
+                  JOIN (
+                      SELECT DISTINCT u.id $ctxselect
+                        FROM {user} u $ctxjoin $groupjoin
+                       WHERE u.id IN ($enrolledsql)
+                  ) q ON q.id = us.id
+                ORDER BY us.id ASC";
         $enrolledusers = $DB->get_recordset_sql($sql, $enrolledparams, $limitfrom, $limitnumber);
         $users = array();
         foreach ($enrolledusers as $user) {
index e7e8b86..bc47406 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015090700;        // The current plugin version (Date: YYYYMMDDRR)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDRR)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_flatfile';  // Full name of the plugin (used for diagnostics)
index c565506..d916ed6 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015102300;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_guest';     // Full name of the plugin (used for diagnostics)
index 89a503e..ce342bd 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version.
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version.
 $plugin->component = 'enrol_imsenterprise';
index d2ed29b..f62e0aa 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_ldap';      // Full name of the plugin (used for diagnostics)
index ebb6db1..5ade4b0 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015091500;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_manual';    // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 600;
index 83de31c..fe19a8f 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015082400;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_meta';      // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 60*60;             // run cron every hour by default, it is not out-of-sync often
index d5e56e5..1f20c38 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_mnet';      // Full name of the plugin (used for diagnostics)
index 624ffe8..79d4886 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_paypal';    // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 60;
index 4ab8d5b..1af38c6 100644 (file)
@@ -101,9 +101,9 @@ $string['sendcoursewelcomemessage'] = 'Send course welcome message';
 $string['sendcoursewelcomemessage_help'] = 'If enabled, users receive a welcome message via email when they self-enrol in a course.';
 $string['showhint'] = 'Show hint';
 $string['showhint_desc'] = 'Show first letter of the guest access key.';
-$string['status'] = 'Enable existing enrolments';
+$string['status'] = 'Allow existing enrolments';
 $string['status_desc'] = 'Enable self enrolment method in new courses.';
-$string['status_help'] = 'If disabled all existing self enrolments are suspended and new users can not enrol.';
+$string['status_help'] = 'If enabled together with \'Allow new enrolments\' disabled, only users who self enrolled previously can access the course. If disabled, this self enrolment method is effectively disabled, since all existing self enrolments are suspended and new users cannot self enrol.';
 $string['unenrol'] = 'Unenrol user';
 $string['unenrolselfconfirm'] = 'Do you really want to unenrol yourself from course "{$a}"?';
 $string['unenroluser'] = 'Do you really want to unenrol "{$a->user}" from course "{$a->course}"?';
index 74a4793..c60f0ed 100644 (file)
@@ -27,7 +27,7 @@ Feature: Users can auto-enrol themself in courses where self enrolment is allowe
     And I log out
     When I follow "Course 1"
     And I press "Log in as a guest"
-    Then I should see "Guests can not access this course, please try to log in."
+    Then I should see "Guests cannot access this course. Please log in."
     And I press "Continue"
     And I should see "Log in"
 
index e5933e0..06ae06b 100644 (file)
@@ -24,7 +24,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051101;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_self';      // Full name of the plugin (used for diagnostics)
 $plugin->cron      = 600;
index 170d064..db61fe9 100644 (file)
@@ -33,59 +33,325 @@ require_once($CFG->dirroot . '/enrol/externallib.php');
 class core_enrol_externallib_testcase extends externallib_advanced_testcase {
 
     /**
-     * Test get_enrolled_users
+     * dataProvider for test_get_enrolled_users_visibility().
      */
-    public function test_get_enrolled_users() {
-        global $USER;
+    public function get_enrolled_users_visibility_provider() {
+        return array(
+            'Course without groups, default behavior (not filtering by cap, group, active)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => NOGROUPS,
+                    'withcapability' => null,
+                    'groupid' => null,
+                    'onlyactive' => false,
+                    'allowedcaps' => array(),
+                ),
+                'results' => array( // Everybody can view everybody.
+                    'user0' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user1' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user2' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user31' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'userall' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                ),
+            ),
+
+            'Course with visible groups, default behavior (not filtering by cap, group, active)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => VISIBLEGROUPS,
+                    'withcapability' => null,
+                    'groupid' => null,
+                    'onlyactive' => false,
+                    'allowedcaps' => array(),
+                ),
+                'results' => array( // Everybody can view everybody.
+                    'user0' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user1' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user2' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user31' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'userall' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                ),
+            ),
+
+            'Course with separate groups, default behavior (not filtering by cap, group, active)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => null,
+                    'groupid' => null,
+                    'onlyactive' => false,
+                    'allowedcaps' => array(),
+                ),
+                'results' => array( // Only users from own groups are visible.
+                    'user0' => array('canview' => array()), // Poor guy, cannot see anybody, himself included.
+                    'user1' => array('canview' => array('user1', 'userall')),
+                    'user2' => array('canview' => array('user2', 'user2su', 'userall')),
+                    'user31' => array('canview' => array('user31', 'user32', 'userall')),
+                    'userall' => array('canview' => array('user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                ),
+            ),
+
+            'Course with separate groups, default behavior (not filtering but having moodle/site:accessallgroups)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => VISIBLEGROUPS,
+                    'withcapability' => null,
+                    'groupid' => null,
+                    'onlyactive' => false,
+                    'allowedcaps' => array('moodle/site:accessallgroups'),
+                ),
+                'results' => array( // Everybody can view everybody.
+                    'user0' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user1' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user2' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'user31' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                    'userall' => array('canview' => array('user0', 'user1', 'user2', 'user2su', 'user31', 'user32', 'userall')),
+                ),
+            ),
+
+            'Course with separate groups, filtering onlyactive (missing moodle/course:enrolreview)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => null,
+                    'groupid' => null,
+                    'onlyactive' => true,
+                    'allowedcaps' => array(),
+                ),
+                'results' => array( // returns exception, cannot view anybody without the cap.
+                    'user2' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Review course enrolments')),
+                    'userall' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Review course enrolments')),
+                ),
+            ),
+
+            'Course with separate groups, filtering onlyactive (having moodle/course:enrolreview)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => null,
+                    'groupid' => null,
+                    'onlyactive' => true,
+                    'allowedcaps' => array('moodle/course:enrolreview'),
+                ),
+                'results' => array( // Suspended are not returned.
+                    'user2' => array('canview' => array('user2', 'userall')),
+                    'user31' => array('canview' => array('user31', 'user32', 'userall')),
+                    'userall' => array('canview' => array('user1', 'user2', 'user31', 'user32', 'userall')),
+                ),
+            ),
+
+            'Course with separate groups, filtering by groupid (not having moodle/site:accessallgroups)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => null,
+                    'groupid' => 'group2',
+                    'onlyactive' => false,
+                    'allowedcaps' => array(),
+                ),
+                'results' => array( // Only group 2 members and only for members. Exception for non-members.
+                    'user0' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Access all groups')),
+                    'user1' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Access all groups')),
+                    'user2' => array('canview' => array('user2', 'user2su', 'userall')),
+                    'userall' => array('canview' => array('user2', 'user2su', 'userall')),
+                ),
+            ),
+
+            'Course with separate groups, filtering by groupid (having moodle/site:accessallgroups)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => null,
+                    'groupid' => 'group2',
+                    'onlyactive' => false,
+                    'allowedcaps' => array('moodle/site:accessallgroups'),
+                ),
+                'results' => array( // All users with 'moodle/site:accessallgroups' can view group 2
+                    'user0' => array('canview' => array('user2', 'user2su', 'userall')),
+                    'user1' => array('canview' => array('user2', 'user2su', 'userall')),
+                    'user2' => array('canview' => array('user2', 'user2su', 'userall')),
+                    'userall' => array('canview' => array('user2', 'user2su', 'userall')),
+                ),
+            ),
+
+            'Course with separate groups, filtering by withcapability (not having moodle/role:review)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => 'moodle/course:bulkmessaging',
+                    'groupid' => null,
+                    'onlyactive' => false,
+                    'allowedcaps' => array(),
+                ),
+                'results' => array( // No user has 'moodle/role:review' so exception.
+                    'user0' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Review permissions for others')),
+                    'user1' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Review permissions for others')),
+                    'user2' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Review permissions for others')),
+                    'userall' => array('exception' => array(
+                        'type' => 'required_capability_exception',
+                        'message' => 'Review permissions for others')),
+                ),
+            ),
+
+            'Course with separate groups, filtering by withcapability (having moodle/role:review)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => 'moodle/course:bulkmessaging',
+                    'groupid' => null,
+                    'onlyactive' => false,
+                    'allowedcaps' => array('moodle/role:review'),
+                ),
+                'results' => array( // No user has withcapability, but all have 'moodle/role:review'. Empties.
+                    'user0' => array('canview' => array()),
+                    'user1' => array('canview' => array()),
+                    'user2' => array('canview' => array()),
+                    'userall' => array('canview' => array()),
+                ),
+            ),
+
+            'Course with separate groups, filtering by withcapability (having moodle/role:review)' =>
+            array(
+                'settings' => array(
+                    'coursegroupmode' => SEPARATEGROUPS,
+                    'withcapability' => 'moodle/course:bulkmessaging',
+                    'groupid' => null,
+                    'onlyactive' => false,
+                    'allowedcaps' => array('moodle/role:review', 'moodle/course:bulkmessaging'),
+                ),
+                'results' => array( // Users (previous) have withcapability, and all have 'moodle/role:review'.
+                    'user0' => array('canview' => array()),
+                    'user1' => array('canview' => array('user1')),
+                    'user2' => array('canview' => array('user2')),
+                    'userall' => array('canview' => array('user1', 'user2', 'userall')),
+                ),
+            ),
+        );
+    }
 
-        $this->resetAfterTest(true);
+    /**
+     * Verify get_enrolled_users() returned users are the expected in every situation.
+     *
+     * @dataProvider get_enrolled_users_visibility_provider
+     */
+    public function test_get_enrolled_users_visibility($settings, $results) {
 
-        $course = self::getDataGenerator()->create_course();
-        $user1 = self::getDataGenerator()->create_user();
-        $user2 = self::getDataGenerator()->create_user();
-        $user3 = self::getDataGenerator()->create_user();
-        $this->setUser($user3);
+        global $USER;
 
-        // Set the required capabilities by the external function.
-        $context = context_course::instance($course->id);
-        $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id);
-        $this->assignUserCapability('moodle/user:viewdetails', $context->id, $roleid);
+        $this->resetAfterTest();
+
+        // Create the course and the users.
+        $course = $this->getDataGenerator()->create_course(array('groupmode' => $settings['coursegroupmode']));
+        $coursecontext = context_course::instance($course->id);
+        $user0 = $this->getDataGenerator()->create_user(array('username' => 'user0'));     // A user without group.
+        $user1 = $this->getDataGenerator()->create_user(array('username' => 'user1'));     // User for group 1.
+        $user2 = $this->getDataGenerator()->create_user(array('username' => 'user2'));     // Two users for group 2.
+        $user2su = $this->getDataGenerator()->create_user(array('username' => 'user2su')); // (one suspended).
+        $user31 = $this->getDataGenerator()->create_user(array('username' => 'user31'));   // Two users for group 3.
+        $user32 = $this->getDataGenerator()->create_user(array('username' => 'user32'));   // (both enabled).
+        $userall = $this->getDataGenerator()->create_user(array('username' => 'userall')); // A user in all groups.
+
+        // Create utility array of created users, to produce better assertion messages.
+        $createdusers = array();
+        foreach (array($user0, $user1, $user2, $user2su, $user31, $user32, $userall) as $createduser) {
+            $createdusers[$createduser->id] = $createduser->username;
+        }
 
         // Enrol the users in the course.
-        $this->getDataGenerator()->enrol_user($user1->id, $course->id, $roleid, 'manual');
-        $this->getDataGenerator()->enrol_user($user2->id, $course->id, $roleid, 'manual');
-        $this->getDataGenerator()->enrol_user($user3->id, $course->id, $roleid, 'manual');
-
-        // Call the external function.
-        $enrolledusers = core_enrol_external::get_enrolled_users($course->id);
-
-        // We need to execute the return values cleaning process to simulate the web service server.
-        $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers);
-
-        // Check the result set.
-        $this->assertEquals(3, count($enrolledusers));
-        $this->assertArrayHasKey('email', $enrolledusers[0]);
-
-        // Call the function with some parameters set.
-        $enrolledusers = core_enrol_external::get_enrolled_users($course->id, array(
-            array('name' => 'limitfrom', 'value' => 2),
-            array('name' => 'limitnumber', 'value' => 1),
-            array('name' => 'userfields', 'value' => 'id')
-        ));
-
-        // We need to execute the return values cleaning process to simulate the web service server.
-        $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers);
+        $this->getDataGenerator()->enrol_user($user0->id, $course->id);
+        $this->getDataGenerator()->enrol_user($user1->id, $course->id);
+        $this->getDataGenerator()->enrol_user($user2->id, $course->id);
+        $this->getDataGenerator()->enrol_user($user2su->id, $course->id, null, 'manual', 0, 0, ENROL_USER_SUSPENDED);
+        $this->getDataGenerator()->enrol_user($user31->id, $course->id);
+        $this->getDataGenerator()->enrol_user($user32->id, $course->id);
+        $this->getDataGenerator()->enrol_user($userall->id, $course->id);
+
+        // Create 3 groups.
+        $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
+        $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
+        $group3 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
+
+        // Add the users to the groups.
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group1->id, 'userid' => $user1->id));
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $user2->id));
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $user2su->id));
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group3->id, 'userid' => $user31->id));
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group3->id, 'userid' => $user32->id));
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group1->id, 'userid' => $userall->id));
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $userall->id));
+        $this->getDataGenerator()->create_group_member(array('groupid' => $group3->id, 'userid' => $userall->id));
+
+        // Create a role to add the allowedcaps. Users will have this role assigned.
+        $roleid = $this->getDataGenerator()->create_role();
+        // Allow the specified capabilities.
+        if (!empty($settings['allowedcaps'])) {
+            foreach ($settings['allowedcaps'] as $capability) {
+                assign_capability($capability, CAP_ALLOW, $roleid, $coursecontext);
+            }
+        }
 
-        // Check the result set, we should only get the 3rd result, which is $user3.
-        $this->assertCount(1, $enrolledusers);
-        $this->assertEquals($user3->id, $enrolledusers[0]['id']);
-        $this->assertArrayHasKey('id', $enrolledusers[0]);
-        $this->assertArrayNotHasKey('email', $enrolledusers[0]);
+        // For each of the users, configure everything, perform the call, and assert results.
+        foreach ($results as $user => $expectations) {
+            // Convert canview expectations into a nice array of ids for easier handling.
+            $canview = array();
+            $exception = null;
+            // Analyse the expectations.
+            if (isset($expectations['canview'])) {
+                foreach ($expectations['canview'] as $canviewuser) {
+                    $canview[] = $createdusers[${$canviewuser}->id];
+                }
+            } else if (isset($expectations['exception'])) {
+                $exception = $expectations['exception'];
+                $this->setExpectedException($exception['type'], $exception['message']);
+            } else {
+                // Failed, only canview and exception are supported.
+                $this->markTestIncomplete('Incomplete, only canview and exception are supported');
+            }
+            // Switch to the user and assign the role.
+            $this->setUser(${$user});
+            role_assign($roleid, $USER->id, $coursecontext);
+
+            // Convert groupid to proper id.
+            $groupid = 0;
+            if (isset($settings['groupid'])) {
+                $groupid = ${$settings['groupid']}->id;
+            }
 
-        // Call without required capability.
-        $this->unassignUserCapability('moodle/course:viewparticipants', $context->id, $roleid);
-        $this->setExpectedException('moodle_exception');
-        $categories = core_enrol_external::get_enrolled_users($course->id);
+            // Call to the function.
+            $options = array(
+                array('name' => 'withcapability', 'value' => $settings['withcapability']),
+                array('name' => 'groupid', 'value' => $groupid),
+                array('name' => 'onlyactive', 'value' => $settings['onlyactive']),
+                array('name' => 'userfields', 'value' => 'id')
+            );
+            $enrolledusers = core_enrol_external::get_enrolled_users($course->id, $options);
+
+            // We need to execute the return values cleaning process to simulate the web service server.
+            $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers);
+
+            // We are only interested in ids to check visibility.
+            $viewed = array();
+            // Verify the user canview the expected users.
+            foreach ($enrolledusers as $enrolleduser) {
+                $viewed[] = $createdusers[$enrolleduser['id']];
+            }
+            // Verify viewed matches canview expectation (using canonicalize to ignore ordering).
+            $this->assertEquals($canview, $viewed, "Problem checking visible users for '{$createdusers[$USER->id]}'", 0, 1, true);
+        }
     }
 
     /**
@@ -144,96 +410,6 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase {
         }
     }
 
-    /**
-     * Test get_enrolled_users_with_capability
-     */
-    public function test_get_enrolled_users_with_capability () {
-        global $DB, $USER;
-
-        $this->resetAfterTest(true);
-
-        $user1 = $this->getDataGenerator()->create_user();
-
-        $coursedata['idnumber'] = 'idnumbercourse1';
-        $coursedata['fullname'] = 'Lightwork Course 1';
-        $coursedata['summary'] = 'Lightwork Course 1 description';
-        $coursedata['summaryformat'] = FORMAT_MOODLE;
-        $course1  = self::getDataGenerator()->create_course($coursedata);
-
-        // Create a manual enrolment record.
-        $manual_enrol_data['enrol'] = 'manual';
-        $manual_enrol_data['status'] = 0;
-        $manual_enrol_data['courseid'] = $course1->id;
-        $enrolid = $DB->insert_record('enrol', $manual_enrol_data);
-
-        // Create the users and give them capabilities in the course context.
-        $context = context_course::instance($course1->id);
-        $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3);
-
-        // Create 2 students.
-        $student1 = self::getDataGenerator()->create_user();
-        $student2 = self::getDataGenerator()->create_user();
-
-        // Give the capability to student2.
-        assign_capability('moodle/course:viewparticipants', CAP_ALLOW, 3, $context->id);
-        role_assign(3, $student2->id, $context->id);
-        accesslib_clear_all_caches_for_unit_testing();
-
-        // Enrol both the user and the students in the course.
-        $user_enrolment_data['status'] = 0;
-        $user_enrolment_data['enrolid'] = $enrolid;
-        $user_enrolment_data['userid'] = $USER->id;
-        $DB->insert_record('user_enrolments', $user_enrolment_data);
-
-        $user_enrolment_data['status'] = 0;
-        $user_enrolment_data['enrolid'] = $enrolid;
-        $user_enrolment_data['userid'] = $student1->id;
-        $DB->insert_record('user_enrolments', $user_enrolment_data);
-
-        $user_enrolment_data['status'] = 0;
-        $user_enrolment_data['enrolid'] = $enrolid;
-        $user_enrolment_data['userid'] = $student2->id;
-        $DB->insert_record('user_enrolments', $user_enrolment_data);
-
-        $params = array("coursecapabilities" => array('courseid' => $course1->id,
-            'capabilities' => array('moodle/course:viewparticipants')));
-        $options = array();
-        $result = core_enrol_external::get_enrolled_users_with_capability($params, $options);
-
-        // We need to execute the return values cleaning process to simulate the web service server.
-        $result = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_with_capability_returns(), $result);
-
-        // Check an array containing the expected user for the course capability is returned.
-        $expecteduserlist = $result[0];
-        $this->assertEquals($course1->id, $expecteduserlist['courseid']);
-        $this->assertEquals('moodle/course:viewparticipants', $expecteduserlist['capability']);
-        $this->assertEquals(2, count($expecteduserlist['users']));
-
-        // Now doing the query again with options.
-        $params = array(
-            "coursecapabilities" => array(
-                'courseid' => $course1->id,
-                'capabilities' => array('moodle/course:viewparticipants')
-            )
-        );
-        $options = array(
-            array('name' => 'limitfrom', 'value' => 1),
-            array('name' => 'limitnumber', 'value' => 1),
-            array('name' => 'userfields', 'value' => 'id')
-        );
-
-        $result = core_enrol_external::get_enrolled_users_with_capability($params, $options);
-
-        // We need to execute the return values cleaning process to simulate the web service server.
-        $result = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_with_capability_returns(), $result);
-
-        // Check an array containing the expected user for the course capability is returned.
-        $expecteduserlist = $result[0]['users'];
-        $expecteduser = reset($expecteduserlist);
-        $this->assertEquals(1, count($expecteduserlist));
-        $this->assertEquals($student2->id, $expecteduser['id']);
-    }
-
     /**
      * Test get_course_enrolment_methods
      */
@@ -299,4 +475,189 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase {
         $this->assertTrue($enrolmentmethod['status']);
         $this->assertEquals('enrol_self_get_instance_info', $enrolmentmethod['wsfunction']);
     }
+
+    public function get_enrolled_users_setup($capability) {
+        global $USER;
+
+        $this->resetAfterTest(true);
+
+        $return = new stdClass();
+
+        $return->course = self::getDataGenerator()->create_course();
+        $return->user1 = self::getDataGenerator()->create_user();
+        $return->user2 = self::getDataGenerator()->create_user();
+        $return->user3 = self::getDataGenerator()->create_user();
+        $this->setUser($return->user3);
+
+        // Set the required capabilities by the external function.
+        $return->context = context_course::instance($return->course->id);
+        $return->roleid = $this->assignUserCapability($capability, $return->context->id);
+        $this->assignUserCapability('moodle/user:viewdetails', $return->context->id, $return->roleid);
+
+        // Enrol the users in the course.
+        $this->getDataGenerator()->enrol_user($return->user1->id, $return->course->id, $return->roleid, 'manual');
+        $this->getDataGenerator()->enrol_user($return->user2->id, $return->course->id, $return->roleid, 'manual');
+        $this->getDataGenerator()->enrol_user($return->user3->id, $return->course->id, $return->roleid, 'manual');
+
+        return $return;
+    }
+
+    /**
+     * Test get_enrolled_users from core_enrol_external without additional
+     * parameters.
+     */
+    public function test_get_enrolled_users_without_parameters() {
+        $capability = 'moodle/course:viewparticipants';
+        $data = $this->get_enrolled_users_setup($capability);
+
+        // Call the external function.
+        $enrolledusers = core_enrol_external::get_enrolled_users($data->course->id);
+
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers);
+
+        // Check the result set.
+        $this->assertEquals(3, count($enrolledusers));
+        $this->assertArrayHasKey('email', $enrolledusers[0]);
+    }
+
+    /**
+     * Test get_enrolled_users from core_enrol_external with some parameters set.
+     */
+    public function test_get_enrolled_users_with_parameters() {
+        $capability = 'moodle/course:viewparticipants';
+        $data = $this->get_enrolled_users_setup($capability);
+
+        // Call the function with some parameters set.
+        $enrolledusers = core_enrol_external::get_enrolled_users($data->course->id, array(
+            array('name' => 'limitfrom', 'value' => 2),
+            array('name' => 'limitnumber', 'value' => 1),
+            array('name' => 'userfields', 'value' => 'id')
+        ));
+
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers);
+
+        // Check the result set, we should only get the 3rd result, which is $user3.
+        $this->assertCount(1, $enrolledusers);
+        $this->assertEquals($data->user3->id, $enrolledusers[0]['id']);
+        $this->assertArrayHasKey('id', $enrolledusers[0]);
+        $this->assertArrayNotHasKey('email', $enrolledusers[0]);
+    }
+
+    /**
+     * Test get_enrolled_users from core_enrol_external with capability to
+     * viewparticipants removed.
+     */
+    public function test_get_enrolled_users_without_capability() {
+        $capability = 'moodle/course:viewparticipants';
+        $data = $this->get_enrolled_users_setup($capability);
+
+        // Call without required capability.
+        $this->unassignUserCapability($capability, $data->context->id, $data->roleid);
+        $this->setExpectedException('moodle_exception');
+        $categories = core_enrol_external::get_enrolled_users($data->course->id);
+    }
+
+    public function get_enrolled_users_with_capability_setup($capability) {
+        global $USER, $DB;
+
+        $this->resetAfterTest(true);
+
+        $return = new stdClass();
+
+        // Create the course and fetch its context.
+        $return->course = self::getDataGenerator()->create_course();
+        $context = context_course::instance($return->course->id);
+
+        // Create one teacher, and two students.
+        $return->teacher = self::getDataGenerator()->create_user();
+        $return->student1 = self::getDataGenerator()->create_user();
+        $return->student2 = self::getDataGenerator()->create_user();
+
+        // Create a new student role based on the student archetype but with the capability prohibitted.
+        $fakestudentroleid = create_role('Fake student role', 'fakestudent', 'Fake student role', 'student');
+        assign_capability($capability, CAP_PROHIBIT, $fakestudentroleid, $context->id);
+
+        // Enrol all of the users in the course.
+        // * 'teacher'  is an editing teacher.
+        // * 'student1' is a standard student.
+        // * 'student2' is a student with the capability prohibitted.
+        $editingteacherroleid = $DB->get_field('role', 'id', array('shortname' => 'editingteacher'));
+        $studentroleid = $DB->get_field('role', 'id', array('shortname' => 'student'));
+        $this->getDataGenerator()->enrol_user($return->teacher->id, $return->course->id, $editingteacherroleid);
+        $this->getDataGenerator()->enrol_user($return->student1->id, $return->course->id, $studentroleid);
+        $this->getDataGenerator()->enrol_user($return->student2->id, $return->course->id, $fakestudentroleid);
+
+        // Log in as the teacher.
+        $this->setUser($return->teacher);
+
+        // Clear caches.
+        accesslib_clear_all_caches_for_unit_testing();
+
+        return $return;
+    }
+
+    /**
+     * Test get_enrolled_users_with_capability without additional paramaters.
+     */
+    public function test_get_enrolled_users_with_capability_without_parameters() {
+        $capability = 'moodle/course:viewparticipants';
+        $data = $this->get_enrolled_users_with_capability_setup($capability);
+
+        $result = core_enrol_external::get_enrolled_users_with_capability(
+            array(
+                'coursecapabilities' => array(
+                    'courseid' => $data->course->id,
+                    'capabilities' => array(
+                        $capability,
+                    ),
+                ),
+            ),
+            array()
+        );
+
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $result = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_with_capability_returns(), $result);
+
+        // Check an array containing the expected user for the course capability is returned.
+        $expecteduserlist = $result[0];
+        $this->assertEquals($data->course->id, $expecteduserlist['courseid']);
+        $this->assertEquals($capability, $expecteduserlist['capability']);
+        $this->assertEquals(2, count($expecteduserlist['users']));
+    }
+
+    /**
+     * Test get_enrolled_users_with_capability
+     */
+    public function test_get_enrolled_users_with_capability_with_parameters () {
+        $capability = 'moodle/course:viewparticipants';
+        $data = $this->get_enrolled_users_with_capability_setup($capability);
+
+        $result = core_enrol_external::get_enrolled_users_with_capability(
+            array(
+                'coursecapabilities' => array(
+                    'courseid' => $data->course->id,
+                    'capabilities' => array(
+                        $capability,
+                    ),
+                ),
+            ),
+            array(
+                array('name' => 'limitfrom', 'value' => 1),
+                array('name' => 'limitnumber', 'value' => 1),
+                array('name' => 'userfields', 'value' => 'id')
+            )
+        );
+
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $result = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_with_capability_returns(), $result);
+
+        // Check an array containing the expected user for the course capability is returned.
+        $expecteduserlist = $result[0]['users'];
+        $expecteduser = reset($expecteduserlist);
+        $this->assertEquals(1, count($expecteduserlist));
+        $this->assertEquals($data->student1->id, $expecteduser['id']);
+    }
+
 }
index 1b9cc21..f98bcbb 100644 (file)
@@ -7,6 +7,7 @@ information provided here is intended especially for developers.
   enrol_instance_deleted . Always trigger them when changing records in the
   DB table 'enrol'.
 * Constant CACHE_COURSE_CONTACTS_TTL was deleted.
+* External function core_enrol_external::get_enrolled_users now returns only the viewable participants if the course has groups enabled and no groupid is passed.
 
 === 2.9 ===
 
index ac147a1..37a4149 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'filter_activitynames'; // Full name of the plugin (used for diagnostics)
index 2bf6ecf..3431128 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'filter_algebra';  // Full name of the plugin (used for diagnostics)
index 13747c8..3316bd0 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'filter_censor';   // Full name of the plugin (used for diagnostics)
index 72211d6..9d351cc 100644 (file)
@@ -25,8 +25,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version  = 2015051100;
-$plugin->requires = 2015050500;  // Requires this Moodle version.
+$plugin->version  = 2015111600;
+$plugin->requires = 2015111000;  // Requires this Moodle version.
 $plugin->component= 'filter_data';
 
-$plugin->dependencies = array('mod_data' => 2015050500);
+$plugin->dependencies = array('mod_data' => 2015111000);
index dd6548b..1867e09 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'filter_emailprotect'; // Full name of the plugin (used for diagnostics)
index 789aa18..cb7a375 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015051100;        // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires  = 2015050500;        // Requires this Moodle version
+$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'filter_emoticon'; // Full name of the plugin (used for diagnostics)