Newer Older
144 lines | 4.375kb
support markdown table
Yuki Kimoto authored on 2016-06-18
1
<%
2
  # API
3
  my $api = gitprep_api;
4

            
5
  # Parameters
6
  my $user_id = param('user');
7
  my $project_id = param('project');
8
  my $issue_number = param('number');
add new issue feature
Yuki Kimoto authored on 2016-06-20
9
  
add labels to issues
Yuki Kimoto authored on 2016-08-02
10
  unless ($api->logined) {
11
    $self->redirect_to("/$user_id/$project_id/issues");
12
    return;
13
  }
14
  
add new issue feature
Yuki Kimoto authored on 2016-06-20
15
  my $errors;
16
  if (lc $self->req->method eq 'post') {
17
    my $op = param('op');
support markdown table
Yuki Kimoto authored on 2016-06-18
18

            
add new issue feature
Yuki Kimoto authored on 2016-06-20
19
    if ($op eq 'create') {
20
      
21
      # Parameters
22
      my $title = param('title');
23
      my $message = param('message');
24
      
25
      # Validation
26
      my $vc = app->vc;
27
      my $validation = $vc->validation;
28
      
29
      # Check title
30
      if (!(defined $title && length $title)) {
31
        $validation->add_failed(title => 'title is empty');
32
      }
33
      elsif (length $title > 300) {
34
        $validation->add_failed(title => 'title is too long');
35
      }
36
      
37
      # Message
38
      if (!(defined $message && length $message)) {
39
        $message = '';
40
        if (length $message > 1000) {
41
          $validation->add_failed(message => 'message is too long');
42
        }
43
      }
44
      
45
      if ($validation->is_valid) {
46
        my $project_row_id = app->dbi->model('project')->select(
47
          'project.row_id',
48
          where => {'user.id' => $user_id, 'project.id' => $project_id}
49
        )->value;
50
        
51
        my $issue;
52
        my $now_tm = Time::Moment->now_utc;
53
        my $now_epoch = $now_tm->epoch;
54
        my $session_user_row_id = $api->session_user_row_id;
55
        my $issue_number;
56
        
57
        app->dbi->connector->txn(sub {
58

            
59
          # issue number
60
          $issue_number = app->dbi->model('issue')->select(
61
            'max(number)',
62
            where => {project => $project_row_id},
63
            append => 'group by project'
64
          )->value;
65
          $issue_number++;
66
          
67
          # New issue
68
          my $new_issue = {
69
            title => $title,
70
            open => 1,
71
            open_time => $now_epoch,
72
            open_user => $session_user_row_id,
73
            pull_request => 0,
74
            project => $project_row_id,
75
            number => $issue_number
76
          };
77
          app->dbi->model('issue')->insert($new_issue);
78
          my $new_issue_row_id = app->dbi->execute("select LAST_INSERT_ROWID()")->value;
79
          
80
          # New issue message
81
          my $new_issue_message = {
82
            issue => $new_issue_row_id,
83
            number => 1,
84
            message => $message,
85
            create_time => $now_epoch,
86
            update_time => $now_epoch,
87
            user => $session_user_row_id
88
          };
89
          
90
          app->dbi->model('issue_message')->insert($new_issue_message);
91
        });
92
        
93
        $self->redirect_to("/$user_id/$project_id/issues/$issue_number");
94
        return;
95
      }
96
      else {
97
        $errors = $validation->messages;
98
      }
99
    }
100
  }
101
  
support markdown table
Yuki Kimoto authored on 2016-06-18
102
  layout 'common', title => "New issue - $user_id/$project_id";
103
%>
add new issue feature
Yuki Kimoto authored on 2016-06-20
104

            
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
105
%= javascript begin
106
  $(document).ready(function() {
fix new issue js bug
Yuki Kimoto authored on 2016-08-03
107
    %= include '/include/js/issue';
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
108
  });
109
% end
110

            
add new issue feature
Yuki Kimoto authored on 2016-06-20
111
%= include '/include/header';
112
<div class="container">
113
  %= include '/include/errors', errors => $errors;
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
114
  <div class="issue-add-comment" style="width:80%">
add new issue feature
Yuki Kimoto authored on 2016-06-20
115
    <form action="<%= url_for %>" method="post">
116
      <%= hidden_field op => 'create' %>
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
117
      <div class="issue-add-comment-header">
118
        <div class="issue-add-comment-title">
119
          <%= text_field 'title' %>
120
        </div>
fix new issue js bug
Yuki Kimoto authored on 2016-08-03
121
        <div class="issue-message-write-tab issue-add-comment-header-tab"><a href="javascript:void(0)">Write</a></div>
122
        <div class="issue-message-preview-tab issue-add-comment-header-tab"><a class="disable" href="javascript:void(0)">Preview</a></div>
123
        %= include '/include/issue_comment_icon';
add new issue feature
Yuki Kimoto authored on 2016-06-20
124
      </div>
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
125
      <div class="issue-add-comment-body">
fix new issue js bug
Yuki Kimoto authored on 2016-08-03
126
        <div class="issue-message-write-area issue-add-comment-message">
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
127
          <%= text_area 'message' %>
128
        </div>
fix new issue js bug
Yuki Kimoto authored on 2016-08-03
129
        <div class="issue-message-preview-area issue-add-comment-preview markdown-body" style="padding:10px">
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
130
        </div>
131
        <div class="issue-add-comment-bottom">
132
          <div class="issue-add-comment-button-left">
133
            Styling with Markdown is supported
134
          </div>
135
          <div class="issue-add-comment-button">
rename btn-success to btn-gr...
Yuki Kimoto authored on 2016-11-30
136
            <input type="submit" value="Submit new issue" class="btn btn-green">
imrpvoe new issue form
Yuki Kimoto authored on 2016-07-09
137
          </div>
138
        </div>
add new issue feature
Yuki Kimoto authored on 2016-06-20
139
      </div>
140
    </form>
141
  </div>
142
</div>
143

            
144
%= include '/include/footer';