You are here

function _field_collection_table_column_mode in Field Collection Table 7

Helper function to build the table in column mode.

1 call to _field_collection_table_column_mode()
field_collection_table_field_formatter_view in ./field_collection_table.module
Implements hook_field_formatter_view().

File

./field_collection_table.module, line 58
Module implementing a field-collection table formatter.

Code

function _field_collection_table_column_mode(&$element, $settings, $entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $view_mode = !empty($display['settings']['view_mode']) ? $display['settings']['view_mode'] : 'default';
  $header = array();
  $field_names = array();
  foreach (field_info_instances('field_collection_item', $field['field_name']) as $field_collection_item) {
    $item_view_mode = !empty($field_collection_item['display'][$view_mode]) ? $view_mode : 'default';
    if ($field_collection_item['display'][$item_view_mode]['type'] !== 'hidden') {
      $weight = $field_collection_item['display'][$item_view_mode]['weight'];
      $field_names[$weight] = $field_collection_item['field_name'];
      if ($field_collection_item['display'][$item_view_mode]['label'] !== 'hidden') {
        $header[$weight] = array(
          'data' => module_exists('i18n_field') ? i18n_field_translate_property($field_collection_item, 'label') : $field_collection_item['label'],
          'class' => drupal_html_class($field_names[$weight]),
        );
      }
      else {
        $header[$weight] = '';
      }
    }
  }
  if (module_exists('ds')) {
    $fields_ds = ds_get_fields('field_collection_item');
    $fields_ds_settings = ds_get_field_settings('field_collection_item', $field['field_name'], $view_mode);
    foreach ($fields_ds_settings as $name => $ds_settings) {
      if (isset($fields_ds[$name])) {
        $weight = $ds_settings['weight'];
        $field_names[$weight] = $name;
        $header[$weight] = array(
          'data' => $ds_settings['label'] !== 'hidden' ? $fields_ds[$name]['title'] : NULL,
          'class' => drupal_html_class($name),
        );
      }
      elseif (in_array($name, $field_names)) {
        $weight = array_search($name, $field_names);
      }

      // Allow to override field label using DS field format settings.
      if (isset($weight, $ds_settings['formatter_settings']['ft']['lb'])) {
        $header[$weight]['data'] = t(check_plain($ds_settings['formatter_settings']['ft']['lb']));
      }
    }
  }
  ksort($header);
  ksort($field_names);
  $rows = array();
  foreach ($items as $delta => $item) {
    $field_collection = field_collection_field_get_entity($item);
    if (empty($field_collection)) {
      continue;
    }
    $view = $field_collection
      ->view($view_mode);
    $content = $view['field_collection_item'][$field_collection
      ->identifier()];
    $column = array();
    foreach ($field_names as $field_name) {
      $cell = array(
        'class' => drupal_html_class($field_name),
        'data' => array(),
      );
      if (empty($contents[$field_name])) {
        $cell['data'] = array(
          '#markup' => '<span class="empty-field"></span>',
          '#empty' => TRUE,
        );
      }
      else {
        $cell['data'] = $content[$field_name];
        $cell['data-title'] = $content[$field_name]['#title'];
      }
      $column[] = $cell;
    }
    $links = array(
      '#theme' => 'links',
      '#theme_wrapper' => 'item_list',
      '#attributes' => array(
        'class' => array(
          'field-collection-view-links',
        ),
      ),
    );
    foreach (array(
      'edit',
      'delete',
    ) as $op) {
      if (!empty($settings[$op]) && !(module_exists('field_permissions') && !user_access($op . ' ' . $field['field_name'])) && entity_access($op === 'edit' ? 'update' : $op, 'field_collection_item', $field_collection)) {
        $links['#links'][$op] = array(
          'title' => t($settings[$op]),
          'href' => $field_collection
            ->path() . '/' . $op,
          'query' => drupal_get_destination(),
        );
        $header['operations'] = t('Operations');
      }
    }
    if (!empty($links['#links'])) {
      $column[] = array(
        'data' => $links,
        'class' => 'field-operations',
      );
    }
    $rows[] = array(
      'data' => $column,
      'class' => array(
        'field-collection-item',
      ),
    );
  }

  // Remove header if all labels are hidden.
  if (!array_filter($header)) {
    $header = array();
  }
  $element[0] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#caption' => !empty($settings['caption']) ? t($settings['caption']) : NULL,
    '#attributes' => array(
      'class' => array(
        'field-collection-table-view',
        drupal_clean_css_identifier('view-mode-' . $view_mode),
      ),
    ),
  );
  if (!empty($settings['empty'])) {
    $element[0]['#theme'] = 'table__field_collection_table';
    $element[0]['#settings']['empty'] = TRUE;
  }
  return $element;
}