1 contributor
<%
# API
my $api = gitprep_api;
# Parameters
my $user_id = param('user');
my $project_id = param('project');
my $issue_number = param('number');
unless ($api->logined) {
$self->redirect_to("/$user_id/$project_id/issues");
return;
}
my $errors;
if (lc $self->req->method eq 'post') {
my $op = param('op');
if ($op eq 'create') {
# Parameters
my $title = param('title');
my $message = param('message');
# Validation
my $vc = app->vc;
my $validation = $vc->validation;
# Check title
if (!(defined $title && length $title)) {
$validation->add_failed(title => 'title is empty');
}
elsif (length $title > 300) {
$validation->add_failed(title => 'title is too long');
}
# Message
if (!(defined $message && length $message)) {
$message = '';
if (length $message > 1000) {
$validation->add_failed(message => 'message is too long');
}
}
if ($validation->is_valid) {
my $project_row_id = app->dbi->model('project')->select(
'project.row_id',
where => {'user.id' => $user_id, 'project.id' => $project_id}
)->value;
my $issue;
my $now_tm = Time::Moment->now_utc;
my $now_epoch = $now_tm->epoch;
my $session_user_row_id = $api->session_user_row_id;
my $issue_number;
app->dbi->connector->txn(sub {
# issue number
$issue_number = app->dbi->model('issue')->select(
'max(number)',
where => {project => $project_row_id},
append => 'group by project'
)->value;
$issue_number++;
# New issue
my $new_issue = {
title => $title,
open => 1,
open_time => $now_epoch,
open_user => $session_user_row_id,
pull_request => 0,
project => $project_row_id,
number => $issue_number
};
app->dbi->model('issue')->insert($new_issue);
my $new_issue_row_id = app->dbi->execute("select LAST_INSERT_ROWID()")->value;
# New issue message
my $new_issue_message = {
issue => $new_issue_row_id,
number => 1,
message => $message,
create_time => $now_epoch,
update_time => $now_epoch,
user => $session_user_row_id
};
app->dbi->model('issue_message')->insert($new_issue_message);
});
$self->redirect_to("/$user_id/$project_id/issues/$issue_number");
return;
}
else {
$errors = $validation->messages;
}
}
}
layout 'common', title => "New issue - $user_id/$project_id";
%>
%= javascript begin
$(document).ready(function() {
%= include '/include/js/issue';
});
% end
%= include '/include/header';
<div class="container">
%= include '/include/errors', errors => $errors;
<div class="issue-add-comment" style="width:80%">
<form action="<%= url_for %>" method="post">
<%= hidden_field op => 'create' %>
<div class="issue-add-comment-header">
<div class="issue-add-comment-title">
<%= text_field 'title' %>
</div>
<div class="issue-message-write-tab issue-add-comment-header-tab"><a href="javascript:void(0)">Write</a></div>
<div class="issue-message-preview-tab issue-add-comment-header-tab"><a class="disable" href="javascript:void(0)">Preview</a></div>
%= include '/include/issue_comment_icon';
</div>
<div class="issue-add-comment-body">
<div class="issue-message-write-area issue-add-comment-message">
<%= text_area 'message' %>
</div>
<div class="issue-message-preview-area issue-add-comment-preview markdown-body" style="padding:10px">
</div>
<div class="issue-add-comment-bottom">
<div class="issue-add-comment-button-left">
Styling with Markdown is supported
</div>
<div class="issue-add-comment-button">
<input type="submit" value="Submit new issue" class="btn btn-green">
</div>
</div>
</div>
</form>
</div>
</div>
%= include '/include/footer';