The fields that show as und are the custom profile fields, in the admin system this only appears once but actually shows on the form multiple times.

The following patch will determine the correct field name using the #field_name value if its available, allowing for the profile fields to be turned off/on as needed both for the admin form and the edit page.

diff -ru user_readonly/user_readonly.module ../user_readonly.module
--- user_readonly/user_readonly.module	2011-05-25 01:55:22.000000000 +1200
+++ ../user_readonly.module	2011-06-02 01:08:26.000000000 +1200
@@ -74,8 +74,18 @@
   foreach (element_children($user_edit) as $element_name) {
     $element = $user_edit[$element_name];
     foreach (element_children($element) as $element_value_name) {
-      $element_values = $element[$element_value_name];
-      $fields[$element_value_name] = $element_value_name;
+      if(isset($element[$element_value_name][0])) {
+        $element_values = $element[$element_value_name][0];
+        $element_value_name = $element[$element_value_name][0]["#field_name"];
+        $fields[$element_value_name] = $element_value_name;
+      } elseif(isset($element[$element_value_name]["#field_name"])) {
+        $element_values = $element[$element_value_name];
+        $element_value_name = $element[$element_value_name]["#field_name"];
+        $fields[$element_value_name] = $element_value_name;
+      } else {
+        $element_values = $element[$element_value_name];
+        $fields[$element_value_name] = $element_value_name;
+      }
     }
   }
   // The profile module is depr. in Drupal 7. See http://drupal.org/node/874026
@@ -225,20 +235,27 @@
     }
     $display_group = FALSE;
     foreach (element_children($data) as $key => $value) {
+      if(isset($data[$value][0])) {
+        $field = $data[$value][0]["#field_name"];
+      } elseif(isset($data[$value]["#field_name"])) {
+        $field = $data[$value]["#field_name"];
+      } else {
+        $field = $value;
+      }
       // Only restrict access to fields controlled by this module.
-      if (empty($settings[$value]) || !is_array($data[$value])) {
+      if (empty($settings[$field]) || !is_array($data[$value])) {
         $display_group = TRUE;
         continue; // Skip to the next child element.
       }
       // Use the default values unless the setting says otherwise.
       $settings_used = $settings['user_readonly'];
-      if (!empty($settings[$value]['mode']) && $settings[$value]['mode']!='default') {
-        $settings_used['mode'] = $settings[$value]['mode'];
-        $settings_used['roles'] = $settings[$value]['roles'];
-      }
-      if (!empty($settings[$value]['action']) && $settings[$value]['action']!='default') {
-        $settings_used['action'] = $settings[$value]['action'];
-        $settings_used['roles'] = $settings[$value]['roles'];
+      if (!empty($settings[$field]['mode']) && $settings[$field]['mode']!='default') {
+        $settings_used['mode'] = $settings[$field]['mode'];
+        $settings_used['roles'] = $settings[$field]['roles'];
+      }
+      if (!empty($settings[$field]['action']) && $settings[$field]['action']!='default') {
+        $settings_used['action'] = $settings[$field]['action'];
+        $settings_used['roles'] = $settings[$field]['roles'];
       }
       //  Check if any of this user's roles are ticked in the settings.
       $ticked = FALSE;

Comments

Bastlynn’s picture

Status: Active » Fixed

Looks good to me . Good catch, thanks!
I've rolled this into 7.x

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.