function getNewUsersByTime($timePhase, $fromDate = '', $toDate = '') { $this->load->library('ofc'); $userId = $this->common->getUserId(); $this->ofc->open_flash_chart(); $this->ofc->set_bg_colour(CHART_BG_COLOR); $toTime = date("Y-m-d", strtotime("-1 day")); if ($timePhase == "7day") { $fromTime = date("Y-m-d", strtotime("-8 day")); $color = CHART_LINE_1; $key = "近7日新增用户"; $title = new title("近7日新增用户统计"); } if ($timePhase == "1month") { $title = new title("近30天新增用户统计"); $fromTime = date("Y-m-d", strtotime("-31 day")); $color = CHART_LINE_2; $key = "近30天新增用户统计"; } if ($timePhase == "3month") { $title = new title("近三个月新增用户统计"); $fromTime = date("Y-m-d", strtotime("-92 day")); $color = CHART_LINE_3; $key = "近三个月新增用户统计"; } if ($timePhase == "all") { $title = new title("所有新增用户统计"); $fromTime = '1970-01-01'; $color = CHART_LINE_4; $key = "所有新增用户统计"; } if ($timePhase == "any") { $title = new title("所有新增用户统计"); $fromTime = $fromDate; $toTime = $toDate; $color = CHART_LINE_4; $key = "所有新增用户统计"; } $fromTime = $this->product->getUserStartDate($userId, $fromTime); $query = $this->newusermodel->getNewUsersByUserId($fromTime, $toTime, $userId); $data = array(); $maxY = 0; $recordCount = $query->num_rows(); $steps = $recordCount - 1 <= 10 ? 2 : (int) (((int) $recordCount - 1) / 10); $xlabelArray = array(); if ($query != null && $query->num_rows() > 0) { foreach ($query->result() as $row) { $dot = new dot(); $dot->size(3)->halo_size(1)->colour($color); $dot->tooltip($row->startdate . " 新增" . $row->totalusers . "用户"); $dot->value((int) $row->totalusers); if ((int) $row->totalusers > $maxY) { $maxY = (int) $row->totalusers; } array_push($xlabelArray, date('y-m-d', strtotime($row->startdate))); array_push($data, $dot); } } $y = new y_axis(); $y->set_range(0, $this->common->getMaxY($maxY), $this->common->getStepY($maxY)); $x = new x_axis(); $x->set_range(0, $recordCount > 1 ? $recordCount - 1 : 1); $x_labels = new x_axis_labels(); $x_labels->set_steps($steps); $x_labels->set_vertical(); $x_labels->set_colour(CHART_LABEL_COLOR); $x_labels->set_size(13); $x_labels->set_labels($xlabelArray); $x_labels->rotate(-25); $x->set_labels($x_labels); $x->set_steps(1); $this->ofc->set_y_axis($y); $this->ofc->set_x_axis($x); $dot = new dot(); $dot->size(3)->halo_size(1)->colour($color); $line = new line(); $line->set_default_dot_style($dot); $line->set_values($data); $line->set_width(2); $line->set_colour($color); $line->colour($color); $line->set_key($key, 12); $this->ofc->add_element($line); $title->set_style("{font-size: 14px; color:#000000; font-family: Verdana; text-align: center;}"); // $x_legend = new x_legend("<a href=\"javascript:changeChartName('chartNewUser')\">新增用户</a> <a href=\"javascript:changeChartName('chartActiveUser')\">活跃用户</a> <a href=\"javascript:changeChartName('chartStartUser')\">启动用户</a>"); // $this->ofc->set_x_legend( $x_legend ); // $x_legend->set_style( '{font-size: 14px; color: #778877}' ); $this->ofc->set_title($title); echo $this->ofc->toPrettyString(); }
$user_signups[] = $day[$i]['users']->signups + 0; $groups_added[] = $day[$i]['groups']->created + 0; } $max = max($max, $vid_uploads[$i], $user_signups[$i], $groups_added[$i]); } $vid_line = new line(); $vid_line->set_values($vid_uploads); $vid_line->colour('#336600'); $vid_line->set_key('Videos', 14); $user_line = new line(); $user_line->set_values($user_signups); $user_line->colour('#0099cc'); $user_line->set_key('User', 14); $grp_line = new line(); $grp_line->set_values($groups_added); $grp_line->colour('#990000'); $grp_line->set_key('Groups', 14); $max = $max; $steps = round($max / 5, 0.49); $y = new y_axis(); $y->set_range(0, $max, $steps); $chart = new open_flash_chart(); $chart->set_title($title); $chart->add_element($vid_line); $chart->add_element($user_line); $chart->add_element($grp_line); $x_labels = new x_axis_labels(); $x_labels->set_steps(1); $x_labels->set_vertical(); $x_labels->set_colour('#A2ACBA'); $x_labels->set_labels($year);
function admin_graphs($id = null) { App::import('Vendor', 'Newsletter.php-ofc-library', array('file' => 'php-ofc-library/open-flash-chart.php')); //Configure::write('debug', 0); //$this->layout = null; // generate some random data srand((double) microtime() * 1000000); $title = new title(__d("newsletter", "Views per time", true)); $chart = new open_flash_chart(); $chart->set_title($title); $newsletter = $this->Newsletter->read(null, $id); // Views $dates = array(); $values = array(); //// init sender class //// App::import('Lib', 'Newsletter.ClassCollection'); $senderOpt = NewsletterConfig::load('sender'); if (!is_array($senderOpt)) { $senderOpt = array('name' => $senderOpt); } $sender = ClassCollection::getObject('NewsletterSender', $senderOpt['name']); //// query //// $opt = array('type' => 'graph', 'query' => array('fields' => array('count(*) as nb', 'DATE(NewsletterEvent.date) as date'), 'conditions' => array('NewsletterSended.newsletter_id' => $id, 'or' => array('NewsletterEvent.action' => 'view', array('NewsletterEvent.action IS NULL', 'NewsletterEvent.url' => null))), 'group' => 'DATE(NewsletterEvent.date)', 'order' => 'DATE(NewsletterEvent.date)', 'model' => 'NewsletterEvent')); $data = $this->_get_stats(array('viewByDays' => $opt), $newsletter, $sender); //debug($data); $dates = $data['viewByDays']; $min_value = 99999999; $max_value = 0; foreach ($dates as $d => $val) { if ($val < $min_value) { $min_value = $val; } if ($val > $max_value) { $max_value = $val; } } if ($max_value == $min_value) { $max_value++; $min_value--; } $min_value = 0; //debug($dates); $min_date = key($dates); end($dates); $max_date = key($dates); for ($cur_date = $min_date; $cur_date <= $max_date; $cur_date = $cur_date + 86400) { $x = strtotime('00:00:00', $cur_date); if (isset($dates[$cur_date])) { $values[] = new scatter_value($x, $dates[$cur_date]); } else { $values[] = new scatter_value($x, 0); } } if ($max_date == $min_date) { $max_date += 86400; } //debug($values); //pr($views); $line_dot = new line(); $line_dot->set_values($values); $line_dot->set_text("Views"); $chart->add_element($line_dot); $y = new y_axis(); $y->set_range($min_value, $max_value, ($max_value - $min_value) / 10); $x = new x_axis(); // grid line and tick every 10 $x->set_range(mktime(0, 0, 0, date("m", $min_date), date("d", $min_date), date("Y", $min_date)), mktime(0, 0, 0, date("m", $max_date), date("d", $max_date), date("Y", $max_date))); // show ticks and grid lines for every day: $x->set_steps(86400); $labels = new x_axis_labels(); // tell the labels to render the number as a date: $labels->text('#date:d-m-Y#'); // generate labels for every day $labels->set_steps(86400); // only display every other label (every other day) $labels->visible_steps(ceil(($max_date - $min_date) / 86400 / 20)); $labels->rotate(90); $x->set_labels($labels); $chart->set_x_axis($x); $chart->set_y_axis($y); $chart->set_bg_colour("#FFFFFF"); //print_r($views); //$this->set("allviews",$views[0][0]['count(*)']); $line_dot = new line(); $line_dot->set_values(array(2, 1)); $line_dot->set_text("Unique views"); $line_dot->colour("#0000000"); //$chart->add_element($line_dot); // echo $chart->toPrettyString(); exit; //$this->render(false); }