You are here

function flot_fields_views_plugin_style::preprocess_views_plugin_query_default in Flot 7

1 call to flot_fields_views_plugin_style::preprocess_views_plugin_query_default()
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 694
Style plugin for views

Class

flot_fields_views_plugin_style
@file Style plugin for views

Code

function preprocess_views_plugin_query_default($vars, $input, &$output) {

  // input
  $yfields = $input['yfields'];
  $fieldx = $input['fieldx'];
  $group_fields = $input['group_fields'];

  // output
  $series = array();
  $series_options = array();
  $range = array();
  $range['xaxis'] = $range['yaxis'] = array(
    'min' => NULL,
    'max' => NULL,
  );
  $ticks = array();

  // Iterate over results to build data and ticks
  foreach ($vars['rows'] as $id => $row) {
    if (isset($row)) {
      if (empty($yfields)) {
        if (isset($fieldx->options['date_format'])) {
          $datapoint = array(
            $row->{$fieldx->field_alias} * 1000,
            $row->{"count"},
          );
        }
        else {
          if (!in_array($row->{$fieldx->field_alias}, $ticks)) {
            $ticks[] = $row->{$fieldx->field_alias};
          }
          $datapoint = array(
            array_shift(array_keys($ticks, $row->{$fieldx->field_alias})),
            $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 {
        $labelfields = array();
        foreach ($yfields as $fieldy) {
          if ($fieldy->options['flot']['y']['function'] == 'label') {
            $labelfields[] = $fieldy;
          }
        }
        foreach ($yfields as $fieldy) {

          //filter out non-numeric.
          if ($fieldy->options['flot']['y']['function'] != 'label') {
            $y_alias = $fieldy->field_alias . '_' . $fieldy->options['flot']['y']['function'];

            // 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->{$fieldx->field_alias} * 1000,
                $row->{$y_alias},
              );
            }
            else {
              if (!in_array($row->{$fieldx->field_alias}, $ticks)) {
                $ticks[] = $row->{$fieldx->field_alias};
              }
              $datapoint = array(
                array_shift(array_keys($ticks, $row->{$fieldx->field_alias})),
                $row->{$y_alias},
              );
            }
            $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']);
            if (empty($labelfields)) {
              $serieskey = $fieldy->definition['title'] . ': ' . $row->{$fieldy->field_alias};
              if (!empty($group_fields)) {
                $serieskey = array();
                foreach ($group_fields as $group_field) {
                  $serieskey[] = $group_field->definition['title'] . ': ' . $row->{$group_field->field_alias};
                }
                $serieskey = implode(', ', $serieskey);
              }
            }
            else {
              $serieskey = array();
              foreach ($labelfields as $label_field) {
                $serieskey[] = $label_field->definition['title'] . ': ' . $row->{$label_field->field_alias};
              }
              $serieskey = implode(', ', $serieskey);
            }
            $series[$serieskey][] = $datapoint;
            $series_options[$serieskey] = $fieldy->options['flot']['y'];
          }
        }
      }
    }
  }
  $output = array(
    'series' => $series,
    'series_options' => $series_options,
    'range' => $range,
    'ticks' => $ticks,
  );
}