You are here

class chart_views_plugin_style_chart in Google Chart Tools: Image Charts 7

Same name and namespace in other branches
  1. 6 chart_views/includes/views/chart_views_plugin_style_chart.inc \chart_views_plugin_style_chart

The plugin that handles the chart style.

Hierarchy

Expanded class hierarchy of chart_views_plugin_style_chart

1 string reference to 'chart_views_plugin_style_chart'
chart_views_views_plugins in chart_views/views/chart_views.views.inc
Implements hook_views_plugins().

File

chart_views/views/chart_views_plugin_style_chart.inc, line 14
Contains the chart display plugin.

View source
class chart_views_plugin_style_chart extends views_plugin_style {
  function option_definition() {
    $options = parent::option_definition();
    $options['type'] = array(
      'default' => 'bhs',
    );
    $options['width'] = array(
      'default' => 600,
    );
    $options['height'] = array(
      'default' => 400,
    );
    $options['color_scheme'] = array(
      'default' => 'default',
    );
    $options['label_append_value'] = array(
      'default' => FALSE,
    );
    $options['data_markers'] = array(
      'default' => FALSE,
    );
    $options['data_markers_number_type'] = array(
      'default' => 'f',
    );
    $options['data_markers_decimal_places'] = array(
      'default' => '2',
    );
    $options['data_markers_placement'] = array(
      'default' => 'lb',
    );
    return $options;
  }
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $form['type'] = array(
      '#type' => 'radios',
      '#title' => t('Type'),
      '#description' => t('Chart type, see <a href="http://code.google.com/apis/chart/">Google Chart API documentation</a>.'),
      '#options' => chart_types(),
      '#required' => TRUE,
      '#default_value' => $this->options['type'],
    );
    $form['width'] = array(
      '#type' => 'textfield',
      '#title' => t('Width'),
      '#description' => t('Chart width in pixels'),
      '#size' => 8,
      '#required' => TRUE,
      '#default_value' => $this->options['width'],
    );
    $form['height'] = array(
      '#type' => 'textfield',
      '#title' => t('Height'),
      '#description' => t('Chart height in pixels'),
      '#size' => 8,
      '#required' => TRUE,
      '#default_value' => $this->options['height'],
    );
    $form['color_scheme'] = array(
      '#type' => 'select',
      '#title' => t('Color scheme'),
      '#description' => t('Color scheme, as defined by hook_chart_color_schemes().'),
      '#options' => drupal_map_assoc(array_keys(chart_color_schemes())),
      '#required' => TRUE,
      '#default_value' => $this->options['color_scheme'],
    );
    $form['label_append_value'] = array(
      '#type' => 'checkbox',
      '#title' => t('Append value to label'),
      '#description' => t('If checked, calculated values will be appended in the chart legend.'),
      '#default_value' => $this->options['label_append_value'],
    );
    $form['data_markers'] = array(
      '#type' => 'checkbox',
      '#title' => t('Append Data Value Markers to the Chart'),
      '#description' => t('If checked, calculated data value markers will be appended to specific points on the chart[Bar, Line, Radar, Scatter]'),
      '#default_value' => $this->options['data_markers'],
      '#id' => 'edit-data-value-markers',
    );
    $form['data_markers_number_type'] = array(
      '#type' => 'select',
      '#dependency' => array(
        'edit-data-value-markers' => array(
          1,
        ),
      ),
      '#title' => t('Select type of Data Marker'),
      '#default_value' => $this->options['data_markers_number_type'],
      '#options' => array(
        'f' => t('Floating point format'),
        'p' => t('Percentage format'),
        'e' => t('Scientific notation format'),
      ),
      '#description' => t('The number format, for numeric values.'),
    );
    $form['data_markers_decimal_places'] = array(
      '#type' => 'select',
      '#dependency' => array(
        'edit-data-value-markers' => array(
          1,
        ),
      ),
      '#title' => t('Select number of decimal places'),
      '#default_value' => $this->options['data_markers_decimal_places'],
      '#options' => array(
        '0' => t('0'),
        '1' => t('1'),
        '2' => t('2'),
      ),
      '#description' => t('An integer specifying how many decimal places to show'),
    );
    $form['data_markers_placement'] = array(
      '#type' => 'select',
      '#dependency' => array(
        'edit-data-value-markers' => array(
          1,
        ),
      ),
      '#title' => t('Select where the data markers should be placed'),
      '#default_value' => $this->options['data_markers_placement'],
      '#options' => array(
        'lb' => t('Left-Bottom'),
        'lv' => t('Left-Middle'),
        'lt' => t('Left-Top'),
        'hb' => t('Center-Bottom'),
        'hv' => t('Center-Middle'),
        'ht' => t('Center-Top'),
        'rb' => t('Right-Bottom'),
        'rv' => t('Right-Middle'),
        'rt' => t('Right-Top'),
        's' => t('Bar-Relative-Base'),
        'c' => t('Bar-Relative-Center'),
        'e' => t('Bar-Relative-Top'),
      ),
      '#description' => t('Additional placement details describing where to put this marker, in relation to the data point. Bar-Relative markers are applicable only for Bar charts'),
    );
  }
  function render() {
    $charts = array();
    $sets = $this
      ->render_grouping($this->view->result, $this->options['grouping']);
    $one = count($sets) == 1;
    $set = 0;
    foreach ($sets as $title => $records) {
      $chart = array(
        '#theme' => 'chart',
        '#chart_id' => drupal_clean_css_identifier($this->view->name . '-' . $this->display->id . '-' . $set++),
        '#type' => $this->options['type'],
        // If only one set then use the view title, otherwise if the set has a
        // title then set it as the chart title.
        '#title' => $one ? $this->view->human_name : $title,
        '#size' => array(
          '#width' => $this->options['width'],
          '#height' => $this->options['height'],
        ),
        '#adjust_resolution' => TRUE,
        '#data' => array(),
        '#labels' => array(),
        '#data_colors' => array(),
        '#shape_markers' => array(),
      );
      foreach ($records as $row_index => $row) {
        foreach ($this->view->field as $key => $field) {
          if (!$field->options['exclude']) {
            $field_value = $field
              ->get_value($row);
            $field_value = isset($field_value[0]['value']) ? $field_value[0]['value'] : 0;

            // this would be nicer in 1 line.
            $chart['#data'][] = $field_value;
            $chart['#labels'][] = $field->options['label'] . ($this->options['label_append_value'] ? ': ' . $field_value : '');

            // @TODO Provide a way to change format.
            $chart['#data_colors'][] = chart_unique_color($key, $this->options['color_scheme']);
          }
        }
      }
      $series = 0;
      foreach ($this->view->field as $key => $field) {
        if (!$field->options['exclude']) {
          if ($this->options['data_markers']) {
            $chart['#shape_markers'][] = array(
              '#marker_type' => 'N*' . $this->options['data_markers_number_type'] . $this->options['data_markers_decimal_places'] . '*',
              '#color' => '000000',
              '#series_index' => $series,
              '#opt_which_points' => -1,
              '#size' => 11,
              '#opt_z_order' => '',
              '#opt_placement' => $this->options['data_markers_placement'],
            );
            $series++;
          }
        }
      }

      // Allow modules to alter the chart based on views context.
      drupal_alter('chart_views', $chart, $this->view->name, $this->display->id);

      // Since view expects string output we can't save render array for later.
      $charts[$chart['#chart_id']] = drupal_render($chart);
    }
    return implode($charts);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
chart_views_plugin_style_chart::options_form function Provide a form to edit options for this plugin. Overrides views_plugin_style::options_form
chart_views_plugin_style_chart::option_definition function Information about options for all kinds of purposes will be held here. Overrides views_plugin_style::option_definition
chart_views_plugin_style_chart::render function Render the display in this style. Overrides views_plugin_style::render
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::query public function Add anything to the query that we might need to. Overrides views_plugin::query 2
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