merge sandbox to trunk for 1.4.4

git-svn-id: http://xe-core.googlecode.com/svn/trunk@7723 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2010-09-28 07:24:47 +00:00
parent 200d63636c
commit b8299c8a65
683 changed files with 70982 additions and 69716 deletions

View file

@ -1,33 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">접속통계</title>
<title xml:lang="zh-CN">访问统计</title>
<title xml:lang="en">Counter</title>
<title xml:lang="vi">Counter</title>
<title xml:lang="es">Contador</title>
<title xml:lang="jp">アクセスカウンター</title>
<title xml:lang="ru">Базовый счетчик</title>
<title xml:lang="zh-TW">基本統計</title>
<description xml:lang="ko">기본 접속 통계 프로그램입니다.</description>
<description xml:lang="zh-CN">默认访问统计程序。</description>
<description xml:lang="en">Basic connection statistics program.</description>
<description xml:lang="vi">Chương trình thống kê kết nối cơ bản.</description>
<description xml:lang="es">Programa básico para la estadística de la conección.</description>
<description xml:lang="jp">デフォルトアクセス統計のプログラムです。</description>
<description xml:lang="ru">Базовая программа статистики подключений.</description>
<description xml:lang="zh-TW">預設的統計程式。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>statistics</category>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">접속통계</title>
<title xml:lang="zh-CN">访问统计</title>
<title xml:lang="en">Counter</title>
<title xml:lang="vi">Counter</title>
<title xml:lang="es">Contador</title>
<title xml:lang="jp">アクセスカウンター</title>
<title xml:lang="ru">Базовый счетчик</title>
<title xml:lang="zh-TW">基本統計</title>
<description xml:lang="ko">기본 접속 통계 프로그램입니다.</description>
<description xml:lang="zh-CN">默认访问统计程序。</description>
<description xml:lang="en">Basic connection statistics program.</description>
<description xml:lang="vi">Chương trình thống kê kết nối cơ bản.</description>
<description xml:lang="es">Programa básico para la estadística de la conección.</description>
<description xml:lang="jp">デフォルトアクセス統計のプログラムです。</description>
<description xml:lang="ru">Базовая программа статистики подключений.</description>
<description xml:lang="zh-TW">預設的統計程式。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>statistics</category>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</module>

View file

@ -1,50 +1,50 @@
<?php
/**
* @class counterAdminView
* @author zero (zero@nzeo.com)
* @brief counter 모듈의 Admin view class
**/
class counterAdminView extends counter {
/**
* @brief 초기화
**/
function init() {
// 템플릿 경로 지정
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief 관리자 페이지 초기화면
**/
function dispCounterAdminIndex() {
// 정해진 일자가 없으면 오늘자로 설정
$selected_date = Context::get('selected_date');
if(!$selected_date) $selected_date = date("Ymd");
Context::set('selected_date', $selected_date);
// counter model 객체 생성
$oCounterModel = &getModel('counter');
// 전체 카운터 및 지정된 일자의 현황 가져오기
$site_module_info = Context::get('site_module_info');
$status = $oCounterModel->getStatus(array(0,$selected_date),$site_module_info->site_srl);
Context::set('total_counter', $status[0]);
Context::set('selected_day_counter', $status[$selected_date]);
// 시간, 일, 월, 년도별로 데이터 가져오기
$type = Context::get('type');
if(!$type) {
$type = 'day';
Context::set('type',$type);
}
$detail_status = $oCounterModel->getHourlyStatus($type, $selected_date, $site_module_info->site_srl);
Context::set('detail_status', $detail_status);
// 표시
$this->setTemplateFile('index');
}
}
?>
<?php
/**
* @class counterAdminView
* @author NHN (developers@xpressengine.com)
* @brief counter 모듈의 Admin view class
**/
class counterAdminView extends counter {
/**
* @brief 초기화
**/
function init() {
// 템플릿 경로 지정
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief 관리자 페이지 초기화면
**/
function dispCounterAdminIndex() {
// 정해진 일자가 없으면 오늘자로 설정
$selected_date = Context::get('selected_date');
if(!$selected_date) $selected_date = date("Ymd");
Context::set('selected_date', $selected_date);
// counter model 객체 생성
$oCounterModel = &getModel('counter');
// 전체 카운터 및 지정된 일자의 현황 가져오기
$site_module_info = Context::get('site_module_info');
$status = $oCounterModel->getStatus(array(0,$selected_date),$site_module_info->site_srl);
Context::set('total_counter', $status[0]);
Context::set('selected_day_counter', $status[$selected_date]);
// 시간, 일, 월, 년도별로 데이터 가져오기
$type = Context::get('type');
if(!$type) {
$type = 'day';
Context::set('type',$type);
}
$detail_status = $oCounterModel->getHourlyStatus($type, $selected_date, $site_module_info->site_srl);
Context::set('detail_status', $detail_status);
// 표시
$this->setTemplateFile('index');
}
}
?>

View file

@ -1,69 +1,69 @@
<?php
/**
* @class counter
* @author zero (zero@nzeo.com)
* @brief counter 모듈의 high class
**/
class counter extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
$oCounterController = &getController('counter');
// 0 일자로 기록될 전체 방문 기록 row 추가
//$oCounterController->insertTotalStatus();
// 오늘자 row입력
//$oCounterController->insertTodayStatus();
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$db_info = Context::getDbInfo ();
// 카운터에 site_srl추가
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists('counter_log', 'site_srl')) return true;
if ($db_info->db_type == 'cubrid') {
if(!$oDB->isIndexExists('counter_log', $oDB->prefix.'counter_log_idx_site_counter_log')) return true;
}
else {
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log')) return true;
}
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
$db_info = Context::getDBInfo ();
// 카운터에 site_srl추가
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists('counter_log', 'site_srl'))
$oDB->addColumn('counter_log','site_srl','number',11,0,true);
if ($db_info->db_type == 'cubrid') {
if(!$oDB->isIndexExists('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log'))
$oDB->addIndex('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log',array('site_srl','ipaddress'),false);
}
else {
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log'))
$oDB->addIndex('counter_log','idx_site_counter_log',array('site_srl','ipaddress'),false);
}
return new Object(0, 'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
}
}
?>
<?php
/**
* @class counter
* @author NHN (developers@xpressengine.com)
* @brief counter 모듈의 high class
**/
class counter extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
$oCounterController = &getController('counter');
// 0 일자로 기록될 전체 방문 기록 row 추가
//$oCounterController->insertTotalStatus();
// 오늘자 row입력
//$oCounterController->insertTodayStatus();
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$db_info = Context::getDbInfo ();
// 카운터에 site_srl추가
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists('counter_log', 'site_srl')) return true;
if ($db_info->db_type == 'cubrid') {
if(!$oDB->isIndexExists('counter_log', $oDB->prefix.'counter_log_idx_site_counter_log')) return true;
}
else {
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log')) return true;
}
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
$db_info = Context::getDBInfo ();
// 카운터에 site_srl추가
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists('counter_log', 'site_srl'))
$oDB->addColumn('counter_log','site_srl','number',11,0,true);
if ($db_info->db_type == 'cubrid') {
if(!$oDB->isIndexExists('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log'))
$oDB->addIndex('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log',array('site_srl','ipaddress'),false);
}
else {
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log'))
$oDB->addIndex('counter_log','idx_site_counter_log',array('site_srl','ipaddress'),false);
}
return new Object(0, 'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
}
}
?>

View file

@ -1,145 +1,145 @@
<?php
/**
* @class counterController
* @author zero (zero@nzeo.com)
* @brief counter 모듈의 controller class
**/
class counterController extends counter {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 카운터 기록
**/
function procCounterExecute() {
$oDB = &DB::getInstance();
$oDB->begin();
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
// 로그를 검사
$oCounterModel = &getModel('counter');
// 오늘자 row가 있는지 체크하여 없으면 등록
if(!$oCounterModel->isInsertedTodayStatus($site_srl)) {
$this->insertTodayStatus(0,$site_srl);
// 기존 row가 있으면 사용자 체크
} else {
// 등록되어 있지 않은 아이피일 경우
if(!$oCounterModel->isLogged($site_srl)) {
// 로그 등록
$this->insertLog($site_srl);
// unique 및 pageview 등록
$this->insertUniqueVisitor($site_srl);
} else {
// pageview 등록
$this->insertPageView($site_srl);
}
}
$oDB->commit();
}
/**
* @brief 로그 등록
**/
function insertLog($site_srl=0) {
$args->regdate = date("YmdHis");
$args->user_agent = substr ($_SERVER['HTTP_USER_AGENT'], 0, 250);
$args->site_srl = $site_srl;
return executeQuery('counter.insertCounterLog', $args);
}
/**
* @brief unique visitor 등록
**/
function insertUniqueVisitor($site_srl=0) {
if($site_srl) {
$args->regdate = '0';
$args->site_srl = $site_srl;
$output = executeQuery('counter.updateSiteCounterUnique', $args);
$args->regdate = date('Ymd');
$output = executeQuery('counter.updateSiteCounterUnique', $args);
} else {
$args->regdate = '0';
$output = executeQuery('counter.updateCounterUnique', $args);
$args->regdate = date('Ymd');
$output = executeQuery('counter.updateCounterUnique', $args);
}
}
/**
* @brief pageview 등록
**/
function insertPageView($site_srl=0) {
if($site_srl) {
$args->regdate = '0';
$args->site_srl = $site_srl;
executeQuery('counter.updateSiteCounterPageview', $args);
$args->regdate = date('Ymd');
executeQuery('counter.updateSiteCounterPageview', $args);
} else {
$args->regdate = '0';
executeQuery('counter.updateCounterPageview', $args);
$args->regdate = date('Ymd');
executeQuery('counter.updateCounterPageview', $args);
}
}
/**
* @brief 전체 카운터 status 추가
**/
function insertTotalStatus($site_srl=0) {
$args->regdate = 0;
if($site_srl) {
$args->site_srl = $site_srl;
executeQuery('counter.insertSiteTodayStatus', $args);
} else {
executeQuery('counter.insertTodayStatus', $args);
}
}
/**
* @brief 오늘자 카운터 status 추가
**/
function insertTodayStatus($regdate = 0, $site_srl=0) {
if($regdate) $args->regdate = $regdate;
else $args->regdate = date("Ymd");
if($site_srl) {
$args->site_srl = $site_srl;
$query_id = 'counter.insertSiteTodayStatus';
$u_args->site_srl = $site_srl; ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
executeQuery($query_id, $u_args);
} else {
$query_id = 'counter.insertTodayStatus';
executeQuery($query_id); ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
}
$output = executeQuery($query_id, $args);
// 로그 등록
$this->insertLog($site_srl);
// unique 및 pageview 등록
$this->insertUniqueVisitor($site_srl);
}
/**
* @brief 특정 가상 사이트의 카운터 로그 삭제
**/
function deleteSiteCounterLogs($site_srl) {
$args->site_srl = $site_srl;
executeQuery('counter.deleteSiteCounter',$args);
executeQuery('counter.deleteSiteCounterLog',$args);
}
}
?>
<?php
/**
* @class counterController
* @author NHN (developers@xpressengine.com)
* @brief counter 모듈의 controller class
**/
class counterController extends counter {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 카운터 기록
**/
function procCounterExecute() {
$oDB = &DB::getInstance();
$oDB->begin();
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
// 로그를 검사
$oCounterModel = &getModel('counter');
// 오늘자 row가 있는지 체크하여 없으면 등록
if(!$oCounterModel->isInsertedTodayStatus($site_srl)) {
$this->insertTodayStatus(0,$site_srl);
// 기존 row가 있으면 사용자 체크
} else {
// 등록되어 있지 않은 아이피일 경우
if(!$oCounterModel->isLogged($site_srl)) {
// 로그 등록
$this->insertLog($site_srl);
// unique 및 pageview 등록
$this->insertUniqueVisitor($site_srl);
} else {
// pageview 등록
$this->insertPageView($site_srl);
}
}
$oDB->commit();
}
/**
* @brief 로그 등록
**/
function insertLog($site_srl=0) {
$args->regdate = date("YmdHis");
$args->user_agent = substr ($_SERVER['HTTP_USER_AGENT'], 0, 250);
$args->site_srl = $site_srl;
return executeQuery('counter.insertCounterLog', $args);
}
/**
* @brief unique visitor 등록
**/
function insertUniqueVisitor($site_srl=0) {
if($site_srl) {
$args->regdate = '0';
$args->site_srl = $site_srl;
$output = executeQuery('counter.updateSiteCounterUnique', $args);
$args->regdate = date('Ymd');
$output = executeQuery('counter.updateSiteCounterUnique', $args);
} else {
$args->regdate = '0';
$output = executeQuery('counter.updateCounterUnique', $args);
$args->regdate = date('Ymd');
$output = executeQuery('counter.updateCounterUnique', $args);
}
}
/**
* @brief pageview 등록
**/
function insertPageView($site_srl=0) {
if($site_srl) {
$args->regdate = '0';
$args->site_srl = $site_srl;
executeQuery('counter.updateSiteCounterPageview', $args);
$args->regdate = date('Ymd');
executeQuery('counter.updateSiteCounterPageview', $args);
} else {
$args->regdate = '0';
executeQuery('counter.updateCounterPageview', $args);
$args->regdate = date('Ymd');
executeQuery('counter.updateCounterPageview', $args);
}
}
/**
* @brief 전체 카운터 status 추가
**/
function insertTotalStatus($site_srl=0) {
$args->regdate = 0;
if($site_srl) {
$args->site_srl = $site_srl;
executeQuery('counter.insertSiteTodayStatus', $args);
} else {
executeQuery('counter.insertTodayStatus', $args);
}
}
/**
* @brief 오늘자 카운터 status 추가
**/
function insertTodayStatus($regdate = 0, $site_srl=0) {
if($regdate) $args->regdate = $regdate;
else $args->regdate = date("Ymd");
if($site_srl) {
$args->site_srl = $site_srl;
$query_id = 'counter.insertSiteTodayStatus';
$u_args->site_srl = $site_srl; ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
executeQuery($query_id, $u_args);
} else {
$query_id = 'counter.insertTodayStatus';
executeQuery($query_id); ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
}
$output = executeQuery($query_id, $args);
// 로그 등록
$this->insertLog($site_srl);
// unique 및 pageview 등록
$this->insertUniqueVisitor($site_srl);
}
/**
* @brief 특정 가상 사이트의 카운터 로그 삭제
**/
function deleteSiteCounterLogs($site_srl) {
$args->site_srl = $site_srl;
executeQuery('counter.deleteSiteCounter',$args);
executeQuery('counter.deleteSiteCounterLog',$args);
}
}
?>

View file

@ -1,201 +1,201 @@
<?php
/**
* @class counterModel
* @author zero (zero@nzeo.com)
* @brief counter 모듈의 Model class
**/
class counterModel extends counter {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 로그 검사
**/
function isLogged($site_srl=0) {
$args->regdate = date("Ymd");
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
$args->site_srl = $site_srl;
$output = executeQuery('counter.getCounterLog', $args);
return $output->data->count?true:false;
}
/**
* @brief 오늘자 카운터 현황 row 있는지 체크
**/
function isInsertedTodayStatus($site_srl=0) {
$args->regdate = date("Ymd");
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteTodayStatus', $args);
} else {
$output = executeQuery('counter.getTodayStatus', $args);
}
return $output->data->count?true:false;
}
/**
* @brief 특정 일의 접속 통계를 가져옴
**/
function getStatus($selected_date, $site_srl=0) {
// 여러개의 날짜 로그를 가져올 경우
if(is_array($selected_date)) {
$date_count = count($selected_date);
$args->regdate = implode(',',$selected_date);
// 단일 날짜의 로그를 가져올 경우
} else {
if(strlen($selected_date)==8) $selected_date = $selected_date;
$args->regdate = $selected_date;
}
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatusDays', $args);
} else {
$output = executeQuery('counter.getCounterStatusDays', $args);
}
$status = $output->data;
if(!is_array($selected_date)) return $status;
if(!is_array($status)) $status = array($status);
unset($output);
foreach($status as $key => $val) {
$output[substr($val->regdate,0,8)] = $val;
}
return $output;
}
/**
* @brief 지정된 일자의 시간대별 로그 가져오기
**/
function getHourlyStatus($type='hour', $selected_date, $site_srl=0) {
$max = 0;
$sum = 0;
switch($type) {
case 'year' :
// 카운터 시작일 구함
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteStartLogDate', $args);
} else {
$output = executeQuery('counter.getStartLogDate');
}
$start_year = substr($output->data->regdate,0,4);
if(!$start_year) $start_year = date("Y");
for($i=$start_year;$i<=date("Y");$i++) {
unset($args);
$args->start_date = sprintf('%04d0000', $i);
$args->end_date = sprintf('%04d1231', $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$i] = $count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
case 'week' :
$time = strtotime($selected_date);
$w = date("D");
while(date("D",$time) != "Sun") {
$time += 60*60*24;
}
$time -= 60*60*24;
while(date("D",$time)!="Sun") {
$thisWeek[] = date("Ymd",$time);
$time -= 60*60*24;
}
$thisWeek[] = date("Ymd",$time);
asort($thisWeek);
foreach($thisWeek as $day) {
unset($args);
$args->start_date = $day;
$args->end_date = $day;
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$day] = (int)$count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
case 'month' :
$year = substr($selected_date, 0, 4);
for($i=1;$i<=12;$i++) {
unset($args);
$args->start_date = sprintf('%04d%02d00', $year, $i);
$args->end_date = sprintf('%04d%02d31', $year, $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$i] = (int)$count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
case 'hour' :
for($i=0;$i<24;$i++) {
unset($args);
$args->start_date = sprintf('%08d%02d0000', $selected_date, $i);
$args->end_date = sprintf('%08d%02d5959', $selected_date, $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterLogStatus', $args);
} else {
$args->site_srl = 0;
$output = executeQuery('counter.getCounterLogStatus', $args);
}
$count = (int)$output->data->count;
$status->list[$i] = $count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
default :
$year = substr($selected_date, 0, 4);
$month = substr($selected_date, 4, 2);
$end_day = date('t', mktime(0,0,0,$month,1,$year));
for($i=1;$i<=$end_day;$i++) {
unset($args);
$args->start_date = sprintf('%04d%02d%02d', $year, $month, $i);
$args->end_date = sprintf('%04d%02d%02d', $year, $month, $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$i] = $count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
}
$status->max = $max;
$status->sum = $sum;
return $status;
}
}
?>
<?php
/**
* @class counterModel
* @author NHN (developers@xpressengine.com)
* @brief counter 모듈의 Model class
**/
class counterModel extends counter {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 로그 검사
**/
function isLogged($site_srl=0) {
$args->regdate = date("Ymd");
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
$args->site_srl = $site_srl;
$output = executeQuery('counter.getCounterLog', $args);
return $output->data->count?true:false;
}
/**
* @brief 오늘자 카운터 현황 row 있는지 체크
**/
function isInsertedTodayStatus($site_srl=0) {
$args->regdate = date("Ymd");
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteTodayStatus', $args);
} else {
$output = executeQuery('counter.getTodayStatus', $args);
}
return $output->data->count?true:false;
}
/**
* @brief 특정 일의 접속 통계를 가져옴
**/
function getStatus($selected_date, $site_srl=0) {
// 여러개의 날짜 로그를 가져올 경우
if(is_array($selected_date)) {
$date_count = count($selected_date);
$args->regdate = implode(',',$selected_date);
// 단일 날짜의 로그를 가져올 경우
} else {
if(strlen($selected_date)==8) $selected_date = $selected_date;
$args->regdate = $selected_date;
}
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatusDays', $args);
} else {
$output = executeQuery('counter.getCounterStatusDays', $args);
}
$status = $output->data;
if(!is_array($selected_date)) return $status;
if(!is_array($status)) $status = array($status);
unset($output);
foreach($status as $key => $val) {
$output[substr($val->regdate,0,8)] = $val;
}
return $output;
}
/**
* @brief 지정된 일자의 시간대별 로그 가져오기
**/
function getHourlyStatus($type='hour', $selected_date, $site_srl=0) {
$max = 0;
$sum = 0;
switch($type) {
case 'year' :
// 카운터 시작일 구함
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteStartLogDate', $args);
} else {
$output = executeQuery('counter.getStartLogDate');
}
$start_year = substr($output->data->regdate,0,4);
if(!$start_year) $start_year = date("Y");
for($i=$start_year;$i<=date("Y");$i++) {
unset($args);
$args->start_date = sprintf('%04d0000', $i);
$args->end_date = sprintf('%04d1231', $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$i] = $count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
case 'week' :
$time = strtotime($selected_date);
$w = date("D");
while(date("D",$time) != "Sun") {
$time += 60*60*24;
}
$time -= 60*60*24;
while(date("D",$time)!="Sun") {
$thisWeek[] = date("Ymd",$time);
$time -= 60*60*24;
}
$thisWeek[] = date("Ymd",$time);
asort($thisWeek);
foreach($thisWeek as $day) {
unset($args);
$args->start_date = $day;
$args->end_date = $day;
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$day] = (int)$count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
case 'month' :
$year = substr($selected_date, 0, 4);
for($i=1;$i<=12;$i++) {
unset($args);
$args->start_date = sprintf('%04d%02d00', $year, $i);
$args->end_date = sprintf('%04d%02d31', $year, $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$i] = (int)$count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
case 'hour' :
for($i=0;$i<24;$i++) {
unset($args);
$args->start_date = sprintf('%08d%02d0000', $selected_date, $i);
$args->end_date = sprintf('%08d%02d5959', $selected_date, $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterLogStatus', $args);
} else {
$args->site_srl = 0;
$output = executeQuery('counter.getCounterLogStatus', $args);
}
$count = (int)$output->data->count;
$status->list[$i] = $count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
default :
$year = substr($selected_date, 0, 4);
$month = substr($selected_date, 4, 2);
$end_day = date('t', mktime(0,0,0,$month,1,$year));
for($i=1;$i<=$end_day;$i++) {
unset($args);
$args->start_date = sprintf('%04d%02d%02d', $year, $month, $i);
$args->end_date = sprintf('%04d%02d%02d', $year, $month, $i);
if($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('counter.getSiteCounterStatus', $args);
} else {
$output = executeQuery('counter.getCounterStatus', $args);
}
$count = (int)$output->data->unique_visitor;
$status->list[$i] = $count;
if($count>$max) $max = $count;
$sum += $count;
}
break;
}
$status->max = $max;
$status->sum = $sum;
return $status;
}
}
?>

View file

@ -1,25 +1,25 @@
<?php
/**
* @file modules/counter/lang/en.lang.php
* @author zero <zero@nzeo.com>
* @brief English Language Pack (Only basic contents are listed)
**/
$lang->counter = "Counter";
$lang->cmd_select_date = 'Select Date';
$lang->cmd_select_counter_type = array(
'hour' => 'By Hour',
'day' => 'By Day',
'month' => 'By Month',
'year' => 'By Year',
);
$lang->total_counter = 'Total Status';
$lang->selected_day_counter = 'Status of Selected Day';
$lang->unique_visitor = 'Visitors';
$lang->pageview = 'Pageview';
$lang->today = 'today';
$lang->yesterday = 'yesterday';
?>
<?php
/**
* @file modules/counter/lang/en.lang.php
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack (Only basic contents are listed)
**/
$lang->counter = "Counter";
$lang->cmd_select_date = 'Select Date';
$lang->cmd_select_counter_type = array(
'hour' => 'By Hour',
'day' => 'By Day',
'month' => 'By Month',
'year' => 'By Year',
);
$lang->total_counter = 'Total Status';
$lang->selected_day_counter = 'Status of Selected Day';
$lang->unique_visitor = 'Visitors';
$lang->pageview = 'Pageview';
$lang->today = 'today';
$lang->yesterday = 'yesterday';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @archivo modules/counter/lang/es.lang.php
* @autor zero <zero@nzeo.com>
* @autor NHN (developers@xpressengine.com)
* @sumario Paquete del idioma español para el contador.
**/

View file

@ -1,25 +1,25 @@
<?php
/**
* @file modules/counter/lang/fr.lang.php
* @author zero <zero@nzeo.com> Traduit par Pierre Duvent <PierreDuvent@gmail.com>
* @brief Paquet du langage en français pour le module de Comppteur
**/
$lang->counter = "Coumpteur";
$lang->cmd_select_date = 'Choisir un Jour';
$lang->cmd_select_counter_type = array(
'hour' => 'Par Heure',
'day' => 'Par Jour',
'month' => 'Par Mois',
'year' => 'Par Année',
);
$lang->total_counter = 'Statut Total';
$lang->selected_day_counter = 'Statut Journal';
$lang->unique_visitor = 'Visiteurs';
$lang->pageview = 'Vues';
$lang->today = 'today';
$lang->yesterday = 'yesterday';
?>
<?php
/**
* @file modules/counter/lang/fr.lang.php
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent <PierreDuvent@gmail.com>
* @brief Paquet du langage en français pour le module de Comppteur
**/
$lang->counter = "Coumpteur";
$lang->cmd_select_date = 'Choisir un Jour';
$lang->cmd_select_counter_type = array(
'hour' => 'Par Heure',
'day' => 'Par Jour',
'month' => 'Par Mois',
'year' => 'Par Année',
);
$lang->total_counter = 'Statut Total';
$lang->selected_day_counter = 'Statut Journal';
$lang->unique_visitor = 'Visiteurs';
$lang->pageview = 'Vues';
$lang->today = 'today';
$lang->yesterday = 'yesterday';
?>

View file

@ -1,25 +1,25 @@
<?php
/**
* @file modules/counter/lang/jp.lang.php
* @author zero <zero@nzeo.com> 翻訳RisaPapa、ミニミ
* @brief 日本語言語パッケージ(基本的な内容のみ)
**/
$lang->counter = 'カウンター';
$lang->cmd_select_date = '日付選択';
$lang->cmd_select_counter_type = array(
'hour' => '時間帯別',
'day' => '日別',
'month' => '月別',
'year' => '年度別',
);
$lang->total_counter = 'トータル';
$lang->selected_day_counter = '選択日の情報';
$lang->unique_visitor = '訪問者';
$lang->pageview = 'ページビュー';
$lang->today = '今日';
$lang->yesterday = '昨日';
?>
<?php
/**
* @file modules/counter/lang/jp.lang.php
* @author NHN (developers@xpressengine.com) 翻訳RisaPapa、ミニミ
* @brief 日本語言語パッケージ(基本的な内容のみ)
**/
$lang->counter = 'カウンター';
$lang->cmd_select_date = '日付選択';
$lang->cmd_select_counter_type = array(
'hour' => '時間帯別',
'day' => '日別',
'month' => '月別',
'year' => '年度別',
);
$lang->total_counter = 'トータル';
$lang->selected_day_counter = '選択日の情報';
$lang->unique_visitor = '訪問者';
$lang->pageview = 'ページビュー';
$lang->today = '今日';
$lang->yesterday = '昨日';
?>

View file

@ -1,25 +1,25 @@
<?php
/**
* @file modules/counter/lang/ko.lang.php
* @author zero <zero@nzeo.com>
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
$lang->counter = '접속 통계';
$lang->cmd_select_date = '날짜 선택';
$lang->cmd_select_counter_type = array(
'hour' => '시간대별',
'day' => '일별',
'month' => '월별',
'year' => '연도별',
);
$lang->total_counter = '전체현황';
$lang->selected_day_counter = '선택일 현황';
$lang->unique_visitor = '방문자';
$lang->pageview = '페이지뷰';
$lang->today = '오늘';
$lang->yesterday = '어제';
?>
<?php
/**
* @file modules/counter/lang/ko.lang.php
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
$lang->counter = '접속 통계';
$lang->cmd_select_date = '날짜 선택';
$lang->cmd_select_counter_type = array(
'hour' => '시간대별',
'day' => '일별',
'month' => '월별',
'year' => '연도별',
);
$lang->total_counter = '전체현황';
$lang->selected_day_counter = '선택일 현황';
$lang->unique_visitor = '방문자';
$lang->pageview = '페이지뷰';
$lang->today = '오늘';
$lang->yesterday = '어제';
?>

View file

@ -1,25 +1,25 @@
<?php
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack
**/
$lang->counter = "Счетчик посетителей";
$lang->cmd_select_date = 'Выберите дату';
$lang->cmd_select_counter_type = array(
'hour' => 'По часам',
'day' => 'По дням',
'month' => 'По месяцам',
'year' => 'По годам',
);
$lang->total_counter = 'Общее состояние';
$lang->selected_day_counter = 'Состояние на выбранный день';
$lang->unique_visitor = 'Посетителей';
$lang->pageview = 'Просмотров страниц';
$lang->today = 'Сегодня';
$lang->yesterday = 'Вчера';
?>
<?php
/**
* @file ru.lang.php
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack
**/
$lang->counter = "Счетчик посетителей";
$lang->cmd_select_date = 'Выберите дату';
$lang->cmd_select_counter_type = array(
'hour' => 'По часам',
'day' => 'По дням',
'month' => 'По месяцам',
'year' => 'По годам',
);
$lang->total_counter = 'Общее состояние';
$lang->selected_day_counter = 'Состояние на выбранный день';
$lang->unique_visitor = 'Посетителей';
$lang->pageview = 'Просмотров страниц';
$lang->today = 'Сегодня';
$lang->yesterday = 'Вчера';
?>

View file

@ -1,27 +1,27 @@
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : zero (zero@nzeo.com) ░░
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
░░ * @Website: http://vietxe.net ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
$lang->counter = "Lượt truy cập";
$lang->cmd_select_date = 'Chọn ngày';
$lang->cmd_select_counter_type = array(
'hour' => 'Theo giờ',
'day' => 'Theo ngày',
'month' => 'Theo tháng',
'year' => 'Theo năm',
);
$lang->total_counter = 'Tổng số lượt truy cập';
$lang->selected_day_counter = 'Số truy cập trong ngày';
$lang->unique_visitor = 'Số lượt xem';
$lang->pageview = 'Số trang';
$lang->today = 'Hôm nay';
$lang->yesterday = 'Hôm qua';
?>
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : NHN (developers@xpressengine.com) ░░
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
░░ * @Website: http://vietxe.net ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
$lang->counter = "Lượt truy cập";
$lang->cmd_select_date = 'Chọn ngày';
$lang->cmd_select_counter_type = array(
'hour' => 'Theo giờ',
'day' => 'Theo ngày',
'month' => 'Theo tháng',
'year' => 'Theo năm',
);
$lang->total_counter = 'Tổng số lượt truy cập';
$lang->selected_day_counter = 'Số truy cập trong ngày';
$lang->unique_visitor = 'Số lượt xem';
$lang->pageview = 'Số trang';
$lang->today = 'Hôm nay';
$lang->yesterday = 'Hôm qua';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file modules/counter/lang/zh-CN.lang.php
* @author zero <zero@nzeo.com>
* @author NHN (developers@xpressengine.com)
* @brief 简体中文语言包
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @file modules/counter/lang/zh-TW.lang.php
* @author zero <zero@nzeo.com> 翻譯royallin
* @author NHN (developers@xpressengine.com) 翻譯royallin
* @brief 訪問統計(counter)模組正體中文語言
**/