diff --git a/olap.php b/olap.php index 1eb4503..2860273 100644 --- a/olap.php +++ b/olap.php @@ -108,13 +108,16 @@ class OLAP if (empty($s['where'])) $s['where'] = array(); } + unset($s); $i = 0; foreach (self::$group_types as $k => $v) self::$group_types[$k] = array('id' => $k, 'num' => $i++, 'name' => $v); foreach (self::$functions as $k => &$v) $v['id'] = $k; + unset($v); foreach (self::$aggregates as $k => &$v) $v['id'] = $k; + unset($v); self::$initialised = true; } @@ -200,9 +203,12 @@ class OLAP $v = VMXTemplate::timestamp($v, $this->current_src['fielddescs'][$f]['format']); $this->where_nosql[] = array($f, $t, $v); if ($fd['options']) + { foreach ($fd['options'] as &$o) if ("$o[id]" === $v) $o['selected'] = true; + unset($o); + } // NoSQL-поля будет фильтровать sql_filter-функция if (empty($fd['nosql'])) { @@ -325,6 +331,7 @@ class OLAP if ($v['type'] == 'tables' || $v['type'] == 'td') $tdk_group[] = $v; } + unset($v); $this->load($this->cell['field'], $this->cell['func'], $this->cell['aggr'], $output); // читаем значения, по которым следует сортировать значения полей группировки @@ -349,6 +356,7 @@ class OLAP if (count($v_group) <= 1) self::do_sort($v['keys'], $v['sort'], $v['sort_dir']); } + unset($v); $vars = array('build' => 1); if ($this->group_fields && $this->group_fields[0]['type'] == 'graph') @@ -404,6 +412,7 @@ class OLAP $fields[] = $v['sql'].' f'.$i; $group_by[] = $v['sql']; } + unset($v); $sql = $this->sql_trans_field($field, $func, $tables); $fields[] = str_replace('$', $sql, self::$aggregates[$aggr]['sql']).' c'; @@ -498,6 +507,7 @@ class OLAP $a = $this->current_src['fielddescs'][$f]; $v = $a['sql'] ? $a['sql'] . ' ' . $f : $f; } + unset($v); $fields = array_values($fields); if ($gen = $this->current_src['generator']) @@ -537,6 +547,7 @@ class OLAP foreach ($fields as &$v) if ($v['sort']) $v['orig_sort'] = &$v['sort']; + unset($v); foreach ($keys as $k) { if (array_key_exists($k, $data)) @@ -544,6 +555,7 @@ class OLAP foreach ($fields as &$v) if (!empty($v['orig_sort'])) $v['sort'] = &$v['orig_sort'][$k]; + unset($v); $gr = $this->build_graphs($fields, $data[$k], $tdkeys); // Допишем своё значение поля в начало описаний "дочерних" графиков $my_desc = array( @@ -556,6 +568,7 @@ class OLAP array_unshift($g['desc'], $my_desc); $graphs[] = $g; } + unset($g); } } } @@ -625,6 +638,7 @@ class OLAP foreach ($gr['data'] as &$d) $d[2] = intval($d[2]/$gr['max']*$this->graph_scale); } + unset($d); } $graphs[] = $gr; } @@ -1069,20 +1083,24 @@ class OLAP $aggr = count($aggr); } - // Упрощение вывода JS-графиков - разбивает их на группы + // Идея: Оставить последнюю группировку несколькими линиями на одном графике + // А остальные вытащить в список "групп" function tpl_jsgraphs($graphs) { $groups = array(); $group = false; foreach ($graphs as $i => $graph) { - $min_ne = count($graph['desc']); - foreach ($graph['desc'] as $j => $d) + $min_ne = count($graph['desc'])-1; + if ($i > 0) { - if ($i == 0 || $d['value'] != $graphs[$i-1]['desc'][$j]['value']) + foreach ($graph['desc'] as $j => $d) { - $min_ne = $j; - break; + if ($d['value'] != $graphs[$i-1]['desc'][$j]['value']) + { + $min_ne = $j; + break; + } } } $a = $b = array(); @@ -1097,26 +1115,20 @@ class OLAP } $graph['last_desc'] = array_pop($a); array_pop($b); - if ($min_ne >= count($graph['desc'])-1 || !$group) + if ($min_ne < count($graph['desc'])-1) { - if (!$group) - { - $group = array( - 'desc' => array_slice($graph['desc'], 0, -1), - 'full_desc' => $a, - 'changed_desc' => $b, - 'graphs' => array(), - 'numeric' => true, - ); - } - $group['graphs'][] = $graph; - $group['numeric'] = $group['numeric'] && $graph['numeric']; - } - else - { - $groups[] = $group; - $group = false; + if ($group) + $groups[] = $group; + $group = array( + 'desc' => array_slice($graph['desc'], 0, -1), + 'full_desc' => $a, + 'changed_desc' => $b, + 'graphs' => array(), + 'numeric' => true, + ); } + $group['graphs'][] = $graph; + $group['numeric'] = $group['numeric'] && $graph['numeric']; } if ($group) $groups[] = $group;