From: ikawhero Date: Fri, 5 Jan 2007 02:14:06 +0000 (+0000) Subject: Profile page using the new forms class. X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=c9c74c47abaf2e9b9b5b4bcf40925871479ac14f;p=moodle.git Profile page using the new forms class. Code to allow customisable fields. --- diff --git a/user/edit_form.php b/user/edit_form.php new file mode 100644 index 0000000000..e17963597f --- /dev/null +++ b/user/edit_form.php @@ -0,0 +1,405 @@ +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', '','
'); + + } + + + $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; + } + } +} + +?>