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; } }