touched up the issue show page

- added 'change'
- added 'undo'
touched up the issue home page
- added pagination
This commit is contained in:
hyung-hwan 2010-03-18 12:37:45 +00:00
parent 4c7ca4edf7
commit 343ff629f0
24 changed files with 965 additions and 185 deletions

View File

@ -91,6 +91,11 @@ max_upload_size = "10000"
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
max_latest_projects = "10" max_latest_projects = "10"
;------------------------------------------------------------------------------
; Maximum number of issues to show
;------------------------------------------------------------------------------
max_issues_per_page = "50"
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Maximum number of log entries to show per details page ; Maximum number of log entries to show per details page
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------

View File

@ -8,6 +8,24 @@ class Issue extends Controller
var $VIEW_EDIT = 'issue_edit'; var $VIEW_EDIT = 'issue_edit';
var $VIEW_DELETE = 'issue_delete'; var $VIEW_DELETE = 'issue_delete';
var $TYPE_DEFECT = 'defect';
var $TYPE_REQUEST = 'request';
var $TYPE_OTHER = 'other';
var $STATUS_NEW = 'new';
var $STATUS_ACCEPTED = 'accepted';
var $STATUS_REJECTED = 'rejected';
var $STATUS_FIXED = 'fixed';
var $STATUS_WONTFIX = 'wontfix';
var $STATUS_DUPLICATE = 'duplicate';
var $STATUS_OTHER = 'other';
var $PRIORITY_CRITICAL = 'critical';
var $PRIORITY_HIGH = 'high';
var $PRIORITY_MEDIUM = 'medium';
var $PRIORITY_LOW = 'low';
var $PRIORITY_OTHER = 'other';
function Issue () function Issue ()
{ {
parent::Controller (); parent::Controller ();
@ -19,10 +37,10 @@ class Issue extends Controller
$this->load->library ('Language', 'lang'); $this->load->library ('Language', 'lang');
$this->lang->load ('common', CODEPOT_LANG); $this->lang->load ('common', CODEPOT_LANG);
$this->lang->load ('issue', CODEPOT_LANG);
} }
function home ($projectid = '') function home ($projectid = '', $offset = 0)
{ {
$this->load->model ('ProjectModel', 'projects'); $this->load->model ('ProjectModel', 'projects');
$this->load->model ('IssueModel', 'issues'); $this->load->model ('IssueModel', 'issues');
@ -49,25 +67,51 @@ class Issue extends Controller
{ {
if ($this->input->post('filter')) if ($this->input->post('filter'))
{ {
$filter->status = $this->input->post('filter_status'); $filter->summary = $this->input->post('filter_summary');
$filter->owner = $this->input->post('filter_owner'); $filter->owner = $this->input->post('filter_owner');
$data['filter'] = $filter; $data['filter'] = $filter;
} }
else else
{ {
$filter->status = ''; $filter->summary = '';
$filter->owner = ''; $filter->owner = '';
$data['filter'] = $filter; $data['filter'] = $filter;
} }
$issues = $this->issues->getAll ($login['id'], $project);
$this->load->library ('pagination');
$num_entries = $this->issues->getNumEntries ($login['id'], $project);
if ($num_entries === FALSE)
{
$data['project'] = $project;
$data['message'] = 'DATABASE ERROR';
$this->load->view ($this->VIEW_ERROR, $data);
return;
}
$pagecfg['base_url'] = site_url() . "/issue/home/{$projectid}/";
$pagecfg['total_rows'] = $num_entries;
$pagecfg['per_page'] = CODEPOT_MAX_ISSUES_PER_PAGE;
$pagecfg['uri_segment'] = 4;
$pagecfg['first_link'] = $this->lang->line('First');
$pagecfg['last_link'] = $this->lang->line('Last');
//$issues = $this->issues->getAll ($login['id'], $project);
$issues = $this->issues->getEntries ($login['id'], $offset, $pagecfg['per_page'], $project);
if ($issues === FALSE) if ($issues === FALSE)
{ {
$data['project'] = $project;
$data['message'] = 'DATABASE ERROR'; $data['message'] = 'DATABASE ERROR';
$this->load->view ($this->VIEW_ERROR, $data); $this->load->view ($this->VIEW_ERROR, $data);
} }
else else
{ {
$this->pagination->initialize ($pagecfg);
$data['page_links'] = $this->pagination->create_links ();
$data['issue_type_array'] = $this->_get_type_array();
$data['issue_status_array'] = $this->_get_status_array();
$data['issue_priority_array'] = $this->_get_priority_array();
$data['project'] = $project; $data['project'] = $project;
$data['issues'] = $issues; $data['issues'] = $issues;
$this->load->view ($this->VIEW_HOME, $data); $this->load->view ($this->VIEW_HOME, $data);
@ -109,7 +153,8 @@ class Issue extends Controller
} }
else else
{ {
if ($this->input->post('issue_change')) $change_post = $this->input->post('issue_change');
if ($change_post == 'change')
{ {
$change->type = $this->input->post('issue_change_type'); $change->type = $this->input->post('issue_change_type');
$change->status = $this->input->post('issue_change_status'); $change->status = $this->input->post('issue_change_status');
@ -117,7 +162,35 @@ class Issue extends Controller
$change->priority = $this->input->post('issue_change_priority'); $change->priority = $this->input->post('issue_change_priority');
$change->comment = $this->input->post('issue_change_comment'); $change->comment = $this->input->post('issue_change_comment');
if ($this->issues->change ($login['id'], $project, $id, $change) === FALSE) if (!$login['sysadmin?'] &&
$this->projects->projectHasMember($project->id, $login['id']) === FALSE)
{
$data['project'] = $project;
$data['message'] = "NO PERMISSION - $projectid";
$this->load->view ($this->VIEW_ERROR, $data);
}
else if ($this->issues->change ($login['id'], $project, $id, $change) === FALSE)
{
$data['project'] = $project;
$data['message'] = 'DATABASE ERROR';
$this->load->view ($this->VIEW_ERROR, $data);
}
else
{
redirect ("/issue/show/{$projectid}/{$hexid}");
}
return;
}
else if ($change_post == 'undo')
{
if (!$login['sysadmin?'] &&
$this->projects->projectHasMember($project->id, $login['id']) === FALSE)
{
$data['project'] = $project;
$data['message'] = "NO PERMISSION - $projectid";
$this->load->view ($this->VIEW_ERROR, $data);
}
else if ($this->issues->undo_last_change ($login['id'], $project, $id) === FALSE)
{ {
$data['project'] = $project; $data['project'] = $project;
$data['message'] = 'DATABASE ERROR'; $data['message'] = 'DATABASE ERROR';
@ -141,12 +214,15 @@ class Issue extends Controller
{ {
$data['project'] = $project; $data['project'] = $project;
$data['message'] = $data['message'] =
$this->lang->line('MSG_NO_SUCH_ISSUE') . $this->lang->line('MSG_NO_SUCH_ISSUE').
" - {$id}"; " - {$id}";
$this->load->view ($this->VIEW_ERROR, $data); $this->load->view ($this->VIEW_ERROR, $data);
} }
else else
{ {
$data['issue_type_array'] = $this->_get_type_array();
$data['issue_status_array'] = $this->_get_status_array();
$data['issue_priority_array'] = $this->_get_priority_array();
$data['project'] = $project; $data['project'] = $project;
$data['issue'] = $issue; $data['issue'] = $issue;
$this->load->view ($this->VIEW_SHOW, $data); $this->load->view ($this->VIEW_SHOW, $data);
@ -194,21 +270,22 @@ class Issue extends Controller
$this->form_validation->set_rules ( $this->form_validation->set_rules (
'issue_summary', 'summary', 'required|max_length[255]'); 'issue_summary', 'summary', 'required|max_length[255]');
$this->form_validation->set_rules ( $this->form_validation->set_rules (
'issue_status', 'status', 'required'); 'issue_description', 'description', 'required');
$this->form_validation->set_rules ( $this->form_validation->set_rules (
'issue_type', 'type', 'required'); 'issue_type', 'type', 'required');
$this->form_validation->set_rules ( $this->form_validation->set_rules (
'issue_priority', 'priority', 'required'); 'issue_type', 'status', 'required');
$this->form_validation->set_rules ( $this->form_validation->set_rules (
'issue_owner', 'owner', 'required'); 'issue_type', 'priority', 'required');
$this->form_validation->set_rules (
'issue_description', 'description', 'required');
$this->form_validation->set_error_delimiters ( $this->form_validation->set_error_delimiters (
'<span class="form_field_error">','</span>'); '<span class="form_field_error">','</span>');
$data['mode'] = $mode; $data['mode'] = $mode;
$data['message'] = ''; $data['message'] = '';
$data['project'] = $project; $data['project'] = $project;
$data['issue_type_array'] = $this->_get_type_array();
$data['issue_status_array'] = $this->_get_status_array();
$data['issue_priority_array'] = $this->_get_priority_array();
if ($this->input->post('issue')) if ($this->input->post('issue'))
{ {
@ -224,7 +301,7 @@ class Issue extends Controller
if ($this->form_validation->run()) if ($this->form_validation->run())
{ {
$id = ($mode == 'update')? $id = ($mode == 'update')?
$this->issues->update ($login['id'], $issue): $this->issues->update_partial ($login['id'], $issue):
$this->issues->create ($login['id'], $issue); $this->issues->create ($login['id'], $issue);
if ($id === FALSE) if ($id === FALSE)
{ {
@ -234,7 +311,8 @@ class Issue extends Controller
} }
else else
{ {
redirect ("issue/show/{$project->id}/{$hexid}"); redirect ("issue/show/{$project->id}/" .
$this->converter->AsciiToHex((string)$id));
} }
} }
else else
@ -272,11 +350,11 @@ class Issue extends Controller
$issue->projectid = $projectid; $issue->projectid = $projectid;
$issue->id = $id; $issue->id = $id;
$issue->summary = ''; $issue->summary = '';
$issue->type = '';
$issue->status = '';
$issue->owner = '';
$issue->priority = '';
$issue->description = ''; $issue->description = '';
$issue->type = $this->TYPE_DEFECT;
$issue->status = $this->STATUS_NEW;
$issue->priority = $this->PRIORITY_OTHER;
$issue->owner = '';
$data['issue'] = $issue; $data['issue'] = $issue;
$this->load->view ($this->VIEW_EDIT, $data); $this->load->view ($this->VIEW_EDIT, $data);
@ -286,9 +364,9 @@ class Issue extends Controller
} }
} }
function create ($projectid = '', $hexid = '') function create ($projectid = '')
{ {
return $this->_edit_issue ($projectid, $hexid, 'create'); return $this->_edit_issue ($projectid, '', 'create');
} }
function update ($projectid = '', $hexid = '') function update ($projectid = '', $hexid = '')
@ -396,4 +474,53 @@ class Issue extends Controller
} }
} }
function _get_type_array ()
{
return array (
$this->TYPE_DEFECT =>
$this->lang->line('ISSUE_TYPE_DEFECT'),
$this->TYPE_REQUEST =>
$this->lang->line('ISSUE_TYPE_REQUEST'),
$this->TYPE_OTHER =>
$this->lang->line('ISSUE_TYPE_OTHER')
);
}
function _get_status_array ()
{
return array (
$this->STATUS_NEW =>
$this->lang->line('ISSUE_STATUS_NEW'),
$this->STATUS_ACCEPTED =>
$this->lang->line('ISSUE_STATUS_ACCEPTED'),
$this->STATUS_REJECTED =>
$this->lang->line('ISSUE_STATUS_REJECTED'),
$this->STATUS_FIXED =>
$this->lang->line('ISSUE_STATUS_FIXED'),
$this->STATUS_WONTFIX =>
$this->lang->line('ISSUE_STATUS_WONTFIX'),
$this->STATUS_DUPLICATE =>
$this->lang->line('ISSUE_STATUS_DUPLICATE'),
$this->STATUS_OTHER =>
$this->lang->line('ISSUE_STATUS_OTHER')
);
}
function _get_priority_array ()
{
return array (
$this->PRIORITY_CRITICAL =>
$this->lang->line('ISSUE_PRIORITY_CRITICAL'),
$this->PRIORITY_HIGH =>
$this->lang->line('ISSUE_PRIORITY_HIGH'),
$this->PRIORITY_MEDIUM =>
$this->lang->line('ISSUE_PRIORITY_MEDIUM'),
$this->PRIORITY_LOW =>
$this->lang->line('ISSUE_PRIORITY_LOW'),
$this->PRIORITY_OTHER =>
$this->lang->line('ISSUE_PRIORITY_OTHER')
);
}
} }

View File

@ -1,6 +1,7 @@
wwwdir=$(WWWDIR)/codepot/language/english wwwdir=$(WWWDIR)/codepot/language/english
www_DATA = \ www_DATA = \
common_lang.php \ common_lang.php \
issue_lang.php \
index.html index.html
EXTRA_DIST = $(www_DATA) EXTRA_DIST = $(www_DATA)

View File

@ -164,6 +164,7 @@ top_srcdir = @top_srcdir@
wwwdir = $(WWWDIR)/codepot/language/english wwwdir = $(WWWDIR)/codepot/language/english
www_DATA = \ www_DATA = \
common_lang.php \ common_lang.php \
issue_lang.php \
index.html index.html
EXTRA_DIST = $(www_DATA) EXTRA_DIST = $(www_DATA)

View File

@ -1,9 +1,12 @@
<?php <?php
$lang['Author'] = 'Author'; $lang['Author'] = 'Author';
$lang['Blame'] = 'Blame'; $lang['Blame'] = 'Blame';
$lang['Cancel'] = 'Cancel';
$lang['Change'] = 'Change';
$lang['Change log'] = 'Change log'; $lang['Change log'] = 'Change log';
$lang['Code'] = 'Code'; $lang['Code'] = 'Code';
$lang['Code changes'] = 'Code changes'; $lang['Code changes'] = 'Code changes';
$lang['Comment'] = 'Comment';
$lang['Create'] = 'Create'; $lang['Create'] = 'Create';
$lang['Created by'] = 'Created by'; $lang['Created by'] = 'Created by';
$lang['Created on'] = 'Created on'; $lang['Created on'] = 'Created on';
@ -37,6 +40,7 @@ $lang['New'] = 'New';
$lang['Last updated by'] = 'Last updated by'; $lang['Last updated by'] = 'Last updated by';
$lang['Last updated on'] = 'Last updated on'; $lang['Last updated on'] = 'Last updated on';
$lang['Latest projects'] = 'Latest projects'; $lang['Latest projects'] = 'Latest projects';
$lang['OK'] = 'OK';
$lang['Other projects'] = 'Other projects'; $lang['Other projects'] = 'Other projects';
$lang['Overview'] = 'Overview'; $lang['Overview'] = 'Overview';
$lang['Owner'] = 'Owner'; $lang['Owner'] = 'Owner';
@ -58,6 +62,7 @@ $lang['Tag'] = 'Tag';
$lang['Text'] = 'Text'; $lang['Text'] = 'Text';
$lang['Time'] = 'Time'; $lang['Time'] = 'Time';
$lang['Type'] = 'Type'; $lang['Type'] = 'Type';
$lang['Undo'] = 'Undo';
$lang['Update'] = 'Update'; $lang['Update'] = 'Update';
$lang['Username'] = 'Username'; $lang['Username'] = 'Username';
$lang['Wiki'] = 'Wiki'; $lang['Wiki'] = 'Wiki';
@ -65,6 +70,7 @@ $lang['Wikis'] = 'Wikis';
$lang['MSG_LOG_COMMIT_BY'] = 'Committed by %s'; $lang['MSG_LOG_COMMIT_BY'] = 'Committed by %s';
$lang['MSG_LOG_CHANGE_BY'] = 'Changed by %s';
$lang['MSG_LOG_CREATE_BY'] = 'Created by %s'; $lang['MSG_LOG_CREATE_BY'] = 'Created by %s';
$lang['MSG_LOG_DELETE_BY'] = 'Deleted by %s'; $lang['MSG_LOG_DELETE_BY'] = 'Deleted by %s';
$lang['MSG_LOG_UPDATE_BY'] = 'Updated by %s'; $lang['MSG_LOG_UPDATE_BY'] = 'Updated by %s';

View File

@ -0,0 +1,22 @@
<?php
$lang['ISSUE_TYPE_DEFECT'] = 'Defect';
$lang['ISSUE_TYPE_REQUEST'] = 'Request';
$lang['ISSUE_TYPE_OTHER'] = 'Other';
$lang['ISSUE_STATUS_NEW'] = 'New';
$lang['ISSUE_STATUS_ACCEPTED'] = 'Accepted';
$lang['ISSUE_STATUS_REJECTED'] = 'Rejected';
$lang['ISSUE_STATUS_FIXED'] = 'Fixed';
$lang['ISSUE_STATUS_WONTFIX'] = "Wont't fix";
$lang['ISSUE_STATUS_DUPLICATE'] = 'Duplicate';
$lang['ISSUE_STATUS_OTHER'] = 'Other';
$lang['ISSUE_PRIORITY_CRITICAL'] = 'Critical';
$lang['ISSUE_PRIORITY_HIGH'] = 'High';
$lang['ISSUE_PRIORITY_MEDIUM'] = 'Medium';
$lang['ISSUE_PRIORITY_LOW'] = 'Low';
$lang['ISSUE_PRIORITY_OTHER'] = 'Other';
$lang['ISSUE_MSG_CHANGED_X_FROM_Y_TO_Z'] = "Changed <span class='quoted'>%s</span> from <span class='quoted'>%s</span> to <span class='quoted'>%s</span>";
$lang['ISSUE_MSG_CONFIRM_UNDO'] = 'Are you sure to undo the last change?';
?>

View File

@ -1,9 +1,12 @@
<?php <?php
$lang['Author'] = 'Pengarang '; $lang['Author'] = 'Pengarang ';
$lang['Blame'] = 'Menyalahkan'; $lang['Blame'] = 'Menyalahkan';
$lang['Cancel'] = 'Cancel';
$lang['Change'] = 'Change';
$lang['Change log'] = 'Change log'; $lang['Change log'] = 'Change log';
$lang['Code'] = 'Kode'; $lang['Code'] = 'Kode';
$lang['Code changes'] = 'Kode changes' $lang['Code changes'] = 'Kode changes'
$lang['Comment'] = 'Comment';
$lang['Create'] = 'Dibuat'; $lang['Create'] = 'Dibuat';
$lang['Created by'] = 'Dibuat oleh'; $lang['Created by'] = 'Dibuat oleh';
$lang['Created on'] = 'Waktu dibuat'; $lang['Created on'] = 'Waktu dibuat';
@ -37,6 +40,7 @@ $lang['New'] = 'Baru';
$lang['Last updated by'] = 'Terakhir memperbaharui oleh'; $lang['Last updated by'] = 'Terakhir memperbaharui oleh';
$lang['Last updated on'] = 'Waktu memperbaharui terakhir'; $lang['Last updated on'] = 'Waktu memperbaharui terakhir';
$lang['Latest projects'] = 'Proyek terakhir'; $lang['Latest projects'] = 'Proyek terakhir';
$lang['OK projects'] = 'OK';
$lang['Other projects'] = 'Proyek lain'; $lang['Other projects'] = 'Proyek lain';
$lang['Overview'] = 'Ringkasan'; $lang['Overview'] = 'Ringkasan';
$lang['Owner'] = 'Owner'; $lang['Owner'] = 'Owner';
@ -58,12 +62,14 @@ $lang['Tag'] = 'Label';
$lang['Text'] = 'Teks'; $lang['Text'] = 'Teks';
$lang['Time'] = 'Waktu'; $lang['Time'] = 'Waktu';
$lang['Type'] = 'Type'; $lang['Type'] = 'Type';
$lang['Undo'] = 'Undo';
$lang['Update'] = 'Memperbaharui'; $lang['Update'] = 'Memperbaharui';
$lang['Username'] = 'Nama pemakai'; $lang['Username'] = 'Nama pemakai';
$lang['Wiki'] = 'Wiki'; $lang['Wiki'] = 'Wiki';
$lang['Wikis'] = 'Wiki'; $lang['Wikis'] = 'Wiki';
$lang['MSG_LOG_COMMIT_BY'] = 'Dicommit oleh %s'; $lang['MSG_LOG_COMMIT_BY'] = 'Dicommit oleh %s';
$lang['MSG_LOG_CHANGE_BY'] = 'Change oleh %s';
$lang['MSG_LOG_CREATE_BY'] = 'Dibuat oleh %s'; $lang['MSG_LOG_CREATE_BY'] = 'Dibuat oleh %s';
$lang['MSG_LOG_DELETE_BY'] = 'Dihapus oleh %s'; $lang['MSG_LOG_DELETE_BY'] = 'Dihapus oleh %s';
$lang['MSG_LOG_UPDATE_BY'] = 'Diupdate oleh %s'; $lang['MSG_LOG_UPDATE_BY'] = 'Diupdate oleh %s';

View File

@ -1,6 +1,7 @@
wwwdir=$(WWWDIR)/codepot/language/korean wwwdir=$(WWWDIR)/codepot/language/korean
www_DATA = \ www_DATA = \
common_lang.php \ common_lang.php \
issue_lang.php \
index.html index.html
EXTRA_DIST = $(www_DATA) EXTRA_DIST = $(www_DATA)

View File

@ -164,6 +164,7 @@ top_srcdir = @top_srcdir@
wwwdir = $(WWWDIR)/codepot/language/korean wwwdir = $(WWWDIR)/codepot/language/korean
www_DATA = \ www_DATA = \
common_lang.php \ common_lang.php \
issue_lang.php \
index.html index.html
EXTRA_DIST = $(www_DATA) EXTRA_DIST = $(www_DATA)

View File

@ -1,9 +1,12 @@
<?php <?php
$lang['Author'] = '저자'; $lang['Author'] = '저자';
$lang['Blame'] = '책임전가'; $lang['Blame'] = '책임전가';
$lang['Change log'] = '변경내역'; $lang['Cancel'] = '취소';
$lang['Change'] = '변경';
$lang['Change log'] = '변경기록';
$lang['Code'] = '코드'; $lang['Code'] = '코드';
$lang['Code changes'] = '코드변경'; $lang['Code changes'] = '코드변경';
$lang['Comment'] = '소견';
$lang['Create'] = '생성'; $lang['Create'] = '생성';
$lang['Created by'] = '최초생성인'; $lang['Created by'] = '최초생성인';
$lang['Created on'] = '최초생성시간'; $lang['Created on'] = '최초생성시간';
@ -13,7 +16,7 @@ $lang['Description'] = '설명';
$lang['Details'] = '상세내역'; $lang['Details'] = '상세내역';
$lang['Difference'] = '차이점'; $lang['Difference'] = '차이점';
$lang['Directory'] = '디렉토리'; $lang['Directory'] = '디렉토리';
$lang['Download'] = '내려받'; $lang['Download'] = '내려받';
$lang['Edit'] = '수정'; $lang['Edit'] = '수정';
$lang['Error'] = '오류'; $lang['Error'] = '오류';
$lang['File'] = '파일'; $lang['File'] = '파일';
@ -37,9 +40,10 @@ $lang['New'] = '신규';
$lang['Last updated by'] = '최종수정인'; $lang['Last updated by'] = '최종수정인';
$lang['Last updated on'] = '최종수정시간'; $lang['Last updated on'] = '최종수정시간';
$lang['Latest projects'] = '최근 프로젝트'; $lang['Latest projects'] = '최근 프로젝트';
$lang['OK'] = '확인';
$lang['Other projects'] = '다른 프로젝트'; $lang['Other projects'] = '다른 프로젝트';
$lang['Overview'] = '개요'; $lang['Overview'] = '개요';
$lang['Owner'] = '소유자'; $lang['Owner'] = '담당자';
$lang['Password'] = '패스워드'; $lang['Password'] = '패스워드';
$lang['Path'] = '경로'; $lang['Path'] = '경로';
$lang['Priority'] = '중요도'; $lang['Priority'] = '중요도';
@ -58,12 +62,14 @@ $lang['Tag'] = '태그';
$lang['Text'] = '본문'; $lang['Text'] = '본문';
$lang['Time'] = '시간'; $lang['Time'] = '시간';
$lang['Type'] = '종류'; $lang['Type'] = '종류';
$lang['Undo'] = '되돌림';
$lang['Update'] = '수정'; $lang['Update'] = '수정';
$lang['Username'] = '사용자명'; $lang['Username'] = '사용자명';
$lang['Wiki'] = '위키'; $lang['Wiki'] = '위키';
$lang['Wikis'] = '위키'; $lang['Wikis'] = '위키';
$lang['MSG_LOG_COMMIT_BY'] = '%s에 의해 커밋되었습니다'; $lang['MSG_LOG_COMMIT_BY'] = '%s에 의해 커밋되었습니다';
$lang['MSG_LOG_CHANGE_BY'] = '%s에 의해 변경되었습니다';
$lang['MSG_LOG_CREATE_BY'] = '%s에 의해 생성되었습니다'; $lang['MSG_LOG_CREATE_BY'] = '%s에 의해 생성되었습니다';
$lang['MSG_LOG_DELETE_BY'] = '%s에 의해 삭제되었습니다'; $lang['MSG_LOG_DELETE_BY'] = '%s에 의해 삭제되었습니다';
$lang['MSG_LOG_UPDATE_BY'] = '%s에 의해 갱신되었습니다'; $lang['MSG_LOG_UPDATE_BY'] = '%s에 의해 갱신되었습니다';

View File

@ -0,0 +1,24 @@
<?php
$lang['ISSUE_TYPE_DEFECT'] = '문제점';
$lang['ISSUE_TYPE_REQUEST'] = '요청';
$lang['ISSUE_TYPE_OTHER'] = '기타';
$lang['ISSUE_STATUS_NEW'] = '신규';
$lang['ISSUE_STATUS_ACCEPTED'] = '승인';
$lang['ISSUE_STATUS_REJECTED'] = '거부';
$lang['ISSUE_STATUS_FIXED'] = '수정됨';
$lang['ISSUE_STATUS_WONTFIX'] = '수정안함';
$lang['ISSUE_STATUS_DUPLICATE'] = '중복';
$lang['ISSUE_STATUS_OTHER'] = '기타';
$lang['ISSUE_PRIORITY_CRITICAL'] = '긴급';
$lang['ISSUE_PRIORITY_HIGH'] = '높음';
$lang['ISSUE_PRIORITY_MEDIUM'] = '중간';
$lang['ISSUE_PRIORITY_LOW'] = '낮음';
$lang['ISSUE_PRIORITY_OTHER'] = '기타';
$lang['ISSUE_MSG_CHANGED_X_FROM_Y_TO_Z'] = "<span class='quoted'>%s</span>을/를 <span class='quoted'>%s</span>에서 <span class='quoted'>%s</span>(으)로 변경";
$lang['ISSUE_MSG_CONFIRM_UNDO'] = '마지막 변경내용을 취소할까요?';
?>

View File

@ -29,7 +29,7 @@ class IssueModel extends Model
$this->db->where ('projectid', $project->id); $this->db->where ('projectid', $project->id);
$this->db->where ('id', $id); $this->db->where ('id', $id);
$this->db->order_by ('sno', 'desc'); $this->db->order_by ('sno', 'asc');
$query = $this->db->get ('issue_change'); $query = $this->db->get ('issue_change');
$this->db->trans_complete (); $this->db->trans_complete ();
@ -41,10 +41,41 @@ class IssueModel extends Model
return $result[0]; return $result[0];
} }
function getNumEntries ($userid, $project)
{
$this->db->trans_start ();
$this->db->where ('projectid', $project->id);
$this->db->select ('count(id) as count');
$query = $this->db->get ('issue');
$result = $query->result();
$num = empty($result)? 0: $result[0]->count;
$this->db->trans_complete ();
if ($this->db->trans_status() === FALSE) return FALSE;
return $num;
}
function getEntries ($userid, $offset, $limit, $project)
{
$this->db->trans_start ();
$this->db->where ('projectid', $project->id);
$this->db->order_by ('id', 'desc');
$query = $this->db->get ('issue', $limit, $offset);
$this->db->trans_complete ();
if ($this->db->trans_status() === FALSE) return FALSE;
return $query->result ();
}
function getAll ($userid, $project) function getAll ($userid, $project)
{ {
$this->db->trans_start (); $this->db->trans_start ();
$this->db->where ('projectid', $project->id); $this->db->where ('projectid', $project->id);
$this->db->order_by ('id', 'desc');
$query = $this->db->get ('issue'); $query = $this->db->get ('issue');
$this->db->trans_complete (); $this->db->trans_complete ();
@ -111,6 +142,31 @@ class IssueModel extends Model
return $newid; return $newid;
} }
function update_partial ($userid, $issue)
{
$this->db->trans_start ();
$this->db->where ('projectid', $issue->projectid);
$this->db->where ('id', $issue->id);
$this->db->set ('summary', $issue->summary);
$this->db->set ('description', $issue->description);
$this->db->set ('updatedon', date('Y-m-d H:i:s'));
$this->db->set ('updatedby', $userid);
$this->db->update ('issue');
$this->db->set ('createdon', date('Y-m-d H:i:s'));
$this->db->set ('type', 'issue');
$this->db->set ('action', 'update');
$this->db->set ('projectid', $issue->projectid);
$this->db->set ('userid', $userid);
$this->db->set ('message', $issue->id);
$this->db->insert ('log');
$this->db->trans_complete ();
if ($this->db->trans_status() === FALSE) return FALSE;
return $issue->id;
}
function update ($userid, $issue) function update ($userid, $issue)
{ {
// TODO: check if userid can do this.. // TODO: check if userid can do this..
@ -127,9 +183,9 @@ class IssueModel extends Model
$this->db->set ('updatedby', $userid); $this->db->set ('updatedby', $userid);
$this->db->update ('issue'); $this->db->update ('issue');
$this->db->set ('projectid', $issue->projectid); $this->db->where ('projectid', $issue->projectid);
$this->db->set ('id', $issue->id); $this->db->where ('id', $issue->id);
$this->db->set ('sno', 1); $this->db->where ('sno', 1);
$this->db->set ('type', $issue->type); $this->db->set ('type', $issue->type);
$this->db->set ('status', $issue->status); $this->db->set ('status', $issue->status);
$this->db->set ('owner', $issue->owner); $this->db->set ('owner', $issue->owner);
@ -206,26 +262,95 @@ class IssueModel extends Model
return $id; return $id;
} }
function undo_last_change ($userid, $project, $id)
{
$this->db->trans_start ();
$this->db->where ('projectid', $project->id);
$this->db->where ('id', $id);
$this->db->select ('MAX(sno) as maxsno');
$query = $this->db->get ('issue_change');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_complete ();
return FALSE;
}
$result = $query->result();
if (!empty($result))
{
$maxsno = $result[0]->maxsno;
if ($maxsno > 1)
{
$this->db->where ('projectid', $project->id);
$this->db->where ('id', $id);
$this->db->where ('sno', $maxsno);
$this->db->delete ('issue_change');
$this->db->where ('projectid', $project->id);
$this->db->where ('id', $id);
$this->db->select ('MAX(sno) as maxsno');
$query = $this->db->get ('issue_change');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_complete ();
return FALSE;
}
$result = $query->result();
if (!empty($result))
{
$maxsno = $result[0]->maxsno;
$this->db->where ('projectid', $project->id);
$this->db->where ('id', $id);
$this->db->where ('sno', $maxsno);
$query = $this->db->get ('issue_change');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_complete ();
return FALSE;
}
$result = $query->result();
if (!empty($result))
{
$change = $result[0];
$this->db->where ('projectid', $project->id);
$this->db->where ('id', $id);
$this->db->set ('type', $change->type);
$this->db->set ('status', $change->status);
$this->db->set ('owner', $change->owner);
$this->db->set ('priority', $change->priority);
$this->db->set ('updatedon', $change->updatedon);
$this->db->set ('updatedby', $change->updatedby);
$this->db->update ('issue');
}
}
}
}
$this->db->trans_complete ();
return $this->db->trans_status();
}
function delete ($userid, $issue) function delete ($userid, $issue)
{ {
// TODO: check if userid can do this.. // TODO: check if userid can do this..
$this->db->trans_start (); $this->db->trans_start ();
$this->db->where ('projectid', $issue->projectid);
$this->db->where ('id', $issue->id);
$this->db->delete ('issue');
$this->db->where ('projectid', $issue->projectid); $this->db->where ('projectid', $issue->projectid);
$this->db->where ('id', $issue->id); $this->db->where ('id', $issue->id);
$this->db->delete ('issue_change'); $this->db->delete ('issue_change');
$this->db->where ('projectid', $issue->projectid);
$this->db->where ('id', $issue->id);
$this->db->delete ('issue');
$this->db->set ('createdon', date('Y-m-d H:i:s')); $this->db->set ('createdon', date('Y-m-d H:i:s'));
$this->db->set ('type', 'issue'); $this->db->set ('type', 'issue');
$this->db->set ('action', 'delete'); $this->db->set ('action', 'delete');
$this->db->set ('projectid', $issue->projectid); $this->db->set ('projectid', $issue->projectid);
$this->db->set ('userid', $userid); $this->db->set ('userid', $userid);
$this->db->set ('message', $issue->id); $this->db->set ('message', $issue->id);
$this->db->insert ('log'); $this->db->insert ('log');
$this->db->trans_complete (); $this->db->trans_complete ();
return $this->db->trans_status(); return $this->db->trans_status();
} }

View File

@ -40,10 +40,11 @@ class LogModel extends Model
$this->db->order_by ('createdon', 'desc'); $this->db->order_by ('createdon', 'desc');
$query = $this->db->get ('log', $limit, $offset); $query = $this->db->get ('log', $limit, $offset);
$result = $query->result ();
$this->db->trans_complete (); $this->db->trans_complete ();
if ($this->db->trans_status() === FALSE) return FALSE; if ($this->db->trans_status() === FALSE) return FALSE;
$result = $query->result ();
$count = 0; $count = 0;
$commits = array (); $commits = array ();
foreach ($result as $row) foreach ($result as $row)

View File

@ -12,7 +12,7 @@ function render_wiki()
creole_render_wiki ( creole_render_wiki (
"project_file_show_textpre", "project_file_show_textpre",
"project_file_show_textarea", "project_file_show_textarea",
"<?=dirname(dirname(dirname(dirname(current_url()))))?>/wiki/show/<?=$project->id?>/" "<?=site_url()?>/wiki/show/<?=$project->id?>/"
); );
} }
</script> </script>

View File

@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/common.css" /> <link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/common.css" />
<link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/project.css" /> <link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/issue.css" />
<title><?=htmlspecialchars($issue->id)?></title> <title><?=htmlspecialchars($issue->id)?></title>
</head> </head>
@ -31,92 +31,79 @@ $this->load->view (
<!----------------------------------------------------------------------------> <!---------------------------------------------------------------------------->
<div class="mainarea" id="issue_edit_mainarea"> <div class="mainarea" id="project_issue_edit_mainarea">
<?php if ($message != "") print '<div id="issue_edit_message" class="form_message">'.htmlspecialchars($message).'</div>'; ?> <?php
if ($message != "")
{
print '<div id="project_issue_edit_message" class="form_message">';
print htmlspecialchars($message);
print '</div>';
}
?>
<?=form_open("issue/{$mode}/{$project->id}/".$this->converter->AsciiToHex($issue->id))?> <?=form_open("issue/{$mode}/{$project->id}/".$this->converter->AsciiToHex($issue->id))?>
<?=form_fieldset()?> <?=form_fieldset()?>
<div> <div>
<?php if ($mode == 'create'): ?> <?=form_hidden('issue_id', set_value('issue_id', $issue->id))?>
<?=form_hidden('issue_id', set_value('issue_id', $issue->id))?> <?=form_hidden('issue_projectid', set_value('issue_projectid', $issue->projectid))?>
<?php else: ?> <?=form_hidden('issue_status', set_value('issue_status', $issue->status))?>
<div> <?=form_hidden('issue_priority', set_value('issue_priority', $issue->priority))?>
<?=form_label($this->lang->line('ID').': ', 'issue_id')?> <?=form_hidden('issue_owner', set_value('issue_owner', $issue->owner))?>
<?=form_error('issue_id');?>
</div>
<div>
<?=form_input('issue_id', set_value('issue_id', $issue->id), 'readonly="readonly"')?>
</div>
<?php endif; ?>
</div> </div>
<div> <div id='project_issue_edit_mainarea_type'>
<?php
if ($mode == 'update')
{
print form_hidden('issue_type', set_value('issue_type', $issue->type));
}
else
{
print form_label($this->lang->line('Type').': ', 'issue_type');
print form_dropdown (
'issue_type',
$issue_type_array,
set_value('issue_type', $issue->type),
'id="project_issue_type"');
print form_error('issue_type');
}
?>
</div>
<div id='project_issue_edit_mainarea_summary'>
<div> <div>
<?=form_label($this->lang->line('Summary').': ', 'issue_summary')?> <?=form_label($this->lang->line('Summary').': ', 'issue_summary')?>
<?=form_error('issue_summary');?> <?=form_error('issue_summary');?>
</div> </div>
<div> <div>
<?=form_input('issue_summary', set_value('issue_summary', $issue->summary), 'size="80"')?> <?=form_input('issue_summary',
set_value('issue_summary', $issue->summary),
'size="80" id="project_issue_summary"')
?>
</div> </div>
</div> </div>
<div> <div id='project_issue_edit_mainarea_description'>
<div> <div>
<?=form_label($this->lang->line('Description').': ', 'issue_description')?> <?=form_label($this->lang->line('Description').': ', 'issue_description')?>
<?=form_error('issue_description');?> <?=form_error('issue_description');?>
</div> </div>
<div> <div>
<?=form_textarea('issue_description', set_value('issue_description', $issue->description), 'id="issue_description"')?> <?php
$xdata = array (
'name' => 'issue_description',
'value' => set_value ('issue_description', $issue->description),
'id' => 'project_issue_description',
'rows' => 20,
'cols' => 80
);
print form_textarea ($xdata);
?>
</div> </div>
</div> </div>
<div> <div id='project_issue_edit_mainarea_buttons'>
<div>
<?=form_label($this->lang->line('Type').': ', 'issue_type')?>
<?=form_error('issue_type');?>
</div>
<div>
<?=form_input('issue_type', set_value('issue_type', $issue->type), 'id="issue_type"')?>
</div>
</div>
<div>
<div>
<?=form_label($this->lang->line('Priority').': ', 'issue_priority')?>
<?=form_error('issue_priority');?>
</div>
<div>
<?=form_input('issue_priority', set_value('issue_priority', $issue->priority))?>
</div>
</div>
<div>
<div>
<?=form_label($this->lang->line('Status').': ', 'issue_status')?>
<?=form_error('issue_status');?>
</div>
<div>
<?=form_input('issue_status', set_value('issue_status', $issue->status))?>
</div>
</div>
<div>
<div>
<?=form_label($this->lang->line('Owner').': ', 'issue_owner')?>
<?=form_error('issue_owner');?>
</div>
<div>
<?=form_input('issue_owner', set_value('issue_owner', $issue->owner))?>
</div>
</div>
<div>
<?=form_hidden('issue_projectid', set_value('issue_projectid', $issue->projectid))?>
</div>
<div>
<?php $caption = ($mode == 'update')? $this->lang->line('Update'): $this->lang->line('Create'); ?> <?php $caption = ($mode == 'update')? $this->lang->line('Update'): $this->lang->line('Create'); ?>
<?=form_submit('issue', $caption)?> <?=form_submit('issue', $caption)?>
</div> </div>
@ -124,7 +111,7 @@ $this->load->view (
<?=form_fieldset_close()?> <?=form_fieldset_close()?>
<?=form_close();?> <?=form_close();?>
</div> <!-- issue_edit_mainarea --> </div> <!-- project_issue_edit_mainarea -->
<!----------------------------------------------------------------------------> <!---------------------------------------------------------------------------->

View File

@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/common.css" /> <link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/common.css" />
<link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/project.css" /> <link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/issue.css" />
<script type="text/javascript" src="<?=base_url()?>/js/jquery.min.js"></script> <script type="text/javascript" src="<?=base_url()?>/js/jquery.min.js"></script>
<script type="text/javascript" src="<?=base_url()?>/js/jquery-ui.min.js"></script> <script type="text/javascript" src="<?=base_url()?>/js/jquery-ui.min.js"></script>
@ -20,7 +20,7 @@ $(
buttons: { buttons: {
'Ok': function () { 'Ok': function () {
$('#filter_owner').val ($('#jq_owner').val()); $('#filter_owner').val ($('#jq_owner').val());
$('#filter_status').val ($('#jq_status').val()); $('#filter_summary').val ($('#jq_status').val());
$(this).dialog('close'); $(this).dialog('close');
} }
}, },
@ -32,7 +32,7 @@ $(
$("#project_issue_home_mainarea_filter_open").button().click ( $("#project_issue_home_mainarea_filter_open").button().click (
function () { function () {
$('#jq_owner').val ($('#filter_owner').val()); $('#jq_owner').val ($('#filter_owner').val());
$('#jq_status').val ($('#filter_status').val()); $('#jq_status').val ($('#filter_summary').val());
$('#project_issue_home_mainarea_options').dialog('open'); $('#project_issue_home_mainarea_options').dialog('open');
} }
); );
@ -40,7 +40,7 @@ $(
); );
</script> </script>
<title><?=htmlspecialchars($project->id)?></title> <title><?=htmlspecialchars($project->name)?></title>
</head> </head>
<body> <body>
@ -76,8 +76,8 @@ $this->load->view (
<input type="hidden" id="filter_owner" name="filter_owner" value='<?=$filter->owner?>' /> <input type="hidden" id="filter_owner" name="filter_owner" value='<?=$filter->owner?>' />
<?=form_label ($this->lang->line('Status'), 'form_status')?> <?=form_label ($this->lang->line('Summary'), 'form_summary')?>
<?=form_input('filter_status', set_value('filter_status', $filter->status), 'id="filter_status"')?> <?=form_input('filter_summary', set_value('filter_summary', $filter->summary), 'id="filter_summary"')?>
<?=form_submit('filter', 'Search')?> <?=form_submit('filter', 'Search')?>
@ -104,21 +104,62 @@ if (empty($issues))
} }
else else
{ {
print '<ul>'; print '<table id="project_issue_home_mainarea_result_table">';
foreach ($issues as $issue) print '<tr class="heading">';
print '<th class="project_issue_home_mainarea_result_table_id">' . $this->lang->line('ID') . '</th>';
print '<th class="project_issue_home_mainarea_result_table_type">' . $this->lang->line('Type') . '</th>';
print '<th class="project_issue_home_mainarea_result_table_status">' . $this->lang->line('Status') . '</th>';
print '<th class="project_issue_home_mainarea_result_table_priority">' . $this->lang->line('Priority') . '</th>';
print '<th class="project_issue_home_mainarea_result_table_owner">' . $this->lang->line('Owner') . '</th>';
print '<th class="project_issue_home_mainarea_result_table_summary">' . $this->lang->line('Summary') . '</th>';
print '</tr>';
$rowclasses = array ('odd', 'even'); $rowno = 1;
foreach ($issues as $issue)
{ {
$hexid = $this->converter->AsciiToHex ($issue->id); $hexid = $this->converter->AsciiToHex ($issue->id);
print '<li>';
$rowclass = $rowclasses[++$rowno % 2];
print "<tr class='{$rowclass}'>";
print '<td class="project_issue_home_mainarea_result_table_id">';
print anchor ("issue/show/{$project->id}/{$hexid}", htmlspecialchars($issue->id)); print anchor ("issue/show/{$project->id}/{$hexid}", htmlspecialchars($issue->id));
print ': '; print '</td>';
print htmlspecialchars($issue->summary);
print '<td class="project_issue_home_mainarea_result_table_type">';
print (htmlspecialchars(
array_key_exists($issue->type, $issue_type_array)?
$issue_type_array[$issue->type]: $issue->type));
print '</td>';
print '<td class="project_issue_home_mainarea_result_table_status">';
print (htmlspecialchars(
array_key_exists($issue->status, $issue_status_array)?
$issue_status_array[$issue->status]: $issue->status));
print '</td>';
print '<td class="project_issue_home_mainarea_result_table_priority">';
print (htmlspecialchars(
array_key_exists($issue->priority, $issue_priority_array)?
$issue_priority_array[$issue->priority]: $issue->priority));
print '</td>';
print '<td class="project_issue_home_mainarea_result_table_owner">';
print htmlspecialchars($issue->owner); print htmlspecialchars($issue->owner);
print htmlspecialchars($issue->createdby); print '</td>';
print '</li>'; print '<td class="project_issue_home_mainarea_result_table_summary">';
print htmlspecialchars($issue->summary);
print '</td>';
print '</tr>';
} }
print '</ul>';
print '<tr class="foot">';
print "<td colspan='6' class='pages'>{$page_links}</td>";
print '</tr>';
print '</table>';
} }
?> ?>
</div> <!-- project_issue_home_mainarea_result --> </div> <!-- project_issue_home_mainarea_result -->

View File

@ -3,57 +3,147 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/common.css" /> <link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/common.css" />
<link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/project.css" /> <link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/issue.css" />
<script type="text/javascript" src="<?=base_url()?>/js/creole.js"></script> <script type="text/javascript" src="<?=base_url()?>/js/creole.js"></script>
<script type="text/javascript" src="<?=base_url()?>/js/jquery.min.js"></script> <script type="text/javascript" src="<?=base_url()?>/js/jquery.min.js"></script>
<script type="text/javascript" src="<?=base_url()?>/js/jquery-ui.min.js"></script> <script type="text/javascript" src="<?=base_url()?>/js/jquery-ui.min.js"></script>
<link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/jquery-ui.css" /> <link type="text/css" rel="stylesheet" href="<?=base_url()?>/css/jquery-ui.css" />
<script type="text/javascript"> <script type="text/javascript">
$(
function () { $.widget("ui.combobox", {
$("#project_issue_show_mainarea_change_form").dialog ( _create: function() {
{ var self = this;
title: 'Change', var select = this.element.hide();
autoOpen: false, var input = $("<input>").insertAfter(select);
modal: true,
width: '85%', input.autocomplete({
buttons: { source: function(request, response) {
'Submit': function () { var matcher = new RegExp(request.term, "i");
$(this).dialog('close'); response(select.children("option").map(function() {
$('#issue').submit (); var text = $(this).text();
} if (!request.term || matcher.test(text))
return {
id: $(this).val(),
label: text.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + request.term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"),
value: text
};
}));
},
delay: 0,
select: function(e, ui) {
if (!ui.item) {
// remove invalid value, as it didn't match anything
$(this).val("");
return false;
}
$(this).focus();
select.val(ui.item.id);
self._trigger("selected", null, {
item: select.find("[value='" + ui.item.id + "']")
});
}, },
close: function() {} minLength: 0
} })
);
var fn = function() {
// close if already visible
//if (input.autocomplete("widget").is(":visible")) {
// input.autocomplete("close");
// return;
//}
// pass empty string as value to search for, displaying all results
input.autocomplete("search", "");
input.focus();
};
$("#project_issue_show_mainarea_change_form_open").button().click ( input.click (fn);
function () { input.focusin (fn);
$('#project_issue_show_mainarea_change_form').dialog('open');
} input.addClass("ui-widget ui-widget-content");
);
} }
); });
$(function () {
/*
$("#issue_change_type").combobox();
$("#issue_change_status").combobox();
$("#issue_change_priority").combobox();
*/
/*$("#issue_change_owner").combobox();*/
$("#project_issue_show_mainarea_change_form").dialog (
{
title: '<?=$this->lang->line('Change')?>',
autoOpen: false,
modal: true,
width: '85%',
buttons: {
'<?=$this->lang->line('Cancel')?>': function () {
$(this).dialog('close');
},
'<?=$this->lang->line('OK')?>': function () {
var comment = $('#issue_change_comment');
if (comment.val().trim().length <= 0)
{
comment.addClass ('ui-state-error');
setTimeout (function () {
comment.removeClass ('ui-state-error', 500);
}, 500);
}
else
{
$(this).dialog('close');
$('#issue_change').val ('change');
$('#project_issue_change_form').submit ();
}
}
},
close: function() { }
}
);
$("#project_issue_show_mainarea_change_form_open").button().click (
function () {
$('#project_issue_show_mainarea_change_form').dialog('open');
}
);
$("#project_issue_show_mainarea_undo_change_confirm").dialog (
{
title: '<?=$this->lang->line('Undo')?>',
resizable: false,
autoOpen: false,
modal: true,
buttons: {
'<?=$this->lang->line('Cancel')?>': function () {
$(this).dialog('close');
},
'<?=$this->lang->line('OK')?>': function () {
$('#issue_change').val ('undo');
$('#project_issue_change_form').submit ();
$(this).dialog('close');
}
},
close: function() { }
}
);
$("#project_issue_show_mainarea_undo_change").button().click (
function () {
$('#project_issue_show_mainarea_undo_change_confirm').dialog('open');
}
);
});
</script> </script>
<title><?=htmlspecialchars($issue->id)?></title> <title><?=htmlspecialchars($issue->id)?></title>
</head> </head>
<script type="text/javascript">
function render_wiki()
{
creole_render_wiki (
"project_issue_show_mainarea_description_pre",
"project_issue_show_mainarea_description",
"<?=site_url()?>/issue/show/<?=$project->id?>/"
);
}
</script>
<body onLoad="render_wiki()"> <body onLoad="render_wiki()">
<div class="content" id="project_issue_show_content"> <div class="content" id="project_issue_show_content">
@ -90,10 +180,39 @@ $this->load->view (
</div> </div>
<div class="infostrip" id="project_issue_show_mainarea_infostrip"> <div class="infostrip" id="project_issue_show_mainarea_infostrip">
Reported by <?=htmlspecialchars($issue->createdby)?> on <?=$issue->createdon?> | <?php
<?=$this->lang->line('Status') ?>: <?=htmlspecialchars($issue->status)?> | print $this->lang->line('Type');
<?=$this->lang->line('Type') ?>: <?=htmlspecialchars($issue->type)?> print ': ';
<a id="project_issue_show_mainarea_change_form_open" href='#'>Change</a> print htmlspecialchars(
array_key_exists($issue->type, $issue_type_array)?
$issue_type_array[$issue->type]: $issue->type
);
print ' | ';
print $this->lang->line('Status');
print ': ';
print htmlspecialchars(
array_key_exists($issue->status, $issue_status_array)?
$issue_status_array[$issue->status]: $issue->status
);
print ' | ';
print $this->lang->line('Priority');
print ': ';
print htmlspecialchars(
array_key_exists($issue->priority, $issue_priority_array)?
$issue_priority_array[$issue->priority]: $issue->priority
);
print ' | ';
if ($issue->owner != '')
{
print $this->lang->line('Owner');
print ': ';
print htmlspecialchars($issue->owner);
print ' | ';
}
?>
<a id="project_issue_show_mainarea_change_form_open" href="#"><?=$this->lang->line('Change')?></a>
</div> </div>
<div id="project_issue_show_mainarea_description"> <div id="project_issue_show_mainarea_description">
@ -104,66 +223,176 @@ $this->load->view (
<div id="project_issue_show_mainarea_changes"> <div id="project_issue_show_mainarea_changes">
<?php <?php
print "<ul>"; $commentno = 0;
foreach ($issue->changes as $change)
{ $msgfmt_changed = $this->lang->line ('ISSUE_MSG_CHANGED_X_FROM_Y_TO_Z');
$count = count($issue->changes);
if ($count > 1)
{
print '<div class="infostrip">';
print '<span class="title">';
print $this->lang->line('Change log');
print '</span>';
print '<a id="project_issue_show_mainarea_undo_change" href="#">';
print $this->lang->line('Undo');
print '</a>';
print '</div>';
}
print '<table id="project_issue_show_mainarea_changes_table">';
while ($count > 1)
{
$new = $issue->changes[--$count];
$old = $issue->changes[$count-1];
print "<tr>";
print '<li>'; print '<td class="project_issue_show_mainarea_changes_table_date">';
print date ('Y-m-d', strtotime($change->updatedon)) . ' ' . htmlspecialchars($change->status); print '<span title="';
print ' '; print date ('Y-m-d H:s:i', strtotime($new->updatedon));
print htmlspecialchars($change->comment); print '">';
print '</li>'; print date ('Y-m-d', strtotime($new->updatedon));
} print '</span>';
print "</ul>"; print '</td>';
print '<td class="project_issue_show_mainarea_changes_table_updater">';
print htmlspecialchars($new->updatedby);
print '</td>';
print '<td class="project_issue_show_mainarea_changes_table_details">';
if ($new->comment != "")
{
print "<div id='project_issue_show_mainarea_changes_comment_{$commentno}' class='project_issue_show_mainarea_changes_comment'>";
print "<pre id='project_issue_show_mainarea_changes_comment_pre_{$commentno}'>";
print htmlspecialchars($new->comment);
print '</pre>';
print '</div>';
$commentno++;
}
print '<div class="project_issue_show_mainarea_changes_list">';
print '<ul>';
if ($new->type != $old->type)
{
printf ("<li>{$msgfmt_changed}</li>",
strtolower($this->lang->line('Type')),
htmlspecialchars(
array_key_exists($old->type, $issue_type_array)?
$issue_type_array[$old->type]: $old->type),
htmlspecialchars(
array_key_exists($new->type, $issue_type_array)?
$issue_type_array[$new->type]: $new->type));
}
if ($new->status != $old->status)
{
printf ("<li>{$msgfmt_changed}</li>",
strtolower($this->lang->line('Status')),
htmlspecialchars(
array_key_exists($old->status, $issue_status_array)?
$issue_status_array[$old->status]: $old->status),
htmlspecialchars(
array_key_exists($new->status, $issue_status_array)?
$issue_status_array[$new->status]: $new->status));
}
if ($new->priority != $old->priority)
{
printf ("<li>{$msgfmt_changed}</li>",
strtolower($this->lang->line('Priority')),
htmlspecialchars(
array_key_exists($old->priority, $issue_priority_array)?
$issue_priority_array[$old->priority]: $old->priority),
htmlspecialchars(
array_key_exists($new->priority, $issue_priority_array)?
$issue_priority_array[$new->priority]: $new->priority));
}
if ($new->owner != $old->owner)
{
printf ("<li>{$msgfmt_changed}</li>",
strtolower($this->lang->line('Owner')),
htmlspecialchars($old->owner), htmlspecialchars($new->owner));
}
print '</ul>';
print '</div>';
print '</td>';
print '</tr>';
}
print '</table>';
?> ?>
</div> </div>
<div id="project_issue_show_mainarea_change_form"> <div id="project_issue_show_mainarea_change_form">
<?=form_open("issue/show/{$project->id}/{$hexid}/", 'id="issue"')?> <?=form_open("issue/show/{$project->id}/{$hexid}/", 'id="project_issue_change_form"')?>
<?=form_hidden ('issue_change', 'yes');?> <input type='hidden' name='issue_change' id='issue_change' value='change' />
<div> <div>
<?=form_label ($this->lang->line('Type'), 'issue_change_type')?> <?=form_label ($this->lang->line('Type'),
<?=form_input('issue_change_type', set_value('issue_change_type', $issue->type), 'id="issue_change_type" class="text ui-widget-content ui-corner-all"')?> 'issue_change_type')
?>
<?=form_dropdown('issue_change_type',
$issue_type_array,
set_value('issue_change_type', $issue->type),
'id="issue_change_type"')
?>
<?=form_label ($this->lang->line('Status'),
'issue_change_status')
?>
<?=form_dropdown('issue_change_status',
$issue_status_array,
set_value('issue_change_status', $issue->status),
'id="issue_change_status"')
?>
<?=form_label ($this->lang->line('Priority'),
'issue_change_priority')
?>
<?=form_dropdown (
'issue_change_priority',
$issue_priority_array,
set_value('issue_change_priority', $issue->priority),
'id="issue_change_priority"')
?>
</div> </div>
<div> <div>
<?=form_label ($this->lang->line('Status'), 'issue_change_status')?> <?=form_label ($this->lang->line('Owner'),
<?=form_input('issue_change_status', set_value('issue_change_status', $issue->status), 'id="issue_change_status" class="text ui-widget-content ui-corner-all"')?> 'issue_change_owner')
?>
<?=form_input('issue_change_owner',
set_value('issue_change_owner', $issue->owner),
'id="issue_change_owner"')
?>
</div> </div>
<div> <div>
<?=form_label ($this->lang->line('Owner'), 'issue_change_owner')?> <?=form_label ($this->lang->line('Comment'), 'issue_change_comment')?>
<?=form_input('issue_change_owner', set_value('issue_change_owner', $issue->owner), 'id="issue_change_owner" class="text ui-widget-content ui-corner-all"')?>
</div>
<div>
<?=form_label ($this->lang->line('Priority'), 'issue_change_priority')?>
<?=form_input('issue_change_priority', set_value('issue_change_priority', $issue->priority), 'id="issue_change_priority" class="text ui-widget-content ui-corner-all"')?>
</div>
<div>
<?=form_label ('Comment', 'issue_change_comment')?>
<?php <?php
$xdata = array ( $xdata = array (
'name' => 'issue_change_comment', 'name' => 'issue_change_comment',
'value' => set_value ('issue_change_comment', ''), 'value' => set_value ('issue_change_comment', ''),
'id' => 'issue_change_comment', 'id' => 'issue_change_comment',
'rows' => 3, 'rows' => 10,
'cols' => 80, 'cols' => 80
'class' => 'text ui-widget-content ui-corner-all'
); );
print form_textarea ($xdata); print form_textarea ($xdata);
?> ?>
</div> </div>
<?=form_close()?> <?=form_close()?>
</div> <!-- project_issue_show_change_form --> </div> <!-- project_issue_show_change_form -->
<div id="project_issue_show_mainarea_undo_change_confirm">
<?=$this->lang->line ('ISSUE_MSG_CONFIRM_UNDO')?>
</div>
</div> <!-- project_issue_show_mainarea --> </div> <!-- project_issue_show_mainarea -->
<!----------------------------------------------------------------------------> <!---------------------------------------------------------------------------->
@ -174,6 +403,32 @@ print "</ul>";
</div> <!-- project_issue_show_content --> </div> <!-- project_issue_show_content -->
<script type="text/javascript">
function render_wiki()
{
<?php $creole_base = site_url() . "/wiki/show/{$project->id}/"; ?>
creole_render_wiki (
"project_issue_show_mainarea_description_pre",
"project_issue_show_mainarea_description",
"<?=$creole_base?>"
);
<?php
if ($commentno > 0)
{
for ($xxx = 0; $xxx < $commentno; $xxx++)
{
print "creole_render_wiki (
'project_issue_show_mainarea_changes_comment_pre_{$xxx}',
'project_issue_show_mainarea_changes_comment_{$xxx}',
'{$creole_base}');";
}
}
?>
}
</script>
</body> </body>
</html> </html>

View File

@ -167,6 +167,7 @@ $this->load->view (
?> ?>
<tr class='foot'> <tr class='foot'>
<td colspan='<?=$numcols?>' class='pages'><?= $page_links ?></td> <td colspan='<?=$numcols?>' class='pages'><?= $page_links ?></td>
</tr>
</table> </table>
</div> <!-- log_mainarea_result --> </div> <!-- log_mainarea_result -->

View File

@ -29,6 +29,7 @@ function load_ini ($file)
array ('sysadmin_userids', 'string', ''), array ('sysadmin_userids', 'string', ''),
array ('max_upload_size', 'string', '10000'), // kbytes array ('max_upload_size', 'string', '10000'), // kbytes
array ('max_latest_projects', 'integer', 10), array ('max_latest_projects', 'integer', 10),
array ('max_issues_per_page', 'integer', 50),
array ('max_logs_per_page', 'integer', 50), array ('max_logs_per_page', 'integer', 50),
array ('max_logs_in_site_home', 'integer', 10), array ('max_logs_in_site_home', 'integer', 10),
array ('max_logs_in_project_home', 'integer', 5), array ('max_logs_in_project_home', 'integer', 5),

View File

@ -3,6 +3,7 @@ SUBDIRS = images
wwwdir=$(WWWDIR)/css wwwdir=$(WWWDIR)/css
www_DATA = \ www_DATA = \
common.css \ common.css \
issue.css \
jquery-ui.css \ jquery-ui.css \
project.css \ project.css \
websvn.css websvn.css

View File

@ -205,6 +205,7 @@ wwwdir = $(WWWDIR)/css
SUBDIRS = images SUBDIRS = images
www_DATA = \ www_DATA = \
common.css \ common.css \
issue.css \
jquery-ui.css \ jquery-ui.css \
project.css \ project.css \
websvn.css websvn.css

View File

@ -396,3 +396,7 @@ pre.prettyprint .nocode a:hover {
color: red; color: red;
} }
.content span.quoted {
color: #bb2322;
font-style: italic;
}

163
codepot/src/css/issue.css Normal file
View File

@ -0,0 +1,163 @@
/*---------------------------------------------
* issue home
*---------------------------------------------*/
#project_issue_home_mainarea_result {
overflow: auto;
}
#project_issue_home_mainarea_result_table {
border-collapse: collapse;
width: 100%;
font-size: inherit;
}
#project_issue_home_mainarea_result_table td.pages {
padding-top: 1em;
text-align: center;
font-weight: bold;
}
.project_issue_home_mainarea_result_table_id {
white-space: nowrap;
width: 1px;
}
.project_issue_home_mainarea_result_table_type {
white-space: nowrap;
width: 1px;
}
.project_issue_home_mainarea_result_table_status {
white-space: nowrap;
width: 1px;
}
.project_issue_home_mainarea_result_table_priority {
white-space: nowrap;
width: 1px;
}
.project_issue_home_mainarea_result_table_owner {
white-space: nowrap;
width: 1px;
}
.project_issue_home_mainarea_result_table_summary {
white-space: nowrap;
}
/*---------------------------------------------
* issue show
*---------------------------------------------*/
#project_issue_show_mainarea_change_form {
font-size: .9em;
}
#project_issue_show_mainarea_change_form div {
padding: 0.3em;
}
#project_issue_show_mainarea_change_form input {
padding: 1px;
}
#project_issue_show_mainarea_change_form select {
padding: 1px;
}
#project_issue_show_mainarea_change_form textarea {
display: block;
padding: 1px;
font-size: inherit;
font-family: inherit;
width: 100%;
}
#project_issue_show_mainarea_changes {
margin-top: 1em;
padding-top: 0.5em;
padding-bottom: 0.5em;
overflow: auto;
}
#project_issue_show_mainarea_changes .infostrip {
margin-bottom: 0.5em;
}
#project_issue_show_mainarea_changes .infostrip .title {
float: left;
}
#project_issue_show_mainarea_changes_table {
border-collapse: collapse;
width: 100%;
font-size: inherit;
}
#project_issue_show_mainarea_changes_table td.project_issue_show_mainarea_changes_table_date {
width: 1px;
white-space: nowrap;
vertical-align: top;
padding-top: 0.2em;
padding-bottom: 0.2em;
border-bottom: 1px solid lightgray;
}
#project_issue_show_mainarea_changes_table td.project_issue_show_mainarea_changes_table_updater {
width: 1px;
white-space: nowrap;
vertical-align: top;
padding-top: 0.2em;
padding-bottom: 0.2em;
border-bottom: 1px solid lightgray;
}
#project_issue_show_mainarea_changes_table td.project_issue_show_mainarea_changes_table_details {
white-space: nowrap;
vertical-align: top;
padding-top: 0.2em;
padding-bottom: 0.2em;
border-bottom: 1px solid lightgray;
}
.project_issue_show_mainarea_changes_list {
background-color: #F1F1FF;
}
.project_issue_show_mainarea_changes_list ul {
list-style: square;
}
.project_issue_show_mainarea_changes_list ul li {
padding-bottom: 0.3em;
}
.project_issue_show_mainarea_changes_comment p {
margin-top: 0;
}
/*---------------------------------------------
* issue edit
*---------------------------------------------*/
#project_issue_edit_mainarea_type {
padding-bottom: 0.3em;
}
#project_issue_edit_mainarea form textarea {
display: block;
padding: 1px;
font-size: inherit;
font-family: inherit;
width: 100%;
}
#project_issue_summary {
width: 100%;
}
#project_issue_edit_mainarea_buttons {
padding-top: 0.5em;
}

View File

@ -332,7 +332,7 @@
text-decoration:none; text-decoration:none;
display:block; display:block;
padding:.2em .4em; padding:.2em .4em;
line-height:1.5; /*line-height:1.5;*/
} }
.ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-hover,
.ui-menu .ui-menu-item a.ui-state-active { .ui-menu .ui-menu-item a.ui-state-active {