} 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);
}
}
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, "/");
$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));
$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'),
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);
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'tool_availabilityconditions';
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)
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).
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)
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).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'tool_filetypes';
$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;
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'tool_generator';
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
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)
$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';
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'tool_installaddon';
-$plugin->version = 2015080601;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->maturity = MATURITY_STABLE;
$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';
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
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)
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).
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).
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).
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).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'tool_messageinbound';
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).
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)
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)
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)
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
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)
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)
* @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).
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)
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).
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)
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)
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);
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)
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)
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)
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)
$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';
$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';
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'availability_completion';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'availability_date';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'availability_grade';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'availability_group';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'availability_grouping';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015051100;
-$plugin->requires = 2015050500;
+$plugin->version = 2015111600;
+$plugin->requires = 2015111000;
$plugin->component = 'availability_profile';
* 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.
*/
$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);
$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();
$PAGE->set_heading($coursename);
}
+require_capability('moodle/badges:viewbadges', $PAGE->context);
+
$PAGE->set_title($title);
$output = $PAGE->get_renderer('core', 'badges');
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)
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
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)
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';
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)
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)
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)
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)
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)
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)
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)
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);
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)
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)
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)
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);
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);
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)
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)
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)
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)
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)
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)
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)
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);
$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);
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)
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)
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)
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);
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
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)
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);
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)
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)
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)
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)
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)
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)
*/
$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 & Vehicles';
$string['peopleblogs'] = 'People & Blogs';
$string['petsanimals'] = 'Pets & 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 & Tech';
$string['sports'] = 'Sports';
$string['tag_youtube:addinstance'] = 'Add a new YouTube block';
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)
return true;
}
- public function has_config() {
- return true;
- }
-
public function applicable_formats() {
return array('all' => true);
}
$this->config->numberoftags = 80;
}
- if (empty($this->config->tagtype)) {
- $this->config->tagtype = '';
- }
-
if ($this->content !== NULL) {
return $this->content;
}
}
$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', '');
}
}
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)
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);
$strblogs = get_string('blogs', 'blog');
if ($action === 'delete') {
+ // Init comment JS strings.
+ comment::init();
+
if (empty($entry->id)) {
print_error('wrongentryid', 'blog');
}
$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());
+ }
}
}
$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());
+ }
}
}
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)
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
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.
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
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
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
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
));
$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'));
+
}
/**
global $CFG;
require_once($CFG->dirroot . '/lib/cronlib.php');
- // Moodle ICal URL (moodle.org events).
- $presetwhat = 'all';
- $presettime = 'recentupcoming';
- $userid = 1;
- $authtoken = 'a8bcfee2fb868a05357f650bd65dc0699b026524';
- $subscriptionurl = 'https://moodle.org/calendar/export_execute.php'
- . '?preset_what='.$presetwhat.'&preset_time='.$presettime.'&userid='.$userid.'&authtoken='.$authtoken;
+ // ICal URL from external test repo.
+ $subscriptionurl = $this->getExternalTestFileUrl('/ical.ics');
$subscription = new stdClass();
$subscription->eventtype = 'site';
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).
*/
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
*
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);
+ }
}
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);
+ }
}
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);
+ }
}
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);
+ }
}
$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);
+ }
}
$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(
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)
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)
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).
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).
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;
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
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?
)
), '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.
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
$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) {
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)
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)
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';
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)
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;
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
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)
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;
$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}"?';
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"
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;
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);
+ }
}
/**
}
}
- /**
- * 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
*/
$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']);
+ }
+
}
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 ===
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)
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)
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)
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);
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&n