public function visits_hits() { $this->updateFilter(); $sReturnMode = getRequest('param0'); // $curr_page = (int) getRequest('p'); // // $thisHost = cmsController::getInstance()->getCurrentDomain()->getHost(); $thisLang = cmsController::getInstance()->getCurrentLang()->getPrefix(); $thisUrl = '/' . $thisLang . '/admin/stat/' . __FUNCTION__; $thisUrlTail = ''; // $factory = new statisticFactory(dirname(__FILE__) . '/classes'); // if ($sReturnMode === 'xml') { } elseif ($sReturnMode === 'xml1') { $factory->isValid('visitCommon'); $report = $factory->get('visitCommon'); // $report->setStart($this->from_time); $report->setFinish($this->to_time); $report->setDomain($this->domain); $report->setUser($this->user); // $result = $report->get(); // ================================= $iHoveredAbs = 0; $iTotalAbs = $result['summ']; $iTotalRecs = $result['total']; $sAnswer = ""; $sAnswer .= "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?" . ">\n"; $sAnswer .= <<<END <statistics> <report name="visitCommon" title="Динамика хитов по дням" host="{$thisHost}" lang="{$thisLang}" timerange_start="{$this->from_time}" timerange_finish="{$this->to_time}"> <table> <column field="timestamp" title="День" showas="date" valueSuffix="" prefix="" /> <column field="count" title="Хитов (абсолютное значение)" valueSuffix="" prefix="" /> <column field="rel" title="Хитов (относительное значение)" valueSuffix="%" prefix="" /> </table> <chart type="column" drawTrendLine="true"> <argument field="timestamp" /> <value field="count" description="Количество хитов" axisTitle="Количество хитов" /> <caption field="date" /> </chart> <data> END; $iOldTimeStamp = $this->from_time; foreach ($result['detail']['result'] as $info) { if (!isset($info['ts'])) { $info['ts'] = NULL; } $sThisDate = date('d M', $info['ts']); while ($iOldTimeStamp < $info['ts'] && date('d M', $iOldTimeStamp) != $sThisDate) { $attr_page_uri = htmlspecialchars(''); $sAnswer .= "<row " . "timestamp=\"" . $iOldTimeStamp . "\" " . "count=\"0\" " . "date=\"" . __stat_admin::makeDate('d M', $iOldTimeStamp) . "\" " . "uri=\"" . $attr_page_uri . "\" rel=\"0\" />\n"; $iOldTimeStamp += 86400; } $iOldTimeStamp = $info['ts'] + 86400; $iAbs = isset($info['cnt']) ? $info['cnt'] : 0; $iHoveredAbs += $iAbs; $page_uri = ''; $attr_uri = htmlspecialchars($page_uri); $sAnswer .= "<row "; $sAttrs = ''; $sAttrs .= 'timestamp="' . $info['ts'] . '" '; $sAttrs .= 'count="' . $iAbs . '" '; $sAttrs .= 'date="' . __stat_admin::makeDate('d M', $info['ts']) . '" '; $sAttrs .= 'uri="' . $attr_uri . '" '; $sAttrs .= 'rel="' . round($iAbs / ($iTotalAbs / 100), 1) . '" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; } $sThisDate = date('d M', $this->to_time + 86400); while ($iOldTimeStamp < $this->to_time + 86400 && date('d M', $iOldTimeStamp) != $sThisDate) { $attr_page_uri = htmlspecialchars(''); $sAnswer .= "<row " . "timestamp=\"" . $iOldTimeStamp . "\" " . "count=\"0\" " . "date=\"" . __stat_admin::makeDate('d M', $iOldTimeStamp) . "\" " . "uri=\"" . $attr_page_uri . "\" rel=\"0\" />\n"; $iOldTimeStamp += 86400; } $iRest = $iTotalAbs - $iHoveredAbs; $sAnswer .= "</data>\n"; $sAnswer .= "</report>\n</statistics>"; // header("Content-type: text/xml; charset=utf-8"); header("Content-length: " . strlen($sAnswer)); $this->flush($sAnswer); return ""; } elseif ($sReturnMode === 'xml2') { $factory->isValid('visitCommonHours'); $report = $factory->get('visitCommonHours'); // $report->setStart($this->from_time); $report->setFinish($this->to_time); $report->setDomain($this->domain); $report->setUser($this->user); // $result = $report->get(); // ================================= $iHoveredAbs = 0; $iTotalAbs = $result['summ'] ? $result['summ'] : 1; $iTotalRecs = $result['total']; $sAnswer = ""; $sAnswer .= "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?" . ">\n"; $sAnswer .= <<<END <statistics> <report name="visitCommonHours" title="Распеределение хитов по часам суток" host="{$thisHost}" lang="{$thisLang}" timerange_start="{$this->from_time}" timerange_finish="{$this->to_time}"> <table> <column field="hourint" title="Часы" valueSuffix="" prefix="" /> <column field="count" title="Хитов (абсолютное значение)" valueSuffix="" prefix="" /> <column field="rel" title="Хитов (относительное значение)" valueSuffix="%" prefix="" /> </table> <chart type="line" drawTrendLine="true"> <argument field="hour" /> <value field="count" description="Количество хитов" axisTitle="Количество хитов" /> <caption field="hourint" /> </chart> <data> END; $iHour = 0; for ($iHour = 0; $iHour < 24; $iHour++) { if (isset($result['detail'][$iHour])) { $info = $result['detail'][$iHour]; } else { $info = array('ts' => mktime($iHour), 'cnt' => 0); } $iAbs = $info['cnt']; $iHoveredAbs += $iAbs; $page_uri = ''; $iTtlHour = intval(date('G', $info['ts'])); $page_title = $iTtlHour . ".." . ($iTtlHour + 1); $attr_page_title = htmlspecialchars($page_title); $attr_uri = htmlspecialchars($page_uri); $sAnswer .= "<row "; $sAttrs = ''; $sAttrs .= 'count="' . $iAbs . '" '; $sAttrs .= 'hourint="' . $attr_page_title . '" '; $sAttrs .= 'uri="' . $attr_uri . '" '; $sAttrs .= 'timestamp="' . $info['ts'] . '" '; $sAttrs .= 'rel="' . round($iAbs / ($iTotalAbs / 100), 1) . '" '; $sAttrs .= 'hour="' . $iTtlHour . '" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; } $iRest = $iTotalAbs - $iHoveredAbs; $sAnswer .= "</data>\n"; $sAnswer .= "</report>\n</statistics>"; // header("Content-type: text/xml; charset=utf-8"); header("Content-length: " . strlen($sAnswer)); $this->flush($sAnswer); return ""; } else { $params = array(); $params['filter'] = $this->getFilterPanel(); $params['ReportHitsByDays']['flash:report1'] = "url=" . $thisUrl . "/xml1/" . $thisUrlTail; $params['ReportHitsByHours']['flash:report2'] = "url=" . $thisUrl . "/xml2/" . $thisUrlTail; $this->setDataType("settings"); $this->setActionType("view"); $data = $this->prepareData($params, 'settings'); $this->setData($data); return $this->doData(); } }
public function visitors() { $this->updateFilter(); // $sReturnMode = getRequest('param0'); // // $thisHost = cmsController::getInstance()->getCurrentDomain()->getHost(); $thisLang = cmsController::getInstance()->getCurrentLang()->getPrefix(); $thisUrl = '/'.$thisLang.'/admin/stat/'.__FUNCTION__; $thisUrlTail = ''; // $factory = new statisticFactory(dirname(__FILE__) . '/classes'); // if ($sReturnMode === 'xml1') { $factory->isValid('visitersCommon'); $report = $factory->get('visitersCommon'); // $report->setStart($this->from_time); $report->setFinish($this->to_time); $report->setLimit(PHP_INT_MAX); $report->setOffset(0); $report->setDomain($this->domain); $report->setUser($this->user); // $result = $report->get(); // $iHoveredAbs = 0; $iTotalAbs = $result['summ']; $iTotalRecs = $result['total']; $sAnswer = ""; $sAnswer .= "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">\n"; $sAnswer .= <<<END <statistics> <report name="visitCommon" title="Динамика захода посетителей за выбранный период по дням" host="{$thisHost}" lang="{$thisLang}" timerange_start="{$this->from_time}" timerange_finish="{$this->to_time}"> <table> <column field="name" title="День" valueSuffix="" prefix="" /> <column field="cnt" title="Сессий" valueSuffix="" prefix="" /> </table> <chart type="column" drawTrendLine="true"> <argument /> <value field="cnt" description="Количество сессий" axisTitle="Количество сессий" /> <caption field="name" /> </chart> <data> END; $iOldTimeStamp = $this->from_time; foreach($result['detail'] as $info) { $sThisDate = date('d M', $info['ts']); while( ($iOldTimeStamp < $info['ts']) && (date('d M', $iOldTimeStamp) != $sThisDate) ) { $attr_page_uri = ''; $sAnswer .= "<row ". "ts=\"".$iOldTimeStamp."\" ". "cnt=\"0\" ". "name=\"".__stat_admin::makeDate('d M', $iOldTimeStamp)."\" ". "uri=\"".$attr_page_uri."\" rel=\"0\" />\n"; $iOldTimeStamp += 86400; } $iOldTimeStamp = $info['ts'] + 86400; $iAbs = $info['cnt']; $iHoveredAbs += $iAbs; $page_uri = '/'.$thisLang.'/admin/stat/visitors_by_date/'.$info['ts']; $page_title = date('d M', $info['ts']); // $attr_page_title = htmlspecialchars($page_title); $attr_uri= htmlspecialchars($page_uri); // $sAnswer .= "<row "; $sAttrs = ''; $sAttrs .= 'cnt="'.$iAbs.'" '; $sAttrs .= 'name="'.$attr_page_title.'" '; $sAttrs .= 'uri="'.$attr_uri.'" '; $sAttrs .= 'ts="'.$info['ts'].'" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; } $sThisDate = date('d M', $this->to_time+86400); while( ($iOldTimeStamp < $this->to_time+86400) && (date('d M', $iOldTimeStamp) != $sThisDate) ) { $attr_page_uri = htmlspecialchars( '' ); $sAnswer .= "<row ". "ts=\"".$iOldTimeStamp."\" ". "cnt=\"0\" ". "name=\"".__stat_admin::makeDate('d M', $iOldTimeStamp)."\" ". "uri=\"".$attr_page_uri."\" rel=\"0\" />\n"; $iOldTimeStamp += 86400; } $iRest = ($iTotalAbs - $iHoveredAbs); $sAnswer .= "</data>\n"; $sAnswer .= "</report>\n</statistics>"; // header("Content-type: text/xml; charset=utf-8"); header("Content-length: ".strlen($sAnswer)); $this->flush($sAnswer); return ""; } elseif ($sReturnMode === 'xml2') { $factory->isValid('visitersCommonHours'); $report = $factory->get('visitersCommonHours'); // $report->setStart($this->from_time); $report->setFinish($this->to_time); $report->setLimit(PHP_INT_MAX); $report->setOffset(0); $report->setDomain($this->domain); $report->setUser($this->user); // $result = $report->get(); // $iHoveredAbs = 0; $iTotalAbs = $result['summ']; $iTotalRecs = $result['total']; $sAnswer = ""; $sAnswer .= "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">\n"; $sAnswer .= <<<END <statistics> <report name="visitCommonHours" title="Динамика захода посетителей за выбранный период по часам суток" host="{$thisHost}" lang="{$thisLang}" timerange_start="{$this->from_time}" timerange_finish="{$this->to_time}"> <table> <column field="name" title="Час" valueSuffix="" prefix="" /> <column field="cnt" title="Сессий" valueSuffix="" prefix="" /> </table> <chart type="line" drawTrendLine="true"> <argument /> <value field="cnt" description="Количество сессий" axisTitle="Количество сессий" /> <caption field="name" /> </chart> <data> END; $iHour = 0; for ($iHour = 0; $iHour < 24; $iHour++) { if (isset($result['detail'][$iHour])) { $info = $result['detail'][$iHour]; } else { $info = array('ts'=>mktime($iHour), 'cnt'=>0); } // $iAbs = $info['cnt']; $iHoveredAbs += $iAbs; $page_uri = ''; $iTtlHour = intval(date('G', $info['ts'])); $page_title = $iTtlHour."..".($iTtlHour+1); // $attr_page_title = htmlspecialchars($page_title); $attr_uri= htmlspecialchars($page_uri); // $sAnswer .= "<row "; $sAttrs = ''; $sAttrs .= 'cnt="'.$iAbs.'" '; $sAttrs .= 'name="'.$attr_page_title.'" '; $sAttrs .= 'uri="'.$attr_uri.'" '; $sAttrs .= 'ts="'.$info['ts'].'" '; $sAttrs .= 'hour="'.$iTtlHour.'" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; } $iRest = ($iTotalAbs - $iHoveredAbs); if ($iRest > 0) { $sAnswer .= "<row cnt=\"{$iRest}\" name=\"Прочее\" uri=\"\" />"; } $sAnswer .= "</data>\n"; $sAnswer .= "</report>\n</statistics>"; // header("Content-type: text/xml; charset=utf-8"); header("Content-length: ".strlen($sAnswer)); $this->flush($sAnswer); return ""; } else { $factory->isValid('visitersCommon'); $report = $factory->get('visitersCommon'); // $report->setStart($this->from_time); $report->setFinish($this->to_time); $report->setLimit(PHP_INT_MAX); $report->setOffset(0); // $result = $report->get(); // $params = array(); $params['filter'] = $this->getFilterPanel(); //$params['total']['int:sessions_routine'] = strlen($result['avg']['routine'])?$result['avg']['routine']:"-"; //$params['total']['int:sessions_weekend'] = strlen($result['avg']['weekend'])?$result['avg']['weekend']:"-"; $params['ReportSessionsByDays']['flash:report1'] = "url=".$thisUrl."/xml1/".$thisUrlTail; $params['ReportSessionsByHours']['flash:report2'] = "url=".$thisUrl."/xml2/".$thisUrlTail; $this->setDataType("settings"); $this->setActionType("view"); $data = $this->prepareData($params, 'settings'); $this->setData($data); // return $this->doData(); } }
public function visitTime() { $this->updateFilter(); // $sReturnMode = getRequest('param0'); $thisHost = cmsController::getInstance()->getCurrentDomain()->getHost(); $thisLang = cmsController::getInstance()->getCurrentLang()->getPrefix(); $thisUrl = '/' . $thisLang . '/admin/stat/' . __FUNCTION__; $thisUrlTail = ''; // $factory = new statisticFactory(dirname(__FILE__) . '/classes'); $factory->isValid('visitTime'); $report = $factory->get('visitTime'); // $report->setStart($this->from_time); $report->setFinish($this->to_time); $report->setDomain($this->domain); $report->setUser($this->user); //$report->setLimit($this->items_per_page); // // $result = $report->get(); $sGroupBy = $result['groupby']; // if ($sReturnMode === 'xml') { $sAnswer = ""; $sAnswer .= "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?" . ">\n"; $sAnswer .= <<<END \t\t\t\t<statistic report="visitTime" host="{$thisHost}" lang="{$thisLang}" timerange_start="{$this->from_time}" timerange_finish="{$this->to_time}" groupby="{$sGroupBy}"> \t\t\t\t<details> END; foreach ($result['detail'] as $info) { $iAbs = $info['cnt']; $page_uri = ''; $page_title = $info['minutes']; // $attr_page_title = htmlspecialchars($page_title); $attr_uri = htmlspecialchars($page_uri); // $sAnswer .= "<detail "; $sAttrs = ''; $sAttrs .= 'cnt="' . $iAbs . '" '; $sAttrs .= 'name="' . $attr_page_title . '" '; $sAttrs .= 'uri="' . $attr_uri . '" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; } $sAnswer .= <<<END \t\t\t\t</details> \t\t\t\t<dynamic> END; foreach ($result['dynamic'] as $info) { $fAbs = $info['minutes_avg']; $page_uri = ''; $page_title = $info['ts']; // $attr_page_title = htmlspecialchars($page_title); $attr_uri = htmlspecialchars($page_uri); // $sAnswer .= "<detail "; $sAttrs = ''; $sAttrs .= 'cnt="' . $fAbs . '" '; $sAttrs .= 'name="' . $attr_page_title . '" '; $sAttrs .= 'uri="' . $attr_uri . '" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; } $sAnswer .= <<<END \t\t\t\t</dynamic> \t\t\t</statistic> END; // header("Content-type: text/xml; charset=utf-8"); header("Content-length: " . strlen($sAnswer)); $this->flush($sAnswer); return ""; } elseif ($sReturnMode === 'xml1') { $sAnswer = ""; $sAnswer .= "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?" . ">\n"; $sAnswer .= <<<END \t\t\t\t<statistics> \t\t\t\t<report name="visitTime1" title="Распределение посещений по времени нахождения на сайте" host="{$thisHost}" lang="{$thisLang}" timerange_start="{$this->from_time}" timerange_finish="{$this->to_time}"> \t\t\t\t<table> \t\t\t\t\t<column field="name" title="Продолжительность" units="минут" prefix="" /> \t\t\t\t\t<column field="cnt" title="Посещений абс." units="" prefix="" /> \t\t\t\t\t<column field="rel" title="Посещений отн." valueSuffix="%" prefix="" /> \t\t\t\t</table> \t\t\t\t<chart type="pie"> \t\t\t\t\t<argument /> \t\t\t\t\t<value field="cnt" description="Количество посещений" axisTitle="Количество посещений" /> \t\t\t\t\t<caption field="name" /> \t\t\t\t</chart> \t\t\t\t<data> END; $iAbsTotal = 0; foreach ($result['detail'] as $info) { if (isset($info['cnt'])) { $iAbsTotal += intval($info['cnt']); } } foreach ($result['detail'] as $info) { $iAbs = $info['cnt']; $page_uri = ''; $page_title = intval($info['minutes']); if ($page_title > 50) { $page_title = "более 50"; } elseif ($page_title > 40) { $page_title = "41 ... 50"; } elseif ($page_title > 30) { $page_title = "31 ... 40"; } elseif ($page_title > 20) { $page_title = "21 ... 30"; } elseif ($page_title > 10) { $page_title = "11 ... 20"; } // $attr_page_title = htmlspecialchars($page_title); $attr_uri = htmlspecialchars($page_uri); // $sAnswer .= "<row "; $sAttrs = ''; $sAttrs .= 'cnt="' . $iAbs . '" '; $sAttrs .= 'name="' . $attr_page_title . '" '; $sAttrs .= 'uri="' . $attr_uri . '" '; $sAttrs .= 'rel="' . ($iAbsTotal ? round($iAbs / ($iAbsTotal / 100), 1) : '0') . '" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; } $sAnswer .= "</data>\n"; $sAnswer .= "</report></statistics>"; // header("Content-type: text/xml; charset=utf-8"); header("Content-length: " . strlen($sAnswer)); $this->flush($sAnswer); return ""; } elseif ($sReturnMode === 'xml2') { $sPeriod = "Период"; $sPeriodOf = "периодам"; if ($sGroupBy === 'month') { $sPeriod = "Месяц"; $sPeriodOf = "месяцам"; $sAxisTitle = "месяцы"; } elseif ($sGroupBy === 'week') { $sPeriod = "Неделя"; $sPeriodOf = "неделям"; $sAxisTitle = "недели"; } // $sAnswer = "<data>\n"; $sort_arr = array(); foreach ($result['dynamic'] as $uniqid => $row) { foreach ($row as $key => $value) { $sort_arr[$key][$uniqid] = $value; } } if (isset($sort_arr['ts']) && !empty($sort_arr['ts'])) { array_multisort($sort_arr['ts'], SORT_ASC, $result['dynamic']); } $iResponseRowCount = 0; $iOldTimeStamp = $this->from_time; foreach ($result['dynamic'] as $info) { $iNewTS = strtotime('-7 day', $info['ts']); if ($iOldTimeStamp > $iNewTS) { $info['ts'] = $iOldTimeStamp; } $sThisDate = date('W', $info['ts']); while ($iOldTimeStamp < $info['ts'] && date('W', $iOldTimeStamp) != $sThisDate) { $attr_page_uri = ''; $sAnswer .= "<row " . "cnt=\"0\" " . "name=\"от " . __stat_admin::makeDate('M-d', $iOldTimeStamp) . "\" " . "uri=\"" . $attr_page_uri . "\" " . "ts=\"" . $iOldTimeStamp . "\" />\n"; $iOldTimeStamp += 86400 * 7; $iResponseRowCount++; } $iOldTimeStamp = $info['ts'] + 86400 * 7; $fAbs = $info['minutes_avg']; $page_uri = ''; $page_title = "от " . __stat_admin::makeDate('M-d', intval($info['ts'])); // $attr_page_title = htmlspecialchars($page_title); $attr_uri = htmlspecialchars($page_uri); // $sAnswer .= "<row "; $sAttrs = ''; $sAttrs .= 'cnt="' . round($fAbs, 1) . '" '; $sAttrs .= 'name="' . $attr_page_title . '" '; $sAttrs .= 'uri="' . $attr_uri . '" '; $sAttrs .= 'ts="' . $info['ts'] . '" '; $sAnswer .= $sAttrs; $sAnswer .= "/>\n"; $iResponseRowCount++; } $sThisDate = date('d M', $this->to_time + 86400); while ($iOldTimeStamp < $this->to_time + 86400 && date('d M', $iOldTimeStamp) != $sThisDate) { $attr_page_uri = htmlspecialchars(''); $sAnswer .= "<row " . "cnt=\"0\" " . "name=\"от " . __stat_admin::makeDate('M-d', $iOldTimeStamp) . "\" " . "uri=\"" . $attr_page_uri . "\" " . "ts=\"" . $iOldTimeStamp . "\" />\n"; $iOldTimeStamp += 86400 * 7; $iResponseRowCount++; } $sAnswer .= "</data>\n"; $sAnswer .= "</report></statistics>"; if ($iResponseRowCount > 1) { $sChartType = "line"; } else { $sChartType = "column"; } $sAnswerHdr = "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?" . ">\n"; $sAnswerHdr .= <<<END \t\t\t\t<statistics> \t\t\t\t<report name="visitTime2" title="Динамика средней продолжительности нахождения посетителей на сайте" host="{$thisHost}" lang="{$thisLang}" timerange_start="{$this->from_time}" timerange_finish="{$this->to_time}" groupby="{$sGroupBy}"> \t\t\t\t<table> \t\t\t\t\t<column field="ts" title="{$sPeriod}" showas="date" units="" prefix="" /> \t\t\t\t\t<column field="cnt" title="Средняя продолжительность" units="" prefix="" /> \t\t\t\t</table> \t\t\t\t<chart type="{$sChartType}" drawTrendLine="true"> \t\t\t\t\t<argument fiels="ts" axisTitle="{$sAxisTitle}" /> \t\t\t\t\t<value field="cnt" description="Средняя продолжительность" axisTitle="Минут" /> \t\t\t\t\t<caption field="name" /> \t\t\t\t</chart> END; $sAnswer = $sAnswerHdr . $sAnswer; // header("Content-type: text/xml; charset=utf-8"); header("Content-length: " . strlen($sAnswer)); $this->flush($sAnswer); return ""; } else { $params = array(); $params['filter'] = $this->getFilterPanel(); $params['ReportVisitTime']['flash:report1'] = "url=" . $thisUrl . "/xml1/" . $thisUrlTail; $params['ReportVisitTimeChange']['flash:report2'] = "url=" . $thisUrl . "/xml2/" . $thisUrlTail; $this->setDataType("settings"); $this->setActionType("view"); $data = $this->prepareData($params, 'settings'); $this->setData($data); return $this->doData(); } }