diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php
index d47dd1996..394bc0732 100644
--- a/classes/module/ModuleHandler.class.php
+++ b/classes/module/ModuleHandler.class.php
@@ -48,6 +48,7 @@
// 모듈 정보에서 module 이름을 구해움
$module = $module_info->module;
+ $mid = $module_info->mid;
}
// 만약 모듈이 없다면 잘못된 모듈 호출에 대한 오류를 message 모듈을 통해 호출
@@ -68,6 +69,7 @@
// act값을 Context에 세팅
Context::set('act', $act, true);
+ Context::set('mid', $mid, true);
// 모듈 객체 생성
$oModule = &$this->getModuleInstance($module, $type);
@@ -77,6 +79,7 @@
if(!is_object($oModule)) return;
+ $act = Context::get('act');
$oModule->proc($act);
$this->oModule = $oModule;
diff --git a/common/js/xml_js_filter.js b/common/js/xml_js_filter.js
index 2d3b5020b..1dbf50be7 100644
--- a/common/js/xml_js_filter.js
+++ b/common/js/xml_js_filter.js
@@ -230,7 +230,6 @@ function XmlJsFilterProc(confirm_msg) {
var response = this.response;
if(confirm_msg && !confirm(confirm_msg)) return false;
-
if(!this.act) {
this.user_func(this.fo_obj, params);
return true;
diff --git a/config/config.inc.php b/config/config.inc.php
index 4e3755d1d..b3e18ff9e 100644
--- a/config/config.inc.php
+++ b/config/config.inc.php
@@ -19,7 +19,16 @@
* @brief debug mode = true 일때 files/_debug_message.php 에 디버그 내용이 쌓임
**/
define('__DEBUG__', true);
- if(__DEBUG__) define('__StartTime__', getMicroTime());
+ if(__DEBUG__) {
+
+ // php5이상이면 error handling을 handleError() 로 set
+ if (version_compare(phpversion(), '5.0') > 0) {
+ set_error_handler("handleError");
+ }
+
+ // 여기서부터 시작 시간으로 설정
+ define('__StartTime__', getMicroTime());
+ }
/**
* @brief 세션 설정
diff --git a/config/func.inc.php b/config/func.inc.php
index 9e5b14029..0990b8a63 100644
--- a/config/func.inc.php
+++ b/config/func.inc.php
@@ -142,4 +142,22 @@
return $var;
}
+
+ /**
+ * @brief php5 이상에서 error_handing을 debugPrint로 변경
+ * @param errno
+ * @param errstr
+ * @return file
+ * @return line
+ **/
+ function handleError($errno, $errstr, $file, $line) {
+ if(!__DEBUG__) return;
+ $errors = array(E_USER_ERROR, E_ERROR, E_PARSE);
+ if(!in_array($errno,$errors)) return;
+
+ $output = sprintf("Fatal error : %s - %d", $file, $line);
+ $output .= sprintf("%d - %s", $errno, $errstr);
+
+ debugPrint($output);
+ }
?>
diff --git a/editor/default/editor.js b/editor/default/editor.js
index 7f7c42370..f7a98bdff 100755
--- a/editor/default/editor.js
+++ b/editor/default/editor.js
@@ -5,20 +5,20 @@
var iframe_id = 'editor_iframe_';
// srl값에 해당하는 iframe의 object를 return
-function editorGetIFrame(document_srl) {/*{{{*/
+function editorGetIFrame(document_srl) {
var obj_id = iframe_id+document_srl;
return xGetElementById(obj_id);
-}/*}}}*/
+}
// editor 초기화를 onload이벤트 후에 시작시킴
-function editorInit(document_srl) {/*{{{*/
+function editorInit(document_srl) {
var start_func = function _editorStart() { editorStart(document_srl); }
var init_func = function _editorInit() { setTimeout(start_func, 300); }
xAddEventListener(window, 'load', init_func);
-}/*}}}*/
+}
// editor 초기화 (document_srl로 iframe객체를 얻어서 쓰기 모드로 전환)
-function editorStart(document_srl) {/*{{{*/
+function editorStart(document_srl) {
// iframe obj를 찾음
var iframe_obj = editorGetIFrame(document_srl);
if(!iframe_obj) return;
@@ -82,14 +82,14 @@ function editorStart(document_srl) {/*{{{*/
// 에디터의 내용을 지속적으로 fo_obj.content.value에 입력
editorSyncContent(fo_obj.content, document_srl);
-}/*}}}*/
+}
-var _editorSyncList = new Array(); /*{{{*/
+var _editorSyncList = new Array();
function editorSyncContent(obj, document_srl) {
_editorSyncList[_editorSyncList.length] = {field:obj, document_srl:document_srl}
-}/*}}}*/
+}
-function _editorSync() {/*{{{*/
+function _editorSync() {
for(var i=0;i<_editorSyncList.length;i++) {
var field = _editorSyncList[i].field;
var document_srl = _editorSyncList[i].document_srl;
@@ -98,26 +98,26 @@ function _editorSync() {/*{{{*/
field.value = content;
}
setTimeout(_editorSync, 1000);
-}/*}}}*/
+}
xAddEventListener(window, 'load', _editorSync);
// 문단기능 toggle
-function editorUseParagraph(obj, document_srl) { /*{{{*/
+function editorUseParagraph(obj, document_srl) {
toggleDisplay('editor_paragraph_'+document_srl);
-}/*}}}*/
+}
// 에디터의 내용 return
-function editorGetContent(document_srl) {/*{{{*/
+function editorGetContent(document_srl) {
var iframe_obj = editorGetIFrame(document_srl);
if(!iframe_obj) return;
var html = '';
html = xInnerHtml(iframe_obj.contentWindow.document.body);
if(!html) return;
return html.trim();
-}/*}}}*/
+}
// 에디터 내의 선택된 부분의 html 코드를 return
-function editorGetSelectedHtml(document_srl) {/*{{{*/
+function editorGetSelectedHtml(document_srl) {
var iframe_obj = editorGetIFrame(document_srl);
if(xIE4Up) {
var range = iframe_obj.contentWindow.document.selection.createRange();
@@ -131,10 +131,10 @@ function editorGetSelectedHtml(document_srl) {/*{{{*/
var html = xInnerHtml(dummy);
return html;
}
-}/*}}}*/
+}
// 에디터 내의 선택된 부분의 html코드를 변경
-function editorReplaceHTML(iframe_obj, html) {/*{{{*/
+function editorReplaceHTML(iframe_obj, html) {
iframe_obj.contentWindow.focus();
if(xIE4Up) {
var range = iframe_obj.contentWindow.document.selection.createRange();
@@ -144,10 +144,10 @@ function editorReplaceHTML(iframe_obj, html) {/*{{{*/
range.deleteContents();
range.insertNode(range.createContextualFragment(html));
}
-}/*}}}*/
+}
// 입력 키에 대한 이벤트 체크
-function editorKeyPress(evt) {/*{{{*/
+function editorKeyPress(evt) {
var e = new xEvent(evt);
if (e.keyCode == 13) {
if(xIE4Up && e.shiftKey == false && !xGetElementById("use_paragraph").checked ) {
@@ -186,10 +186,10 @@ function editorKeyPress(evt) {/*{{{*/
break;
}
}
-}/*}}}*/
+}
// 에디터 상단의 버튼 클릭시 action 처리
-var editorPrevObj = null;/*{{{*/
+var editorPrevObj = null;
var editorPrevSrl = null;
function editorEventCheck(evt) {
var e = new xEvent(evt);
@@ -269,38 +269,38 @@ function editorEventCheck(evt) {
}
}
return;
-}/*}}}*/
+}
// focus
-function editorFocus(document_srl) {/*{{{*/
+function editorFocus(document_srl) {
var iframe_obj = editorGetIFrame(document_srl);
iframe_obj.contentWindow.focus();
}
-/*}}}*/
+
// 편집 기능 실행
-function editorDo(name, value, target) {/*{{{*/
+function editorDo(name, value, target) {
if(typeof(target)=='object') _editorDoObject(name, value, target);
else _editorDoSrl(name, value, target);
-}/*}}}*/
+}
-function _editorDoSrl(name, value, document_srl) {/*{{{*/
+function _editorDoSrl(name, value, document_srl) {
var iframe_obj = editorGetIFrame(document_srl);
editorFocus(document_srl);
if(xIE4Up) iframe_obj.contentWindow.document.execCommand(name, false, value);
else iframe_obj.contentWindow.document.execCommand(name, false, value);
editorFocus(document_srl);
-}/*}}}*/
+}
-function _editorDoObject(name, value, obj) {/*{{{*/
+function _editorDoObject(name, value, obj) {
if(xIE4Up) {
obj.parentElement.document.execCommand(name, false, value);
} else {
obj.parentNode.execCommand(name, false, value);
}
-}/*}}}*/
+}
-function editorHideObject(evt) {/*{{{*/
+function editorHideObject(evt) {
if(!editorPrevObj) return;
var e = new xEvent(evt);
var tobj = e.target;
@@ -313,47 +313,47 @@ function editorHideObject(evt) {/*{{{*/
editorPrevObj.style.visibility = 'hidden';
editorPrevObj = null;
return;
-}/*}}}*/
+}
-function editorChangeFontName(obj,srl) {/*{{{*/
+function editorChangeFontName(obj,srl) {
var value = obj.options[obj.selectedIndex].value;
if(!value) return;
editorDo('FontName',value,srl);
obj.selectedIndex = 0;
-}/*}}}*/
+}
-function editorChangeFontSize(obj,srl) {/*{{{*/
+function editorChangeFontSize(obj,srl) {
var value = obj.options[obj.selectedIndex].value;
if(!value) return;
editorDo('FontSize',value,srl);
obj.selectedIndex = 0;
-}/*}}}*/
+}
-function editorSetForeColor(color_code) {/*{{{*/
+function editorSetForeColor(color_code) {
editorDo("ForeColor",color_code,editorPrevSrl);
editorPrevObj.style.visibility = 'hidden';
editorFocus(editorPrevSrl);
-}/*}}}*/
+}
-function editorSetBackColor(color_code) {/*{{{*/
+function editorSetBackColor(color_code) {
if(xIE4Up) editorDo("BackColor",color_code,editorPrevSrl);
else editorDo("hilitecolor",color_code,editorPrevSrl);
editorFocus(editorPrevSrl);
-}/*}}}*/
+}
-function editorInsertEmoticon(obj) {/*{{{*/
+function editorInsertEmoticon(obj) {
editorFocus(editorPrevSrl);
editorDo("InsertImage",obj.src,editorPrevSrl);
editorFocus(editorPrevSrl);
-}/*}}}*/
+}
-function editorDoInsertUrl(link, document_srl) {/*{{{*/
+function editorDoInsertUrl(link, document_srl) {
editorFocus(document_srl);
var iframe_obj = editorGetIFrame(srl);
editorReplaceHTML(iframe_obj, link);
-}/*}}}*/
+}
-function editorInsertUrl(text, url, link_type) {/*{{{*/
+function editorInsertUrl(text, url, link_type) {
if(!text || !url) return;
//if(!/^(http|ftp)/i.test(url)) url = 'http://'+url;
@@ -364,9 +364,9 @@ function editorInsertUrl(text, url, link_type) {/*{{{*/
editorFocus(editorPrevSrl);
var obj = editorGetIFrame(editorPrevSrl)
editorReplaceHTML(obj, link);
-}/*}}}*/
+}
-function editorInsertImage(url, src_align) {/*{{{*/
+function editorInsertImage(url, src_align) {
if(!url) return;
//if(!/^(http|ftp)/i.test(url)) url = 'http://'+url;
@@ -377,9 +377,9 @@ function editorInsertImage(url, src_align) {/*{{{*/
html += " />";
var obj = editorGetIFrame(editorPrevSrl);
editorReplaceHTML(obj, html);
-}/*}}}*/
+}
-function editorGetMultimediaHtml(url, width, height, source_filename) {/*{{{*/
+function editorGetMultimediaHtml(url, width, height, source_filename) {
if(typeof(width)=='undefined'||!width) width = 540;
if(typeof(height)=='undefined'||!height) height= 420;
@@ -396,9 +396,9 @@ function editorGetMultimediaHtml(url, width, height, source_filename) {/*{{{*/
}
var html = "
";
return html;
-}/*}}}*/
+}
-function editorInsertMultimedia(url, width, height) {/*{{{*/
+function editorInsertMultimedia(url, width, height) {
if(url) {
var html = editorGetMultimediaHtml(url, width, height);
editorFocus(editorPrevSrl);
@@ -406,18 +406,18 @@ function editorInsertMultimedia(url, width, height) {/*{{{*/
editorReplaceHTML(obj, html);
editorFocus(editorPrevSrl);
}
-}/*}}}*/
+}
-function editorInsertHTML(html) {/*{{{*/
+function editorInsertHTML(html) {
if(!html) return;
editorFocus(editorPrevSrl);
var obj = editorGetIFrame(editorPrevSrl)
editorReplaceHTML(obj, html);
editorFocus(editorPrevSrl);
-}/*}}}*/
+}
-function editorInsertQuotation(html) {/*{{{*/
+function editorInsertQuotation(html) {
if(!html) return;
if(!xIE4Up) html += "
";
@@ -425,14 +425,14 @@ function editorInsertQuotation(html) {/*{{{*/
var obj = editorGetIFrame(editorPrevSrl)
editorReplaceHTML(obj, html);
editorFocus(editorPrevSrl);
-}/*}}}*/
+}
-function editorHighlight(ret_obj, response_tags, obj) {/*{{{*/
+function editorHighlight(ret_obj, response_tags, obj) {
var html = ret_obj['html'];
html = "
"+html+"
";
if(!xIE4Up) html += "
";
editorReplaceHTML(obj, html);
-}/*}}}*/
+}
/**
* iframe 드래그 관련
@@ -443,7 +443,7 @@ var editorDragObj = null;
var editorDragID = '';
xAddEventListener(document, 'mousedown', editorDragStart);
xAddEventListener(document, 'mouseup', editorDragStop);
-function editorDragStart(evt) {/*{{{*/
+function editorDragStart(evt) {
var e = new xEvent(evt);
var obj = e.target;
if(typeof(obj.id)=='undefined'||!obj.id) return;
@@ -459,9 +459,9 @@ function editorDragStart(evt) {/*{{{*/
var iframe_obj = editorGetIFrame(editorDragID);
xAddEventListener(iframe_obj, 'mousemove', editorDragMove);
-}/*}}}*/
+}
-function editorDragStop(evt) {/*{{{*/
+function editorDragStop(evt) {
var iframe_obj = editorGetIFrame(editorDragID);
xRemoveEventListener(document, 'mousemove', editorDragMove);
xRemoveEventListener(iframe_obj, 'mousemove', editorDragMove);
@@ -470,9 +470,9 @@ function editorDragStop(evt) {/*{{{*/
editorDragY = 0;
editorDragObj = null;
editorDragID = '';
-}/*}}}*/
+}
-function editorDragMove(evt) {/*{{{*/
+function editorDragMove(evt) {
if(typeof(editorIsDrag)=='undefined'||!editorIsDrag) return;
var e = new xEvent(evt);
var iframe_obj = editorGetIFrame(editorDragID);
@@ -484,7 +484,7 @@ function editorDragMove(evt) {/*{{{*/
var editorHeight = xHeight(iframe_obj);
xHeight(iframe_obj, editorHeight+yy);
-}/*}}}*/
+}
/**
* 파일 업로드 관련
@@ -493,12 +493,12 @@ var uploading_file = false;
var uploaded_files = new Array();
// 업로드를 하기 위한 준비 시작
-function editor_upload_init(document_srl) {/*{{{*/
+function editor_upload_init(document_srl) {
xAddEventListener(window,'load',function _change_form_target() {editor_upload_form_set(document_srl);} );
-}/*}}}*/
+}
// document_srl에 해당하는 form의 action을 iframe으로 변경
-function editor_upload_form_set(document_srl) {/*{{{*/
+function editor_upload_form_set(document_srl) {
// 업로드용 iframe을 생성
if(!xGetElementById('tmp_upload_iframe')) {
if(xIE4Up) {
@@ -533,10 +533,10 @@ function editor_upload_form_set(document_srl) {/*{{{*/
if(!iframe_obj) return;
iframe_obj.contentWindow.document.location.href=url;
-}/*}}}*/
+}
// 파일 업로드
-function editor_file_upload(field_obj, document_srl) {/*{{{*/
+function editor_file_upload(field_obj, document_srl) {
if(uploading_file) return;
var fo_obj = field_obj.parentNode;
@@ -550,20 +550,20 @@ function editor_file_upload(field_obj, document_srl) {/*{{{*/
var string = 'wait for uploading...';
var opt_obj = new Option(string, '', true, true);
sel_obj.options[sel_obj.options.length] = opt_obj;
-}/*}}}*/
+}
// 업로드된 파일 목록을 삭제
-function editor_upload_clear_list(document_srl) {/*{{{*/
+function editor_upload_clear_list(document_srl) {
var obj = xGetElementById('uploaded_file_list_'+document_srl);
while(obj.options.length) {
obj.remove(0);
}
var preview_obj = xGetElementById('uploaded_file_preview_box_'+document_srl);
xInnerHtml(preview_obj,'')
-}/*}}}*/
+}
// 업로드된 파일 정보를 목록에 추가
-function editor_insert_uploaded_file(document_srl, file_srl, filename, file_size, disp_file_size, uploaded_filename, sid) {/*{{{*/
+function editor_insert_uploaded_file(document_srl, file_srl, filename, file_size, disp_file_size, uploaded_filename, sid) {
var obj = xGetElementById('uploaded_file_list_'+document_srl);
var string = filename+' ('+disp_file_size+')';
var opt_obj = new Option(string, file_srl, true, true);
@@ -573,10 +573,10 @@ function editor_insert_uploaded_file(document_srl, file_srl, filename, file_size
uploaded_files[file_srl] = file_obj;
editor_preview(obj, document_srl);
-}/*}}}*/
+}
// 파일 목록창에서 클릭 되었을 경우 미리 보기
-function editor_preview(sel_obj, document_srl) {/*{{{*/
+function editor_preview(sel_obj, document_srl) {
if(sel_obj.options.length<1) return;
var file_srl = sel_obj.options[sel_obj.selectedIndex].value;
var obj = uploaded_files[file_srl];
@@ -605,10 +605,10 @@ function editor_preview(sel_obj, document_srl) {/*{{{*/
html = "
";
}
xInnerHtml(preview_obj, html);
-}/*}}}*/
+}
// 업로드된 파일 삭제
-function editor_remove_file(document_srl) {/*{{{*/
+function editor_remove_file(document_srl) {
var obj = xGetElementById('uploaded_file_list_'+document_srl);
if(obj.options.length<1) return;
var file_srl = obj.options[obj.selectedIndex].value;
@@ -626,10 +626,10 @@ function editor_remove_file(document_srl) {/*{{{*/
if(!iframe_obj) return;
iframe_obj.contentWindow.document.location.href=url;
-}/*}}}*/
+}
// 업로드 목록의 선택된 파일을 내용에 추가
-function editor_insert_file(document_srl, align) {/*{{{*/
+function editor_insert_file(document_srl, align) {
var obj = xGetElementById('uploaded_file_list_'+document_srl);
if(obj.options.length<1) return;
var file_srl = obj.options[obj.selectedIndex].value;
@@ -691,16 +691,16 @@ function editor_insert_file(document_srl, align) {/*{{{*/
if(editor_popup) editor_popup.focus();
}
-}/*}}}*/
+}
/**
* 글을 쓰다가 페이지 이동시 첨부파일에 대한 정리
**/
-function editorRemoveAttachFiles(mid, document_srl) {/*{{{*/
+function editorRemoveAttachFiles(mid, document_srl) {
var obj = xGetElementById('uploaded_file_list_'+document_srl);
if(obj.options.length<1) return;
var params = new Array();
params['document_srl'] = document_srl;
exec_xml(mid, 'procClearFile', params, null, null, null);
-}/*}}}*/
+}
diff --git a/index.php b/index.php
index 50775e6c9..dab87ad8e 100644
--- a/index.php
+++ b/index.php
@@ -14,6 +14,7 @@
* - 공식홈페이지 : http://www.zeroboard.com
* - 개발자 포험 : http://dev.zeroboard.com
* - 이슈트래킹 : http://www.zeroboard.com/trac
+ * - pdf 문서 : http://dev.zeroboard.com/doc/zeroboard.pdf
*
**/
diff --git a/modules/board/board.controller.php b/modules/board/board.controller.php
index d0bba228b..b67e5303c 100644
--- a/modules/board/board.controller.php
+++ b/modules/board/board.controller.php
@@ -12,7 +12,7 @@
**/
function init() {
// 파일 업로드일 경우 $act값을 procUploadFile() 로 변경
- if(Context::isUploaded() && $this->grant->fileupload) $this->act = 'procUploadFile';
+ if(Context::isUploaded() && $this->grant->fileupload) Context::set('act', 'procUploadFile');
}
/**
@@ -433,7 +433,7 @@
/**
* @brief 게시판 추가
**/
- function procBoardInsert() {
+ function procInsertBoard() {
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
$args = Context::gets('module_srl','mid','skin','use_category','browser_title','description','is_default','header_text','footer_text','admin_id');
$args->module = 'board';
@@ -483,7 +483,7 @@
/**
* @brief 게시판 삭제
**/
- function procBoardDelete() {
+ function procDeleteBoard() {
$module_srl = Context::get('module_srl');
// 원본을 구해온다
diff --git a/modules/board/board.view.php b/modules/board/board.view.php
index 913b18392..1fac5f186 100644
--- a/modules/board/board.view.php
+++ b/modules/board/board.view.php
@@ -11,7 +11,7 @@
* @brief 초기화
**/
function init() {
- // 카테고리를 사용한다면 카테고리 목록을 구해옴
+ // 카테고리를 사용하는지 확인후 사용시 카테고리 목록을 구해와서 Context에 세팅
if($this->module_info->use_category=='Y') {
$oDocumentModel = &getModel('document');
$this->category_list = $oDocumentModel->getCategoryList($this->module_srl);
@@ -27,8 +27,6 @@
// 스킨 디렉토리 세팅
$skin_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
$this->setTemplatePath($skin_path);
-
- return true;
}
/**
@@ -47,86 +45,34 @@
// document_srl이 있다면 해당 글을 구해오자
if($this->grant->view && $document_srl) {
- $document = $oDocumentModel->getDocument($document_srl);
-
- // 글이 찾아지지 않으면 무효화
- if(!$document) {
- Context::set('document_srl','');
- $document_srl = NULL;
- unset($document);
- }
- }
-
- // 글이 찾아지면 조회수 업데이트 및 기타 등등
- if($document) {
-
- // 비밀글이고 권한이 없을 경우 인증페이지로
- if($document->is_secret=='Y' && !$document->is_granted) return $this->setTemplateFile('input_password_form');
-
- // 조회수 업데이트
- if($oDocument->updateReadedCount($document_srl)) $document->readed_count++;
-
- // 댓글 가져오기
- if($document->comment_count && $document->allow_comment == 'Y') {
- $oCommentModel = &getModel('comment');
- $comment_list = $oCommentModel->getCommentList($document_srl);
- Context::set('comment_list', $comment_list);
- }
-
- // 트랙백 가져오기
- if($document->trackback_count && $document->allow_trackback == 'Y') {
- $oTrackback = &getModule('trackback');
- $trackback_list = $oTrackback->getTrackbackList($document_srl);
- Context::set('trackback_list', $trackback_list);
- }
-
- // 첨부파일 가져오기
- if($document->uploaded_count) {
- $file_list = $oDocument->getFiles($document_srl);
- $document->uploaded_list = $file_list;
- }
+ $document = $oDocumentModel->getDocument($document_srl, $this->grant->manager, true);
Context::set('document', $document);
+
}
- // 만약 document_srl은 있는데 page가 없다면 글만 호출된 경우,
- // 그럼 page를 구해서 세팅해주자..
+ // 만약 document_srl은 있는데 page가 없다면 글만 호출된 경우 page를 구해서 세팅해주자..
if($document_srl && !$page) {
- $page = $oDocument->getDocumentPage($document_srl, $this->module_srl, $this->list_count);
+ $page = $oDocumentModel->getDocumentPage($document_srl, $this->module_srl, $this->list_count);
Context::set('page', $page);
}
- // 검색옵션
- $search_target = Context::get('search_target');
- $keyword = Context::get('keyword');
- if($search_target && $keyword) {
- $keyword = str_replace(' ','%',$keyword);
- switch($search_target) {
- case 'title' :
- $search_obj->s_title = $keyword;
- break;
- case 'content' :
- $search_obj->s_content = $keyword;
- break;
- case 'title_content' :
- $search_obj->s_title = $keyword;
- $search_obj->s_content = $keyword;
- break;
- case 'user_name' :
- $search_obj->s_user_name = $keyword;
- break;
- }
- }
+ // 목록을 구하기 위한 옵션
+ $args->module_srl = $this->module_srl; ///< 현재 모듈의 module_srl
+ $args->page = $page; ///< 페이지
+ $args->list_count = $this->list_count; ///< 한페이지에 보여줄 글 수
+ $args->page_count = $this->page_count; ///< 페이지 네비게이션에 나타날 페이지의 수
- // 카테고리
- $category = Context::get('category');
- if($category) $search_obj->category_srl = $category;
+ $args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...)
+ $args->search_keyword = Context::get('search_keyword'); ///< 검색어
+ if($this->module_info->use_category=='Y') $args->category_srl = Context::get('category'); ///< 카테고리 사용시 선택된 카테고리
- // 목록의 경우 document->getDocumentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
- $oDocumentModel = &getModel('document');
- $output = $oDocumentModel->getDocumentList($this->module_srl, 'list_order', $page, $this->list_count, $this->page_count, $search_obj);
+ $args->sort_index = 'list_order'; ///< 소팅 값
- // 템플릿에 쓰기 위해서 context::set
+ // 목록 구함, document->getDocumentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
+ $output = $oDocumentModel->getDocumentList($args);
+
+ // 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
@@ -139,6 +85,7 @@
$search_option[$this->search_option[$i]] = Context::getLang($this->search_option[$i]);
}
Context::set('search_option', $search_option);
+
$this->setTemplateFile('list');
}
@@ -149,24 +96,25 @@
// 권한 체크
if(!$this->grant->write_document) return $this->dispMessage('msg_not_permitted');
- // 목록 구현에 필요한 변수들을 가져온다
+ // GET parameter에서 document_srl을 가져옴
$document_srl = Context::get('document_srl');
// document 모듈 객체 생성
- $oDocument = &getModule('document');
+ $oDocumentModel = &getModel('document');
// 지정된 글이 없다면 (신규) 새로운 번호를 만든다
+ if($document_srl) {
+ $document = $oDocumentModel->getDocument($document_srl);
+ if(!$document) {
+ unset($document_srl);
+ Context::set('document_srl','');
+ }
+ }
+
+ // 문서 번호가 없으면 새로운 값을 받아옴
if(!$document_srl) {
$oDB = &DB::getInstance();
$document_srl = $oDB->getNextSequence();
-
- // 글의 수정일 경우 원본 글을 가져와서 확인을 한다
- } else {
- $document = $oDocument->getDocument($document_srl);
- if(!$document) {
- $oDB = &DB::getInstance();
- $document_srl = $oDB->getNextSequence();
- }
}
// 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로
@@ -190,8 +138,8 @@
// 지정된 글이 있는지 확인
if($document_srl) {
- $oDocument = &getModule('document');
- $document = $oDocument->getDocument($document_srl);
+ $oDocumentModel = &getModel('document');
+ $document = $oDocumentModel->getDocument($document_srl);
}
// 삭제하려는 글이 없으면 에러
@@ -220,11 +168,11 @@
if(!$parent_srl) return new Object(-1, 'msg_invalid_request');
// 해당 댓글를 찾아본다
- $oComment = &getModule('comment');
- $source_comment = $oComment->getComment($parent_srl);
+ $oCommentModel = &getModel('comment');
+ $source_comment = $oCommentModel->getComment($parent_srl);
// 댓글이 없다면 오류
- if(!$source_comment) return new Object(-1, 'msg_invalid_request');
+ if(!$source_comment) return $this->dispMessage('msg_invalid_request');
// 필요한 정보들 세팅
Context::set('document_srl',$document_srl);
@@ -250,14 +198,14 @@
if(!$comment_srl) return new Object(-1, 'msg_invalid_request');
// 해당 댓글를 찾아본다
- $oComment = &getModule('comment');
- $comment = $oComment->getComment($comment_srl);
+ $oCommentModel = &getModel('comment');
+ $comment = $oCommentModel->getComment($comment_srl);
// 댓글이 없다면 오류
- if(!$comment) return new Object(-1, 'msg_invalid_request');
+ if(!$comment) return $this->dispMessage('msg_invalid_request');
// 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로
- if($comment_srl&&$comment&&!$_SESSION['own_comment'][$comment_srl]) return $this->setTemplateFile('input_password_form');
+ if($comment_srl&&$comment&&!$comment->is_granted) return $this->setTemplateFile('input_password_form');
// 필요한 정보들 세팅
Context::set('document_srl',$document_srl);
@@ -279,26 +227,46 @@
// 삭제하려는 댓글가 있는지 확인
if($comment_srl) {
- $oComment = &getModule('comment');
- $comment = $oComment->getComment($comment_srl);
+ $oCommentModel = &getModel('comment');
+ $comment = $oCommentModel->getComment($comment_srl);
}
// 삭제하려는 글이 없으면 에러
if(!$comment) return $this->list();
// 권한이 없는 경우 비밀번호 입력화면으로
- if($comment_srl&&$comment&&!$_SESSION['own_comment'][$comment_srl]) return $this->setTemplateFile('input_password_form');
+ if($comment_srl&&$comment&&!$comment->is_granted) return $this->setTemplateFile('input_password_form');
Context::set('comment',$comment);
$this->setTemplateFile('delete_comment_form');
}
+ /**
+ * @brief 엮인글 삭제 화면 출력
+ **/
+ function dispTrackbackDelete() {
+ // 삭제할 댓글번호를 가져온다
+ $trackback_srl = Context::get('trackback_srl');
+
+ // 삭제하려는 댓글가 있는지 확인
+ $oTrackbackModel = &getModel('trackback');
+ $output = $oTrackbackModel->getTrackback($trackback_srl);
+ $trackback = $output->data;
+
+ // 삭제하려는 글이 없으면 에러
+ if(!$trackback) return $this->dispContent();
+
+ Context::set('trackback',$trackback);
+
+ $this->setTemplateFile('delete_trackback_form');
+ }
+
/**
* @brief 로그인 폼 출력
**/
function dispLogin() {
- if(Context::get('is_logged')) return $this->list();
+ if(Context::get('is_logged')) return $this->dispContent();
$this->setTemplateFile('login_form');
}
@@ -306,7 +274,7 @@
* @brief 로그아웃 화면 출력
**/
function dispLogout() {
- if(!Context::get('is_logged')) return $this->list();
+ if(!Context::get('is_logged')) return $this->dispContent();
$this->setTemplateFile('logout');
}
@@ -321,26 +289,6 @@
$this->setTemplateFile('message');
}
- /**
- * @brief 엮인글 삭제 화면 출력
- **/
- function dispTrackbackDelete() {
- // 삭제할 댓글번호를 가져온다
- $trackback_srl = Context::get('trackback_srl');
-
- // 삭제하려는 댓글가 있는지 확인
- $oTrackback = &getModule('trackback');
- $output = $oTrackback->getTrackback($trackback_srl);
- $trackback = $output->data;
-
- // 삭제하려는 글이 없으면 에러
- if(!$trackback) return $this->list();
-
- Context::set('trackback',$trackback);
-
- $this->setTemplateFile('delete_trackback_form');
- }
-
/**
* @brief RSS 출력
**/
@@ -348,7 +296,21 @@
// 권한 체크
if(!$this->grant->list) return $this->dispMessage('msg_not_permitted');
- $page = Context::get('page');
+ // 컨텐츠 추출
+ $args->module_srl = $this->module_srl; ///< 현재 모듈의 module_srl
+ $args->page = Context::get('page'); ///< 페이지
+ $args->list_count = $this->list_count; ///< 한페이지에 보여줄 글 수
+ $args->page_count = $this->page_count; ///< 페이지 네비게이션에 나타날 페이지의 수
+
+ $args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...)
+ $args->search_keyword = Context::get('search_keyword'); ///< 검색어
+ if($this->module_info->use_category=='Y') $args->category_srl = Context::get('category'); ///< 카테고리 사용시 선택된 카테고리
+
+ $args->sort_index = 'list_order'; ///< 소팅 값
+
+ $oDocumentModel = &getModel('document');
+ $output = $oDocumentModel->getDocumentList($args);
+ $document_list = $output->data;
// rss 제목 및 정보등을 추출
$info->title = Context::getBrowserTitle();
@@ -356,15 +318,12 @@
$info->language = Context::getLangType();
$info->date = gmdate("D, d M Y H:i:s");
$info->link = sprintf("%s?mid=%s", Context::getRequestUri(), Context::get('mid'));
-
- // 컨텐츠 추출
- $oDocument = &getModule('document');
- $output = $oDocument->getDocumentList($this->module_srl, 'update_order', $page, 20, 20, NULL);
- $document_list = $output->data;
+ $info->total_count = $output->total_count;
+ $info->total_page = $output->total_page;
// 출력하고 끝내기
- $oRss = &getView('rss');
- $oRss->dispRss($info, $document_list);
+ $oRssView = &getView('rss');
+ $oRssView->dispRss($info, $document_list);
}
/**
@@ -373,9 +332,10 @@
function dispAdminContent() {
// module_srl이 있으면 미리 체크하여 존재하는 모듈이면 module_info 세팅
$module_srl = Context::get('module_srl');
+
if($module_srl) {
- $oModule = &getModule('module_manager');
- $module_info = $oModule->getModuleInfoByModuleSrl($module_srl);
+ $oModuleModel = &getModel('module');
+ $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info) {
Context::set('module_srl','');
$this->act = 'list';
diff --git a/modules/board/conf/module.xml b/modules/board/conf/module.xml
index 262142ac9..ff5552cc1 100644
--- a/modules/board/conf/module.xml
+++ b/modules/board/conf/module.xml
@@ -35,7 +35,7 @@
-
+
@@ -45,5 +45,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/board/skins/default/filter/filter.delete_comment.xml b/modules/board/skins/default/filter/delete_comment.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.delete_comment.xml
rename to modules/board/skins/default/filter/delete_comment.xml
diff --git a/modules/board/skins/default/filter/filter.delete_document.xml b/modules/board/skins/default/filter/delete_document.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.delete_document.xml
rename to modules/board/skins/default/filter/delete_document.xml
diff --git a/modules/board/skins/default/filter/filter.delete_trackback.xml b/modules/board/skins/default/filter/delete_trackback.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.delete_trackback.xml
rename to modules/board/skins/default/filter/delete_trackback.xml
diff --git a/modules/board/skins/default/filter/filter.input_password.xml b/modules/board/skins/default/filter/input_password.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.input_password.xml
rename to modules/board/skins/default/filter/input_password.xml
diff --git a/modules/board/skins/default/filter/filter.insert.xml b/modules/board/skins/default/filter/insert.xml
similarity index 78%
rename from modules/board/skins/default/filter/filter.insert.xml
rename to modules/board/skins/default/filter/insert.xml
index fa8d542a2..7e7970c5a 100644
--- a/modules/board/skins/default/filter/filter.insert.xml
+++ b/modules/board/skins/default/filter/insert.xml
@@ -1,4 +1,4 @@
-
+
-
+
diff --git a/modules/board/skins/default/filter/filter.insert_comment.xml b/modules/board/skins/default/filter/insert_comment.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.insert_comment.xml
rename to modules/board/skins/default/filter/insert_comment.xml
diff --git a/modules/board/skins/default/filter/filter.login.xml b/modules/board/skins/default/filter/login.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.login.xml
rename to modules/board/skins/default/filter/login.xml
diff --git a/modules/board/skins/default/filter/filter.logout.xml b/modules/board/skins/default/filter/logout.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.logout.xml
rename to modules/board/skins/default/filter/logout.xml
diff --git a/modules/board/skins/default/filter/filter.search.xml b/modules/board/skins/default/filter/search.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.search.xml
rename to modules/board/skins/default/filter/search.xml
diff --git a/modules/board/skins/default/filter/filter.vote.xml b/modules/board/skins/default/filter/vote.xml
similarity index 100%
rename from modules/board/skins/default/filter/filter.vote.xml
rename to modules/board/skins/default/filter/vote.xml
diff --git a/modules/board/skins/default/js/board.js b/modules/board/skins/default/js/board.js
index 658b77803..2d9eb9927 100644
--- a/modules/board/skins/default/js/board.js
+++ b/modules/board/skins/default/js/board.js
@@ -5,7 +5,7 @@
**/
/* 글쓰기 작성후 */
-function procInsert(ret_obj, response_tags) {
+function completeDocumentInserted(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var mid = ret_obj['mid'];
@@ -17,6 +17,13 @@ function procInsert(ret_obj, response_tags) {
location.href = url;
}
+
+
+
+
+
+
+
/* 글 삭제 */
function procDeleteDocument(ret_obj, response_tags) {
var error = ret_obj['error'];
diff --git a/modules/board/skins/default/write_form.html b/modules/board/skins/default/write_form.html
index 92ce9f9fd..1d011c9d8 100644
--- a/modules/board/skins/default/write_form.html
+++ b/modules/board/skins/default/write_form.html
@@ -1,4 +1,4 @@
-
+