protected static function getRowInfo(&$rows, $params, $num, &$report) { $cols = array(); //expand columns $chart_rows = array(); foreach ($rows as $k => $row) { $vals = array(); if ($k === 0) { $i = 1; $unsorted = 1000; foreach ($row['values'] as $key => $value) { if (($temp = array_search($row['values'][$key]->i, $report->options['Charts'][$num]['columns'])) !== false) { $cols[$temp] = $key; } elseif (($temp = array_search($row['values'][$key]->key, $report->options['Charts'][$num]['columns'])) !== false) { $cols[$temp] = $key; } elseif ($report->options['Charts'][$num]['all']) { $cols[$unsorted] = $key; $unsorted++; } } ksort($cols); } foreach ($cols as $key) { if (isset($row['values'][$key]->chart_value) && is_array($row['values'][$key]->chart_value)) { foreach ($row['values'][$key]->chart_value as $ckey => $cval) { $temp = new ReportValue($row['values'][$key]->i, $ckey, trim($cval, '%$ ')); $temp->setValue($cval); $vals[] = $temp; } } else { $temp = new ReportValue($row['values'][$key]->i, $row['values'][$key]->key, $row['values'][$key]->original_value); $temp->setValue(trim($row['values'][$key]->getValue(), '%$ ')); $vals[] = $temp; } } $chart_rows[] = $vals; } //determine column types $types = array(); foreach ($chart_rows as $i => $row) { foreach ($row as $k => $v) { $type = self::determineDataType($v->original_value); //if the value is null, it doesn't influence the column type if (!$type) { $chart_rows[$i][$k]->setValue(null); continue; } elseif (!isset($types[$k])) { $types[$k] = $type; } elseif ($type === 'string') { $types[$k] = 'string'; } elseif ($types[$k] === 'date' && in_array($type, array('timeofday', 'datetime'))) { $types[$k] = 'datetime'; } elseif ($types[$k] === 'timeofday' && in_array($type, array('date', 'datetime'))) { $types[$k] = 'datetime'; } elseif ($types[$k] === 'date' && $type === 'number') { $types[$k] = 'number'; } } } $report->options['Charts'][$num]['datatypes'] = $types; //build chart rows $report->options['Charts'][$num]['Rows'] = array(); foreach ($chart_rows as $i => &$row) { $vals = array(); foreach ($row as $key => $val) { if (is_null($val->getValue())) { $val->datatype = 'null'; } elseif ($types[$key] === 'datetime') { $val->setValue(date('m/d/Y H:i:s', strtotime($val->getValue()))); $val->datatype = 'datetime'; } elseif ($types[$key] === 'timeofday') { $val->setValue(date('H:i:s', strtotime($val->getValue()))); $val->datatype = 'timeofday'; } elseif ($types[$key] === 'date') { $val->setValue(date('m/d/Y', strtotime($val->getValue()))); $val->datatype = 'date'; } elseif ($types[$key] === 'number') { $val->setValue(round(floatval(preg_replace('/[^-0-9\\.]*/', '', $val->getValue())), 6)); $val->datatype = 'number'; } else { $val->datatype = 'string'; } $vals[] = $val; } $report->options['Charts'][$num]['Rows'][] = array('values' => $vals, 'first' => !$report->options['Charts'][$num]['Rows']); } }