--- /dev/null
+<?php //$Id$
+
+include_once("$CFG->dirroot/lib/formslib.php");
+require_once("$CFG->dirroot/user/profile/lib.php");
+
+class user_edit_form extends moodleform {
+
+ // Define the form
+ function definition () {
+ global $USER, $CFG;
+
+ $mform =& $this->_form;
+ $renderer =& $mform->defaultRenderer();
+ $user = $this->_customdata['user'];
+ $course = $this->_customdata['course'];
+
+ $systemcontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
+ $userupdate = has_capability('moodle/user:update', $systemcontext);
+
+ $strrequired = get_string('required');
+
+
+ /// Add some extra hidden fields
+ $mform->addElement('hidden', 'id', $user->id);
+ $mform->addElement('hidden', 'course', $course->id);
+
+
+ /// Print the required moodle fields first
+ $mform->addElement('header', 'moodle', $strrequired);
+
+ if ($userupdate) {
+ $theadmin = get_admin(); // returns false during install
+ $adminself = (!empty($theadmin) and ($theadmin->id == $USER->id) and ($USER->id == $user->id));
+ $userauth = get_auth_plugin($user->auth);
+
+ if ($adminself or $userauth->is_internal()) {
+ $mform->addElement('text', 'username', get_string('username'), 'size="20"');
+ $mform->setType('username', PARAM_MULTILANG);
+ $mform->setDefault('username', '');
+ $mform->addRule('username', $strrequired, 'required', null, 'client');
+ } else {
+ $mform->addElement('hidden', 'username', $user->username);
+ }
+
+ $modules = get_list_of_plugins("auth");
+ $auth_options = array();
+ foreach ($modules as $module) {
+ $auth_options[$module] = get_string("auth_$module"."title", "auth");
+ }
+ if (!$adminself) { /// Main admin is ALWAYS default manual
+ $mform->addElement('select', 'auth', get_string('chooseauthmethod','auth'),$auth_options);
+ $mform->setType('auth', PARAM_ALPHANUM);
+ $mform->addRule('auth', $strrequired, 'required', null, 'client');
+ $mform->setHelpButton('auth', array('authchange', get_string('chooseauthmethod','auth')));
+ }
+
+ if ($adminself or $userauth->can_change_password()) {
+ $newpasswordgrp = array();
+ $newpasswordgrp[] = &MoodleQuickForm::createElement('text', 'newpassword', '', 'size="20"');
+ $newpasswordgrp[] = &MoodleQuickForm::createElement('static', 'newpasswordtext', '', '('.get_string('leavetokeep').')');
+ $mform->addGroup($newpasswordgrp, 'newpasswordgrp', get_string('newpassword'),' ',false);
+ $mform->setType('newpassword', PARAM_MULTILANG);
+ if (isset($user->newpassword)) {
+ $mform->setDefault('newpassword', $user->newpassword);
+ }
+
+ if (!$adminself and $userauth->can_change_password()) {
+ if (get_user_preferences('auth_forcepasswordchange', NULL, $user->id)) {
+ $checked = ' checked="checked" ';
+ } else {
+ $checked = '';
+ }
+ $forcepasswordgrp = array();
+ $forcepasswordgrp[] = &MoodleQuickForm::createElement('checkbox', 'forcepasswordchange', '');
+ $forcepasswordgrp[] = &MoodleQuickForm::createElement('static', 'forcepasswordtext', '', '('.get_string('forcepasswordchangehelp').')');
+ $mform->addGroup($forcepasswordgrp, 'forcepasswordgrp', get_string('forcepasswordchange'));
+ $mform->setDefault('forcepasswordchange',$checked);
+ }
+ }
+ $mform->addElement('static','username_break', '','<hr />');
+
+ }
+
+
+ $mform->addElement('text', 'firstname', get_string('firstname'), 'maxlength="100" size="30"');
+ $mform->setType('firstname', PARAM_MULTILANG);
+ $mform->addRule('firstname', $strrequired, 'required', null, 'client');
+
+ $mform->addElement('text', 'lastname', get_string('lastname'), 'maxlength="100" size="30"');
+ $mform->setType('lastname', PARAM_MULTILANG);
+ $mform->addRule('lastname', $strrequired, 'required', null, 'client');
+
+ $mform->addElement('text', 'email', get_string('email'), 'maxlength="100" size="30"');
+ $mform->setType('email', PARAM_MULTILANG);
+ $mform->addRule('email', $strrequired, 'required', null, 'client');
+
+ unset($choices);
+ $choices["0"] = get_string("emaildisplayno");
+ $choices["1"] = get_string("emaildisplayyes");
+ $choices["2"] = get_string("emaildisplaycourse");
+ $mform->addElement('select', 'maildisplay', get_string('emaildisplay'), $choices);
+ $mform->setType('maildisplay', PARAM_INT);
+
+ unset($choices);
+ $choices["0"] = get_string("emailenable");
+ $choices["1"] = get_string("emaildisable");
+ $mform->addElement('select', 'emailstop', get_string('emailactive'), $choices);
+ $mform->setType('emailstop', PARAM_INT);
+
+ unset($choices);
+ $choices["0"] = get_string("textformat");
+ $choices["1"] = get_string("htmlformat");
+ $mform->addElement('select', 'mailformat', get_string('emailformat'), $choices);
+ $mform->setType('mailformat', PARAM_INT);
+
+ if (!empty($CFG->unicodedb) && !empty($CFG->allowusermailcharset)) {
+ $mailcharset = get_user_preferences('mailcharset', '0', $user->id);
+ unset($choices);
+ unset($charsets);
+ $charset = get_list_of_charsets();
+ if (!empty($CFG->sitemailcharset)) {
+ $choices["0"] = get_string('site').' ('.$CFG->sitemailcharset.')';
+ } else {
+ $choices["0"] = get_string('site').' ('.current_charset().')';
+ }
+ $choices = array_merge($choices, $charsets);
+ $mform->addElement('select', 'mailcharset', get_string('emailcharset'), $choices);
+ $mform->setType('mailcharset', PARAM_CLEAN);
+ $mform->setDefault('mailcharset', $mailcharset);
+ }
+
+ unset($choices);
+ $choices['0'] = get_string('emaildigestoff');
+ $choices['1'] = get_string('emaildigestcomplete');
+ $choices['2'] = get_string('emaildigestsubjects');
+ $mform->addElement('select', 'maildigest', get_string('emaildigest'), $choices);
+ $mform->setType('maildigest', PARAM_INT);
+ $mform->setDefault('maildigest', 0);
+
+ unset($choices);
+ $choices["1"] = get_string("autosubscribeyes");
+ $choices["0"] = get_string("autosubscribeno");
+ $mform->addElement('select', 'autosubscribe', get_string('autosubscribe'), $choices);
+ $mform->setType('autosubscribe', PARAM_INT);
+ $mform->setDefault('autosubscribe', 0);
+
+ if (!empty($CFG->forum_trackreadposts)) {
+ unset($choices);
+ $choices["0"] = get_string("trackforumsno");
+ $choices["1"] = get_string("trackforumsyes");
+ $mform->addElement('select', 'trackforums', get_string('trackforums'), $choices);
+ $mform->setType('trackforums', PARAM_INT);
+ $mform->setDefault('trackforums', 0);
+ }
+
+ if ($CFG->htmleditor) {
+ unset($choices);
+ $choices["0"] = get_string("texteditor");
+ $choices["1"] = get_string("htmleditor");
+ $mform->addElement('select', 'htmleditor', get_string('textediting'), $choices);
+ $mform->setType('htmleditor', PARAM_INT);
+ $mform->setDefault('htmleditor', 1);
+ }
+
+ unset($choices);
+ $choices["0"] = get_string("ajaxno");
+ $choices["1"] = get_string("ajaxyes");
+ $mform->addElement('select', 'ajax', get_string('ajaxuse'), $choices);
+ $mform->setType('ajax', PARAM_INT);
+ $mform->setDefault('ajax', 1);
+ $mform->disabledIf('ajax', empty($CFG->enableajax), true);
+
+ $mform->addElement('text', 'city', get_string('city'), 'maxlength="100" size="25"');
+ $mform->setType('city', PARAM_MULTILANG);
+ $mform->addRule('city', $strrequired, 'required', null, 'client');
+
+ if (!$user->country and $CFG->country) {
+ $user->country = $CFG->country;
+ }
+ unset($choices);
+ $choices = get_list_of_countries();
+ $mform->addElement('select', 'country', get_string('selectacountry'), $choices);
+ $mform->setType('country', PARAM_ALPHA);
+ $mform->addRule('country', $strrequired, 'required', null, 'client');
+
+ unset($choices);
+ $choices = get_list_of_timezones();
+ $mform->addElement('select', 'timezone', get_string('timezone'), $choices);
+ $mform->setType('timezone', PARAM_PATH);
+
+ unset($choices);
+ if ($choices = get_list_of_languages()) {
+ if (!$user->lang) {
+ $user->lang = $CFG->lang;
+ }
+ $mform->addElement('select', 'lang', get_string('preferredlanguage'), $choices);
+ $mform->setType('lang', PARAM_FILE);
+ }
+
+ if (!empty($CFG->allowuserthemes)) {
+ unset($choices);
+ $choices[''] = get_string('default');
+ $choices += get_list_of_themes();
+ $mform->addElement('select', 'theme', get_string('preferredtheme'), $choices);
+ $mform->setType('theme', PARAM_ALPHANUM);
+ }
+
+ $mform->addElement('htmleditor', 'description', get_string('userdescription'));
+ $mform->setType('description', PARAM_MULTILANG);
+ $mform->setHelpButton('description', array('text', get_string('helptext')));
+ if (!$userupdate) {
+ $mform->addRule('description', $strrequired, 'required', null, 'client');
+ }
+
+ unset($choices);
+ $choices["0"] = get_string("screenreaderno");
+ $choices["1"] = get_string("screenreaderyes");
+ $mform->addElement('select', 'screenreader', get_string('screenreaderuse'), $choices);
+ $mform->setType('screenreader', PARAM_INT);
+ $mform->setDefault('screenreader', 0);
+
+ $maxbytes = get_max_upload_file_size($CFG->maxbytes, $course->maxbytes);
+ if (!empty($CFG->gdversion) and $maxbytes and (empty($CFG->disableuserimages) or $userupdate)) {
+
+ $mform->addElement('header', 'moodle_picture', get_string('pictureof', '', fullname($user)));
+
+ $mform->addElement('static', 'currentpicture', get_string('currentpicture'),print_user_picture($user->id, $course->id, $user->picture, false, true, false));
+ if ($user->picture) {
+ $mform->addElement('checkbox', 'deletepicture', get_string('delete'));
+ $mform->setDefault('deletepicture',false);
+ }
+ $mform->addElement('file', 'imagefile', get_string('newpicture'));
+ $mform->setHelpButton('imagefile', array('picture', get_string('helppicture')));
+
+ $mform->addElement('text', 'imagealt', get_string('imagealt'), 'maxlength="100" size="30"');
+ $mform->setType('imagealt', PARAM_MULTILANG);
+
+ }
+
+
+ $this->add_action_buttons(false, get_string('updatemyprofile'));
+
+
+ /// Moodle optional fields
+ $mform->addElement('header', 'moodle_optional', get_string('followingoptional'));
+
+ $mform->addElement('text', 'url', get_string('webpage'), 'maxlength="255" size="50"');
+ $mform->setType('url', PARAM_URL);
+
+ $mform->addElement('text', 'icq', get_string('icqnumber'), 'maxlength="15" size="25"');
+ $mform->setType('icq', PARAM_CLEAN);
+
+ $mform->addElement('text', 'skype', get_string('skypeid'), 'maxlength="50" size="25"');
+ $mform->setType('skype', PARAM_CLEAN);
+
+ $mform->addElement('text', 'aim', get_string('aimid'), 'maxlength="50" size="25"');
+ $mform->setType('aim', PARAM_CLEAN);
+
+ $mform->addElement('text', 'yahoo', get_string('yahooid'), 'maxlength="50" size="25"');
+ $mform->setType('yahoo', PARAM_CLEAN);
+
+ $mform->addElement('text', 'msn', get_string('msnid'), 'maxlength="50" size="25"');
+ $mform->setType('msn', PARAM_CLEAN);
+
+ $mform->addElement('text', 'idnumber', get_string('idnumber'), 'maxlength="64" size="25"');
+ $mform->setType('idnumber', PARAM_MULTILANG);
+ $mform->disabledIf('idnumber', (!$userupdate), true);
+
+ if ($userupdate) {
+ $mform->addElement('text', 'institution', get_string('institution'), 'maxlength="40" size="25"');
+ $mform->setType('institution', PARAM_MULTILANG);
+
+ $mform->addElement('text', 'department', get_string('department'), 'maxlength="30" size="25"');
+ $mform->setType('department', PARAM_MULTILANG);
+ }
+
+ $mform->addElement('text', 'phone1', get_string('phone'), 'maxlength="20" size="25"');
+ $mform->setType('phone1', PARAM_CLEAN);
+ $mform->disabledIf('phone1', (!$userupdate), true);
+
+ $mform->addElement('text', 'phone2', get_string('phone'), 'maxlength="20" size="25"');
+ $mform->setType('phone2', PARAM_CLEAN);
+ $mform->disabledIf('phone2', (!$userupdate), true);
+
+ $mform->addElement('text', 'address', get_string('address'), 'maxlength="70" size="25"');
+ $mform->setType('address', PARAM_MULTILANG);
+ $mform->disabledIf('address', (!$userupdate), true);
+
+
+ /// override the defaults with the user settings
+ $this->set_defaults($user);
+
+
+ /// Next the customisable categories
+ if ($categories = get_records_select('user_info_category', '1', 'sortorder ASC')) {
+ foreach ($categories as $category) {
+ $mform->addElement('header', 'category_'.$category->id, $category->name);
+
+ if ($fields = get_records_select('user_info_field', "categoryid=$category->id", 'sortorder ASC')) {
+ foreach ($fields as $field) {
+
+ require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
+ $newfield = 'profile_field_'.$field->datatype;
+ $formfield = new $newfield($field->id,$user->id);
+ $formfield->display_field($mform);
+ unset($formfield);
+
+ }
+ } /// End of $fields if
+ } /// End of $categories foreach
+ } /// End of $categories if
+
+
+ $this->add_action_buttons(false, get_string('updatemyprofile'));
+
+ } /// End of function
+
+ function definition_after_data () {
+ /// nothing yet
+ }
+
+
+/// perform some moodle validation
+ function validation ($usernew) {
+ global $CFG;
+
+ $usernew = (object)$usernew;
+ $user = $this->_customdata['user'];
+ $err = array();
+
+ if (has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
+ if (empty($usernew->username)) { /// We should never get this
+ //$err["username"] = get_string("missingusername");
+ $err["username"] = 'testing';
+ } else if (record_exists("user", "username", $usernew->username, 'mnethostid', $CFG->mnet_localhost_id) and $user->username == "changeme") {
+ $err["username"] = get_string("usernameexists");
+ } else {
+ if (empty($CFG->extendedusernamechars)) {
+ $string = eregi_replace("[^(-\.[:alnum:])]", "", $usernew->username);
+ if (strcmp($usernew->username, $string)) {
+ $err["username"] = get_string("alphanumerical");
+ }
+ }
+ }
+
+ // TODO: is_internal_auth() - what, the global auth? the user auth?
+ if (empty($usernew->newpassword) and empty($user->password) and is_internal_auth()) {
+ $err["newpassword"] = get_string("missingpassword");
+ }
+ if (($usernew->newpassword == "admin") or ($user->password == md5("admin") and empty($usernew->newpassword)) ) {
+ $err["newpassword"] = get_string("unsafepassword");
+ }
+ }
+
+
+ if (! validate_email($usernew->email)) {
+ $err["email"] = get_string("invalidemail");
+ } else if ($otheruser = get_record("user", "email", $usernew->email)) {
+ if ($otheruser->id <> $user->id) {
+ $err["email"] = get_string("emailexists");
+ }
+ }
+ if (empty($err["email"]) and !has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
+ if ($error = email_is_not_allowed($usernew->email)) {
+ $err["email"] = $error;
+ }
+ }
+
+ /// And now we validate the custom data fields
+
+ if ($categories = get_records_select('user_info_category', '1', 'sortorder ASC')) {
+ foreach ($categories as $category) {
+
+ if ($fields = get_records_select('user_info_field', "categoryid=$category->id", 'sortorder ASC')) {
+ foreach ($fields as $field) {
+
+ require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
+ $newfield = 'profile_field_'.$field->datatype;
+ $formfield = new $newfield($field->id,$user->id);
+
+ if (isset($usernew->{$formfield->fieldname})) {
+
+ $errorstr = $formfield->validate_data($usernew->{$formfield->fieldname});
+ if (!empty($errorstr)) {
+ $err[$formfield->fieldname] = $errorstr;
+ }
+
+ }
+
+ unset($formfield);
+
+ }
+ } /// End of $fields if
+ } /// End of $categories foreach
+ } /// End of $categories if
+
+ if (count($err) == 0){
+ return true;
+ } else {
+ return $err;
+ }
+ }
+}
+
+?>