You are here

function views_fieldsets_preprocess_views_view_table in Views fieldsets 7.2

Implements template_preprocess_views_view_table().

Preprocessor for Views' row style template.

File

./views_fieldsets.module, line 87
Hooks, helpers and theming for the Views Fieldsets module.

Code

function views_fieldsets_preprocess_views_view_table(&$vars) {
  $view = $vars['view'];
  $display_handler = $view->display_handler;
  $fields = $display_handler
    ->get_option('fields');
  $tmp_vars = $vars;
  $tmp_vars['options']['default_field_elements'] = TRUE;
  foreach ($view->result as $index => $row) {
    $view->row_index = $index;
    template_preprocess_views_view_fields($tmp_vars);
    $vars['field_fields'][$index] = $tmp_vars['fields'];
  }
  $fieldsets = views_fieldsets_field_options_to_fieldsets_1d($fields);
  if ($fieldsets && array_filter($fieldsets)) {

    // Fix separators.
    $last_in_fieldset = FALSE;
    foreach ($vars['fields'] as $id => $object) {
      $in_fieldset = views_fieldsets_field_is_in_fieldset($id, $display_handler);
      if (!empty($object->separator) && !$in_fieldset && $last_in_fieldset) {
        $object->separator = '';
      }
      $last_in_fieldset = $in_fieldset;
    }

    // Add collapse.js for actual fieldsets.
    drupal_add_js('misc/collapse.js');
    drupal_add_js('misc/form.js');
    $hierarchy = views_fieldsets_hierarchy_info($display_handler, $fieldsets);
    $vars['hierarchy'] = $hierarchy;

    // Remove fieldsetted fields' header.
    foreach (array_filter($fieldsets) as $field_name => $fieldset_name) {
      unset($vars['header'][$field_name]);
    }
    foreach ($vars['rows'] as $index => $row) {
      $view->row_index = $index;
      $new_row = array();
      foreach ($hierarchy['tree'] as $field_name => $info_field) {
        if (isset($vars['fields'][$field_name])) {
          if (views_fieldsets_field_is_fieldset($field_name, $display_handler)) {
            $sub_vars = $vars;

            // Fake vars.
            $sub_vars['fields'][$field_name] = (object) array(
              'handler' => $view->display_handler->handlers['field'][$field_name],
              'label' => $view->display_handler->handlers['field'][$field_name]->options['label'],
            );
            $sub_vars['fieldset_field'] = $field_name;

            // Saving current row index.
            $sub_vars['row_index'] = $index;

            // Recursive render of fieldsets.
            $new_row[$field_name] = _views_fieldsets_render__table($info_field, $sub_vars);
          }
          else {

            // Render single field.
            if (isset($row[$field_name])) {
              $new_row[$field_name] = $row[$field_name];
            }
          }
        }
      }

      // Save new, rendered, flat row into old row.
      $vars['rows'][$index] = $new_row;
    }
  }
}