You are here

function double_field_field_formatter_view in Double Field 7.2

Same name and namespace in other branches
  1. 7 double_field.module \double_field_field_formatter_view()

Implements hook_field_formatter_view().

File

./double_field.module, line 1038
Defines "Double field" field type.

Code

function double_field_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  if (!$items) {
    return;
  }
  $settings = $display['settings'];
  $i18n_context_prefix = double_field_i18n_strings_prefix($instance) . ':display-default-settings-';
  $element = array();
  foreach ($items as $delta => $item) {
    foreach (array(
      'first',
      'second',
    ) as $subfield) {
      if ($settings[$subfield]['hidden']) {
        $item[$subfield] = FALSE;
      }
      else {

        // Show value pair of allowed values on instead of their key value.
        if (isset($instance['widget']['settings'][$subfield]['select']['allowed_values'])) {
          $allowed_values = double_field_i18n_strings_translate(double_field_i18n_strings_prefix($instance) . ':widget-settings-' . $subfield . '-select-allowed_values', $instance['widget']['settings'][$subfield]['select']['allowed_values']);
          $item[$subfield] = empty($allowed_values[$item[$subfield]]) ? $item[$subfield] : $allowed_values[$item[$subfield]];
        }
        $item[$subfield] = $settings[$subfield]['format'] == '_none' ? check_plain($item[$subfield]) : check_markup($item[$subfield], $settings[$subfield]['format']);

        // Do not display prefix and suffix for empty subfields.
        if ($item[$subfield] != '') {
          $prefix = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-prefix', $settings[$subfield]['prefix']);
          $suffix = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-suffix', $settings[$subfield]['suffix']);
          $item[$subfield] = $prefix . $item[$subfield] . $suffix;
        }
      }
    }
    $items[$delta] = $item;
  }
  switch ($display['type']) {
    case 'double_field_fieldset':
      foreach ($items as $delta => $item) {
        $element[$delta] = array(
          '#title' => $item['first'],
          '#value' => $item['second'],
          '#theme' => 'fieldset',
          '#collapsible' => $settings['collapsible'],
          '#collapsed' => $settings['collapsed'],
        );

        // theme_fieldset() doesn't handle '#collapsible'
        // and '#collapsed' arguments as claimed.
        // see http://drupal.org/node/1099132
        if ($settings['collapsible']) {
          $element[$delta]['#attached'] = array(
            'js' => array(
              'misc/form.js',
              'misc/collapse.js',
            ),
          );
          $element[$delta]['#attributes'] = array(
            'class' => $settings['collapsed'] ? array(
              'collapsible',
              'collapsed',
            ) : array(
              'collapsible',
            ),
          );
        }
      }
      break;
    case 'double_field_unformatted_list':
      foreach ($items as $item) {
        $element[] = array(
          '#display' => $display,
          '#item' => $item,
          '#theme' => 'double_field',
        );
      }
      break;
    case 'double_field_html_list':
      if ($settings['list_type'] == 'dl') {
        $element[0] = array(
          '#theme' => 'double_field_definition_list',
          '#items' => $items,
        );
      }
      else {
        foreach ($items as $item) {
          $list_items[] = theme('double_field', array(
            'element' => array(
              '#display' => $display,
              '#item' => $item,
            ),
          ));
        }
        $element[0] = array(
          '#theme' => 'item_list',
          '#type' => $settings['list_type'],
          '#items' => $list_items,
        );
      }
      break;
    case 'double_field_table':
      foreach ($items as $delta => $item) {
        $row = array();
        if ($settings['table']['number_column']) {
          $row[] = ++$delta;
        }
        $row[] = $item['first'];
        $row[] = $item['second'];
        $rows[] = $row;
      }
      $header = array();
      if ($settings['table']['first']['column_label'] || $settings['table']['second']['column_label']) {
        if ($settings['table']['number_column']) {
          $header[] = double_field_i18n_strings_translate($i18n_context_prefix . 'table-number_column_label', $settings['table']['number_column_label']);
        }
        foreach (array(
          'first',
          'second',
        ) as $subfield) {
          $header[] = double_field_i18n_strings_translate($i18n_context_prefix . "table-{$subfield}-column_label", $settings['table'][$subfield]['column_label']);
        }
      }

      // Display all values in a single element.
      $element[0] = array(
        '#theme' => 'table',
        '#rows' => $rows,
        '#header' => $header,
      );
      break;
    case 'double_field_accordion':
    case 'double_field_tabs':
    case 'double_field_dialog':
      $element[0] = array(
        '#theme' => $display['type'],
        '#items' => $items,
      );
      break;
  }
  return $element;
}