이전의 설문조사는 어쩔 수 없으나 신규 설문조사 부터는 문서/댓글의 위치를 trigger을 이용하여 제대로 연결되도록 하고 관리자 페이지에서 문서 또는 댓글에서의 등록 유무를 체크하여 원본을 잘 찾도록 기능 변경

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4127 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-04-22 03:07:06 +00:00
parent 0e38dea1d0
commit a69193bc50
13 changed files with 153 additions and 13 deletions

View file

@ -27,7 +27,6 @@
<input type="hidden" name="component" value="{$component_info->component_name}" />
<input type="hidden" name="method" value="insertPoll" />
<input type="hidden" name="poll_srl" value="" />
<input type="hidden" name="editor_sequence" value="{$editor_sequence}" />
<input type="hidden" name="stop_date" id="stop_date" value="{date("Ymd",time()+60*60*24*30)}" />
<div id="popBody">

View file

@ -9,6 +9,8 @@
<action name="getPollGetColorsetList" type="model" standalone="true" />
<action name="getPollAdminTarget" type="model" standalone="true" />
<action name="procInsert" type="controller" standalone="true" />
<action name="procPoll" type="controller" standalone="true" />
<action name="procPollViewResult" type="controller" standalone="true" />

View file

@ -24,5 +24,27 @@
return $output;
}
/**
* @brief 설문조사의 원본을 구함
**/
function getPollAdminTarget() {
$poll_srl = Context::get('poll_srl');
$upload_target_srl = Context::get('upload_target_srl');
$oDocumentModel = &getModel('document');
$oCommentModel = &getModel('comment');
$oDocument = $oDocumentModel->getDocument($upload_target_srl);
if(!$oDocument->isExists()) $oComment = $oCommentModel->getComment($upload_target_srl);
if($oComment->isExists()) {
$this->add('document_srl', $oComment->get('document_srl'));
$this->add('comment_srl', $oComment->get('comment_srl'));
} elseif($oDocument->isExists()) {
$this->add('document_srl', $oDocument->get('document_srl'));
} else return new Object(-1, 'msg_not_founded');
}
}
?>

View file

@ -23,6 +23,10 @@
$oModuleController->insertModuleConfig('poll', $config);
// 2007. 10. 17 글/댓글의 삭제시 설문조사도 삭제
$oModuleController->insertTrigger('document.insertDocument', 'poll', 'controller', 'triggerInsertDocumentPoll', 'after');
$oModuleController->insertTrigger('comment.insertComment', 'poll', 'controller', 'triggerInsertCommentPoll', 'after');
$oModuleController->insertTrigger('document.updateDocument', 'poll', 'controller', 'triggerUpdateDocumentPoll', 'after');
$oModuleController->insertTrigger('comment.updateComment', 'poll', 'controller', 'triggerUpdateCommentPoll', 'after');
$oModuleController->insertTrigger('document.deleteDocument', 'poll', 'controller', 'triggerDeleteDocumentPoll', 'after');
$oModuleController->insertTrigger('comment.deleteComment', 'poll', 'controller', 'triggerDeleteCommentPoll', 'after');
@ -36,6 +40,10 @@
$oModuleModel = &getModel('module');
// 2007. 10. 17 글/댓글의 삭제시 설문조사도 삭제
if(!$oModuleModel->getTrigger('document.insertDocument', 'poll', 'controller', 'triggerInsertDocumentPoll', 'after')) return true;
if(!$oModuleModel->getTrigger('comment.insertComment', 'poll', 'controller', 'triggerInsertCommentPoll', 'after')) return true;
if(!$oModuleModel->getTrigger('document.updateDocument', 'poll', 'controller', 'triggerUpdateDocumentPoll', 'after')) return true;
if(!$oModuleModel->getTrigger('comment.updateComment', 'poll', 'controller', 'triggerUpdateCommentPoll', 'after')) return true;
if(!$oModuleModel->getTrigger('document.deleteDocument', 'poll', 'controller', 'triggerDeleteDocumentPoll', 'after')) return true;
if(!$oModuleModel->getTrigger('comment.deleteComment', 'poll', 'controller', 'triggerDeleteCommentPoll', 'after')) return true;
@ -55,6 +63,16 @@
if(!$oModuleModel->getTrigger('comment.deleteComment', 'poll', 'controller', 'triggerDeleteCommentPoll', 'after'))
$oModuleController->insertTrigger('comment.deleteComment', 'poll', 'controller', 'triggerDeleteCommentPoll', 'after');
// 2008. 04. 22 글/댓글의 추가기 설문조사의 연결
if(!$oModuleModel->getTrigger('document.insertDocument', 'poll', 'controller', 'triggerInsertDocumentPoll', 'after'))
$oModuleController->insertTrigger('document.insertDocument', 'poll', 'controller', 'triggerInsertDocumentPoll', 'after');
if(!$oModuleModel->getTrigger('comment.insertComment', 'poll', 'controller', 'triggerInsertCommentPoll', 'after'))
$oModuleController->insertTrigger('comment.insertComment', 'poll', 'controller', 'triggerInsertCommentPoll', 'after');
if(!$oModuleModel->getTrigger('document.updateDocument', 'poll', 'controller', 'triggerUpdateDocumentPoll', 'after'))
$oModuleController->insertTrigger('document.updateDocument', 'poll', 'controller', 'triggerUpdateDocumentPoll', 'after');
if(!$oModuleModel->getTrigger('comment.updateComment', 'poll', 'controller', 'triggerUpdateCommentPoll', 'after'))
$oModuleController->insertTrigger('comment.updateComment', 'poll', 'controller', 'triggerUpdateCommentPoll', 'after');
return new Object(0, 'success_updated');
}

View file

@ -17,13 +17,6 @@
* @brief 팝업창에서 설문 작성 완료후 저장을 누를때 설문 등록
**/
function procInsert() {
// 기본적으로 필요한 변수 설정
$editor_sequence = Context::get('editor_sequence');
// upload_target_srl 구함
$upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl;
if(!$upload_target_srl) $upload_target_srl = getNextSequence();
$stop_date = Context::get('stop_date');
if($stop_date < date("Ymd")) $stop_date = date("YmdHis", time()+60*60*24*365);
@ -67,7 +60,6 @@
$poll_args->list_order = $poll_srl*-1;
$poll_args->stop_date = $args->stop_date;
$poll_args->poll_count = 0;
$poll_args->upload_target_srl = $upload_target_srl;
$output = executeQuery('poll.insertPoll', $poll_args);
if(!$output->toBool()) {
$oDB->rollback();
@ -197,6 +189,38 @@
$this->add('tpl',$tpl);
}
/**
* @brief 게시글 등록시 poll 연결하는 trigger
**/
function triggerInsertDocumentPoll(&$obj) {
$this->syncPoll($obj->document_srl, $obj->content);
return new Object();
}
/**
* @brief 댓글 등록시 poll 연결하는 trigger
**/
function triggerInsertCommentPoll(&$obj) {
$this->syncPoll($obj->comment_srl, $obj->content);
return new Object();
}
/**
* @brief 게시글 수정시 poll 연결하는 trigger
**/
function triggerUpdateDocumentPoll(&$obj) {
$this->syncPoll($obj->document_srl, $obj->content);
return new Object();
}
/**
* @brief 댓글 등록시 poll 연결하는 trigger
**/
function triggerUpdateCommentPoll(&$obj) {
$this->syncPoll($obj->comment_srl, $obj->content);
return new Object();
}
/**
* @brief 게시글 삭제시 poll 삭제하는 trigger
**/
@ -260,5 +284,27 @@
return new Object();
}
/**
* @brief 게시글 내용의 설문조사를 구해와서 문서 번호와 연결
**/
function syncPoll($upload_target_srl, $content) {
$match_cnt = preg_match_all('!<img([^\>]*)poll_srl=(["\']?)([0-9]*)(["\']?)([^\>]*?)\>!is',$content, $matches);
for($i=0;$i<$match_cnt;$i++) {
$poll_srl = $matches[3][$i];
$args = null;
$args->poll_srl = $poll_srl;
$output = executeQuery('poll.getPoll', $args);
$poll = $output->data;
if($poll->upload_target_srl) continue;
$args->upload_target_srl = $upload_target_srl;
$output = executeQuery('poll.updatePollTarget', $args);
$output = executeQuery('poll.updatePollTitleTarget', $args);
$output = executeQuery('poll.updatePollItemTarget', $args);
}
}
}
?>

View file

@ -8,7 +8,7 @@
<column name="member_srl" var="member_srl" />
<column name="ipaddress" var="ipaddress" default="ipaddress()" />
<column name="poll_count" var="poll_count" default="0" />
<column name="upload_target_srl" var="upload_target_srl" filter="number" notnull="notnull" />
<column name="upload_target_srl" default="0" />
<column name="regdate" var="regdate" default="curdate()" />
<column name="list_order" var="list_order" default="0" />
</columns>

View file

@ -7,7 +7,7 @@
<column name="poll_srl" var="poll_srl" filter="number" notnull="notnull" />
<column name="poll_index_srl" var="poll_index_srl" filter="number" notnull="notnull" />
<column name="poll_count" var="poll_count" default="0" />
<column name="upload_target_srl" var="upload_target_srl" filter="number" notnull="notnull" />
<column name="upload_target_srl" default="0" />
<column name="title" var="title" notnull="notnull" />
</columns>
</query>

View file

@ -9,7 +9,7 @@
<column name="poll_count" var="poll_count" default="0" />
<column name="checkcount" var="checkcount" notnull="notnull" default="1" />
<column name="member_srl" var="member_srl" />
<column name="upload_target_srl" var="upload_target_srl" filter="number" notnull="notnull" />
<column name="upload_target_srl" default="0" />
<column name="ipaddress" var="ipaddress" default="ipaddress()" />
<column name="regdate" var="regdate" default="curdate()" />
<column name="list_order" var="list_order" default="0" />

View file

@ -0,0 +1,12 @@
<query id="updatePollTarget" action="update">
<tables>
<table name="poll_item" />
</tables>
<columns>
<column name="upload_target_srl" var="upload_target_srl" />
</columns>
<conditions>
<condition operation="equal" column="poll_srl" var="poll_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,11 @@
<query id="updatePollTarget" action="update">
<tables>
<table name="poll" />
</tables>
<columns>
<column name="upload_target_srl" var="upload_target_srl" />
</columns>
<conditions>
<condition operation="equal" column="poll_srl" var="poll_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,11 @@
<query id="updatePollTitleTarget" action="update">
<tables>
<table name="poll_title" />
</tables>
<columns>
<column name="upload_target_srl" var="upload_target_srl" />
</columns>
<conditions>
<condition operation="equal" column="poll_srl" var="poll_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -36,3 +36,21 @@ function completeGetSkinColorset(ret_obj, response_tags, params, fo_obj) {
sel.selectedIndex = selected_index;
}
/* 관리자 페이지에서 선택된 설문조사 원본글로 이동하는 함수 */
function doMovePoll(poll_srl, upload_target_srl) {
var params = new Array();
params['poll_srl'] = poll_srl;
params['upload_target_srl'] = upload_target_srl;
var response_tags = new Array('error','message','document_srl','comment_srl');
exec_xml('poll','getPollAdminTarget', params, completeMovePoll, response_tags);
}
function completeMovePoll(ret_obj, response_tags) {
var document_srl = ret_obj['document_srl'];
var comment_srl = ret_obj['comment_srl'];
var url = request_uri.setQuery('document_srl', document_srl);
if(comment_srl) url = url+'#comment_'+comment_srl;
winopen(url, 'pollTarget');
}

View file

@ -1,4 +1,5 @@
<!--%import("filter/delete_checked.xml")-->
<!--%import("js/poll_admin.js")-->
<!--#include("./header.html")-->
@ -82,7 +83,7 @@
<tr>
<td class="tahoma">{$no}</td>
<td><input type="checkbox" name="cart" value="{$val->poll_index_srl}" /></td>
<td class="left blue"><a href="{getUrl('','document_srl',$val->upload_target_srl)}" onclick="winopen(this.href); return false;">{htmlspecialchars($val->title)}</a></td>
<td class="left blue"><a href="#" onclick="doMovePoll({$val->poll_srl},{$val->upload_target_srl});return false;">{htmlspecialchars($val->title)}</a></td>
<td class="tahoma">{$val->checkcount}</td>
<td class="tahoma">{$val->poll_count}</td>
<td class="tahoma">{zdate($val->regdate,"Y-m-d H:i")}</td>