class flot_views_plugin_style in Flot 7
Same name and namespace in other branches
- 6 views/flot_views_plugin_style.inc \flot_views_plugin_style
Hierarchy
- class \views_object
- class \views_plugin
- class \views_plugin_style
- class \flot_views_plugin_style
- class \views_plugin_style
- class \views_plugin
Expanded class hierarchy of flot_views_plugin_style
1 string reference to 'flot_views_plugin_style'
- flot_views_views_plugins in flot_views/
views/ flot_views.views.inc - Implements hook_views_plugins().
File
- flot_views/
views/ flot_views_plugin_style.inc, line 4
View source
class flot_views_plugin_style extends views_plugin_style {
function option_definition() {
$options = parent::option_definition();
$options['type'] = array(
'default' => 'line',
);
$options['size'] = array(
'default' => '400x200',
);
$options['x'] = array(
'default' => array(
'granularity' => 'auto',
'label' => 'default',
),
);
$options['y'] = array(
'default' => array(
'granularity' => 'auto',
'label' => 'default',
'pad' => 1,
),
);
return $options;
}
function options_form(&$form, &$form_state) {
$form['type'] = array(
'#type' => 'select',
'#title' => t('Graph type'),
'#options' => array(
'line' => t('Line'),
'bar' => t('Bar'),
'point' => t('Point'),
'pie' => t('Pie chart'),
),
'#description' => t("Choose the type of chart you would like to display."),
'#default_value' => $this->options['type'],
);
$form['size'] = array(
'#type' => 'textfield',
'#title' => t('Size'),
'#description' => t("Enter the dimensions for the chart. Format: WIDTHxHEIGHT (e.g. 200x100)"),
'#default_value' => $this->options['size'],
);
// Generate label fields
$label_options = array(
'' => '< ' . t('No labels') . ' >',
'default' => t('Default (from data points)'),
);
// Generate granularity options
$yaxis_granularity = $xaxis_granularity = array(
'auto' => t('Auto generate'),
'endpoints' => t('Endpoints only'),
);
for ($i = 3; $i < 10; $i++) {
$yaxis_granularity[$i] = t('Granularity: !count ticks', array(
'!count' => $i,
));
}
$form['x'] = array(
'#tree' => TRUE,
'#type' => 'fieldset',
'#title' => t('X Axis'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['x']['label'] = array(
'#type' => 'select',
'#options' => $label_options,
'#title' => t('Labels'),
'#default_value' => $this->options['x']['label'],
);
$form['x']['granularity'] = array(
'#type' => 'select',
'#options' => $xaxis_granularity,
'#title' => t('Granularity'),
'#default_value' => $this->options['x']['granularity'],
);
$form['y'] = array(
'#tree' => TRUE,
'#type' => 'fieldset',
'#title' => t('Y Axis'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['y']['label'] = array(
'#type' => 'select',
'#options' => $label_options,
'#title' => t('Labels'),
'#default_value' => $this->options['y']['label'],
);
$form['y']['granularity'] = array(
'#type' => 'select',
'#options' => $yaxis_granularity,
'#title' => t('Granularity'),
'#default_value' => $this->options['y']['granularity'],
);
$form['y']['pad'] = array(
'#type' => 'checkbox',
'#title' => t('Add headroom above points'),
'#default_value' => $this->options['y']['pad'],
);
}
/**
* Theme template preprocessor.
*/
function preprocess(&$vars) {
// Get flot field, and bail if not present.
$flot_field = $this
->get_flot_field();
if (!$flot_field) {
return;
}
$view = $this->view;
$options = $this->options;
// Parameters
$type = !empty($options['type']) ? $options['type'] : 'line';
$size = !empty($options['size']) ? explode('x', $options['size']) : array(
'200',
'100',
);
// DOM element options
$element = array();
$element['style'] = is_numeric($size[0]) ? "width:{$size[0]}px;" : "width:{$size[0]};";
$element['style'] .= is_numeric($size[1]) ? "height:{$size[1]}px;" : "height:{$size[1]};";
$vars['element'] = $element;
$series = array();
$range = array(
'min' => NULL,
'max' => NULL,
);
$ticks = array();
// Iterate over results to build data and ticks
foreach ($vars['rows'] as $id => $row) {
$datapoint = $view->field[$flot_field]
->flot_render($row);
$value = $datapoint['value'];
$label = isset($datapoint['label']) ? $datapoint['label'] : $datapoint['value'];
$series[] = array(
$value[0],
$value[1],
);
$ticks[] = array(
$value[0],
$label[0],
);
if (!isset($range['min']) || $value[1] < $range['min']) {
$range['min'] = $value[1];
}
if (!isset($range['max']) || $value[1] > $range['max']) {
$range['max'] = $value[1];
}
}
$series = new flotData($series);
$vars['data'] = array(
$series,
);
// Set up the type class, set axes
switch ($options['type']) {
case 'point':
$style = new flotStylePoint();
break;
case 'bar':
$style = new flotStyleBar();
break;
case 'pie':
$style = new flotStylePie();
break;
case 'line':
default:
$style = new flotStyleLine();
break;
}
// Format Y Axis
$granularity = 0;
// If max is too small Flot barfs -- set a minimum value
$range['max'] = $range['max'] < 5 ? 5 : $range['max'];
// Pad Y axis if necessary
if ($options['y']['pad']) {
$range['min'] = 0;
$range['max'] = floor($range['max'] + $range['max'] * 0.1);
}
switch ($options['y']['granularity']) {
case 'endpoints':
$yticks = array(
array(
$range['min'],
$range['min'],
),
array(
$range['max'],
$range['max'],
),
);
$style
->axis_ticks('yaxis', $yticks);
break;
case 'auto':
$style
->axis_range('yaxis', $range);
break;
default:
$style
->axis_range('yaxis', $range, $options['yaxis']);
break;
}
// Format X Axis
if ($options['x']['granularity'] == 'endpoints' && count($ticks) > 1) {
$simplified_ticks = array();
$simplified_ticks[] = array_shift($ticks);
$simplified_ticks[] = array_pop($ticks);
$ticks = $simplified_ticks;
}
$style
->axis_ticks('xaxis', $ticks);
$vars['options'] = $style;
}
/**
* Validate function.
*/
function validate() {
parent::validate();
$field = $this
->get_flot_field();
if (!$field) {
return array(
t('You must use a field that is compatible (e.g. <strong>Data point</strong>) with Flot to use the Flot style plugin.'),
);
}
}
/**
* Get the first usable flot field on this view.
*/
function get_flot_field() {
$fields = $this->display->handler
->get_option('fields');
foreach ($fields as $field => $info) {
$handler = get_class(views_get_handler($info['table'], $info['field'], 'field'));
if (method_exists($handler, 'flot_render')) {
return $field;
}
}
return FALSE;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
flot_views_plugin_style:: |
function | Get the first usable flot field on this view. | ||
flot_views_plugin_style:: |
function |
Provide a form to edit options for this plugin. Overrides views_plugin_style:: |
||
flot_views_plugin_style:: |
function |
Information about options for all kinds of purposes will be held here. Overrides views_plugin_style:: |
||
flot_views_plugin_style:: |
function | Theme template preprocessor. | 1 | |
flot_views_plugin_style:: |
function |
Validate function. Overrides views_plugin_style:: |
||
views_object:: |
public | property | Handler's definition. | |
views_object:: |
public | property | Except for displays, options for the object will be held here. | 1 |
views_object:: |
function | Collect this handler's option definition and alter them, ready for use. | ||
views_object:: |
public | function | Views handlers use a special construct function. | 4 |
views_object:: |
public | function | 1 | |
views_object:: |
public | function | ||
views_object:: |
public | function | Always exports the option, regardless of the default value. | |
views_object:: |
public | function | Set default options on this object. | 1 |
views_object:: |
public | function | Set default options. | |
views_object:: |
public | function | Let the handler know what its full definition is. | |
views_object:: |
public | function | Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away. | |
views_object:: |
public | function | Unpack a single option definition. | |
views_object:: |
public | function | Unpacks each handler to store translatable texts. | |
views_object:: |
public | function | ||
views_plugin:: |
public | property | The current used views display. | |
views_plugin:: |
public | property | The plugin name of this plugin, for example table or full. | |
views_plugin:: |
public | property | The plugin type of this plugin, for example style or query. | |
views_plugin:: |
public | property |
The top object of a view. Overrides views_object:: |
1 |
views_plugin:: |
public | function | Provide a list of additional theme functions for the theme info page. | |
views_plugin:: |
public | function | Handle any special handling on the validate form. | 9 |
views_plugin:: |
public | function | Return the human readable name of the display. | |
views_plugin:: |
public | function | Returns the summary of the settings in the display. | 8 |
views_plugin:: |
public | function | Provide a full list of possible theme templates used by this style. | |
views_plugin_style:: |
public | property | The row plugin, if it's initialized and the style itself supports it. | |
views_plugin_style:: |
public | property | Store all available tokens row rows. | |
views_plugin_style:: |
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:: |
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:: |
public | function |
Destructor. Overrides views_object:: |
|
views_plugin_style:: |
public | function | Should the output of the style plugin be rendered even if it's empty. | 1 |
views_plugin_style:: |
public | function | Get a rendered field. | |
views_plugin_style:: |
public | function | Get the raw field value. | |
views_plugin_style:: |
public | function | Return the token replaced row class for the specified row. | |
views_plugin_style:: |
public | function | Initialize a style plugin. | |
views_plugin_style:: |
public | function |
Validate the options form. Overrides views_plugin:: |
|
views_plugin_style:: |
public | function | Allow the style to do stuff before each row is rendered. | |
views_plugin_style:: |
public | function |
Add anything to the query that we might need to. Overrides views_plugin:: |
2 |
views_plugin_style:: |
public | function | Render the display in this style. | 5 |
views_plugin_style:: |
public | function | Render all of the fields for a given style and store them on the object. | |
views_plugin_style:: |
public | function | Group records as needed for rendering. | |
views_plugin_style:: |
public | function | Render the grouping sets. | |
views_plugin_style:: |
public | function | Take a value and apply token replacement logic to it. | |
views_plugin_style:: |
public | function | Return TRUE if this style also uses fields. | |
views_plugin_style:: |
public | function | Return TRUE if this style also uses a row plugin. | |
views_plugin_style:: |
public | function | Return TRUE if this style also uses a row plugin. | |
views_plugin_style:: |
public | function | Return TRUE if this style uses tokens. |