Merge branch 'w09_MDL-26564_20_uploadusers' of git://github.com/skodak/moodle

This commit is contained in:
Eloy Lafuente (stronk7)
2011-03-01 12:05:52 +01:00
13 changed files with 923 additions and 794 deletions
+380 -724
View File
File diff suppressed because it is too large Load Diff
+110 -62
View File
@@ -1,16 +1,44 @@
<?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/>.
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
}
/**
* Bulk user upload forms
*
* @package core
* @subpackage admin
* @copyright 2007 Dan Poltawski
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once $CFG->libdir.'/formslib.php';
class admin_uploaduser_form1 extends moodleform {
function definition (){
global $CFG, $USER;
$mform =& $this->_form;
/**
* Upload a file CVS file with user information.
*
* @package core
* @subpackage admin
* @copyright 2007 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_uploaduser_form1 extends moodleform {
function definition () {
$mform = $this->_form;
$mform->addElement('header', 'settingsheader', get_string('upload'));
@@ -36,69 +64,90 @@ class admin_uploaduser_form1 extends moodleform {
$mform->addElement('select', 'previewrows', get_string('rowpreviewnum', 'admin'), $choices);
$mform->setType('previewrows', PARAM_INT);
$choices = array(UU_ADDNEW => get_string('uuoptype_addnew', 'admin'),
UU_ADDINC => get_string('uuoptype_addinc', 'admin'),
UU_ADD_UPDATE => get_string('uuoptype_addupdate', 'admin'),
UU_UPDATE => get_string('uuoptype_update', 'admin'));
$mform->addElement('select', 'uutype', get_string('uuoptype', 'admin'), $choices);
$this->add_action_buttons(false, get_string('uploadusers', 'admin'));
}
}
/**
* Specify user upload details
*
* @package core
* @subpackage admin
* @copyright 2007 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_uploaduser_form2 extends moodleform {
function definition (){
function definition () {
global $CFG, $USER;
$mform =& $this->_form;
$columns =& $this->_customdata;
$mform = $this->_form;
$columns = $this->_customdata['columns'];
$data = $this->_customdata['data'];
// I am the template user, why should it be the administrator? we have roles now, other ppl may use this script ;-)
$templateuser = $USER;
// upload settings and file
$mform->addElement('header', 'settingsheader', get_string('settings'));
$mform->addElement('static', 'uutypelabel', get_string('uuoptype', 'admin') );
$choices = array(UU_USER_ADDNEW => get_string('uuoptype_addnew', 'admin'),
UU_USER_ADDINC => get_string('uuoptype_addinc', 'admin'),
UU_USER_ADD_UPDATE => get_string('uuoptype_addupdate', 'admin'),
UU_USER_UPDATE => get_string('uuoptype_update', 'admin'));
$mform->addElement('select', 'uutype', get_string('uuoptype', 'admin'), $choices);
$choices = array(0 => get_string('infilefield', 'auth'), 1 => get_string('createpasswordifneeded', 'auth'));
$mform->addElement('select', 'uupasswordnew', get_string('uupasswordnew', 'admin'), $choices);
$mform->setDefault('uupasswordnew', 1);
$mform->disabledIf('uupasswordnew', 'uutype', 'eq', UU_UPDATE);
$mform->disabledIf('uupasswordnew', 'uutype', 'eq', UU_USER_UPDATE);
$choices = array(0 => get_string('nochanges', 'admin'),
1 => get_string('uuupdatefromfile', 'admin'),
2 => get_string('uuupdateall', 'admin'),
3 => get_string('uuupdatemissing', 'admin'));
$choices = array(UU_UPDATE_NOCHANGES => get_string('nochanges', 'admin'),
UU_UPDATE_FILEOVERRIDE => get_string('uuupdatefromfile', 'admin'),
UU_UPDATE_ALLOVERRIDE => get_string('uuupdateall', 'admin'),
UU_UPDATE_MISSING => get_string('uuupdatemissing', 'admin'));
$mform->addElement('select', 'uuupdatetype', get_string('uuupdatetype', 'admin'), $choices);
$mform->setDefault('uuupdatetype', 0);
$mform->disabledIf('uuupdatetype', 'uutype', 'eq', UU_ADDNEW);
$mform->disabledIf('uuupdatetype', 'uutype', 'eq', UU_ADDINC);
$mform->setDefault('uuupdatetype', UU_UPDATE_NOCHANGES);
$mform->disabledIf('uuupdatetype', 'uutype', 'eq', UU_USER_ADDNEW);
$mform->disabledIf('uuupdatetype', 'uutype', 'eq', UU_USER_ADDINC);
$choices = array(0 => get_string('nochanges', 'admin'), 1 => get_string('update'));
$mform->addElement('select', 'uupasswordold', get_string('uupasswordold', 'admin'), $choices);
$mform->setDefault('uupasswordold', 0);
$mform->disabledIf('uupasswordold', 'uutype', 'eq', UU_ADDNEW);
$mform->disabledIf('uupasswordold', 'uutype', 'eq', UU_ADDINC);
$mform->disabledIf('uupasswordold', 'uutype', 'eq', UU_USER_ADDNEW);
$mform->disabledIf('uupasswordold', 'uutype', 'eq', UU_USER_ADDINC);
$mform->disabledIf('uupasswordold', 'uuupdatetype', 'eq', 0);
$mform->disabledIf('uupasswordold', 'uuupdatetype', 'eq', 3);
$choices = array(UU_PWRESET_WEAK => get_string('usersweakpassword', 'admin'),
UU_PWRESET_NONE => get_string('none'),
UU_PWRESET_ALL => get_string('all'));
if (empty($CFG->passwordpolicy)) {
unset($choices[UU_PWRESET_WEAK]);
}
$mform->addElement('select', 'uuforcepasswordchange', get_string('forcepasswordchange', 'core'), $choices);
$mform->addElement('selectyesno', 'uuallowrenames', get_string('allowrenames', 'admin'));
$mform->setDefault('uuallowrenames', 0);
$mform->disabledIf('uuallowrenames', 'uutype', 'eq', UU_ADDNEW);
$mform->disabledIf('uuallowrenames', 'uutype', 'eq', UU_ADDINC);
$mform->disabledIf('uuallowrenames', 'uutype', 'eq', UU_USER_ADDNEW);
$mform->disabledIf('uuallowrenames', 'uutype', 'eq', UU_USER_ADDINC);
$mform->addElement('selectyesno', 'uuallowdeletes', get_string('allowdeletes', 'admin'));
$mform->setDefault('uuallowdeletes', 0);
$mform->disabledIf('uuallowdeletes', 'uutype', 'eq', UU_ADDNEW);
$mform->disabledIf('uuallowdeletes', 'uutype', 'eq', UU_ADDINC);
$mform->disabledIf('uuallowdeletes', 'uutype', 'eq', UU_USER_ADDNEW);
$mform->disabledIf('uuallowdeletes', 'uutype', 'eq', UU_USER_ADDINC);
$mform->addElement('selectyesno', 'uunoemailduplicates', get_string('uunoemailduplicates', 'admin'));
$mform->setDefault('uunoemailduplicates', 1);
$choices = array(0 => get_string('no'),
1 => get_string('uubulknew', 'admin'),
2 => get_string('uubulkupdated', 'admin'),
3 => get_string('uubulkall', 'admin'));
$mform->addElement('selectyesno', 'uustandardusernames', get_string('uustandardusernames', 'admin'));
$mform->setDefault('uustandardusernames', 1);
$choices = array(UU_BULK_NONE => get_string('no'),
UU_BULK_NEW => get_string('uubulknew', 'admin'),
UU_BULK_UPDATED => get_string('uubulkupdated', 'admin'),
UU_BULK_ALL => get_string('uubulkall', 'admin'));
$mform->addElement('select', 'uubulk', get_string('uubulk', 'admin'), $choices);
$mform->setDefault('uubulk', 0);
@@ -152,18 +201,22 @@ class admin_uploaduser_form2 extends moodleform {
// default values
$mform->addElement('header', 'defaultheader', get_string('defaultvalues', 'admin'));
$mform->addElement('text', 'username', get_string('username'), 'size="20"');
$mform->addElement('text', 'username', get_string('uuusernametemplate', 'admin'), 'size="20"');
$mform->addRule('username', get_string('requiredtemplate', 'admin'), 'required', null, 'client');
$mform->disabledIf('username', 'uutype', 'eq', UU_USER_ADD_UPDATE);
$mform->disabledIf('username', 'uutype', 'eq', UU_USER_UPDATE);
$mform->addElement('text', 'email', get_string('email'), 'maxlength="100" size="30"');
$mform->disabledIf('email', 'uutype', 'eq', UU_USER_ADD_UPDATE);
$mform->disabledIf('email', 'uutype', 'eq', UU_USER_UPDATE);
// only enabled and known to work plugins
$choices = uu_allowed_auths();
$choices = uu_supported_auths();
$mform->addElement('select', 'auth', get_string('chooseauthmethod','auth'), $choices);
$mform->setDefault('auth', 'manual'); // manual is a sensible backwards compatible default
$mform->addHelpButton('auth', 'chooseauthmethod', 'auth');
$mform->setAdvanced('auth');
$mform->addElement('text', 'email', get_string('email'), 'maxlength="100" size="30"');
$choices = array(0 => get_string('emaildisplayno'), 1 => get_string('emaildisplayyes'), 2 => get_string('emaildisplaycourse'));
$mform->addElement('select', 'maildisplay', get_string('emaildisplay'), $choices);
$mform->setDefault('maildisplay', 2);
@@ -272,27 +325,30 @@ class admin_uploaduser_form2 extends moodleform {
$mform->addElement('hidden', 'previewrows');
$mform->setType('previewrows', PARAM_INT);
$mform->addElement('hidden', 'readcount');
$mform->setType('readcount', PARAM_INT);
$mform->addElement('hidden', 'uutype');
$mform->setType('uutype', PARAM_INT);
$this->add_action_buttons(true, get_string('uploadusers', 'admin'));
$this->set_data($data);
}
/**
* Form tweaks that depend on current data.
*/
function definition_after_data() {
$mform =& $this->_form;
$columns =& $this->_customdata;
$mform = $this->_form;
$columns = $this->_customdata['columns'];
foreach ($columns as $column) {
if ($mform->elementExists($column)) {
$mform->removeElement($column);
}
}
if (!in_array('password', $columns)) {
// password resetting makes sense only if password specified in csv file
if ($mform->elementExists('uuforcepasswordchange')) {
$mform->removeElement('uuforcepasswordchange');
}
}
}
/**
@@ -300,19 +356,19 @@ class admin_uploaduser_form2 extends moodleform {
*/
function validation($data, $files) {
$errors = parent::validation($data, $files);
$columns =& $this->_customdata;
$columns = $this->_customdata['columns'];
$optype = $data['uutype'];
// detect if password column needed in file
if (!in_array('password', $columns)) {
switch ($optype) {
case UU_UPDATE:
case UU_USER_UPDATE:
if (!empty($data['uupasswordold'])) {
$errors['uupasswordold'] = get_string('missingfield', 'error', 'password');
}
break;
case UU_ADD_UPDATE:
case UU_USER_ADD_UPDATE:
if (empty($data['uupasswordnew'])) {
$errors['uupasswordnew'] = get_string('missingfield', 'error', 'password');
}
@@ -321,12 +377,12 @@ class admin_uploaduser_form2 extends moodleform {
}
break;
case UU_ADDNEW:
case UU_USER_ADDNEW:
if (empty($data['uupasswordnew'])) {
$errors['uupasswordnew'] = get_string('missingfield', 'error', 'password');
}
break;
case UU_ADDINC:
case UU_USER_ADDINC:
if (empty($data['uupasswordnew'])) {
$errors['uupasswordnew'] = get_string('missingfield', 'error', 'password');
}
@@ -335,7 +391,7 @@ class admin_uploaduser_form2 extends moodleform {
}
// look for other required data
if ($optype != UU_UPDATE) {
if ($optype != UU_USER_UPDATE) {
if (!in_array('firstname', $columns)) {
$errors['uutype'] = get_string('missingfield', 'error', 'firstname');
}
@@ -369,7 +425,7 @@ class admin_uploaduser_form2 extends moodleform {
function get_data() {
$data = parent::get_data();
if ($data !== null) {
if ($data !== null and isset($data->description)) {
$data->descriptionformat = $data->description['format'];
$data->description = $data->description['text'];
}
@@ -377,11 +433,3 @@ class admin_uploaduser_form2 extends moodleform {
return $data;
}
}
class admin_uploaduser_form3 extends moodleform {
function definition (){
global $CFG, $USER;
$mform =& $this->_form;
$this->add_action_buttons(false, get_string('uploadnewfile'));
}
}
+335
View File
@@ -0,0 +1,335 @@
<?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/>.
/**
* Bulk user registration functions
*
* @package core
* @subpackage admin
* @copyright 2004 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
define('UU_USER_ADDNEW', 0);
define('UU_USER_ADDINC', 1);
define('UU_USER_ADD_UPDATE', 2);
define('UU_USER_UPDATE', 3);
define('UU_UPDATE_NOCHANGES', 0);
define('UU_UPDATE_FILEOVERRIDE', 1);
define('UU_UPDATE_ALLOVERRIDE', 2);
define('UU_UPDATE_MISSING', 3);
define('UU_BULK_NONE', 0);
define('UU_BULK_NEW', 1);
define('UU_BULK_UPDATED', 2);
define('UU_BULK_ALL', 3);
define('UU_PWRESET_NONE', 0);
define('UU_PWRESET_WEAK', 1);
define('UU_PWRESET_ALL', 2);
/**
* Tracking of processed users.
*
* This class prints user information into a html table.
*
* @package core
* @subpackage admin
* @copyright 2007 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class uu_progress_tracker {
private $_row;
public $columns = array('status', 'line', 'id', 'username', 'firstname', 'lastname', 'email', 'password', 'auth', 'enrolments', 'deleted');
/**
* Print table header.
* @return void
*/
public function start() {
$ci = 0;
echo '<table id="uuresults" class="generaltable boxaligncenter flexible-wrap" summary="'.get_string('uploadusersresult', 'admin').'">';
echo '<tr class="heading r0">';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('status').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('uucsvline', 'admin').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">ID</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('username').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('firstname').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('lastname').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('email').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('password').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('authentication').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('enrolments', 'enrol').'</th>';
echo '<th class="header c'.$ci++.'" scope="col">'.get_string('delete').'</th>';
echo '</tr>';
$this->_row = null;
}
/**
* Flush previous line and start a new one.
* @return void
*/
public function flush() {
if (empty($this->_row) or empty($this->_row['line']['normal'])) {
// Nothing to print - each line has to have at least number
$this->_row = array();
foreach ($this->columns as $col) {
$this->_row[$col] = array('normal'=>'', 'info'=>'', 'warning'=>'', 'error'=>'');
}
return;
}
$ci = 0;
$ri = 1;
echo '<tr class="r'.$ri.'">';
foreach ($this->_row as $key=>$field) {
foreach ($field as $type=>$content) {
if ($field[$type] !== '') {
$field[$type] = '<span class="uu'.$type.'">'.$field[$type].'</span>';
} else {
unset($field[$type]);
}
}
echo '<td class="cell c'.$ci++.'">';
if (!empty($field)) {
echo implode('<br />', $field);
} else {
echo '&nbsp;';
}
echo '</td>';
}
echo '</tr>';
foreach ($this->columns as $col) {
$this->_row[$col] = array('normal'=>'', 'info'=>'', 'warning'=>'', 'error'=>'');
}
}
/**
* Add tracking info
* @param string $col name of column
* @param string $msg message
* @param string $level 'normal', 'warning' or 'error'
* @param bool $merge true means add as new line, false means override all previous text of the same type
* @return void
*/
public function track($col, $msg, $level = 'normal', $merge = true) {
if (empty($this->_row)) {
$this->flush(); //init arrays
}
if (!in_array($col, $this->columns)) {
debugging('Incorrect column:'.$col);
return;
}
if ($merge) {
if ($this->_row[$col][$level] != '') {
$this->_row[$col][$level] .='<br />';
}
$this->_row[$col][$level] .= $msg;
} else {
$this->_row[$col][$level] = $msg;
}
}
/**
* Print the table end
* @return void
*/
public function close() {
$this->flush();
echo '</table>';
}
}
/**
* Validation callback function - verified the column line of csv file.
* Converts column names to lowercase too.
* @param csv_import_reader $cir
* @param array standard user fields
* @param array custom profile fields
* @param moodle_url $returnurl return url in case of any error
* @return array list of fields
*/
function uu_validate_user_upload_columns(csv_import_reader $cir, $stdfields, $frofilefields, moodle_url $returnurl) {
$columns = $cir->get_columns();
if (empty($columns)) {
$cir->close();
$cir->cleanup();
print_error('cannotreadtmpfile', 'error', $returnurl);
}
if (count($columns) < 2) {
$cir->close();
$cir->cleanup();
print_error('csvfewcolumns', 'error', $returnurl);
}
// test columns
$processed = array();
foreach ($columns as $key=>$unused) {
$field = strtolower($columns[$key]); // no unicode expected here, ignore case
if (!in_array($field, $stdfields) && !in_array($field, $frofilefields) &&// if not a standard field and not an enrolment field, then we have an error
!preg_match('/^course\d+$/', $field) && !preg_match('/^group\d+$/', $field) &&
!preg_match('/^type\d+$/', $field) && !preg_match('/^role\d+$/', $field) &&
!preg_match('/^enrolperiod\d+$/', $field)) {
print_error('invalidfieldname', 'error', $returnurl, $field);
}
if (in_array($field, $processed)) {
$cir->close();
$cir->cleanup();
print_error('duplicatefieldname', 'error', $returnurl, $field);
}
$processed[$key] = $field;
}
return $processed;
}
/**
* Increments username - increments trailing number or adds it if not present.
* Varifies that the new username does not exist yet
* @param string $username
* @return incremented username which does not exist yet
*/
function uu_increment_username($username) {
global $DB, $CFG;
if (!preg_match_all('/(.*?)([0-9]+)$/', $username, $matches)) {
$username = $username.'2';
} else {
$username = $matches[1][0].($matches[2][0]+1);
}
if ($DB->record_exists('user', array('username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) {
return uu_increment_username($username);
} else {
return $username;
}
}
/**
* Check if default field contains templates and apply them.
* @param string template - potential tempalte string
* @param object user object- we need username, firstname and lastname
* @return string field value
*/
function uu_process_template($template, $user) {
if (is_array($template)) {
// hack for for support of text editors with format
$t = $template['text'];
} else {
$t = $template;
}
if (strpos($t, '%') === false) {
return $template;
}
$username = isset($user->username) ? $user->username : '';
$firstname = isset($user->firstname) ? $user->firstname : '';
$lastname = isset($user->lastname) ? $user->lastname : '';
$callback = partial('uu_process_template_callback', $username, $firstname, $lastname);
$result = preg_replace_callback('/(?<!%)%([+-~])?(\d)*([flu])/', $callback, $t);
if (is_null($result)) {
return $template; //error during regex processing??
} else {
if (array($template)) {
$template['text'] = $t;
return $t;
} else {
return $t;
}
}
}
/**
* Internal callback function.
*/
function uu_process_template_callback($block, $username, $firstname, $lastname) {
$textlib = textlib_get_instance();
$repl = $block[0];
switch ($block[3]) {
case 'u': $repl = $username; break;
case 'f': $repl = $firstname; break;
case 'l': $repl = $lastname; break;
}
switch ($block[1]) {
case '+': $repl = $textlib->strtoupper($repl); break;
case '-': $repl = $textlib->strtolower($repl); break;
case '~': $repl = $textlib->strtotitle($repl); break;
}
if (!empty($block[2])) {
$repl = $textlib->substr($repl, 0 , $block[2]);
}
return $repl;
}
/**
* Returns list of auth plugins that are enabled and known to work.
*
* If ppl want to use some other auth type they have to include it
* in the CSV file next on each line.
*
* @return array type=>name
*/
function uu_supported_auths() {
// only following plugins are guaranteed to work properly
$whitelist = array('manual', 'nologin', 'none', 'email');
$plugins = get_enabled_auth_plugins();
$choices = array();
foreach ($plugins as $plugin) {
if (!in_array($plugin, $whitelist)) {
continue;
}
$choices[$plugin] = get_string('pluginname', "auth_{$plugin}");
}
return $choices;
}
/**
* Returns list of roles that are assignable in courses
* @return array
*/
function uu_allowed_roles() {
// let's cheat a bit, frontpage is guaranteed to exist and has the same list of roles ;-)
$roles = get_assignable_roles(get_context_instance(CONTEXT_COURSE, SITEID), ROLENAME_ORIGINALANDSHORT);
return array_reverse($roles, true);
}
/**
* Returns mapping of all roles using short role name as index.
* @return array
*/
function uu_allowed_roles_cache() {
$allowedroles = get_assignable_roles(get_context_instance(CONTEXT_COURSE, SITEID), ROLENAME_SHORT);
foreach ($allowedroles as $rid=>$rname) {
$rolecache[$rid] = new stdClass();
$rolecache[$rid]->id = $rid;
$rolecache[$rid]->name = $rname;
if (!is_numeric($rname)) { // only non-numeric shortnames are supported!!!
$rolecache[$rname] = new stdClass();
$rolecache[$rname]->id = $rid;
$rolecache[$rname]->name = $rname;
}
}
return $rolecache;
}
+49
View File
@@ -0,0 +1,49 @@
<?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/>.
/**
* Manual authentication plugin upgrade code
*
* @package auth
* @subpackage manual
* @copyright 2011 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* @param int $oldversion the version we are upgrading from
* @return bool result
*/
function xmldb_auth_manual_upgrade($oldversion) {
global $CFG, $DB, $OUTPUT;
if ($oldversion < 2011022700) {
// force creation of missing passwords
$createpassword = hash_internal_user_password('');
$rs = $DB->get_recordset('user', array('password'=>$createpassword, 'auth'=>'manual'));
foreach ($rs as $user) {
if (validate_email($user->email)) {
$DB->set_field('user', 'password', 'to be created', array('id'=>$user->id));
unset_user_preference('auth_forcepasswordchange', $user);
set_user_preference('create_password', 1, $user);
}
}
$rs->close();
upgrade_plugin_savepoint(true, 2011022700, 'auth', 'manual');
}
return true;
}
+29
View File
@@ -0,0 +1,29 @@
<?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/>.
/**
* Manual authentication plugin version information
*
* @package auth
* @subpackage manual
* @copyright 2011 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2011022700;
$plugin->component = 'auth_manual';
+4 -1
View File
@@ -1053,6 +1053,7 @@ $string['useexternalyui'] = 'Use online YUI libraries';
$string['usehtmleditor'] = 'Use HTML editor';
$string['user'] = 'User';
$string['useraccountupdated'] = 'User updated';
$string['useraccountuptodate'] = 'User up-to-date';
$string['userbulk'] = 'Bulk user actions';
$string['userdeleted'] = 'User deleted';
$string['userlist'] = 'Browse list of users';
@@ -1082,13 +1083,15 @@ $string['uuoptype_addinc'] = 'Add all, append number to usernames if needed';
$string['uuoptype_addnew'] = 'Add new only, skip existing users';
$string['uuoptype_addupdate'] = 'Add new and update existing users';
$string['uuoptype_update'] = 'Update existing users only';
$string['uupasswordcron'] = 'Generated in cron';
$string['uupasswordnew'] = 'New user password';
$string['uupasswordold'] = 'Existing user password';
$string['uupreprocessedcount'] = 'Number of preprocessed records: {$a}';
$string['uustandardusernames'] = 'Standardise usernames';
$string['uuupdateall'] = 'Override with file and defaults';
$string['uuupdatefromfile'] = 'Override with file';
$string['uuupdatemissing'] = 'Fill in missing from file and defaults';
$string['uuupdatetype'] = 'Existing user details';
$string['uuusernametemplate'] = 'Username template';
$string['validateerror'] = 'This value was not valid:';
$string['verifychangedemail'] = 'Restrict domains when changing email';
$string['warningcurrentsetting'] = 'Invalid current value: {$a}';
+1
View File
@@ -200,6 +200,7 @@ $string['dmltransactionexception'] = 'Database transaction error';
$string['dmlwriteexception'] = 'Error writing to database';
$string['downgradedcore'] = 'ERROR!!! The code you are using is OLDER than the version that made these databases!';
$string['downloadedfilecheckfailed'] = 'Downloaded file check failed';
$string['duplicatefieldname'] = 'Duplicate field name "{$a}" detected';
$string['duplicateparaminsql'] = 'ERROR: duplicate parameter name in query';
$string['duplicaterolename'] = 'There is already a role with this name!';
$string['duplicateroleshortname'] = 'There is already a role with this short name!';
-3
View File
@@ -1672,11 +1672,8 @@ $string['uploadedfileto'] = 'Uploaded {$a->file} to {$a->directory}';
$string['uploadedfiletoobig'] = 'Sorry, but that file is too big (limit is {$a} bytes)';
$string['uploadextension'] = 'File upload stopped by extension';
$string['uploadfailednotrecovering'] = 'Your file upload has failed because there was a problem with one of the files, {$a->name}.<br /> Here is a log of the problems:<br />{$a->problem}<br />Not recovering.';
$string['uploadfilecontainerror'] = 'The uploaded file has not been processed due to the error(s) specified. Please amend the file before uploading it again.';
$string['uploadfilecontentsnovaliddata'] = 'The uploaded file contains no valid data.';
$string['uploadfilelog'] = 'Upload log for file {$a}';
$string['uploadformlimit'] = 'Uploaded file exceeded the maximum size limit set by the form';
$string['uploadinvalidpreprocessedcount'] = 'Number of invalid preprocessed records: {$a}';
$string['uploadlabel'] = 'Title:';
$string['uploadnewfile'] = 'Upload new file';
$string['uploadnofilefound'] = 'No file was found - are you sure you selected one to upload?';
+8
View File
@@ -6043,6 +6043,14 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
upgrade_main_savepoint(true, 2011020900.08);
}
if ($oldversion < 2011022100.01) {
// hack alert: inject missing version of manual auth_plugin,
// we need to do it so that we may use upgrade.php there
set_config('version', 2011022100, 'auth_manual');
upgrade_main_savepoint(true, 2011022100.01);
}
return true;
}
+3 -2
View File
@@ -4831,8 +4831,7 @@ function setnew_password_and_mail($user) {
/**
* Resets specified user's password and send the new password to the user via email.
*
* @global object
* @param user $user A {@link $USER} object
* @param stdClass $user A {@link $USER} object
* @return bool Returns true if mail was sent OK and false if there was an error.
*/
function reset_password_and_mail($user) {
@@ -4866,6 +4865,8 @@ function reset_password_and_mail($user) {
$subject = format_string($site->fullname) .': '. get_string('changedpassword');
unset_user_preference('create_password', $user); // prevent cron from generating the password
//directly email rather than using the messaging system to ensure its not routed to a popup or jabber
return email_to_user($user, $supportuser, $subject, $message);
+2 -1
View File
@@ -111,7 +111,8 @@ if ($mform->is_cancelled()) {
}
// register success changing password
unset_user_preference('auth_forcepasswordchange', $USER->id);
unset_user_preference('auth_forcepasswordchange', $USER);
unset_user_preference('create_password', $USER);
$strpasswordchanged = get_string('passwordchanged');
+1
View File
@@ -165,6 +165,7 @@ if ($usernew = $userform->get_data()) {
if (!$authplugin->user_update_password($usernew, $usernew->newpassword)){
print_error('cannotupdatepasswordonextauth', '', '', $usernew->auth);
}
unset_user_preference('create_password', $usernew); // prevent cron from generating the password
}
}
$usercreated = false;
+1 -1
View File
@@ -29,7 +29,7 @@
defined('MOODLE_INTERNAL') || die();
$version = 2011022100.00; // YYYYMMDD = date of the last version bump
$version = 2011022100.01; // YYYYMMDD = date of the last version bump
// XX = daily increments
$release = '2.0.2+ (Build: 20110223)'; // Human-friendly version name