You are here

class views_plugin_style_summary_taxonomy in Views Hacks 7

Same name and namespace in other branches
  1. 6 views_summary_taxonomy/views_plugin_style_summary_taxonomy.inc \views_plugin_style_summary_taxonomy

Hierarchy

Expanded class hierarchy of views_plugin_style_summary_taxonomy

1 string reference to 'views_plugin_style_summary_taxonomy'
views_summary_taxonomy_views_plugins in views_summary_taxonomy/views_summary_taxonomy.views.inc
Implementation of hook_views_plugins().

File

views_summary_taxonomy/views_plugin_style_summary_taxonomy.inc, line 3

View source
class views_plugin_style_summary_taxonomy extends views_plugin_style_summary {
  function option_definition() {
    $options = parent::option_definition();
    $options['taxonomy'] = array(
      'default' => 0,
    );
    $options['hide_zero'] = array(
      'default' => TRUE,
    );
    return $options;
  }
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    foreach (taxonomy_get_vocabularies() as $vid => $vocabulary) {
      $options[$vid] = $vocabulary->name;
    }
    $form['taxonomy'] = array(
      '#type' => 'select',
      '#default_value' => $this->options['taxonomy'],
      '#title' => t('Taxonomy'),
      '#options' => $options,
    );
    $form['hide_zero'] = array(
      '#type' => 'checkbox',
      '#default_value' => $this->options['hide_zero'],
      '#title' => t('Hide terms with zero entries'),
    );
  }
  function render() {
    $argument = $this->view->argument[$this->view->build_info['summary_level']];
    $this->terms = array();
    foreach ($this->view->result as $row) {
      $this->terms[$row->{$argument->base_alias}] = $row;
    }

    // Get the taxonomy tree. We're going to heavily modify it...
    $tree = taxonomy_get_tree($this->options['taxonomy']);

    // Reverse sort it: children at the front.
    usort($tree, array(
      $this,
      'term_depth_compare',
    ));

    // Add the tid as key.
    $tree = array_combine(array_map(array(
      $this,
      'term_tid',
    ), $tree), $tree);

    // Initialize counts as copied from view results.
    array_walk($tree, array(
      $this,
      'term_count',
    ), $argument);

    // Accumulate children counts.
    // This works without recursion because the array is sorted in reverse.
    foreach ($tree as $tid => $term) {
      foreach ($term->parents as $pid) {
        if (!$pid) {
          continue;
        }

        // parent tid = 0 means no parent
        $tree[$pid]->aggregate_count += $term->aggregate_count;
      }
    }

    // Now we're ready to render it!
    $url_options = array();
    if (!empty($this->view->exposed_raw_input)) {
      $url_options['query'] = $this->view->exposed_raw_input;
    }
    $item_list = array();
    $children = array();
    foreach ($tree as $tid => $term) {
      if (!$term->aggregate_count && $this->options['hide_zero']) {
        continue;
      }
      $args = $this->view->args;
      $args[$argument->position] = $argument
        ->summary_argument($this->terms[$tid]);
      $item = array();
      $item['data'] = l($term->name, $this->view
        ->get_url($args), $url_options);
      if (!empty($this->options['count'])) {
        $item['data'] .= ' (' . (@$argument->definition['accept depth modifier'] ? $term->aggregate_count : $term->count) . ')';
      }
      $item['weight'] = $term->weight;
      if (isset($children[$tid])) {
        usort($children[$tid], array(
          $this,
          'item_weight_compare',
        ));
        $item['children'] = $children[$tid];
      }
      foreach ($term->parents as $pid) {
        if (!$pid) {
          $item_list[] = $item;
        }
        else {
          $children[$pid][] = $item;
        }
      }
    }
    usort($item_list, array(
      $this,
      'item_weight_compare',
    ));
    return theme('item_list', $item_list);
  }
  static function item_weight_compare($item1, $item2) {
    if ($item1['weight'] == $item2['weight']) {
      return 0;
    }
    return $item1['weight'] > $item2['weight'] ? 1 : -1;
  }
  static function term_depth_compare($term1, $term2) {
    if ($term1->depth == $term2->depth) {
      return 0;
    }
    return $term1->depth > $term2->depth ? -1 : 1;

    // reverse sort
  }
  static function term_tid($term) {
    return $term->tid;
  }
  function term_count(&$term, $tid, $argument) {
    if (isset($this->terms[$tid])) {
      $term->count = $term->aggregate_count = $this->terms[$tid]->{$argument->count_alias};
    }
    else {
      $term->count = $term->aggregate_count = 0;

      // Create an entry for this term.
      $this->terms[$tid] = (object) array(
        $argument->base_alias => $tid,
        $argument->count_alias => 0,
      );
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::export_option public function 1
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function
views_plugin::$display public property The current used views display.
views_plugin::$plugin_name public property The plugin name of this plugin, for example table or full.
views_plugin::$plugin_type public property The plugin type of this plugin, for example style or query.
views_plugin::$view public property The top object of a view. Overrides views_object::$view 1
views_plugin::additional_theme_functions public function Provide a list of additional theme functions for the theme info page.
views_plugin::options_submit public function Handle any special handling on the validate form. 9
views_plugin::plugin_title public function Return the human readable name of the display.
views_plugin::summary_title public function Returns the summary of the settings in the display. 8
views_plugin::theme_functions public function Provide a full list of possible theme templates used by this style.
views_plugin_style::$row_plugin public property The row plugin, if it's initialized and the style itself supports it.
views_plugin_style::$row_tokens public property Store all available tokens row rows.
views_plugin_style::build_sort public function Called by the view builder to see if this style handler wants to interfere with the sorts. If so it should build; if it returns any non-TRUE value, normal sorting will NOT be added to the query. 1
views_plugin_style::build_sort_post public function Called by the view builder to let the style build a second set of sorts that will come after any other sorts in the view. 1
views_plugin_style::destroy public function Destructor. Overrides views_object::destroy
views_plugin_style::even_empty public function Should the output of the style plugin be rendered even if it's empty. 1
views_plugin_style::get_field public function Get a rendered field.
views_plugin_style::get_field_value public function Get the raw field value.
views_plugin_style::get_row_class public function Return the token replaced row class for the specified row.
views_plugin_style::init public function Initialize a style plugin.
views_plugin_style::options_validate public function Validate the options form. Overrides views_plugin::options_validate
views_plugin_style::pre_render public function Allow the style to do stuff before each row is rendered.
views_plugin_style::render_fields public function Render all of the fields for a given style and store them on the object.
views_plugin_style::render_grouping public function Group records as needed for rendering.
views_plugin_style::render_grouping_sets public function Render the grouping sets.
views_plugin_style::tokenize_value public function Take a value and apply token replacement logic to it.
views_plugin_style::uses_fields public function Return TRUE if this style also uses fields.
views_plugin_style::uses_row_class public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_row_plugin public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_tokens public function Return TRUE if this style uses tokens.
views_plugin_style::validate public function Validate that the plugin is correct and can be saved. Overrides views_plugin::validate
views_plugin_style_summary::query public function Add anything to the query that we might need to. Overrides views_plugin_style::query
views_plugin_style_summary_taxonomy::item_weight_compare static function
views_plugin_style_summary_taxonomy::options_form function Provide a form to edit options for this plugin. Overrides views_plugin_style_summary::options_form
views_plugin_style_summary_taxonomy::option_definition function Information about options for all kinds of purposes will be held here. Overrides views_plugin_style_summary::option_definition
views_plugin_style_summary_taxonomy::render function Render the display in this style. Overrides views_plugin_style_summary::render
views_plugin_style_summary_taxonomy::term_count function
views_plugin_style_summary_taxonomy::term_depth_compare static function
views_plugin_style_summary_taxonomy::term_tid static function