Closed (fixed)
Project:
User Read-Only
Version:
7.x-1.x-dev
Component:
Code
Priority:
Normal
Category:
Bug report
Assigned:
Unassigned
Reporter:
Created:
1 Jun 2011 at 13:13 UTC
Updated:
15 Jun 2011 at 17:02 UTC
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
Comment #1
Bastlynn commentedLooks good to me . Good catch, thanks!
I've rolled this into 7.x