You are here

function theme_fel_fields_collection_table in Form element layout 7

Theme replacement for 'field_collection_table_multiple_value_fields'.

Which again is an override for field_multiple_value_form.

See also

theme_field_collection_table_multiple_value_fields()

File

modules/fel_fields/fel_fields.theme.inc, line 50
Theme replacement functions for Form element layout fields.

Code

function theme_fel_fields_collection_table($variables) {
  $element = $variables['element'];
  if (isset($element['#cardinality']) && ($element['#cardinality'] > 1 || $element['#cardinality'] == FIELD_CARDINALITY_UNLIMITED)) {
    $settings = isset($element['#instance']['display']['default']['settings']) ? $element['#instance']['display']['default']['settings'] : array(
      'csscolrow' => FALSE,
      'cssfield' => FALSE,
    );
    $table_id = drupal_html_id($element['#field_name'] . '_values');
    $order_class = $element['#field_name'] . '-delta-order';
    $required = !empty($element['#required']) ? theme('form_required_marker', $variables) : '';
    $draggable = empty($element['#custom_settings']['nodragging']);
    $rows = array();
    $rown = 0;

    // Sort items according to '_weight' (needed when the form comes back after
    // preview or failed validation).
    $items = array();
    foreach (element_children($element) as $key) {
      if (!isset($element[$key]['#entity_type'])) {
        if ($key === 'add_more') {
          $add_more_button =& $element[$key];
        }
      }
      else {
        $items[] =& $element[$key];
      }
    }
    usort($items, '_field_sort_items_value_helper');
    $header = $draggable ? array(
      array(
        'data' => '',
        'class' => '',
      ),
    ) : array();

    // Add the items as table rows.
    foreach ($items as $key => $item) {
      uasort($item, 'element_sort');
      $item['_weight']['#attributes']['class'] = array(
        $order_class,
      );
      $rown++;
      $coln = 0;
      $cells = array();
      if ($draggable) {
        $classes = array(
          'field-multiple-drag',
          'field_body',
        );
        if (isset($settings['cssrowcol']) && $settings['cssrowcol']) {
          $classes = array_merge($classes, array(
            'r' . $rown,
            'c1',
            'r' . $rown . '-c1',
          ));
        }
        if (isset($settings['cssfield']) && $settings['cssfield']) {
          $classes = array_merge($classes, array(
            'drag_r' . $rown . '_' . $element['#field_name'],
            'td_drag',
            'drag_' . $element['#field_name'],
          ));
        }
        $cells[] = array(
          'data' => '',
          'class' => $classes,
        );
      }
      foreach (element_children($item) as $field_name) {
        $coln++;
        if ($draggable || $field_name != '_weight') {
          $classes = array(
            'col-' . strtr($field_name, '_', '-'),
          );

          // Only add the header once.
          if ($key == 0) {
            $classes[] = 'field-label';
            if (isset($settings['cssrowcol']) && $settings['cssrowcol']) {
              $classes = array_merge($classes, array(
                'h1',
                'c' . $coln,
                'h1-c' . $coln,
              ));
            }
            if (isset($settings['cssfield']) && $settings['cssfield']) {
              $classes = array_merge($classes, array(
                'h1_' . $field_name,
                'th_' . $field_name,
              ));
            }
            $header[] = array(
              'data' => '<label>' . t('!title', array(
                '!title' => _field_collection_table_get_title($item[$field_name]),
              )) . '</label>',
              'class' => $classes,
            );
          }
          else {
            $classes[] = 'field-body';
            if (isset($settings['cssrowcol']) && $settings['cssrowcol']) {
              $classes = array_merge($classes, array(
                'r' . $rown,
                'c' . $coln,
                'r' . $rown . '-c' . $coln,
              ));
            }
            if (isset($settings['cssfield']) && $settings['cssfield']) {
              $classes = array_merge($classes, array(
                'r' . $rown . '_' . $field_name,
                'td_' . $field_name,
              ));
            }
          }
          $cells[] = array(
            'data' => $item[$field_name],
            'class' => $classes,
          );
        }
      }
      $row = array(
        'data' => $cells,
      );
      if ($draggable) {
        $row['class'] = array(
          'draggable',
        );
      }
      $rows[] = $row;
    }
    $element['#title_classes'][] = 'field-label';
    $items['title'] = '<label for="' . $table_id . '" class="' . implode(' ', $element['#title_classes']) . '">';
    $items['title'] .= t('!title !required', array(
      '!title' => $element['#title'],
      '!required' => $required,
    ));
    $items['title'] .= '</label>';
    if (!empty($element['#description'])) {
      $items['description'] = theme('fel_form_element_description', $variables);
    }
    $items['children'] = theme('table', array(
      'header' => $header,
      'rows' => $rows,
      'attributes' => array(
        'id' => $table_id,
        'class' => array(
          'field-multiple-table',
        ),
      ),
    ));
    $output = '<div class="form-item">';
    $output .= fel_order_output($element, $items);
    $output .= '</div>';
    if (isset($add_more_button)) {
      $output .= drupal_render($add_more_button) . '<div class="clearfix"></div>';
    }
    if ($draggable) {
      drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class);
    }
  }
  else {
    foreach (element_children($element) as $key) {
      $output .= drupal_render($element[$key]);
    }
  }
  return $output;
}