]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-18265 fixed regressions by hardfreeze security workaround - defaults were overrid...
authorskodak <skodak>
Sat, 7 Mar 2009 20:59:25 +0000 (20:59 +0000)
committerskodak <skodak>
Sat, 7 Mar 2009 20:59:25 +0000 (20:59 +0000)
user/edit_form.php
user/editadvanced_form.php
user/profile/lib.php

index 6341317dbf20bc1b17ca34014fd9e69d81500b2d..e1f578ef4155124bf4bb0260be50d3fb7e37224c 100644 (file)
@@ -97,11 +97,12 @@ class user_edit_form extends moodleform {
                 }
             }
             
-        }
-
-        /// Next the customisable profile fields
-        profile_definition_after_data($mform);
+            /// Next the customisable profile fields
+            profile_definition_after_data($mform, $user->id);
 
+        } else {
+            profile_definition_after_data($mform, 0);
+        }
     }
 
     function validation($usernew, $files) {
index 9ba149862e03f735acfd84e6439c6b8ceb59df78..0824340df782adfd62fa5c6dad69abafcb6f0c95 100644 (file)
@@ -107,7 +107,7 @@ class user_editadvanced_form extends moodleform {
         }
 
         /// Next the customisable profile fields
-        profile_definition_after_data($mform);
+        profile_definition_after_data($mform, $userid);
     }
 
     function validation($usernew, $files) {
index f644332e32799015371eb4657250db7fc5159072..5b3f8fae498dc14e1e5761d913d7b5b887220cc5 100644 (file)
@@ -71,6 +71,20 @@ class profile_field_base {
             $this->edit_field_add($mform);
             $this->edit_field_set_default($mform);
             $this->edit_field_set_required($mform);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Tweaks the edit form
+     * @param   object   instance of the moodleform class
+     * $return  boolean
+     */
+    function edit_after_data(&$mform) {
+
+        if ($this->field->visible != PROFILE_VISIBLE_NONE
+          or has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM))) {
             $this->edit_field_set_locked($mform);
             return true;
         }
@@ -151,6 +165,9 @@ class profile_field_base {
      * @param   object   instance of the moodleform class
      */
     function edit_field_set_locked(&$mform) {
+        if (!$mform->elementExists($this->inputname)) {
+            return;
+        }
         if ($this->is_locked() and !has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM))) {
             $mform->hardFreeze($this->inputname);
             $mform->setConstant($this->inputname, $this->data);
@@ -350,18 +367,19 @@ function profile_definition(&$mform) {
     }
 }
 
-function profile_definition_after_data(&$mform) {
+function profile_definition_after_data(&$mform, $userid) {
     global $CFG, $DB;
-/*
+
+    $userid = ($userid < 0) ? 0 : (int)$userid;
+
     if ($fields = $DB->get_records('user_info_field')) {
         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);
-//TODO add: method into field class
-
+            $formfield = new $newfield($field->id, $userid);
+            $formfield->edit_after_data($mform);
         }
-    }*/
+    }
 }
 
 function profile_validation($usernew, $files) {