You are here

function custom_formatters_engine_formatter_preset_settings_form in Custom Formatters 7.2

Settings form callback for Custom Formatters Formatter preset engine.

Parameters

array $form: The form api array.

array $form_state: The form state array.

object $item: The Custom Formatter object.

1 string reference to 'custom_formatters_engine_formatter_preset_settings_form'
custom_formatters_custom_formatters_engine_info in includes/custom_formatters.inc
Implements hook_custom_formatters_engine().

File

engines/formatter_preset.inc, line 35
Formatter preset engine for Custom Formatters modules.

Code

function custom_formatters_engine_formatter_preset_settings_form(&$form, $form_state, $item) {

  // Turn code field into nested fields.
  $item->code = unserialize($item->code);
  $form['code'] = array(
    '#type' => 'container',
    '#tree' => TRUE,
  );

  // Build formatters list.
  $field_type = isset($form_state['values']['field_types']) ? $form_state['values']['field_types'] : $item->field_types;
  $options = array();
  $formatters = field_info_formatter_types();
  foreach ($formatters as $formatter_name => $formatter) {
    if (in_array($field_type, $formatter['field types'])) {
      $options[$formatter_name] = $formatter['label'];
    }
  }
  $form['code']['formatter'] = array(
    '#title' => t('Formatter'),
    '#type' => 'select',
    '#options' => $options,
    '#default_value' => isset($item->code['formatter']) ? $item->code['formatter'] : '',
    '#ajax' => array(
      'callback' => 'custom_formatters_export_ui_form_js',
      'wrapper' => 'engine-wrapper',
    ),
  );

  // Get currently selected formatter.
  $formatter_name = isset($form_state['values']['code']['formatter']) ? $form_state['values']['code']['formatter'] : $form['code']['formatter']['#default_value'];
  if (!isset($form['code']['formatter']['#options'][$formatter_name])) {
    $formatter_name = key($form['code']['formatter']['#options']);
  }
  $formatter = $formatters[$formatter_name];

  // Formatter settings.
  $form['code']['settings'] = array(
    '#tree' => TRUE,
  );
  $function = "{$formatter['module']}_field_formatter_settings_form";
  if (!empty($formatter['settings']) && function_exists($function)) {
    $view_mode = '_custom_display';
    $field = field_info_field($field_type);
    $instance['entity_type'] = isset($form['preview']['entity_type']['#default_value']) ? $form['preview']['entity_type']['#default_value'] : key($form['preview']['entity_type']['#options']);
    $instance['bundle'] = isset($form['preview']['bundle']['#default_value']) ? $form['preview']['bundle']['#default_value'] : key($form['preview']['bundle']['#options']);
    $instance['display'][$view_mode] = array(
      'type' => $formatter_name,
      'settings' => isset($item->code['settings']) ? $item->code['settings'] : $formatter['settings'],
      'module' => $formatter['module'],
    );
    $formatter_settings = $function($field, $instance, $view_mode, $form, $form_state);
    if (is_array($formatter_settings) && !empty($formatter_settings)) {
      $form['code']['settings'] += $formatter_settings;
    }
  }
}