Merge branch 'w09_MDL-26564_20_uploadusers' of git://github.com/skodak/moodle
This commit is contained in:
+380
-724
File diff suppressed because it is too large
Load Diff
+110
-62
@@ -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'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ' ';
|
||||
}
|
||||
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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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}';
|
||||
|
||||
@@ -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!';
|
||||
|
||||
@@ -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?';
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user