Esempio n. 1
0
 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']);
     }
 }