public function toObject()
 {
     $this->consolidateParameters();
     $xAxisLabels = new OFC_Elements_Axis_X_Label_Set();
     $xAxisLabels->set_labels($this->labels);
     $xAxisLabels->set_size(10);
     $xAxisLabels->set_colour('#444444');
     $xAxisLabels->set_steps($this->stepsX);
     $xAxis = new OFC_Elements_Axis_X();
     $xAxis->set_steps($this->stepsX);
     $xAxis->set_labels($xAxisLabels);
     $xAxis->set_colour('#CCCCCC');
     $xAxis->set_grid_colour('#AAAAAA');
     $this->chart->set_x_axis($xAxis);
     $yAxis = new OFC_Elements_Axis_Y();
     $yAxis->set_range($this->min1, $this->max1);
     $yAxis->set_colour('#AAAAAA');
     $yAxis->set_grid_colour('#AAAAAA');
     $yAxis->set_steps($this->stepsY1);
     $this->chart->set_y_axis($yAxis);
     $yLegend = new OFC_Elements_Legend_Y($this->data1->getName());
     //$this->chart->set_y_legend($yLegend); // does not work now
     // data 1
     $this->chart->add_element($this->createGraph($this->data1));
     if ($this->hasTwoDataLines()) {
         $yAxisRight = new OFC_Elements_Axis_Y_Right();
         $yAxisRight->set_range($this->min2, $this->max2);
         $yAxisRight->set_colour('#AAAAAA');
         $yAxisRight->set_steps($this->stepsY2);
         //            $this->chart->set_y_axis_right($yAxisRight);
         $this->chart->add_element($this->createGraph($this->data2));
     }
     return $this->chart;
 }
Exemple #2
0
 public function reg_data()
 {
     $_label = array('05-01', '05-02', '05-03', '05-04', '05-05', '05-06', '05-07', '05-08', '05-09', '05-10', '05-11', '05-12', '05-13', '05-14', '05-15');
     $_value = array(1235, 1125, 1323, 1389, 1256, 1568, 1383, 1677, 1953, 1798, 2089, 2215, 1738, 2189, 2315);
     $_max_value = 2500;
     $this->load->library('OFC_Chart');
     $title = new OFC_Elements_Title("日注册用户数(人)");
     //创建图表类型对象
     $element = new OFC_Charts_Bar_Glass();
     //设置图标值
     $element->set_values($_value);
     //$element->set_width( 2 );
     //$element->set_dot_style(array('type'=>"solid-dot",'dot-size'=>5,'halo-size'=>1,'colour'=>'#3D5C56'));
     //设置动画
     $element->set_on_show(array('type' => "pop-up", 'cascade' => 0.8, 'delay' => 0.1));
     $element->set_colour("#009829");
     //创建图表对象
     $chart = new OFC_Chart();
     $chart->set_title($title);
     //图表类型添加到图表
     $chart->add_element($element);
     //x轴
     $x_axis = new OFC_Elements_Axis_X();
     $x_axis->set_labels(array('labels' => $_label));
     $x_axis->set_steps(1);
     $chart->set_x_axis($x_axis);
     //y轴
     $y_axis = new OFC_Elements_Axis_Y();
     $y_axis->set_range(0, $_max_value, $_max_value / 10);
     $chart->set_y_axis($y_axis);
     //x 脚标
     $x_legend = new OFC_Elements_Legend_X('日期');
     $x_legend->set_style('{font-size: 20px; color: #778877}');
     $chart->set_x_legend($x_legend);
     $chart->set_bg_colour('#ffffff');
     echo $chart->toPrettyString();
 }
 public function chartDataAction()
 {
     // Disable layout and viewrenderer
     $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender(true);
     // Get params
     $type = $this->_getParam('type');
     $start = $this->_getParam('start');
     $offset = $this->_getParam('offset', 0);
     $mode = $this->_getParam('mode');
     $chunk = $this->_getParam('chunk');
     $period = $this->_getParam('period');
     $periodCount = $this->_getParam('periodCount', 1);
     //$end = $this->_getParam('end');
     // Validate chunk/period
     if (!$chunk || !in_array($chunk, $this->_periods)) {
         $chunk = Zend_Date::DAY;
     }
     if (!$period || !in_array($period, $this->_periods)) {
         $period = Zend_Date::MONTH;
     }
     if (array_search($chunk, $this->_periods) >= array_search($period, $this->_periods)) {
         die('whoops');
         return;
     }
     // Validate start
     if ($start && !is_numeric($start)) {
         $start = strtotime($start);
     }
     if (!$start) {
         $start = time();
     }
     // Fixes issues with month view
     Zend_Date::setOptions(array('extend_month' => true));
     // Get timezone
     $timezone = Engine_Api::_()->getApi('settings', 'core')->getSetting('core_locale_timezone', 'GMT');
     $viewer = Engine_Api::_()->user()->getViewer();
     if ($viewer && $viewer->getIdentity() && !empty($viewer->timezone)) {
         $timezone = $viewer->timezone;
     }
     // Make start fit to period?
     $startObject = new Zend_Date($start);
     $startObject->setTimezone($timezone);
     $partMaps = $this->_periodMap[$period];
     foreach ($partMaps as $partType => $partValue) {
         $startObject->set($partValue, $partType);
     }
     // Do offset
     if ($offset != 0) {
         $startObject->add($offset, $period);
     }
     // Get end time
     $endObject = new Zend_Date($startObject->getTimestamp());
     $endObject->setTimezone($timezone);
     $endObject->add($periodCount, $period);
     $endObject->sub(1, Zend_Date::SECOND);
     // Subtract one second
     // Get data
     $statsTable = Engine_Api::_()->getDbtable('statistics', 'core');
     $statsSelect = $statsTable->select()->where('type = ?', $type)->where('date >= ?', gmdate('Y-m-d H:i:s', $startObject->getTimestamp()))->where('date < ?', gmdate('Y-m-d H:i:s', $endObject->getTimestamp()))->order('date ASC');
     $rawData = $statsTable->fetchAll($statsSelect);
     // Now create data structure
     $currentObject = clone $startObject;
     $nextObject = clone $startObject;
     $data = array();
     $dataLabels = array();
     $cumulative = 0;
     $previous = 0;
     do {
         $nextObject->add(1, $chunk);
         $currentObjectTimestamp = $currentObject->getTimestamp();
         $nextObjectTimestamp = $nextObject->getTimestamp();
         $data[$currentObjectTimestamp] = $cumulative;
         // Get everything that matches
         $currentPeriodCount = 0;
         foreach ($rawData as $rawDatum) {
             $rawDatumDate = strtotime($rawDatum->date);
             if ($rawDatumDate >= $currentObjectTimestamp && $rawDatumDate < $nextObjectTimestamp) {
                 $currentPeriodCount += $rawDatum->value;
             }
         }
         // Now do stuff with it
         switch ($mode) {
             default:
             case 'normal':
                 $data[$currentObjectTimestamp] = $currentPeriodCount;
                 break;
             case 'cumulative':
                 $cumulative += $currentPeriodCount;
                 $data[$currentObjectTimestamp] = $cumulative;
                 break;
             case 'delta':
                 $data[$currentObjectTimestamp] = $currentPeriodCount - $previous;
                 $previous = $currentPeriodCount;
                 break;
         }
         $currentObject->add(1, $chunk);
     } while ($currentObject->getTimestamp() < $endObject->getTimestamp());
     // Reprocess label
     $labelStrings = array();
     $labelDate = new Zend_Date();
     foreach ($data as $key => $value) {
         $labelDate->set($key);
         $labelStrings[] = $this->view->locale()->toDate($labelDate, array('size' => 'short'));
         //date('D M d Y', $key);
     }
     // Let's expand them by 1.1 just for some nice spacing
     $minVal = min($data);
     $maxVal = max($data);
     $minVal = floor($minVal * ($minVal < 0 ? 1.1 : 1 / 1.1) / 10) * 10;
     $maxVal = ceil($maxVal * ($maxVal > 0 ? 1.1 : 1 / 1.1) / 10) * 10;
     // Remove some labels if there are too many
     $xlabelsteps = 1;
     if (count($data) > 10) {
         $xlabelsteps = ceil(count($data) / 10);
     }
     // Remove some grid lines if there are too many
     $xsteps = 1;
     if (count($data) > 100) {
         $xsteps = ceil(count($data) / 100);
     }
     // Create base chart
     require_once 'OFC/OFC_Chart.php';
     // Make x axis labels
     $x_axis_labels = new OFC_Elements_Axis_X_Label_Set();
     $x_axis_labels->set_steps($xlabelsteps);
     $x_axis_labels->set_labels($labelStrings);
     // Make x axis
     $labels = new OFC_Elements_Axis_X();
     $labels->set_labels($x_axis_labels);
     $labels->set_colour("#416b86");
     $labels->set_grid_colour("#dddddd");
     $labels->set_steps($xsteps);
     // Make y axis
     $yaxis = new OFC_Elements_Axis_Y();
     $yaxis->set_range($minVal, $maxVal);
     $yaxis->set_colour("#416b86");
     $yaxis->set_grid_colour("#dddddd");
     // Make data
     $graph = new OFC_Charts_Line();
     $graph->set_values(array_values($data));
     $graph->set_colour("#5ba1cd");
     // Make title
     $locale = Zend_Registry::get('Locale');
     $translate = Zend_Registry::get('Zend_Translate');
     $titleStr = $translate->_('_CORE_ADMIN_STATS_' . strtoupper(trim(preg_replace('/[^a-zA-Z0-9]+/', '_', $type), '_')));
     $title = new OFC_Elements_Title($titleStr . ': ' . $this->view->locale()->toDateTime($startObject) . ' to ' . $this->view->locale()->toDateTime($endObject));
     $title->set_style("{font-size: 14px;font-weight: bold;margin-bottom: 10px; color: #777777;}");
     // Make full chart
     $chart = new OFC_Chart();
     $chart->set_bg_colour('#ffffff');
     $chart->set_x_axis($labels);
     $chart->add_y_axis($yaxis);
     $chart->add_element($graph);
     $chart->set_title($title);
     // Send
     $this->getResponse()->setBody($chart->toPrettyString());
 }
Exemple #4
0
for ($i = 0; $i < 6.2; $i += 0.2) {
    $tmp = sin($i) * 1.9;
    $data[] = $tmp;
}
require_once 'OFC/OFC_Chart.php';
$chart = new OFC_Chart();
$chart->set_title(new OFC_Elements_Title('Area Chart'));
//
// Make our area chart:
//
$area = new OFC_Charts_Area_Hollow();
// set the circle line width:
$area->set_width(1);
$area->set_values($data);
// add the area object to the chart:
$chart->add_element($area);
$y_axis = new OFC_Elements_Axis_Y();
$y_axis->set_range(-2, 2, 2);
$y_axis->labels = null;
$y_axis->set_offset(false);
$x_axis = new OFC_Elements_Axis_X();
$x_axis->labels = $data;
$x_axis->set_steps(2);
$x_labels = new OFC_Elements_Axis_X_Label_Set();
$x_labels->set_steps(4);
$x_labels->set_vertical();
// Add the X Axis Labels to the X Axis
$x_axis->set_labels($x_labels);
$chart->add_y_axis($y_axis);
$chart->x_axis = $x_axis;
echo $chart->toPrettyString();
Exemple #5
0
 public function draw_summary_chart($gb_captions)
 {
     $f = $this->init_module(Libs_OpenFlashChart::module_name());
     //row summary numeric
     $f2 = $this->init_module(Libs_OpenFlashChart::module_name());
     //row summary currency
     $fc = $this->init_module(Libs_OpenFlashChart::module_name());
     //columns summary numeric
     $fc2 = $this->init_module(Libs_OpenFlashChart::module_name());
     //columns summary currency
     $title = new OFC_Elements_Title("Summary by row");
     $f->set_title($title);
     $f2->set_title($title);
     if (!empty($this->categories)) {
         $labels = array();
         $labels_c = array();
         foreach ($this->categories as $q => $c) {
             if ($this->format[$c] == 'currency') {
                 $labels_c[] = strip_tags($c);
             } else {
                 $labels[] = strip_tags($c);
             }
         }
         $x_ax = new OFC_Elements_Axis_X();
         $x_ax->set_labels_from_array($labels);
         $f->set_x_axis($x_ax);
         $x_ax = new OFC_Elements_Axis_X();
         $x_ax->set_labels_from_array($labels_c);
         $f2->set_x_axis($x_ax);
     }
     $title = new OFC_Elements_Title("Summary by column");
     $fc->set_title($title);
     $fc2->set_title($title);
     $labels = array();
     foreach ($gb_captions as $cap) {
         $labels[] = $cap['name'];
     }
     $x_ax = new OFC_Elements_Axis_X();
     $x_ax->set_labels_from_array($labels);
     $fc->set_x_axis($x_ax);
     $fc2->set_x_axis($x_ax);
     $max = 5;
     $max2 = 5;
     $maxc = 5;
     $maxc2 = 5;
     $curr = false;
     $num = false;
     $col_total = array();
     $color = 0;
     foreach ($this->ref_records as $k => $r) {
         $results = call_user_func($this->display_cell_callback, $r);
         $ref_rec = call_user_func($this->ref_record_display_callback, $r, true);
         $bar = new OFC_Charts_Bar_Glass();
         $bar->set_colour(self::$colours[$color % count(self::$colours)]);
         $color++;
         $bar->set_key(strip_tags($ref_rec), 10);
         if (empty($this->categories)) {
             $total = 0;
             $i = 0;
             foreach ($results as &$res_ref) {
                 if (is_array($res_ref)) {
                     $res_ref = array_pop($res_ref);
                 }
                 $val = strip_tags($res_ref);
                 $total += $val;
                 if (!isset($this->cols_total[$i])) {
                     $this->cols_total[$i] = array();
                 }
                 $this->cols_total[$i][0] += $val;
                 $i++;
             }
             $bar->set_values(array($total));
             if ($this->format == 'currency') {
                 if ($total > $max2) {
                     $max2 = $total;
                 }
                 $f2->add_element($bar);
                 $curr = true;
             } else {
                 if ($total > $max) {
                     $max = $total;
                 }
                 $f->add_element($bar);
                 $num = true;
             }
         } else {
             $bar_c = new OFC_Charts_Bar_Glass();
             $bar_c->set_colour(self::$colours[$color % count(self::$colours)]);
             $bar_c->set_key(strip_tags($ref_rec), 10);
             $arr = array();
             $arr_c = array();
             foreach ($this->categories as $q => $c) {
                 $total = 0;
                 if (!isset($this->cols_total[$c])) {
                     $this->cols_total[$c] = array();
                 }
                 $i = 0;
                 foreach ($results as $v) {
                     if (is_array($v[$c])) {
                         $v[$c] = reset($v[$c]);
                     }
                     $val = (double) strip_tags($v[$c]);
                     $total += $val;
                     if (!isset($this->cols_total[$c][$i])) {
                         $this->cols_total[$c][$i] = 0;
                     }
                     $this->cols_total[$c][$i] += $val;
                     $i++;
                 }
                 if ($this->format[$c] == 'currency') {
                     $arr_c[] = $total;
                     if ($max2 < $total) {
                         $max2 = $total;
                     }
                 } else {
                     $arr[] = $total;
                     if ($max < $total) {
                         $max = $total;
                     }
                 }
             }
             if (!empty($arr)) {
                 $bar->set_values($arr);
                 $f->add_element($bar);
                 $num = true;
             }
             if (!empty($arr_c)) {
                 $bar_c->set_values($arr_c);
                 $f2->add_element($bar_c);
                 $curr = true;
             }
         }
     }
     if ($num) {
         $y_ax = new OFC_Elements_Axis_Y();
         $y_ax->set_range(0, $max);
         $y_ax->set_steps($max / 10);
         $f->set_y_axis($y_ax);
         $f->set_width(950);
         $f->set_height(400);
         $this->display_module($f);
         print '<br>';
     }
     if ($curr) {
         $y_ax = new OFC_Elements_Axis_Y();
         $y_ax->set_range(0, $max2);
         $y_ax->set_steps($max2 / 10);
         $f2->set_y_axis($y_ax);
         $f2->set_width(950);
         $f2->set_height(400);
         $this->display_module($f2);
         print '<br>';
     }
     if (empty($this->categories)) {
         $bar = new OFC_Charts_Bar_Glass();
         $bar->set_colour(self::$colours[0]);
         $bar->set_key('Total', 10);
         $mm = 5;
         $values = array();
         foreach ($this->cols_total as $val) {
             $rval = $val[0];
             if ($mm < $rval) {
                 $mm = $rval;
             }
             $values[] = $rval;
         }
         $bar->set_values($values);
         if ($this->format == 'currency') {
             $maxc2 = $mm;
             $fc2->add_element($bar);
         } else {
             $maxc = $mm;
             $fc->add_element($bar);
         }
     } else {
         $i = 0;
         foreach ($this->cols_total as $k => $arr) {
             $bar = new OFC_Charts_Bar_Glass();
             $bar->set_colour(self::$colours[$i % count(self::$colours)]);
             $bar->set_key(strip_tags($k), 10);
             $bar->set_values($arr);
             $mm = 5;
             foreach ($arr as $val) {
                 if ($mm < $val) {
                     $mm = $val;
                 }
             }
             if ($this->format[$k] == 'currency') {
                 if ($mm > $maxc2) {
                     $maxc2 = $mm;
                 }
                 $fc2->add_element($bar);
             } else {
                 if ($mm > $maxc) {
                     $maxc = $mm;
                 }
                 $fc->add_element($bar);
             }
             $i++;
         }
     }
     if ($num) {
         $y_ax = new OFC_Elements_Axis_Y();
         $y_ax->set_range(0, $maxc);
         $y_ax->set_steps($maxc / 10);
         $fc->set_y_axis($y_ax);
         $fc->set_width(950);
         $fc->set_height(400);
         $this->display_module($fc);
         print '<br>';
     }
     if ($curr) {
         $y_ax = new OFC_Elements_Axis_X();
         $y_ax->set_range(0, $maxc2);
         $y_ax->set_steps($maxc2 / 10);
         $fc2->set_y_axis($y_ax);
         $fc2->set_width(950);
         $fc2->set_height(400);
         $this->display_module($fc2);
         print '<br>';
     }
 }
Exemple #6
0
/**
 * $array['title']
 * $array['legend_y']
 * $array['legend_x']
 * $array['values']
 * $array['values_key']
 * $array['range_max']
 * $array['range_step']
 * @param $array
 * @return unknown_type
 */
function create_chart_data($array)
{
    if (!$array) {
        return;
    }
    require_once 'OFC/OFC_Chart.php';
    $chart = new OFC_Chart();
    $chart->set_bg_colour('#ffffff');
    $title = new OFC_Elements_Title($array['title']);
    $title->set_style('{color: #567300; font-size: 16px; font-weight:bold;}');
    $chart->set_title($title);
    $yl = new OFC_Elements_Legend_Y($array['legend_y']);
    $yl->set_style('{font-size:18px;}');
    $chart->set_y_legend($yl);
    $xl = new OFC_Elements_Legend_X($array['legend_x']);
    $xl->set_style('{font-size:18px;color:#Ff0}');
    $chart->set_x_legend($xl);
    $elements = array();
    $colors = array('', '#CC00AA', '#9C48F0', '#b0de09', '#0d8ecf', '#ff6600', '#fcd202', '#E2EBFF', '#AAAAAA');
    foreach ($array['values'] as $k => $v) {
        ksort($v, SORT_STRING);
        $line = new OFC_Charts_Line();
        $line->set_key($array['values_key'][$k], 12);
        $colors[$k] ? $line->set_colour($colors[$k]) : '';
        $line->set_values(array_values($v));
        $default_dot = new OFC_Charts_Line_Dot();
        $default_dot->tooltip('#x_label#<br>#val#');
        $line->set_default_dot_style($default_dot);
        $elements[] = $line;
        $array['values'][$k] =& $v;
    }
    foreach ($elements as $element) {
        $chart->add_element($element);
    }
    $x = new OFC_Elements_Axis_X();
    $x->colour = '#909090';
    $x_axis_labels = new OFC_Elements_Axis_X_Label_Set();
    $x->set_steps($array['show_step']);
    $x_axis_labels->set_steps($array['show_step']);
    if (is_array($array['values'][0])) {
        $keys = array_keys($array['values'][0]);
    } else {
        $keys = array_keys($array['values']);
    }
    $x_axis_labels->set_labels($keys);
    $x_axis_labels->set_size(12);
    $x_axis_labels->set_colour('#Ff0');
    $x_axis_labels->set_rotate('-45');
    $x->set_labels($x_axis_labels);
    $chart->set_x_axis($x);
    $y = new OFC_Elements_Axis_Y();
    $range_min = isset($array['range_min']) ? $array['range_min'] : 0;
    $y->set_range($range_min, $array['range_max'], $array['range_step']);
    $chart->set_y_axis($y);
    return $chart->toPrettyString();
}