コード例 #1
0
ファイル: StatsWebModule.php プロジェクト: nncsang/Kurogo
 protected function initializeForPage()
 {
     if (!Kurogo::getOptionalSiteVar('STATS_ENABLED', true)) {
         throw new KurogoException($this->getLocalizedString('STATS_DISABLED'));
     }
     if ($this->page == 'updateStats') {
         KurogoStats::exportStatsData();
         $this->redirectTo('index');
     }
     if ($this->getOptionalModuleVar('AUTO_UPDATE_STATS')) {
         KurogoStats::exportStatsData();
     }
     $serviceTypes = $this->getServiceTypes();
     $service = $this->getArg('service', 'web');
     if (!array_key_exists($service, $serviceTypes)) {
         $service = 'web';
     }
     $interval_types = $this->getIntervalTypes();
     $interval = $this->getArg('interval', 'day');
     if (!array_key_exists($interval, $interval_types)) {
         $interval = 'day';
     }
     if ($interval == 'custom') {
         $start = $this->getArg('start');
         $startTime = $start ? mktime(0, 0, 0, $start['Month'], $start['Day'], $start['Year']) : mktime(0, 0, 0);
         $end = $this->getArg('end', array());
         $endTime = $end ? mktime(23, 59, 59, $end['Month'], $end['Day'], $end['Year']) : mktime(23, 59, 59);
         if ($endTime < $startTime) {
             $endTime = $startTime;
         }
     } else {
         $times = $this->getTimesForInterval($interval, $interval_types[$interval]['duration']);
         $startTime = $times['start'];
         $endTime = $times['end'];
     }
     $intervalOptions = array();
     $args = $this->args;
     $args['service'] = $service;
     $args['interval'] = $interval;
     foreach ($interval_types as $interval_type => $type) {
         $args['interval'] = $interval_type;
         $intervalOptions[$interval_type] = array('title' => $type['title'], 'selected' => $interval_type == $interval, 'url' => $this->buildbreadcrumbURL($this->page, $args, false));
     }
     $args = $this->args;
     $args['service'] = $service;
     $args['interval'] = $interval;
     foreach ($serviceTypes as $serviceType => $serviceTypeTitle) {
         $args['service'] = $serviceType;
         $serviceOptions[$serviceType] = array('title' => $serviceTypeTitle, 'selected' => $service == $serviceType, 'url' => $this->buildbreadcrumbURL($this->page, $args, false));
     }
     $this->assign('starttime', $startTime);
     $this->assign('endtime', $endTime);
     $this->assign('statsService', $service);
     $this->assign('interval', $interval);
     $this->assign('intervalOptions', $intervalOptions);
     $this->assign('serviceOptions', $serviceOptions);
     $this->assign('intervalTabclass', count($interval_types) == 4 ? 'fourtabs' : 'threetabs');
     $this->assign('serviceTabclass', 'twotabs');
     $commonData = array('service' => $service, 'start' => $startTime, 'end' => $endTime);
     if ($date = KurogoStats::getLastDateFromSummary()) {
         includePackage('DateTime');
         $date = new DateTime($date);
         $this->assign('lastUpdated', DateFormatter::formatDate($date, DateFormatter::LONG_STYLE, DateFormatter::NO_STYLE));
     }
     switch ($this->page) {
         case 'index':
             //get config
             $chartsConfig = $this->getModuleSections('stats-index');
             $charts = array();
             foreach ($chartsConfig as $chartIndex => $chartData) {
                 try {
                     $charts[] = $this->prepareChart(array_merge($chartData, $commonData), $interval);
                 } catch (KurogoStatsConfigurationException $e) {
                     $this->redirectTo('statsconfigerror', array('chart' => $chartData['title']));
                 }
             }
             $this->assign('charts', $charts);
             break;
         case 'detail':
             if (!($group = $this->getArg('group'))) {
                 $this->redirectTo('index');
             }
             if (!(${$group} = $this->getArg($group))) {
                 $this->redirectTo('index');
             }
             if (!($chartsConfig = $this->getChartsConfig($group, ${$group}))) {
                 $this->redirectTo('index');
             }
             $charts = array();
             $commonData[$group] = ${$group};
             foreach ($chartsConfig as $chartIndex => $chartData) {
                 try {
                     $charts[] = $this->prepareChart(array_merge($chartData, $commonData), $interval);
                 } catch (KurogoStatsConfigurationException $e) {
                     $this->redirectTo('statsconfigerror', array('chart' => $chartData['title']));
                 }
             }
             $this->setPageTitle(sprintf("Stats for %s", ${$group}));
             $this->assign('charts', $charts);
             break;
         case 'statsconfigerror':
             $this->assign('chart', $this->getArg('chart'));
             break;
     }
 }