### Eclipse Workspace Patch 1.0
#P moodle
Index: user/edit.php
===================================================================
RCS file: /cvsroot/moodle/moodle/user/edit.php,v
retrieving revision 1.201
diff -u -r1.201 edit.php
--- user/edit.php	20 Apr 2010 03:42:55 -0000	1.201
+++ user/edit.php	3 May 2010 01:00:03 -0000
@@ -260,6 +260,10 @@
 if ($email_changed) {
     echo $email_changed_html;
 } else {
+    $fieldorder = get_config('userprofileorder', 'forms');
+    if (!empty($fieldorder)) {
+        $userform->rearrange_elements(explode(',',$fieldorder));
+    }
 /// Finally display THE form
     $userform->display();
 }
Index: user/editadvanced.php
===================================================================
RCS file: /cvsroot/moodle/moodle/user/editadvanced.php,v
retrieving revision 1.70
diff -u -r1.70 editadvanced.php
--- user/editadvanced.php	19 Apr 2010 06:30:33 -0000	1.70
+++ user/editadvanced.php	3 May 2010 01:00:03 -0000
@@ -263,7 +263,10 @@
     $currenttab = 'editprofile';
     require('tabs.php');
 }
-
+$fieldorder = get_config('userprofileorder', 'forms');
+if (!empty($fieldorder)) {
+    $userform->rearrange_elements(explode(',',$fieldorder));
+}
 /// Finally display THE form
 $userform->display();
 
Index: lib/formslib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/formslib.php,v
retrieving revision 1.206
diff -u -r1.206 formslib.php
--- lib/formslib.php	30 Apr 2010 09:57:32 -0000	1.206
+++ lib/formslib.php	3 May 2010 01:00:03 -0000
@@ -992,6 +992,42 @@
             $mform->closeHeaderBefore('submitbutton');
         }
     }
+    /**
+     * Use this method to rearrange elements using a $sortorder - called after form has been created.
+     *
+     * @param $sortorder array() sortorder of elements
+     * @param $advanced array() elements that should be set to be advanced
+     * @param string $submitlabel label for submit button, defaults to get_string('savechanges')
+     */
+    function rearrange_elements($sortorder, $advanced = '') {
+            if (!empty($sortorder)) {
+            $elements = $this->_form->_elements;
+            $namedelements = array();
+            $newelements = array();
+            //sort elements by name
+            foreach ($elements as $id => $element) {
+                $namedelements[$element->_attributes['name']] = $element;
+            }
+            //get sorted fields
+            foreach($sortorder as $item) {
+                if (isset($namedelements[$item])) {
+                    $newelements[] = $namedelements[$item];
+                    unset($namedelements[$item]);
+                }
+            }
+            //now tack on the other fields not included in the sortorder
+            foreach($namedelements as $item) {
+                $newelements[] = $item;
+            }
+            $this->_form->_elements = $newelements;
+        }
+        if (!empty($advanced)) {
+            //now handle the advanced settings
+            foreach($advanced as $field) {
+                $this->_form->setAdvanced($field);
+            }
+        }
+    }
 }
 
 /**

