You are here

function _ds_field_ui_core_fields in Display Suite 7.2

Same name and namespace in other branches
  1. 8.4 includes/field_ui.inc \_ds_field_ui_core_fields()
  2. 8.2 includes/field_ui.inc \_ds_field_ui_core_fields()
  3. 8.3 includes/field_ui.inc \_ds_field_ui_core_fields()

Alter the core field on the the Field UI form.

Parameters

$entity_type: The name of the entity type.

$bundle: The name of the bundle

$view_mode: The name of the view_mode

$form: A collection of form properties.

$form_state: A collection of form_state properties.

1 call to _ds_field_ui_core_fields()
ds_field_ui_fields_layouts in includes/ds.field_ui.inc
Adds the Display Suite fields and layouts to the form.

File

includes/ds.field_ui.inc, line 2224
Field UI functions for Display Suite.

Code

function _ds_field_ui_core_fields($entity_type, $bundle, $view_mode, &$form, &$form_state) {
  $entity_type = $form['#entity_type'];
  $bundle = $form['#bundle'];
  $view_mode = $form['#view_mode'];

  // Gather type information.
  $instances = field_info_instances($entity_type, $bundle);
  $field_types = field_info_field_types();
  $extra_fields = field_info_extra_fields($entity_type, $bundle, 'display');
  $table =& $form['fields'];

  // Regions for fields.
  $field_regions = array();
  if (isset($form['#ds_layout']->settings['fields'])) {
    $field_regions = $form['#ds_layout']->settings['fields'];
  }

  // Field rows.
  foreach ($instances as $key => $instance) {

    // Don't show summary or cogwheel in hidden region.
    if (_ds_field_ui_check_hidden_region($key, $form_state, $field_regions)) {
      $table[$key]['settings_summary']['#markup'] = '';
      $table[$key]['settings_edit'] = array();
      continue;
    }
    $field = field_info_field($instance['field_name']);
    $display = $instance['display'][$view_mode];

    // Check the currently selected formatter, and merge persisted values for
    // formatter settings.
    if (isset($form_state['values']['fields'][$key]['type'])) {
      $formatter_type = $form_state['values']['fields'][$key]['type'];
    }
    else {
      $formatter_type = $display['type'];
    }
    $settings = $display['settings'];
    if (isset($form_state['formatter_settings'][$key])) {
      $settings = array_merge($settings, $form_state['formatter_settings'][$key]);
    }
    $settings += field_info_formatter_settings($formatter_type);

    // Import field settings and merge with Field API settings.
    if (!isset($form_state['formatter_settings'][$key]) && !empty($form['#field_settings'][$key]['formatter_settings']['ft'])) {
      $form_state['formatter_settings'][$key] = $settings;
      $form_state['formatter_settings'][$key]['ft'] = $form['#field_settings'][$key]['formatter_settings']['ft'];
    }

    // Change default value or Field API format, so we can change the right
    // settings form when clicking on the cogwheel.
    $form['fields'][$key]['format']['type']['#default_value'] = $formatter_type;
    $instance['display'][$view_mode]['type'] = $formatter_type;
    $formatter = field_info_formatter_types($formatter_type);
    $instance['display'][$view_mode]['module'] = $formatter['module'];
    $instance['display'][$view_mode]['settings'] = $settings;

    // Base button element for the various formatter settings actions.
    $base_button = array(
      '#submit' => array(
        'field_ui_display_overview_multistep_submit',
      ),
      '#ajax' => array(
        'callback' => 'field_ui_display_overview_multistep_js',
        'wrapper' => 'field-display-overview-wrapper',
        'effect' => 'fade',
      ),
      '#field_name' => $key,
    );
    if ($form_state['formatter_settings_edit'] == $key) {
      $formatter_type = $form_state['complete form']['fields'][$key]['format']['type']['#default_value'];
      $formatter = field_info_formatter_types($formatter_type);
      $instance['display'][$view_mode]['type'] = $formatter_type;
      $instance['display'][$view_mode]['module'] = $formatter['module'];
      $instance['display'][$view_mode]['settings'] = $settings + field_info_formatter_settings($formatter_type);
      $function = $formatter['module'] . '_field_formatter_settings_form';

      // Add the default formatter settings if any.
      $settings_form = array();
      if (function_exists($function)) {
        $settings_form = $function($field, $instance, $view_mode, $form, $form_state);
      }

      // Add the field templates form when needed
      if (module_exists('ds_extras') && variable_get('ds_extras_field_template', FALSE)) {
        $context = array(
          'instance' => $instance,
          'view_mode' => $view_mode,
        );

        // Load the form
        module_load_include('inc', 'ds_extras', 'includes/ds_extras.admin');
        if (!is_array($settings_form)) {
          $settings_form = array();
        }
        ds_extras_field_template_settings_form($settings_form, $form_state, $context);
      }

      // Allow other modules to alter the formatter settings form.
      $context = array(
        'module' => $formatter['module'],
        'formatter' => $formatter,
        'field' => $field,
        'instance' => $instance,
        'view_mode' => $view_mode,
        'form' => $form,
        'form_state' => $form_state,
      );
      drupal_alter('field_formatter_settings_form', $settings_form, $context);
      if ($settings_form) {
        $table[$key]['format']['#cell_attributes'] = array(
          'colspan' => 3,
        );
        $table[$key]['format']['settings_edit_form'] = array(
          '#type' => 'container',
          '#attributes' => array(
            'class' => array(
              'field-formatter-settings-edit-form',
            ),
          ),
          '#parents' => array(
            'fields',
            $key,
            'settings_edit_form',
          ),
          'label' => array(
            '#markup' => t('Format settings:') . ' <span class="formatter-name">' . $formatter['label'] . '</span>',
          ),
          'settings' => $settings_form,
          'actions' => array(
            '#type' => 'actions',
            'save_settings' => $base_button + array(
              '#type' => 'submit',
              '#name' => $key . '_formatter_settings_update',
              '#value' => t('Update'),
              '#op' => 'update',
            ),
            'cancel_settings' => $base_button + array(
              '#type' => 'submit',
              '#name' => $key . '_formatter_settings_cancel',
              '#value' => t('Cancel'),
              '#op' => 'cancel',
              // Do not check errors for the 'Cancel' button, but make sure we
              // get the value of the 'formatter type' select.
              '#limit_validation_errors' => array(
                array(
                  'fields',
                  $key,
                  'type',
                ),
              ),
            ),
          ),
        );
        $table[$key]['#attributes']['class'][] = 'field-formatter-settings-editing';
        $table[$key]['format']['type']['#attributes']['class'] = array(
          'element-invisible',
        );
      }
    }
    else {
      $summary = module_invoke($formatter['module'], 'field_formatter_settings_summary', $field, $instance, $view_mode);

      // Allow other modules to alter the formatter summary.
      $context = array(
        'module' => $formatter['module'],
        'formatter' => $formatter,
        'field' => $field,
        'instance' => $instance,
        'view_mode' => $view_mode,
      );
      drupal_alter('field_formatter_settings_summary', $summary, $context);
      if (module_exists('ds_extras') && variable_get('ds_extras_field_template', FALSE)) {
        module_load_include('inc', 'ds_extras', 'includes/ds_extras.admin');

        // Field template summary
        $functions = module_invoke_all('ds_field_theme_functions_info');
        $default_field_function = variable_get('ft-default', 'theme_field');
        $field_function = isset($form_state['formatter_settings'][$key]['ft']['func']) ? $form_state['formatter_settings'][$key]['ft']['func'] : $default_field_function;
        if (!empty($summary)) {
          $summary .= '<br />';
        }
        $summary .= 'Field template: ' . check_plain($functions[$field_function]) . '<br />';
      }
      if (!empty($summary)) {
        $table[$key]['settings_summary'] = array();
        $table[$key]['settings_edit'] = array();
        $table[$key]['settings_summary'] = array(
          '#markup' => '<div class="field-formatter-summary">' . $summary . '</div>',
          '#cell_attributes' => array(
            'class' => array(
              'field-formatter-summary-cell',
            ),
          ),
        );

        // Render the other part of the summary
        ds_field_row_form_format_summary_construct($table, $key);
      }
    }
  }
}