diff -urp addresses/addresses.module addresses_customize/addresses.module --- addresses/addresses.module 2010-01-29 15:49:32.000000000 -0500 +++ addresses_customize/addresses.module 2010-07-02 14:22:50.064000000 -0400 @@ -188,9 +188,10 @@ function addresses_elements() { * Array. Form fields */ function addresses_elements_process($element, $edit, $form_state, $form) { + $settings = $form['#field_info'][$element['#field_name']]; $fields = $element['#fields']; $values = $element['#default_value']; - + // Reset the required fields based on the general required value if (empty($element['#required'])) { foreach ($fields as $field => $required) { @@ -216,13 +217,30 @@ function addresses_elements_process($ele // Include the main module file module_load_include('inc', 'addresses'); + + // Update the $values array to reflect element visibility settings per the + // new global settings options. It would be cleaner to simply update the + // form generation function, but this method will be compatible with extra + // contrib fields. + foreach(array_keys($fields) as $ftype) { + if (!empty($settings[$ftype . '_select'])) { + $fields[$ftype] = $settings[$ftype . '_select']; + } + } + + // Invoke addressfieldapi to allow modules to add their own addresses fields. + // Then update these fields with the global settings for each field instance. + $extra = module_invoke_all('addressesfieldapi', 'form', $fields, $values); + foreach (element_children($extra) as $eName) { + $extra[$eName]['#title'] = t($settings[$eName . '_label']); + $extra[$eName]['#description'] = t($settings[$eName . '_desc']); + if ('textfield' == $extra[$eName]['#type']) { + $extra[$eName]['#size'] = $settings[$eName . '_size']; + } + } - // Get other fields from hook_addressesfieldsapi - $element = array_merge( - $element, - module_invoke_all('addressesfieldapi', 'form', $fields, $values) - ); - + // Add the extra fields to the element and return it. + $element = array_merge($element, $extra); return $element; } diff -urp addresses/addresses.settings.inc addresses_customize/addresses.settings.inc --- addresses/addresses.settings.inc 2010-02-09 18:18:40.000000000 -0500 +++ addresses_customize/addresses.settings.inc 2010-07-02 13:50:47.360875000 -0400 @@ -14,7 +14,7 @@ */ function _addresses_addressesfieldapi_form($fields = array(), $values = array()) { $field_weights = variable_get('addresses_field_weight', array()); - + // Let users select if the address is the primary if (!empty($fields['is_primary'])) { $form['is_primary'] = array( @@ -487,17 +487,38 @@ function _addresses_settings_fields($fie foreach ($ftypes as $ftype => $field) { // List of address fields - $form['addresses'][$ftype] = array( - '#default_value' => !isset($field_values[$ftype]) ? $field['display'] : $field_values[$ftype], + $form['addresses'][$ftype][$ftype . '_select'] = array( + '#type' => 'select', '#options' => array( - ADDRESSES_FIELD_NONE => '', - ADDRESSES_FIELD_SHOW => '', - ADDRESSES_FIELD_REQUIRED => '', - ADDRESSES_FIELD_HIDDEN => '', + ADDRESSES_FIELD_NONE => 'None', + ADDRESSES_FIELD_SHOW => 'Normal', + ADDRESSES_FIELD_REQUIRED => 'Required', + ADDRESSES_FIELD_HIDDEN => 'Hidden', ), - '#title' => $field['title'], - '#type' => 'radios', + '#default_value' => !isset($field_values[$ftype . '_select']) ? $field['display'] : $field_values[$ftype . '_select'], + ); + + // Add form elements to allow the customization of field element labels + // descriptions, and sizes. + $form['addresses'][$ftype][$ftype . '_label'] = array( + '#type' => 'textfield', + '#size' => 20, + '#maxlength' => 255, + '#default_value' => !isset($field_values[$ftype . '_label']) ? $field['title'] : $field_values[$ftype . '_label'], + ); + $form['addresses'][$ftype][$ftype . '_desc'] = array( + '#type' => 'textfield', + '#size' => 60, + '#maxlength' => 255, + '#default_value' => !isset($field_values[$ftype . '_desc']) ? $field['description'] : $field_values[$ftype . '_desc'], + ); + $form['addresses'][$ftype][$ftype . '_size'] = array( + '#type' => 'textfield', + '#size' => 2, + '#maxlength' => 3, + '#default_value' => !isset($field_values[$ftype . '_size']) ? $field['length'] : $field_values[$ftype . '_size'], ); + $form['addresses'][$ftype]['#title'] = $field['title']; } $form['addresses']['#theme'] = 'addresses_settings_fields'; @@ -593,18 +614,18 @@ function theme_addresses_elements($eleme */ function theme_addresses_settings_fields($form) { foreach (element_children($form) as $ftype) { - $field = $form[$ftype]; + $title = $rows[] = array( - $field['#title'], - drupal_render($field[0]), - drupal_render($field[1]), - drupal_render($field[2]), - drupal_render($field[3]), + $form[$ftype]['#title'], + drupal_render($form[$ftype][$ftype . '_select']), + drupal_render($form[$ftype][$ftype . '_size']), + drupal_render($form[$ftype][$ftype . '_label']), + drupal_render($form[$ftype][$ftype . '_desc']), ); unset($form[$ftype]); } - $header = array(t('Field'), t('None'), t('Normal'), t('Required'), t('Hidden')); + $header = array(t('Field'), t('Visibility'), t('Size'), t('Label'), t('Help text')); $output = theme('table', $header, $rows); $output .= drupal_render($form); diff -urp addresses/addresses_cck/addresses_cck.module addresses_customize/addresses_cck/addresses_cck.module --- addresses/addresses_cck/addresses_cck.module 2010-01-30 18:44:12.000000000 -0500 +++ addresses_customize/addresses_cck/addresses_cck.module 2010-07-02 12:50:19.001500000 -0400 @@ -142,8 +142,10 @@ function addresses_cck_field_settings($o // With the fields and their values correctly assigned, // its time to recover only the field name and its value // and save it - foreach (array_keys($form['addresses']) as $field) { - $fields[] = $field; + foreach (array_keys($form['addresses']) as $ftype) { + foreach(element_children($form['addresses'][$ftype]) as $field) { + $fields[] = $field; + } } return $fields; @@ -191,7 +193,7 @@ function addresses_cck_field_settings($o */ function _addresses_cck_field_validate(&$form, &$form_state) { foreach (array_keys($form_state['values']['columns']) as $ftype) { - if ($form_state['values'][$ftype] == ADDRESSES_FIELD_REQUIRED) { + if ($form_state['values'][$ftype . '_select'] == ADDRESSES_FIELD_REQUIRED) { form_set_value($form['field']['required'], TRUE, $form_state); return; }