summaryrefslogtreecommitdiff
path: root/modules/field_ui/field_ui.admin.inc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field_ui/field_ui.admin.inc')
-rw-r--r--modules/field_ui/field_ui.admin.inc267
1 files changed, 186 insertions, 81 deletions
diff --git a/modules/field_ui/field_ui.admin.inc b/modules/field_ui/field_ui.admin.inc
index 6be92ee59..2ede71962 100644
--- a/modules/field_ui/field_ui.admin.inc
+++ b/modules/field_ui/field_ui.admin.inc
@@ -83,7 +83,7 @@ function field_ui_field_overview_form($form, &$form_state, $entity_type, $bundle
$field_types = field_info_field_types();
$widget_types = field_info_widget_types();
- $extra = field_extra_fields($entity_type, $bundle);
+ $extra_fields = field_extra_fields($entity_type, $bundle, 'form');
// Store each default weight so that we can add the 'add new' rows after them.
$weights = array();
@@ -93,7 +93,7 @@ function field_ui_field_overview_form($form, &$form_state, $entity_type, $bundle
'#entity_type' => $entity_type,
'#bundle' => $bundle,
'#fields' => array_keys($instances),
- '#extra' => array_keys($extra),
+ '#extra' => array_keys($extra_fields),
'#field_rows' => array(),
);
@@ -155,17 +155,17 @@ function field_ui_field_overview_form($form, &$form_state, $entity_type, $bundle
}
// Non-field elements.
- foreach ($extra as $name => $label) {
- $weight = $extra[$name]['weight'];
+ foreach ($extra_fields as $name => $extra_field) {
+ $weight = $extra_field['weight'];
$form[$name] = array(
'label' => array(
- '#markup' => t($extra[$name]['label']),
+ '#markup' => check_plain($extra_field['label']),
),
'name' => array(
'#markup' => $name,
),
'description' => array(
- '#markup' => isset($extra[$name]['description']) ? $extra[$name]['description'] : '',
+ '#markup' => isset($extra_field['description']) ? $extra_field['description'] : '',
),
'weight' => array(
'#type' => 'textfield',
@@ -173,10 +173,10 @@ function field_ui_field_overview_form($form, &$form_state, $entity_type, $bundle
'#size' => 3,
),
'edit' => array(
- '#markup' => isset($extra[$name]['edit']) ? $extra[$name]['edit'] : '',
+ '#markup' => isset($extra_field['edit']) ? $extra_field['edit'] : '',
),
'delete' => array(
- '#markup' => isset($extra[$name]['delete']) ? $extra[$name]['delete'] : '',
+ '#markup' => isset($extra_field['delete']) ? $extra_field['delete'] : '',
),
'hidden_name' => array(
'#type' => 'hidden',
@@ -464,8 +464,9 @@ function field_ui_field_overview_form_submit($form, &$form_state) {
$bundle = $form['#bundle'];
$admin_path = _field_ui_bundle_admin_path($entity_type, $bundle);
+ $bundle_settings = field_bundle_settings($entity_type, $bundle);
+
// Update field weights.
- $extra = array();
foreach ($form_values as $key => $values) {
if (in_array($key, $form['#fields'])) {
$instance = field_read_instance($entity_type, $key, $bundle);
@@ -476,13 +477,11 @@ function field_ui_field_overview_form_submit($form, &$form_state) {
field_update_instance($instance);
}
elseif (in_array($key, $form['#extra'])) {
- $extra[$key] = $values['weight'];
+ $bundle_settings['extra_fields']['form'][$key]['weight'] = $values['weight'];
}
}
- $extra_weights = variable_get('field_extra_weights', array());
- $extra_weights[$entity_type][$bundle] = $extra;
- variable_set('field_extra_weights', $extra_weights);
+ field_bundle_settings($entity_type, $bundle, $bundle_settings);
$destinations = array();
@@ -563,12 +562,9 @@ function field_ui_field_overview_form_submit($form, &$form_state) {
}
/**
- * Menu callback; presents a listing of fields display settings for a bundle.
- *
- * This form includes form widgets to select which fields appear in teaser and
- * full view modes, and how the field labels should be rendered.
+ * Menu callback; presents field display settings for a given view mode.
*/
-function field_ui_display_overview_form($form, &$form_state, $entity_type, $bundle, $view_modes_selector = 'basic') {
+function field_ui_display_overview_form($form, &$form_state, $entity_type, $bundle, $view_mode) {
$bundle = field_extract_bundle($entity_type, $bundle);
field_ui_inactive_message($entity_type, $bundle);
@@ -577,14 +573,14 @@ function field_ui_display_overview_form($form, &$form_state, $entity_type, $bund
// Gather type information.
$instances = field_info_instances($entity_type, $bundle);
$field_types = field_info_field_types();
- $view_modes = field_ui_view_modes_tabs($entity_type, $view_modes_selector);
+ $extra_fields = field_extra_fields($entity_type, $bundle, 'display');
$form += array(
- '#tree' => TRUE,
'#entity_type' => $entity_type,
'#bundle' => $bundle,
+ '#view_mode' => $view_mode,
'#fields' => array_keys($instances),
- '#contexts' => $view_modes_selector,
+ '#extra' => array_keys($extra_fields),
);
if (empty($instances)) {
@@ -592,85 +588,165 @@ function field_ui_display_overview_form($form, &$form_state, $entity_type, $bund
return $form;
}
- // Fields.
- $label_options = array(
+ $table = array(
+ '#theme' => 'field_ui_display_overview_table',
+ '#field_rows' => array(),
+ '#tree' => TRUE,
+ );
+
+ $field_label_options = array(
'above' => t('Above'),
'inline' => t('Inline'),
'hidden' => t('<Hidden>'),
);
+ $extra_visibility_options = array(
+ 'visible' => t('Visible'),
+ 'hidden' => t('Hidden'),
+ );
+
foreach ($instances as $name => $instance) {
- $field = field_info_field($instance['field_name']);
- $weight = $instance['widget']['weight'];
+ $display = $instance['display'][$view_mode];
- $form[$name] = array(
- 'human_name' => array('#markup' => check_plain($instance['label'])),
- 'weight' => array('#type' => 'value', '#value' => $weight),
+ $table[$name]['human_name'] = array(
+ '#markup' => check_plain($instance['label']),
);
- $defaults = $instance['display'];
+ $table[$name]['weight'] = array(
+ '#type' => 'textfield',
+ '#default_value' => $display['weight'],
+ '#size' => 3,
+ );
+ $table[$name]['hidden_name'] = array(
+ '#type' => 'hidden',
+ '#default_value' => $name,
+ );
+ $table[$name]['label'] = array(
+ '#type' => 'select',
+ '#options' => $field_label_options,
+ '#default_value' => $display['label'],
+ );
+ $field = field_info_field($instance['field_name']);
$formatter_options = field_ui_formatter_options($field['type']);
$formatter_options['hidden'] = t('<Hidden>');
- foreach ($view_modes as $view_mode) {
- $display = isset($instance['display'][$view_mode]) ? $instance['display'][$view_mode] : $instance['display']['full'];
- $form[$name][$view_mode]['label'] = array(
- '#type' => 'select',
- '#options' => $label_options,
- '#default_value' => $display['label'],
- );
- $form[$name][$view_mode]['type'] = array(
- '#type' => 'select',
- '#options' => $formatter_options,
- '#default_value' => $display['type'],
- );
+ $table[$name]['type'] = array(
+ '#type' => 'select',
+ '#options' => $formatter_options,
+ '#default_value' => $display['type'],
+ );
+ $table['#field_rows'][] = $name;
+
+ // Collect default formatters for the JS script.
+ $field_type_info = field_info_field_types($field['type']);
+ $default_formatters[$name] = $field_type_info['default_formatter'];
+ }
+
+ // Non-field elements.
+ foreach ($extra_fields as $name => $extra_field) {
+ $display = $extra_field['display'][$view_mode];
+ $table[$name]['human_name'] = array(
+ '#markup' => check_plain($extra_field['label']),
+ );
+ $table[$name]['weight'] = array(
+ '#type' => 'textfield',
+ '#default_value' => $display['weight'],
+ '#size' => 3,
+ );
+ $table[$name]['hidden_name'] = array(
+ '#type' => 'hidden',
+ '#default_value' => $name,
+ );
+ $table[$name]['type'] = array(
+ '#type' => 'select',
+ '#options' => $extra_visibility_options,
+ '#default_value' => $display['visible'] ? 'visible' : 'hidden',
+ );
+ $table['#field_rows'][] = $name;
+ }
+ $form['settings'] = $table;
+
+ // Custom display settings.
+ if ($view_mode == 'default') {
+ $form['modes'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Custom display settings'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ );
+ // Collect options and default values for the 'Custom display settings'
+ // checkboxes.
+ $options = array();
+ $default = array();
+ $entity_info = entity_get_info($entity_type);
+ $view_modes = $entity_info['view modes'];
+ $view_mode_settings = field_view_mode_settings($entity_type, $bundle);
+ foreach ($view_modes as $view_mode_name => $view_mode_info) {
+ $options[$view_mode_name] = $view_mode_info['label'];
+ if (!empty($view_mode_settings[$view_mode_name]['custom_settings'])) {
+ $default[] = $view_mode_name;
+ }
}
+ $form['modes']['view_modes_custom'] = array(
+ '#type' => 'checkboxes',
+ '#title' => t('Use custom display settings for the following contexts'),
+ '#options' => $options,
+ '#default_value' => $default,
+ );
}
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
+
+ $form['#attached']['js'][] = drupal_get_path('module', 'field_ui') . '/field_ui.js';
+ $form['#attached']['css'][] = drupal_get_path('module', 'field_ui') . '/field_ui.css';
+ drupal_add_js(array('fieldDefaultFormatters' => $default_formatters), 'setting');
+
return $form;
}
/**
- * Theme preprocess function for field_ui-display-overview-form.tpl.php.
+ * Theme preprocess function for field_ui-display-overview-table.tpl.php.
*/
-function template_preprocess_field_ui_display_overview_form(&$vars) {
- $form = &$vars['form'];
+function template_preprocess_field_ui_display_overview_table(&$vars) {
+ $elements = &$vars['elements'];
- $contexts_selector = $form['#contexts'];
- $view_modes = field_ui_view_modes_tabs($form['#entity_type'], $contexts_selector);
- $entity_info = entity_get_info($form['#entity_type']);
- $view_modes_info = $entity_info['view modes'];
- $vars['contexts'] = array();
- foreach ($view_modes as $view_mode) {
- $vars['contexts'][$view_mode] = $view_modes_info[$view_mode]['label'];
- }
+ $rows = array(
+ 'visible' => array(),
+ 'hidden' => array(),
+ );
- $order = _field_ui_overview_order($form, $form['#fields']);
- if (empty($order)) {
- $vars['rows'] = array();
- $vars['submit'] = '';
- return;
- }
- $rows = array();
- foreach ($order as $key) {
- $element = &$form[$key];
- $row = new stdClass();
- foreach (element_children($element) as $child) {
- if (array_key_exists('label', $element[$child])) {
- $row->{$child} = new stdClass();
- $row->{$child}->label = drupal_render($element[$child]['label']);
- $row->{$child}->type = drupal_render($element[$child]['type']);
- }
- else {
- $row->{$child} = drupal_render($element[$child]);
+ if (!empty($elements['#field_rows'])) {
+ drupal_add_tabledrag('field-display-overview', 'order', 'sibling', 'field-weight');
+
+ $order = _field_ui_overview_order($elements, $elements['#field_rows']);
+ foreach ($order as $key) {
+ $element = &$elements[$key];
+ $visibility = $element['type']['#value'] == 'hidden' ? 'hidden' : 'visible';
+
+ // Add target classes for the tabledrag behavior.
+ $element['weight']['#attributes']['class'][] = 'field-weight';
+ $element['hidden_name']['#attributes']['class'][] = 'field-name';
+ $element['type']['#attributes']['class'][] = 'field-formatter-type';
+ $element['type']['#attributes']['class'][] = "field-display-$visibility";
+ $element['type']['#attributes']['class'][] = "field-name-$key";
+
+ $row = new stdClass();
+ foreach (element_children($element) as $child) {
+ if (array_key_exists('label', $element[$child])) {
+ $row->{$child} = new stdClass();
+ $row->{$child}->label = drupal_render($element[$child]['label']);
+ $row->{$child}->type = drupal_render($element[$child]['type']);
+ }
+ else {
+ $row->{$child} = drupal_render($element[$child]);
+ }
}
+ $row->class = 'draggable';
+ $row->label_class = 'label-field';
+ $rows[$visibility][] = $row;
}
- $row->label_class = 'label-field';
- $rows[] = $row;
}
$vars['rows'] = $rows;
- $vars['submit'] = drupal_render_children($form);
}
/**
@@ -678,17 +754,46 @@ function template_preprocess_field_ui_display_overview_form(&$vars) {
*/
function field_ui_display_overview_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
- foreach ($form_values as $key => $values) {
- if (in_array($key, $form['#fields'])) {
- $instance = field_info_instance($form['#entity_type'], $key, $form['#bundle']);
- foreach ($instance['display'] as $view_mode => $display) {
- if (isset($values[$view_mode])) {
- $instance['display'][$view_mode] = array_merge($instance['display'][$view_mode], $values[$view_mode]);
- }
+ $entity_type = $form['#entity_type'];
+ $bundle = $form['#bundle'];
+ $view_mode = $form['#view_mode'];
+
+ // Save data for 'regular' fields.
+ foreach ($form['#fields'] as $field_name) {
+ $instance = field_info_instance($entity_type, $field_name, $bundle);
+ $instance['display'][$view_mode] = $form_values['settings'][$field_name];
+ field_update_instance($instance);
+ }
+
+ // Get current bundle settings.
+ $bundle_settings = field_bundle_settings($entity_type, $bundle);
+
+ // Save data for 'extra' fields.
+ foreach ($form['#extra'] as $name) {
+ $bundle_settings['extra_fields']['display'][$name][$view_mode] = array(
+ 'weight' => $form_values['settings'][$name]['weight'],
+ 'visible' => $form_values['settings'][$name]['type'] == 'visible',
+ );
+ }
+
+ // Save view modes data.
+ if ($view_mode == 'default') {
+ $entity_info = entity_get_info($entity_type);
+ foreach ($form_values['view_modes_custom'] as $view_mode_name => $value) {
+ // Display a message for each view mode newly configured to use custom
+ // settings.
+ if (!empty($value) && empty($bundle_settings['view_modes'][$view_mode_name]['custom_settings'])) {
+ $view_mode_label = $entity_info['view modes'][$view_mode_name]['label'];
+ $path = _field_ui_bundle_admin_path($entity_type, $bundle) . "/display/$view_mode_name";
+ drupal_set_message(t('The %view_mode mode now uses custom display settings. You might want to <a href="@url">configure them</a>.', array('%view_mode' => $view_mode_label, '@url' => url($path))));
}
- field_update_instance($instance);
+ $bundle_settings['view_modes'][$view_mode_name]['custom_settings'] = !empty($value);
}
}
+
+ // Save updated bundle settings.
+ field_bundle_settings($entity_type, $bundle, $bundle_settings);
+
drupal_set_message(t('Your settings have been saved.'));
}