묻고답하기
읽을 때 마다 게시판 조회수 증가하게 코드 수정했는데 안되요!꼭 도와주세요!!
2009.03.31 01:58
① 계정(호스팅-서버관리) 회사 이름 : 미리내
② php , mysql 버전 : 이거 어떻게 알아낼 수 있죠?잘 모르겠거든요,웹FTP가 지원되길래 들어가서 코드를 수정했습니다.
③ 제로보드 버젼(날짜 포함) : 1.1.5버젼 날짜는 어떻게 알 수 있죠?
④ 에러나는 주소와 에러 부분 소스(필수) : 아래 자세하게 설명해 놓았습니다.꼭 도와주세요!
⑤ 주로 쓰고 있는 스킨 이름이나 소스 : 이게 무슨뜻?그냥 제로보드 기본형 쓰는데요.
⑥ 질문 내용 : 읽을 때 마다 조회수 증가 하게 코드를 수정하고 싶은데요.안되요.(다음번에는 이거 관리자 모드에서 선택할 수 있도록 처리해주시면 안될까요?매우 중요한 기능인데 왜 이렇게 힘들게 수정을 해야 합니까?)아래 내용을 꼭 읽어 주시고 도와주세요!!!
http://www.xpressengine.com/?mid=zbxe_user_tip&search_target=title&search_keyword=%EC%A1%B0%ED%9A%8C%EC%88%98&document_srl=15972278 여기 들어가보니까 코드를 수정하라고 하는데요.여기 있는 그대로 수정을 했는데 아래와 같은 에러가 뜨고 게시판이 정상적으로 열리지 않습니다.
'Parse error: syntax error, unexpected T_ELSE, expecting T_FUNCTION in /web/home/munsungjun/html/xe/modules/document/document.controller.php on line 566'가 나옵니다.
아래 코드는 제가 document.controller.php 파일을 열어서 314 번째 라인 부터 361 라인까지 조회수 증가 코드로 바꿔본 것입니다.
무엇이 잘못되었습니까?제발 도와주세요!!!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?php
/**
* @class documentController
* @author zero (zero@nzeo.com)
* @brief document 紐⑤뱢??controller ?대옒?? **/
class documentController extends document {
/**
* @brief 珥덇린?? **/
function init() {
}
/**
* @breif 寃뚯떆湲??異붿쿇??泥섎━?섎뒗 action (Up)
**/
function procDocumentVoteUp() {
if(!Context::get('is_logged')) return new Object(-1, 'msg_invalid_request');
$document_srl = Context::get('target_srl');
if(!$document_srl) return new Object(-1, 'msg_invalid_request');
$point = 1;
return $this->updateVotedCount($document_srl, $point);
}
/**
* @breif 寃뚯떆湲??異붿쿇??泥섎━?섎뒗 action (Down)
**/
function procDocumentVoteDown() {
if(!Context::get('is_logged')) return new Object(-1, 'msg_invalid_request');
$document_srl = Context::get('target_srl');
if(!$document_srl) return new Object(-1, 'msg_invalid_request');
$point = -1;
return $this->updateVotedCount($document_srl, $point);
}
/**
* @brief 寃뚯떆湲???좉퀬??寃쎌슦 ?몄텧?섎뒗 action
**/
function procDocumentDeclare() {
if(!Context::get('is_logged')) return new Object(-1, 'msg_invalid_request');
$document_srl = Context::get('target_srl');
if(!$document_srl) return new Object(-1, 'msg_invalid_request');
return $this->declaredDocument($document_srl);
}
/**
* @brief 紐⑤뱢????젣?좊븣 ?깅줉??紐⑤뱺 湲????젣?섎뒗 trigger
**/
function triggerDeleteModuleDocuments(&$obj) {
$module_srl = $obj->module_srl;
if(!$module_srl) return new Object();
// document ??젣
$oDocumentAdminController = &getAdminController('document');
$output = $oDocumentAdminController->deleteModuleDocument($module_srl);
if(!$output->toBool()) return $output;
// category ??젣
$oDocumentController = &getController('document');
$output = $oDocumentController->deleteModuleCategory($module_srl);
if(!$output->toBool()) return $output;
return new Object();
}
/**
* @brief 臾몄꽌??沅뚰븳 遺?? * ?몄뀡媛믪쑝濡????묒냽?곹깭?먯꽌留??ъ슜 媛?? **/
function addGrant($document_srl) {
$_SESSION['own_document'][$document_srl] = true;
}
/**
* @brief 臾몄꽌 ?낅젰
**/
function insertDocument($obj, $manual_inserted = false) {
// trigger ?몄텧 (before)
$output = ModuleHandler::triggerCall('document.insertDocument', 'before', $obj);
if(!$output->toBool()) return $output;
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
// 湲곕낯 蹂?섎뱾 ?뺣━
if($obj->is_secret!='Y') $obj->is_secret = 'N';
if($obj->allow_comment!='Y') $obj->allow_comment = 'N';
if($obj->lock_comment!='Y') $obj->lock_comment = 'N';
if($obj->allow_trackback!='Y') $obj->allow_trackback = 'N';
if($obj->homepage && !preg_match('/^http:\/\//i',$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage;
if($obj->notify_message != 'Y') $obj->notify_message = 'N';
// $extra_vars瑜?serialize
$obj->extra_vars = serialize($obj->extra_vars);
// ?먮룞??μ슜 ?꾨뱶 ?쒓굅
unset($obj->_saved_doc_srl);
unset($obj->_saved_doc_title);
unset($obj->_saved_doc_content);
unset($obj->_saved_doc_message);
// 二쇱뼱吏?臾몄꽌 踰덊샇媛 ?놁쑝硫?臾몄꽌 踰덊샇 ?깅줉
if(!$obj->document_srl) $obj->document_srl = getNextSequence();
// 移댄뀒怨좊━媛 ?덈굹 寃?ы븯???녿뒗 移댄뀒怨좊━硫?0?쇰줈 ?명똿
if($obj->category_srl) {
$oDocumentModel = &getModel('document');
$category_list = $oDocumentModel->getCategoryList($obj->module_srl);
if(!$category_list[$obj->category_srl]) $obj->category_srl = 0;
}
// 議고쉶?? ?깅줉?쒖꽌 ?ㅼ젙
if(!$obj->readed_count) $obj->readed_count = 0;
$obj->update_order = $obj->list_order = getNextSequence() * -1;
// ?섎룞?낅젰???鍮꾪빐??鍮꾨?踰덊샇??hash?곹깭瑜??먭?, ?섎룞?낅젰???꾨땲硫?臾댁“嫄?md5 hash
if($obj->password && !$obj->password_is_hashed) $obj->password = md5($obj->password);
// ?섎룞 ?깅줉???꾨땲怨?濡쒓렇?????뚯썝??寃쎌슦 ?뚯썝???뺣낫瑜??낅젰
if(Context::get('is_logged')&&!$manual_inserted) {
$logged_info = Context::get('logged_info');
$obj->member_srl = $logged_info->member_srl;
$obj->user_id = $logged_info->user_id;
$obj->user_name = $logged_info->user_name;
$obj->nick_name = $logged_info->nick_name;
$obj->email_address = $logged_info->email_address;
$obj->homepage = $logged_info->homepage;
}
// ?쒕ぉ???놁쑝硫??댁슜?먯꽌 異붿텧
settype($obj->title, "string");
if($obj->title == '') $obj->title = cut_str(strip_tags($obj->content),20,'...');
// ?댁슜?먯꽌 XE留뚯쓽 ?쒓렇瑜???젣
$obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content);
// ?몄뀡?먯꽌 理쒓퀬 愿由ъ옄媛 ?꾨땲硫?iframe, script ?쒓굅
if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content);
// DB???낅젰
$output = executeQuery('document.insertDocument', $obj);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// ?깃났?섏???寃쎌슦 category_srl???덉쑝硫?移댄뀒怨좊━ update
if($obj->category_srl) $this->updateCategoryCount($obj->module_srl, $obj->category_srl);
// trigger ?몄텧 (after)
if($output->toBool()) {
$trigger_output = ModuleHandler::triggerCall('document.insertDocument', 'after', $obj);
if(!$trigger_output->toBool()) {
$oDB->rollback();
return $trigger_output;
}
}
// commit
$oDB->commit();
// return
$this->addGrant($obj->document_srl);
$output->add('document_srl',$obj->document_srl);
$output->add('category_srl',$obj->category_srl);
return $output;
}
/**
* @brief 臾몄꽌 ?섏젙
**/
function updateDocument($source_obj, $obj) {
// trigger ?몄텧 (before)
$output = ModuleHandler::triggerCall('document.updateDocument'+
'+
', 'before', $obj);
if(!$output->toBool()) return $output;
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
// 湲곕낯 蹂?섎뱾 ?뺣━
if($obj->is_secret!='Y') $obj->is_secret = 'N';
if($obj->allow_comment!='Y') $obj->allow_comment = 'N';
if($obj->lock_comment!='Y') $obj->lock_comment = 'N';
if($obj->allow_trackback!='Y') $obj->allow_trackback = 'N';
if($obj->homepage && !preg_match('/^http:\/\//i'+
',$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage;
if($obj->notify_message != 'Y') $obj->notify_message = 'N';
// $extra_vars瑜?serialize
$obj->extra_vars = serialize($obj->extra_vars);
// ?먮룞??μ슜 ?꾨뱶 ?쒓굅
unset($obj->_saved_doc_srl);
unset($obj->_saved_doc_title);
unset($obj->_saved_doc_content);
unset($obj->_saved_doc_message);
// 移댄뀒怨좊━媛 蹂寃쎈릺?덉쑝硫?寃?ы썑 ?녿뒗 移댄뀒怨좊━硫?0?쇰줈 ?명똿
if($source_obj->get('+
'category_srl')!=$obj->category_srl) {
$oDocumentModel = &getModel('document');
$category_list = $oDocumentModel->getCategoryList($obj->module_srl);
if(!$category_list[$obj->category_srl]) $obj->category_srl = 0;
}
// ?섏젙 ?쒖꽌瑜?議곗젅
$obj->update_order = getNextSequence() * -1;
// 鍮꾨?踰덊샇媛 ?덉쑝硫?md5 hash
if($obj->password) $obj->password = md5($obj->password);
// ?먮낯 ?묒꽦?멸낵 ?섏젙?섎젮???섏젙?몄씠 ?숈씪???쒖뿉 濡쒓렇???뚯썝???뺣낫瑜??낅젰
if(Context::get('is_logged'+
')) {
$logged_info = Context::get('logged_info');
if($source_obj->get('member_srl')==$logged_info->member_srl) {
$obj->member_srl = $logged_info->member_srl;
$obj->user_name = $logged_info->user_name;
$obj->nick_name = $logged_info->nick_name;
$obj->email_address = $logged_info->email_address;
$obj->homepage = $logged_info->homepage;
}
}
// 濡쒓렇?명븳 ?좎?媛 ?묒꽦??湲?몃뜲 nick_name???놁쓣 寃쎌슦
if($source_obj->get('member_srl')&& !$obj->nick_name) {
$obj->member_srl = $source_obj->get('member_srl');
$obj->user_name = $source_obj->get('user_name');
$obj->nick_name = $source_obj->get('nick_name');
$obj->email_address = $source_obj->get('email_address');
$obj->homepage = $source_obj->get('homepage');
}
// ?쒕ぉ???놁쑝硫??댁슜?먯꽌 異붿텧
settype($obj->title, "string");
if($obj->title == '') $obj->title = cut_str(strip_tags($obj->content),20,'...');
// ?댁슜?먯꽌 XE留뚯쓽 ?쒓렇瑜???젣
$obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', ''+
', $obj->content);
// ?몄뀡?먯꽌 理쒓퀬 愿由ъ옄媛 ?꾨땲硫?iframe, script ?쒓굅
if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content);
// DB???낅젰
$output = executeQuery('document.updateDocument', $obj);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// ?깃났?섏???寃쎌슦 category_srl???덉쑝硫?移댄뀒怨좊━ update
if($source_obj->get('category_srl')!=$obj->category_srl) {
if($source_obj->get('category_srl')) $this->updateCategoryCount($obj->module_srl, $source_obj->get('category_srl'));
if($obj->category_srl) $this->updateCategoryCount($obj->module_srl, $obj->category_srl);
}
// trigger ?몄텧 (after)
if($output->toBool()) {
$trigger_output = ModuleHandler::triggerCall('document.updateDocument', 'after', $obj);
if(!$trigger_output->toBool()) {
$oDB->rollback();
return $trigger_output;
}
}
// commit
$oDB->commit();
// ?몃꽕???뚯씪 ?쒓굅
FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($obj->document_srl, 3)));
$output->add('document_srl',$obj->document_srl);
return $output;
}
/**
* @brief 臾몄꽌 ??젣
**/
function deleteDocument($document_srl, $is_admin = false) {
// trigger ?몄텧 (before)
$trigger_obj->document_srl = $document_srl;
$output = ModuleHandler::triggerCall('document.deleteDocument', 'before', $trigger_obj);
if(!$output->toBool()) return $output;
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
// document??model 媛앹껜 ?앹꽦
$oDocumentModel = &getModel('document');
// 湲곗〈 臾몄꽌媛 ?덈뒗吏 ?뺤씤
$oDocument = $oDocumentModel->getDocument($document_srl, $is_admin);
if(!$oDocument->isExists() || $oDocument->document_srl != $document_srl) return new Object(-1, 'msg_invalid_document');
// 沅뚰븳???덈뒗吏 ?뺤씤
if(!$oDocument->isGranted()) return new Object(-1, 'msg_not_permitted');
// 湲 ??젣
$args->document_srl = $document_srl;
$output = executeQuery('document.deleteDocument', $args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// 移댄뀒怨좊━媛 ?덉쑝硫?移댄뀒怨좊━ ?뺣낫 蹂寃? if($oDocument->get('category_srl')) $this->updateCategoryCount($oDocument->get('module_srl'),$oDocument->get('category_srl'));
// ?좉퀬 ??젣
executeQuery('document.deleteDeclared', $args);
// trigger ?몄텧 (after)
if($output->toBool()) {
$trigger_obj = $oDocument->getObjectVars();
$trigger_output = ModuleHandler::triggerCall('document.deleteDocument', 'after', $trigger_obj);
if(!$trigger_output->toBool()) {
$oDB->rollback();
return $trigger_output;
}
}
// ?몃꽕???뚯씪 ?쒓굅
FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($document_srl, 3)));
// commit
$oDB->commit();
return $output;
}
/**
* @brief 해당 document의 조회수 증가
**/
function updateReadedCount($oDocument) {
$document_srl = $oDocument->document_srl;
$member_srl = $oDocument->get('member_srl');
$logged_info = Context::get('logged_info');
// session에 정보로 조회수를 증가하였다고 생각하면 패스
/*if($_SESSION['readed_document'][$document_srl]) return false;
// 글의 작성 ip와 현재 접속자의 ip가 동일하면 패스
if($document->ipaddress == $_SERVER['REMOTE_ADDR']) {
$_SESSION['readed_document'][$document_srl] = true;
return false;
} */
// document의 작성자가 회원일때 조사
if($member_srl) {} /*
// 글쓴이와 현재 로그인 사용자의 정보가 일치하면 읽었다고 생각하고 세션 등록후 패스
if($member_srl && $logged_info->member_srl == $member_srl) {
$_SESSION['readed_document'][$document_srl] = true;
return false;
}
}*/
// 로그인 사용자이면 member_srl, 비회원이면 ipaddress로 판단
if($logged_info->member_srl) {
$args->member_srl = $logged_info->member_srl;
} else {
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
}
$args->document_srl = $document_srl;
$output = executeQuery('document.getDocumentReadedLogInfo', $args);
// 로그 정보에 조회 로그가 있으면 세션 등록후 패스
/* if($output->data->count) return $_SESSION['readed_document'][$document_srl] = true; */
// 조회수 업데이트
$output = executeQuery('document.updateReadedCount', $args);
// 로그 남기기
$output = executeQuery('document.insertDocumentReadedLog', $args);
// 세션 정보에 남김
return $_SESSION['readed_document'][$document_srl] = true;
}
/**
* @brief ?대떦 document??異붿쿇??利앷?
**/
function updateVotedCount($document_srl, $point = 1) {
if($point > 0) $failed_voted = 'failed_voted';
else $failed_voted = 'failed_blamed';
// ?몄뀡 ?뺣낫??異붿쿇 ?뺣낫媛 ?덉쑝硫?以묐떒
if($_SESSION['voted_document'][$document_srl]) return new Object(-1, $failed_voted);
// 臾몄꽌 ?먮낯??媛?몄샂
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl, false, false);
// 湲???묒꽦 ip? ?꾩옱 ?묒냽?먯쓽 ip媛 ?숈씪?섎㈃ ?⑥뒪
if($oDocument->get('ipaddress') == $_SERVER['+
'REMOTE_ADDR']) {
$_SESSION['voted_document'+
'][$document_srl] = true;
return new Object(-1, $failed_voted);
}
// document???묒꽦?먭? ?뚯썝?쇰븣 議곗궗
if($oDocument->get('member_srl')) {
// member model 媛앹껜 ?앹꽦
$oMemberModel = &getModel('member');
$member_srl = $oMemberModel->getLoggedMemberSrl();
// 湲?댁씠? ?꾩옱 濡쒓렇???ъ슜?먯쓽 ?뺣낫媛 ?쇱튂?섎㈃ ?쎌뿀?ㅺ퀬 ?앷컖?섍퀬 ?몄뀡 ?깅줉???⑥뒪
if($member_srl && $member_srl == $oDocument->get('member_srl')) {
$_SESSION['voted_document'][$document_srl] = true;
return new Object(-1, $failed_voted);
}
}
// 濡쒓렇???ъ슜?먯씠硫?member_srl, 鍮꾪쉶?먯씠硫?ipaddress濡??먮떒
if($member_srl) {
$args->member_srl = $member_srl;
} else {
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
}
$args->document_srl = $document_srl;
$output = executeQuery('document.getDocumentVotedLogInfo', $args);
// 濡쒓렇 ?뺣낫??異붿쿇 濡쒓렇媛 ?덉쑝硫??몄뀡 ?깅줉???⑥뒪
if($output->data->count) {
$_SESSION['voted_document'][$document_srl] = true;
return new Object(-1, $failed_voted);
}
// 異붿쿇???낅뜲?댄듃
if($point < 0)
{
$args->blamed_count = $oDocument->get('blamed_count') + $point;
$output = executeQuery('document.updateBlamedCount', $args);
}
else
{
$args->voted_count = $oDocument->get('+
'voted_count') + $point;
$output = executeQuery('document.updateVotedCount', $args);
}
if(!$output->toBool()) return $output;
// 濡쒓렇 ?④린湲? $args->point = $point;
$output = executeQuery('document.insertDocumentVotedLog', $args);
if(!$output->toBool()) return $output;
// ?몄뀡 ?뺣낫???④?
$_SESSION['voted_document'][$document_srl] = true;
$obj->member_srl = $oDocument->get('member_srl');
$obj->module_srl = $oDocument->get('module_srl');
$obj->point = $point;
$output = ModuleHandler::triggerCall('document.updateVotedCount', 'after', $obj);
if(!$output->toBool()) return $output;
// 寃곌낵 由ы꽩
if($point > 0)
return new Object(0, 'success_voted');
else
return new Object(0, 'success_blamed');
}
/**
* @brief 寃뚯떆湲 ?좉퀬
**/
function declaredDocument($document_srl) {
// ?몄뀡 ?뺣낫???좉퀬 ?뺣낫媛 ?덉쑝硫?以묐떒
if($_SESSION['declared_document'][$document_srl]) return new Object(-1, 'failed_declared');
// ?대? ?좉퀬?섏뿀?붿? 寃?? $args->document_srl = $document_srl;
$output = executeQuery('document.getDeclaredDocument', $args);
if(!$output->toBool()) return $output;
$declared_count = $output->data->declared_count;
// 臾몄꽌 ?먮낯??媛?몄샂
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl, false, false);
// 湲???묒꽦 ip? ?꾩옱 ?묒냽?먯쓽 ip媛 ?숈씪?섎㈃ ?⑥뒪
if($oDocument->get('ipaddress') == $_SERVER['REMOTE_ADDR']) {
$_SESSION['declared_document'][$document_srl] = true;
return new Object(-1, 'failed_declared');
}
// document???묒꽦?먭? ?뚯썝?쇰븣 議곗궗
if($oDocument->get('member_srl')) {
// member model 媛앹껜 ?앹꽦
$oMemberModel = &getModel('member');
$member_srl = $oMemberModel->getLoggedMemberSrl();
// 湲?댁씠? ?꾩옱 濡쒓렇???ъ슜?먯쓽 ?뺣낫媛 ?쇱튂?섎㈃ ?쎌뿀?ㅺ퀬 ?앷컖?섍퀬 ?몄뀡 ?깅줉???⑥뒪
if($member_srl && $member_srl == $oDocument->get('member_srl')) {
$_SESSION['+
'declared_document'][$document_srl] = true;
return new Object(-1, 'failed_declared');
}
}
// 濡쒓렇???ъ슜?먯씠硫?member_srl, 鍮꾪쉶?먯씠硫?ipaddress濡??먮떒
if($member_srl) {
$args->member_srl = $member_srl;
} else {
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
}
$args->document_srl = $document_srl;
$output = executeQuery('document.getDocumentDeclaredLogInfo', $args);
// 濡쒓렇 ?뺣낫???좉퀬 濡쒓렇媛 ?덉쑝硫??몄뀡 ?깅줉???⑥뒪
if($output->data->count) {
$_SESSION['declared_document'][$document_srl] = true;
return new Object(-1, '+
'failed_declared');
}
// ?좉퀬湲 異붽?
if($declared_count > 0) $output = executeQuery('document.updateDeclaredDocument', $args);
else $output = executeQuery('document.insertDeclaredDocument', $args);
if(!$output->toBool()) return $output;
// 濡쒓렇 ?④린湲? $output = executeQuery('document.insertDocumentDeclaredLog', $args);
// ?몄뀡 ?뺣낫???④?
$_SESSION['declared_document'][$document_srl] = true;
$this->setMessage('success_declared');
}
/**
* @brief ?대떦 document???볤? ??利앷?
* ?볤??섎? 利앷??쒗궎硫댁꽌 ?섏젙 ?쒖꽌? ?섏젙?? ?섏젙?먮? ?깅줉
**/
function updateCommentCount($document_srl, $comment_count, $last_updater, $comment_inserted = false) {
$args->document_srl = $document_srl;
$args->comment_count = $comment_count;
if($comment_inserted) {
$args->update_order = -1*getNextSequence();
$args->last_updater = $last_updater;
}
return executeQuery('document.updateCommentCount', $args);
}
/**
* @brief ?대떦 document????씤湲 ?섏쬆媛
**/
function updateTrackbackCount($document_srl, $trackback_count) {
$args->document_srl = $document_srl;
$args->trackback_count = $trackback_count;
return executeQuery('document.updateTrackbackCount', $args);
}
/**
* @brief 移댄뀒怨좊━ 異붽?
**/
function insertCategory($obj) {
// ?뱀젙 移댄뀒怨좊━???섎떒?쇰줈 異붽????뺣젹?쒖꽌 ?ъ젙?? if($obj->parent_srl) {
// 遺紐?移댄뀒怨좊━ 援ы븿
$oDocumentModel = &getModel('document');
$parent_category = $oDocumentModel->getCategory($obj->parent_srl);
$obj->list_order = $parent_category->list_order;
$this->updateCategoryListOrder($parent_category->module_srl, $parent_category->list_order+1);
if(!$obj->category_srl) $obj->category_srl = getNextSequence();
} else {
$obj->list_order = $obj->category_srl = getNextSequence();
}
$output = executeQuery('document.insertCategory', $obj);
if($output->toBool()) {
$output->add('category_srl', $obj->category_srl);
$this->makeCategoryFile($obj->module_srl);
}
return $output;
}
/**
* @brief ?뱀젙 移댄뀒怨좊━ 遺??list_count 利앷?
**/
function updateCategoryListOrder($module_srl, $list_order) {
$args->module_srl = $module_srl;
$args->list_order = $list_order;
return executeQuery('document.updateCategoryOrder', $args);
}
/**
* @brief 移댄뀒怨좊━??臾몄꽌???レ옄瑜?蹂寃? **/
function updateCategoryCount($module_srl, $category_srl, $document_count = 0) {
// document model 媛앹껜 ?앹꽦
$oDocumentModel = &getModel('document');
if(!$document_count) $document_count = $oDocumentModel->getCategoryDocumentCount($category_srl);
$args->category_srl = $category_srl;
$args->document_count = $document_count;
$output = executeQuery('document.updateCategoryCount'+
', $args);
if($output->toBool()) $this->makeCategoryFile($module_srl);
return $output;
}
/**
* @brief 移댄뀒怨좊━???뺣낫瑜??섏젙
**/
function updateCategory($obj) {
$output = executeQuery('document.updateCategory', $obj);
if($output->toBool()) $this->makeCategoryFile($obj->module_srl);
return $output;
}
/**
/**
* @brief 移댄뀒怨좊━ ??젣
**/
function deleteCategory($category_srl) {
$args->category_srl = $category_srl;
$oDocumentModel = &getModel('document');
$category_info = $oDocumentModel->getCategory($category_srl);
// ?먯떇 移댄뀒怨좊━媛 ?덈뒗吏 泥댄겕?섏뿬 ?덉쑝硫???젣 紐삵븳?ㅻ뒗 ?먮윭 異쒕젰
$output = executeQuery('document.getChildCategoryCount', $args);
if(!$output->toBool()) return $output;
if($output->data->count>0) return new Object(-1, 'msg_cannot_delete_for_child');
// 移댄뀒怨좊━ ?뺣낫瑜???젣
$output = executeQuery('document.deleteCategory', $args);
if(!$output->toBool()) return $output;
$this->makeCategoryFile($category_info->module_srl);
// ??移댄뀒怨좊━ 媛믪쓣 媛吏??臾몄꽌?ㅼ쓽 category_srl??0 ?쇰줈 ?명똿
unset($args);
$args->target_category_srl = 0;
$args->source_category_srl = $category_srl;
$output = executeQuery('document.updateDocumentCategory', $args);
return $output;
}
/**
* @brief ?뱀젙 紐⑤뱢??移댄뀒怨좊━瑜?紐⑤몢 ??젣
**/
function deleteModuleCategory($module_srl) {
$args->module_srl = $module_srl;
$output = executeQuery('document.deleteModuleCategory', $args);
return $output;
}
/**
* @brief 移댄뀒怨좊━瑜??곷떒?쇰줈 ?대룞
**/
function moveCategoryUp($category_srl) {
$oDocumentModel = &getModel('document');
// ?좏깮??移댄뀒怨좊━???뺣낫瑜?援ы븳?? $args->category_srl = $category_srl;
$output = executeQuery('document.getCategory', $args);
$category = $output->data;
$list_order = $category->list_order;
$module_srl = $category->module_srl;
// ?꾩껜 移댄뀒怨좊━ 紐⑸줉??援ы븳?? $category_list = $oDocumentModel->getCategoryList($module_srl);
$category_srl_list = array_keys($category_list);
if(count($category_srl_list)<2) return new Object();
$prev_category = NULL;
foreach($category_list as $key => $val) {
if($key==$category_srl) break;
$prev_category = $val;
}
// ?댁쟾 移댄뀒怨좊━媛 ?놁쑝硫?洹몃깷 return
if(!$prev_category) return new Object(-1,Context::getLang('msg_category_not_moved'));
// ?좏깮??移댄뀒怨좊━媛 媛???꾩쓽 移댄뀒怨좊━?대㈃ 洹몃깷 return
if($category_srl_list[0]==$category_srl) return new Object(-1,Context::getLang('msg_category_not_moved'));
// ?좏깮??移댄뀒怨좊━???뺣낫
$cur_args->category_srl = $category_srl;
$cur_args->list_order = $prev_category->list_order;
$cur_args->title = $category->title;
$this->updateCategory($cur_args);
// ???移댄뀒怨좊━???뺣낫
$prev_args->category_srl = $prev_category->category_srl;
$prev_args->list_order = $list_order;
$prev_args->title = $prev_category->title;
$this->updateCategory($prev_args);
return new Object();
}
/**
* @brief 移댄뀒怨좊━瑜??꾨옒濡??대룞
**/
function moveCategoryDown($category_srl) {
$oDocumentModel = &getModel('document');
// ?좏깮??移댄뀒怨좊━???뺣낫瑜?援ы븳?? $args->category_srl = $category_srl;
$output = executeQuery('document.getCategory', $args);
$category = $output->data;
$list_order = $category->list_order;
$module_srl = $category->module_srl;
// ?꾩껜 移댄뀒怨좊━ 紐⑸줉??援ы븳?? $category_list = $oDocumentModel->getCategoryList($module_srl);
$category_srl_list = array_keys($category_list);
if(count($category_srl_list)<2) return new Object();
for($i=0;$i<count($category_srl_list);$i++) {
if($category_srl_list[$i]==$category_srl) break;
}
$next_category_srl = $category_srl_list[$i+1];
if(!$category_list[$next_category_srl]) return new Object(-1,Context::getLang('msg_category_not_moved'));
$next_category = $category_list[$next_category_srl];
// ?좏깮??移댄뀒怨좊━???뺣낫
$cur_args->category_srl = $category_srl;
$cur_args->list_order = $next_category->list_order;
$cur_args->title = $category->title;
$this->updateCategory($cur_args);
// ???移댄뀒怨좊━???뺣낫
$next_args->category_srl = $next_category->category_srl;
$next_args->list_order = $list_order;
$next_args->title = $next_category->title;
$this->updateCategory($next_args);
return new Object();
}
/**
* @brief document??20媛??뺤옣蹂?섎? xml js filter ?곸슜???꾪빐 吏곸젒 ?곸슜
* 紐⑤뱢?뺣낫瑜?諛쏆븘??20媛쒖쓽 ?뺤옣蹂?섎? 泥댄겕?섏뿬 type, required?깆쓽 媛믪쓣 泥댄겕?섏뿬 header??javascript 肄붾뱶 異붽?
**/
function addXmlJsFilter($module_info) {
$extra_vars = $module_info->extra_vars;
if(!$extra_vars) return;
$js_code = "";
foreach($extra_vars as $key => $val) {
$js_code .= sprintf('alertMsg["extra_vars%d"] = "%s";', $key, $val->name);
$js_code .= sprintf('extra_vars[extra_vars.length] = "extra_vars%d";', $key);
$js_code .= sprintf('target_type_list["extra_vars%d"] = "%s";', $key, $val->type);
if($val->is_required == 'Y') $js_code .= sprintf('notnull_list[notnull_list.length] = "extra_vars%s";',$key);
}
$js_code = "<script type=\"text/javascript\">//<![CDATA[\n".$js_code."\n//]]></script>";
Context::addHtmlHeader($js_code);
}
/**
* @brief 移댄뀒怨좊━瑜?罹먯떆 ?뚯씪濡???? **/
function makeCategoryFile($module_srl) {
// 罹먯떆 ?뚯씪 ?앹꽦???꾩슂???뺣낫媛 ?놁쑝硫?洹몃깷 return
if(!$module_srl) return false;
// 紐⑤뱢 ?뺣낫瑜?媛?몄샂 (mid瑜?援ы븯湲??꾪빐)
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
$mid = $module_info->mid;
if(!is_dir('./files/cache/document_category')) FileHandler::makeDir('./files/cache/document_category');
// 罹먯떆 ?뚯씪???대쫫??吏?? $xml_file = sprintf("./files/cache/document_category/%s.xml.php", $module_srl);
$php_file = sprintf("./files/cache/document_category/%s.php", $module_srl);
// 移댄뀒怨좊━ 紐⑸줉??援ы븿
$args->module_srl = $module_srl;
$args->sort_index = 'list_order';
$output = executeQuery('document.getCategoryList', $args);
$category_list = $output->data;
if(!$category_list) {
FileHandler::removeFile($xml_file);
FileHandler::removeFile($php_file);
return false;
}
if(!is_array($category_list)) $category_list = array($category_list);
$category_count = count($category_list);
for($i=0;$i<$category_count;$i++) {
$category_srl = $category_list[$i]->category_srl;
if(!preg_match('/^[0-9,]+$/', $category_list[$i]->group_srls)) $category_list[$i]->group_srls = '';
$list[$category_srl] = $category_list[$i];
}
// 援ы빐???곗씠?곌? ?녿떎硫??몃뱶?곗씠?곌? ?녿뒗 xml ?뚯씪留??앹꽦
if(!$list) {
$xml_buff = "<root />";
FileHandler::writeFile($xml_file, $xml_buff);
FileHandler::writeFile($php_file, '<?php if(!defined("__ZBXE__")) exit(); ?>');
return $xml_file;
}
// 援ы빐???곗씠?곌? ?섎굹?쇰㈃ array濡?諛붽씀?댁쨲
if(!is_array($list)) $list = array($list);
// 猷⑦봽瑜??뚮㈃??tree 援ъ꽦
foreach($list as $category_srl => $node) {
$node->mid = $mid;
$parent_srl = (int)$node->parent_srl;
$tree[$parent_srl][$category_srl] = $node;
}
// 罹먯떆 ?뚯씪??沅뚰븳怨?洹몃9 ?ㅼ젙???꾪븳 怨듯넻 ?ㅻ뜑
$header_script =
'$lang_type = Context::getLangType(); '.
'$is_logged = Context::get(\'is_logged\'); '.
'$logged_info = Context::get(\'logged_info\'); '.
'if($is_logged) {'.
'if($logged_info->is_admin=="Y") $is_admin = true; '.
'else $is_admin = false; '.
'$group_srls = array_keys($logged_info->group_list); '.
'} else { '.
'$is_admin = false; '.
'$group_srsl = array(); '.
'} ';
// xml 罹먯떆 ?뚯씪 ?앹꽦 (xml罹먯떆???곕줈 ?숈옉?섍린??session 吏?뺤쓣 ?댁<?댁빞 ??
$xml_buff = sprintf(
'<?php '.
'define(\'__ZBXE__\', true); '.
'require_once(\'../../../config/config.inc.php\'); '.
'$oContext = &Context::getInstance(); '.
'$oContext->init(); '.
'header("Content-Type: text/xml; charset=UTF-8"); '.
'header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); '.
'header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); '.
'header("Cache-Control: no-store, no-cache, must-revalidate"); '.
'header("Cache-Control: post-check=0, pre-check=0", false); '.
'header("Pragma: no-cache"); '.
'%s'.
'?>'.
'<root>%s</root>',
$header_script,
$this->getXmlTree($tree[0], $tree)
);
// php 罹먯떆 ?뚯씪 ?앹꽦
$php_output = $this->getPhpCacheCode($tree[0], $tree, 0);
$php_buff = sprintf(
'<?php '.
'if(!defined("__ZBXE__")) exit(); '.
'%s; '.
'%s; '.
'$menu->list = array(%s); '.
'?>',
$header_script,
$php_output['category_title_str'],
$php_output['buff']
);
// ?뚯씪 ??? FileHandler::writeFile($xml_file, $xml_buff);
FileHandler::writeFile($php_file, $php_buff);
return $xml_file;
}
/**
* @brief array濡??뺣젹???몃뱶?ㅼ쓣 parent_srl??李몄“?섎㈃??recursive?섍쾶 ?뚮㈃??xml ?곗씠???앹꽦
* 硫붾돱 xml?뚯씪? node?쇰뒗 tag媛 以묒꺽?쇰줈 ?ъ슜?섎ʼn ??xml doc?쇰줈 愿由ъ옄 ?섏씠吏?먯꽌 硫붾돱瑜?援ъ꽦?댁쨲\n
* (tree_menu.js ?먯꽌 xml?뚯씪??諛붾줈 ?쎄퀬 tree menu瑜?援ы쁽)
**/
function getXmlTree($source_node, $tree) {
if(!$source_node) return;
foreach($source_node as $category_srl => $node) {
$child_buff = "";
// ?먯떇 ?몃뱶???곗씠??媛?몄샂
if($category_srl && $tree[$category_srl]) $child_buff = $this->getXmlTree($tree[$category_srl], $tree);
// 蹂???뺣━
$title = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->title);
$expand = $node->expand;
$group_srls = $node->group_srls;
$mid = $node->mid;
$module_srl = $node->module_srl;
$parent_srl = $node->parent_srl;
$color = $node->color;
// node->group_srls媛믪씠 ?덉쑝硫? if($group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$group_srls);
else $group_check_code = "true";
$attribute = sprintf(
'mid="%s" module_srl="%d" node_srl="%d" parent_srl="%d" category_srl="%d" text="<?php echo (%s?"%s":"")?>" url="%s" expand="%s" color="%s" document_count="%d" ',
$mid,
$module_srl,
$category_srl,
$parent_srl,
$category_srl,
$group_check_code,
$title,
getUrl('','mid',$node->mid,'category',$category_srl),
$expand,
$color,
$node->document_count
);
if($child_buff) $buff .= sprintf('<node %s>%s</node>', $attribute, $child_buff);
else $buff .= sprintf('<node %s />', $attribute);
}
return $buff;
}
/**
* @brief array濡??뺣젹???몃뱶?ㅼ쓣 php code濡?蹂寃쏀븯??return
* 硫붾돱?먯꽌 硫붾돱瑜?tpl???ъ슜??xml?곗씠?곕? ?ъ슜???섎룄 ?덉?留?蹂꾨룄??javascript ?ъ슜???꾩슂?섍린?? * php濡???罹먯떆?뚯씪??留뚮뱾?댁꽌 db?댁슜?놁씠 諛붾줈 硫붾돱 ?뺣낫瑜?援ы븷 ???덈룄濡??쒕떎
* ??罹먯떆??ModuleHandler::displayContent() ?먯꽌 include?섏뿬 Context::set() ?쒕떎
**/
function getPhpCacheCode($source_node, $tree) {
$output = array("buff"=>"", "category_srl_list"=>array());
if(!$source_node) return $output;
// 猷⑦봽瑜??뚮㈃??1李?諛곗뿴濡??뺣━?섍퀬 include?????덈뒗 php script 肄붾뱶瑜??앹꽦
foreach($source_node as $category_srl => $node) {
// ?먯떇 ?몃뱶媛 ?덉쑝硫??먯떇 ?몃뱶???곗씠?곕? 癒쇱? ?살뼱??
if($category_srl&&$tree[$category_srl]) $child_output = $this->getPhpCacheCode($tree[$category_srl], $tree);
else $child_output = array("buff"=>"", "category_srl_list"=>array());
// 蹂???뺣━
$category_title_str = sprintf('$_category_title[%d] = "%s"; %s', $node->category_srl, $node->title, $child_output['category_title_str']);
// ?꾩옱 ?몃뱶??url媛믪씠 怨듬????꾨땲?쇰㈃ category_srl_list 諛곗뿴媛믪뿉 ?낅젰
$child_output['category_srl_list'][] = $node->category_srl;
$output['category_srl_list'] = array_merge($output['category_srl_list'], $child_output['category_srl_list']);
// node->group_srls媛믪씠 ?덉쑝硫?
if($node->group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$node->group_srls);
else $group_check_code = "true";
// 蹂???뺣━
$selected = '"'.implode('","',$child_output['category_srl_list']).'"';
$child_buff = $child_output['buff'];
$expand = $node->expand;
// ?띿꽦???앹꽦?쒕떎 ( category_srl_list瑜??댁슜?댁꽌 ?좏깮??硫붾돱???몃뱶???랁븯?붿?瑜?寃?ы븳?? 苑곸닔吏留?鍮좊Ⅴ怨?媛뺣젰?섎떎怨??앷컖;;)
$attribute = sprintf(
'"mid" => "%s", "module_srl" => "%d","node_srl"=>"%s","category_srl"=>"%s","parent_srl"=>"%s","text"=>$_category_title[%d],"selected"=>(in_array(Context::get("category"),array(%s))?1:0),"expand"=>"%s","color"=>"%s", "list"=>array(%s),"document_count"=>"%d","grant"=>%s?true:false',
$node->mid,
$node->module_srl,
$node->category_srl,
$node->category_srl,
$node->parent_srl,
$node->category_srl,
$selected,
$expand,
$node->color,
$child_buff,
$node->document_count,
$group_check_code
);
// buff ?곗씠?곕? ?앹꽦?쒕떎
$output['buff'] .= sprintf('%s=>array(%s),', $node->category_srl, $attribute);
$output['category_title_str'] .= $category_title_str;
}
return $output;
}
/**
* @brief 寃뚯떆臾쇱쓽 ??寃뚯떆臾쇱쓣.. ?대┃???섑??섎뒗 ?앹뾽 硫붾돱瑜?異붽??섎뒗 method
**/
function addDocumentPopupMenu($url, $str, $icon = '', $target = 'self') {
$document_popup_menu_list = Context::get('document_popup_menu_list');
if(!is_array($document_popup_menu_list)) $document_popup_menu_list = array();
$obj->url = $url;
$obj->str = $str;
$obj->icon = $icon;
$obj->target = $target;
$document_popup_menu_list[] = $obj;
Context::set('+
'document_popup_menu_list', $document_popup_menu_list);
}
}
?>