You are here

function _field_collection_table_row_mode in Field Collection Table 7

Helper function to build the table in row mode.

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

File

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

Code

function _field_collection_table_row_mode(&$element, $settings, $entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $view_mode = !empty($display['settings']['view_mode']) ? $display['settings']['view_mode'] : 'default';
  $labels = 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'];
      $labels[$field_collection_item['field_name']] = module_exists('i18n_field') ? i18n_field_translate_property($field_collection_item, 'label') : $field_collection_item['label'];
    }
  }
  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'];
        $labels[$name] = $ds_settings['label'] !== 'hidden' ? $fields_ds[$name]['title'] : NULL;
        $field_names[$weight] = $name;
      }

      // Allow to override field label using DS field format settings.
      if (isset($weight, $ds_settings['formatter_settings']['ft']['lb'])) {
        $labels[$name] = t(check_plain($ds_settings['formatter_settings']['ft']['lb']));
      }
    }
  }
  ksort($field_names);
  $header = array();
  if ($settings['header_column'] !== 'none') {
    $header = array(
      array(
        'class' => array(
          'field-label',
        ),
        'data' => $labels[$settings['header_column']],
      ),
    );
  }
  $rows = array();
  foreach ($items as $delta => $item) {
    $field_collection = field_collection_field_get_entity($item);
    if (empty($field_collection)) {
      continue;
    }
    $view = $field_collection
      ->view();
    $content = $view['field_collection_item'][$field_collection
      ->identifier()];
    foreach ($field_names as $field_name) {
      if (isset($content[$field_name])) {
        $content[$field_name]['#label_display'] = 'hidden';
      }
      else {
        $content[$field_name] = array(
          '#markup' => '<span class="empty-field"></span>',
          '#empty' => TRUE,
        );
      }
      if ($settings['header_column'] === $field_name) {
        unset($labels[$field_name]);
        $header[] = array(
          'data' => $content[$field_name],
        );
        continue;
      }
      $rows[$field_name]['data'][$delta] = array(
        'data' => $content[$field_name],
      );
      $rows[$field_name]['class'] = array(
        drupal_html_class($field_name),
      );
      $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]) && field_collection_item_access($op === 'edit' ? 'update' : $op, $field_collection)) {
          $links['#links'][$op] = array(
            'title' => $settings[$op],
            'href' => $field_collection
              ->path() . '/' . $op,
            'query' => drupal_get_destination(),
          );
        }
      }
      if (!empty($links['#links'])) {
        $operations[$delta] = array(
          'data' => $links,
          'class' => 'field-operations',
        );
      }
    }
  }
  foreach ($labels as $field_name => $data) {
    array_unshift($rows[$field_name]['data'], array(
      'class' => 'field-label',
      'data' => $data,
    ));
  }
  if (!empty($operations)) {
    array_unshift($operations, array(
      'class' => array(
        'field-label',
      ),
      'data' => t('Operations'),
    ));
    $rows['operations'] = array(
      'class' => array(
        'operations',
      ),
      'data' => $operations,
    );
  }
  $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;
  }
}