issuetracker * 댓글에 에디터 붙임

* 첨부파일 목록 표시 미구현
  * 첨부파일 활성화 트리거 추가
  * 첨부파일 수 기록 필드 추가

file * 첨부파일 목록에서 업로드 타겟을 알 수 없을 경우
       무조건 '대기'로 타이틀을 표시하는 문제 수정

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6512 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
bnu 2009-06-11 01:32:17 +00:00
parent 0fbf4934eb
commit d0ed1a982d
7 changed files with 81 additions and 21 deletions

View file

@ -69,7 +69,11 @@
<tr class="row{$cycle_idx} bg1">
<th colspan="9">
<!--@if(!$val->upload_target_type)-->
{$lang->is_stand_by}
<!--@if($val->isvalid=='Y')-->
{$lang->is_valid}
<!--@else-->
{$lang->is_stand_by}
<!--@end-->
<!--@else-->
<!--@if($val->upload_target_type == 'com')-->[{$lang->comment}] <!--@end-->
<!--@if($val->upload_target_type == 'mod')-->[{$lang->module}] <!--@end-->

View file

@ -1,13 +1,13 @@
<?PHP
/**
* @class issuetracker
* @class issuetracker
* @author haneul (haneul0318@gmail.com)
* @brief base class for the issue tracker
* @brief base class for the issue tracker
**/
require_once(_XE_PATH_.'modules/issuetracker/issuetracker.item.php');
class issuetracker extends ModuleObject
class issuetracker extends ModuleObject
{
// 검색 대상 지정
var $search_option = array('title','content','title_content','user_name','nick_name','user_id','tag');
@ -16,7 +16,7 @@
var $display_option = array('no','title','milestone','priority','type','component','status','occured_version','package','regdate','assignee', 'writer');
var $default_enable = array('no','title','status','release','regdate','assignee','writer');
function moduleInstall()
function moduleInstall()
{
// 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가
$oModuleController = &getController('module');
@ -25,26 +25,53 @@
$oDB = &DB::getInstance();
$oDB->addIndex("issue_changesets","idx_unique_revision", array("module_srl","revision"), true);
// 히스토리(=댓글) 첨부파일 활성화 트리거
$oModuleController->insertTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentCheckAttached', 'before');
$oModuleController->insertTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentAttachFiles', 'after');
}
function checkUpdate()
{
$oModuleModel = &getModel('module');
$oDB = &DB::getInstance();
// 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가
if(!$oModuleModel->getTrigger('member.getMemberMenu', 'issuetracker', 'controller', 'triggerMemberMenu', 'after')) return true;
if(!$oModuleModel->getTrigger('document.deleteDocument', 'issuetracker', 'controller', 'triggerDeleteDocument', 'after')) return true;
// 히스토리(=댓글) 첨부파일 활성화 트리거
if(!$oModuleModel->getTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentCheckAttached', 'before')) return true;
if(!$oModuleModel->getTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentAttachFiles', 'after')) return true;
if(!$oDB->isColumnExists('issues_history', 'uploaded_count')) return true;
return false;
}
function moduleUpdate() {
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
$oDB = &DB::getInstance();
// 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가
if(!$oModuleModel->getTrigger('member.getMemberMenu', 'issuetracker', 'controller', 'triggerMemberMenu', 'after'))
if(!$oModuleModel->getTrigger('member.getMemberMenu', 'issuetracker', 'controller', 'triggerMemberMenu', 'after')) {
$oModuleController->insertTrigger('member.getMemberMenu', 'issuetracker', 'controller', 'triggerMemberMenu', 'after');
if(!$oModuleModel->getTrigger('document.deleteDocument', 'issuetracker', 'controller', 'triggerDeleteDocument', 'after'))
}
if(!$oModuleModel->getTrigger('document.deleteDocument', 'issuetracker', 'controller', 'triggerDeleteDocument', 'after')) {
$oModuleController->insertTrigger('document.deleteDocument', 'issuetracker', 'controller', 'triggerDeleteDocument', 'after');
}
// 히스토리(=댓글) 첨부파일 활성화 트리거
if(!$oModuleModel->getTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentCheckAttached', 'before')) {
$oModuleController->insertTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentCheckAttached', 'before');
}
if(!$oModuleModel->getTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentAttachFiles', 'after')) {
$oModuleController->insertTrigger('issuetracker.insertHistory', 'file', 'controller', 'triggerCommentAttachFiles', 'after');
}
if(!$oDB->isColumnExists('issues_history', 'uploaded_count')) {
$oDB->addColumn('issues_history', 'uploaded_count', 'number', 11, 0);
}
return new Object(0, 'success_updated');
}
}

View file

@ -64,11 +64,11 @@
// 그렇지 않으면 신규 등록
} else {
// assignee name
$oMemberModel = &getModel('member');
// assignee name
$oMemberModel = &getModel('member');
$member_info = $oMemberModel->getMemberInfoByMemberSrl($obj->assignee_srl);
$obj->assignee_name = $member_info->nick_name;
// transaction start
$oDB = &DB::getInstance();
$oDB->begin();
@ -148,7 +148,7 @@
if(!$output->toBool()) return $output;
$output = executeQuery('issuetracker.deleteHistories', $args);
return $output;
return $output;
}
function insertHistory($target_srl, $objs, $module_srl, $grant)
@ -156,12 +156,19 @@
$oIssuetrackerModel = &getModel('issuetracker');
$oIssue = $oIssuetrackerModel->getIssue($target_srl);
if(!$oIssue->isExists()) return new Object(-1,'msg_not_founded');
$objs->comment_srl = Context::get('history_srl');
// trigger 호출 (before)
$output = ModuleHandler::triggerCall('issuetracker.insertHistory', 'before', $objs);
if(!$output->toBool()) return $output;
$logged_info = Context::get('logged_info');
$args = null;
// 글작성시 필요한 변수를 세팅
$args->history_srl = $args->comment_srl = $objs->comment_srl;
$args->uploaded_count = $objs->uploaded_count;
$args->target_srl = $target_srl;
$args->content = Context::get('content');
if($logged_info->member_srl) {
@ -348,9 +355,14 @@
$args->history = serialize($history);
}
}
$args->issues_history_srl = getNextSequence();
$args->issues_history_srl = ($args->history_srl) ? $args->history_srl : getNextSequence();
$args->module_srl = $module_srl;
// trigger 호출 (before)
$output = ModuleHandler::triggerCall('issuetracker.insertHistory', 'after', $args);
if(!$output->toBool()) return $output;
$output = executeQueryArray('issuetracker.insertHistory', $args);
if(!$output->toBool()) return $output;
@ -358,6 +370,7 @@
$cnt = $oIssuetrackerModel->getHistoryCount($target_srl);
$oDocumentController = &getController('document');
$oDocumentController->updateCommentCount($target_srl, $cnt, $logged_info->member_srl);
return new Object();
}
@ -367,7 +380,7 @@
// 원 이슈를 가져옴
$target_srl = Context::get('target_srl');
$args = Context::gets('milestone_srl', 'priority_srl', 'type_srl', 'component_srl', 'package_srl', 'occured_version_srl', 'action', 'status', 'assignee_srl');
$args = Context::gets('milestone_srl', 'priority_srl', 'type_srl', 'component_srl', 'package_srl', 'occured_version_srl', 'action', 'status', 'assignee_srl');
$output = $this->insertHistory($target_srl, $args, $this->module_srl, $this->grant->commiter);
if(!$output->toBool())
{
@ -436,7 +449,7 @@
$oController = &getController('issuetracker');
while($latestRevision < $status->revision)
{
$gap = $status->revision-$latestRevision;
$gap = $status->revision-$latestRevision;
if($gap > 500) $gap = 500;
$logs = $oSvn->getLog("/", $latestRevision+1, $status->revision, false, $gap, false);
foreach($logs as $log)
@ -444,7 +457,7 @@
$obj = null;
$obj->revision = $log->revision;
$obj->author = $log->author;
$obj->date = date("YmdHis", strtotime($log->date));
$obj->date = date("YmdHis", strtotime($log->date));
$obj->message = trim($log->msg);
$obj->module_srl = $module_info->module_srl;
executeQuery("issuetracker.insertChangeset", $obj);

View file

@ -150,5 +150,17 @@
if($grant->commiter) return true;
else return parent::isAccessible() || $this->isGranted();
}
/**
* @brief 댓글 에디터 html을 구해서 return
**/
function getCommentEditor() {
if(!$this->isEnableComment()) return;
$oEditorModel = &getModel('editor');
return $oEditorModel->getModuleEditor('comment', $this->get('module_srl'), null, 'history_srl', 'content');
}
}
?>

View file

@ -12,5 +12,6 @@
<column name="nick_name" var="nick_name" notnull="notnull"/>
<column name="password" var="password" />
<column name="regdate" default="curdate()" />
<column name="uploaded_count" var="uploaded_count" default="0" />
</columns>
</query>

View file

@ -8,4 +8,5 @@
<column name="member_srl" type="number" size="11" notnull="notnull" index="idx_member_srl" />
<column name="nick_name" type="varchar" size="80" notnull="notnull" />
<column name="password" type="varchar" size="60" />
<column name="uploaded_count" type="number" size="11" default="0" notnull="notnull" index="idx_uploaded_count" />
</table>

View file

@ -9,7 +9,7 @@
<th colspan="3" class="title"><a href="{getUrl('','document_srl',$oIssue->document_srl)}">{$oIssue->getTitle()}</a><span>- {$oIssue->getStatus()}</span></th>
<td><SPAn class="member_{$oIssue->getMemberSrl()}">{$oIssue->getNickName()}</span></td>
</tr>
<!--@if(!$oIssue->isSecret() || $oIssue->isAccessible())-->
<!--@if(!$oIssue->isSecret() || $oIssue->isAccessible())-->
<tr>
<th>{$lang->milestone} :</th>
<td>{$oIssue->getMilestoneTitle()}</td>
@ -66,9 +66,9 @@
<tr>
<td colspan="4" class="description">{$oIssue->getContent(false, true)}</td>
</tr>
<!--@if($oIssue->hasUploadedFiles())-->
<tr>
<td colspan="4">
<!--@if($oIssue->hasUploadedFiles())-->
<div class="fileAttached">
{@ $uploaded_list = $oIssue->getUploadedFiles() }
<ul>
@ -78,10 +78,10 @@
</ul>
<div class="clear"></div>
</div>
<!--@end-->
</td>
</tr>
<!--@else-->
<!--@endif-->
<!--@else-->
<tr>
<td colspan="4" class="inputPassword">
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
@ -95,7 +95,7 @@
</form>
</td>
</tr>
<!--@end-->
<!--@end-->
</table>
<div class="button">
@ -162,6 +162,8 @@
<form action="./" method="post" onsubmit="return procFilter(this, insert_history)">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="target_srl" value="{$oIssue->get('target_srl')}" />
<input type="hidden" name="history_srl" value="" />
<input type="hidden" name="content" value="" />
<table cellspacing="0">
<col width="140" />
<col width="*" />
@ -266,7 +268,7 @@
<!--@end-->
<tr>
<td colspan="4">
<textarea name="content" id="inputContent" class="inputTypeTextArea wide"></textarea>
<div class="editor">{$oIssue->getCommentEditor()}</div>
</td>
</tr>
<tr>