changed the code revision view to use xhr calls.
added preview tab to review comment dialogs in the code revision view
This commit is contained in:
parent
93f7486dfb
commit
530e38ceb5
@ -245,7 +245,7 @@ class Code extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
protected function _edit ($projectid = '', $path = '', $rev = SVN_REVISION_HEAD, $caller = 'file')
|
||||
private function _edit ($projectid = '', $path = '', $rev = SVN_REVISION_HEAD, $caller = 'file')
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
$this->load->model ('SubversionModel', 'subversion');
|
||||
@ -601,6 +601,266 @@ class Code extends Controller
|
||||
print $status;
|
||||
}
|
||||
|
||||
function xhr_edit_revision_message ($projectid = '', $rev = SVN_REVISOIN_HEAD)
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
$this->load->model ('SubversionModel', 'subversion');
|
||||
|
||||
$login = $this->login->getUser ();
|
||||
$revision_saved = -1;
|
||||
|
||||
if ($login['id'] == '')
|
||||
{
|
||||
$status = 'error - anonymous user';
|
||||
}
|
||||
else
|
||||
{
|
||||
$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 (!$login['sysadmin?'] &&
|
||||
$this->projects->projectHasMember($projectid, $login['id']) === FALSE)
|
||||
{
|
||||
$status = "error - not a member {$login['id']}";
|
||||
}
|
||||
else if ($login['id'] != $this->subversion->getRevProp($projectid, $rev, 'svn:author'))
|
||||
{
|
||||
$status = "error - not authored by {$login['id']}";
|
||||
}
|
||||
else
|
||||
{
|
||||
$logmsg = $this->input->post('code_edit_revision_message');
|
||||
if ($logmsg != $this->subversion->getRevProp ($projectid, $rev, 'svn:log'))
|
||||
{
|
||||
$affected_rev = $this->subversion->setRevProp (
|
||||
$projectid, $rev, 'svn:log', $logmsg, $login['id']);
|
||||
if ($affected_rev === FALSE)
|
||||
{
|
||||
$status = 'error - ' . $this->subversion->getErrorMessage();
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = 'ok';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = 'ok';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print $status;
|
||||
}
|
||||
|
||||
function xhr_edit_revision_tag ($projectid = '', $rev = SVN_REVISOIN_HEAD)
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
$this->load->model ('SubversionModel', 'subversion');
|
||||
|
||||
$login = $this->login->getUser ();
|
||||
$revision_saved = -1;
|
||||
|
||||
if ($login['id'] == '')
|
||||
{
|
||||
$status = 'error - anonymous user';
|
||||
}
|
||||
else
|
||||
{
|
||||
$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 (!$login['sysadmin?'] &&
|
||||
$this->projects->projectHasMember($projectid, $login['id']) === FALSE)
|
||||
{
|
||||
$status = "error - not a member {$login['id']}";
|
||||
}
|
||||
//else if ($login['id'] != $this->subversion->getRevProp($projectid, $rev, 'svn:author'))
|
||||
//{
|
||||
// $status = "error - not authored by {$login['id']}";
|
||||
//}
|
||||
else
|
||||
{
|
||||
$tag = $this->input->post('code_edit_revision_tag');
|
||||
$tag = ($tag === FALSE)? '': trim($tag);
|
||||
if (empty($tag))
|
||||
{
|
||||
// delete the tag if the value is empty
|
||||
$affected_rev = $this->subversion->killRevProp (
|
||||
$projectid, $rev, CODEPOT_SVN_TAG_PROPERTY, $login['id']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$affected_rev = $this->subversion->setRevProp (
|
||||
$projectid, $rev, CODEPOT_SVN_TAG_PROPERTY, $tag, $login['id']);
|
||||
}
|
||||
|
||||
if ($affected_rev === FALSE)
|
||||
{
|
||||
$status = 'error - ' . $this->subversion->getErrorMessage();
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = 'ok';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print $status;
|
||||
}
|
||||
|
||||
function xhr_new_review_comment ($projectid = '', $rev = SVN_REVISOIN_HEAD)
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
$this->load->model ('SubversionModel', 'subversion');
|
||||
$this->load->model ('CodeReviewModel', 'code_review');
|
||||
|
||||
$login = $this->login->getUser ();
|
||||
$revision_saved = -1;
|
||||
|
||||
if ($login['id'] == '')
|
||||
{
|
||||
$status = 'error - anonymous user';
|
||||
}
|
||||
else
|
||||
{
|
||||
$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 (!$login['sysadmin?'] &&
|
||||
$this->projects->projectHasMember($projectid, $login['id']) === FALSE)
|
||||
{
|
||||
$status = "error - not a member {$login['id']}";
|
||||
}
|
||||
else
|
||||
{
|
||||
$review_comment = $this->input->post('code_new_review_comment');
|
||||
if ($review_comment === FALSE || ($review_comment = trim($review_comment)) == '')
|
||||
{
|
||||
$status = 'error - emtpy review comment';
|
||||
}
|
||||
else
|
||||
{
|
||||
$review_sno = $this->code_review->insertReview ($projectid, $rev, $login['id'], $review_comment);
|
||||
if ($review_sno === FALSE)
|
||||
{
|
||||
$status = 'error - ' . $this->code_review->getErrorMessage();
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = 'ok';
|
||||
|
||||
if (CODEPOT_COMMIT_REVIEW_NOTIFICATION)
|
||||
{
|
||||
// TODO: message localization
|
||||
$email_subject = sprintf (
|
||||
'New review message #%d for r%d by %s in %s',
|
||||
$review_sno, $rev, $login['id'], $projectid
|
||||
);
|
||||
$email_message = current_url() . "\r\n" . $review_comment;
|
||||
$this->projects->emailMessageToMembers (
|
||||
$projectid, $this->login, $email_subject, $email_message
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print $status;
|
||||
}
|
||||
|
||||
function xhr_edit_review_comment ($projectid = '', $rev = SVN_REVISOIN_HEAD)
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
$this->load->model ('SubversionModel', 'subversion');
|
||||
$this->load->model ('CodeReviewModel', 'code_review');
|
||||
|
||||
$login = $this->login->getUser ();
|
||||
$revision_saved = -1;
|
||||
|
||||
if ($login['id'] == '')
|
||||
{
|
||||
$status = 'error - anonymous user';
|
||||
}
|
||||
else
|
||||
{
|
||||
$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 (!$login['sysadmin?'] &&
|
||||
$this->projects->projectHasMember($projectid, $login['id']) === FALSE)
|
||||
{
|
||||
$status = "error - not a member {$login['id']}";
|
||||
}
|
||||
else
|
||||
{
|
||||
$review_no = $this->input->post('code_edit_review_no');
|
||||
$review_comment = $this->input->post('code_edit_review_comment');
|
||||
|
||||
if ($review_no === FALSE || !is_numeric($review_no))
|
||||
{
|
||||
$status = 'error - wrong review number';
|
||||
}
|
||||
else if ($review_comment === FALSE || ($review_comment = trim($review_comment)) == '')
|
||||
{
|
||||
$status = 'error - empty review comment';
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->code_review->updateReview ($projectid, $rev, (integer)$review_no, $login['id'], $review_comment, TRUE) === FALSE)
|
||||
{
|
||||
$status = 'error - ' . $this->code_review->getErrorMessage();
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = 'ok';
|
||||
/*
|
||||
if (CODEPOT_COMMIT_REVIEW_NOTIFICATION)
|
||||
{
|
||||
// TODO: message localization
|
||||
$email_subject = sprintf (
|
||||
'Edited review message #%d for r%d by %s in %s',
|
||||
$review_sno, $rev, $login['id'], $projectid
|
||||
);
|
||||
$email_message = current_url() . "\r\n" . $review_comment;
|
||||
$this->projects->emailMessageToMembers (
|
||||
$projectid, $this->login, $email_subject, $email_message
|
||||
);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print $status;
|
||||
}
|
||||
|
||||
|
||||
function enjson_save ($projectid = '', $path = '')
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
@ -771,147 +1031,6 @@ class Code extends Controller
|
||||
redirect ("main/signin/" . $this->converter->AsciiTohex(current_url()));
|
||||
}
|
||||
|
||||
$data['popup_error_message'] = '';
|
||||
if ($login['id'] != '')
|
||||
{
|
||||
$tag = $this->input->post('tag_revision');
|
||||
if ($tag !== FALSE)
|
||||
{
|
||||
$tag = trim($tag);
|
||||
if (empty($tag))
|
||||
{
|
||||
// delete the tag if the value is empty
|
||||
$affected_rev = $this->subversion->killRevProp (
|
||||
$projectid, $rev, CODEPOT_SVN_TAG_PROPERTY, $login['id']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$affected_rev = $this->subversion->setRevProp (
|
||||
$projectid, $rev, CODEPOT_SVN_TAG_PROPERTY, $tag, $login['id']);
|
||||
}
|
||||
if ($affected_rev === FALSE)
|
||||
{
|
||||
$data['popup_error_message'] = 'Cannot tag revision';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->form_validation->_field_data = array();
|
||||
}
|
||||
}
|
||||
else if ($login['id'] == $this->subversion->getRevProp($projectid, $rev, 'svn:author') &&
|
||||
$this->input->post('edit_log_message'))
|
||||
{
|
||||
// the current user must be the author of the revision to be able to
|
||||
// change the log message.
|
||||
$this->load->helper ('form');
|
||||
$this->load->library ('form_validation');
|
||||
|
||||
$this->form_validation->set_rules ('edit_log_message', 'Message', 'required|min_length[2]');
|
||||
$this->form_validation->set_error_delimiters('<span class="form_field_error">','</span>');
|
||||
|
||||
if ($this->form_validation->run())
|
||||
{
|
||||
$logmsg = $this->input->post('edit_log_message');
|
||||
if ($logmsg != $this->subversion->getRevProp ($projectid, $rev, 'svn:log'))
|
||||
{
|
||||
$affected_rev = $this->subversion->setRevProp (
|
||||
$projectid, $rev, 'svn:log', $logmsg, $login['id']);
|
||||
if ($affected_rev === FALSE)
|
||||
{
|
||||
$data['popup_error_message'] = 'Cannot change revision log message';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->form_validation->_field_data = array();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$data['popup_error_message'] = 'Invalid revision log message';
|
||||
}
|
||||
}
|
||||
else if ($this->input->post('new_review_comment'))
|
||||
{
|
||||
$this->load->helper ('form');
|
||||
$this->load->library ('form_validation');
|
||||
|
||||
$this->form_validation->set_rules ('new_review_comment', $this->lang->line('Comment'), 'required|min_length[10]');
|
||||
$this->form_validation->set_error_delimiters('<span class="form_field_error">','</span>');
|
||||
|
||||
if ($this->form_validation->run())
|
||||
{
|
||||
$review_comment = $this->input->post('new_review_comment');
|
||||
$review_sno = $this->code_review->insertReview ($projectid, $rev, $login['id'], $review_comment);
|
||||
if ($review_sno === FALSE)
|
||||
{
|
||||
$data['popup_error_message'] = 'Cannot add code review comment';
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is a hack to clear form data upon success
|
||||
$this->form_validation->_field_data = array();
|
||||
|
||||
if (CODEPOT_COMMIT_REVIEW_NOTIFICATION)
|
||||
{
|
||||
// TODO: message localization
|
||||
$email_subject = sprintf (
|
||||
'New review message #%d for r%d by %s in %s',
|
||||
$review_sno, $rev, $login['id'], $projectid
|
||||
);
|
||||
$email_message = current_url() . "\r\n" . $review_comment;
|
||||
$this->projects->emailMessageToMembers (
|
||||
$projectid, $this->login, $email_subject, $email_message
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$data['popup_error_message'] = 'Invalid review comment';
|
||||
}
|
||||
}
|
||||
else if ($this->input->post('edit_review_comment_no'))
|
||||
{
|
||||
$this->load->helper ('form');
|
||||
$this->load->library ('form_validation');
|
||||
|
||||
// get the comment number without validation.
|
||||
$comment_no = $this->input->post('edit_review_comment_no');
|
||||
if (is_numeric($comment_no))
|
||||
{
|
||||
$comment_field_name = "edit_review_comment_{$comment_no}";
|
||||
$this->form_validation->set_rules ($comment_field_name, $this->lang->line('Comment'), 'required|min_length[10]');
|
||||
$this->form_validation->set_error_delimiters('<span class="form_field_error">','</span>');
|
||||
|
||||
if ($this->form_validation->run())
|
||||
{
|
||||
//
|
||||
// TODO: should let sysadmin? to change comments???
|
||||
//
|
||||
$review_comment = $this->input->post($comment_field_name);
|
||||
if ($this->code_review->updateReview ($projectid, $rev, (integer)$comment_no, $login['id'], $review_comment, TRUE) === FALSE)
|
||||
{
|
||||
$data['popup_error_message'] = 'Cannot edit code review comment';
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is a hack to clear form data upon success
|
||||
$this->form_validation->_field_data = array();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$data['popup_error_message'] = 'Invalid review comment';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$data['popup_error_message'] = 'Invalid review comment number';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$file = $this->subversion->getRevHistory ($projectid, $path, $rev);
|
||||
if ($file === FALSE)
|
||||
{
|
||||
@ -1016,7 +1135,7 @@ class Code extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
function _do_diff ($projectid = '', $path = '', $rev1 = SVN_REVISION_HEAD, $rev2 = SVN_REVISION_HEAD, $full = FALSE)
|
||||
private function _do_diff ($projectid = '', $path = '', $rev1 = SVN_REVISION_HEAD, $rev2 = SVN_REVISION_HEAD, $full = FALSE)
|
||||
{
|
||||
$this->load->model ('ProjectModel', 'projects');
|
||||
$this->load->model ('SubversionModel', 'subversion');
|
||||
@ -1208,7 +1327,7 @@ class Code extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
function _search_code ($project, $login)
|
||||
private function _search_code ($project, $login)
|
||||
{
|
||||
$this->load->helper ('form');
|
||||
$this->load->library ('form_validation');
|
||||
@ -1306,7 +1425,7 @@ class Code extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
function _normalize_path ($path)
|
||||
private function _normalize_path ($path)
|
||||
{
|
||||
$path = preg_replace('/[\/]+/', '/', $path);
|
||||
if ($path == '/') $path = '';
|
||||
|
@ -2,6 +2,13 @@
|
||||
|
||||
class CodeReviewModel extends Model
|
||||
{
|
||||
protected $errmsg = '';
|
||||
|
||||
function getErrorMessage ()
|
||||
{
|
||||
return $this->errmsg;
|
||||
}
|
||||
|
||||
function CodeReviewModel ()
|
||||
{
|
||||
parent::Model ();
|
||||
@ -10,28 +17,27 @@ class CodeReviewModel extends Model
|
||||
|
||||
function getReviews ($projectid, $revision)
|
||||
{
|
||||
$this->db->trans_start ();
|
||||
$this->db->trans_begin ();
|
||||
|
||||
$this->db->where ('projectid', (string)$projectid);
|
||||
$this->db->where ('rev', $revision);
|
||||
$query = $this->db->get ('code_review');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->db->trans_complete ();
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$result = $query->result ();
|
||||
$this->db->trans_complete ();
|
||||
if ($this->db->trans_status() === FALSE) return FALSE;
|
||||
|
||||
$this->db->trans_commit ();
|
||||
return $result;
|
||||
}
|
||||
|
||||
function insertReview ($projectid, $revision, $userid, $comment)
|
||||
{
|
||||
// TODO: check if userid can do this..
|
||||
$this->db->trans_start ();
|
||||
$this->db->trans_begin ();
|
||||
|
||||
$this->db->where ('projectid', $projectid);
|
||||
$this->db->where ('rev', $revision);
|
||||
@ -39,7 +45,8 @@ class CodeReviewModel extends Model
|
||||
$query = $this->db->get ('code_review');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->db->trans_complete ();
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -57,25 +64,34 @@ class CodeReviewModel extends Model
|
||||
$this->db->set ('createdby', $userid);
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->insert ('code_review');
|
||||
|
||||
/*$this->db->set ('createdon', date('Y-m-d H:i:s'));
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
/*$this->db->set ('createdon', date('Y-m-d H:i:s'));
|
||||
$this->db->set ('type', 'code_review');
|
||||
$this->db->set ('action', 'insert');
|
||||
$this->db->set ('projectid', $projectid);
|
||||
$this->db->set ('userid', $userid);
|
||||
$this->db->set ('message', "$rev,$sno");
|
||||
$this->db->insert ('log');*/
|
||||
|
||||
$this->db->trans_complete ();
|
||||
if ($this->db->trans_status() === FALSE) return FALSE;
|
||||
$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 $newsno;
|
||||
}
|
||||
|
||||
function updateReview ($projectid, $revision, $sno, $userid, $comment, $strict = FALSE)
|
||||
{
|
||||
// TODO: check if userid can do this..
|
||||
$this->db->trans_start ();
|
||||
$this->db->trans_begin ();
|
||||
|
||||
$this->db->where ('projectid', $projectid);
|
||||
$this->db->where ('rev', $revision);
|
||||
@ -85,39 +101,63 @@ class CodeReviewModel extends Model
|
||||
$this->db->set ('updatedon', date('Y-m-d H:i:s'));
|
||||
$this->db->set ('updatedby', $userid);
|
||||
$this->db->update ('code_review');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*$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', 'code_review');
|
||||
$this->db->set ('action', 'insert');
|
||||
$this->db->set ('projectid', $projectid);
|
||||
$this->db->set ('userid', $userid);
|
||||
$this->db->set ('message', "$rev,$sno");
|
||||
$this->db->insert ('log');*/
|
||||
$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_complete ();
|
||||
return $this->db->trans_status();
|
||||
$this->db->trans_commit ();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
function deleteReview ($projectid, $revision, $sno, $userid)
|
||||
{
|
||||
// TODO: check if userid can do this..
|
||||
$this->db->trans_start ();
|
||||
$this->db->trans_begin();
|
||||
|
||||
$this->db->where ('projectid', $projectid);
|
||||
$this->db->where ('rev', $revision);
|
||||
$this->db->where ('sno', $sno);
|
||||
$this->db->delete ('code_review');
|
||||
if ($this->db->trans_status() === FALSE)
|
||||
{
|
||||
$this->errmsg = $this->db->_error_message();
|
||||
$this->db->trans_rollback ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*$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 ('action', 'delete');
|
||||
$this->db->set ('projectid', $projectid);
|
||||
$this->db->set ('userid', $userid);
|
||||
$this->db->set ('message', "$rev,$sno");
|
||||
$this->db->insert ('log');*/
|
||||
$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_complete ();
|
||||
return $this->db->trans_status();
|
||||
$this->db->trans_commit ();
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@ class SubversionModel extends Model
|
||||
parent::Model ();
|
||||
}
|
||||
|
||||
function _canonical_path($path)
|
||||
private function _canonical_path($path)
|
||||
{
|
||||
$canonical = preg_replace('|/\.?(?=/)|','',$path);
|
||||
while (($collapsed = preg_replace('|/[^/]+/\.\./|','/',$canonical,1)) !== $canonical)
|
||||
@ -1231,19 +1231,26 @@ class SubversionModel extends Model
|
||||
function getRevProp ($projectid, $rev, $prop)
|
||||
{
|
||||
$url = 'file://'.$this->_canonical_path(CODEPOT_SVNREPO_DIR."/{$projectid}");
|
||||
return @svn_revprop_get ($url, $rev, $prop);
|
||||
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$result = @svn_revprop_get ($url, $rev, $prop);
|
||||
restore_error_handler ();
|
||||
return $result;
|
||||
}
|
||||
|
||||
function setRevProp ($projectid, $rev, $prop, $propval, $user)
|
||||
{
|
||||
$url = 'file://'.$this->_canonical_path(CODEPOT_SVNREPO_DIR."/{$projectid}");
|
||||
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
|
||||
$orguser = @svn_auth_get_parameter (SVN_AUTH_PARAM_DEFAULT_USERNAME);
|
||||
@svn_auth_set_parameter (SVN_AUTH_PARAM_DEFAULT_USERNAME, $user);
|
||||
|
||||
$result = @svn_revprop_set ($url, $rev, $prop, $propval);
|
||||
|
||||
@svn_auth_set_parameter (SVN_AUTH_PARAM_DEFAULT_USERNAME, $orguser);
|
||||
|
||||
restore_error_handler ();
|
||||
return $result;
|
||||
}
|
||||
|
||||
@ -1251,12 +1258,16 @@ class SubversionModel extends Model
|
||||
{
|
||||
$url = 'file://'.$this->_canonical_path(CODEPOT_SVNREPO_DIR."/{$projectid}");
|
||||
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
|
||||
$orguser = @svn_auth_get_parameter (SVN_AUTH_PARAM_DEFAULT_USERNAME);
|
||||
@svn_auth_set_parameter (SVN_AUTH_PARAM_DEFAULT_USERNAME, $user);
|
||||
|
||||
$result = @svn_revprop_delete ($url, $rev, $prop);
|
||||
|
||||
@svn_auth_set_parameter (SVN_AUTH_PARAM_DEFAULT_USERNAME, $orguser);
|
||||
|
||||
restore_error_handler ();
|
||||
return $result;
|
||||
}
|
||||
|
||||
@ -1315,7 +1326,9 @@ class SubversionModel extends Model
|
||||
$orgurl = 'file://'.$this->_canonical_path(CODEPOT_SVNREPO_DIR."/{$projectid}/{$path}");
|
||||
|
||||
$workurl = ($path == '')? $orgurl: "{$orgurl}@"; // trailing @ for collision prevention
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$info = @svn_info ($workurl, FALSE, $rev);
|
||||
restore_error_handler ();
|
||||
|
||||
if ($info === FALSE || count($info) != 1)
|
||||
{
|
||||
@ -1323,11 +1336,16 @@ class SubversionModel extends Model
|
||||
|
||||
// rebuild the URL with a peg revision and retry it.
|
||||
$workurl = "{$orgurl}@{$rev}";
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$info = @svn_info ($workurl, FALSE, $rev);
|
||||
restore_error_handler ();
|
||||
if ($info === FALSE || count($info) != 1) return FALSE;
|
||||
}
|
||||
|
||||
return @svn_proplist ($workurl, 0, $rev);
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$result = @svn_proplist ($workurl, 0, $rev);
|
||||
restore_error_handler ();
|
||||
return $result;
|
||||
}
|
||||
|
||||
function getProp ($projectid, $path, $rev, $prop)
|
||||
@ -1335,7 +1353,9 @@ class SubversionModel extends Model
|
||||
$orgurl = 'file://'.$this->_canonical_path(CODEPOT_SVNREPO_DIR."/{$projectid}/{$path}");
|
||||
|
||||
$workurl = ($path == '')? $orgurl: "{$orgurl}@"; // trailing @ for collision prevention
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$info = @svn_info ($workurl, FALSE, $rev);
|
||||
restore_error_handler ();
|
||||
|
||||
if ($info === FALSE || count($info) != 1)
|
||||
{
|
||||
@ -1343,11 +1363,16 @@ class SubversionModel extends Model
|
||||
|
||||
// rebuild the URL with a peg revision and retry it.
|
||||
$workurl = "{$orgurl}@{$rev}";
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$info = @svn_info ($workurl, FALSE, $rev);
|
||||
restore_error_handler ();
|
||||
if ($info === FALSE || count($info) != 1) return FALSE;
|
||||
}
|
||||
|
||||
return @svn_propget ($workurl, $prop, FALSE, $rev);
|
||||
set_error_handler (array ($this, 'capture_error'));
|
||||
$result = @svn_propget ($workurl, $prop, FALSE, $rev);
|
||||
restore_error_handler ();
|
||||
return $result;
|
||||
}
|
||||
|
||||
function _cloc_revision_by_lang ($projectid, $path, $rev)
|
||||
|
@ -221,7 +221,8 @@ $this->load->view (
|
||||
|
||||
// anchor to the revision history at the root directory
|
||||
print anchor (
|
||||
"code/revision/{$project->id}/!/{$file['created_rev']}",
|
||||
//"code/revision/{$project->id}/!/{$file['created_rev']}",
|
||||
"code/revision/{$project->id}/${xpar}/{$file['created_rev']}",
|
||||
sprintf("%s %s", $this->lang->line('Revision'), $file['created_rev'])
|
||||
);
|
||||
|
||||
|
@ -848,7 +848,8 @@ $this->load->view (
|
||||
|
||||
// anchor to the revision history at the root directory
|
||||
print anchor (
|
||||
"code/revision/{$project->id}/!/{$file['created_rev']}",
|
||||
//"code/revision/{$project->id}/!/{$file['created_rev']}",
|
||||
"code/revision/{$project->id}/${hex_headpath}/{$file['created_rev']}",
|
||||
sprintf("%s %s", $this->lang->line('Revision'), $file['created_rev'])
|
||||
);
|
||||
|
||||
|
@ -21,6 +21,23 @@
|
||||
<script type="text/javascript" src="<?php print base_url_make('/js/jquery-ui.min.js')?>"></script>
|
||||
<link type="text/css" rel="stylesheet" href="<?php print base_url_make('/css/jquery-ui.css')?>" />
|
||||
|
||||
<?php
|
||||
if ($revision <= 0)
|
||||
{
|
||||
$revreq = '';
|
||||
$revreqroot = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$revreq = "/{$file['created_rev']}";
|
||||
$revreqroot = '/' . $this->converter->AsciiToHex ('.') . $revreq;
|
||||
}
|
||||
|
||||
$hex_headpath = $this->converter->AsciiToHex(($headpath == '')? '.': $headpath);
|
||||
$creole_base = site_url() . "/wiki/show/{$project->id}/";
|
||||
$creole_file_base = site_url() . "/wiki/attachment0/{$project->id}/";
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
function show_alert (outputMsg, titleMsg)
|
||||
@ -39,64 +56,202 @@ function show_alert (outputMsg, titleMsg)
|
||||
});
|
||||
}
|
||||
|
||||
function preview_new_review_comment (input_text)
|
||||
{
|
||||
creole_render_wiki_with_input_text (
|
||||
input_text,
|
||||
"code_revision_new_review_comment_preview",
|
||||
"<?php print $creole_base; ?>",
|
||||
"<?php print $creole_file_base; ?>/"
|
||||
);
|
||||
|
||||
prettyPrint ();
|
||||
}
|
||||
|
||||
function preview_edit_review_comment (input_text, no)
|
||||
{
|
||||
creole_render_wiki_with_input_text (
|
||||
input_text,
|
||||
"code_revision_edit_review_comment_preview_" + no,
|
||||
"<?php print $creole_base; ?>",
|
||||
"<?php print $creole_file_base; ?>/"
|
||||
);
|
||||
|
||||
prettyPrint ();
|
||||
}
|
||||
|
||||
var work_in_progress = false;
|
||||
|
||||
<?php $review_count = count($reviews); ?>
|
||||
<?php $is_loggedin = ($login['id'] != ''); ?>
|
||||
<?php $can_edit = ($is_loggedin && $login['id'] == $file['history']['author']); ?>
|
||||
|
||||
<?php if ($can_edit): ?>
|
||||
$(function() {
|
||||
$("#code_revision_tag_div").dialog (
|
||||
$('#code_revision_edit_revision_tag_form').dialog (
|
||||
{
|
||||
title: '<?php print $this->lang->line('Tag')?>',
|
||||
title: '<?php print $this->lang->line('Tag');?>',
|
||||
resizable: true,
|
||||
autoOpen: false,
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
resizable: false,
|
||||
autoOpen: false,
|
||||
modal: true,
|
||||
buttons: {
|
||||
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$('#code_revision_tag_form').submit ();
|
||||
$(this).dialog('close');
|
||||
if (work_in_progress) return;
|
||||
|
||||
if (!!window.FormData)
|
||||
{
|
||||
// FormData is supported
|
||||
work_in_progress = true;
|
||||
|
||||
var form_data = new FormData();
|
||||
|
||||
form_data.append ('code_edit_revision_tag', $('#code_revision_edit_revision_tag').val());
|
||||
|
||||
$('#code_revision_edit_revision_tag_form').dialog('disable');
|
||||
$.ajax({
|
||||
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/code/xhr_edit_revision_tag/{$project->id}/{$revreq}"; ?>'),
|
||||
type: 'POST',
|
||||
data: form_data,
|
||||
mimeType: 'multipart/form-data',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
cache: false,
|
||||
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
work_in_progress = false;
|
||||
$('#code_revision_edit_revision_tag_form').dialog('enable');
|
||||
$('#code_revision_edit_revision_tag_form').dialog('close');
|
||||
if (data == 'ok')
|
||||
{
|
||||
// refresh the page to the head revision
|
||||
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/code/revision/{$project->id}/{$hex_headpath}{$revreq}"; ?>'));
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
work_in_progress = false;
|
||||
$('#code_revision_edit_revision_tag_form').dialog('enable');
|
||||
$('#code_revision_edit_revision_tag_form').dialog('close');
|
||||
var errmsg = '';
|
||||
if (errmsg == '' && errorThrown != null) errmsg = errorThrown;
|
||||
if (errmsg == '' && textStatus != null) errmsg = textStatus;
|
||||
if (errmsg == '') errmsg = 'Unknown error';
|
||||
show_alert ('Failed - ' + errmsg, "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
'<?php print $this->lang->line('Cancel')?>': function () {
|
||||
$(this).dialog('close');
|
||||
if (work_in_progress) return;
|
||||
$('#code_revision_edit_revision_tag_form').dialog('close');
|
||||
}
|
||||
},
|
||||
close: function() { }
|
||||
|
||||
beforeClose: function() {
|
||||
// if importing is in progress, prevent dialog closing
|
||||
return !work_in_progress;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
$("#code_revision_edit_div").dialog (
|
||||
$('#code_revision_edit_revision_message_form').dialog (
|
||||
{
|
||||
title: '<?php print $this->lang->line('Edit')?>',
|
||||
title: '<?php print $this->lang->line('Message');?>',
|
||||
resizable: true,
|
||||
autoOpen: false,
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
resizable: false,
|
||||
autoOpen: false,
|
||||
modal: true,
|
||||
buttons: {
|
||||
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$('#code_revision_edit_logmsg_form').submit ();
|
||||
$(this).dialog('close');
|
||||
if (work_in_progress) return;
|
||||
|
||||
if (!!window.FormData)
|
||||
{
|
||||
// FormData is supported
|
||||
work_in_progress = true;
|
||||
|
||||
var form_data = new FormData();
|
||||
|
||||
form_data.append ('code_edit_revision_message', $('#code_revision_edit_revision_message').val());
|
||||
|
||||
$('#code_revision_edit_revision_message_form').dialog('disable');
|
||||
$.ajax({
|
||||
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/code/xhr_edit_revision_message/{$project->id}/{$revreq}"; ?>'),
|
||||
type: 'POST',
|
||||
data: form_data,
|
||||
mimeType: 'multipart/form-data',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
cache: false,
|
||||
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
work_in_progress = false;
|
||||
$('#code_revision_edit_revision_message_form').dialog('enable');
|
||||
$('#code_revision_edit_revision_message_form').dialog('close');
|
||||
if (data == 'ok')
|
||||
{
|
||||
// refresh the page to the head revision
|
||||
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/code/revision/{$project->id}/{$hex_headpath}{$revreq}"; ?>'));
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
work_in_progress = false;
|
||||
$('#code_revision_edit_revision_message_form').dialog('enable');
|
||||
$('#code_revision_edit_revision_message_form').dialog('close');
|
||||
var errmsg = '';
|
||||
if (errmsg == '' && errorThrown != null) errmsg = errorThrown;
|
||||
if (errmsg == '' && textStatus != null) errmsg = textStatus;
|
||||
if (errmsg == '') errmsg = 'Unknown error';
|
||||
show_alert ('Failed - ' + errmsg, "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
'<?php print $this->lang->line('Cancel')?>': function () {
|
||||
$(this).dialog('close');
|
||||
if (work_in_progress) return;
|
||||
$('#code_revision_edit_revision_message_form').dialog('close');
|
||||
}
|
||||
},
|
||||
close: function() { }
|
||||
|
||||
beforeClose: function() {
|
||||
// if importing is in progress, prevent dialog closing
|
||||
return !work_in_progress;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
$("#code_revision_tag_button").button().click (
|
||||
$('#code_revision_edit_revision_tag_button').button().click (
|
||||
function () {
|
||||
$("#code_revision_tag_div").dialog('open');
|
||||
$('#code_revision_edit_revision_tag_form').dialog('open');
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
$("#code_revision_edit_logmsg_button").button().click (
|
||||
$('#code_revision_edit_revision_message_button').button().click (
|
||||
function () {
|
||||
$("#code_revision_edit_div").dialog('open');
|
||||
$('#code_revision_edit_revision_message_form').dialog('open');
|
||||
return false;
|
||||
}
|
||||
);
|
||||
@ -105,34 +260,157 @@ $(function() {
|
||||
|
||||
<?php if ($is_loggedin): ?>
|
||||
$(function() {
|
||||
$("#code_revision_new_review_comment_div").dialog (
|
||||
|
||||
$('#code_revision_new_review_comment_tabs').tabs ();
|
||||
$('#code_revision_new_review_comment_tabs').bind ('tabsshow', function (event, ui) {
|
||||
if (ui.index == 1) preview_new_review_comment ($('#code_revision_new_review_comment').val());
|
||||
});
|
||||
|
||||
$('#code_revision_new_review_comment_form').dialog (
|
||||
{
|
||||
title: '<?php print $this->lang->line('Comment')?>',
|
||||
title: '<?php print $this->lang->line('Comment');?>',
|
||||
resizable: true,
|
||||
autoOpen: false,
|
||||
width: 'auto',
|
||||
height: 'auto',
|
||||
resizable: false,
|
||||
autoOpen: false,
|
||||
modal: true,
|
||||
buttons: {
|
||||
'<?php print $this->lang->line('OK')?>': function () {
|
||||
$('#code_revision_new_review_comment_form').submit ();
|
||||
$(this).dialog('close');
|
||||
if (work_in_progress) return;
|
||||
|
||||
if (!!window.FormData)
|
||||
{
|
||||
// FormData is supported
|
||||
work_in_progress = true;
|
||||
|
||||
var form_data = new FormData();
|
||||
|
||||
form_data.append ('code_new_review_comment', $('#code_revision_new_review_comment').val());
|
||||
|
||||
$('#code_revision_new_review_comment_form').dialog('disable');
|
||||
$.ajax({
|
||||
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/code/xhr_new_review_comment/{$project->id}/{$revreq}"; ?>'),
|
||||
type: 'POST',
|
||||
data: form_data,
|
||||
mimeType: 'multipart/form-data',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
cache: false,
|
||||
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
work_in_progress = false;
|
||||
$('#code_revision_new_review_comment_form').dialog('enable');
|
||||
$('#code_revision_new_review_comment_form').dialog('close');
|
||||
if (data == 'ok')
|
||||
{
|
||||
// refresh the page to the head revision
|
||||
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/code/revision/{$project->id}/{$hex_headpath}{$revreq}"; ?>'));
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
work_in_progress = false;
|
||||
$('#code_revision_new_review_comment_form').dialog('enable');
|
||||
$('#code_revision_new_review_comment_form').dialog('close');
|
||||
var errmsg = '';
|
||||
if (errmsg == '' && errorThrown != null) errmsg = errorThrown;
|
||||
if (errmsg == '' && textStatus != null) errmsg = textStatus;
|
||||
if (errmsg == '') errmsg = 'Unknown error';
|
||||
show_alert ('Failed - ' + errmsg, "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
'<?php print $this->lang->line('Cancel')?>': function () {
|
||||
$(this).dialog('close');
|
||||
if (work_in_progress) return;
|
||||
$('#code_revision_new_review_comment_form').dialog('close');
|
||||
}
|
||||
},
|
||||
close: function() { }
|
||||
|
||||
beforeClose: function() {
|
||||
// if importing is in progress, prevent dialog closing
|
||||
return !work_in_progress;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
$("#code_revision_new_review_comment_button").button().click (
|
||||
function () {
|
||||
$("#code_revision_new_review_comment_div").dialog('open');
|
||||
$('#code_revision_new_review_comment_form').dialog('open');
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
function make_edit_review_comment_ok_function (no)
|
||||
{
|
||||
var form_name = '#code_revision_edit_review_comment_form_' + no;
|
||||
|
||||
return function () {
|
||||
if (work_in_progress) return;
|
||||
|
||||
if (!!window.FormData)
|
||||
{
|
||||
// FormData is supported
|
||||
work_in_progress = true;
|
||||
|
||||
var form_data = new FormData();
|
||||
|
||||
form_data.append ('code_edit_review_no', no);
|
||||
form_data.append ('code_edit_review_comment', $('#code_revision_edit_review_comment_' + no).val());
|
||||
|
||||
$(form_name).dialog('disable');
|
||||
$.ajax({
|
||||
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/code/xhr_edit_review_comment/{$project->id}/{$revreq}"; ?>'),
|
||||
type: 'POST',
|
||||
data: form_data,
|
||||
mimeType: 'multipart/form-data',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
cache: false,
|
||||
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
work_in_progress = false;
|
||||
$(form_name).dialog('enable');
|
||||
$(form_name).dialog('close');
|
||||
if (data == 'ok')
|
||||
{
|
||||
// refresh the page
|
||||
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/code/revision/{$project->id}/{$hex_headpath}{$revreq}"; ?>'));
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
},
|
||||
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
work_in_progress = false;
|
||||
$(form_name).dialog('enable');
|
||||
$(form_name).dialog('close');
|
||||
var errmsg = '';
|
||||
if (errmsg == '' && errorThrown != null) errmsg = errorThrown;
|
||||
if (errmsg == '' && textStatus != null) errmsg = textStatus;
|
||||
if (errmsg == '') errmsg = 'Unknown error';
|
||||
show_alert ('Failed - ' + errmsg, "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
<?php
|
||||
for ($i = 0; $i < $review_count; )
|
||||
{
|
||||
@ -144,8 +422,12 @@ $(function() {
|
||||
$label_ok = $this->lang->line('OK');
|
||||
$label_cancel = $this->lang->line('Cancel');
|
||||
print ("
|
||||
$('#code_revision_edit_review_comment_tabs_{$i}').tabs ();
|
||||
$('#code_revision_edit_review_comment_tabs_{$i}').bind ('tabsshow', function (event, ui) {
|
||||
if (ui.index == 1) preview_edit_review_comment ($('#code_revision_edit_review_comment_{$i}').val(), {$i});
|
||||
});
|
||||
|
||||
$('#code_revision_edit_review_comment_div_{$i}').dialog (
|
||||
$('#code_revision_edit_review_comment_form_{$i}').dialog (
|
||||
{
|
||||
title: '{$edit_title}',
|
||||
width: 'auto',
|
||||
@ -154,23 +436,22 @@ $(function() {
|
||||
autoOpen: false,
|
||||
modal: true,
|
||||
buttons: {
|
||||
'{$label_ok}': function () {
|
||||
// dynamically add a comment number to edit
|
||||
var hidden_comment_no = $('<input>').attr('type', 'hidden').attr('name', 'edit_review_comment_no').val('{$i}');
|
||||
$('#code_revision_edit_review_comment_form_{$i}').append(hidden_comment_no).submit ();
|
||||
$(this).dialog('close');
|
||||
},
|
||||
'{$label_ok}': make_edit_review_comment_ok_function ({$i}),
|
||||
'{$label_cancel}': function () {
|
||||
$(this).dialog('close');
|
||||
if (work_in_progress) return;
|
||||
$('#code_revision_edit_review_comment_form_{$i}').dialog('close');
|
||||
}
|
||||
},
|
||||
close: function() { }
|
||||
beforeClose: function() {
|
||||
// if importing is in progress, prevent dialog closing
|
||||
return !work_in_progress;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
$('#code_revision_edit_review_comment_button_{$i}').button().click (
|
||||
function () {
|
||||
$('#code_revision_edit_review_comment_div_{$i}').dialog('open');
|
||||
$('#code_revision_edit_review_comment_form_{$i}').dialog('open');
|
||||
return false;
|
||||
}
|
||||
)
|
||||
@ -190,8 +471,8 @@ function render_wiki()
|
||||
creole_render_wiki (
|
||||
"code_revision_mainarea_review_comment_text_" + (i + 1) ,
|
||||
"code_revision_mainarea_review_comment_" + (i + 1),
|
||||
"<?php print site_url()?>/wiki/show/<?php print $project->id?>/",
|
||||
""
|
||||
"<?php print $creole_base; ?>",
|
||||
"<?php print $creole_file_base; ?>/"
|
||||
);
|
||||
|
||||
<?php
|
||||
@ -227,10 +508,6 @@ $(function() {
|
||||
|
||||
hide_unneeded_divs ();
|
||||
render_wiki ();
|
||||
|
||||
<?php if (strlen($popup_error_message) > 0): ?>
|
||||
show_alert (<?php print codepot_json_encode('<pre>' . htmlspecialchars($popup_error_message) . '</pre>'); ?>, "<?php print $this->lang->line('Error')?>");
|
||||
<?php endif; ?>
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -280,17 +557,6 @@ $history = $file['history'];
|
||||
|
||||
<div class="title" id="code_revision_mainarea_title">
|
||||
<?php
|
||||
if ($revision <= 0)
|
||||
{
|
||||
$revreq = '';
|
||||
$revreqroot = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$revreq = "/{$file['created_rev']}";
|
||||
$revreqroot = '/' . $this->converter->AsciiToHex ('.') . $revreq;
|
||||
}
|
||||
|
||||
print anchor (
|
||||
"code/revision/{$project->id}{$revreqroot}",
|
||||
htmlspecialchars($project->name));
|
||||
@ -330,29 +596,28 @@ $history = $file['history'];
|
||||
<?php
|
||||
$history_anchor_text = '<i class="fa fa-history"></i> ' . $this->lang->line('History');
|
||||
|
||||
$xpar = $this->converter->AsciiToHex(($headpath == '')? '.': $headpath);
|
||||
if ($revision > 0 && $revision < $next_revision)
|
||||
{
|
||||
print anchor ("code/revision/{$project->id}/{$xpar}", $this->lang->line('Head revision'));
|
||||
print anchor ("code/revision/{$project->id}/{$hex_headpath}", $this->lang->line('Head revision'));
|
||||
print ' | ';
|
||||
}
|
||||
|
||||
if ($revision > 0)
|
||||
{
|
||||
if ($xpar == '') $revtrailer = $revreqroot;
|
||||
else $revtrailer = "/{$xpar}{$revreq}";
|
||||
if ($hex_headpath == '') $revtrailer = $revreqroot;
|
||||
else $revtrailer = "/{$hex_headpath}{$revreq}";
|
||||
print anchor ("code/history/{$project->id}{$revtrailer}", $history_anchor_text);
|
||||
}
|
||||
else
|
||||
{
|
||||
print anchor ("code/history/{$project->id}/{$xpar}", $history_anchor_text);
|
||||
print anchor ("code/history/{$project->id}/{$hex_headpath}", $history_anchor_text);
|
||||
}
|
||||
?>
|
||||
</div> <!-- code_revision_mainarea_menu -->
|
||||
|
||||
<div class="infostrip" id="code_revision_mainarea_infostrip">
|
||||
<?php
|
||||
print anchor ("code/revision/{$project->id}/${xpar}/{$prev_revision}", '<i class="fa fa-arrow-circle-left"></i>');
|
||||
print anchor ("code/revision/{$project->id}/${hex_headpath}/{$prev_revision}", '<i class="fa fa-arrow-circle-left"></i>');
|
||||
print ' ';
|
||||
|
||||
printf ('%s %s', $this->lang->line('Revision'), $history['rev']);
|
||||
@ -365,13 +630,13 @@ $history = $file['history'];
|
||||
}
|
||||
|
||||
print ' ';
|
||||
print anchor ("code/revision/{$project->id}/${xpar}/{$next_revision}", '<i class="fa fa-arrow-circle-right"></i>');
|
||||
print anchor ("code/revision/{$project->id}/${hex_headpath}/{$next_revision}", '<i class="fa fa-arrow-circle-right"></i>');
|
||||
|
||||
if ($can_edit)
|
||||
{
|
||||
print ' ';
|
||||
print '<span class="anchor">';
|
||||
print anchor ("#", $this->lang->line('Tag'), array ('id' => 'code_revision_tag_button'));
|
||||
print anchor ("#", $this->lang->line('Tag'), array ('id' => 'code_revision_edit_revision_tag_button'));
|
||||
print '</span>';
|
||||
}
|
||||
|
||||
@ -391,7 +656,7 @@ $history = $file['history'];
|
||||
<?php if ($can_edit): ?>
|
||||
<span class='anchor'>
|
||||
<?php print anchor ("#", $this->lang->line('Edit'),
|
||||
array ('id' => 'code_revision_edit_logmsg_button'));
|
||||
array ('id' => 'code_revision_edit_revision_message_button'));
|
||||
?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
@ -555,13 +820,84 @@ $history = $file['history'];
|
||||
print "</pre>\n";
|
||||
print "</div>\n";
|
||||
}
|
||||
|
||||
?>
|
||||
</div> <!-- code_revision_mainarea_review_comment -->
|
||||
</div> <!-- code_revision_mainarea_result_comments -->
|
||||
|
||||
</div> <!-- code_revision_mainarea_result -->
|
||||
|
||||
<?php if ($can_edit): ?>
|
||||
<div id="code_revision_edit_revision_tag_form">
|
||||
<?php print
|
||||
form_input (
|
||||
array ('name' => 'code_edit_revision_tag',
|
||||
'value' => $history['tag'],
|
||||
'id' => 'code_revision_edit_revision_tag')
|
||||
)
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div id='code_revision_edit_revision_message_form'>
|
||||
<?php print
|
||||
form_textarea (
|
||||
array ('name' => 'code_edit_revision_message',
|
||||
'value' => $history['msg'], 'rows'=> 10, 'cols' => 70,
|
||||
'id' => 'code_revision_edit_revision_message')
|
||||
)
|
||||
?>
|
||||
</div>
|
||||
<?php endif; ?> <!-- $can_edit -->
|
||||
|
||||
<?php if ($is_loggedin): ?>
|
||||
<div id="code_revision_new_review_comment_form">
|
||||
<div id='code_revision_new_review_comment_tabs' style='width:100%;'>
|
||||
<ul>
|
||||
<li><a href='#code_revision_new_review_comment_input'><?php print $this->lang->line('Comment'); ?></a></li>
|
||||
<li><a href='#code_revision_new_review_comment_preview'><?php print $this->lang->line('Preview'); ?></a></li>
|
||||
</ul>
|
||||
|
||||
<div id='code_revision_new_review_comment_input'>
|
||||
<textarea type='textarea' id='code_revision_new_review_comment' name='code_new_review_comment' rows=24 cols=100 style='width:100%;'></textarea>
|
||||
</div>
|
||||
|
||||
<div id='code_revision_new_review_comment_preview' class='form_input_preview'>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$comment_label = $this->lang->line('Comment');
|
||||
$preview_label = $this->lang->line('Preview');
|
||||
|
||||
for ($i = 0; $i < $review_count; )
|
||||
{
|
||||
$rc = $reviews[$i];
|
||||
$i++;
|
||||
if ($login['id'] == $rc->updatedby)
|
||||
{
|
||||
$text = htmlspecialchars ($rc->comment);
|
||||
print "
|
||||
<div id='code_revision_edit_review_comment_form_{$i}'>
|
||||
<div id='code_revision_edit_review_comment_tabs_{$i}' class='code_revision_edit_review_comment_tabs' style='width:100%;'>
|
||||
<ul>
|
||||
<li><a href='#code_revision_edit_review_comment_input_{$i}'>{$comment_label}</a></li>
|
||||
<li><a href='#code_revision_edit_review_comment_preview_{$i}'>{$preview_label}</a></li>
|
||||
</ul>
|
||||
|
||||
<div id='code_revision_edit_review_comment_input_{$i}'>
|
||||
<textarea type='textarea' id='code_revision_edit_review_comment_{$i}' name='code_edit_review_comment_{$i}' rows=24 cols=100 style='width:100%;'>{$text}</textarea>
|
||||
</div>
|
||||
|
||||
<div id='code_revision_edit_review_comment_preview_{$i}' class='form_input_preview'>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
";
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php endif; ?> <!-- $is_loggedin -->
|
||||
|
||||
<div id='code_revision_mainarea_alert'></div>
|
||||
|
||||
</div> <!-- code_revision_mainarea -->
|
||||
@ -576,75 +912,6 @@ $history = $file['history'];
|
||||
|
||||
<!---------------------------------------------------------------------------->
|
||||
|
||||
|
||||
<?php if ($can_edit): ?>
|
||||
<div id="code_revision_tag_div">
|
||||
<?php print form_open("code/revision/{$project->id}${revreqroot}", 'id="code_revision_tag_form"')?>
|
||||
<?php print
|
||||
form_input (
|
||||
array ('name' => 'tag_revision',
|
||||
'value' => $history['tag'],
|
||||
'id' => 'code_revision_tag')
|
||||
)
|
||||
|
||||
?>
|
||||
<?php print form_close()?>
|
||||
</div>
|
||||
|
||||
<div id="code_revision_edit_div">
|
||||
<?php print form_open("code/revision/{$project->id}${revreqroot}", 'id="code_revision_edit_logmsg_form"')?>
|
||||
<?php print
|
||||
form_textarea (
|
||||
array ('name' => 'edit_log_message',
|
||||
'value' => $history['msg'], 'rows'=> 10, 'cols' => 70,
|
||||
'id' => 'code_revision_edit_log_message')
|
||||
)
|
||||
|
||||
?>
|
||||
<?php print form_close()?>
|
||||
</div>
|
||||
<?php endif; ?> <!-- $can_edit -->
|
||||
|
||||
<?php if ($is_loggedin): ?>
|
||||
<div id="code_revision_new_review_comment_div">
|
||||
<?php
|
||||
print form_open("code/revision/{$project->id}${revreqroot}", 'id="code_revision_new_review_comment_form"');
|
||||
|
||||
print form_error('new_review_comment');
|
||||
print '<br />';
|
||||
|
||||
print form_textarea (
|
||||
array ('name' => 'new_review_comment',
|
||||
'value' => set_value('new_review_comment', ''),
|
||||
'rows'=> 20, 'cols' => 90,
|
||||
'id' => 'code_revision_new_review_comment')
|
||||
);
|
||||
print form_close();
|
||||
|
||||
for ($i = $review_count; $i > 0; $i--)
|
||||
{
|
||||
$rc = $reviews[$i - 1];
|
||||
|
||||
if ($login['id'] == $rc->updatedby)
|
||||
{
|
||||
print "<div id='code_revision_edit_review_comment_div_{$i}'>\n";
|
||||
print form_open("code/revision/{$project->id}${revreqroot}", "id='code_revision_edit_review_comment_form_{$i}'");
|
||||
print form_error("edit_review_comment_{$i}");
|
||||
print '<br />';
|
||||
print form_textarea (
|
||||
array ('name' => "edit_review_comment_{$i}",
|
||||
'value' => $rc->comment, 'rows'=> 20, 'cols' => 90,
|
||||
'id' => "code_revision_edit_review_comment_{$i}")
|
||||
);
|
||||
print form_close();
|
||||
print "</div>\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php endif; ?> <!-- $is_loggedin -->
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
@ -1088,8 +1088,6 @@ $this->load->view (
|
||||
|
||||
<!---------------------------------------------------------------------------->
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
function render_wiki()
|
||||
{
|
||||
|
@ -443,3 +443,37 @@
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
|
||||
/*-----------------------------------------------
|
||||
* code revision - dialogs
|
||||
*-----------------------------------------------*/
|
||||
#code_revision_new_review_comment_tabs,
|
||||
.code_revision_edit_review_comment_tabs {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
#code_revision_new_review_comment_tabs .ui-tabs-panel,
|
||||
.code_revision_edit_review_comment_tabs .ui-tabs-panel {
|
||||
padding: 0.2em 0em 0em 0em !important;
|
||||
}
|
||||
|
||||
#code_revision_new_review_comment_tabs .ui-widget-header,
|
||||
.code_revision_edit_review_comment_tabs .ui-widget-header {
|
||||
border: none !important;
|
||||
background: none !important;
|
||||
padding: 0em !important;
|
||||
}
|
||||
|
||||
#code_revision_new_review_comment_tabs .ui-tabs-nav,
|
||||
.code_revision_edit_review_comment_tabs .ui-tabs-nav {
|
||||
padding: 0em !important;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-nav li.ui-state-default {
|
||||
border-bottom: 1px solid #cccccc !important;
|
||||
}
|
||||
|
||||
.ui-tabs .ui-tabs-nav li.ui-state-active {
|
||||
border-bottom: 1px solid #fbd850 !important;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user