You are here

function theme_content_multigroup_node_form in Content Construction Kit (CCK) 6.3

Theme an individual form element.

Combine multiple values into a table with drag-n-drop reordering.

File

modules/content_multigroup/content_multigroup.node_form.inc, line 867
Implementation of node edit functions for content multigroup.

Code

function theme_content_multigroup_node_form($element) {
  $group_name = $element['#group_name'];
  $groups = fieldgroup_groups($element['#type_name']);
  $group = $groups[$group_name];
  $group_multiple = $group['settings']['multigroup']['multiple'];
  $group_fields = $element['#group_fields'];
  $table_id = $element['#group_name'] . '_values';
  $table_class = 'content-multiple-table';
  $order_class = $element['#group_name'] . '-delta-order';
  $subgroup_settings = isset($group['settings']['multigroup']['subgroup']) ? $group['settings']['multigroup']['subgroup'] : array();
  $show_label = isset($subgroup_settings['label']) ? $subgroup_settings['label'] : 'above';
  $subgroup_labels = isset($group['settings']['multigroup']['labels']) ? $group['settings']['multigroup']['labels'] : array();
  $multiple_columns = isset($group['settings']['multigroup']['multiple-columns']) ? $group['settings']['multigroup']['multiple-columns'] : 0;
  $headers = array();
  if ($group_multiple >= 1) {
    $headers[] = array(
      'data' => '',
    );
  }
  if ($multiple_columns) {
    foreach ($group_fields as $field_name => $field) {
      $required = !empty($field['required']) ? '&nbsp;<span class="form-required" title="' . t('This field is required.') . '">*</span>' : '';
      $headers[] = array(
        'data' => check_plain(t($field['widget']['label'])) . $required,
        'class' => 'content-multigroup-cell-' . str_replace('_', '-', $field_name),
      );
    }
    $table_class .= ' content-multigroup-edit-table-multiple-columns';
  }
  else {
    if ($group_multiple >= 1) {
      $headers[0]['colspan'] = 2;
    }
    $table_class .= ' content-multigroup-edit-table-single-column';
  }
  if ($group_multiple >= 1) {
    $headers[] = array(
      'data' => t('Order'),
      'class' => 'content-multiple-weight-header',
    );
    if ($group_multiple == 1) {
      $headers[] = array(
        'data' => '<span>' . t('Remove') . '</span>',
        'class' => 'content-multiple-remove-header',
      );
    }
  }
  $rows = array();
  $i = 0;
  foreach (element_children($element) as $delta => $key) {
    if (is_numeric($key)) {
      $cells = array();
      $label = $show_label == 'above' && !empty($subgroup_labels[$i]) ? theme('content_multigroup_node_label', check_plain(t($subgroup_labels[$i]))) : '';
      $element[$key]['_weight']['#attributes']['class'] = $order_class;
      if ($group_multiple >= 1) {
        $cells[] = array(
          'data' => '',
          'class' => 'content-multiple-drag',
        );
        $delta_element = drupal_render($element[$key]['_weight']);
        if ($group_multiple == 1) {
          $remove_element = drupal_render($element[$key]['_remove']);
        }
      }
      else {
        $element[$key]['_weight']['#type'] = 'hidden';
      }
      if ($multiple_columns) {
        foreach ($group_fields as $field_name => $field) {
          $cell = array(
            'data' => isset($element[$key][$field_name]) ? drupal_render($element[$key][$field_name]) : '',
            'class' => 'content-multigroup-cell-' . str_replace('_', '-', $field_name),
          );
          if (!empty($cell['data']) && !empty($element[$key][$field_name]['#description'])) {
            $cell['title'] = $element[$key][$field_name]['#description'];
          }
          $cells[] = $cell;
        }
      }
      else {
        $cells[] = $label . drupal_render($element[$key]);
      }
      if ($group_multiple >= 1) {
        $row_class = 'draggable';
        $cells[] = array(
          'data' => $delta_element,
          'class' => 'delta-order',
        );
        if ($group_multiple == 1) {
          if (!empty($element[$key]['_remove']['#value'])) {
            $row_class .= ' content-multiple-removed-row';
          }
          $cells[] = array(
            'data' => $remove_element,
            'class' => 'content-multiple-remove-cell',
          );
        }
        $rows[] = array(
          'data' => $cells,
          'class' => $row_class,
        );
      }
      else {
        $rows[] = array(
          'data' => $cells,
        );
      }
    }
    $i++;
  }
  drupal_add_css(drupal_get_path('module', 'content_multigroup') . '/content_multigroup.css');
  $output = theme('table', $headers, $rows, array(
    'id' => $table_id,
    'class' => $table_class,
  ));
  $output .= drupal_render($element[$group_name . '_add_more']);

  // Enable drag-n-drop only if the group really allows multiple values.
  if ($group_multiple >= 1) {
    drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class);
    drupal_add_js(drupal_get_path('module', 'content') . '/js/content.node_form.js');
  }
  return $output;
}