exit;
} else {
- // Inform block it's about to be deleted
- if (file_exists("$CFG->dirroot/blocks/$block->name/block_$block->name.php")) {
- $blockobject = block_instance($block->name);
- if ($blockobject) {
- $blockobject->before_delete(); //only if we can create instance, block might have been already removed
- }
- }
-
- // First delete instances and then block
- $instances = $DB->get_records('block_instances', array('blockname' => $block->name));
- if(!empty($instances)) {
- foreach($instances as $instance) {
- blocks_delete_instance($instance);
- }
- }
-
- // Delete block
- $DB->delete_records('block', array('id'=>$block->id));
-
- drop_plugin_tables($block->name, "$CFG->dirroot/blocks/$block->name/db/install.xml", false); // old obsoleted table names
- drop_plugin_tables('block_'.$block->name, "$CFG->dirroot/blocks/$block->name/db/install.xml", false);
-
- // Delete the capabilities that were defined by this block
- capabilities_cleanup('block/'.$block->name);
-
- // Remove event handlers and dequeue pending events
- events_uninstall('block/'.$block->name);
+ uninstall_plugin('block', $block->name);
$a->block = $strblockname;
$a->directory = $CFG->dirroot.'/blocks/'.$block->name;
$CFG->libdir = "$CFG->dirroot/lib";
$CFG->wwwroot = "http://localhost";
$CFG->httpswwwroot = $CFG->wwwroot;
-$CFG->dataroot = str_replace('\\', '/', dirname(dirname(dirname(dirname(__FILE__)))).'/moodledata');
-$CFG->tempdir = $CFG->dataroot.'/temp';
-$CFG->cachedir = $CFG->dataroot.'/temp';
$CFG->docroot = 'http://docs.moodle.org';
$CFG->running_installer = true;
$CFG->early_install_lang = true;
'chmod' => '2777',
'lang' => $CFG->lang,
'wwwroot' => '',
- 'dataroot' => $CFG->dataroot,
+ 'dataroot' => str_replace('\\', '/', dirname(dirname(dirname(dirname(__FILE__)))).'/moodledata'),
'dbtype' => $defaultdb,
'dbhost' => 'localhost',
'dbname' => 'moodle',
$chmod = octdec(clean_param($options['chmod'], PARAM_INT));
if ($interactive) {
cli_separator();
- cli_heading('Data directories permission'); // todo localize
+ cli_heading(get_string('datarootpermission', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', decoct($chmod));
$error = '';
do {
//We need dataroot before lang download
-if (!empty($options['dataroot'])) {
- $CFG->dataroot = $options['dataroot'];
+$dataroot = clean_param($options['dataroot'], PARAM_PATH);
+if ($dataroot !== $options['dataroot']) {
+ $a = (object)array('option' => 'dataroot', 'value' => $options['dataroot']);
+ cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
+$CFG->dataroot = $dataroot;
if ($interactive) {
cli_separator();
$i=0;
cli_error(get_string('pathserrcreatedataroot', 'install', $a));
}
}
+$CFG->tempdir = $CFG->dataroot.'/temp';
+$CFG->cachedir = $CFG->dataroot.'/cache';
// download required lang packs
if ($CFG->lang !== 'en') {
--- /dev/null
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * @package core
+ * @subpackage cli
+ * @copyright 2011 David Mudrak <david@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+define('CLI_SCRIPT', true);
+
+require(dirname(dirname(dirname(__FILE__))).'/config.php');
+require_once($CFG->libdir.'/clilib.php');
+
+list($options, $unrecognized) = cli_get_params(array('help' => false), array('h' => 'help'));
+
+if ($unrecognized) {
+ $unrecognized = implode("\n ", $unrecognized);
+ cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2);
+}
+
+if ($options['help']) {
+ $help =
+"Invalidates all Moodle internal caches
+
+Options:
+-h, --help Print out this help
+
+Example:
+\$sudo -u www-data /usr/bin/php admin/cli/purge_caches.php
+";
+
+ echo $help;
+ exit(0);
+}
+
+purge_all_caches();
+
+exit(0);
\ No newline at end of file
$defaultuserid = 0;
}
+ $restorersnewrole = $creatornewroles;
+ $restorersnewrole[0] = get_string('none');
+
$temp->add(new admin_setting_configselect('notloggedinroleid', get_string('notloggedinroleid', 'admin'),
get_string('confignotloggedinroleid', 'admin'), $defaultguestid, ($guestroles + $otherroles)));
$temp->add(new admin_setting_configselect('guestroleid', get_string('guestroleid', 'admin'),
get_string('configdefaultuserroleid', 'admin'), $defaultuserid, ($userroles + $otherroles)));
$temp->add(new admin_setting_configselect('creatornewroleid', get_string('creatornewroleid', 'admin'),
get_string('creatornewroleid_help', 'admin'), $defaultteacherid, $creatornewroles));
+ $temp->add(new admin_setting_configselect('restorernewroleid', get_string('restorernewroleid', 'admin'),
+ get_string('restorernewroleid_help', 'admin'), $defaultteacherid, $restorersnewrole));
// release memory
unset($otherroles);
unset($guestroles);
unset($userroles);
unset($creatornewroles);
+ unset($restorersnewrole);
}
$temp->add(new admin_setting_configcheckbox('autologinguests', get_string('autologinguests', 'admin'), get_string('configautologinguests', 'admin'), 0));
admin_externalpage_setup('toollangimport');
-if (!empty($CFG->skiplangupgrade)) {
- echo $OUTPUT->header();
- echo $OUTPUT->box(get_string('langimportdisabled', 'tool_langimport'));
- echo $OUTPUT->footer();
- die;
+if (empty($CFG->langotherroot)) {
+ throw new moodle_exception('missingcfglangotherroot', 'tool_langimport');
}
$mode = optional_param('mode', 0, PARAM_INT); // action
$pack = optional_param_array('pack', array(), PARAM_SAFEDIR); // pack to install
$uninstalllang = optional_param('uninstalllang', '', PARAM_LANG); // installed pack to uninstall
$confirm = optional_param('confirm', 0, PARAM_BOOL); // uninstallation confirmation
+$purgecaches = optional_param('purgecaches', false, PARAM_BOOL); // explicit caches reset
+
+if ($purgecaches) {
+ require_sesskey();
+ get_string_manager()->reset_caches();
+ redirect($PAGE->url);
+}
+
+if (!empty($CFG->skiplangupgrade)) {
+ echo $OUTPUT->header();
+ echo $OUTPUT->box(get_string('langimportdisabled', 'tool_langimport'));
+ echo $OUTPUT->single_button(new moodle_url($PAGE->url, array('purgecaches' => 1)), get_string('purgestringcaches', 'tool_langimport'));
+ echo $OUTPUT->footer();
+ die;
+}
define('INSTALLATION_OF_SELECTED_LANG', 2);
define('DELETION_OF_SELECTED_LANG', 4);
$string['install'] = 'Install selected language pack';
$string['installedlangs'] = 'Installed language packs';
$string['langimport'] = 'Language import utility';
-$string['langimportdisabled'] = 'Language import feature has been disabled. You have to update your language packs manually at the file-system level.';
+$string['langimportdisabled'] = 'Language import feature has been disabled. You have to update your language packs manually at the file-system level. Do not forget to purge string caches after you do so.';
$string['langpackinstalled'] = 'Language pack {$a} was successfully installed';
$string['langpackremoved'] = 'Language pack was uninstalled';
$string['langpackupdateskipped'] = 'Update of {$a} language pack skipped';
$string['langpackuptodate'] = 'Language pack {$a} is up-to-date';
$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['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 can not connect to download.moodle.org, we are unable to do language pack installation automatically. Please download the appropriate zip file(s) from http://download.moodle.org, copy them to your {$a} directory and unzip them manually.';
$string['uninstall'] = 'Uninstall selected language pack';
$string['uninstallconfirm'] = 'You are about to completely uninstall language pack {$a}, are you sure?';
*
* @package tool
* @subpackage unittest
- * @copyright 2009 David Mudrak <david.mudrak@gmail.com>
- * @author N.D.Freear@open.ac.uk, T.J.Hunt@open.ac.uk
+ * @copyright 2009 David Mudrak <david.mudrak@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
--- /dev/null
+This files describes API changes in /admin/tool/* - plugins,
+information provided here is intended especially for developers.
+
+
+=== 2.2 ===
+
+API changes:
+* new admin tool plugin type introduced
+
+
+How to migrate existing admin reports:
+# move all files to new /admin/tool/yourplugin/ location
+# update all links to admin tools /$CFG->admin/report/ to /$CFG->admin/tool/
+# add language pack with at least 'pluginname' string
+# update all language strings (use 'tool_yourplugin' instead of 'report_yourplugin') - use AMOS hints in commit message
+# update all capability names
+# create db/install.php migration script - delete old settings and capabilities (see converted plugins for examples)
+# grep the plugin codebase and look for any remaining 'coursereport' occurrences
+# update CSS selectors
+
+See http://docs.moodle.org/dev/Admin_tools for more details and explanation.
$string['duplicate'] = 'Duplicate';
$string['duplicatefieldname'] = 'Another field with that name exists';
$string['duplicatekeyname'] = 'Another key with that name exists';
+$string['duplicatetablename'] = 'Another table with that name exists';
$string['edit'] = 'Edit';
$string['edit_field'] = 'Edit field';
$string['edit_field_save'] = 'Save field';
$string['index'] = 'Index';
$string['indexes'] = 'Indexes';
$string['integerincorrectlength'] = 'Incorrect length for integer field';
+$string['incorrecttablename'] = 'Incorrect table name';
$string['key'] = 'Key';
$string['keys'] = 'Keys';
$string['listreservedwords'] = 'List of Reserved Words<br />(used to keep <a href="http://docs.moodle.org/en/XMLDB_reserved_words" target="_blank">XMLDB_reserved_words</a> updated)';
$string['selectonefieldkeyindex'] = 'Please select one field/key/index from the list to view the PHP code';
$string['selecttable'] = 'Select table:';
$string['table'] = 'Table';
+$string['tablenameempty'] = 'The table name cannot be empty';
$string['tables'] = 'Tables';
$string['textincorrectlength'] = 'Incorrect length for text field';
$string['unload'] = 'Unload';
get_string('restrictedusers', 'webservice'));
$mform->addHelpButton('restrictedusers', 'restrictedusers', 'webservice');
+ //can users download files
+ $mform->addElement('advcheckbox', 'downloadfiles', get_string('downloadfiles', 'webservice'));
+ $mform->setAdvanced('downloadfiles');
+ $mform->addHelpButton('downloadfiles', 'downloadfiles', 'webservice');
+
/// needed to select automatically the 'No required capability" option
$currentcapabilityexist = false;
if (empty($service->requiredcapability)) {
// If hostid hasn't been specified, try getting it using wwwroot
if (!$hostid) {
+ $hostwwwroot = trim($hostwwwroot);
+ $hostwwwroot = rtrim($hostwwwroot, '/');
+
+ // ensure the wwwroot starts with a http or https prefix
+ if (strtolower(substr($hostwwwroot, 0, 4)) != 'http') {
+ $hostwwwroot = 'http://'.$hostwwwroot;
+ }
$hostid = $DB->get_field('mnet_host', 'id', array('wwwroot' => $hostwwwroot));
}
$user->set_source_sql('SELECT u.*, c.id AS contextid, m.wwwroot AS mnethosturl
FROM {user} u
JOIN {backup_ids_temp} bi ON bi.itemid = u.id
- JOIN {context} c ON c.instanceid = u.id
+ LEFT JOIN {context} c ON c.instanceid = u.id AND c.contextlevel = ' . CONTEXT_USER . '
LEFT JOIN {mnet_host} m ON m.id = u.mnethostid
WHERE bi.backupid = ?
- AND bi.itemname = ?
- AND c.contextlevel = ?', array(
+ AND bi.itemname = ?', array(
backup_helper::is_sqlparam($this->get_backupid()),
- backup_helper::is_sqlparam('userfinal'),
- backup_helper::is_sqlparam(CONTEXT_USER)));
+ backup_helper::is_sqlparam('userfinal')));
// All the rest on information is only added if we arent
// in an anonymized backup
'backupid' => $this->get_backupid(), 'itemname' => 'userfinal'));
foreach ($rs as $record) {
$userid = $record->itemid;
- $userctxid = get_context_instance(CONTEXT_USER, $userid)->id;
+ $userctx = get_context_instance(CONTEXT_USER, $userid);
+ if (!$userctx) {
+ continue; // User has not context, sure it's a deleted user, so cannot have files
+ }
// Proceed with every user filearea
foreach ($fileareas as $filearea) {
// We don't need to specify itemid ($userid - 5th param) as far as by
// context we can get all the associated files. See MDL-22092
- backup_structure_dbops::annotate_files($this->get_backupid(), $userctxid, 'user', $filearea, null);
+ backup_structure_dbops::annotate_files($this->get_backupid(), $userctx->id, 'user', $filearea, null);
}
}
$rs->close();
$startdate->set_ui(new backup_setting_ui_dateselector($startdate, get_string('setting_course_startdate', 'backup')));
$this->add_setting($startdate);
+ $keep_enrols = new restore_course_generic_setting('keep_roles_and_enrolments', base_setting::IS_BOOLEAN, false);
+ $keep_enrols->set_ui(new backup_setting_ui_select($keep_enrols, $keep_enrols->get_name(), array(1=>get_string('yes'), 0=>get_string('no'))));
+ $keep_enrols->get_ui()->set_label(get_string('setting_keep_roles_and_enrolments', 'backup'));
+ if ($this->get_target() != backup::TARGET_CURRENT_DELETING and $this->get_target() != backup::TARGET_EXISTING_DELETING) {
+ $keep_enrols->set_value(false);
+ $keep_enrols->set_status(backup_setting::LOCKED_BY_CONFIG);
+ $keep_enrols->set_visibility(backup_setting::HIDDEN);
+ }
+ $this->add_setting($keep_enrols);
+
+ $keep_groups = new restore_course_generic_setting('keep_groups_and_groupings', base_setting::IS_BOOLEAN, false);
+ $keep_groups->set_ui(new backup_setting_ui_select($keep_groups, $keep_groups->get_name(), array(1=>get_string('yes'), 0=>get_string('no'))));
+ $keep_groups->get_ui()->set_label(get_string('setting_keep_groups_and_groupings', 'backup'));
+ if ($this->get_target() != backup::TARGET_CURRENT_DELETING and $this->get_target() != backup::TARGET_EXISTING_DELETING) {
+ $keep_groups->set_value(false);
+ $keep_groups->set_status(backup_setting::LOCKED_BY_CONFIG);
+ $keep_groups->set_visibility(backup_setting::HIDDEN);
+ }
+ $this->add_setting($keep_groups);
+
// Define overwrite_conf to decide if course configuration will be restored over existing one
$overwrite = new restore_course_overwrite_conf_setting('overwrite_conf', base_setting::IS_BOOLEAN, false);
$overwrite->set_ui(new backup_setting_ui_select($overwrite, $overwrite->get_name(), array(1=>get_string('yes'), 0=>get_string('no'))));
// Conditionally create the temp table (can exist from prechecks) and delete old stuff
$this->add_step(new restore_create_and_clean_temp_stuff('create_and_clean_temp_stuff'));
+ // Now make sure the user that is running the restore can actually access the course
+ // before executing any other step (potentially performing permission checks)
+ $this->add_step(new restore_fix_restorer_access_step('fix_restorer_access'));
+
// If we haven't preloaded information, load all the included inforef records to temp_ids table
$this->add_step(new restore_load_included_inforef_records('load_inforef_records'));
$data->groupingid = $this->get_new_parentid('grouping'); // Use new parentid
$data->groupid = $this->get_mappingid('group', $data->groupid); // Get from mappings
- $DB->insert_record('groupings_groups', $data); // No need to set this mapping (no child info nor files)
+
+ $params = array();
+ $params['groupingid'] = $data->groupingid;
+ $params['groupid'] = $data->groupid;
+
+ if (!$DB->record_exists('groupings_groups', $params)) {
+ $DB->insert_record('groupings_groups', $data); // No need to set this mapping (no child info nor files)
+ }
}
protected function after_execute() {
global $CFG, $DB;
$data = (object)$data;
- $oldid = $data->id; // We'll need this later
$fullname = $this->get_setting_value('course_fullname');
$shortname = $this->get_setting_value('course_shortname');
$data->id = $this->get_courseid();
$data->fullname = $fullname;
$data->shortname= $shortname;
- $data->idnumber = '';
+
+ $context = get_context_instance_by_id($this->task->get_contextid());
+ if (has_capability('moodle/course:changeidnumber', $context, $this->task->get_userid())) {
+ $data->idnumber = '';
+ } else {
+ unset($data->idnumber);
+ }
// Only restrict modules if original course was and target site too for new courses
$data->restrictmodules = $data->restrictmodules && !empty($CFG->restrictmodulesfor) && $CFG->restrictmodulesfor == 'all';
}
+/**
+ * Make sure the user restoring the course can actually access it.
+ */
+class restore_fix_restorer_access_step extends restore_execution_step {
+ protected function define_execution() {
+ global $CFG, $DB;
+
+ if (!$userid = $this->task->get_userid()) {
+ return;
+ }
+
+ if (empty($CFG->restorernewroleid)) {
+ // Bad luck, no fallback role for restorers specified
+ return;
+ }
+
+ $courseid = $this->get_courseid();
+ $context = context_course::instance($courseid);
+
+ if (is_enrolled($context, $userid, 'moodle/course:update', true) or is_viewing($context, $userid, 'moodle/course:update')) {
+ // Current user may access the course (admin, category manager or restored teacher enrolment usually)
+ return;
+ }
+
+ // Try to add role only - we do not need enrolment if user has moodle/course:view or is already enrolled
+ role_assign($CFG->restorernewroleid, $userid, $context);
+
+ if (is_enrolled($context, $userid, 'moodle/course:update', true) or is_viewing($context, $userid, 'moodle/course:update')) {
+ // Extra role is enough, yay!
+ return;
+ }
+
+ // The last chance is to create manual enrol if it does not exist and and try to enrol the current user,
+ // hopefully admin selected suitable $CFG->restorernewroleid ...
+ if (!enrol_is_enabled('manual')) {
+ return;
+ }
+ if (!$enrol = enrol_get_plugin('manual')) {
+ return;
+ }
+ if (!$DB->record_exists('enrol', array('enrol'=>'manual', 'courseid'=>$courseid))) {
+ $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
+ $fields = array('status'=>ENROL_INSTANCE_ENABLED, 'enrolperiod'=>$enrol->get_config('enrolperiod', 0), 'roleid'=>$enrol->get_config('roleid', 0));
+ $enrol->add_instance($course, $fields);
+ }
+
+ enrol_try_internal_enrol($courseid, $userid);
+ }
+}
+
+
/**
* This structure steps restores the filters and their configs
*/
$newitemid = $this->get_mappingid(restore_gradingform_plugin::itemid_mapping($areaname), $data->itemid);
$oldid = $data->id;
- $data->formid = $newformid;
+ $data->definitionid = $newformid;
$data->raterid = $this->get_mappingid('user', $data->raterid);
$data->itemid = $newitemid;
$restore->execute();
} catch(Exception $e) {
$restore->cleanup();
- throw new moodle_exception((string)$e);
+ throw $e;
}
} else {
$restore->save_controller();
$newuserid = $DB->insert_record('user', $user);
self::set_backup_ids_record($restoreid, 'user', $recuser->itemid, $newuserid);
// Let's create the user context and annotate it (we need it for sure at least for files)
- $newuserctxid = get_context_instance(CONTEXT_USER, $newuserid)->id;
- self::set_backup_ids_record($restoreid, 'context', $recuser->parentitemid, $newuserctxid);
-
- // Process custom fields
- if (isset($user->custom_fields)) { // if present in backup
- foreach($user->custom_fields['custom_field'] as $udata) {
- $udata = (object)$udata;
- // If the profile field has data and the profile shortname-datatype is defined in server
- if ($udata->field_data) {
- if ($field = $DB->get_record('user_info_field', array('shortname'=>$udata->field_name, 'datatype'=>$udata->field_type))) {
- /// Insert the user_custom_profile_field
- $rec = new stdClass();
- $rec->userid = $newuserid;
- $rec->fieldid = $field->id;
- $rec->data = $udata->field_data;
- $DB->insert_record('user_info_data', $rec);
+ // but for deleted users that don't have a context anymore (MDL-30192). We are done for them
+ // and nothing else (custom fields, prefs, tags, files...) will be created.
+ if (empty($user->deleted)) {
+ $newuserctxid = $user->deleted ? 0 : get_context_instance(CONTEXT_USER, $newuserid)->id;
+ self::set_backup_ids_record($restoreid, 'context', $recuser->parentitemid, $newuserctxid);
+
+ // Process custom fields
+ if (isset($user->custom_fields)) { // if present in backup
+ foreach($user->custom_fields['custom_field'] as $udata) {
+ $udata = (object)$udata;
+ // If the profile field has data and the profile shortname-datatype is defined in server
+ if ($udata->field_data) {
+ if ($field = $DB->get_record('user_info_field', array('shortname'=>$udata->field_name, 'datatype'=>$udata->field_type))) {
+ /// Insert the user_custom_profile_field
+ $rec = new stdClass();
+ $rec->userid = $newuserid;
+ $rec->fieldid = $field->id;
+ $rec->data = $udata->field_data;
+ $DB->insert_record('user_info_data', $rec);
+ }
}
}
}
- }
- // Process tags
- if (!empty($CFG->usetags) && isset($user->tags)) { // if enabled in server and present in backup
- $tags = array();
- foreach($user->tags['tag'] as $usertag) {
- $usertag = (object)$usertag;
- $tags[] = $usertag->rawname;
+ // Process tags
+ if (!empty($CFG->usetags) && isset($user->tags)) { // if enabled in server and present in backup
+ $tags = array();
+ foreach($user->tags['tag'] as $usertag) {
+ $usertag = (object)$usertag;
+ $tags[] = $usertag->rawname;
+ }
+ tag_set('user', $newuserid, $tags);
}
- tag_set('user', $newuserid, $tags);
- }
- // Process preferences
- if (isset($user->preferences)) { // if present in backup
- foreach($user->preferences['preference'] as $preference) {
- $preference = (object)$preference;
- // Prepare the record and insert it
- $preference->userid = $newuserid;
- $status = $DB->insert_record('user_preferences', $preference);
+ // Process preferences
+ if (isset($user->preferences)) { // if present in backup
+ foreach($user->preferences['preference'] as $preference) {
+ $preference = (object)$preference;
+ // Prepare the record and insert it
+ $preference->userid = $newuserid;
+ $status = $DB->insert_record('user_preferences', $preference);
+ }
}
- }
- // Create user files in pool (profile, icon, private) by context
- restore_dbops::send_files_to_pool($basepath, $restoreid, 'user', 'icon', $recuser->parentitemid, $userid);
- restore_dbops::send_files_to_pool($basepath, $restoreid, 'user', 'profile', $recuser->parentitemid, $userid);
- if ($userfiles) { // private files only if enabled in settings
- restore_dbops::send_files_to_pool($basepath, $restoreid, 'user', 'private', $recuser->parentitemid, $userid);
- }
+ // Create user files in pool (profile, icon, private) by context
+ restore_dbops::send_files_to_pool($basepath, $restoreid, 'user', 'icon', $recuser->parentitemid, $userid);
+ restore_dbops::send_files_to_pool($basepath, $restoreid, 'user', 'profile', $recuser->parentitemid, $userid);
+ if ($userfiles) { // private files only if enabled in settings
+ restore_dbops::send_files_to_pool($basepath, $restoreid, 'user', 'private', $recuser->parentitemid, $userid);
+ }
+ }
}
$rs->close();
}
// With problems of type error, throw exception, shouldn't happen if prechecks were originally
// executed, so be radical here.
if (array_key_exists('errors', $problems)) {
- throw new restore_dbops_exception('restore_problems_processing_questions', null, implode(', ', $problems));
+ throw new restore_dbops_exception('restore_problems_processing_questions', null, implode(', ', $problems['errors']));
}
}
/**
* Deletes all of the content associated with the given course (courseid)
* @param int $courseid
+ * @param array $options
* @return bool True for success
*/
- public static function delete_course_content($courseid) {
- return remove_course_contents($courseid, false);
+ public static function delete_course_content($courseid, array $options = null) {
+ return remove_course_contents($courseid, false, $options);
}
}
$html .= $this->output->heading(get_string('restoretonewcourse', 'backup'), 2, array('class'=>'header'));
$html .= $this->backup_detail_input(get_string('restoretonewcourse', 'backup'), 'radio', 'target', backup::TARGET_NEW_COURSE, array('checked'=>'checked'));
$html .= $this->backup_detail_pair(get_string('selectacategory', 'backup'), $this->render($categories));
- $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue'), 'class'=>'newcoursecontinue')));
+ $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue'))));
$html .= html_writer::end_tag('div');
$html .= html_writer::end_tag('form');
- $config = new stdClass;
- $config->title = get_string('confirmnewcoursecontinue', 'backup');
- $config->question = get_string('confirmnewcoursecontinuequestion', 'backup');
- $config->yesLabel = get_string('continue');
- $config->noLabel = get_string('cancel');
- $PAGE->requires->yui_module('moodle-backup-confirmcancel', 'M.core_backup.watch_newcoursecontinue_buttons', array($config));
}
if ($wholecourse && !empty($currentcourse)) {
throw new restore_ui_exception('restoreuifinalisedbeforeexecute');
}
if ($this->controller->get_target() == backup::TARGET_CURRENT_DELETING || $this->controller->get_target() == backup::TARGET_EXISTING_DELETING) {
- restore_dbops::delete_course_content($this->controller->get_courseid());
+ $options = array();
+ $options['keep_roles_and_enrolments'] = $this->get_setting_value('keep_roles_and_enrolments');
+ $options['keep_groups_and_groupings'] = $this->get_setting_value('keep_groups_and_groupings');
+ restore_dbops::delete_course_content($this->controller->get_courseid(), $options);
}
$this->controller->execute_plan();
$this->progress = self::PROGRESS_EXECUTED;
});
}
-M.core_backup.watch_newcoursecontinue_buttons = function(config) {
- Y.all('.newcoursecontinue').each(function(){
- this._confirmationListener = this._confirmationListener || this.on('click', function(e){
- // Prevent the default event (sumbit) from firing
- e.preventDefault();
- // Create the confirm box
- var confirm = new M.core.confirm(config);
- // If the user clicks yes
- confirm.on('complete-yes', function(e){
- // Detach the listener for the confirm box so it doesn't fire again.
- this._confirmationListener.detach();
- // Simulate the original cancel button click
- this.simulate('click');
- }, this);
- // Show the confirm box
- confirm.show();
- }, this);
- });
-}
-
}, '@VERSION@', {'requires':['base','node','node-event-simulate','moodle-enrol-notification']});
\ No newline at end of file
$args->linktext = get_string('showcomments');
$args->notoggle = true;
$args->autostart = true;
- $args->displaycancel = true;
+ $args->displaycancel = false;
$comment = new comment($args);
$comment->set_view_permission(true);
if(isset($this->config)){
$config = $this->config;
} else{
+ // TODO: Move these config settings to proper ones using component name
$config = get_config('blocks/section_links');
}
}
function before_delete() {
global $DB;
- $DB->delete_records('config_plugins', 'plugin', 'blocks/section_links');
+ // TODO: Move these config settings to proper ones using component name
+ $DB->delete_records('config_plugins', array('plugin' => 'blocks/section_links'));
}
function has_config() {
return false;
}, this);
}
+ scope.toggle_textarea(false);
CommentHelper.confirmoverlay = new Y.Overlay({
bodyContent: '<div class="comment-delete-confirm"><a href="#" id="confirmdelete-'+this.client_id+'">'+M.str.moodle.yes+'</a> <a href="#" id="canceldelete-'+this.client_id+'">'+M.str.moodle.no+'</a></div>',
visible: false
var cid = scope.client_id;
var ta = Y.one('#dlg-content-'+cid);
ta.set('value', '');
+ scope.toggle_textarea(false);
var container = Y.one('#comment-list-'+cid);
var result = scope.render([obj], true);
var newcomment = Y.Node.create(result.html);
* @return array of courses
*/
public static function get_users_courses($userid) {
- global $USER;
+ global $USER, $DB;
// Do basic automatic PARAM checks on incoming data, using params description
// If any problems are found then exceptions are thrown with helpful error messages
// current user can not access this course, sorry we can not disclose who is enrolled in this course!
continue;
}
+
if ($userid != $USER->id and !has_capability('moodle/course:viewparticipants', $context)) {
// we need capability to view participants
continue;
}
- $result[] = array('id'=>$course->id, 'shortname'=>$course->shortname, 'fullname'=>$course->fullname, 'idnumber'=>$course->idnumber,'visible'=>$course->visible);
+ list($enrolledsqlselect, $enrolledparams) = get_enrolled_sql($context);
+ $enrolledsql = "SELECT COUNT(*) FROM ($enrolledsqlselect) AS enrolleduserids";
+ $enrolledusercount = $DB->count_records_sql($enrolledsql, $enrolledparams);
+
+ $result[] = array('id'=>$course->id, 'shortname'=>$course->shortname, 'fullname'=>$course->fullname, 'idnumber'=>$course->idnumber,'visible'=>$course->visible, 'enrolledusercount'=>$enrolledusercount);
}
return $result;
'id' => new external_value(PARAM_INT, 'id of course'),
'shortname' => new external_value(PARAM_RAW, 'short name of course'),
'fullname' => new external_value(PARAM_RAW, 'long name of course'),
+ 'enrolledusercount' => new external_value(PARAM_INT, 'Number of enrolled users in this course'),
'idnumber' => new external_value(PARAM_RAW, 'id number of course'),
'visible' => new external_value(PARAM_INT, '1 means visible, 0 means hidden course'),
)
$withcapability = '';
$groupid = 0;
$onlyactive = false;
+ $userfields = array();
foreach ($options as $option) {
switch ($option['name']) {
case 'withcapability':
case 'onlyactive':
$onlyactive = !empty($option['value']);
break;
+ case 'userfields':
+ $thefields = explode(',', $option['value']);
+ foreach ($thefields as $f) {
+ $userfields[] = clean_param($f, PARAM_ALPHANUMEXT);
+ }
+ break;
}
}
continue;
}
context_instance_preload($user);
- if ($userdetails = user_get_user_details($user, $course)) {
+ if ($userdetails = user_get_user_details($user, $course, $userfields)) {
$users[] = $userdetails;
}
}
'city' => new external_value(PARAM_NOTAGS, 'Home city of the user', VALUE_OPTIONAL),
'url' => new external_value(PARAM_URL, 'URL of the user', VALUE_OPTIONAL),
'country' => new external_value(PARAM_ALPHA, 'Home country code of the user, such as AU or CZ', VALUE_OPTIONAL),
- 'profileimageurlsmall' => new external_value(PARAM_URL, 'User image profile URL - small version'),
- 'profileimageurl' => new external_value(PARAM_URL, 'User image profile URL - big version'),
+ 'profileimageurlsmall' => new external_value(PARAM_URL, 'User image profile URL - small version', VALUE_OPTIONAL),
+ 'profileimageurl' => new external_value(PARAM_URL, 'User image profile URL - big version', VALUE_OPTIONAL),
'customfields' => new external_multiple_structure(
new external_single_structure(
array(
* Process the group tag. This defines a Moodle course.
* @param string $tagconents The raw contents of the XML element
*/
-function process_group_tag($tagcontents){
+function process_group_tag($tagcontents) {
global $DB;
// Get configs
// Process tag contents
$group = new stdClass();
- if(preg_match('{<sourcedid>.*?<id>(.+?)</id>.*?</sourcedid>}is', $tagcontents, $matches)){
+ if (preg_match('{<sourcedid>.*?<id>(.+?)</id>.*?</sourcedid>}is', $tagcontents, $matches)) {
$group->coursecode = trim($matches[1]);
}
- if(preg_match('{<description>.*?<short>(.*?)</short>.*?</description>}is', $tagcontents, $matches)){
+ if (preg_match('{<description>.*?<short>(.*?)</short>.*?</description>}is', $tagcontents, $matches)) {
$group->description = trim($matches[1]);
}
- if(preg_match('{<org>.*?<orgunit>(.*?)</orgunit>.*?</org>}is', $tagcontents, $matches)){
+ if (preg_match('{<org>.*?<orgunit>(.*?)</orgunit>.*?</org>}is', $tagcontents, $matches)) {
$group->category = trim($matches[1]);
}
$recstatus = ($this->get_recstatus($tagcontents, 'group'));
//echo "<p>get_recstatus for this group returned $recstatus</p>";
- if(!(strlen($group->coursecode)>0)){
+ if (!(strlen($group->coursecode)>0)) {
$this->log_line('Error at line '.$line.': Unable to find course code in \'group\' element.');
- }else{
+ } else {
// First, truncate the course code if desired
- if(intval($truncatecoursecodes)>0){
+ if (intval($truncatecoursecodes)>0) {
$group->coursecode = ($truncatecoursecodes > 0)
? substr($group->coursecode, 0, intval($truncatecoursecodes))
: $group->coursecode;
$group->coursecode = array($group->coursecode);
// Third, check if the course(s) exist
- foreach($group->coursecode as $coursecode){
+ foreach ($group->coursecode as $coursecode) {
$coursecode = trim($coursecode);
- if(!$DB->get_field('course', 'id', array('idnumber'=>$coursecode))) {
- if(!$createnewcourses) {
- $this->log_line("Course $coursecode not found in Moodle's course idnumbers.");
- } else {
- // Create the (hidden) course(s) if not found
- $course = new stdClass();
- $course->fullname = $group->description;
- $course->shortname = $coursecode;
- $course->idnumber = $coursecode;
- $course->format = 'topics';
- $course->visible = 0;
- // Insert default names for teachers/students, from the current language
- $site = get_site();
-
- // Handle course categorisation (taken from the group.org.orgunit field if present)
- if(strlen($group->category)>0){
- // If the category is defined and exists in Moodle, we want to store it in that one
- if($catid = $DB->get_field('course_categories', 'id', array('name'=>$group->category))){
- $course->category = $catid;
- } elseif($createnewcategories) {
- // Else if we're allowed to create new categories, let's create this one
- $newcat = new stdClass();
- $newcat->name = $group->category;
- $newcat->visible = 0;
- $catid = $DB->insert_record('course_categories', $newcat);
- $course->category = $catid;
- $this->log_line("Created new (hidden) category, #$catid: $newcat->name");
- }else{
- // If not found and not allowed to create, stick with default
- $this->log_line('Category '.$group->category.' not found in Moodle database, so using default category instead.');
+ if (!$DB->get_field('course', 'id', array('idnumber'=>$coursecode))) {
+ if (!$createnewcourses) {
+ $this->log_line("Course $coursecode not found in Moodle's course idnumbers.");
+ } else {
+ // Create the (hidden) course(s) if not found
+ $courseconfig = get_config('moodlecourse'); // Load Moodle Course shell defaults
+ $course = new stdClass();
+ $course->fullname = $group->description;
+ $course->shortname = $coursecode;
+ $course->idnumber = $coursecode;
+ $course->format = $courseconfig->format;
+ $course->visible = $courseconfig->visible;
+ $course->numsections = $courseconfig->numsections;
+ $course->hiddensections = $courseconfig->hiddensections;
+ $course->newsitems = $courseconfig->newsitems;
+ $course->showgrades = $courseconfig->showgrades;
+ $course->showreports = $courseconfig->showreports;
+ $course->maxbytes = $courseconfig->maxbytes;
+ $course->groupmode = $courseconfig->groupmode;
+ $course->groupmodeforce = $courseconfig->groupmodeforce;
+ $course->enablecompletion = $courseconfig->enablecompletion;
+ $course->completionstartonenrol = $courseconfig->completionstartonenrol;
+ // Insert default names for teachers/students, from the current language
+
+ // Handle course categorisation (taken from the group.org.orgunit field if present)
+ if (strlen($group->category)>0) {
+ // If the category is defined and exists in Moodle, we want to store it in that one
+ if ($catid = $DB->get_field('course_categories', 'id', array('name'=>$group->category))) {
+ $course->category = $catid;
+ } else if ($createnewcategories) {
+ // Else if we're allowed to create new categories, let's create this one
+ $newcat = new stdClass();
+ $newcat->name = $group->category;
+ $newcat->visible = 0;
+ $catid = $DB->insert_record('course_categories', $newcat);
+ $course->category = $catid;
+ $this->log_line("Created new (hidden) category, #$catid: $newcat->name");
+ } else {
+ // If not found and not allowed to create, stick with default
+ $this->log_line('Category '.$group->category.' not found in Moodle database, so using default category instead.');
+ $course->category = 1;
+ }
+ } else {
$course->category = 1;
}
- }else{
- $course->category = 1;
- }
- $course->timecreated = time();
- $course->startdate = time();
- $course->numsections = 1;
- // Choose a sort order that puts us at the start of the list!
- $course->sortorder = 0;
+ $course->timecreated = time();
+ $course->startdate = time();
+ // Choose a sort order that puts us at the start of the list!
+ $course->sortorder = 0;
- $courseid = $DB->insert_record('course', $course);
+ $courseid = $DB->insert_record('course', $course);
- // Setup the blocks
- $course = $DB->get_record('course', array('id' => $courseid));
- blocks_add_default_course_blocks($course);
+ // Setup the blocks
+ $course = $DB->get_record('course', array('id' => $courseid));
+ blocks_add_default_course_blocks($course);
- $section = new stdClass();
- $section->course = $course->id; // Create a default section.
- $section->section = 0;
- $section->summaryformat = FORMAT_HTML;
- $section->id = $DB->insert_record("course_sections", $section);
+ $section = new stdClass();
+ $section->course = $course->id; // Create a default section.
+ $section->section = 0;
+ $section->summaryformat = FORMAT_HTML;
+ $section->id = $DB->insert_record("course_sections", $section);
- add_to_log(SITEID, "course", "new", "view.php?id=$course->id", "$course->fullname (ID $course->id)");
+ add_to_log(SITEID, "course", "new", "view.php?id=$course->id", "$course->fullname (ID $course->id)");
- $this->log_line("Created course $coursecode in Moodle (Moodle ID is $course->id)");
- }
- }elseif($recstatus==3 && ($courseid = $DB->get_field('course', 'id', array('idnumber'=>$coursecode)))){
+ $this->log_line("Created course $coursecode in Moodle (Moodle ID is $course->id)");
+ }
+ } else if ($recstatus==3 && ($courseid = $DB->get_field('course', 'id', array('idnumber'=>$coursecode)))) {
// If course does exist, but recstatus==3 (delete), then set the course as hidden
$DB->set_field('course', 'visible', '0', array('id'=>$courseid));
}
///===========================
/// utility functions
+/**
+ * Get mimetype of given url, useful for # alternative urls.
+ *
+ * @private
+ * @param string $url
+ * @return string $mimetype
+ */
+function filter_mediaplugin_get_mimetype($url) {
+ $matches = null;
+ if (preg_match("|^(.*)/[a-z]*file.php(\?file=)?(/[^&\?#]*)|", $url, $matches)) {
+ // remove the special moodle file serving hacks so that the *file.php is ignored
+ $url = $matches[1].$matches[3];
+ } else {
+ $url = preg_replace('/[#\?].*$/', '', $url);
+ }
+
+ $mimetype = mimeinfo('type', $url);
+
+ return $mimetype;
+}
/**
* Parse list of alternative URLs
* @param string $url urls separated with '#', size specified as ?d=640x480 or #d=640x480
+ * @param int $defaultwidth
+ * @param int $defaultheight
* @return array (urls, width, height)
*/
function filter_mediaplugin_parse_alternatives($url, $defaultwidth = 0, $defaultheight = 0) {
$fallbacklink = null;
foreach ($urls as $url) {
- $mimetype = mimeinfo('type', $url);
+ $mimetype = filter_mediaplugin_get_mimetype($url);
if (strpos($mimetype, 'audio/') !== 0) {
continue;
}
$fallbacklink = null;
foreach ($urls as $url) {
- $mimetype = mimeinfo('type', $url);
+ $mimetype = filter_mediaplugin_get_mimetype($url);
if (strpos($mimetype, 'video/') !== 0) {
continue;
}
$sources = array();
foreach ($urls as $url) {
- $mimetype = mimeinfo('type', $url);
+ $mimetype = filter_mediaplugin_get_mimetype($url);
if (strpos($mimetype, 'video/') !== 0) {
continue;
}
}
if ($flashurl === null) {
- $flashurl = str_replace('&', '&', $url);
+ $flashurl = $url;
}
}
if (!$sources) {
// note: no need to print "this is flv link" because it is printed automatically if JS or Flash not available
$output = html_writer::tag('span', $printlink, array('id'=>$id, 'class'=>'mediaplugin mediaplugin_flv'));
- $output .= html_writer::script(js_writer::function_call('M.util.add_video_player', array($id, $flashurl, $width, $height, $autosize))); // we can not use standard JS init because this may be cached
+ $output .= html_writer::script(js_writer::function_call('M.util.add_video_player', array($id, rawurlencode($flashurl), $width, $height, $autosize))); // we can not use standard JS init because this may be cached
return $output;
}
$mpsize = 'width="'.$link[4].'" height="'.($link[5] + 64).'"';
$autosize = 'false';
}
- $mimetype = mimeinfo('type', $url);
+ $mimetype = filter_mediaplugin_get_mimetype($url);
} else {
$size = 'width="'.$link[4].'" height="'.($link[5]+15).'"';
}
- $mimetype = mimeinfo('type', $url);
+ $mimetype = filter_mediaplugin_get_mimetype($url);
// this is the safest fallback for incomplete or missing browser support for this format
return <<<OET
--- /dev/null
+This file describes API changes in core filter API and plugins,
+information provided here is intended especially for developers.
+
+=== 2.2 ===
+
+* legacy filters and legacy locations have been deprecated, so any
+ old filter should be updated to use the new moodle_text_filter,
+ and any filter bundled under mod/xxxx directories be moved to
+ /filter/xxxx (MDL-29995). They will stop working completely in
+ Moodle 2.3 (MDL-29996). See the glossary or data filters for
+ examples of legacy module filters and locations already updated.
$options->smiley = false;
$options->filter = false;
$options->noclean = false;
+ $options->para = false;
$grade->feedback = format_text($grade->feedback, $grade->feedbackformat, $options);
}
$grade->feedbackformat = FORMAT_HTML;
} elseif ($item->is_external_item()) {
$grademax = format_float($item->grademax, $item->get_decimals());
} else {
- $grademax = '<input type="text" size="4" id="grademax'.$item->id.'" name="grademax_'.$item->id.'" value="'.format_float($item->grademax, $item->get_decimals()).'" />';
+ $grademax = '<input type="text" size="6" id="grademax'.$item->id.'" name="grademax_'.$item->id.'" value="'.format_float($item->grademax, $item->get_decimals()).'" />';
}
$itemcell = clone($this->itemcell);
$PAGE->set_title(get_string('definerubric', 'gradingform_rubric'));
$PAGE->set_heading(get_string('definerubric', 'gradingform_rubric'));
-$mform = new gradingform_rubric_editrubric(null, array('areaid' => $areaid, 'context' => $context, 'allowdraft' => !$controller->has_active_instances()));
-$data = $controller->get_definition_for_editing();
+$mform = new gradingform_rubric_editrubric(null, array('areaid' => $areaid, 'context' => $context, 'allowdraft' => !$controller->has_active_instances()), 'post', '', array('class' => 'gradingform_rubric_editform'));
+$data = $controller->get_definition_for_editing(true);
$returnurl = optional_param('returnurl', $manager->get_management_url(), PARAM_LOCALURL);
$data->returnurl = $returnurl;
$mform->set_data($data);
// rubric completion status
$choices = array();
- $choices[gradingform_controller::DEFINITION_STATUS_DRAFT] = get_string('statusdraft', 'grading');
- $choices[gradingform_controller::DEFINITION_STATUS_READY] = get_string('statusready', 'grading');
+ $choices[gradingform_controller::DEFINITION_STATUS_DRAFT] = html_writer::tag('span', get_string('statusdraft', 'core_grading'), array('class' => 'status draft'));
+ $choices[gradingform_controller::DEFINITION_STATUS_READY] = html_writer::tag('span', get_string('statusready', 'core_grading'), array('class' => 'status ready'));
$form->addElement('select', 'status', get_string('rubricstatus', 'gradingform_rubric'), $choices)->freeze();
// rubric editor
$form->closeHeaderBefore('buttonar');
}
+ /**
+ * Setup the form depending on current values. This method is called after definition(),
+ * data submission and set_data().
+ * All form setup that is dependent on form values should go in here.
+ *
+ * We remove the element status if there is no current status (i.e. rubric is only being created)
+ * so the users do not get confused
+ */
+ public function definition_after_data() {
+ $form = $this->_form;
+ $el = $form->getElement('status');
+ if (!$el->getValue()) {
+ $form->removeElement('status');
+ } else {
+ $vals = array_values($el->getValue());
+ if ($vals[0] == gradingform_controller::DEFINITION_STATUS_READY) {
+ $this->findButton('saverubric')->setValue(get_string('save', 'gradingform_rubric'));
+ }
+ }
+ }
+
/**
* Form vlidation.
* If there are errors return array of errors ("fieldname"=>"error message"),
}
M.gradingform_rubriceditor.disablealleditors()
Y.on('click', M.gradingform_rubriceditor.clickanywhere, 'body', null)
+ YUI().use('event-touch', function (Y) {
+ Y.one('body').on('touchstart', M.gradingform_rubriceditor.clickanywhere);
+ Y.one('body').on('touchend', M.gradingform_rubriceditor.clickanywhere);
+ })
M.gradingform_rubriceditor.addhandlers()
};
// it switches this element to edit mode. If rubric button is clicked it does nothing so the 'buttonclick'
// function is invoked
M.gradingform_rubriceditor.clickanywhere = function(e) {
+ if (e.type == 'touchstart') return
var el = e.target
// if clicked on button - disablecurrenteditor, continue
if (el.get('tagName') == 'INPUT' && el.get('type') == 'submit') {
el = el.get('parentNode')
}
if (el) {
- if (el.one('textarea').getStyle('display') == 'none') {
+ if (el.one('textarea').hasClass('hiddenelement')) {
M.gradingform_rubriceditor.disablealleditors()
M.gradingform_rubriceditor.editmode(el, true, focustb)
}
// switch the criterion description or level to edit mode or switch back
M.gradingform_rubriceditor.editmode = function(el, editmode, focustb) {
var ta = el.one('textarea')
- if (!editmode && ta.getStyle('display') == 'none') return;
- if (editmode && ta.getStyle('display') == 'block') return;
- var pseudotablink = '<a href="#" class="pseudotablink"> </a>',
+ if (!editmode && ta.hasClass('hiddenelement')) return;
+ if (editmode && !ta.hasClass('hiddenelement')) return;
+ var pseudotablink = '<input type="text" size="1" class="pseudotablink"/>',
taplain = ta.get('parentNode').one('.plainvalue'),
tbplain = null,
- tb = el.one('input[type=text]')
+ tb = el.one('.score input[type=text]')
// add 'plainvalue' next to textarea for description/definition and next to input text field for score (if applicable)
if (!taplain) {
- ta.get('parentNode').append('<div class="plainvalue"><span class="textvalue"> </span>'+pseudotablink+'</div>')
+ ta.get('parentNode').append('<div class="plainvalue">'+pseudotablink+'<span class="textvalue"> </span></div>')
taplain = ta.get('parentNode').one('.plainvalue')
taplain.one('.pseudotablink').on('focus', M.gradingform_rubriceditor.clickanywhere)
if (tb) {
- tb.get('parentNode').append('<div class="plainvalue"><span class="textvalue"> </span>'+pseudotablink+'</div>')
+ tb.get('parentNode').append('<span class="plainvalue">'+pseudotablink+'<span class="textvalue"> </span></span>')
tbplain = tb.get('parentNode').one('.plainvalue')
tbplain.one('.pseudotablink').on('focus', M.gradingform_rubriceditor.clickanywhere)
}
}
taplain.one('.textvalue').set('innerHTML', value)
if (tb) tbplain.one('.textvalue').set('innerHTML', tb.get('value'))
+ // hide/display textarea, textbox and plaintexts
+ taplain.removeClass('hiddenelement')
+ ta.addClass('hiddenelement')
+ if (tb) {
+ tbplain.removeClass('hiddenelement')
+ tb.addClass('hiddenelement')
+ }
} else {
// if we need to show the input fields, set the width/height for textarea so it fills the cell
- var width = parseFloat(ta.get('parentNode').getComputedStyle('width')),
- height
- if (el.hasClass('level')) height = parseFloat(el.getComputedStyle('height')) - parseFloat(el.one('.score').getComputedStyle('height'))
- else height = parseFloat(ta.get('parentNode').getComputedStyle('height'))
- ta.setStyle('width', Math.max(width,50)+'px').setStyle('height', Math.max(height,20)+'px')
- }
- // hide/display textarea, textbox and plaintexts
- taplain.setStyle('display', editmode ? 'none' : 'block')
- ta.setStyle('display', editmode ? 'block' : 'none')
- if (tb) {
- tbplain.setStyle('display', editmode ? 'none' : 'inline-block')
- tb.setStyle('display', editmode ? 'inline-block' : 'none')
+ try {
+ var width = parseFloat(ta.get('parentNode').getComputedStyle('width')),
+ height
+ if (el.hasClass('level')) height = parseFloat(el.getComputedStyle('height')) - parseFloat(el.one('.score').getComputedStyle('height'))
+ else height = parseFloat(ta.get('parentNode').getComputedStyle('height'))
+ ta.setStyle('width', Math.max(width,50)+'px')
+ ta.setStyle('height', Math.max(height,20)+'px')
+ }
+ catch (err) {
+ // this browser do not support 'computedStyle', leave the default size of the textbox
+ }
+ // hide/display textarea, textbox and plaintexts
+ taplain.addClass('hiddenelement')
+ ta.removeClass('hiddenelement')
+ if (tb) {
+ tbplain.addClass('hiddenelement')
+ tb.removeClass('hiddenelement')
+ }
}
// focus the proper input field in edit mode
if (editmode) { if (tb && focustb) tb.focus(); else ta.focus() }
$string['regradeoption1'] = 'Mark for regrade';
$string['restoredfromdraft'] = 'NOTE: The last attempt to grade this person was not saved properly so draft grades have been restored. If you want to cancel these changes use the \'Cancel\' button below.';
$string['rubric'] = 'Rubric';
+$string['rubricmapping'] = 'Score to grade mapping rules';
+$string['rubricmappingexplained'] = 'The minimum possible score for this rubric is <b>{$a->minscore} points</b> and it will be converted to the minimum grade available in this module (which is zero unless the scale is used).
+ The maximum score <b>{$a->maxscore} points</b> will be converted to the maximum grade.<br />
+ Intermediate scores will be converted respectively and rounded to the nearest available grade.<br />
+ If a scale is used instead of a grade, the score will be converted to the scale elements as if they were consecutive integers.';
$string['rubricnotcompleted'] = 'Please choose something for each criterion';
$string['rubricoptions'] = 'Rubric options';
$string['rubricstatus'] = 'Current rubric status';
+$string['save'] = 'Save';
$string['saverubric'] = 'Save rubric and make it ready';
$string['saverubricdraft'] = 'Save as draft';
-$string['scorepostfix'] = '{$a} points';
+$string['scorepostfix'] = '{$a}points';
$string['showdescriptionstudent'] = 'Display rubric description to those being graded';
$string['showdescriptionteacher'] = 'Display rubric description during evaluation';
$string['showremarksstudent'] = 'Show remarks to those being graded';
$string['showscoreteacher'] = 'Display points for each level during evaluation';
$string['sortlevelsasc'] = 'Sort order for levels:';
$string['sortlevelsasc0'] = 'Descending by number of points';
-$string['sortlevelsasc1'] = 'Ascending by number of points';
-$string['statusdraft'] = 'Draft';
-$string['statusready'] = 'Ready';
\ No newline at end of file
+$string['sortlevelsasc1'] = 'Ascending by number of points';
\ No newline at end of file
/**
* Converts the current definition into an object suitable for the editor form's set_data()
*
+ * @param boolean $addemptycriterion whether to add an empty criterion if the rubric is completely empty (just being created)
* @return stdClass
*/
- public function get_definition_for_editing() {
+ public function get_definition_for_editing($addemptycriterion = false) {
$definition = $this->get_definition();
$properties = new stdClass();
$properties->rubric = array('criteria' => array(), 'options' => $this->get_options());
if (!empty($definition->rubric_criteria)) {
$properties->rubric['criteria'] = $definition->rubric_criteria;
+ } else if (!$definition && $addemptycriterion) {
+ $properties->rubric['criteria'] = array('addcriterion' => 1);
}
return $properties;
$output = $this->get_renderer($page);
$criteria = $this->definition->rubric_criteria;
$options = $this->get_options();
- $rubric = $output->display_rubric($criteria, $options, self::DISPLAY_PREVIEW, 'rubric');
+ $rubric = $output->display_rubric_mapping_explained($this->get_min_max_score());
+ $rubric .= $output->display_rubric($criteria, $options, self::DISPLAY_PREVIEW, 'rubric');
return $rubric;
}
return array($subsql, $params);
}
+
+ /**
+ * Calculates and returns the possible minimum and maximum score (in points) for this rubric
+ *
+ * @return array
+ */
+ public function get_min_max_score() {
+ if (!$this->is_form_available()) {
+ return null;
+ }
+ $returnvalue = array('minscore' => 0, 'maxscore' => 0);
+ foreach ($this->get_definition()->rubric_criteria as $id => $criterion) {
+ $scores = array();
+ foreach ($criterion['levels'] as $level) {
+ $scores[] = $level['score'];
+ }
+ sort($scores);
+ $returnvalue['minscore'] += $scores[0];
+ $returnvalue['maxscore'] += $scores[sizeof($scores)-1];
+ }
+ return $returnvalue;
+ }
}
/**
global $DB, $USER;
$grade = $this->get_rubric_filling();
- $minscore = 0;
- $maxscore = 0;
- foreach ($this->get_controller()->get_definition()->rubric_criteria as $id => $criterion) {
- $scores = array();
- foreach ($criterion['levels'] as $level) {
- $scores[] = $level['score'];
- }
- sort($scores);
- $minscore += $scores[0];
- $maxscore += $scores[sizeof($scores)-1];
- }
-
- if ($maxscore <= $minscore) {
+ if (!($scores = $this->get_controller()->get_min_max_score()) || $scores['maxscore'] <= $scores['minscore']) {
return -1;
}
foreach ($grade['criteria'] as $id => $record) {
$curscore += $this->get_controller()->get_definition()->rubric_criteria[$id]['levels'][$record['levelid']]['score'];
}
- return round(($curscore-$minscore)/($maxscore-$minscore)*($maxgrade-$mingrade), 0) + $mingrade; // TODO mapping
+ return round(($curscore-$scores['minscore'])/($scores['maxscore']-$scores['minscore'])*($maxgrade-$mingrade), 0) + $mingrade;
}
/**
$leveltemplate .= html_writer::start_tag('div', array('class' => 'level-wrapper'));
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FULL) {
$definition = html_writer::tag('textarea', htmlspecialchars($level['definition']), array('name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][definition]', 'cols' => '10', 'rows' => '4'));
- $score = html_writer::empty_tag('input', array('type' => 'text', 'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][score]', 'size' => '4', 'value' => $level['score']));
+ $score = html_writer::empty_tag('input', array('type' => 'text', 'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][score]', 'size' => '3', 'value' => $level['score']));
} else {
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FROZEN) {
$leveltemplate .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][definition]', 'value' => $level['definition']));
if ($mode == gradingform_rubric_controller::DISPLAY_EVAL_FROZEN && $level['checked']) {
$leveltemplate .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => '{NAME}[criteria][{CRITERION-id}][levelid]', 'value' => $level['id']));
}
- $score = html_writer::tag('span', $score, array('id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-score'));
+ $score = html_writer::tag('span', $score, array('id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-score', 'class' => 'scorevalue'));
$definitionclass = 'definition';
if (isset($level['error_definition'])) {
$definitionclass .= ' error';
$html .= html_writer::end_tag('div');
return $html;
}
+
+ /**
+ * Generates and returns HTML code to display information box about how rubric score is converted to the grade
+ *
+ * @param array $scores
+ * @return string
+ */
+ public function display_rubric_mapping_explained($scores) {
+ $html = '';
+ if (!$scores) {
+ return $html;
+ }
+ $html .= $this->box(
+ html_writer::tag('h4', get_string('rubricmapping', 'gradingform_rubric')).
+ html_writer::tag('div', get_string('rubricmappingexplained', 'gradingform_rubric', (object)$scores))
+ , 'generalbox rubricmappingexplained');
+ return $html;
+ }
}
// when adding new criterion copy the number of levels and their scores from the last criterion
if (!empty($value['criteria'][$lastid]['levels'])) {
foreach ($value['criteria'][$lastid]['levels'] as $lastlevel) {
- $criterion['levels']['NEWID'+($i++)]['score'] = $lastlevel['score'];
+ $criterion['levels']['NEWID'.($i++)]['score'] = $lastlevel['score'];
}
} else {
- $criterion['levels']['NEWID'+($i++)]['score'] = 0;
+ $criterion['levels']['NEWID'.($i++)]['score'] = 0;
}
// add more levels so there are at least 3 in the new criterion. Increment by 1 the score for each next one
- for ($i; $i<3; $i++) {
- $criterion['levels']['NEWID'+$i]['score'] = $criterion['levels']['NEWID'+($i-1)]['score'] + 1;
+ for ($i=$i; $i<3; $i++) {
+ $criterion['levels']['NEWID'.$i]['score'] = $criterion['levels']['NEWID'.($i-1)]['score'] + 1;
}
// set other necessary fields (definition) for the levels in the new criterion
foreach (array_keys($criterion['levels']) as $i) {
*/
+.gradingform_rubric_editform .status {font-weight:normal;text-transform:uppercase;font-size:60%;padding:0.25em;border:1px solid #EEE;}
+.gradingform_rubric_editform .status.ready {background-color:#e7f1c3;border-color:#AAEEAA;}
+.gradingform_rubric_editform .status.draft {background-color:#f3f2aa;border-color:#EEEE22;}
+
.gradingform_rubric.editor .criterion .controls,
.gradingform_rubric .criterion .description,
.gradingform_rubric .criterion .levels,
.gradingform_rubric .plainvalue.empty {font-style: italic; color: #AAA;}
.gradingform_rubric.editor .criterion .levels .level .delete {position:absolute;right:0;bottom:0;}
-.gradingform_rubric .criterion .levels .level .score {font-style:italic;color:#575;font-weight: bold;margin-top:5px;}
+.gradingform_rubric .criterion .levels .level .score {font-style:italic;color:#575;font-weight: bold;margin-top:5px;white-space:nowrap;}
+.gradingform_rubric .criterion .levels .level .score .scorevalue {padding-right:5px;}
/* Make invisible the buttons 'Move up' for the first criterion and 'Move down' for the last, because those buttons will make no change */
.gradingform_rubric.editor .criterion.first .controls .moveup input,
.gradingform_rubric .criterion .levels .level .definition.error,
.gradingform_rubric .criterion .levels .level .score.error {background:#FFDDDD;}
-/**
- *
- */
-
.gradingform_rubric-regrade {padding:10px;background:#FFDDDD;border:1px solid #F00;margin-bottom:10px;}
.gradingform_rubric-restored {padding:10px;background:#FFFFDD;border:1px solid #FF0;margin-bottom:10px;}
.gradingform_rubric-error {color:red;font-weight:bold;}
+
+/* special classes for elements created by rubriceditor.js */
+.gradingform_rubric.editor .hiddenelement {display:none;}
+.gradingform_rubric.editor .pseudotablink {background-color:transparent;border:0 solid;height:1px;width:1px;color:transparent;padding:0;margin:0;position:relative;float:right;}
\ No newline at end of file
// Then left join with grade_grades and look for rows with null final grade (which includes grade items with no grade_grade)
$sql = "SELECT gi.id, COUNT(u.id) AS count
FROM {grade_items} gi
- JOIN {user} u
+ JOIN {user} u ON u.deleted = 0
JOIN ($enrolledsql) je ON je.id = u.id
JOIN (
SELECT DISTINCT ra.userid
AND ra.contextid " . get_related_contexts_string($this->context) . "
) rainner ON rainner.userid = u.id
LEFT JOIN {grade_grades} gg
- ON (gg.itemid = gi.id AND gg.userid = u.id AND gg.finalgrade IS NOT NULL AND gg.hidden = 0)
+ ON (gg.itemid = gi.id AND gg.userid = u.id AND gg.finalgrade IS NOT NULL AND gg.hidden = 0)
$groupsql
WHERE gi.courseid = :courseid
- AND u.deleted = 0
AND gg.finalgrade IS NULL
$groupwheresql
GROUP BY gi.id";
/**
* Delete grouping
- * @param int $groupingid
+ * @param int $groupingorid
* @return bool success
*/
function groups_delete_grouping($groupingorid) {
events_trigger('groups_members_removed', $eventdata);
if ($showfeedback) {
- echo $OUTPUT->notification(get_string('deleted').' groups_members');
+ echo $OUTPUT->notification(get_string('deleted').' - '.get_string('groupmembers', 'group'), 'notifysuccess');
}
return true;
$groupssql = "SELECT id FROM {groups} g WHERE g.courseid = ?";
$DB->delete_records_select('groupings_groups', "groupid IN ($groupssql)", array($courseid));
- // Delete all files associated with groupings for this course
- $context = get_context_instance(CONTEXT_COURSE, $courseid);
-
//trigger groups events
events_trigger('groups_groupings_groups_removed', $courseid);
- if ($showfeedback) {
- echo $OUTPUT->notification(get_string('deleted').' groupings_groups');
- }
+ // no need to show any feedback here - we delete usually first groupings and then groups
return true;
}
$DB->delete_records('groups', array('courseid'=>$courseid));
- //trigger groups events
+ // trigger groups events
events_trigger('groups_groups_deleted', $courseid);
if ($showfeedback) {
- echo $OUTPUT->notification(get_string('deleted').' groups');
+ echo $OUTPUT->notification(get_string('deleted').' - '.get_string('groups', 'group'), 'notifysuccess');
}
return true;
function groups_delete_groupings($courseid, $showfeedback=false) {
global $DB, $OUTPUT;
- $context = get_context_instance(CONTEXT_COURSE, $courseid);
- $fs = get_file_storage();
-
// delete any uses of groupings
$sql = "DELETE FROM {groupings_groups}
WHERE groupingid in (SELECT id FROM {groupings} g WHERE g.courseid = ?)";
$DB->delete_records('groupings', array('courseid'=>$courseid));
- //trigger groups events
+ // trigger groups events
events_trigger('groups_groupings_deleted', $courseid);
if ($showfeedback) {
- echo $OUTPUT->notification(get_string('deleted').' groupings');
+ echo $OUTPUT->notification(get_string('deleted').' - '.get_string('groupings', 'group'), 'notifysuccess');
}
return true;
$CFG->httpswwwroot = $CFG->wwwroot;
$CFG->dataroot = $config->dataroot;
$CFG->tempdir = $CFG->dataroot.'/temp';
-$CFG->cachedir = $CFG->dataroot.'/temp';
+$CFG->cachedir = $CFG->dataroot.'/cache';
$CFG->admin = $config->admin;
$CFG->docroot = 'http://docs.moodle.org';
$CFG->langotherroot = $CFG->dataroot.'/lang';
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
$string['dbprefix'] = 'Cədvəllərin adlarının prefiksi';
$string['dirroot'] = 'Moodle kataloqu';
$string['environmenthead'] = 'Mühitin yoxlanması...';
-$string['environmentsub2'] = 'Moodlun hər versiyasında PHP-nin versiyasına minimal tələblər və PHP-nin mütləq olan genişlənmələrinin dəsti var.\r
-Mühitin tam yoxlanılması hər quraşdırmadan və yenilənmədən əvvəl yerinə yetirilir.\r
-Xahiş edirik ki, əgər yeni versiyanın necə qurulmasını və PHP genişlənməsinin əlavə edilməsini bilmirsinizsə administratora müraciət edin. ';
+$string['environmentsub2'] = 'Moodlun hər versiyasında PHP-nin versiyasına minimal tələblər və PHP-nin mütləq olan genişlənmələrinin dəsti var.
+Mühitin tam yoxlanılması hər quraşdırmadan və yenilənmədən əvvəl yerinə yetirilir.
+Xahiş edirik ki, əgər yeni versiyanın necə qurulmasını və PHP genişlənməsinin əlavə edilməsini bilmirsinizsə administratora müraciət edin.';
$string['errorsinenvironment'] = 'Mühitin yoxlnılması yerinə yetirilmədi!';
$string['installation'] = 'Quraşdırma';
$string['langdownloaderror'] = 'Təəssüf ki, "{$a}" dilini qurmaq mümkün olmadı. Quraşdırma prosesi ingilis dilində davam edəcək.';
-$string['memorylimithelp'] = '<p>Sizin serverdə PHP-də yaddaşın məhdudlaşdırılması {$a}-da qurulub.</p>\r
-\r
-<p>Buna görə müəyyən müddətdən sonra yddaşla əlaqəli problemlər yarana bilər, xüsusən də Sizin çox sayda modullarınız və ya istifadəçiləriniz olarsa.</p>\r
-\r
-<p>Biz məsləhət görürük ki, əgər mümkünsə PHP-də yaddaşın məhdudlaşdırılması üçün daha böyük qiymət götürəsiniz, məsələn, 40M.\r
- Bunu aşağıdakı üsullarla etmək olar:</p>\r
-<ol>\r
-<li>Əgər imkan varsa PHP-ni <i>--enable-memory-limit</i> açarı ilə kompilyasiya edin.\r
-Bu halda Moodle özü yaddaşa məhdudiyyət qoya bilir.</li>\r
-<li>Əgər Sizin php.ini faylını redaktə etməyə icazəniz varsa, <b>memory_limit</b>parametrini nə iləsə 40M kimi dəyişmək olar. Əgər icazəniz yoxdursa, administratordan xahiş edə bilərsiniz.</li>\r
-<li>Bəzi PHP serverlərində Moodle kataloqunda .htaccess faylı yaratmaq və aşağıdakı sətri daxil etmək olar:\r
- <blockquote><div>php_value memory_limit 40M</div></blockquote>\r
- <p>Buna baxmayaraq bəzi serverlərdə buna görə PHP-nin<b>bütünl</b> səhifələrinin işi dayana bilər (Siz səhifələrdə səhvləri görəcəksiniz). Belə olan halda .htaccess faylını silmək lazımdır.</p></li>\r
+$string['memorylimithelp'] = '<p>Sizin serverdə PHP-də yaddaşın məhdudlaşdırılması {$a}-da qurulub.</p>
+
+<p>Buna görə müəyyən müddətdən sonra yddaşla əlaqəli problemlər yarana bilər, xüsusən də Sizin çox sayda modullarınız və ya istifadəçiləriniz olarsa.</p>
+
+<p>Biz məsləhət görürük ki, əgər mümkünsə PHP-də yaddaşın məhdudlaşdırılması üçün daha böyük qiymət götürəsiniz, məsələn, 40M.
+ Bunu aşağıdakı üsullarla etmək olar:</p>
+<ol>
+<li>Əgər imkan varsa PHP-ni <i>--enable-memory-limit</i> açarı ilə kompilyasiya edin.
+Bu halda Moodle özü yaddaşa məhdudiyyət qoya bilir.</li>
+<li>Əgər Sizin php.ini faylını redaktə etməyə icazəniz varsa, <b>memory_limit</b>parametrini nə iləsə 40M kimi dəyişmək olar. Əgər icazəniz yoxdursa, administratordan xahiş edə bilərsiniz.</li>
+<li>Bəzi PHP serverlərində Moodle kataloqunda .htaccess faylı yaratmaq və aşağıdakı sətri daxil etmək olar:
+ <blockquote><div>php_value memory_limit 40M</div></blockquote>
+ <p>Buna baxmayaraq bəzi serverlərdə buna görə PHP-nin<b>bütünl</b> səhifələrinin işi dayana bilər (Siz səhifələrdə səhvləri görəcəksiniz). Belə olan halda .htaccess faylını silmək lazımdır.</p></li>
</ol>';
$string['paths'] = 'Yollar';
$string['pathserrcreatedataroot'] = 'Quraşdırma proqramı ({$a->dataroot}) verilənlər kataloqunu yarada bilmir.';
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
defined('MOODLE_INTERNAL') || die();
+$string['thisdirection'] = 'ltr';
$string['thislanguage'] = 'Azərbaycanca';
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
$string['dataroot'] = 'Директория за данни';
$string['dbprefix'] = 'Представка на таблиците';
$string['dirroot'] = 'Директория на Moodle';
+$string['environmenthead'] = 'Проверка на Вашата работна среда ...';
+$string['environmentsub2'] = 'Всяка версия на Moodle изисква някаква минимална версия на PHP и няколко необходими PHP разширения. Преди всяко инсталиране или надграждане се извършва пълна проверка на работната среда. Моля, обърнете се към администратора на сървъра ако не знаете как да инсталирате нова версия или да разрешите резширенията на PHP.';
+$string['errorsinenvironment'] = 'Проверката на роботната среда е прекратена!';
$string['installation'] = 'Инсталиране';
$string['langdownloaderror'] = 'За съжаление езикът "{$a}" не може да бъде изтеглен. Инсталирането ще продължи на английски.';
$string['paths'] = 'Пътища';
$string['pathshead'] = 'Потвърждаване на пътищата';
+$string['pathsroparentdataroot'] = 'Директория ({$a->parent}) не е разрешена за запис и директорията за данни ({$a->dataroot}) не може да бъде създадена от инсталатора.';
$string['pathssubdataroot'] = 'Тази директория е място, където Moodle, записва качваните файлове. Тази директория трябва да е достъпна за четене И ЗА ЗАПИС от потребителя на интернет сървъра (обикновено \'nobody\' или \'apache\'), но не трябва да е достъпна пряко през Интернет. Инталаторът ще се опита да създаде директорията, ако тя не съществува.';
$string['pathssubdirroot'] = 'Пълен път до директорията на Moodle.';
$string['pathssubwwwroot'] = 'Пълен интернет адрес, на който ще се отваря Moodle. Не е възможно Moodle да се отваря чрез различни адреси. Ако Вашият сайт има няколко адреса трябва на всеки от другите адреси да направите пренасочване към този. Ако Вашият сайт се отваря както глобално от Интернет, така и от локална мрежа, настройте DNS, така че потребителите от локалната мрежа също да могат да ползват глобалния адрес. Ако адресът не е коректен, моля, променете адреса в браузъра си и започнете инсталирането с правилния адрес.';
+$string['phpextension'] = 'разширение на PHP';
$string['wwwroot'] = 'Уеб адрес';
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
--- /dev/null
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Automatically generated strings for Moodle 2.2beta installer
+ *
+ * Do not edit this file manually! It contains just a subset of strings
+ * needed during the very first steps of installation. This file was
+ * generated automatically by export-installer.php (which is part of AMOS
+ * {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
+ * list of strings defined in /install/stringnames.txt.
+ *
+ * @package installer
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$string['thislanguage'] = 'سۆرانی';
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
$string['language'] = 'Iaith';
$string['next'] = 'Nesaf';
$string['previous'] = 'Blaenorol';
+$string['reload'] = 'Ail-lwytho';
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Automatically generated strings for Moodle 2.2dev installer
+ * Automatically generated strings for Moodle 2.2beta installer
*