You are here

function theme_field_group_multiple_table_form in Field group multiple 7

Same name and namespace in other branches
  1. 7.x theme.inc \theme_field_group_multiple_table_form()

TODO implement drag & drop for order and remove item row

File

./theme.inc, line 131
Theme functions for field_group_multiple

Code

function theme_field_group_multiple_table_form($variables) {
  drupal_add_css(drupal_get_path('module', 'field_group_multiple') . '/field_group_multiple.css');
  $element = $variables['elements'];
  $items = $element['items'];
  $group = $element['#group'];
  $id = $group->identifier;
  $titles = isset($group->format_settings['instance_settings']['row_titles']) ? $group->format_settings['instance_settings']['row_titles'] : NULL;
  if ($titles) {
    $row_titles = array_map('check_plain', explode(',', $titles));
    if ($row_titles[0] == '-none-') {
      $row_titles[0] = '';
    }
  }
  $header = array();
  $rows = array();
  if ($titles) {
    $header[] = '<div class="th-title">' . $row_titles[0] . '</div>';
  }
  $weights = array();
  foreach ($group->fields as $field_name => $field_state) {
    $field_instance_state = $field_state['state']['instance'];
    $field_title = check_plain($field_instance_state['label']);
    $field_description = check_plain($field_instance_state['description']);
    $header_entry = '<div class="th-title-label">' . t($field_title) . '</div>';
    if (!empty($field_description)) {
      $header_entry .= '<div class="th-title-description">' . t($field_description) . '</div>';
    }
    $weight = $field_instance_state['widget']['weight'];
    $weights[$field_name] = $weight;

    // Cache weights for rows
    $header[$weight] = '<div class="th-title">' . $header_entry . '</div>';
  }
  ksort($header);
  foreach (element_children($items, TRUE) as $delta) {
    $field_data = $items[$delta];
    $row = array();
    if ($titles) {
      $row_title = '';
      if ($delta + 1 < count($row_titles)) {
        $row_title = $row_titles[$delta + 1];
      }
      $row[] = array(
        'data' => $row_title,
        'class' => '',
      );
    }
    foreach (element_children($field_data, TRUE) as $field_name) {
      $data = $field_data[$field_name];
      $weight = $weights[$field_name];
      $row[$weight] = array(
        'data' => drupal_render($data),
        'class' => '',
      );
    }
    ksort($row);
    $rows[] = array(
      'data' => $row,
      'class' => array(
        'row-delta-' . $delta,
      ),
    );
  }
  $wrapper_id = drupal_html_id($id . '-add-more-wrapper');
  $table_id = drupal_html_id($id . '_values');

  // TODO drag & drop and remove
  $output = '<div class="field-group-multiple-table"><div class="form-item">';
  $output .= theme('table', array(
    'header' => $header,
    'rows' => $rows,
    'attributes' => array(
      'id' => $table_id,
      'class' => array(
        'field-group-multiple-table',
      ),
    ),
  ));
  $output .= isset($element['#description']) ? '<div class="description">' . $element['#description'] . '</div>' : '';
  $output .= '</div></div>';
  return $output;
}