You are here

function composed_field_field_formatter_view in Composed Field 7

Implements hook_field_formatter_view().

File

./composed_field.module, line 869
Defines composed field type.

Code

function composed_field_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $element = array();
  $widget_settings = $instance['widget']['settings'];
  $number_of_subfields = $widget_settings['number_of_subfields'];
  if (!$items) {
    return;
  }

  // Set the default value for hidden, format, prefix and suffix.
  $display_options = _composed_field_formatter_info_unserialize_display_options($settings['display_options'], $number_of_subfields);
  foreach ($items as $delta => $item) {
    $item = unserialize($item['composed']);
    for ($subfield = 1; $subfield <= $number_of_subfields; $subfield++) {
      if ($display_options['hidden'][$subfield]) {
        $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 = $instance['widget']['settings'][$subfield]['select']['allowed_values'];
          $item[$subfield] = empty($allowed_values[$item[$subfield]]) ? $item[$subfield] : $allowed_values[$item[$subfield]];
        }
        $item[$subfield] = $display_options['format'][$subfield] == '_none' ? check_plain($item[$subfield]) : check_markup($item[$subfield], $display_options['format'][$subfield]);

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

        // theme_fieldset() doesn't handle '#collapsible', '#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 'composed_field_unformatted_list':
      foreach ($items as $delta => $item) {
        $element[$delta] = array(
          '#display' => $display,
          '#item' => $item,
          '#theme' => 'composed_field',
        );
      }
      break;
    case 'composed_field_html_list':
      foreach ($items as $item) {
        $list_items[] = theme('composed_field', array(
          '#display' => $display,
          '#item' => $item,
          '#theme' => 'composed_field',
        ));
      }
      $element[0] = array(
        '#theme' => 'item_list',
        '#type' => $settings['list_type'],
        '#items' => $list_items,
      );
      break;
    case 'composed_field_dialog':
      $element[0] = array(
        '#theme' => 'composed_field_dialog',
        '#items' => $items,
      );
      break;
    case 'composed_field_table':
      foreach ($items as $delta => $item) {
        $row = array();
        if ($settings['table']['number_column']) {
          $row[] = ++$delta;
        }
        foreach ($item as $subfield => $subfield_value) {
          $row[] = $item[$subfield];
        }
        $rows[] = $row;
      }
      $header = array();
      if (unserialize($settings['table']['column_label']) !== FALSE) {
        $settings['table']['column_label'] = unserialize($settings['table']['column_label']);
      }
      else {
        $settings['table']['column_label'] = array();
        for ($subfield = 1; $subfield <= $number_of_subfields; $subfield++) {
          $settings['table']['column_label'][$subfield] = '';
        }
      }
      foreach ($settings['table']['column_label'] as $subfield => $subfield_value) {
        if ($settings['table']['column_label'][$subfield]) {
          if ($settings['table']['number_column']) {
            $header[] = t('№');
          }
          $header[] = $settings['table']['column_label'][$subfield];
        }
      }

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