added primitive issue comment editing
This commit is contained in:
parent
678143d72a
commit
21742a46c5
@ -24,6 +24,8 @@ UPGRADING FROM 0.2.0
|
||||
mysql> ALTER TABLE project ADD COLUMN (codecharset VARCHAR(32));
|
||||
mysql> DROP TABLE issue_attachment;
|
||||
mysql> create the issue_file_list table according to the definition found in codepot.mysql
|
||||
mysql> ALTER TABLE issue_change ADD COLUMN(createdon datetime not null, createdby varchar(32) not null);
|
||||
mysql> UPDATE issue_change SET createdby=updatedby, createdon=updatedon;
|
||||
|
||||
INSTALLATION ON CENTOS
|
||||
|
||||
|
@ -134,7 +134,9 @@ CREATE TABLE issue_change (
|
||||
priority VARCHAR(32) NOT NULL,
|
||||
comment TEXT NOT NULL,
|
||||
|
||||
createdon DATETIME NOT NULL,
|
||||
updatedon DATETIME NOT NULL,
|
||||
createdby VARCHAR(32) NOT NULL,
|
||||
updatedby VARCHAR(32) NOT NULL,
|
||||
|
||||
PRIMARY KEY (projectid, id, sno),
|
||||
|
@ -14,9 +14,9 @@
|
||||
-- DROP TABLE "cpot_log";
|
||||
-- DROP TABLE "cpot_code_review";
|
||||
-- DROP TABLE "cpot_file";
|
||||
-- DROP TABLE "cpot_issue_change_attachment";
|
||||
-- DROP TABLE "cpot_issue_change_file_list";
|
||||
-- DROP TABLE "cpot_issue_change";
|
||||
-- DROP TABLE "cpot_issue_attachment";
|
||||
-- DROP TABLE "cpot_issue_file_list";
|
||||
-- DROP TABLE "cpot_issue";
|
||||
-- DROP TABLE "cpot_wiki_attachment";
|
||||
-- DROP TABLE "cpot_wiki";
|
||||
@ -130,7 +130,9 @@ CREATE TABLE "cpot_issue_change" (
|
||||
"owner" VARCHAR(255) NOT NULL,
|
||||
"priority" VARCHAR(32) NOT NULL,
|
||||
"comment" CLOB NOT NULL,
|
||||
"createdon" TIMESTAMP NOT NULL,
|
||||
"updatedon" TIMESTAMP NOT NULL,
|
||||
"createdby" VARCHAR(32) NOT NULL,
|
||||
"updatedby" VARCHAR(32) NOT NULL,
|
||||
PRIMARY KEY ("projectid", "id", "sno"),
|
||||
CONSTRAINT issue_update_id FOREIGN KEY ("projectid","id") REFERENCES "cpot_issue"("projectid","id")
|
||||
|
@ -152,7 +152,9 @@ CREATE TABLE issue_change (
|
||||
priority VARCHAR(32) NOT NULL,
|
||||
comment TEXT NOT NULL,
|
||||
|
||||
createdon TIMESTAMP NOT NULL,
|
||||
updatedon TIMESTAMP NOT NULL,
|
||||
createdby VARCHAR(32) NOT NULL,
|
||||
updatedby VARCHAR(32) NOT NULL,
|
||||
|
||||
PRIMARY KEY (projectid, id, sno),
|
||||
|
@ -663,6 +663,67 @@ class Issue extends Controller
|
||||
print $status;
|
||||
}
|
||||
|
||||
|
||||
function xhr_edit_comment ($projectid = '', $issueid = '')
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
$this->load->model ('IssueModel', 'issues');
|
||||
|
||||
$login = $this->login->getUser ();
|
||||
$revision_saved = -1;
|
||||
|
||||
if ($login['id'] == '')
|
||||
{
|
||||
$status = 'error - anonymous user';
|
||||
}
|
||||
else
|
||||
{
|
||||
$issueid = $this->converter->HexToAscii ($issueid);
|
||||
|
||||
$project = $this->projects->get ($projectid);
|
||||
if ($project === FALSE)
|
||||
{
|
||||
$status = "error - failed to get the project {$projectid}";
|
||||
}
|
||||
else if ($project === NULL)
|
||||
{
|
||||
$status = "error - no such project {$projectid}";
|
||||
}
|
||||
else if (($comment_sno = $this->input->post('issue_edit_comment_sno')) === FALSE || $comment_sno <= 0)
|
||||
{
|
||||
$status = "error - invalid comment number";
|
||||
}
|
||||
else if (!$login['sysadmin?'] &&
|
||||
/*$this->projects->projectHasMember($projectid, $login['id']) === FALSE &&*/
|
||||
$this->issues->isIssueChangeCreatedBy($projectid, $issueid, $comment_sno, $login['id']) === FALSE)
|
||||
{
|
||||
$status = "error - comment not created by {$login['id']}";
|
||||
}
|
||||
else
|
||||
{
|
||||
$text = $this->input->post('issue_edit_comment_text');
|
||||
|
||||
if ($text === FALSE ||$text == '')
|
||||
{
|
||||
$status = "error - empty comment text";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->issues->editComment ($login['id'], $projectid, $issueid, $comment_sno, $text) === FALSE)
|
||||
{
|
||||
$status = 'error - ' . $this->issues->getErrorMessage();
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = 'ok';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print $status;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Handling of attached files share the (almost) same code
|
||||
// between issue.php and wiki.php. It would be way better
|
||||
@ -884,6 +945,25 @@ class Issue extends Controller
|
||||
}
|
||||
if ($part[2] != '') $filename = $part[2];
|
||||
}
|
||||
else if (count($part) == 2)
|
||||
{
|
||||
//$target => wikiname:attachment
|
||||
//$target => #I1:file
|
||||
if ($part[0] != '')
|
||||
{
|
||||
if ($part[0][0] == '#' && $part[0][1] == 'I')
|
||||
{
|
||||
$issueid = substr ($part[0],2);
|
||||
$wikiname = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$wikiname = $part[0];
|
||||
$issueid = '';
|
||||
}
|
||||
}
|
||||
if ($part[1] != '') $filename = $part[1];
|
||||
}
|
||||
|
||||
if ($wikiname != '')
|
||||
$this->_handle_wiki_attachment ($login, $projectid, $wikiname, $filename);
|
||||
|
@ -25,7 +25,6 @@ $lang['ISSUE_PRIORITY_OTHER'] = 'Other';
|
||||
$lang['ISSUE_MSG_CHANGED_X_TO_Z'] = "Changed <span class='quoted'>%s</span> to <span class='quoted'>%s</span>";
|
||||
$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?';
|
||||
$lang['ISSUE_MSG_CREATED'] = 'Created';
|
||||
$lang['ISSUE_MSG_NO_ISSUES_AVAILABLE'] = 'No outstanding issues';
|
||||
$lang['ISSUE_MSG_NO_SUCH_ISSUE'] = 'No such issue - %s';
|
||||
$lang['ISSUE_MSG_TOTAL_NUM_ISSUES'] = 'Total %d issues';
|
||||
|
@ -24,7 +24,6 @@ $lang['ISSUE_PRIORITY_OTHER'] = '기타';
|
||||
$lang['ISSUE_MSG_CHANGED_X_TO_Z'] = "<span class='quoted'>%s</span>을/를 <span class='quoted'>%s</span>(으)로 변경";
|
||||
$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'] = '마지막 변경내용을 취소할까요?';
|
||||
$lang['ISSUE_MSG_CREATED'] = '생성됨';
|
||||
$lang['ISSUE_MSG_NO_ISSUES_AVAILABLE'] = '처리해야 할 이슈가 없습니다';
|
||||
$lang['ISSUE_MSG_NO_SUCH_ISSUE'] = '해당 이슈가 없습니다 - %s';
|
||||
$lang['ISSUE_MSG_TOTAL_NUM_ISSUES'] = '전체 이슈 %d개';
|
||||
|
@ -181,6 +181,8 @@ class IssueModel extends Model
|
||||
|
||||
function create ($userid, $issue)
|
||||
{
|
||||
$now = codepot_nowtodbdate();
|
||||
|
||||
// TODO: check if userid can do this..
|
||||
$this->db->trans_start ();
|
||||
|
||||
@ -206,8 +208,8 @@ class IssueModel extends Model
|
||||
$this->db->set ('status', $issue->status);
|
||||
$this->db->set ('owner', $issue->owner);
|
||||
$this->db->set ('priority', $issue->priority);
|
||||
$this->db->set ('createdon', codepot_nowtodbdate());
|
||||
$this->db->set ('updatedon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('createdby', $userid);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->insert ('issue');
|
||||
@ -220,11 +222,13 @@ class IssueModel extends Model
|
||||
$this->db->set ('owner', $issue->owner);
|
||||
$this->db->set ('comment', '');
|
||||
$this->db->set ('priority', $issue->priority);
|
||||
$this->db->set ('updatedon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('createdby', $userid);
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->insert ('issue_change');
|
||||
|
||||
$this->db->set ('createdon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('type', 'issue');
|
||||
$this->db->set ('action', 'create');
|
||||
$this->db->set ('projectid', $issue->projectid);
|
||||
@ -240,16 +244,18 @@ class IssueModel extends Model
|
||||
|
||||
function update_partial ($userid, $issue)
|
||||
{
|
||||
$now = codepot_nowtodbdate();
|
||||
|
||||
$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', codepot_nowtodbdate());
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->update ('issue');
|
||||
|
||||
$this->db->set ('createdon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('type', 'issue');
|
||||
$this->db->set ('action', 'update');
|
||||
$this->db->set ('projectid', $issue->projectid);
|
||||
@ -265,6 +271,8 @@ class IssueModel extends Model
|
||||
|
||||
function update ($userid, $issue)
|
||||
{
|
||||
$now = codepot_nowtodbdate();
|
||||
|
||||
// TODO: check if userid can do this..
|
||||
$this->db->trans_start ();
|
||||
$this->db->where ('projectid', $issue->projectid);
|
||||
@ -275,7 +283,7 @@ class IssueModel extends Model
|
||||
$this->db->set ('status', $issue->status);
|
||||
$this->db->set ('owner', $issue->owner);
|
||||
$this->db->set ('priority', $issue->priority);
|
||||
$this->db->set ('updatedon', codepot_nowtodbdate());
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->update ('issue');
|
||||
|
||||
@ -287,11 +295,11 @@ class IssueModel extends Model
|
||||
$this->db->set ('owner', $issue->owner);
|
||||
$this->db->set ('priority', $issue->priority);
|
||||
$this->db->set ('comment', '');
|
||||
$this->db->set ('updatedon', codepot_nowtodbdate());
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->update ('issue_change');
|
||||
|
||||
$this->db->set ('createdon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('type', 'issue');
|
||||
$this->db->set ('action', 'update');
|
||||
$this->db->set ('projectid', $issue->projectid);
|
||||
@ -307,6 +315,8 @@ class IssueModel extends Model
|
||||
|
||||
function change ($userid, $project, $id, $change)
|
||||
{
|
||||
$now = codepot_nowtodbdate();
|
||||
|
||||
$this->db->trans_start ();
|
||||
|
||||
$this->db->where ('projectid', $project->id);
|
||||
@ -330,7 +340,9 @@ class IssueModel extends Model
|
||||
$this->db->set ('owner', $change->owner);
|
||||
$this->db->set ('priority', $change->priority);
|
||||
$this->db->set ('comment', $change->comment);
|
||||
$this->db->set ('updatedon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('createdby', $userid);
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->insert ('issue_change');
|
||||
|
||||
@ -340,11 +352,11 @@ class IssueModel extends Model
|
||||
$this->db->set ('status', $change->status);
|
||||
$this->db->set ('owner', $change->owner);
|
||||
$this->db->set ('priority', $change->priority);
|
||||
$this->db->set ('updatedon', codepot_nowtodbdate());
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->update ('issue');
|
||||
|
||||
$this->db->set ('createdon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('type', 'issue');
|
||||
$this->db->set ('action', 'change');
|
||||
$this->db->set ('projectid', $project->id);
|
||||
@ -505,6 +517,8 @@ class IssueModel extends Model
|
||||
$this->db->set ('owner', $issue->owner);
|
||||
$this->db->set ('comment', '');
|
||||
$this->db->set ('priority', $issue->priority);
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('createdby', $userid);
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->insert ('issue_change');
|
||||
@ -888,7 +902,7 @@ class IssueModel extends Model
|
||||
}
|
||||
}
|
||||
|
||||
$this->db->set ('createdon', codepot_nowtodbdate());
|
||||
$this->db->set ('createdon', $now);
|
||||
$this->db->set ('type', 'issue');
|
||||
$this->db->set ('action', 'update');
|
||||
$this->db->set ('projectid', $projectid);
|
||||
@ -917,6 +931,55 @@ class IssueModel extends Model
|
||||
return $x;
|
||||
}
|
||||
|
||||
private function _edit_comment ($userid, $projectid, $issueid, $sno, $text)
|
||||
{
|
||||
$this->db->trans_begin (); // manual transaction. not using trans_start().
|
||||
|
||||
$now = codepot_nowtodbdate();
|
||||
|
||||
$this->db->where ('projectid', $projectid);
|
||||
$this->db->where ('id', $issueid);
|
||||
$this->db->where ('sno', $sno);
|
||||
$this->db->set ('comment', $text);
|
||||
$this->db->set ('updatedon', $now);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->update ('issue_change');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
$this->db->set ('createdon', codepot_nowtodbdate());
|
||||
$this->db->set ('type', 'issue');
|
||||
$this->db->set ('action', 'update');
|
||||
$this->db->set ('projectid', $projectid);
|
||||
$this->db->set ('userid', $userid);
|
||||
$this->db->set ('message', $issueid);
|
||||
$this->db->insert ('log');
|
||||
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}*/
|
||||
|
||||
$this->db->trans_commit ();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
function editComment ($userid, $projectid, $issueid, $sno, $text)
|
||||
{
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$errmsg = '';
|
||||
$x = $this->_edit_comment ($userid, $projectid, $issueid, $sno, $text);
|
||||
restore_error_handler ();
|
||||
return $x;
|
||||
}
|
||||
|
||||
function isIssueCreatedBy ($projectid, $issueid, $userid)
|
||||
{
|
||||
$this->db->trans_begin (); // manual transaction. not using trans_start().
|
||||
@ -926,6 +989,7 @@ class IssueModel extends Model
|
||||
$query = $this->db->get ('issue');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
@ -940,7 +1004,63 @@ class IssueModel extends Model
|
||||
$this->db->trans_commit ();
|
||||
|
||||
$issue = &$result[0];
|
||||
return ($issue->created_by == $userid);
|
||||
return ($issue->createdby == $userid);
|
||||
}
|
||||
|
||||
function isIssueChangeCreatedBy ($projectid, $issueid, $sno, $userid)
|
||||
{
|
||||
$this->db->trans_begin (); // manual transaction. not using trans_start().
|
||||
|
||||
$this->db->where ('projectid', $projectid);
|
||||
$this->db->where ('id', $issueid);
|
||||
$this->db->where ('sno', $sno);
|
||||
$query = $this->db->get ('issue_change');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$result = $query->result ();
|
||||
if (empty($result))
|
||||
{
|
||||
$this->db->trans_commit ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$this->db->trans_commit ();
|
||||
|
||||
$issue = &$result[0];
|
||||
return $issue->createdby == $userid;
|
||||
}
|
||||
|
||||
function isIssueChangeMadeBy ($projectid, $issueid, $sno, $userid)
|
||||
{
|
||||
$this->db->trans_begin (); // manual transaction. not using trans_start().
|
||||
|
||||
$this->db->where ('projectid', $projectid);
|
||||
$this->db->where ('id', $issueid);
|
||||
$this->db->where ('sno', $sno);
|
||||
$query = $this->db->get ('issue_change');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$result = $query->result ();
|
||||
if (empty($result))
|
||||
{
|
||||
$this->db->trans_commit ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$this->db->trans_commit ();
|
||||
|
||||
$issue = &$result[0];
|
||||
return ($issue->createdby == $userid || $issue->updatedby == $userid);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -147,7 +147,7 @@ $this->load->view (
|
||||
if (array_key_exists('author', $h))
|
||||
{
|
||||
$user_icon_url = codepot_merge_path (site_url(), '/user/icon/' . $this->converter->AsciiToHex($h['author']));
|
||||
print "<img src='{$user_icon_url}' class='codepot-committer-icon-24x24' />";
|
||||
print "<img src='{$user_icon_url}' class='codepot-committer-icon-24x24' /> ";
|
||||
|
||||
print htmlspecialchars($h['author']);
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ function show_alert (outputMsg, titleMsg)
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,8 @@ $issue_file_count = count ($issue->files);
|
||||
|
||||
$creole_base = site_url() . "/wiki/show/{$project->id}/";
|
||||
$creole_file_base = site_url() . "/issue/file/{$project->id}/{$issue->id}/";
|
||||
|
||||
$change_count = count($issue->changes);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@ -40,13 +42,36 @@ function show_alert (outputMsg, titleMsg)
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function render_wiki()
|
||||
{
|
||||
creole_render_wiki (
|
||||
"issue_show_description_pre",
|
||||
"issue_show_description",
|
||||
"<?php print $creole_base?>",
|
||||
"<?php print $creole_file_base?>",
|
||||
false
|
||||
);
|
||||
|
||||
<?php
|
||||
for ($i = 1; $i < $change_count; $i++)
|
||||
{
|
||||
print "creole_render_wiki (
|
||||
'issue_show_comment_pre_{$i}',
|
||||
'issue_show_comment_{$i}',
|
||||
'{$creole_base}', '{$creole_file_base}', false);\n";
|
||||
}
|
||||
?>
|
||||
|
||||
prettyPrint ();
|
||||
}
|
||||
|
||||
$.widget("ui.combobox", {
|
||||
_create: function() {
|
||||
var self = this;
|
||||
@ -184,6 +209,20 @@ function preview_edit_description (input_text)
|
||||
prettyPrint ();
|
||||
}
|
||||
|
||||
|
||||
function preview_issue_change_comment(input_text)
|
||||
{
|
||||
creole_render_wiki_with_input_text (
|
||||
input_text,
|
||||
"issue_change_comment_preview",
|
||||
"<?php print $creole_base?>",
|
||||
"<?php print $creole_file_base?>",
|
||||
true
|
||||
);
|
||||
|
||||
prettyPrint ();
|
||||
}
|
||||
|
||||
var work_in_progress = false;
|
||||
|
||||
var original_file_name = [
|
||||
@ -208,6 +247,60 @@ var original_file_desc = [
|
||||
?>
|
||||
];
|
||||
|
||||
|
||||
<?php if (isset($login['id']) && $login['id'] != ''): ?>
|
||||
function save_issue_comment (comment_no)
|
||||
{
|
||||
if (!!window.FormData)
|
||||
{
|
||||
// FormData is supported
|
||||
var form_elem_id = '#issue_show_edit_comment_form_' + comment_no;
|
||||
var sno_elem_id = '#issue_show_edit_comment_sno_' + comment_no;
|
||||
var text_elem_id = '#issue_show_edit_comment_text_' + comment_no;
|
||||
var form_data = new FormData();
|
||||
|
||||
form_data.append ('issue_edit_comment_sno', $(sno_elem_id).val());
|
||||
form_data.append ('issue_edit_comment_text', $(text_elem_id).val());
|
||||
|
||||
$(form_elem_id).dialog('disable');
|
||||
$.ajax({
|
||||
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/issue/xhr_edit_comment/{$project->id}/{$hex_issue_id}"; ?>'),
|
||||
type: 'POST',
|
||||
data: form_data,
|
||||
mimeType: 'multipart/form-data',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
cache: false,
|
||||
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
$(form_elem_id).dialog('enable');
|
||||
$(form_elem_id).dialog('close');
|
||||
if (data == 'ok')
|
||||
{
|
||||
// refresh the page to the head revision
|
||||
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/issue/show/{$project->id}/${hex_issue_id}"; ?>'));
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
$(form_elem_id).dialog('enable');
|
||||
$(form_elem_id).dialog('close');
|
||||
show_alert ('Failed - ' + errorThrown, "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
|
||||
}
|
||||
<?php endif; ?>
|
||||
|
||||
$(function () {
|
||||
|
||||
$('#issue_show_state').accordion({
|
||||
@ -670,6 +763,47 @@ $(function () {
|
||||
}
|
||||
);
|
||||
|
||||
<?php if (isset($login['id']) && $login['id'] != ''): ?>
|
||||
|
||||
for (var i = 1; i < <?php print $change_count; ?>; i++)
|
||||
{
|
||||
$('#issue_show_edit_comment_form_' + i).dialog ({
|
||||
title: '<?php print $this->lang->line('Comment')?>',
|
||||
autoOpen: false,
|
||||
modal: true,
|
||||
width: '85%',
|
||||
buttons: {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
if (work_in_progress) return;
|
||||
work_in_progress = true;
|
||||
var id = $(this).attr('id');
|
||||
var comment_no = id.replace('issue_show_edit_comment_form_', '');
|
||||
save_issue_comment (comment_no);
|
||||
work_in_progress = false;
|
||||
},
|
||||
'<?php print $this->lang->line('Cancel')?>': function () {
|
||||
if (work_in_progress) return;
|
||||
$(this).dialog ('close');
|
||||
}
|
||||
},
|
||||
beforeClose: function() {
|
||||
// if importing is in progress, prevent dialog closing
|
||||
return !work_in_progress;
|
||||
}
|
||||
});
|
||||
|
||||
$('#issue_show_edit_comment_button_' + i).button().click(
|
||||
function () {
|
||||
var id = $(this).attr('id');
|
||||
var comment_no = id.replace('issue_show_edit_comment_button_', '');
|
||||
$('#issue_show_edit_comment_form_' + comment_no).dialog('open'); // @issue_show_edit_comment_form_xxx
|
||||
return false;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
render_wiki();
|
||||
});
|
||||
</script>
|
||||
@ -736,9 +870,16 @@ $this->load->view (
|
||||
</div>
|
||||
|
||||
<div id='issue_show_state' class='collapsible-box'>
|
||||
<div id='issue_show_state_header' class='collapsible-box-header'><?php print $this->lang->line('State')?></div>
|
||||
<div id='issue_show_state_body'>
|
||||
<ul>
|
||||
<div id='issue_show_metadata_header' class='collapsible-box-header'><?php print $this->lang->line('State')?></div>
|
||||
<div id='issue_show_metadata_body'>
|
||||
<ul id='issue_show_metadata_list'>
|
||||
<li><?php print $this->lang->line('Created on')?> <?php print codepot_dbdatetodispdate($issue->createdon); ?></li>
|
||||
<li><?php print $this->lang->line('Created by')?> <?php print htmlspecialchars($issue->createdby); ?></li>
|
||||
<li><?php print $this->lang->line('Last updated on')?> <?php print codepot_dbdatetodispdate($issue->updatedon); ?></li>
|
||||
<li><?php print $this->lang->line('Last updated by')?> <?php print htmlspecialchars($issue->updatedby); ?></li>
|
||||
</ul>
|
||||
|
||||
<ul id='issue_show_state_list'>
|
||||
<?php
|
||||
|
||||
$type = array_key_exists($issue->type, $issue_type_array)?
|
||||
@ -778,6 +919,8 @@ $this->load->view (
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
|
||||
<div style='clear: both'></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -838,17 +981,16 @@ $this->load->view (
|
||||
|
||||
<div id="issue_show_changes">
|
||||
<?php
|
||||
$commentno = 0;
|
||||
|
||||
$msgfmt_changed_from_to = $this->lang->line ('ISSUE_MSG_CHANGED_X_FROM_Y_TO_Z');
|
||||
$msgfmt_changed_to = $this->lang->line ('ISSUE_MSG_CHANGED_X_TO_Z');
|
||||
$count = count($issue->changes);
|
||||
|
||||
print '<table id="issue_show_changes_table" class="codepot-full-width-table">';
|
||||
while ($count > 1)
|
||||
// TODO: displa changes[0];
|
||||
for ($i = 1; $i < $change_count; $i++)
|
||||
{
|
||||
$new = $issue->changes[--$count];
|
||||
$old = $issue->changes[$count-1];
|
||||
$new = $issue->changes[$i];
|
||||
$old = $issue->changes[$i - 1];
|
||||
|
||||
print '<tr>';
|
||||
|
||||
@ -856,21 +998,31 @@ $this->load->view (
|
||||
print codepot_dbdatetodispdate($new->updatedon);
|
||||
print '</td>';
|
||||
|
||||
print '<td class="updater">';
|
||||
print htmlspecialchars($new->updatedby);
|
||||
print '</td>';
|
||||
|
||||
print '<td class="details">';
|
||||
if ($new->comment != "")
|
||||
|
||||
print "<div>";
|
||||
print "<div class='codepot-issue-comment-updater'>";
|
||||
$user_icon_url = codepot_merge_path (site_url(), '/user/icon/' . $this->converter->AsciiToHex($new->updatedby));
|
||||
print "<img src='{$user_icon_url}' class='codepot-committer-icon-24x24' /> ";
|
||||
print htmlspecialchars($new->updatedby);
|
||||
print "</div>";
|
||||
printf ("<div class='codepot-issue-comment-actions'><a href='#' id='issue_show_edit_comment_button_%d' class='codepot-issue-comment-action-button'>%s</a></div>", $i, $this->lang->line('Edit'));
|
||||
print "<div style='clear: both;'></div>";
|
||||
print "</div>";
|
||||
|
||||
$escaped_comment = htmlspecialchars($new->comment);
|
||||
if(isset($login['id']) && $login['id'] != '')
|
||||
{
|
||||
print "<div id='issue_show_changes_comment_{$commentno}' class='codepot-styled-text-view'>";
|
||||
print "<pre id='issue_show_changes_comment_pre_{$commentno}'>";
|
||||
print htmlspecialchars($new->comment);
|
||||
print '</pre>';
|
||||
print "<div id='issue_show_edit_comment_form_{$i}'>";
|
||||
printf ('<input type="hidden" id="issue_show_edit_comment_sno_%d" value="%s" />', $i, addslashes($new->sno));
|
||||
printf ('<textarea id="issue_show_edit_comment_text_%d" class="codepot-issue-edit-comment" rows="20">%s</textarea>', $i, $escaped_comment);
|
||||
print '</div>';
|
||||
$commentno++;
|
||||
}
|
||||
|
||||
print "<div id='issue_show_comment_{$i}' class='codepot-styled-text-view'>";
|
||||
printf ("<pre id='issue_show_comment_pre_%d'>%s</pre>", $i, $escaped_comment);
|
||||
print '</div>';
|
||||
|
||||
print '<div class="list">';
|
||||
print '<ul>';
|
||||
if ($new->type != $old->type)
|
||||
@ -931,21 +1083,6 @@ $this->load->view (
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
print '<tr>';
|
||||
print '<td class="date">';
|
||||
print codepot_dbdatetodispdate($issue->createdon);
|
||||
print '</td>';
|
||||
|
||||
print '<td class="updater">';
|
||||
print htmlspecialchars($issue->createdby);
|
||||
print '</td>';
|
||||
|
||||
print '<td class="details">';
|
||||
print $this->lang->line('ISSUE_MSG_CREATED');
|
||||
print '</td>';
|
||||
|
||||
print '</tr>';
|
||||
|
||||
print '</table>';
|
||||
?>
|
||||
</div> <!-- issue_show_changes -->
|
||||
@ -971,7 +1108,7 @@ $this->load->view (
|
||||
</ul>
|
||||
|
||||
<div id='issue_show_edit_description_input'>
|
||||
<textarea type='textarea' id='issue_show_edit_description' name='issue_show_edit_description' rows=24 cols=100 style='width:100%;'><?php print htmlspecialchars($issue->description); ?></textarea>
|
||||
<textarea id='issue_show_edit_description' name='issue_show_edit_description' rows=24 cols=100 style='width:100%;'><?php print htmlspecialchars($issue->description); ?></textarea>
|
||||
</div>
|
||||
<div id='issue_show_edit_description_preview' class='codepot-styled-text-preview'>
|
||||
</div>
|
||||
@ -1110,47 +1247,6 @@ $this->load->view (
|
||||
|
||||
<!---------------------------------------------------------------------------->
|
||||
|
||||
<script type="text/javascript">
|
||||
function render_wiki()
|
||||
{
|
||||
creole_render_wiki (
|
||||
"issue_show_description_pre",
|
||||
"issue_show_description",
|
||||
"<?php print $creole_base?>",
|
||||
"<?php print $creole_file_base?>",
|
||||
false
|
||||
);
|
||||
|
||||
<?php
|
||||
if ($commentno > 0)
|
||||
{
|
||||
for ($xxx = 0; $xxx < $commentno; $xxx++)
|
||||
{
|
||||
print "creole_render_wiki (
|
||||
'issue_show_changes_comment_pre_{$xxx}',
|
||||
'issue_show_changes_comment_{$xxx}',
|
||||
'{$creole_base}', '{$creole_file_base}', false);";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
prettyPrint ();
|
||||
}
|
||||
|
||||
function preview_issue_change_comment(input_text)
|
||||
{
|
||||
creole_render_wiki_with_input_text (
|
||||
input_text,
|
||||
"issue_change_comment_preview",
|
||||
"<?php print $creole_base?>",
|
||||
"<?php print $creole_file_base?>",
|
||||
true
|
||||
);
|
||||
|
||||
prettyPrint ();
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
@ -45,7 +45,7 @@ function show_alert (outputMsg, titleMsg)
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}
|
||||
@ -68,7 +68,7 @@ function show_in_progress_message (outputMsg, titleMsg)
|
||||
height: 'auto',
|
||||
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
// do nothing, don't event close the dialog.
|
||||
}
|
||||
},
|
||||
@ -381,11 +381,11 @@ function save_wiki_with_confirmation (outputMsg, titleMsg, wiki_new_name, wiki_n
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$(this).dialog("close");
|
||||
save_wiki (wiki_new_name, wiki_new_text);
|
||||
},
|
||||
"Cancel": function () {
|
||||
'<?php print $this->lang->line('Cancel')?>': function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ function show_alert (outputMsg, titleMsg)
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,27 @@
|
||||
.codepot-issue-comment-updater {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.codepot-issue-comment-actions {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.codepot-issue-comment-action-button {
|
||||
font-size: 75% !important;
|
||||
}
|
||||
|
||||
textarea.codepot-issue-edit-comment {
|
||||
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
|
||||
border: 0 none;
|
||||
width: 100%;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
|
||||
li.issue-type-defect {
|
||||
background-color: #D9534F;
|
||||
color: #FFFFFF;
|
||||
@ -179,23 +203,38 @@ li.issue-owner {
|
||||
/*---------------------------------------------
|
||||
* issue show
|
||||
*---------------------------------------------*/
|
||||
#issue_show_state_body {
|
||||
#issue_show_metadata_body {
|
||||
background-color: #FCFCFC;
|
||||
padding: 1em 1em;
|
||||
}
|
||||
|
||||
#issue_show_state_body ul {
|
||||
#issue_show_metadata_list,
|
||||
#issue_show_state_list {
|
||||
clear: both;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: outside none none;
|
||||
}
|
||||
|
||||
#issue_show_state_body ul li {
|
||||
#issue_show_state_list {
|
||||
padding-top: 0.2em;
|
||||
}
|
||||
|
||||
#issue_show_metadata_list li,
|
||||
#issue_show_state_list li {
|
||||
padding: 0.2em 0.2em 0.2em 0.2em;
|
||||
margin: 0 0.2em 0 0.2em;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#issue_show_metadata_list li {
|
||||
background-color: #EAEAEA !important;
|
||||
color: #000000 !important;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
#issue_show_change_form {
|
||||
}
|
||||
|
||||
@ -229,11 +268,6 @@ li.issue-owner {
|
||||
}
|
||||
|
||||
#issue_show_changes {
|
||||
/*
|
||||
margin-top: 1em;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
*/
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
@ -246,10 +280,7 @@ li.issue-owner {
|
||||
#issue_show_changes_table td.date {
|
||||
min-width: 5em;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
#issue_show_changes_table td.updater {
|
||||
width: 1px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#issue_show_changes_table td.details {
|
||||
@ -304,7 +335,7 @@ li.issue-owner {
|
||||
}
|
||||
|
||||
/*-----------------------------------------------
|
||||
* issue home show - edit issue dialog
|
||||
* issue show - edit issue dialog
|
||||
*-----------------------------------------------*/
|
||||
#issue_show_edit_description_tabs {
|
||||
border: none !important;
|
||||
|
Loading…
Reference in New Issue
Block a user