function flot_fields_views_plugin_style::preprocess_SearchApiViewsQuery in Flot 7
1 call to flot_fields_views_plugin_style::preprocess_SearchApiViewsQuery()
- flot_fields_views_plugin_style::preprocess in flot_views/
views/ flot_fields_views_plugin_style.inc - Theme template preprocessor.
File
- flot_views/
views/ flot_fields_views_plugin_style.inc, line 795 - Style plugin for views
Class
- flot_fields_views_plugin_style
- @file Style plugin for views
Code
function preprocess_SearchApiViewsQuery($vars, $input, &$output) {
// input
$yfields = $input['yfields'];
$fieldx = $input['fieldx'];
$group_fields = $input['group_fields'];
// output
$data = array();
$series = array();
$series_options = array();
$range = array();
$range['xaxis'] = $range['yaxis'] = array(
'min' => NULL,
'max' => NULL,
);
$ticks = array();
// convert to usable format
if (!isset($vars['rows'])) {
$output = array(
'series' => $series,
'series_options' => $series_options,
'range' => $range,
'ticks' => $ticks,
);
return;
}
foreach ($vars['rows'] as $id => $row) {
if (isset($row) && isset($row->_entity_properties)) {
$datarow = array();
foreach ($row->_entity_properties as $key => $value) {
if ($key != 'search_api_relevance' && $key != 'search_api_excerpt') {
$datarow[$key] = $value;
}
}
if (!empty($datarow)) {
$data[] = (object) $datarow;
}
}
}
// count doen - min/max bepalen
$min = $data[0]->{$fieldx->field_alias};
$max = $data[0]->{$fieldx->field_alias};
foreach ($data as $id => $row) {
if ($row->{$fieldx->field_alias} < $min) {
$min = $row->{$fieldx->field_alias};
}
elseif ($row->{$fieldx->field_alias} > $max) {
$max = $row->{$fieldx->field_alias};
}
}
if ($max - $min > 30 * 86400) {
$timeinterval = 86400;
}
elseif ($max - $min > 7 * 86400) {
$timeinterval = 21600;
}
elseif ($max - $min > 3 * 86400) {
$timeinterval = 10800;
}
elseif ($max - $min > 86400) {
$timeinterval = 3600;
}
else {
$timeinterval = 60;
}
$countdata = array();
foreach ($data as $id => $row) {
$x = round($row->{$fieldx->field_alias} / $timeinterval) * $timeinterval;
if (empty($yfields)) {
if (!isset($countdata[$x])) {
$countdata[$x]->{$fieldx->field_alias} = $x;
$countdata[$x]->count = 1;
}
else {
$countdata[$x]->count++;
}
}
else {
$labelfields = array();
foreach ($yfields as $fieldy) {
if ($fieldy->options['flot']['y']['function'] == 'label') {
$labelfields[] = $fieldy;
}
}
foreach ($yfields as $fieldy) {
$rowval = 0;
$label = $fieldy->field;
if (isset($row->{"entity object"})) {
$wrapper = entity_metadata_wrapper($fieldy->entity_type, $row->{"entity object"});
$label = field_info_instance($wrapper
->type(), $fieldy->field, $wrapper
->getBundle());
if (empty($label)) {
//this is an entity that does not have this field (e.g. nodes of different types do not have the same fields)
$label = t('No data');
}
else {
$label = $label['label'];
}
}
if (isset($row->{$fieldy->field_alias})) {
$rowval = $row->{$fieldy->field_alias};
}
else {
if (isset($wrapper->{$fieldy->field})) {
$rowval = $wrapper->{$fieldy->field}
->value();
}
}
$rowval = is_null($rowval) ? 0 : $rowval;
$datakey = $x;
if ($fieldy->options['flot']['y']['function'] == 'count') {
$datakey = $x . $rowval;
}
if (!isset($countdata[$datakey]) && !in_array($fieldy, $labelfields)) {
$countdata[$datakey]->x = $x;
$labelval = array();
if (!empty($labelfields)) {
foreach ($labelfields as $labelfield) {
if (isset($row->{$labelfield->field_alias})) {
$labelval[] = $labelfield->definition['title'] . ': ' . $row->{$labelfield->field_alias};
}
else {
if (isset($wrapper->{$labelfield->field})) {
$labelval[] = $labelfield->definition['title'] . ': ' . $wrapper->{$labelfield->field}
->value();
}
}
}
}
switch ($fieldy->options['flot']['y']['function']) {
case 'count':
$countdata[$datakey]->count = 1;
if (empty($labelfields) && isset($row->{$fieldy->field_alias})) {
$labelval[] = $fieldy->definition['title'] . ': ' . $row->{$fieldy->field_alias};
}
else {
if (isset($wrapper->{$fieldy->field})) {
$labelval[] = $fieldy->definition['title'] . ': ' . $wrapper->{$fieldy->field}
->value();
}
}
break;
default:
//min, max, sum
$countdata[$datakey]->count = $rowval;
break;
}
$countdata[$datakey]->label = empty($labelval) ? $label : implode(', ', $labelval);
}
else {
switch ($fieldy->options['flot']['y']['function']) {
case 'count':
$countdata[$datakey]->count++;
break;
case 'sum':
$countdata[$datakey]->count += $rowval;
break;
case 'min':
$countdata[$datakey]->count = min($rowval, $countdata[$x]->count);
break;
case 'max':
$countdata[$datakey]->count = max($rowval, $countdata[$x]->count);
break;
}
}
}
}
}
// sort data by timestamp
function cmp_dp($a, $b) {
if ($a->x == $b->x) {
return 0;
}
return $a->x < $b->x ? -1 : 1;
}
usort($countdata, 'cmp_dp');
// Iterate over results to build data and ticks
foreach ($countdata as $id => $row) {
if (isset($row)) {
if (empty($yfields)) {
if (isset($fieldx->options['date_format'])) {
$datapoint = array(
$row->x * 1000,
$row->{"count"},
);
}
else {
if (!in_array($row->x, $ticks)) {
$ticks[] = $row->x;
}
$datapoint = array(
array_shift(array_keys($ticks, $row->x)),
$row->{"count"},
);
}
$range['xaxis']['min'] = is_null($range['xaxis']['min']) ? $row->{"count"} : min($row->{"count"}, $range['xaxis']['min']);
$range['xaxis']['max'] = is_null($range['xaxis']['max']) ? $row->{"count"} : max($row->{"count"}, $range['xaxis']['max']);
$series[$fieldx->field_alias][] = $datapoint;
}
else {
// datetime fields need special care
// TODO: Also handle datetime for the Y axis, not just the X axis
if (isset($fieldx->options['date_format'])) {
$datapoint = array(
$row->x * 1000,
$row->count,
);
}
else {
if (!in_array($row->{$fieldx->field_alias}, $ticks)) {
$ticks[] = $row->x;
}
$datapoint = array(
array_shift(array_keys($ticks, $row->x)),
$row->count,
);
}
$range['yaxis']['min'] = is_null($range['yaxis']['min']) ? $datapoint[1] : min($datapoint[1] - 1, $range['yaxis']['min']);
//-1 for padding
$range['yaxis']['max'] = is_null($range['yaxis']['max']) ? $datapoint[1] : max($datapoint[1] + 1, $range['yaxis']['max']);
//+1 for padding
$range['xaxis']['min'] = is_null($range['xaxis']['min']) ? $datapoint[0] : min($datapoint[0], $range['xaxis']['min']);
$range['xaxis']['max'] = is_null($range['xaxis']['max']) ? $datapoint[0] : max($datapoint[0], $range['xaxis']['max']);
$serieskey = $row->label;
$series[$serieskey][] = $datapoint;
$series_options[$serieskey] = $fieldy->options['flot']['y'];
}
}
}
$output = array(
'series' => $series,
'series_options' => $series_options,
'range' => $range,
'ticks' => $ticks,
);
}