function chart_views_plugin_style_chart::query in Google Chart Tools: Image Charts 6
Custom SQL query change.
File
- chart_views/
includes/ views/ chart_views_plugin_style_chart.inc, line 184 - Drupal Chart API Views Integration. @Based on the Charts module's Views integration
Class
- chart_views_plugin_style_chart
- Style plugin to render view as a chart.
Code
function query() {
parent::query();
// Clear the fields out, we'll replace them with calculated values.
$this->view->query
->clear_fields();
// Clear out any sorting, it can create unexpected results
// when Views adds aggregation values for the sorts.
$this->view->query->orderby = array();
// Add the grouping information to the query.
// Field setting of array('aggregate' => TRUE) tells Views not to force
// another aggregation in for this field.
foreach ($this->view->field as $field) {
$query_field = substr($field->field, 0, 3) == 'cid' ? $field->definition['calc'] : $field->table . '.' . $field->field;
$query_alias = $field->field_alias;
// Add the aggregation.
if ($field->field == $this->options['aggregation_field']) {
$this->view->query
->add_orderby(NULL, NULL, 'asc', $query_alias);
$this->view->query
->add_groupby($query_field);
if (substr($field->field, 0, 3) == 'cid') {
$this->view->query
->add_field(NULL, $query_field, $field->field, array(
'aggregate' => TRUE,
));
}
else {
$this->view->query
->add_field($field->table, $field->field, NULL, array(
'aggregate' => TRUE,
));
}
}
// Add computed values.
if (in_array($field->field, $this
->calc_fields())) {
$sql = "ROUND(" . $this->options['calc'] . "({$query_field}), " . $this->options['precision'] . ")";
$this->view->query
->add_field(NULL, $sql, $field->field, array(
'aggregate' => TRUE,
));
// TODO This part is not relationship-safe, needs additional work
// to join in the right table if the computation is done
// on a field that comes from a relationship.
// Make sure the table with the right alias name is available
// (it might have been dropped during Views optimizations.)
$this->view->query
->add_table($field->table);
}
}
}