css 및 js 호출순서 조정기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5785 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2009-03-06 05:33:56 +00:00
parent 4f380d9c48
commit 61851f1dfe
2149 changed files with 109090 additions and 18689 deletions

View file

@ -3,14 +3,14 @@
<title xml:lang="ko">이슈트래커</title>
<title xml:lang="jp">イシュートラッカー</title>
<title xml:lang="zh-CN">问题跟踪</title>
<title xml:lang="en">Issue Tracker</title>
<title xml:lang="en">Issue Tracker</title>
<title xml:lang="es">Issue Tracker</title>
<title xml:lang="zh-TW">問題追蹤</title>
<description xml:lang="ko">각종 이슈 처리를 위한 모듈입니다.</description>
<description xml:lang="jp">各種イシューを処理するモジュールです。</description>
<description xml:lang="zh-CN">一个具有项目跟踪功能的模块。</description>
<description xml:lang="en">This module handles many kinds of issues.</description>
<description xml:lang="es">Este módulo se ocupa de muchos tipos de cuestiones.</description>
<description xml:lang="en">This module handles many kinds of issues.</description>
<description xml:lang="es">Este módulo se ocupa de muchos tipos de cuestiones.</description>
<description xml:lang="zh-TW">可以處理追蹤多種問題的模組。</description>
<version>1.0</version>
<date>2008-08-04</date>
@ -19,8 +19,8 @@
<name xml:lang="ko">haneul</name>
<name xml:lang="jp">haneul</name>
<name xml:lang="zh-CN">haneul</name>
<name xml:lang="en">haneul</name>
<name xml:lang="es">haneul</name>
<name xml:lang="en">haneul</name>
<name xml:lang="es">haneul</name>
<name xml:lang="zh-TW">haneul</name>
</author>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">

View file

@ -1,12 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants>
<grant name="access" default="guest">
<title xml:lang="ko">프로젝트 접근</title>
<title xml:lang="zh-CN">访问项目</title>
<title xml:lang="zh-TW">專案</title>
<title xml:lang="jp">プロジェクトへアクセス</title>
</grant>
<grant name="ticket_view" default="guest">
<title xml:lang="ko">티켓 열람</title>
<title xml:lang="zh-CN">查看计划</title>
@ -43,13 +37,8 @@
<title xml:lang="zh-TW">下載</title>
<title xml:lang="jp">ダウンロード</title>
</grant>
<grant name="manager" default="root">
<title xml:lang="ko">프로젝트 관리</title>
<title xml:lang="zh-CN">项目管理</title>
<title xml:lang="zh-TW">專案管理</title>
<title xml:lang="jp">プロジェクト管理</title>
</grant>
</grants>
<permissions />
<actions>
<action name="dispIssuetrackerViewMilestone" type="view" standalone="true" index="true" />
<action name="dispIssuetrackerViewIssue" type="view" standalone="true" />
@ -71,6 +60,7 @@
<action name="dispIssuetrackerAdminProjectSetting" type="view" standalone="true" />
<action name="dispIssuetrackerAdminReleaseSetting" type="view" standalone="true" />
<action name="dispIssuetrackerAdminAdditionSetup" type="view" standalone="true" />
<action name="dispIssuetrackerAdminExtraVars" type="view" standalone="true" />
<action name="dispIssuetrackerAdminGrantInfo" type="view" standalone="true" />
<action name="dispIssuetrackerAdminSkinInfo" type="view" standalone="true" />
<action name="dispIssuetrackerAdminProjectInfo" type="view" standalone="true" />
@ -90,6 +80,7 @@
<action name="procIssuetrackerAdminInsertMilestone" type="controller" standalone="true" />
<action name="procIssuetrackerAdminInsertPriority" type="controller" standalone="true" />
<action name="procIssuetrackerAdminInsertComponent" type="controller" standalone="true" />
<action name="procIssuetrackerAdminModifyDisplayOption" type="controller" standalone="true" />
<action name="procIssuetrackerAdminInsertType" type="controller" standalone="true" />
<action name="procIssuetrackerAdminInsertPackage" type="controller" standalone="true" />
<action name="procIssuetrackerAdminInsertRelease" type="controller" standalone="true" />
@ -102,8 +93,6 @@
<action name="procIssuetrackerAdminDeleteRelease" type="controller" standalone="true" />
<action name="procIssuetrackerAdminDeleteFile" type="controller" standalone="true" />
<action name="procIssuetrackerAdminAttachRelease" type="controller" standalone="true" />
<action name="procIssuetrackerAdminInsertGrant" type="controller" standalone="true" />
<action name="procIssuetrackerAdminUpdateSkinInfo" type="controller" standalone="true" />
<action name="procIssuetrackerAdminManageCheckedIssue" type="controller" standalone="true" />
</actions>

View file

@ -13,103 +13,27 @@
function init() {
}
function procIssuetrackerAdminInsertProject($args = null) {
function procIssuetrackerAdminInsertProject() {
// module 모듈의 model/controller 객체 생성
$oModuleController = &getController('module');
$oModuleModel = &getModel('module');
// 만약 module_srl이 , 로 연결되어 있다면 일괄 정보 수정으로 처리
if(strpos(Context::get('module_srl'),',')!==false) {
// 대상 모듈들을 구해옴
$modules = $oModuleModel->getModulesInfo(Context::get('module_srl'));
$args = Context::getRequestVars();
for($i=0;$i<count($modules);$i++) {
$obj = $extra_vars = null;
$obj = $modules[$i];
$extra_vars = unserialize($obj->extra_vars);
$obj->module = 'issuetracker';
$obj->module_category_srl = $args->module_category_srl;
$obj->layout_srl = $args->layout_srl;
$obj->skin = $args->skin;
$obj->description = $args->description;
$obj->header_text = $args->header_text;
$obj->footer_text = $args->footer_text;
$obj->admin_id = $args->admin_id;
$extra_vars->admin_mail = $args->admin_mail;
$obj->extra_vars = serialize($extra_vars);
$output = $oModuleController->updateModule($obj);
if(!$output->toBool()) return $output;
}
return new Object(0,'success_updated');
}
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
if(!$args) {
$args = Context::gets('module_srl','module_category_srl','project_name','layout_srl','skin','browser_title','description','is_default','header_text','footer_text','admin_id');
$extra_var = delObjectVars(Context::getRequestVars(), $args);
}
$args = Context::getRequestVars();
$args->module = 'issuetracker';
$args->mid = $args->project_name;
unset($args->project_name);
if($args->is_default!='Y') $args->is_default = 'N';
// 기본 값외의 것들을 정리
unset($extra_var->act);
unset($extra_var->page);
unset($extra_var->project_name);
unset($extra_var->module_srl);
// 확장변수(20개로 제한된 고정 변수) 체크
$user_defined_extra_vars = array();
foreach($extra_var as $key => $val) {
if(substr($key,0,11)!='extra_vars_') continue;
preg_match('/^extra_vars_([0-9]+)_(.*)$/i', $key, $matches);
if(!$matches[1] || !$matches[2]) continue;
$user_defined_extra_vars[$matches[1]]->{$matches[2]} = $val;
unset($extra_var->{$key});
}
for($i=1;$i<=20;$i++) if(!$user_defined_extra_vars[$i]->name) unset($user_defined_extra_vars[$i]);
$extra_var->extra_vars = $user_defined_extra_vars;
// module_srl이 넘어오면 원 모듈이 있는지 확인
if($args->module_srl) {
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
// 만약 원래 모듈이 없으면 새로 입력하기 위한 처리
if($module_info->module_srl != $args->module_srl) unset($args->module_srl);
}
// $extra_var를 serialize
$args->extra_vars = serialize($extra_var);
// is_default=='Y' 이면
if($args->is_default=='Y') $oModuleController->clearDefaultModule();
// module_srl의 값에 따라 insert/update
if(!$args->module_srl) {
$output = $oModuleController->insertModule($args);
$msg_code = 'success_registed';
// 파일업로드, 댓글 파일업로드, 관리에 대한 권한 지정
if($output->toBool()) {
$oMemberModel = &getModel('member');
$admin_group = $oMemberModel->getAdminGroup();
$admin_group_srl = $admin_group->group_srl;
$module_srl = $output->get('module_srl');
$grants = serialize(array('manager'=>array($admin_group_srl)));
$oModuleController->updateModuleGrant($module_srl, $grants);
}
} else {
$output = $oModuleController->updateModule($args);
$msg_code = 'success_updated';
@ -148,7 +72,6 @@
function procIssuetrackerAdminInsertMilestone()
{
$args = Context::getRequestVars();
$args->module_srl = $this->module_srl;
if($args->is_default=='Y') executeQuery('issuetracker.clearMilestoneDefault', $args);
if(!$args->milestone_srl)
@ -165,7 +88,6 @@
function procIssuetrackerAdminInsertType()
{
$args = Context::getRequestVars();
$args->module_srl = $this->module_srl;
if($args->is_default=='Y') executeQuery('issuetracker.clearTypeDefault', $args);
if($args->type_srl) {
@ -180,7 +102,7 @@
function procIssuetrackerAdminInsertComponent()
{
$args = Context::getRequestVars();
$args->module_srl = $this->module_srl;
if($args->is_default=='Y') executeQuery('issuetracker.clearComponentsDefault', $args);
if($args->component_srl) {
@ -193,10 +115,18 @@
}
}
function procIssuetrackerAdminModifyDisplayOption()
{
$args = Context::getRequestVars();
$oModuleController = &getController('module');
$module_config->display_option = explode('|@|', $args->displayopts);
$oModuleController->insertModulePartConfig('issuetracker',$args->module_srl,$module_config);
}
function procIssuetrackerAdminInsertPriority()
{
$args = Context::getRequestVars();
$args->module_srl = $this->module_srl;
if($args->is_default=='Y') executeQuery('issuetracker.clearPrioritiesDefault',$args);
if($args->priority_srl) {
@ -243,7 +173,6 @@
function procIssuetrackerAdminInsertPackage()
{
$args = Context::getRequestVars();
$args->module_srl = $this->module_srl;
if(!$args->package_srl)
{
@ -259,7 +188,6 @@
function procIssuetrackerAdminInsertRelease()
{
$args = Context::getRequestVars();
$args->module_srl = $this->module_srl;
if(!$args->release_srl)
{
@ -350,108 +278,6 @@
return $oFileController->deleteFile($file_srl);
}
function procIssuetrackerAdminInsertGrant() {
$module_srl = Context::get('module_srl');
// 현 모듈의 권한 목록을 가져옴
$grant_list = $this->xml_info->grant;
if(count($grant_list)) {
foreach($grant_list as $key => $val) {
$group_srls = Context::get($key);
if($group_srls) $arr_grant[$key] = explode('|@|',$group_srls);
}
$grants = serialize($arr_grant);
}
$oModuleController = &getController('module');
$oModuleController->updateModuleGrant($module_srl, $grants);
$this->add('module_srl',Context::get('module_srl'));
$this->setMessage('success_registed');
}
function procIssuetrackerAdminUpdateSkinInfo() {
// module_srl에 해당하는 정보들을 가져오기
$module_srl = Context::get('module_srl');
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
$skin = $module_info->skin;
// 스킨의 정보를 구해옴 (extra_vars를 체크하기 위해서)
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
// 입력받은 변수들을 체크 (mo, act, module_srl, page등 기본적인 변수들 없앰)
$obj = Context::getRequestVars();
unset($obj->act);
unset($obj->module_srl);
unset($obj->page);
// 원 skin_info에서 extra_vars의 type이 image일 경우 별도 처리를 해줌
if($skin_info->extra_vars) {
foreach($skin_info->extra_vars as $vars) {
if($vars->type!='image') continue;
$image_obj = $obj->{$vars->name};
// 삭제 요청에 대한 변수를 구함
$del_var = $obj->{"del_".$vars->name};
unset($obj->{"del_".$vars->name});
if($del_var == 'Y') {
FileHandler::removeFile($module_info->{$vars->name});
continue;
}
// 업로드 되지 않았다면 이전 데이터를 그대로 사용
if(!$image_obj['tmp_name']) {
$obj->{$vars->name} = $module_info->{$vars->name};
continue;
}
// 정상적으로 업로드된 파일이 아니면 무시
if(!is_uploaded_file($image_obj['tmp_name'])) {
unset($obj->{$vars->name});
continue;
}
// 이미지 파일이 아니어도 무시
if(!preg_match("/\.(jpg|jpeg|gif|png)$/i", $image_obj['name'])) {
unset($obj->{$vars->name});
continue;
}
// 경로를 정해서 업로드
$path = sprintf("./files/attach/images/%s/", $module_srl);
// 디렉토리 생성
if(!FileHandler::makeDir($path)) return false;
$filename = $path.$image_obj['name'];
// 파일 이동
if(!move_uploaded_file($image_obj['tmp_name'], $filename)) {
unset($obj->{$vars->name});
continue;
}
// 변수를 바꿈
unset($obj->{$vars->name});
$obj->{$vars->name} = $filename;
}
}
// serialize하여 저장
$skin_vars = serialize($obj);
$oModuleController = &getController('module');
$oModuleController->updateModuleSkinVars($module_srl, $skin_vars);
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('default_layout.html');
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile("top_refresh.html");
}
function procIssuetrackerAdminManageCheckedIssue() {
$module_srl = Context::get('module_srl');
$cart = Context::get('cart');

View file

@ -172,6 +172,22 @@
// milestone
$milestone_list = $oIssuetrackerModel->getList($module_srl, "Milestones");
Context::set('milestone_list', $milestone_list);
// display option
$oModuleModel = &getModel('module');
$module_config = $oModuleModel->getModulePartConfig('issuetracker',$this->module_srl);
if($module_config) $this->default_enable = $module_config->display_option;
// 템플릿에서 사용할 노출옵션 세팅
foreach($this->display_option as $opt) {
$obj = null;
$obj->title = Context::getLang($opt);
$checked = Context::get('d_'.$opt);
if($opt == 'title' || $checked==1 || (Context::get('d')!=1&&in_array($opt,$this->default_enable))) $obj->checked = true;
$display_option[$opt] = $obj;
}
Context::set('display_option', $display_option);
// type
$type_list = $oIssuetrackerModel->getList($module_srl, "Types");
@ -200,27 +216,7 @@
}
function dispIssuetrackerAdminProjectInfo() {
// module_srl 값이 없다면 그냥 index 페이지를 보여줌
if(!Context::get('module_srl')) return $this->dispIssuetrackerAdminContent();
// 레이아웃이 정해져 있다면 레이아웃 정보를 추가해줌(layout_title, layout)
if($this->module_info->layout_srl) {
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($this->module_info->layout_srl);
$this->module_info->layout = $layout_info->layout;
$this->module_info->layout_title = $layout_info->layout_title;
}
// 정해진 스킨이 있으면 해당 스킨의 정보를 구함
if($this->module_info->skin) {
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $this->module_info->skin);
$this->module_info->skin_title = $skin_info->title;
}
// 템플릿 파일 지정
$this->setTemplateFile('project_info');
$this->dispIssuetrackerAdminInsertProject();
}
function dispIssuetrackerAdminAdditionSetup() {
@ -240,49 +236,14 @@
* @brief 권한 목록 출력
**/
function dispIssuetrackerAdminGrantInfo() {
// module_srl을 구함
$module_srl = Context::get('module_srl');
// module.xml에서 권한 관련 목록을 구해옴
$grant_list = $this->xml_info->grant;
Context::set('grant_list', $grant_list);
// 권한 그룹의 목록을 가져온다
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
// 공통 모듈 권한 설정 페이지 호출
$oModuleAdminModel = &getAdminModel('module');
$grant_content = $oModuleAdminModel->getModuleGrantHTML($this->module_info->module_srl, $this->xml_info->grant);
Context::set('grant_content', $grant_content);
$this->setTemplateFile('grant_list');
}
/**
* @brief 스킨 정보 보여줌
**/
function dispIssuetrackerAdminSkinInfo() {
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음
$module_info = Context::get('module_info');
$skin = $module_info->skin;
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
// skin_info에 extra_vars 값을 지정
if(count($skin_info->extra_vars)) {
foreach($skin_info->extra_vars as $key => $val) {
$group = $val->group;
$name = $val->name;
$type = $val->type;
$value = $module_info->{$name};
if($type=="checkbox"&&!$value) $value = array();
$skin_info->extra_vars[$key]->value= $value;
}
}
Context::set('skin_info', $skin_info);
$this->setTemplateFile('skin_info');
}
/**
* @brief 이슈트래커 삭제 화면 출력
**/
@ -336,5 +297,29 @@
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('checked_list');
}
/**
* @brief 확장 변수 설정
**/
function dispIssuetrackerAdminExtraVars() {
$oDocumentModel = &getModel('document');
$extra_vars_content = $oDocumentModel->getExtraVarsHTML($this->module_info->module_srl);
Context::set('extra_vars_content', $extra_vars_content);
$this->setTemplateFile('extra_vars');
}
/**
* @brief 스킨 정보 보여줌
**/
function dispIssuetrackerAdminSkinInfo() {
// 공통 모듈 권한 설정 페이지 호출
$oModuleAdminModel = &getAdminModel('module');
$skin_content = $oModuleAdminModel->getModuleSkinHTML($this->module_info->module_srl);
Context::set('skin_content', $skin_content);
$this->setTemplateFile('skin_info');
}
}
?>

View file

@ -18,39 +18,10 @@
function moduleInstall()
{
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerViewMilestone');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerViewSource');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerViewIssue');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerNewIssue');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerDeleteIssue');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerDeleteTrackback');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerDownload');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminContent');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminProjectSetting');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminReleaseSetting');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminAdditionSetup');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminGrantInfo');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminSkinInfo');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminInsertProject');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminDeleteIssuetracker');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminProjectInfo');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminModifyMilestone');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminModifyPriority');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminModifyType');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminModifyComponent');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminModifyPackage');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminModifyRelease');
$oModuleController->insertActionForward('issuetracker', 'view', 'dispIssuetrackerAdminAttachRelease');
$oModuleController->insertActionForward('issuetracker', 'controller', 'procIssuetrackerAdminAttachRelease');
// 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가
$oModuleController = &getController('module');
$oModuleController->insertTrigger('member.getMemberMenu', 'issuetracker', 'controller', 'triggerMemberMenu', 'after');
$oModuleController->insertTrigger('document.deleteDocument', 'issuetracker', 'controller', 'triggerDeleteDocument', 'after');
$oDB = &DB::getInstance();
$oDB->addIndex("issue_changesets","idx_unique_revision", array("module_srl","revision"), true);
@ -61,6 +32,7 @@
$oModuleModel = &getModel('module');
// 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가
if(!$oModuleModel->getTrigger('member.getMemberMenu', 'issuetracker', 'controller', 'triggerMemberMenu', 'after')) return true;
if(!$oModuleModel->getTrigger('document.deleteDocument', 'issuetracker', 'controller', 'triggerDeleteDocument', 'after')) return true;
return false;
}
@ -71,7 +43,8 @@
// 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가
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'))
$oModuleController->insertTrigger('document.deleteDocument', 'issuetracker', 'controller', 'triggerDeleteDocument', 'after');
return new Object(0, 'success_updated');
}
}

View file

@ -13,6 +13,7 @@
function init() {
}
function procIssuetrackerInsertIssue() {
// 권한 체크
if(!$this->grant->ticket_write) return new Object(-1, 'msg_not_permitted');
@ -28,6 +29,17 @@
unset($obj->title_color);
unset($obj->title_bold);
}
// 커미터가 아니라면 마일스톤(계획), 우선순위, 소유자 설정 제거
// (이슈 상태는 여기서 건드릴수없음 / 종류, 컴포넌트, 패키지 설정은 ticket_write권한이면 가능)
if(!$this->grant->commiter) {
unset($obj->assignee_srl);
unset($obj->milestone_srl);
unset($obj->priority_srl);
}
if($obj->release_srl)
{
$obj->occured_version_srl = $obj->release_srl;
}
if($obj->occured_version_srl == 0)
{
@ -52,11 +64,16 @@
// 그렇지 않으면 신규 등록
} else {
// 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();
$output = executeQuery("issuetracker.insertIssue", $obj);
$output = executeQuery("issuetracker.insertIssue", $obj);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
@ -116,8 +133,6 @@
if(!$output->toBool()) return $output;
// 이슈 삭제
$args->target_srl = $document_srl;
$output = executeQuery('issuetracker.deleteIssue', $args);
// 성공 메세지 등록
$this->add('mid', Context::get('mid'));
@ -125,6 +140,17 @@
$this->setMessage('success_deleted');
}
function triggerDeleteDocument(&$obj)
{
$args->target_srl = $obj->document_srl;
if(!$args->target_srl) return new Object();
$output = executeQuery('issuetracker.deleteIssue', $args);
if(!$output->toBool()) return $output;
$output = executeQuery('issuetracker.deleteHistories', $args);
return $output;
}
function insertHistory($target_srl, $objs, $module_srl, $grant)
{
$oIssuetrackerModel = &getModel('issuetracker');
@ -399,6 +425,7 @@
function syncChangeset($module_info)
{
if(!$module_info->svn_url || !$module_info->svn_cmd) return;
require_once($this->module_path.'classes/svn.class.php');
$oSvn = new Svn($module_info->svn_url, $module_info->svn_cmd, $module_info->diff_cmd, $module_info->svn_userid, $module_info->svn_passwd);
$oModel = &getModel('issuetracker');

View file

@ -86,7 +86,6 @@
}
function _loadFromDB() {
if(!$this->document_srl) return;
parent::_loadFromDB();
$obj->target_srl = $this->document_srl;

View file

@ -17,8 +17,7 @@
class issuetrackerModel extends issuetracker {
var $oSvn = null;
function init()
{
function init() {
}
function &getProjectInfo($module_srl) {
@ -96,7 +95,11 @@
break;
default :
preg_match('/^extra_vars([0-9]+)$/',$args->search_target,$matches);
if($matches[1]) $args->{"s_extra_vars".$matches[1]} = $args->search_keyword;
if($matches[1]) {
$query_id = 'issuetracker.getIssueListWithExtraVars';
$args->var_idx = $matches[1];
$args->var_value = str_replace(' ','%',$args->search_keyword);
}
break;
}
}
@ -353,11 +356,9 @@
return $release;
}
function getGroupMembers($group_srls) {
if(!$group_srls) return;
if(!is_array($group_srls)) $group_srls = array($group_srls);
$args->group_srls = implode(',',$group_srls);
function getGroupMembers($module_srl, $grant_name) {
$args->module_srl = $module_srl;
$args->name = $grant_name;
$output = executeQueryArray('issuetracker.getGroupMembers', $args);
return $output->data;
}
@ -383,7 +384,7 @@
}
function getChangesets($module_srl, $enddate = null, $limit = 10)
function getChangesets($module_srl, $enddate = null, $limit = 10, $targets)
{
if(!$enddate)
{
@ -392,11 +393,13 @@
$args->enddate = date("Ymd", ztime($enddate)+24*60*60);
$args->startdate = date("Ymd", ztime($enddate)-24*60*60*$limit);
$args->module_srl = $module_srl;
$output = executeQueryArray("issuetracker.getChangesets", $args);
if(!$output->toBool())
if(in_array('commit', $targets))
{
debugPrint($output);
return array();
$output = executeQueryArray("issuetracker.getChangesets", $args);
if(!$output->toBool())
{
return array();
}
}
if(!$output->data)
{
@ -407,46 +410,52 @@
$changeset->message = $this->_linkXE($changeset->message);
}
$solvedHistory = array();
$output2 = executeQueryArray("issuetracker.getHistories", $args);
if(count($output2->data)) {
foreach($output2->data as $history)
{
$hist = unserialize($history->history);
$h = array();
if(!is_array($hist)) continue;
$res = "";
$bFirst = true;
foreach($hist as $key => $val) {
if($bFirst) { $bFirst = false; }
else { $res .= "<br />"; }
if($val[0]) $str = Context::getLang('history_format');
else $str = Context::getLang('history_format_not_source');
$str = str_replace('[source]', $val[0], $str);
$str = str_replace('[target]', $val[1], $str);
$str = str_replace('[key]', Context::getLang($key), $str);
$res .= $str;
if(in_array('issue_changed', $targets))
{
$solvedHistory = array();
$output2 = executeQueryArray("issuetracker.getHistories", $args);
if(count($output2->data)) {
foreach($output2->data as $history)
{
$hist = unserialize($history->history);
$h = array();
if(!is_array($hist)) continue;
$res = "";
$bFirst = true;
foreach($hist as $key => $val) {
if($bFirst) { $bFirst = false; }
else { $res .= "<br />"; }
if($val[0]) $str = Context::getLang('history_format');
else $str = Context::getLang('history_format_not_source');
$str = str_replace('[source]', $val[0], $str);
$str = str_replace('[target]', $val[1], $str);
$str = str_replace('[key]', Context::getLang($key), $str);
$res .= $str;
}
$obj = null;
$obj->date = $history->regdate;
$obj->type = "changed";
$obj->message = $res;
$obj->target_srl = $history->target_srl;
$obj->author = $history->nick_name;
$output->data[] = $obj;
}
$obj = null;
$obj->date = $history->regdate;
$obj->type = "changed";
$obj->message = $res;
$obj->target_srl = $history->target_srl;
$obj->author = $history->nick_name;
$output->data[] = $obj;
}
}
$output2 = executeQueryArray("issuetracker.getDocumentListForChangeset", $args);
if(count($output2->data)) {
foreach($output2->data as $history)
{
$obj = null;
$obj->date = $history->regdate;
$obj->type = "created";
$obj->author = $history->nick_name;
$obj->target_srl = $history->document_srl;
$output->data[] = $obj;
if(in_array('issue_created', $targets))
{
$output2 = executeQueryArray("issuetracker.getDocumentListForChangeset", $args);
if(count($output2->data)) {
foreach($output2->data as $history)
{
$obj = null;
$obj->date = $history->regdate;
$obj->type = "created";
$obj->author = $history->nick_name;
$obj->target_srl = $history->document_srl;
$output->data[] = $obj;
}
}
}

View file

@ -36,33 +36,31 @@
$this->setTemplatePath($template_path);
// 권한에 따른 메뉴 제한
if(!$this->grant->access) {
$this->grant->ticket_view = $this->grant->ticket_write = $this->grant->timeline = $this->grant->browser_source = $this->grant->download = 0;
unset($GLOBALS['lang']->project_menus);
} else {
if(!$this->grant->ticket_view) unset($GLOBALS['lang']->project_menus['dispIssuetrackerViewIssue']);
if(!$this->grant->ticket_write) unset($GLOBALS['lang']->project_menus['dispIssuetrackerNewIssue']);
if(!$this->grant->timeline) unset($GLOBALS['lang']->project_menus['dispIssuetrackerTimeline']);
if(!$this->grant->browser_source) unset($GLOBALS['lang']->project_menus['dispIssuetrackerViewSource']);
if(!$this->grant->download) unset($GLOBALS['lang']->project_menus['dispIssuetrackerDownload']);
}
if(!$this->grant->ticket_view) unset($GLOBALS['lang']->project_menus['dispIssuetrackerViewIssue']);
if(!$this->grant->ticket_write) unset($GLOBALS['lang']->project_menus['dispIssuetrackerNewIssue']);
if(!$this->grant->timeline) unset($GLOBALS['lang']->project_menus['dispIssuetrackerTimeline']);
if(!$this->grant->browser_source) unset($GLOBALS['lang']->project_menus['dispIssuetrackerViewSource']);
if(!$this->grant->download) unset($GLOBALS['lang']->project_menus['dispIssuetrackerDownload']);
if(!$this->grant->manager) unset($GLOBALS['lang']->project_menus['dispIssuetrackerAdminProjectSetting']);
// 템플릿에서 사용할 검색옵션 세팅 (검색옵션 key값은 미리 선언되어 있는데 이에 대한 언어별 변경을 함)
$search_option = array();
foreach($this->search_option as $opt) {
$search_option[$opt] = Context::getLang($opt);
}
foreach($this->search_option as $opt) $search_option[$opt] = Context::getLang($opt);
$oDocumentModel = &getModel('document');
$extra_keys = $oDocumentModel->getExtraKeys($this->module_srl);
Context::set('extra_keys', $extra_keys);
// 모듈정보를 확인하여 확장변수에서도 검색이 설정되어 있는지 확인
for($i=1;$i<=20;$i++) {
$ex_name = trim($this->module_info->extra_vars[$i]->name);
if(!$ex_name) continue;
if($this->module_info->extra_vars[$i]->search == 'Y') $search_option['extra_vars'.$i] = $ex_name;
if(count(Context::get('extra_keys'))) {
foreach(Context::get('extra_keys') as $key => $val) {
if($val->search == 'Y') $search_option['extra_vars'.$val->idx] = $val->name;
}
}
Context::set('search_option', $search_option);
$oModuleModel = &getModel('module');
$module_config = $oModuleModel->getModulePartConfig('issuetracker',$this->module_srl);
if($module_config) $this->default_enable = $module_config->display_option;
// 템플릿에서 사용할 노출옵션 세팅
foreach($this->display_option as $opt) {
@ -83,6 +81,10 @@
Context::set('act','dispIssuetrackerViewIssue');
}
}
// javascript, JS 필터 추가
Context::addJsFilter($this->module_path.'tpl/filter', 'input_password.xml');
Context::addJsFile($this->module_path.'tpl/js/issuetracker.js');
}
function dispIssuetrackerTimeline() {
@ -90,7 +92,15 @@
$oController = &getController('issuetracker');
$oController->syncChangeset($this->module_info);
$oModel = &getModel('issuetracker');
$changesets = $oModel->getChangesets($this->module_info->module_srl);
$duration = Context::get('duration');
if(!$duration) $duration = 10;
$targets = Context::get('targets');
if(!$targets || !is_array($targets) || !count($targets))
{
$targets = array('issue_created', 'issue_changed', 'commit');
Context::set('targets', $targets);
}
$changesets = $oModel->getChangesets($this->module_info->module_srl, Context::get('enddate'), $duration, $targets);
Context::set('changesets', $changesets);
$issues = array();
foreach($changesets as $changeset)
@ -212,6 +222,27 @@
$path_tree = Svn::explodePath($path, true);
Context::set('path_tree', $path_tree);
$file_name = array_pop(array_keys($path_tree));
$file_ext = array_pop(explode(".",$file_name));
$extlist = array(
"document" => array("doc", "pdf", "hwp"),
"image" => array("jpg", "jpeg", "jpe", "gif", "png", "bmp"),
"sound" => array("mp3", "ogg", "wma", "wav"),
"movie" => array("avi", "mpg", "mpeg", "mpe", "wmv", "asf", "asx", "mov", "flv", "swf")
);
foreach($extlist as $key => $exts) {
foreach($exts as $s_key => $ext) {
if(!strcasecmp($file_ext, $ext)) {
$file_type = $key;
break 2;
}
}
}
if(!$file_type) $file_type = "code";
Context::set('file_type', $file_type);
$this->setTemplateFile('source_file_view');
break;
@ -225,6 +256,8 @@
$this->setTemplateFile('source_list');
break;
}
Context::addJsFile($this->module_path.'tpl/js/svn.js');
}
/**
@ -273,7 +306,7 @@
// 목록을 구하기 위한 대상 모듈/ 페이지 수/ 목록 수/ 페이지 목록 수에 대한 옵션 설정
$args->page = Context::get('page');
$args->list_count = 50;
$args->list_count = 20;
$args->page_count = 10;
// issue 검색을 위한 변수
@ -298,10 +331,6 @@
$args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...)
$args->search_keyword = Context::get('search_keyword'); ///< 검색어
// 커미터 목록 구함
$commiters = $oIssuetrackerModel->getGroupMembers($this->module_info->grants['commiter']);
Context::set('commiters', $commiters);
// 일반 글을 구해서 context set
$output = $oIssuetrackerModel->getIssueList($args);
Context::set('issue_list', $output->data);
@ -322,12 +351,14 @@
// 스킨에서 사용하기 위해 context set
Context::set('oIssue', $oIssue);
// 커미터 목록을 추출
$commiters = $oIssuetrackerModel->getGroupMembers($this->module_info->grants['commiter']);
Context::set('commiters', $commiters);
// javascript 필터 추가
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_history.xml');
$this->setTemplateFile('view_issue');
}
// 커미터 목록을 추출
Context::set('commiters', $oIssuetrackerModel->getGroupMembers($this->module_info->module_srl,'commiter'));
}
/**
@ -359,9 +390,16 @@
// 확장변수처리를 위해 xml_js_filter를 직접 header에 적용
$oDocumentController = &getController('document');
$oDocumentController->addXmlJsFilter($this->module_info);
$oDocumentController->addXmlJsFilter($this->module_info->module_srl);
if($oIssue->isExists()) Context::set('extra_keys', $oIssue->getExtraVars());
// javascript 필터 추가
Context::addJsFilter($this->module_path.'tpl/filter', 'insert.xml');
$this->setTemplateFile('newissue');
// 커미터 목록을 추출
Context::set('commiters', $oIssuetrackerModel->getGroupMembers($this->module_info->module_srl,'commiter'));
}
function dispIssuetrackerDeleteIssue() {
@ -384,6 +422,9 @@
Context::set('oIssue', $oIssue);
// javascript 필터 추가
Context::addJsFilter($this->module_path.'tpl/filter', 'delete_issue.xml');
$this->setTemplateFile('delete_form');
}
@ -441,6 +482,9 @@
Context::set('trackback',$trackback);
// javascript 필터 추가
Context::addJsFilter($this->module_path.'tpl/filter', 'delete_trackback.xml');
$this->setTemplateFile('delete_trackback');
}

View file

@ -41,6 +41,7 @@
$lang->assignee = 'Assignee';
$lang->status = 'Status';
$lang->action = 'Action';
$lang->display_option = 'Display Option';
$lang->history_format_not_source = '<span class="key">[key]</span> Modify to <span class="target">[target]</span>';
$lang->history_format = '<span class="key">[key]</span> Modify from <span class="source">[source]</span> to <span class="target">[target]</span>';
@ -99,4 +100,11 @@
'created' => 'created'
);
$lang->cmd_manage_issue = 'Manage issues';
$lang->msg_changes_from = 'View changes from';
$lang->duration = 'Duration';
$lang->target_list = array(
'issue_created' => 'Created issues',
'issue_changed' => 'Changed issues',
'commit' => 'Repository checkins'
);
?>

View file

@ -41,6 +41,7 @@
$lang->assignee = 'Propietario';
$lang->status = 'Estado';
$lang->action = 'Comportamiento';
$lang->display_option = 'Display Option';
$lang->history_format_not_source = '<span class="target"> [objetivo] </ span> <span a class="key"> [clave] </ span> Cambiar';
$lang->history_format = '<span class="source"> [fuente] </ span> <span class="target"> en el [objetivo] </ span> <span a class="key"> [clave] </ span> Cambiar';
@ -100,4 +101,11 @@
);
$lang->cmd_manage_issue = 'Cuestiones de gestión';
$lang->msg_changes_from = 'View changes from';
$lang->duration = 'Duration';
$lang->target_list = array(
'issue_created' => 'Created issues',
'issue_changed' => 'Changed issues',
'commit' => 'Repository checkins'
);
?>

View file

@ -41,6 +41,7 @@
$lang->assignee = '担当者';
$lang->status = 'ステータス';
$lang->action = '動作';
$lang->display_option = 'Display Option';
$lang->history_format_not_source = '<span class="target">[target]</span> へ <span class="key">[key]</span> 変更';
$lang->history_format = '<span class="source">[source]</span> から <span class="target">[target]</span> へ <span class="key">[key]</span> 変更';
@ -100,4 +101,11 @@
);
$lang->cmd_manage_issue = 'イシューの管理';
$lang->msg_changes_from = 'View changes from';
$lang->duration = 'Duration';
$lang->target_list = array(
'issue_created' => 'Created issues',
'issue_changed' => 'Changed issues',
'commit' => 'Repository checkins'
);
?>

View file

@ -41,6 +41,7 @@
$lang->assignee = '소유자';
$lang->status = '상태';
$lang->action = '동작';
$lang->display_option = '표시 옵션';
$lang->history_format_not_source = '<span class="target">[target]</span> 으로 <span class="key">[key]</span> 변경';
$lang->history_format = '<span class="source">[source]</span> 에서 <span class="target">[target]</span> 으로 <span class="key">[key]</span> 변경';
@ -100,4 +101,11 @@
);
$lang->cmd_manage_issue = '이슈 관리';
$lang->msg_changes_from = '시작 날짜';
$lang->duration = '기간';
$lang->target_list = array(
'issue_created' => '생성된 이슈',
'issue_changed' => '변경된 이슈',
'commit' => '소스변경'
);
?>

View file

@ -28,9 +28,9 @@
$lang->diff_cmd = 'DIF应用程序位置';
$lang->about_diff_cmd = '为比较SVN revision请输入diff应用程序位置。 (ex: /usr/bin/diff)';
$lang->svn_userid = 'SVN ID';
$lang->about_svn_userid = 'If authentication is necessary, input userid for accessing the SVN repository';
$lang->svn_passwd = 'SVN password';
$lang->about_svn_passwd = 'If authentication is necessary, input password for accessing the SVN repository';
$lang->about_svn_userid = '请输入SVN ID。';
$lang->svn_passwd = 'SVN密码';
$lang->about_svn_passwd = '请输入SVN密码。';
$lang->issue = '问题';
$lang->total_issue = '全部问题';
@ -41,6 +41,7 @@
$lang->assignee = '所有者';
$lang->status = '状态';
$lang->action = '动作';
$lang->display_option = '显示选项';
$lang->history_format_not_source = '<span class="key">[key]</span>修改为<span class="target">[target]</span>';
$lang->history_format = '<span class="key">[key]</span>,从<span class="source">[source]</span>修改为<span class="target">[target]</span>';
@ -81,7 +82,7 @@
'dispIssuetrackerViewIssue' => '查看问题',
'dispIssuetrackerNewIssue' => '提交问题',
'dispIssuetrackerViewMilestone' => '开发计划',
'dispIssuetrackerTimeline' => 'Timeline',
'dispIssuetrackerTimeline' => '时间轴',
'dispIssuetrackerViewSource' => '查看代码',
'dispIssuetrackerDownload' => '下载',
'dispIssuetrackerAdminProjectSetting' => '设置',
@ -95,8 +96,15 @@
$lang->not_assigned = '没有分配';
$lang->not_assigned_description = '没被分配的问题目录';
$lang->timeline_msg = array(
'changed' => 'changed',
'created' => 'created'
'changed' => '修改',
'created' => '生成'
);
$lang->cmd_manage_issue = 'Manage issues';
$lang->cmd_manage_issue = '问题管理';
$lang->msg_changes_from = '开始日期';
$lang->duration = '期间';
$lang->target_list = array(
'issue_created' => '生成的问题',
'issue_changed' => '修改过的问题',
'commit' => '代码更新'
);
?>

View file

@ -1,8 +1,8 @@
<?php
/**
* @file zh-TW.lang.php
* @file modules/issuetracker/lang/zh-TW.lang.php
* @author zero (zero@nzeo.com) 翻譯royallin
* @brief 問題追蹤模組語言
* @brief 問題追蹤(Issuetracker)模組語言
**/
$lang->issuetracker = '問題追蹤';
@ -12,7 +12,7 @@
$lang->cmd_view_info = '專案資訊';
$lang->cmd_project_setting = '專案設置';
$lang->cmd_release_setting = '發佈設置';
$lang->cmd_insert_package = '新增套裝';
$lang->cmd_insert_package = '新增套裝軟體';
$lang->cmd_insert_release = '新增發佈版';
$lang->cmd_attach_file = '新增附加檔案';
$lang->cmd_display_item = '顯示專案';
@ -24,9 +24,9 @@
$lang->svn_url = 'SVN位址';
$lang->about_svn_url = '請輸入專案的 SVN 位址。';
$lang->svn_cmd = 'SVN應用程式位置';
$lang->about_svn_cmd = '請輸入 SVN Client 應用程式位置。(ex: /usr/bin/svn)';
$lang->about_svn_cmd = '請輸入 SVN Client 應用程式位置。(: /usr/bin/svn)';
$lang->diff_cmd = 'DIFF應用程式位置';
$lang->about_diff_cmd = '為了比較 SVN 版本,請輸入 diff 應用程式位置。 (ex: /usr/bin/diff)';
$lang->about_diff_cmd = '為了比較 SVN 版本,請輸入 diff 應用程式位置。 (: /usr/bin/diff)';
$lang->svn_userid = 'SVN帳號';
$lang->about_svn_userid = '必須要驗證時,請輸入帳號來登入 SVN 檔案庫';
$lang->svn_passwd = 'SVN密碼';
@ -41,6 +41,7 @@
$lang->assignee = '所有者';
$lang->status = '狀態';
$lang->action = '動作';
$lang->display_option = '顯示選項';
$lang->history_format_not_source = '<span class="key">[key]</span>修改為<span class="target">[target]</span>';
$lang->history_format = '<span class="key">[key]</span>,從<span class="source">[source]</span>修改為<span class="target">[target]</span>';
@ -52,7 +53,7 @@
$lang->complete = '完成';
$lang->completed_date = '結束日期';
$lang->order = '順序';
$lang->package = $lang->package_srl = '套裝';
$lang->package = $lang->package_srl = '套裝軟體';
$lang->release = $lang->release_srl = '發佈版';
$lang->release_note = '發佈記錄';
$lang->release_changes = '更新日誌';
@ -91,12 +92,20 @@
$lang->msg_attached = '檔案已新增。';
$lang->msg_no_releases = '尚未被新增的發佈版本。';
$lang->cmd_document_do = '將此問題.. ';
$lang->cmd_document_do = '將此問題...';
$lang->not_assigned = '尚未分配';
$lang->not_assigned_description = '尚未被分配的問題清單';
$lang->timeline_msg = array(
'changed' => 'changed',
'created' => 'created'
'changed' => '變更',
'created' => '建立'
);
$lang->cmd_manage_issue = 'Manage issues';
$lang->cmd_manage_issue = '問題管理';
$lang->msg_changes_from = 'View changes from';
$lang->duration = 'Duration';
$lang->target_list = array(
'issue_created' => '建立問題',
'issue_changed' => '變更問題',
'commit' => 'Repository checkins'
);
?>

View file

@ -0,0 +1,8 @@
<query id="deleteHistories" action="delete">
<tables>
<table name="issues_history" />
</tables>
<conditions>
<condition operation="equal" column="target_srl" var="target_srl" notnull="notnull" />
</conditions>
</query>

View file

@ -33,26 +33,6 @@
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" />
<condition operation="like_prefix" column="last_update" var="s_last_update" pipe="or" />
<condition operation="like_prefix" column="ipaddress" var="s_ipaddress" pipe="or" />
<condition operation="like" column="extra_vars1" var="s_extra_vars1" pipe="or" />
<condition operation="like" column="extra_vars2" var="s_extra_vars2" pipe="or" />
<condition operation="like" column="extra_vars3" var="s_extra_vars3" pipe="or" />
<condition operation="like" column="extra_vars4" var="s_extra_vars4" pipe="or" />
<condition operation="like" column="extra_vars5" var="s_extra_vars5" pipe="or" />
<condition operation="like" column="extra_vars6" var="s_extra_vars6" pipe="or" />
<condition operation="like" column="extra_vars7" var="s_extra_vars7" pipe="or" />
<condition operation="like" column="extra_vars8" var="s_extra_vars8" pipe="or" />
<condition operation="like" column="extra_vars9" var="s_extra_vars9" pipe="or" />
<condition operation="like" column="extra_vars10" var="s_extra_vars10" pipe="or" />
<condition operation="like" column="extra_vars11" var="s_extra_vars11" pipe="or" />
<condition operation="like" column="extra_vars12" var="s_extra_vars12" pipe="or" />
<condition operation="like" column="extra_vars13" var="s_extra_vars13" pipe="or" />
<condition operation="like" column="extra_vars14" var="s_extra_vars14" pipe="or" />
<condition operation="like" column="extra_vars15" var="s_extra_vars15" pipe="or" />
<condition operation="like" column="extra_vars16" var="s_extra_vars16" pipe="or" />
<condition operation="like" column="extra_vars17" var="s_extra_vars17" pipe="or" />
<condition operation="like" column="extra_vars18" var="s_extra_vars18" pipe="or" />
<condition operation="like" column="extra_vars19" var="s_extra_vars19" pipe="or" />
<condition operation="like" column="extra_vars20" var="s_extra_vars20" pipe="or" />
</group>
<group pipe="and">
<condition operation="more" column="last_update" var="start_date" pipe="and" />

View file

@ -1,13 +1,16 @@
<query id="getGroupMembers" action="select">
<tables>
<table name="module_grants" alias="module_grants"/>
<table name="member_group_member" alias="member_group_member"/>
<table name="member" alias="member"/>
<table name="member_group_member" alias="group_member"/>
</tables>
<columns>
<column name="member.*" />
</columns>
<conditions>
<condition operation="in" column="group_member.group_srl" var="group_srls" />
<condition operation="equal" column="group_member.member_srl" var="member.member_srl" pipe="and" />
<condition operation="equal" column="module_grants.module_srl" var="module_srl" notnull="notnull" pipe="and" />
<condition operation="equal" column="module_grants.name" var="name" notnull="notnull" pipe="and" />
<condition operation="equal" column="member_group_member.group_srl" default="module_grants.group_srl" notnull="notnull" pipe="and"/>
<condition operation="equal" column="member.member_srl" default="member_group_member.member_srl" notnull="notnull" pipe="and" />
</conditions>
</query>

View file

@ -25,26 +25,6 @@
<condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" />
<condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" />
<condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" />
<condition operation="like" column="documents.extra_vars1" var="s_extra_vars1" pipe="or" />
<condition operation="like" column="documents.extra_vars2" var="s_extra_vars2" pipe="or" />
<condition operation="like" column="documents.extra_vars3" var="s_extra_vars3" pipe="or" />
<condition operation="like" column="documents.extra_vars4" var="s_extra_vars4" pipe="or" />
<condition operation="like" column="documents.extra_vars5" var="s_extra_vars5" pipe="or" />
<condition operation="like" column="documents.extra_vars6" var="s_extra_vars6" pipe="or" />
<condition operation="like" column="documents.extra_vars7" var="s_extra_vars7" pipe="or" />
<condition operation="like" column="documents.extra_vars8" var="s_extra_vars8" pipe="or" />
<condition operation="like" column="documents.extra_vars9" var="s_extra_vars9" pipe="or" />
<condition operation="like" column="documents.extra_vars10" var="s_extra_vars10" pipe="or" />
<condition operation="like" column="documents.extra_vars11" var="s_extra_vars11" pipe="or" />
<condition operation="like" column="documents.extra_vars12" var="s_extra_vars12" pipe="or" />
<condition operation="like" column="documents.extra_vars13" var="s_extra_vars13" pipe="or" />
<condition operation="like" column="documents.extra_vars14" var="s_extra_vars14" pipe="or" />
<condition operation="like" column="documents.extra_vars15" var="s_extra_vars15" pipe="or" />
<condition operation="like" column="documents.extra_vars16" var="s_extra_vars16" pipe="or" />
<condition operation="like" column="documents.extra_vars17" var="s_extra_vars17" pipe="or" />
<condition operation="like" column="documents.extra_vars18" var="s_extra_vars18" pipe="or" />
<condition operation="like" column="documents.extra_vars19" var="s_extra_vars19" pipe="or" />
<condition operation="like" column="documents.extra_vars20" var="s_extra_vars20" pipe="or" />
</group>
</conditions>
<navigation>

View file

@ -0,0 +1,41 @@
<query id="getIssueListWithExtraVars" action="select">
<tables>
<table name="documents" alias="documents" />
<table name="issues" alias="issues" />
<table name="document_extra_vars" alias="extra_vars" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="documents.module_srl" var="module_srl" filter="number" />
<condition operation="less" column="documents.update_order" default="2100000000" pipe="and" />
<condition operation="equal" column="issues.target_srl" default="documents.document_srl" pipe="and" />
<condition operation="equal" column="extra_vars.module_srl" default="documents.module_srl" pipe="and" />
<condition operation="equal" column="extra_vars.document_srl" default="documents.document_srl" pipe="and" />
<condition operation="equal" column="documents.member_srl" var="member_srl" filter="number" pipe="and" />
<condition operation="equal" column="issues.milestone_srl" var="milestone_srl" pipe="and" />
<condition operation="equal" column="issues.priority_srl" var="priority_srl" pipe="and" />
<condition operation="equal" column="issues.type_srl" var="type_srl" pipe="and" />
<condition operation="equal" column="issues.component_srl" var="component_srl" pipe="and" />
<condition operation="in" column="issues.status" var="status" pipe="and" />
<condition operation="equal" column="issues.occured_version_srl" var="occured_version_srl" pipe="and" />
<condition operation="equal" column="issues.resolution_srl" var="resolution_srl" pipe="and" />
<condition operation="equal" column="issues.assignee_srl" var="assignee_srl" pipe="and" />
<condition operation="equal" column="extra_vars.var_idx" var="var_idx" notnull="notnull" pipe="and" />
<condition operation="like" column="extra_vars.value" var="var_value" pipe="and" notnull="notnull" />
<group pipe="and">
<condition operation="like" column="documents.title" var="s_title" pipe="or" />
<condition operation="like" column="documents.content" var="s_content" pipe="or" />
<condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" />
<condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" />
<condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="documents.update_order" order="asc" />
<list_count var="list_count" default="50" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

View file

@ -5,6 +5,8 @@
<columns>
<column name="target_srl" var="document_srl" notnull="notnull" />
<column name="module_srl" var="module_srl" notnull="notnull" />
<column name="assignee_srl" var="assignee_srl" />
<column name="assignee_name" var="assignee_name" />
<column name="milestone_srl" var="milestone_srl" />
<column name="priority_srl" var="priority_srl" />
<column name="type_srl" var="type_srl" />

View file

@ -49,9 +49,11 @@ table.issues tbody td.nick_name { text-align:left; }
table.milestones { width:100%; clear:both; border:0; border-spacing:0; table-layout:fixed; border:1px solid #333333; border-bottom:none; }
table.milestones thead tr { background:url("../images/tableHeader.gif") repeat left top; height:20px; color:#FFFFFF; }
table.milestones thead tr th { white-space:nowrap; }
table.milestones tbody tr.title td { background-color:#EFEFEF; padding:7px; }
table.milestones tbody tr.title td { background-color:#EFEFEF; height:28px; vertical-align:baseline;}
table.milestones tbody td { padding:5px; text-align:center; border-bottom:1px solid #EEEEEE; }
table.milestones tbody td.title { font-weight:bold; text-align:left; font-size:10pt;}
table.milestones tbody td.title { padding:0; font-weight:bold; text-align:left; font-size:10pt; }
table.milestones tbody td.title div.progress { width:100px;height:28px;background-color:#DFDFDF; }
table.milestones tbody td.title div.titlewrap { position:absolute;padding:6px; }
table.milestones tbody td.title a { text-decoration:none; color:#444444; }
table.milestones tbody td.deadline { color:#0A6E03; font-family:tahoma; font-size:9pt; white-space:nowrap;}
table.milestones tbody td.status a { text-decoration:none; font-family:tahoma; font-size:8pt; font-weight:bold;}
@ -280,3 +282,17 @@ dd span.target { color:#4F86B0; font-weight:bold; }
dd span.key { color:#888888; font-weight:bold; }
dt a { color:#373737; text-decoration: none; }
dt span.closed { text-decoration: line-through; }
.search { float: right; }
.left { float: left; }
/* 확장 변수 폼 */
.extraVarForm .text { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin-right:10px; width:90%; }
.extraVarForm .email_address { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin-right:10px; width:300px; }
.extraVarForm .homepage { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin-right:10px; width:300px; }
.extraVarForm .tel { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin-right:10px; width:40px; margin-right:10px;}
.extraVarForm .textarea { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin-right:10px; width:90%; height:80px; font-size:12px;}
.extraVarForm ul { margin:0; padding:0; list-style:none; }
.extraVarForm .date { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin-right:10px; width:100px; }
.extraVarForm .address { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin-right:10px; width:300px; }

View file

@ -1,4 +1,3 @@
<!--%import("filter/delete_issue.xml")-->
<!--#include("header.html")-->
<div class="deleteIssue">
@ -11,8 +10,8 @@
<input type="hidden" name="document_srl" value="{$document_srl}" />
<ul class="button">
<li><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></li>
<li><input type="button" value="{$lang->cmd_cancel}" onclick="location.href='{getUrl('act','dispIssuetrackerViewIssue')}'; return false;" /></li>
<li><span class="button"><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></span></li>
<li><span class="button"><input type="button" value="{$lang->cmd_cancel}" onclick="location.href='{getUrl('act','dispIssuetrackerViewIssue')}'; return false;" /></span></li>
</ul>
</form>

View file

@ -1,4 +1,3 @@
<!--%import("filter/delete_trackback.xml")-->
<!--#include("header.html")-->
<div class="deleteIssue">

View file

@ -1,83 +0,0 @@
<!--// 이 파일은 extra_vars의 form을 출력하는 파일이며 다른 스킨에서 그대로 가져가서 css만 바꾸어 주면 된다 -->
<!--// type=select,checkbox이고 기본값이 , 로 연결되어 있으면 , 를 기준으로 explode하여 배열로 만든다 -->
<!--@if(in_array($val->type,array('select','checkbox'))&&strpos($val->default,",")!==false)-->
{@ $val->default = explode(',',$val->default) }
<!--@end-->
<!--// 확장변수의 이름을 지정 -->
{@ $val->column_name = "extra_vars".$key}
<!--// 확장변수의 값을 documentItem::getExtraValue로 가져옴 -->
{@ $val->value = $oIssue->getExtraValue($key)}
<!--// 일반 text -->
<!--@if($val->type == 'text')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="inputTypeText wide" />
<!--// 홈페이지 주소 -->
<!--@elseif($val->type == 'homepage')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="inputTypeText wide" />
<!-- Email 주소 -->
<!--@elseif($val->type == 'email_address')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="inputTypeText wide" />
<!--// 전화번호 -->
<!--@elseif($val->type == 'tel')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[0])}" size="4" class="inputTypeText" /> -
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" size="4" class="inputTypeText" /> -
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[2])}" size="4" class="inputTypeText" />
<!--// textarea -->
<!--@elseif($val->type == 'textarea')-->
<textarea name="{$val->column_name}" class="inputTypeTextArea wide">{htmlspecialchars($val->value)}</textarea>
<!--// 다중 선택 -->
<!--@elseif($val->type == 'checkbox')-->
<!--@if($val->default)-->
<ul>
<!--@foreach($val->default as $v)-->
<li><input type="checkbox" name="{$val->column_name}" value="{$v}" <!--@if($v==$val->value||is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/> {$v}</li>
<!--@end-->
</ul>
<!--@end-->
<!--// 단일 선택 -->
<!--@elseif($val->type == 'select')-->
<select name="{$val->column_name}">
<!--@if($val->default)-->
<!--@foreach($val->default as $v)-->
<option value="{$v}" <!--@if($v == $val->value)-->selected="selected"<!--@end-->>{$v}</option>
<!--@end-->
<!--@end-->
</select>
<!--// 날짜 입력 -->
<!--@elseif($val->type == 'date')-->
<!--// datepicker javascript plugin load -->
<!--%load_js_plugin("ui.datepicker")-->
<input type="hidden" name="{$val->column_name}" id="date_{$val->column_name}" value="{$val->value}" />
<input type="text" class="inputDate" value="{zdate($val->value,'Y-m-d')}" readonly="readonly" />
<script type="text/javascript">
(function($){
$(function(){
var option = { gotoCurrent: false,yearRange:'-100:+10', onSelect:function(){
$(this).prev('input[type="hidden"]').val(this.value.replace(/-/g,""))}
};
$.extend(option,$.datepicker.regional['{$lang_type}']);
$(".inputDate").datepicker(option);
});
})(jQuery);
</script>
<!--@end-->
<!--@if($val->desc)-->
<p>{$val->desc}</p>
<!--@end-->

View file

@ -1,64 +0,0 @@
<!--// 이 파일은 extra_vars의 결과값을 출력하는 파일이며 다른 스킨에서 그대로 가져가서 css만 바꾸어 주면 된다 -->
<!--// 확장변수의 이름을 지정 -->
{@ $val->column_name = "extra_vars".$key}
<!--// 확장변수의 값을 documentItem::getExtraValue로 가져옴 -->
{@ $val->value = $oIssue->getExtraValue($key)}
{@ $_tmp_value = array(); }
<!--// 일반 text -->
<!--@if($val->type == 'text')-->
{htmlspecialchars($val->value)}
<!--// 홈페이지 주소 -->
<!--@elseif($val->type == 'homepage')-->
<!--@if($val->value)-->
<a href="{htmlspecialchars($val->value)}" onclick="window.open(this.href);return false;">{$val->value}</a>
<!--@else-->
&nbsp;
<!--@end-->
<!--// Email 주소 -->
<!--@elseif($val->type == 'email_address')-->
<!--@if($val->value)-->
<a href="mailto:{htmlspecialchars($val->value)}">{$val->value}</a>
<!--@else-->
&nbsp;
<!--@end-->
<!--// 전화번호 -->
<!--@elseif($val->type == 'tel')-->
{htmlspecialchars($val->value[0])}
<!--@if($val->value[1])-->-<!--@end-->
{htmlspecialchars($val->value[1])}
<!--@if($val->value[2])-->-<!--@end-->
{htmlspecialchars($val->value[2])}
&nbsp;
<!--// textarea -->
<!--@elseif($val->type == 'textarea')-->
{nl2br(htmlspecialchars($val->value))}
&nbsp;
<!--// 다중 선택 -->
<!--@elseif($val->type == 'checkbox')-->
<!--@if(!is_array($val->value))-->{@ $val->value = array($val->value) }<!--@end-->
<!--@foreach($val->value as $v)-->
{@ $_tmp_value[] = htmlspecialchars($v)}
<!--@end-->
{implode(",",$_tmp_value)}
&nbsp;
<!--// 단일 선택 -->
<!--@elseif($val->type == 'select')-->
{htmlspecialchars($val->value)}
&nbsp;
<!--// 날짜 입력 -->
<!--@elseif($val->type == 'date')-->
{zdate($val->value,"Y-m-d")}
&nbsp;
<!--@end-->
<!--@if(!$val->value)-->&nbsp;<!--@end-->

View file

@ -1,6 +1,3 @@
<!--// JS 파일 로드 -->
<!--%import("js/issuetracker.js")-->
<!--// 컬러셋 체크 -->
<!--@if(!$module_info->colorset)-->
{@$module_info->colorset = "white"}

View file

@ -1,4 +1,3 @@
<!--%import("filter/input_password.xml")-->
<!--@if(!$form_include)--><!--#include("header.html")--><!--@end-->
<div class="smallBox w400">

View file

@ -177,7 +177,7 @@
<!--@if($grant->is_admin)-->
<div class="fr gap1">
<a href="{getUrl('','module','document','act','dispDocumentAdminManageDocument')}" onclick="popopen(this.href,'manageDocument'); return false;" class="button"><span>{$lang->cmd_manage_document}</span></a>
<a href="{getUrl('','module','document','act','dispDocumentManageDocument')}" onclick="popopen(this.href,'manageDocument'); return false;" class="button"><span>{$lang->cmd_manage_document}</span></a>
<a href="{getUrl('act','dispIssuetrackerAdminManageDocument')}" onclick="popopen(this.href,'manageDocument'); return false;" class="button"><span>{$lang->cmd_manage_issue}</span></a>
</div>
<!--@end-->

View file

@ -21,7 +21,9 @@
<!--@end-->
<tr class="title">
<td class="title <!--@if($val->is_completed=='Y')-->completed<!--@end-->" colspan="{$col_count}" >
<a href="{getUrl('','mid',$mid,'act','dispIssuetrackerViewIssue','milestone_srl', $val->milestone_srl)}">{$val->title}</a>
{@$resolved = $val->issues['resolve'] + $val->issues['postponed'] + $val->issues['duplicated'] + $val->issues['invalid']}
<div class="progress" style="width:{$val->issues['total'] ? $resolved/$val->issues['total']*100 : 0}%;" />
<div class="titlewrap" style=""><a href="{getUrl('','mid',$mid,'act','dispIssuetrackerViewIssue','milestone_srl', $val->milestone_srl)}">{$val->title}</a></div>
</td>
</tr>
<tr>

View file

@ -1,4 +1,3 @@
<!--%import("filter/insert.xml")-->
<!--#include("header.html")-->
<form action="./" method="post" onsubmit="return procFilter(this, window.insert)" id="fo_write">
@ -67,6 +66,27 @@
</tr>
<!--@if(!$oIssue->isExists())-->
<!--@if($grant->commiter)-->
<th><label for="inputMilestone">{$lang->milestone} :</label></th>
<td>
<select name="milestone_srl" id="inputMilestone">
<option value="0">{$lang->milestone}</option>
<!--@foreach($project->milestones as $val)-->
<option value="{$val->milestone_srl}" <!--@if($oIssue->get('milestone_srl')==$val->milestone_srl)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</td>
<th><label for="inputPriority">{$lang->priority} :</label></th>
<td>
<select name="priority_srl" id="inputPriority">
<option value="">{$lang->priority}</option>
<!--@foreach($project->priorities as $key => $val)-->
<option value="{$val->priority_srl}" <!--@if($val->priority_srl==$oIssue->get('priority_srl'))-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</td>
</tr>
<!--@end-->
<tr>
<th><label for="inputType">{$lang->type} :</label></th>
<td>
@ -87,24 +107,43 @@
</select>
</td>
</tr>
<!--@if($grant->commiter)-->
<tr>
<th><label for="inputAssignee">{$lang->assignee} :</label></th>
<td>
<select name="assignee_srl" id="inputAssignee" >
<option value="" selected="selected">{$lang->assignee}</option>
<!--@foreach($commiters as $key => $val)-->
<option value="{$val->member_srl}">{$val->nick_name} ({$val->user_id})</option>
<!--@end-->
</select>
</td>
</tr>
<!--@end-->
<!--@if(count($project->packages))-->
<tr>
<th><label for="inputPackage">{$lang->occured_version} :</label></th>
<td colspan="3">
<select name="package_srl" id="inputPackage">
<select name="package_srl" id="inputPackage" onchange="showRelease(this,this.form);">
<option value="">{$lang->package}</option>
<!--@foreach($project->packages as $key => $val)-->
<option value="{$val->package_srl}" <!--@if($val->package_srl==$oIssue->get('package_srl'))-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
<select name="occured_version_srl">
<select name="release_srl">
<option value="">{$lang->release}</option>
<!--@foreach($project->packages as $key => $val)-->
<!--@if($val->package_srl==$oIssue->get('package_srl'))-->
<!--@foreach($project->releases as $k => $v)-->
<!--@if($val->package_srl == $v->package_srl)-->
<option value="{$v->release_srl}" <!--@if($v->release_srl==$oIssue->get('occured_version_srl'))-->selected="selected"<!--@end-->>{$v->title}</option>
<!--@end-->
<!--@end-->
<!--@end-->
<!--@end-->
</select>
</td>
@ -112,14 +151,12 @@
<!--@end-->
<!--@end-->
<!--@if($module_info->extra_vars)--><!--@foreach($module_info->extra_vars as $key => $val)-->
<!--@if($val->name)-->
<!--@foreach($extra_keys as $key => $val)-->
<tr>
<th><label>{$val->name} <!--@if($val->is_required=='Y')-->*<!--@end--> :</label></th>
<td colspan="3"><!--#include("./extra_var_form.html")--></td>
<td colspan="3" class="extraVarForm">{$val->getFormHTML()}</td>
</tr>
<!--@end-->
<!--@end--><!--@end-->
<!--@end-->
<tr>
<th><label for="inputTags">{$lang->tag} :</label></th>
@ -172,3 +209,11 @@
</select>
<!--@end-->
</form>
<script type="text/javascript">
package = new Array();
<!--@foreach($project->releases as $k => $v)-->
if(!package['{$v->package_srl}']) package['{$v->package_srl}'] = new Array();
package['{$v->package_srl}'][package['{$v->package_srl}'].length] = new Array('{$v->release_srl}','{$v->title}');
<!--@end-->
</script>

View file

@ -2,12 +2,14 @@
<skin version="0.2">
<title xml:lang="ko">XE IssueTracker 기본 스킨</title>
<title xml:lang="jp">XE イシュートラッカーIssueTrackerデフォルトスキン</title>
<title xml:lang="en">Basic Skin of XE IssueTracker</title>
<title xml:lang="en">Basic Skin of XE IssueTracker</title>
<title xml:lang="es">Cuidado básico de XE IssueTracker</title>
<title xml:lang="zh-CN">XE IssueTracker默认皮肤</title>
<title xml:lang="zh-TW">XE 問題追蹤預設面板</title>
<description xml:lang="ko">XE IssueTracker의 기본 스킨입니다. </description>
<description xml:lang="jp">XE イシュートラッカーIssueTrackerデフォルトスキンです。 </description>
<description xml:lang="en">This is the basic skin of XE IssueTracker. </description>
<description xml:lang="en">This is the basic skin of XE IssueTracker. </description>
<description xml:lang="es">Esta es la base de la piel XE IssueTracker. </description>
<description xml:lang="zh-CN">XE IssueTracker默认皮肤。</description>
<description xml:lang="zh-TW">XE 問題追蹤預設面板。</description>
<version>0.1</version>
@ -16,7 +18,8 @@
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
@ -25,14 +28,16 @@
<color name="white" src="screenshot/white.gif">
<title xml:lang="ko">일반</title>
<title xml:lang="jp">普通</title>
<title xml:lang="en">General</title>
<title xml:lang="en">General</title>
<title xml:lang="es">General</title>
<title xml:lang="zh-CN">普通</title>
<title xml:lang="zh-TW">普通</title>
</color>
<color name="black" src="screenshot/black.gif">
<title xml:lang="ko">검은색 배경용</title>
<title xml:lang="jp">黒色の背景</title>
<title xml:lang="en">For Black Background</title>
<title xml:lang="en">For Black Background</title>
<title xml:lang="es">Antecedentes de Negro</title>
<title xml:lang="zh-CN">黑色背景</title>
<title xml:lang="zh-TW">黑色背景</title>
</color>
@ -42,30 +47,35 @@
<group>
<title xml:lang="ko">기본 설정</title>
<title xml:lang="jp">基本設定</title>
<title xml:lang="en">Default Settings</title>
<title xml:lang="en">Default Settings</title>
<title xml:lang="es">Configuración predeterminada</title>
<title xml:lang="zh-CN">默认设置</title>
<title xml:lang="zh-TW">預設值</title>
<var name="projectTitle" type="text">
<title xml:lang="ko">이슈트래커 제목</title>
<title xml:lang="jp">イシュートラッカーIssueTrackerタイトル</title>
<title xml:lang="en">Issue Tracker Name</title>
<title xml:lang="en">Issue Tracker Name</title>
<title xml:lang="es">Issue Tracker Nombre</title>
<title xml:lang="zh-CN">IssueTracker标题</title>
<title xml:lang="zh-TW">問題追蹤名稱</title>
<description xml:lang="ko">이슈트래커의 상단에 큰 제목으로 표시가 됩니다.</description>
<description xml:lang="jp">イシュートラッカーIssueTrackerの上段に大きくタイトルが表示されます。</description>
<description xml:lang="en">It will be displayed on top of the issue tracker.</description>
<description xml:lang="en">It will be displayed on top of the issue tracker.</description>
<description xml:lang="es">Que se visualizará en la parte superior de la cuestión tracker.</description>
<description xml:lang="zh-CN">在IssueTracker顶部大标题显示。</description>
<description xml:lang="zh-TW">將顯示在問題追蹤的最頂端。</description>
</var>
<var name="projectDescription" type="textarea">
<title xml:lang="ko">이슈트래커 설명</title>
<title xml:lang="jp">イシュートラッカーIssueTracker説明</title>
<title xml:lang="en">Description</title>
<title xml:lang="en">Description</title>
<title xml:lang="es">Descripción</title>
<title xml:lang="zh-CN">IssueTracker简要说明</title>
<title xml:lang="zh-TW">說明</title>
<description xml:lang="ko">입력하시면 이슈트래커의 메인에 설명이 노출됩니다.</description>
<description xml:lang="jp">登録するとイシュートラッカーIssueTrackerのメインに説明が表示されます。</description>
<description xml:lang="en">It will be displayed on main of the issue tracker if you input the description.</description>
<description xml:lang="en">It will be displayed on main of the issue tracker if you input the description.</description>
<description xml:lang="es">Que se mostrará en el tema principal de seguimiento de si la descripción de entrada.</description>
<description xml:lang="zh-CN">将在IssueTracker页面中显示。</description>
<description xml:lang="zh-TW">會顯示在問題追蹤頁面中。</description>
</var>

View file

@ -15,6 +15,16 @@
<!--@end-->
</ol>
<pre>{htmlspecialchars($content->content)}</pre>
<pre>
<!--@if($file_type == "code")-->
{htmlspecialchars($content->content)}
<!--@elseif($file_type == "document")-->
document file
<!--@elseif($file_type == "image")-->
image file
<!--@elseif($file_type == "movie")-->
movie file
<!--@end-->
</pre>
<!--#include("source_footer.html")-->

View file

@ -1,8 +1,6 @@
<!--#include("header.html")-->
<!--%import("css/svn.css")-->
<!--%import("js/svn.js")-->
<div class="sourceBrowser">
<!--@if($path_tree)-->

View file

@ -1,5 +1,25 @@
<!--#include('header.html')-->
<h2> Timeline </h2>
<!--%load_js_plugin("ui.datepicker")-->
<div class="left"><h2> Timeline </h2></div>
<div class="search">
<form action="{getUrl()}" id="fo_search">
<br />
<input type="hidden" name="act" value="dispIssuetrackerTimeline" />
<input type="hidden" name="mid" value="{$mid}" />
{$lang->msg_changes_from}:
<input type="hidden" name="enddate" id="enddate" class="inputTypeText" value="{$enddate}">
<input type="text" class="inputDate" value="<!--@if($enddate)-->{zdate($enddate,'Y-m-d')}<!--@end-->" readonly="readonly" />
, {$lang->duration}: <input type="text" name="duration" class="inputTypeText w40" value={$duration}>
<BR />
<!--@foreach($lang->target_list as $key => $val)-->
<input name="targets[]" type="checkbox" value="{$key}" <!--@if(in_array($key,$targets))-->checked="checked"<!--@end--> id="targets_{$key}"/><label for="targets_{$key}">{$val}</label>
<!--@end-->
<a href="#" onclick="xGetElementById('fo_search').submit();return false;" class="button {$btn_class}"><span>{$lang->cmd_update}</span></a>
</form>
</div>
<div class="clear"></div>
{@ $curDate = null }
<!--@foreach($changesets as $changeset)-->
@ -24,3 +44,15 @@
<p><!--@if($changeset->type)--><!--@if($changeset->type == "changed")--><span class="status">{$changeset->message}</span><br><!--@endif-->{$issues[$changeset->target_srl]->getContentText(80)}<!--@else-->{$changeset->message}<!--@end--></p> </dd>
<!--@end-->
</dl>
<script type="text/javascript">
(function($){
$(function(){
var option = { gotoCurrent: false,yearRange:'-100:+10', onSelect:function(){
$(this).prev('input[type="hidden"]').val(this.value.replace(/-/g,""))}
};
$.extend(option,$.datepicker.regional['{$lang_type}']);
$(".inputDate").datepicker(option);
});
})(jQuery);
</script>

View file

@ -42,15 +42,12 @@
<td>{$oIssue->getReleaseTitle()}</td>
</tr>
<!--@end-->
<!--@if($module_info->extra_vars)--><!--@foreach($module_info->extra_vars as $key => $val)-->
<!--@if($val->name)-->
<!--@foreach($oIssue->getExtraVars() as $key => $val)-->
<tr>
<th>{$val->name} :</th>
<td colspan="3"><!--#include("./extra_var_value.html")--></td>
<th>{$val->name}</th>
<td colspan="3">{$val->getValueHTML()}</td>
</tr>
<!--@end-->
<!--@end--><!--@end-->
<!--@end-->
{@ $tag_list = $oIssue->get('tag_list') }
<!--@if(count($tag_list))-->
@ -72,7 +69,6 @@
<!--@else-->
<tr>
<td colspan="4" class="inputPassword">
<!--%import("filter/input_password.xml")-->
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$oIssue->document_srl}" />
@ -147,7 +143,6 @@
<!--@end-->
<!--@if($grant->ticket_write || $grant->commiter)-->
<!--%import("./filter/insert_history.xml")-->
<div class="newIssue newHistory">
<form action="./" method="post" onsubmit="return procFilter(this, insert_history)">
<input type="hidden" name="mid" value="{$mid}" />

View file

@ -11,21 +11,21 @@
<input type="hidden" name="package_srl" value="{$release->package_srl}" />
<input type="hidden" name="act" value="procIssuetrackerAdminAttachRelease" />
<table cellspacing="0" class="adminTable">
<h4 class="xeAdmin">{$release->title}</h4>
<table cellspacing="0" class="rowTable">
<thead>
<caption>{$release->title}</caption>
<tr>
<th><div>{$lang->cmd_attach_file}</div></th>
<td class="wide"><input type="file" name="file" value="" class="inputTypeTextArea w400" /></td>
<td class="wide"><input type="file" name="file" value="" class="inputTypeText" /></td>
</tr>
<tr>
<th><div>{$lang->description}</div></th>
<td><textarea name="comment" class="inputTypeTextArea w400" />{$relese->description}</textarea></td>
<td><textarea name="comment" class="inputTypeTextArea fullWidth" />{$relese->description}</textarea></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{$lang->cmd_registration}" accesskey="s"class="btnSubmit" />
</td>
<th colspan="2" class="button">
<span class="button strong black"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</th>
</tr>
</table>

View file

@ -1,8 +1,8 @@
<!--%import("filter/manage_checked_issue.xml")-->
<!--%import("js/issue_admin.js")-->
<!--%import("css/issuetracker.css")-->
<div id="popHeadder">
<h3>{$lang->cmd_manage_document}</h3>
<div id="popHeader">
<h3 class="xeAdmin">{$lang->cmd_manage_document}</h3>
</div>
<form action="./" method="get" id="fo_management">
@ -10,7 +10,7 @@
<input type="hidden" name="module_srl" value="{$module_srl}" />
<div id="popBody">
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div><label for="textfield1">{$lang->checked_count} ({count($document_list)})</label></div></th>
<td colspan="3">
@ -71,14 +71,10 @@
</table>
</div>
<!--@if(count($document_list))-->
<div id="popFooter">
<div class="tRight gap1">
<!--@if(count($document_list))-->
<a href="#" onclick="doManageIssue();return false;" class="button blue"><span>{$lang->cmd_modify}</span></a>
<!--@end-->
<a href="#" onclick="window.close(); return false;" class="button black"><span>{$lang->cmd_close}</span></a>
</div>
<a href="#" onclick="doManageIssue();return false;" class="button black strong"><span>{$lang->cmd_modify}</span></a>
</div>
<!--@end-->
</form>

View file

@ -18,6 +18,9 @@ td.summaryText div { line-height:20px; padding-left:20px; cursor:pointer;}
td.summaryText div.open { background:url("../images/opener.gif") no-repeat left 4px; overflow:visible; }
td.summaryText div.close { background:url("../images/closer.gif") no-repeat left 4px; height:20px; overflow:hidden; }
ol.displayOpt { margin:0 2px 0 0; padding:0; border-bottom:none; }
ol.displayOpt li { padding:0 2px; list-style:none; white-space:nowrap; overflow:hidden; float:left; letter-spacing:-2px;}
img.btnDelete { vertical-align:middle; }
td.filename { background-color:#EFEFEF; }

View file

@ -0,0 +1,3 @@
<!--#include("./header.html")-->
{$extra_vars_content}

View file

@ -1,11 +0,0 @@
<filter name="insert_grant" module="issuetracker" act="procIssuetrackerAdminInsertGrant" confirm_msg_code="confirm_submit">
<form>
<node target="module_srl" required="true" />
</form>
<response callback_func="completeInsertGrant">
<tag name="error" />
<tag name="message" />
<tag name="page" />
<tag name="module_srl" />
</response>
</filter>

View file

@ -12,132 +12,11 @@
<param name="browser_title" target="browser_title" />
<param name="is_default" target="is_default" />
<param name="description" target="description" />
<param name="admin_id" target="admin_id" />
<param name="svn_url" target="svn_url" />
<param name="svn_cmd" target="svn_cmd" />
<param name="diff_cmd" target="diff_cmd" />
<param name="svn_userid" target="svn_userid" />
<param name="svn_passwd" target="svn_passwd" />
<param name="extra_vars_1_name" target="extra_vars_1_name" />
<param name="extra_vars_1_type" target="extra_vars_1_type" />
<param name="extra_vars_1_is_required" target="extra_vars_1_is_required" />
<param name="extra_vars_1_search" target="extra_vars_1_search" />
<param name="extra_vars_1_default" target="extra_vars_1_default" />
<param name="extra_vars_1_desc" target="extra_vars_1_desc" />
<param name="extra_vars_2_name" target="extra_vars_2_name" />
<param name="extra_vars_2_type" target="extra_vars_2_type" />
<param name="extra_vars_2_is_required" target="extra_vars_2_is_required" />
<param name="extra_vars_2_search" target="extra_vars_2_search" />
<param name="extra_vars_2_default" target="extra_vars_2_default" />
<param name="extra_vars_2_desc" target="extra_vars_2_desc" />
<param name="extra_vars_3_name" target="extra_vars_3_name" />
<param name="extra_vars_3_type" target="extra_vars_3_type" />
<param name="extra_vars_3_is_required" target="extra_vars_3_is_required" />
<param name="extra_vars_3_search" target="extra_vars_3_search" />
<param name="extra_vars_3_default" target="extra_vars_3_default" />
<param name="extra_vars_3_desc" target="extra_vars_3_desc" />
<param name="extra_vars_4_name" target="extra_vars_4_name" />
<param name="extra_vars_4_type" target="extra_vars_4_type" />
<param name="extra_vars_4_is_required" target="extra_vars_4_is_required" />
<param name="extra_vars_4_search" target="extra_vars_4_search" />
<param name="extra_vars_4_default" target="extra_vars_4_default" />
<param name="extra_vars_4_desc" target="extra_vars_4_desc" />
<param name="extra_vars_5_name" target="extra_vars_5_name" />
<param name="extra_vars_5_type" target="extra_vars_5_type" />
<param name="extra_vars_5_is_required" target="extra_vars_5_is_required" />
<param name="extra_vars_5_search" target="extra_vars_5_search" />
<param name="extra_vars_5_default" target="extra_vars_5_default" />
<param name="extra_vars_5_desc" target="extra_vars_5_desc" />
<param name="extra_vars_6_name" target="extra_vars_6_name" />
<param name="extra_vars_6_type" target="extra_vars_6_type" />
<param name="extra_vars_6_is_required" target="extra_vars_6_is_required" />
<param name="extra_vars_6_search" target="extra_vars_6_search" />
<param name="extra_vars_6_default" target="extra_vars_6_default" />
<param name="extra_vars_6_desc" target="extra_vars_6_desc" />
<param name="extra_vars_7_name" target="extra_vars_7_name" />
<param name="extra_vars_7_type" target="extra_vars_7_type" />
<param name="extra_vars_7_is_required" target="extra_vars_7_is_required" />
<param name="extra_vars_7_search" target="extra_vars_7_search" />
<param name="extra_vars_7_default" target="extra_vars_7_default" />
<param name="extra_vars_7_desc" target="extra_vars_7_desc" />
<param name="extra_vars_8_name" target="extra_vars_8_name" />
<param name="extra_vars_8_type" target="extra_vars_8_type" />
<param name="extra_vars_8_is_required" target="extra_vars_8_is_required" />
<param name="extra_vars_8_search" target="extra_vars_8_search" />
<param name="extra_vars_8_default" target="extra_vars_8_default" />
<param name="extra_vars_8_desc" target="extra_vars_8_desc" />
<param name="extra_vars_9_name" target="extra_vars_9_name" />
<param name="extra_vars_9_type" target="extra_vars_9_type" />
<param name="extra_vars_9_is_required" target="extra_vars_9_is_required" />
<param name="extra_vars_9_search" target="extra_vars_9_search" />
<param name="extra_vars_9_default" target="extra_vars_9_default" />
<param name="extra_vars_9_desc" target="extra_vars_9_desc" />
<param name="extra_vars_10_name" target="extra_vars_10_name" />
<param name="extra_vars_10_type" target="extra_vars_10_type" />
<param name="extra_vars_10_is_required" target="extra_vars_10_is_required" />
<param name="extra_vars_10_search" target="extra_vars_10_search" />
<param name="extra_vars_10_default" target="extra_vars_10_default" />
<param name="extra_vars_10_desc" target="extra_vars_10_desc" />
<param name="extra_vars_11_name" target="extra_vars_11_name" />
<param name="extra_vars_11_type" target="extra_vars_11_type" />
<param name="extra_vars_11_is_required" target="extra_vars_11_is_required" />
<param name="extra_vars_11_search" target="extra_vars_11_search" />
<param name="extra_vars_11_default" target="extra_vars_11_default" />
<param name="extra_vars_11_desc" target="extra_vars_11_desc" />
<param name="extra_vars_12_name" target="extra_vars_12_name" />
<param name="extra_vars_12_type" target="extra_vars_12_type" />
<param name="extra_vars_12_is_required" target="extra_vars_12_is_required" />
<param name="extra_vars_12_search" target="extra_vars_12_search" />
<param name="extra_vars_12_default" target="extra_vars_12_default" />
<param name="extra_vars_12_desc" target="extra_vars_12_desc" />
<param name="extra_vars_13_name" target="extra_vars_13_name" />
<param name="extra_vars_13_type" target="extra_vars_13_type" />
<param name="extra_vars_13_is_required" target="extra_vars_13_is_required" />
<param name="extra_vars_13_search" target="extra_vars_13_search" />
<param name="extra_vars_13_default" target="extra_vars_13_default" />
<param name="extra_vars_13_desc" target="extra_vars_13_desc" />
<param name="extra_vars_14_name" target="extra_vars_14_name" />
<param name="extra_vars_14_type" target="extra_vars_14_type" />
<param name="extra_vars_14_is_required" target="extra_vars_14_is_required" />
<param name="extra_vars_14_search" target="extra_vars_14_search" />
<param name="extra_vars_14_default" target="extra_vars_14_default" />
<param name="extra_vars_14_desc" target="extra_vars_14_desc" />
<param name="extra_vars_15_name" target="extra_vars_15_name" />
<param name="extra_vars_15_type" target="extra_vars_15_type" />
<param name="extra_vars_15_is_required" target="extra_vars_15_is_required" />
<param name="extra_vars_15_search" target="extra_vars_15_search" />
<param name="extra_vars_15_default" target="extra_vars_15_default" />
<param name="extra_vars_15_desc" target="extra_vars_15_desc" />
<param name="extra_vars_16_name" target="extra_vars_16_name" />
<param name="extra_vars_16_type" target="extra_vars_16_type" />
<param name="extra_vars_16_is_required" target="extra_vars_16_is_required" />
<param name="extra_vars_16_search" target="extra_vars_16_search" />
<param name="extra_vars_16_default" target="extra_vars_16_default" />
<param name="extra_vars_16_desc" target="extra_vars_16_desc" />
<param name="extra_vars_17_name" target="extra_vars_17_name" />
<param name="extra_vars_17_type" target="extra_vars_17_type" />
<param name="extra_vars_17_is_required" target="extra_vars_17_is_required" />
<param name="extra_vars_17_search" target="extra_vars_17_search" />
<param name="extra_vars_17_default" target="extra_vars_17_default" />
<param name="extra_vars_17_desc" target="extra_vars_17_desc" />
<param name="extra_vars_18_name" target="extra_vars_18_name" />
<param name="extra_vars_18_type" target="extra_vars_18_type" />
<param name="extra_vars_18_is_required" target="extra_vars_18_is_required" />
<param name="extra_vars_18_search" target="extra_vars_18_search" />
<param name="extra_vars_18_default" target="extra_vars_18_default" />
<param name="extra_vars_18_desc" target="extra_vars_18_desc" />
<param name="extra_vars_19_name" target="extra_vars_19_name" />
<param name="extra_vars_19_type" target="extra_vars_19_type" />
<param name="extra_vars_19_is_required" target="extra_vars_19_is_required" />
<param name="extra_vars_19_search" target="extra_vars_19_search" />
<param name="extra_vars_19_default" target="extra_vars_19_default" />
<param name="extra_vars_19_desc" target="extra_vars_19_desc" />
<param name="extra_vars_20_name" target="extra_vars_20_name" />
<param name="extra_vars_20_type" target="extra_vars_20_type" />
<param name="extra_vars_20_is_required" target="extra_vars_20_is_required" />
<param name="extra_vars_20_search" target="extra_vars_20_search" />
<param name="extra_vars_20_default" target="extra_vars_20_default" />
<param name="extra_vars_20_desc" target="extra_vars_20_desc" />
</parameter>
<response callback_func="completeInsertProject">
<tag name="error" />

View file

@ -0,0 +1,25 @@
<filter name="modify_display_option" module="issuetracker" act="procIssuetrackerAdminModifyDisplayOption" confirm_msg_code="confirm_submit">
<form />
<parameter>
<param name="module_srl" target="module_srl" />
<param name="displayopts" target="displayopts" />
<!-- <param name="d_no" target="d_no" />
<param name="d_title" target="d_title" />
<param name="d_milestone" target="d_milestone" />
<param name="d_priority" target="d_priority" />
<param name="d_type" target="d_type" />
<param name="d_component" target="d_component" />
<param name="d_status" target="d_status" />
<param name="d_occured_version" target="d_occured_version" />
<param name="d_package" target="d_package" />
<param name="d_regdate" target="d_regdate" />
<param name="d_assignee" target="d_assignee" />
<param name="d_writer" target="d_writer" /> -->
</parameter>
<response callback_func="completeInsertSetting">
<tag name="error" />
<tag name="message" />
<tag name="module_srl" />
</response>
</filter>

View file

@ -1,39 +1,3 @@
<!--#include("./header.html")-->
<!--%import("filter/insert_grant.xml")-->
<form action="{Context::getRequestUri()}" method="post" onsubmit="return procFilter(this, insert_grant)">
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl?$module_srl:$module_srls}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->about_grant}</caption>
<thead>
<tr>
<th scope="col"><div>{$lang->grant}</div></th>
<th scope="col" colspan="3"><div>{$lang->target}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$val->title}</div></th>
<td class="wide">
<!--@foreach($group_list as $k => $v)-->
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
<!--@end-->
</td>
<td class="selectAll center"><a href="#" onclick="XE.checkboxToggleAll('{$key}', { checked:true });return false;">{$lang->cmd_select_all}</a></td>
<td class="deSelectAll center"><a href="#" onclick="XE.checkboxToggleAll('{$key}', { checked:false });return false;">{$lang->cmd_unselect_all}</a></td>
</tr>
<!--@end-->
<tr class="row2">
<td colspan="4" class="right">
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
<span class="button"><input type="button" value="{$lang->cmd_back}" onclick="history.back(); return false;" /></span>
</td>
</tr>
</tbody>
</table>
</form>
<!--#include("./header.html")-->
{$grant_content}

View file

@ -1,13 +1,13 @@
<!--%import("js/issue_admin.js")-->
<h3>{$lang->issuetracker} {$lang->project}<span class="gray">{$lang->cmd_management}</span></h3>
<h3 class="xeAdmin">{$lang->issuetracker} {$lang->project}<span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_issuetracker)}</div>
<!--@if($module_info)-->
<div class="header4">
<!--@if($module_info->mid)-->
<h4>{$module_info->mid} <!--@if($module_info->is_default=='Y')--><span class="bracket">({$lang->is_default})</span><!--@end--> <span class="vr">|</span> <a href="{getUrl('','mid',$module_info->mid)}" onclick="window.open(this.href); return false;" class="view">View</a></h4>
<h4 class="xeAdmin">{$module_info->mid} <!--@if($module_info->is_default=='Y')--><span class="bracket">({$lang->is_default})</span><!--@end--> <span class="vr">|</span> <a href="{getUrl('','mid',$module_info->mid)}" onclick="window.open(this.href); return false;" class="view">View</a></h4>
<!--@end-->
<ul class="localNavigation">
@ -25,6 +25,7 @@
<li <!--@if($act=='dispIssuetrackerAdminProjectSetting')-->class="on"<!--@end-->><a href="{getUrl('','module_srl',$module_srl,'mid',$mid,'module',$module,'act','dispIssuetrackerAdminProjectSetting')}">{$lang->cmd_project_setting}</a></li>
<li <!--@if($act=='dispIssuetrackerAdminReleaseSetting')-->class="on"<!--@end-->><a href="{getUrl('','module_srl',$module_srl,'mid',$mid,'module',$module,'act','dispIssuetrackerAdminReleaseSetting')}">{$lang->cmd_release_setting}</a></li>
<li <!--@if($act=='dispIssuetrackerAdminAdditionSetup')-->class="on"<!--@end-->><a href="{getUrl('','module_srl',$module_srl,'mid',$mid,'module',$module,'act','dispIssuetrackerAdminAdditionSetup')}">{$lang->cmd_addition_setup}</a></li>
<li <!--@if($act=='dispIssuetrackerAdminExtraVars')-->class="on"<!--@end-->><a href="{getUrl('act','dispIssuetrackerAdminExtraVars')}">{$lang->extra_vars}</a></li>
<li <!--@if($act=='dispIssuetrackerAdminGrantInfo')-->class="on"<!--@end-->><a href="{getUrl('','module_srl',$module_srl,'mid',$mid,'module',$module,'act','dispIssuetrackerAdminGrantInfo')}">{$lang->cmd_manage_grant}</a></li>
<li <!--@if($act=='dispIssuetrackerAdminSkinInfo')-->class="on"<!--@end-->><a href="{getUrl('','module_srl',$module_srl,'mid',$mid,'module',$module,'act','dispIssuetrackerAdminSkinInfo')}">{$lang->cmd_manage_skin}</a></li>
</ul>

View file

@ -1,21 +1,20 @@
<!--#include("./header.html")-->
<!-- 정보 -->
<div class="summary">
<strong>Total</strong> <em>{number_format($total_count)}</em>, Page <strong>{number_format($page)}</strong>/{number_format($total_page)}
</div>
<!-- 목록 -->
<form action="{Context::getRequestUri()}" method="get" onsubmit="return doChangeCategory(this);" id="fo_list">
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col"><div><input type="checkbox" onclick="XE.checkboxToggleAll(); return false;" /></div></th>
<th scope="col">
<div>
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<select name="module_category_srl" class="w120">
<select name="module_category_srl" class="fullWidth">
<option value="">{$lang->module_category}</option>
<!--@foreach($module_category as $key => $val)-->
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
@ -29,13 +28,14 @@
<th scope="col" class="half_wide"><div>{$lang->mid}</div></th>
<th scope="col" class="half_wide"><div>{$lang->browser_title}</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col" colspan="2"><div>&nbsp;</div></th>
<th scope="col" colspan="3"><div>&nbsp;</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($project_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td class="center number">{$no}</td>
<td>{$no}</td>
<td><input type="checkbox" name="cart" value="{$val->module_srl}" /></td>
<td>
<!--@if(!$val->module_category_srl)-->
{$lang->not_exists}
@ -43,20 +43,28 @@
{$module_category[$val->module_category_srl]->title}
<!--@end-->
</td>
<td><a href="{getUrl('act','dispIssuetrackerAdminProjectInfo','module_srl',$val->module_srl)}">{htmlspecialchars($val->mid)}</a></td>
<td><a href="{getUrl('act','dispIssuetrackerAdminProjectInfo','module_srl',$val->module_srl)}">{htmlspecialchars($val->browser_title)}</a></td>
<td class="date center nowrap">{zdate($val->regdate,"Y-m-d")}</td>
<td class="view"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
<td class="delete"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispIssuetrackerAdminDeleteIssuetracker','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@else-->&nbsp;<!--@end--></td>
<td>{htmlspecialchars($val->mid)}</td>
<td><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{htmlspecialchars($val->browser_title)}</a></td>
<td>{zdate($val->regdate,"Y-m-d")}</td>
<td><a href="{getUrl('act','dispIssuetrackerAdminProjectInfo','module_srl',$val->module_srl)}" class="buttonSet buttonSetting"><span>{$lang->cmd_setup}</span></a></td>
<td><a href="./?module=module&amp;act=dispModuleAdminCopyModule&amp;module_srl={$val->module_srl}" onclick="popopen(this.href);return false;" class="buttonSet buttonCopy"><span>{$lang->cmd_copy}</span></a></td>
<td><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispIssuetrackerAdminDeleteIssuetracker','module_srl', $val->module_srl)}" class="buttonSet buttonDelete"><span>{$lang->cmd_delete}</span></a><!--@else-->-<!--@end--></td>
</tr>
<!--@end-->
<tr class="row2">
<td colspan="7" class="right">
<a href="{getUrl('act','dispIssuetrackerAdminInsertProject','module_srl','')}" class="button"><span>{$lang->cmd_make}</span></a>
</td>
</tr>
</tbody>
</table>
<!-- 버튼 -->
<div class="clear">
<div class="fl">
<a href="{getUrl('','module','module','act','dispModuleAdminModuleSetup')}" onclick="doCartSetup(this.href); return false;" class="button green"><span>{$lang->cmd_setup}</span></a>
<a href="{getUrl('','module','module','act','dispModuleAdminModuleAdditionSetup')}" onclick="doCartSetup(this.href); return false;" class="button red"><span>{$lang->cmd_addition_setup}</span></a>
<a href="{getUrl('','module','module','act','dispModuleAdminModuleGrantSetup')}" onclick="doCartSetup(this.href); return false;" class="button blue"><span>{$lang->cmd_manage_grant}</span></a>
</div>
<div class="fr gap1">
<a href="{getUrl('act','dispIssuetrackerAdminInsertProject','module_srl','')}" class="button black strong"><span>{$lang->cmd_make}</span></a>
</div>
</div>
</form>
<!-- 페이지 네비게이션 -->

View file

@ -6,8 +6,8 @@
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->confirm_delete}</caption>
<h4 class="xeAdmin">{$lang->confirm_delete}</h4>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->module_name}</div></th>
<td class="wide">{$module_info->mid}</td>
@ -21,10 +21,10 @@
<td>{$module_info->document_count}</td>
</tr>
<tr>
<td class="right" colspan="2">
<th class="button" colspan="2">
<span class="button strong black"><input type="submit" value="{$lang->cmd_delete}" /></span>
<a href="{getUrl('act','dispIssuetrackerAdminContent')}" class="button"><span>{$lang->cmd_back}</span></a>
<span class="button"><input type="submit" value="{$lang->cmd_delete}" /></span>
</td>
</th>
</tr>
</table>

View file

@ -34,9 +34,8 @@ function completeInsertProject(ret_obj) {
function deleteByFilter(target_srl, filter)
{
var e = xGetElementById('target_srl');
e.value= target_srl;
var hF = xGetElementById("deleteForm");
var e = jQuery('#target_srl').val(target_srl);
var hF = jQuery("#deleteForm").get(0);
procFilter(hF, filter);
}
@ -313,3 +312,16 @@ function openSummaryText(evt) {
pObj = pObj.parentNode;
}
}
/* 일괄 설정 */
function doCartSetup(url) {
var module_srl = new Array();
jQuery('#fo_list input[name=cart]:checked').each(function() {
module_srl[module_srl.length] = jQuery(this).val();
});
if(module_srl.length<1) return;
url += "&module_srls="+module_srl.join(',');
popopen(url,'modulesSetup');
}

View file

@ -58,11 +58,10 @@ function completeDeleteTrackback(ret_obj) {
}
/* 내용 숨김/열기 */
xAddEventListener(document,'click',openSummaryText);
function openSummaryText(evt) {
var e = new xEvent(evt);
if(!e.target) return;
var pObj = e.target;
var pObj = evt.target;
if(!pObj) return;
while(pObj) {
if(pObj.nodeName == "DIV" && (pObj.className == "open" || pObj.className == "close")) {
if(pObj.className == 'open') {
@ -76,34 +75,26 @@ function openSummaryText(evt) {
}
/* title 레이어 */
xAddEventListener(document,'mouseover',showTitleLayer);
function showTitleLayer(evt) {
var e = new xEvent(evt);
var obj = e.target;
var layer = xGetElementById("titleLayer");
var obj = jQuery(evt.target);
var layer = jQuery("#titleLayer");
if(!obj || obj.nodeName != 'A' || !obj.getAttribute('rel')) {
if(layer) layer.style.visibility = "hidden";
return;
if(!layer.size()) {
layer = jQuery("<div>")
.attr('id', "titleLayer")
.css({
border : "1px solid #F3B95E",
backgroundColor : "#FBF2E4",
padding : "5px",
color : "#000000",
display : "none",
position : "absolute"
})
.appendTo(document.body);
}
if(!layer) {
layer = xCreateElement("DIV");
layer.id = "titleLayer";
layer.style.border = "1px solid #F3B95E";
layer.style.backgroundColor = "#FBF2E4";
layer.style.padding = "5px";
layer.style.color = "#000000";
layer.style.visibility = "hidden";
layer.style.position = "absolute";
window.document.body.appendChild(layer);
}
var text = obj.getAttribute('rel');
xInnerHtml(layer, text);
xLeft(layer, e.pageX+5);
xTop(layer, e.pageY+5);
layer.style.visibility = "visible";
layer.text(obj.attr('rel'));
layer.css({left:evt.pageX+5, top:evt.pageY+5}).show();
evt.cancel = true;
//evt.returnValue = false;
@ -111,23 +102,22 @@ function showTitleLayer(evt) {
/* issue list에서 배포판 선택 */
function showRelease(obj, fo_obj) {
var packge_srl = obj.options[obj.selectedIndex].value;
var target = xGetElementById('release_'+packge_srl);
if(!packge_srl || !target) return;
var packge_srl = jQuery('option:selected', obj).val();
if(!packge_srl) return;
var sel = fo_obj.release_srl;
while(sel.options.length) {
sel.remove(0);
}
var target = jQuery('#release_'+packge_srl);
if(!target.size()) return;
for(var i=0;i<target.options.length;i++) {
var opt = xCreateElement('option');
opt.text = target.options[i].text;
opt.value = target.options[i].value;
try {
sel.add(opt, null);
} catch(e) {
sel.add(opt);
}
}
var releaseEl = fo_obj.release_srl;
jQuery('option', releaseEl).remove();
jQuery('option', target).clone().appendTo(releaseEl);
}
jQuery(function ($) {
$('.summaryText').click(openSummaryText);
$('td.filename a[rel]')
.mouseover(showTitleLayer)
.mouseout(function() { $("#titleLayer").hide() });
});

View file

@ -8,7 +8,7 @@
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="component_srl" value="{$component->component_srl}" />
<!--@if($component->is_default=="Y")--><input type="hidden" name="is_default" value="Y" /><!--@end-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->name}</div></th>
@ -27,7 +27,7 @@
<!--@end-->
</td>
<td>
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<span class="button strong black"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</tr>
<tr>

View file

@ -10,7 +10,7 @@
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="milestone_srl" value="{$milestone->milestone_srl}" />
<!--@if($milestone->is_default=="Y")--><input type="hidden" name="is_default" value="Y" /><!--@end-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->name} </div></th>
@ -41,9 +41,9 @@
</td>
</tr>
<tr>
<td colspan="4"><textarea name="description" class="inputTypeTextArea w400" />{$milestone->description}</textarea></td>
<td colspan="4"><textarea name="description" class="inputTypeTextArea fullWidth" />{$milestone->description}</textarea></td>
<td>
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<span class="button strong black"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</tr>
<tr>

View file

@ -7,20 +7,20 @@
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="package_srl" value="{$package->package_srl}" />
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<thead>
<tr>
<th><div>{$lang->name}</div></th>
<td class="wide"><input name="title" type="text" value="{htmlspecialchars($package->title)}" class="inputTypeText w400" /></td>
<td class="wide"><input name="title" type="text" value="{htmlspecialchars($package->title)}" class="inputTypeText fullWidth" /></td>
</tr>
<tr>
<th><div>{$lang->description}</div></th>
<td><textarea name="description" class="inputTypeTextArea w400" />{htmlspecialchars($package->description)}</textarea></td>
<td><textarea name="description" class="inputTypeTextArea fullWidth" />{htmlspecialchars($package->description)}</textarea></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{$lang->cmd_registration}" accesskey="s"class="btnSubmit" />
</td>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</th>
</tr>
</table>

View file

@ -8,7 +8,7 @@
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="priority_srl" value="{$priority->priority_srl}" />
<!--@if($priority->is_default=="Y")--><input type="hidden" name="is_default" value="Y" /><!--@end-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->name}<div></th>
@ -29,7 +29,7 @@
<!--@end-->
</td>
<td>
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<span class="button black strong"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</tr>
<tr>

View file

@ -8,24 +8,24 @@
<input type="hidden" name="release_srl" value="{$release->release_srl}" />
<input type="hidden" name="package_srl" value="{$release->package_srl?$release->package_srl:$package_srl}" />
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<thead>
<tr>
<th><div>{$lang->name}</div></th>
<td><input name="title" type="text" value="{htmlspecialchars($release->title)}" class="inputTypeText w400" /></td>
<td class="wide"><input name="title" type="text" value="{htmlspecialchars($release->title)}" class="inputTypeText fullWidth" /></td>
</tr>
<tr>
<th><div>{$lang->release_note}</div></th>
<td><textarea name="release_note" class="inputTypeTextArea w400" />{htmlspecialchars($release->release_note)}</textarea></td>
<td><textarea name="release_note" class="inputTypeTextArea fullWidth" />{htmlspecialchars($release->release_note)}</textarea></td>
</tr>
<tr>
<th><div>{$lang->release_changes}</div></th>
<td><textarea name="release_changes" class="inputTypeTextArea w400" />{htmlspecialchars($release->release_changes)}</textarea></td>
<td><textarea name="release_changes" class="inputTypeTextArea fullWidth" />{htmlspecialchars($release->release_changes)}</textarea></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{$lang->cmd_registration}" accesskey="s"class="btnSubmit" />
</td>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</th>
</tr>
</table>

View file

@ -8,7 +8,7 @@
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="type_srl" value="{$type->type_srl}" />
<!--@if($type->is_default=="Y")--><input type="hidden" name="is_default" value="Y" /><!--@end-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->name}</div></th>
@ -27,7 +27,7 @@
<!--@end-->
</td>
<td>
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<span class="button strong black"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</tr>
<tr>

View file

@ -1,6 +1,6 @@
<!--#include("header.html")-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<tr class="row2">
<th scope="row"><div>{$lang->module_category}</div></th>
<td>
@ -49,10 +49,6 @@
<th scope="row2"><div>{$lang->description}</div></th>
<td>{nl2br(htmlspecialchars($module_info->description))}&nbsp;</td>
</tr>
<tr class="row">
<th scope="row2"><div>{$lang->admin_id}</div></th>
<td>{implode(",",$module_info->admin_id)}&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="right">
<a href="{getUrl('act','dispIssuetrackerAdminInsertProject')}" class="button"><span>{$lang->cmd_modify}</span></a>
@ -72,8 +68,8 @@
{@ $extra_vars_desc = $module_info->extra_vars[$i]->desc?$module_info->extra_vars[$i]->desc:'&nbsp;'}
{@ $extra_vars_search = $module_info->extra_vars[$i]->search=='Y'?'Y':'N'}
<table cellspacing="0" class="adminTable topGap">
<caption>{$lang->extra_vars} {$i}</caption>
<h4 class="xeAdmin">{$lang->extra_vars} {$i}</h4>
<table cellspacing="0" class="rowTable">
<tr class="row2">
<th><div>{$lang->column_name}</div></th>
<td class="wide">{$extra_vars_name}</td>

View file

@ -9,7 +9,7 @@
<input type="hidden" name="is_default" value="Y" />
<!--@end-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<!--@if(!$module_srls)-->
<tr class="row2">
@ -46,7 +46,8 @@
<tr>
<th scope="row"><div>{$lang->browser_title}</div></th>
<td>
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText w400" />
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText w400" id="browser_title"/>
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','browser_title')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a>
<p>{$lang->about_browser_title}</p>
</td>
</tr>
@ -113,81 +114,31 @@
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td>
<textarea name="description" class="inputTypeTextArea fixWidth">{htmlspecialchars($module_info->description)}</textarea>
<textarea name="description" class="inputTypeTextArea fullWidth">{htmlspecialchars($module_info->description)}</textarea>
<p>{$lang->about_description}</p>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->admin_id}</div></th>
<tr>
<th scope="row"><div>{$lang->header_text}</div></th>
<td>
<textarea name="admin_id" class="inputTypeTextArea fixWidth"><!--@if($module_info->admin_id)-->{implode(",",$module_info->admin_id)}<!--@end--></textarea>
<p>{$lang->about_admin_id}</p>
<textarea name="header_text" class="inputTypeTextArea fullWidth" id="header_text">{htmlspecialchars($module_info->header_text)}</textarea>
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','header_text')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a>
<p>{$lang->about_header_text}</p>
</td>
</tr>
<tr>
<td colspan="2" class="right">
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<span class="button"><input type="button" value="{$lang->cmd_back}" onclick="history.back(); return false;" /></span>
<th scope="row"><div>{$lang->footer_text}</div></th>
<td>
<textarea name="footer_text" class="inputTypeTextArea fullWidth" id="footer_text">{htmlspecialchars($module_info->footer_text)}</textarea>
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','footer_text')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a>
<p>{$lang->about_footer_text}</p>
</td>
</tr>
<tr>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<span class="button"><input type="button" value="{$lang->cmd_back}" onclick="history.back(); return false;" /></span>
</th>
</table>
<!--@if(!$module_srls)-->
<!--@for($i=1;$i<=20;$i++)-->
<div class="gap1"></div>
{@ $extra_vars_name = ''}
{@ $extra_vars_type = ''}
{@ $extra_vars_is_required = ''}
{@ $extra_vars_default_value = ''}
{@ $extra_vars_desc = ''}
{@ $extra_vars_search = ''}
<!--@if($module_info->extra_vars[$i])-->
{@ $extra_vars_name = $module_info->extra_vars[$i]->name}
{@ $extra_vars_type = $module_info->extra_vars[$i]->type}
{@ $extra_vars_is_required = $module_info->extra_vars[$i]->is_required}
{@ $extra_vars_default_value = $module_info->extra_vars[$i]->default}
{@ $extra_vars_desc = $module_info->extra_vars[$i]->desc}
{@ $extra_vars_search = $module_info->extra_vars[$i]->search}
<!--@end-->
<table cellspacing="0" class="adminTable ">
<caption>{$lang->extra_vars} {$i}</caption>
<tr class="row2">
<th><div>{$lang->column_name}</div></th>
<td class="wide"><input type="text" name="extra_vars_{$i}_name" value="{$extra_vars_name}" class="inputTypeText w200" /> </td>
</tr>
<tr>
<th><div>{$lang->column_type}</div></th>
<td>
<select name="extra_vars_{$i}_type">
<!--@foreach($lang->column_type_list as $key => $val)-->
<!--@if($key != 'kr_zip')-->
<option value="{$key}" <!--@if($extra_vars_type==$key)-->selected="selected"<!--@end-->>{$lang->column_type_list[$key]}</option>
<!--@end-->
<!--@end-->
</select>
</td>
</tr>
<tr class="row2">
<th><div>{$lang->is_required}</div></th>
<td><input type="checkbox" name="extra_vars_{$i}_is_required" value="Y" <!--@if($extra_vars_is_required=='Y')-->checked="checked"<!--@end--> /></td>
</tr>
<tr>
<th><div>{$lang->default_value}</div></th>
<td><input type="text" name="extra_vars_{$i}_default" value="{$extra_vars_default_value}" class="inputTypeText w400" /><p>{$lang->about_extra_vars_default_value}</p></td>
</tr>
<tr class="row2">
<th><div>{$lang->description}</div></th>
<td><input type="text" name="extra_vars_{$i}_desc" value="{$extra_vars_desc}" class="inputTypeText w400" /></td>
</tr>
<tr>
<th><div>{$lang->cmd_search}</div></th>
<td><input type="checkbox" name="extra_vars_{$i}_search" value="Y" <!--@if($extra_vars_search=='Y')-->checked="checked"<!--@end--> /></td>
</tr>
<tr class="row2">
<td colspan="2" class="right"><span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span></td>
</tr>
</table>
<!--@end-->
<!--@end-->
</form>

View file

@ -8,6 +8,7 @@
<!--%import("filter/delete_type.xml")-->
<!--%import("filter/insert_component.xml")-->
<!--%import("filter/delete_component.xml")-->
<!--%import("filter/modify_display_option.xml")-->
<!--// datepicker javascript plugin load -->
<!--%load_js_plugin("ui.datepicker")-->
@ -15,8 +16,8 @@
<form action="{Context::getRequestUri()}" method="post" onsubmit="return procFilter(this, insert_milestone)">
<input type="hidden" name="module_srl" value="{$module_srl}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->milestone}</caption>
<h4 class="xeAdmin">{$lang->milestone}</h4>
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->name}</div></th>
@ -29,7 +30,7 @@
<tbody>
<!--@foreach($milestone_list as $val)-->
<tr>
<td <!--@if($val->is_completed=='Y')-->class="strike"<!--@end-->>{$val->title}</td>
<td class="wide <!--@if($val->is_completed=='Y')-->strike<!--@end-->">{$val->title}</td>
<td class="date center nowrap"><!--@if($val->released_date)-->{zdate($val->released_date,"Y-m-d")}<!--@else-->&nbsp;<!--@end--></td>
<td class="date center nowrap"><!--@if($val->deadline)-->{zdate($val->deadline,"Y-m-d")}<!--@else-->&nbsp;<!--@end--></td>
<td class="center"><!--@if($val->is_default=='Y')-->{$lang->is_default}<!--@else-->&nbsp;<!--@end--></td>
@ -42,31 +43,30 @@
<tr>
<td colspan="2">
<input name="title" type="text" class="inputTypeText fixWidth" /><br />
<input name="title" type="text" class="inputTypeText fullWidth" /><br />
</td>
<td class="nowrap">
<input type="hidden" name="deadline" id="date_deadline" />
<input type="text" class="inputDate" value="" readonly="readonly" />
<script type="text/javascript">
(function($){
$(function(){
var option = { gotoCurrent: false,yearRange:'-100:+10', onSelect:function(){
$(this).prev('input[type="hidden"]').val(this.value.replace(/-/g,""))}
};
$.extend(option,$.datepicker.regional['{$lang_type}']);
$(".inputDate").datepicker(option);
});
})(jQuery);
</script>
<script type="text/javascript">
(function($){
$(function(){
var option = { gotoCurrent: false,yearRange:'-100:+10', onSelect:function(){
$(this).prev('input[type="hidden"]').val(this.value.replace(/-/g,""))}
};
$.extend(option,$.datepicker.regional['{$lang_type}']);
$(".inputDate").datepicker(option);
});
})(jQuery);
</script>
</td>
<td class="center"><input type="checkbox" name="is_default" value="Y" /></td>
<td class="vtop" rowspan="2"><input type="submit" value="{$lang->cmd_registration}" accesskey="s"class="btnSubmit" /></td>
</tr>
<tr>
<td colspan="4">
<textarea name="description" class="inputTypeTextArea fixWidth" /></textarea>
<td colspan="5">
<textarea name="description" class="inputTypeTextArea fullWidth" /></textarea>
</td>
</tr>
</tbody>
@ -80,8 +80,8 @@
<form action="./" method="post" onsubmit="return procFilter(this, insert_priority)">
<input type="hidden" name="module_srl" value="{$module_srl}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->priority}</caption>
<h4 class="xeAdmin">{$lang->priority}</h4>
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->name}</div></th>
@ -93,7 +93,7 @@
<tbody>
<!--@foreach($priority_list as $val)-->
<tr>
<td>{$val->title}</td>
<td class="wide">{$val->title}</td>
<td class="center number">{$val->listorder}</td>
<td class="center"><!--@if($val->is_default=='Y')-->{$lang->is_default}<!--@else-->&nbsp;<!--@end--></td>
<td class="button">
@ -103,7 +103,7 @@
</tr>
<!--@end-->
<tr>
<td><input name="title" type="text" class="inputTypeText fixWidth" /></td>
<td><input name="title" type="text" class="inputTypeText fullWidth" /></td>
<td>&nbsp;</td>
<td class="center"><input type="checkbox" name="is_default" value="Y" /></td>
<td><input type="submit" value="{$lang->cmd_registration}" class="btnSubmit" accesskey="s"/></td>
@ -115,8 +115,8 @@
<form action="./" method="post" onsubmit="return procFilter(this, insert_type)">
<input type="hidden" name="module_srl" value="{$module_srl}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->type}</caption>
<h4 class="xeAdmin">{$lang->type}</h4>
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->type}</div></th>
@ -127,7 +127,7 @@
<tbody>
<!--@foreach($type_list as $val)-->
<tr>
<td>{$val->title}</td>
<td class="wide">{$val->title}</td>
<td class="center"><!--@if($val->is_default=='Y')-->{$lang->is_default}<!--@else-->&nbsp;<!--@end--></td>
<td class="center">
<a href="{getUrl('module_srl',$module_srl,'act','dispIssuetrackerAdminModifyType','type_srl',$val->type_srl)}"><img src="images/buttonModify.gif" alt="" /></a> &nbsp;
@ -136,7 +136,7 @@
</tr>
<!--@end-->
<tr>
<td><input name="title" type="text" class="inputTypeText fixWidth" /></td>
<td><input name="title" type="text" class="inputTypeText fullWidth" /></td>
<td class="center"><input type="checkbox" name="is_default" value="Y" /></td>
<td><input type="submit" value="{$lang->cmd_registration}" class="btnSubmit" accesskey="s"/></td>
</tbody>
@ -147,8 +147,8 @@
<form action="./" method="post" onsubmit="return procFilter(this, insert_component)">
<input type="hidden" name="module_srl" value="{$module_srl}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->component}</caption>
<h4 class="xeAdmin">{$lang->component}</h4>
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col" class="wide"><div>{$lang->component}</div></th>
@ -159,7 +159,7 @@
<tbody>
<!--@foreach($component_list as $val)-->
<tr>
<td>{$val->title}</td>
<td class="wide">{$val->title}</td>
<td class="center"><!--@if($val->is_default=='Y')-->{$lang->is_default}<!--@else-->&nbsp;<!--@end--></td>
<td class="center">
<a href="{getUrl('module_srl',$module_srl,'act','dispIssuetrackerAdminModifyComponent','component_srl',$val->component_srl)}"><img src="images/buttonModify.gif" alt="" /></a> &nbsp;
@ -169,9 +169,23 @@
<!--@end-->
<tr>
<td><input name="title" type="text" class="inputTypeText fixWidth" /></td>
<td><input name="title" type="text" class="inputTypeText fullWidth" /></td>
<td class="center"><input type="checkbox" name="is_default" value="Y" /></td>
<td><input type="submit" value="{$lang->cmd_registration}" class="btnSubmit" accesskey="s"/></td>
</tbody>
</table>
</form>
<form action="./" method="post" onsubmit="return procFilter(this, modify_display_option)">
<input type="hidden" name="module_srl" value="{$module_srl}" />
<h4 class="xeAdmin">{$lang->display_option}</h4>
<ol class="displayOpt">
<!--@foreach($display_option as $key => $val)-->
<li><input type="checkbox" name="displayopts" value="{$key}" id="display_{$key}" <!--@if($val->checked)-->checked="checked"<!--@end--> <!--@if($key=='title')-->disabled="disabled"<!--@end--> /><label for="display_{$key}">{$val->title}</label></li>
<!--@end-->
</ol>
<div class="right">
<input type="submit" value="{$lang->cmd_modify}" class="btnSubmit" accesskey="s"/>
</div>
</form>

View file

@ -10,28 +10,26 @@
</form>
<div class="top1">
<table cellspacing="0" class="adminTable">
<caption>{$lang->package}</caption>
<h4 class="xeAdmin">{$lang->package}</h4>
<table cellspacing="0" class="rowTable">
<!--@foreach($package_list as $key => $val)-->
<tr>
<th><div><a href="{getUrl('package_srl', $key)}">{$val->title}</a></div></th>
<td class="wide summaryText"><div class="close">{nl2br($val->description)}</div></td>
<td class="modify center"><a href="{getUrl('module_srl',$module_srl,'act','dispIssuetrackerAdminModifyPackage','package_srl',$val->package_srl)}">{$lang->cmd_modify}</a></td>
<td class="delete center"><!--@if($val->is_default!='Y')--><a href="#" onclick="deleteByFilter('{$val->package_srl}', delete_package);">{$lang->cmd_delete}</a><!--@else-->&nbsp;<!--@end--></td>
<td><a href="{getUrl('module_srl',$module_srl,'act','dispIssuetrackerAdminModifyPackage','package_srl',$val->package_srl)}" class="buttonSet buttonSetting"><span>{$lang->cmd_modify}</span></a></td>
<td><!--@if($val->is_default!='Y')--><a href="#" onclick="deleteByFilter('{$val->package_srl}', delete_package);" class="buttonSet buttonDelete"><span>{$lang->cmd_delete}</a></span><!--@else-->&nbsp;<!--@end--></td>
</tr>
<!--@end-->
<tr>
<td colspan="4">
<div class="fr">
<form action="{Context::getRequestUri()}" method="get">
<input type="hidden" name="module" value="{$module}"/>
<input type="hidden" name="mid" value="{$mid}"/>
<input type="hidden" name="module_srl" value="{$module_srl}"/>
<input type="hidden" name="act" value="dispIssuetrackerAdminModifyPackage" />
<input type="submit" value="{$lang->cmd_insert_package}" class="btnSubmit" />
</form>
</div>
</td>
<th colspan="4" class="button">
<form action="{Context::getRequestUri()}" method="get">
<input type="hidden" name="module" value="{$module}"/>
<input type="hidden" name="mid" value="{$mid}"/>
<input type="hidden" name="module_srl" value="{$module_srl}"/>
<input type="hidden" name="act" value="dispIssuetrackerAdminModifyPackage" />
<input type="submit" value="{$lang->cmd_insert_package}" class="btnSubmit" />
</form>
</th>
</tr>
</table>
</div>
@ -40,8 +38,8 @@
{@ $package = $package_list[$package_srl] }
<div class="top2">
<table cellspacing="0" class="adminTable">
<caption>{$lang->package} : {$package->title}</caption>
<h4 class="xeAdmin">{$lang->package} : {$package->title}</h4>
<table cellspacing="0" class="rowTable">
<tbody>
<tr>
<td colspan="4">
@ -81,7 +79,7 @@
<td colspan="2">
<!--@if($val->files)-->
<!--@foreach($val->files as $file)-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<col width="180" />
<col width="*" />
<tbody>

View file

@ -1,144 +1,2 @@
<!--#include("./header.html")-->
<form action="{Context::getRequestUri()}" method="post" enctype="multipart/form-data" target="hidden_iframe">
<input type="hidden" name="module" value="{$module_info->module}" />
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="act" value="procIssuetrackerAdminUpdateSkinInfo" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="page" value="{$page}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->skin_default_info}</caption>
<tr class="row2">
<th scope="row"><div>{$lang->skin}</div></th>
<td class="wide">{$skin_info->title}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->skin_author}</div></th>
<td>
<!--@foreach($skin_info->author as $author)-->
{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a>, <a href="mailto:{$author->email_address}">{$author->email_address}</a>)<br />
<!--@endforeach-->
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->homepage}</div></th>
<td><a href="{$skin_info->homepage}" onclick="window.open(this.href);return false;">{$skin_info->homepage}</a>&nbsp;</td>
</tr>
<tr>
<th scope="row"><div>{$lang->date}</div></th>
<td>{zdate($skin_info->date, 'Y-m-d')}</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->skin_license}</div></th>
<td>
{nl2br(trim($skin_info->license))}
<!--@if($skin_info->license_link)-->
<p><a href="{$skin_info->license_link}" onclick="window.close(); return false;">{$skin_info->license_link}</a></p>
<!--@end-->
&nbsp;
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td>{nl2br($skin_info->description)}</td>
</tr>
</table>
<table cellspacing="0" class="adminTable">
<caption>{$lang->extra_vars}</caption>
<tr valign="top">
<th scope="row"><div>{$lang->colorset}</div></th>
<td class="wide">
<!--@foreach($skin_info->colorset as $key => $val)-->
<!--@if($val->screenshot)-->
{@ $_img_info = getImageSize($val->screenshot); $_height = $_img_info[1]+40; $_width = $_img_info[0]+20; $_talign = "center"; }
<!--@else-->
{@ $_width = 200; $_height = 20; $_talign = "left"; }
<!--@end-->
<div style="float:left;text-align:{$_talign};margin-bottom:1em;width:{$_width}px;height:{$_height}px;margin-right:10px;">
<input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" <!--@if($module_info->colorset==$val->name)-->checked="checked"<!--@end-->/>
<label for="colorset_{$key}">{$val->title}</label>
<!--@if($val->screenshot)-->
<br />
<img src="{$val->screenshot}" alt="{$val->title}" style="border:1px solid #888888;padding:2px;margin:2px;"/>
<!--@end-->
</div>
<!--@end-->
</td>
</tr>
<!--@foreach($skin_info->extra_vars as $key => $val)-->
<!--@if($val->group && ((!$group) || $group != $val->group))-->
{@$group = $val->group}
</table>
<table cellspacing="0" class="adminTable">
<caption>{$group}</caption>
<!--@end-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$val->title}</div></th>
<td class="wide">
<!--@if($val->type=="text")-->
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
<!--@elseif($val->type=="textarea")-->
<textarea name="{$val->name}" class="inputTypeTextArea w400">{htmlspecialchars($val->value)}</textarea>
<!--@elseif($val->type=="select")-->
<select name="{$val->name}">
<!--@foreach($val->options as $k=>$v)-->
<option value="{$v->value}" <!--@if($v->value == $val->value)-->selected="selected"<!--@end-->>{$v->title}</option>
<!--@end-->
</select>
<!--@elseif($val->type=="checkbox")-->
<!--@foreach($val->default as $k=>$v)-->
<span>
<input type="checkbox" name="{$val->name}[]" value="{$v}" id="ch_{$key}_{$k}" <!--@if(in_array($v, $val->value))-->checked="checked"<!--@end--> class="checkbox" />
<label for="ch_{$key}_{$k}">{$v}</label>
</span>
<!--@end-->
<!--@elseif($val->type=="radio")-->
<!--@foreach($val->default as $k=>$v)-->
<span>
<input type="radio" name="{$val->name}" value="{$v}" id="ch_{$key}_{$k}" <!--@if($v==$val->value)-->checked="checked"<!--@end-->/>
<label for="ch_{$key}_{$k}">{$v}</label>
</span>
<!--@end-->
<!--@elseif($val->type=="image")-->
<!--@if($val->value)-->
<div>
<img src="{$val->value}" /><br />
<input type="checkbox" name="del_{$val->name}" value="Y" id="del_{$val->name}" class="checkbox" />
<label for="del_{$val->name}">{$lang->cmd_delete}</label>
</div>
<!--@end-->
<input type="file" name="{$val->name}" value="" />
<!--@end-->
<!--@if($val->description)-->
<p>{nl2br(trim($val->description))}</p>
<!--@end-->
</td>
</tr>
<!--@end-->
<!--@if($group)-->
</table>
<table cellspacing="0" class="adminTable">
<!--@end-->
<tr class="row2">
<td colspan="2" class="right">
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</tr>
</table>
</form>
<iframe name="hidden_iframe" frameborder="0" style="display:none"></iframe>
{$skin_content}