]> git.mjollnir.org Git - moodle.git/commitdiff
Profile page using the new forms class.
authorikawhero <ikawhero>
Fri, 5 Jan 2007 02:14:06 +0000 (02:14 +0000)
committerikawhero <ikawhero>
Fri, 5 Jan 2007 02:14:06 +0000 (02:14 +0000)
Code to allow customisable fields.

user/edit_form.php [new file with mode: 0644]

diff --git a/user/edit_form.php b/user/edit_form.php
new file mode 100644 (file)
index 0000000..e179635
--- /dev/null
@@ -0,0 +1,405 @@
+<?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;
+        }
+    }
+}
+
+?>