diff --git a/addons/counter/counter.addon.php b/addons/counter/counter.addon.php index 5ad7be190..73d2b8bce 100644 --- a/addons/counter/counter.addon.php +++ b/addons/counter/counter.addon.php @@ -12,8 +12,8 @@ * 파일내에서 이루어집니다. **/ - // called_position가 before_module_init 일때만 실행 - if($called_position == 'before_module_init') { + // called_position가 before_module_init 이고 module이 admin이 아닐 경우 + if($called_position == 'before_module_init' && $this->module != 'admin') { Context::addJsFile('./modules/counter/tpl/js/counter.js'); } ?> diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index 5b07a093a..f1fb14b50 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -284,6 +284,9 @@ $value = preg_replace('/(^\'|\'$){1}/','',$value); switch($operation) { + case 'like_tail' : + $value = $value.'%'; + break; case 'like_prefix' : $value = '%'.$value; break; @@ -322,6 +325,7 @@ if(!$value) return; return $name.' < '.$value; break; + case 'like_tail' : case 'like_prefix' : case 'like' : if(!$value) return; diff --git a/config/config.inc.php b/config/config.inc.php index 593082313..96f5ae768 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -39,12 +39,12 @@ * php5 기반으로 바꾸게 되면 _autoload를 이용할 수 있기에 제거 대상 **/ if(__DEBUG__) define('__ClassLosdStartTime__', getMicroTime()); + require_once("./classes/object/Object.class.php"); require_once("./classes/handler/Handler.class.php"); require_once("./classes/xml/XmlParser.class.php"); require_once("./classes/context/Context.class.php"); require_once("./classes/db/DB.class.php"); require_once("./classes/file/FileHandler.class.php"); - require_once("./classes/object/Object.class.php"); require_once("./classes/plugin/PluginHandler.class.php"); require_once("./classes/editor/EditorHandler.class.php"); require_once("./classes/module/ModuleObject.class.php"); diff --git a/modules/counter/conf/module.xml b/modules/counter/conf/module.xml index 019051af7..3d6cca8f3 100644 --- a/modules/counter/conf/module.xml +++ b/modules/counter/conf/module.xml @@ -3,5 +3,6 @@ + diff --git a/modules/counter/counter.class.php b/modules/counter/counter.class.php index 675748d58..777b04dd9 100644 --- a/modules/counter/counter.class.php +++ b/modules/counter/counter.class.php @@ -15,6 +15,14 @@ $oModuleController = &getController('module'); $oModuleController->insertActionForward('counter', 'view', 'dispCounterAdminIndex'); + $oCounterController = &getController('counter'); + + // 00000000000000 일자로 기록될 전체 방문 기록 row 추가 + $oCounterController->insertTodayStatus('00000000000000'); + + // 오늘자 row입력 + $oCounterController->insertTodayStatus(); + return new Object(); } diff --git a/modules/counter/counter.controller.php b/modules/counter/counter.controller.php index 5404f1fe3..727f85417 100644 --- a/modules/counter/counter.controller.php +++ b/modules/counter/counter.controller.php @@ -14,18 +14,71 @@ } /** - * @brief 로그 등록 + * @brief 카운터 기록 **/ - function insertLog() { - return executeQuery('counter.insertCounterLog'); + function procCounterExecute() { + // 로그를 검사 + $oCounterModel = &getModel('counter'); + + // 오늘자 row가 있는지 체크하여 없으면 등록 + if(!$oCounterModel->isInsertedTodayStatus()) { + $this->insertTodayStatus(); + + // 기존 row가 있으면 사용자 체크 + } else { + + // 등록되어 있지 않은 아이피일 경우 + if(!$oCounterModel->isLogged()) { + // 로그 등록 + $this->insertLog(); + + // unique 및 pageview 등록 + $this->insertUniqueVisitor(); + } else { + // pageview 등록 + $this->insertPageView(); + } + } } /** - * @brief 현황 등록 + * @brief 로그 등록 **/ - function insertStatus() { - return executeQuery('counter.insertCounterStatus'); + function insertLog() { + $args->regdate = date("YmdHis"); + $args->user_agent = $_SERVER['HTTP_USER_AGENT']; + return executeQuery('counter.insertCounterLog', $args); } + /** + * @brief unique visitor 등록 + **/ + function insertUniqueVisitor() { + $args->regdate = date("Ymd000000"); + return executeQuery('counter.updateCounterUnique', $args); + } + + /** + * @brief pageview 등록 + **/ + function insertPageView() { + $args->regdate = date("Ymd000000"); + return executeQuery('counter.updateCounterPageview', $args); + } + + /** + * @brief 오늘자 카운터 status 추가 + **/ + function insertTodayStatus($regdate = 0) { + if($regdate) $args->regdate = $regdate; + else $args->regdate = date("Ymd000000"); + executeQuery('counter.insertTodayStatus', $args); + + // 로그 등록 + $this->insertLog(); + + // unique 및 pageview 등록 + $this->insertUniqueVisitor(); + } } ?> diff --git a/modules/counter/counter.model.php b/modules/counter/counter.model.php index 921185edf..60b7e9fee 100644 --- a/modules/counter/counter.model.php +++ b/modules/counter/counter.model.php @@ -17,7 +17,17 @@ * @brief 로그 검사 **/ function isLogged() { - $output = executeQuery('counter.getCounterLog'); + $args->regdate = date("Ymd"); + $output = executeQuery('counter.getCounterLog', $args); + return $output->data->count?true:false; + } + + /** + * @brief 오늘자 카운터 현황 row 있는지 체크 + **/ + function isInsertedTodayStatus() { + $args->regdate = date("Ymd000000"); + $output = executeQuery('counter.getTodayStatus', $args); return $output->data->count?true:false; } @@ -25,7 +35,19 @@ * @brief 특정 일의 접속 통계를 가져옴 **/ function getStatus($regdate) { - $args->regdate = $regdate; + // 여러개의 날자 로그를 가져올 경우 + if(is_array($regdate)) { + $date_count = count($regdate); + for($i=0;$i<$date_count;$i++) { + if(strlen($regdate[$i])==8) $regdate[$i] = $regdate[$i].'000000'; + $args->regdate = "'".implode("','",$regdate)."'"; + } + // 단일 날자의 로그를 가져올 경우 + } else { + if(strlen($regdate)==8) $regdate = $regdate.'000000'; + $args->regdate = $regdate; + } + $output = executeQuery('counter.getCounterStatus', $args); return $output->data; } diff --git a/modules/counter/queries/getCounterLog.xml b/modules/counter/queries/getCounterLog.xml index cb563ca64..038c8a5a6 100644 --- a/modules/counter/queries/getCounterLog.xml +++ b/modules/counter/queries/getCounterLog.xml @@ -6,7 +6,7 @@ - - + + diff --git a/modules/counter/queries/getCounterStatus.xml b/modules/counter/queries/getCounterStatus.xml index 288f98d34..475629fdc 100644 --- a/modules/counter/queries/getCounterStatus.xml +++ b/modules/counter/queries/getCounterStatus.xml @@ -1,4 +1,4 @@ - + @@ -6,6 +6,6 @@ - + diff --git a/modules/counter/queries/insertCounterLog.xml b/modules/counter/queries/insertCounterLog.xml index 4e4bf8fcb..d46a6739d 100644 --- a/modules/counter/queries/insertCounterLog.xml +++ b/modules/counter/queries/insertCounterLog.xml @@ -3,7 +3,7 @@
- + diff --git a/modules/counter/queries/insertCounterStatus.xml b/modules/counter/queries/insertCounterStatus.xml deleted file mode 100644 index 01d52c855..000000000 --- a/modules/counter/queries/insertCounterStatus.xml +++ /dev/null @@ -1,8 +0,0 @@ - - -
- - - - - diff --git a/modules/counter/queries/updateCounterPageview.xml b/modules/counter/queries/updateCounterPageview.xml index 0fcbf7884..2153cd197 100644 --- a/modules/counter/queries/updateCounterPageview.xml +++ b/modules/counter/queries/updateCounterPageview.xml @@ -1,12 +1,12 @@ - +
- + - - + + diff --git a/modules/counter/queries/updateCounterUnique.xml b/modules/counter/queries/updateCounterUnique.xml index 8d8bd739e..c4b614c87 100644 --- a/modules/counter/queries/updateCounterUnique.xml +++ b/modules/counter/queries/updateCounterUnique.xml @@ -1,13 +1,13 @@ -
+
- - + + diff --git a/modules/counter/schemas/counter_log.xml b/modules/counter/schemas/counter_log.xml index 140f8c7cd..305d6c704 100644 --- a/modules/counter/schemas/counter_log.xml +++ b/modules/counter/schemas/counter_log.xml @@ -1,5 +1,5 @@
- +
diff --git a/plugins/counter_status/conf/info.xml b/plugins/counter_status/conf/info.xml new file mode 100644 index 000000000..ccae5f2c2 --- /dev/null +++ b/plugins/counter_status/conf/info.xml @@ -0,0 +1,9 @@ + + + 로그인 정보 출력 + + 제로 + 로그인 폼이나 로그인 정보를 출력합니다 + + + diff --git a/plugins/counter_status/login_info.class.php b/plugins/counter_status/login_info.class.php new file mode 100644 index 000000000..230a13c2d --- /dev/null +++ b/plugins/counter_status/login_info.class.php @@ -0,0 +1,36 @@ +style); + + // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정) + $tpl_path = sprintf('%sskins/%s', $this->plugin_path, $args->skin); + Context::set('colorset', $args->colorset); + + // 템플릿 파일을 지정 + $tpl_file = 'login_info'; + + // 템플릿 컴파일 + $oTemplate = new TemplateHandler(); + return $oTemplate->compile($tpl_path, $tpl_file); + } + + + } +?> diff --git a/plugins/counter_status/skins/default/filter/login.xml b/plugins/counter_status/skins/default/filter/login.xml new file mode 100644 index 000000000..d2889fbd5 --- /dev/null +++ b/plugins/counter_status/skins/default/filter/login.xml @@ -0,0 +1,14 @@ + +
+ + + + + + + + + + + +
diff --git a/plugins/counter_status/skins/default/filter/logout.xml b/plugins/counter_status/skins/default/filter/logout.xml new file mode 100644 index 000000000..327f41e11 --- /dev/null +++ b/plugins/counter_status/skins/default/filter/logout.xml @@ -0,0 +1,7 @@ + +
+ + + + + diff --git a/plugins/counter_status/skins/default/images/icon_friend_list.gif b/plugins/counter_status/skins/default/images/icon_friend_list.gif new file mode 100644 index 000000000..adabcfc6e Binary files /dev/null and b/plugins/counter_status/skins/default/images/icon_friend_list.gif differ diff --git a/plugins/counter_status/skins/default/images/icon_key.gif b/plugins/counter_status/skins/default/images/icon_key.gif new file mode 100644 index 000000000..152974d40 Binary files /dev/null and b/plugins/counter_status/skins/default/images/icon_key.gif differ diff --git a/plugins/counter_status/skins/default/images/icon_last_login.gif b/plugins/counter_status/skins/default/images/icon_last_login.gif new file mode 100644 index 000000000..ab9e0a709 Binary files /dev/null and b/plugins/counter_status/skins/default/images/icon_last_login.gif differ diff --git a/plugins/counter_status/skins/default/images/icon_message_box.gif b/plugins/counter_status/skins/default/images/icon_message_box.gif new file mode 100644 index 000000000..5a05d50e2 Binary files /dev/null and b/plugins/counter_status/skins/default/images/icon_message_box.gif differ diff --git a/plugins/counter_status/skins/default/images/icon_note.gif b/plugins/counter_status/skins/default/images/icon_note.gif new file mode 100644 index 000000000..f39bde7c1 Binary files /dev/null and b/plugins/counter_status/skins/default/images/icon_note.gif differ diff --git a/plugins/counter_status/skins/default/images/icon_profile.gif b/plugins/counter_status/skins/default/images/icon_profile.gif new file mode 100644 index 000000000..73b3d73d9 Binary files /dev/null and b/plugins/counter_status/skins/default/images/icon_profile.gif differ diff --git a/plugins/counter_status/skins/default/js/login.js b/plugins/counter_status/skins/default/js/login.js new file mode 100644 index 000000000..317f2e44c --- /dev/null +++ b/plugins/counter_status/skins/default/js/login.js @@ -0,0 +1,31 @@ +/* 로그인 영역에 포커스 */ +function doFocusUserId(fo_id) { + var fo_obj = xGetElementById(fo_id); + if(xGetCookie('user_id')) { + fo_obj.user_id.value = xGetCookie('user_id'); + fo_obj.remember_user_id.checked = true; + try{ + fo_obj.password.focus(); + } catch(e) {}; + } else { + try{ + fo_obj.user_id.focus(); + } catch(e) {}; + } +} + +/* 로그인 후 */ +function completeLogin(ret_obj, response_tags, params, fo_obj) { + if(fo_obj.remember_user_id && fo_obj.remember_user_id.checked) { + var expire = new Date(); + expire.setTime(expire.getTime()+ (7000 * 24 * 3600000)); + xSetCookie('user_id', fo_obj.user_id.value, expire); + } + + var url = location.href.setQuery('act',''); + location.href = location.href.setQuery('act',''); +} + + + + diff --git a/plugins/counter_status/skins/default/login_info.html b/plugins/counter_status/skins/default/login_info.html new file mode 100644 index 000000000..0c8926854 --- /dev/null +++ b/plugins/counter_status/skins/default/login_info.html @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + +
+ diff --git a/plugins/counter_status/skins/default/normal/document_bullet.gif b/plugins/counter_status/skins/default/normal/document_bullet.gif new file mode 100644 index 000000000..c29051c5d Binary files /dev/null and b/plugins/counter_status/skins/default/normal/document_bullet.gif differ diff --git a/plugins/counter_status/skins/default/normal/style.css b/plugins/counter_status/skins/default/normal/style.css new file mode 100644 index 000000000..07072513e --- /dev/null +++ b/plugins/counter_status/skins/default/normal/style.css @@ -0,0 +1,151 @@ +.login_plugin { + border:3px solid #DDDDDD; + padding:6px; + height:80px; + margin-bottom:10px; +} + +.login_plugin .top_box { + height:22px; + border-bottom:2px dotted #DDDDDD; + overflow:hidden; + margin-bottom:5px; +} + +.login_plugin .top_box .nick_name { + font-weight:bold; + float:left; + color:#555555; +} + +.login_plugin .top_box .logout { + float:right; +} + +.login_plugin .top_box .logout A { + text-decoration:none; + color:#737CF5; +} + +.login_plugin .top_box .logout A:hover { + font-weight:bold; + letter-spacing:-1px; + color:#151F9E; +} + + +.login_plugin .info_box { + clear:both; + color:#555555; +} + +.login_plugin .info_box A:link { + text-decoration:none; + color:#555555; +} + +.login_plugin .info_box A:visited { + text-decoration:none; + color:#555555; +} + +.login_plugin .info_box A:hover { + text-decoration:none; + font-weight:bold; + letter-spacing:-1px; + color:#555555; +} + +.login_plugin .info_box div { + padding-left:15px; + margin:0px 0px 4px 0px; +} + +.login_plugin .info_box .member_info { + background:url("../images/icon_profile.gif") no-repeat left; + float:left; + width:90px; +} + +.login_plugin .info_box .friend_list { + background:url("../images/icon_friend_list.gif") no-repeat left; + float:left; +} + +.login_plugin .info_box .message_box { + background:url("../images/icon_message_box.gif") no-repeat left; + float:left; + width:90px; +} + +.login_plugin .info_box .link_admin { + background:url("../images/icon_key.gif") no-repeat left; + float:left; +} + +.login_plugin .info_box .link_admin A { + color:#cd0000; +} + +.login_plugin .info_box .last_login { + clear:left; + background:url("../images/icon_last_login.gif") no-repeat left; + padding-left:15px; + margin-bottom:4px; +} + + +.login_plugin .login_box { + height:40px; +} + +.login_plugin .header { + float:left; + clear:left; + width:80px; + margin-bottom:5px; + font-weight:bold; + color:#555555; +} + +.login_plugin .body { + float:left; + width:100px; + margin-bottom:5px; +} + +.login_plugin .body .input { + width:90px; + height:13px; + border:1px solid #AAAAAA; + color:#555555; +} + +.login_plugin .body label { + cursor:pointer; +} + +.login_plugin .button_area { + clear:both; + height:20px; + margin-top:5px; + text-align:center; +} + +.login_plugin .button_area .submit_button { + width:80px; + height:18px; + border:1px solid #AAAAAA; + background-color:#555555; + color:#FFFFFF; + font-weight:bold; +} + +.login_plugin .button_area .signup_button { + width:80px; + height:18px; + border:1px solid #555555; + background-color:#FFFFFF; + color:#000000; + font-weight:bold; +} diff --git a/plugins/counter_status/skins/default/normal/title_bullet.gif b/plugins/counter_status/skins/default/normal/title_bullet.gif new file mode 100644 index 000000000..12ed834cc Binary files /dev/null and b/plugins/counter_status/skins/default/normal/title_bullet.gif differ diff --git a/plugins/counter_status/skins/default/skin.xml b/plugins/counter_status/skins/default/skin.xml new file mode 100644 index 000000000..01d2e4c74 --- /dev/null +++ b/plugins/counter_status/skins/default/skin.xml @@ -0,0 +1,13 @@ + + + 로그인 정보 출력 기본 스킨 + + 제로 + newest_document의 기본 스킨 + + + + 기본 + + +