Commit d93241fc85636634ca3a2c0c0a946ebfd4f80575
- Date: Thu May 01 15:53:32 +0000 2008
- Committer: mtkd (mtkd@prj2.com)
- Author: mtkd (mtkd@prj2.com)
- Commit SHA1: d93241fc85636634ca3a2c0c0a946ebfd4f80575
- Tree SHA1: 3bd82b1803ce19c51fd1cbcb51b08c15744544e4
- app/helpers/tickets_helper.rb 37 -++++++++++++++++++++++++++++++++++++
- test/fixtures/milestones.yml 29 ----------------------+++++++
- public/stylesheets/base.css 4 --++
- app/views/tickets/ac_project_index.html.erb 39 ---------------------------------------
- app/views/sessions/ac_new.html.erb 2 -+
- public/robots.txt 4 --++
- app/views/tickets/_ac_right_ticket_filter.html.erb 44 ++++++++++++++++++++++++++++++++++++++++++++
- app/views/wikis/ac_project_edit.html.erb 6 ---+++
- app/helpers/projects_helper.rb 65 -------------------------------------------------------------++++
- app/views/wikis/ac_project_new.html.erb 4 --++
- app/views/projects/ac_timeline.html.erb 4 ----
- app/views/activities/_ac_right_actionbox_post_message.html.erb 2 -+
- app/controllers/tickets_controller.rb 8 ++++++++
- test/fixtures/tickets.yml 502 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- app/models/ticket.rb 47 --+++++++++++++++++++++++++++++++++++++++++++++
- app/helpers/application_helper.rb 8 --------
Commit diff
- Diff rendering mode:
- inline
- side by side
app/controllers/tickets_controller.rb
|   | ||
| 6 | 6 | @title, @url_suffix = Project.tab_settings(PRJ_TAB_TICKETS) |
| 7 | 7 | render :action => "ac_project_index" |
| 8 | 8 | end |
| 9 | ||
| 10 | def create | |
| 11 | if !params[:id] | |
| 12 | @title, @url_suffix = Project.tab_settings(PRJ_TAB_TICKETS) | |
| 13 | render :action => "ac_project_index" | |
| 14 | end | |
| 15 | end | |
| 16 | ||
| 9 | 17 | |
| 10 | 18 | end |
| toggle raw diff | ||
app/helpers/application_helper.rb
|   | ||
| 183 | 183 | def div_content_close |
| 184 | 184 | %Q{</div>} |
| 185 | 185 | end |
| 186 | ||
| 187 | ||
| 188 | ||
| 189 | ||
| 190 | ||
| 191 | ||
| 192 | ||
| 193 | ||
| 194 | 186 | |
| 195 | 187 | def div_rightcolumn_open |
| 196 | 188 | %Q{<div id='rightcolumn'>} |
| toggle raw diff | ||
app/helpers/projects_helper.rb
|   | ||
| 121 | 121 | out << actionbox_complex(:allow_shortcuts => true, :new_milestone => true, :completed_milestones => true) |
| 122 | 122 | when PRJ_TAB_TICKETS |
| 123 | 123 | out << actionbox_complex(:allow_shortcuts => true, :new_ticket => true) |
| 124 | ||
| 124 | out << render(:partial => "ac_right_ticket_filter") | |
| 125 | 125 | when PRJ_TAB_ARTICLES |
| 126 | 126 | out << actionbox_complex(:allow_shortcuts => true, :new_article => true) |
| 127 | 127 | when PRJ_TAB_FORUM |
| … | … | |
| 134 | 134 | out |
| 135 | 135 | end |
| 136 | 136 | |
| 137 | ||
| 138 | ||
| 139 | ||
| 140 | ||
| 141 | ||
| 142 | ||
| 143 | ||
| 144 | ||
| 145 | ||
| 146 | ||
| 147 | ||
| 148 | ||
| 149 | ||
| 150 | ||
| 151 | ||
| 152 | ||
| 153 | ||
| 154 | ||
| 155 | ||
| 156 | ||
| 157 | ||
| 158 | ||
| 159 | ||
| 160 | ||
| 161 | ||
| 162 | ||
| 163 | ||
| 164 | ||
| 165 | ||
| 166 | ||
| 167 | ||
| 168 | ||
| 137 | ||
| 169 | 138 | def render_project_roadmap |
| 170 | ||
| 171 | 139 | #get all milestones for a project |
| 172 | 140 | #order by date desc |
| 173 | 141 | #if there is a version linked, show that next to milestone |
| … | … | |
| 143 | 143 | @milestones = Milestone.roadmap(@project.id, current_user) |
| 144 | 144 | if @milestones.size > 0 then |
| 145 | 145 | for milestone in @milestones |
| 146 | ||
| 147 | 146 | # milestone title |
| 148 | 147 | out << "<h3>" |
| 149 | 148 | out << format_date_ddbbyy(milestone.due_date) |
| 150 | 149 | out << " - " << milestone.name << " (" << milestone.status.to_s.capitalize << ")" |
| 151 | 150 | out << "</h3>" |
| 152 | ||
| 153 | 151 | # milestone progress bar |
| 154 | 152 | out << "<table class='progress'>" |
| 155 | 153 | out << "<tr>" |
| … | … | |
| 157 | 157 | out << "</table>" |
| 158 | 158 | |
| 159 | 159 | |
| 160 | ||
| 161 | ||
| 162 | ||
| 163 | ||
| 164 | ||
| 165 | ||
| 166 | ||
| 167 | ||
| 168 | ||
| 169 | ||
| 170 | ||
| 171 | ||
| 172 | ||
| 173 | ||
| 174 | ||
| 175 | ||
| 176 | ||
| 177 | ||
| 178 | ||
| 179 | ||
| 180 | ||
| 181 | ||
| 182 | ||
| 183 | ||
| 184 | ||
| 185 | 160 | end |
| 186 | 161 | end |
| 187 | 162 | out |
| 188 | 163 | end |
| 189 | 164 | |
| 165 | ||
| 166 | ||
| 190 | 167 | def format_life_cycle (ls) |
| 191 | 168 | case ls |
| 192 | 169 | when :pre_alpha |
| toggle raw diff | ||
app/helpers/tickets_helper.rb
|   | ||
| 3 | 3 | include ProjectsHelper |
| 4 | 4 | |
| 5 | 5 | def render_project_tickets |
| 6 | out = "" | |
| 7 | @tickets = Ticket.filtered(params[:ticket] ? params[:ticket] : "") | |
| 8 | if @tickets.size > 0 then | |
| 9 | # tasks list | |
| 10 | out << "<table class='public' width='100%'>" | |
| 11 | out << "<tr>" | |
| 12 | out << "<th></th>" | |
| 13 | out << "<th>Task</th>" | |
| 14 | out << "<th>Assignee</th>" | |
| 15 | out << "<th>Type</th>" | |
| 16 | out << "<th>Status</th>" | |
| 17 | out << "<th>Impact</th>" | |
| 18 | out << "<th>Priority</th>" | |
| 19 | out << "</tr>" | |
| 20 | # | |
| 21 | for ticket in @tickets | |
| 22 | out << "<tr>" | |
| 23 | out << "<td>" << ticket.name << "</td>" | |
| 24 | out << "<td>" << ticket.title << "</td>" | |
| 25 | out << "<td>" << ticket.fullname << "</td>" | |
| 26 | out << "<td>" << ticket.ttype.to_s.capitalize << "</td>" | |
| 27 | out << "<td>" << ticket.status.to_s.capitalize << "</td>" | |
| 28 | out << "<td>" << ticket.impact.to_s.capitalize << "</td>" | |
| 29 | out << "<td>" << ticket.priority.to_s.capitalize << "</td>" | |
| 30 | out << "</tr>" | |
| 31 | end | |
| 32 | out << "</table>" | |
| 33 | out << "<br />" | |
| 34 | end | |
| 35 | out | |
| 6 | 36 | end |
| 7 | 37 | |
| 8 | ||
| 38 | def ticket_value_checked? (v) | |
| 39 | params[:ticket][v] == "1" ? "checked" : "" if params[:ticket] | |
| 40 | end | |
| 41 | ||
| 42 | ||
| 43 | ||
| 9 | 44 | end |
| toggle raw diff | ||
app/models/ticket.rb
|   | ||
| 12 | 12 | end |
| 13 | 13 | |
| 14 | 14 | # |
| 15 | ||
| 16 | ||
| 15 | # def self.find_by_milestone(milestone_id) | |
| 16 | # find(:all, :conditions => ["milestone_id = '#{milestone_id}'"], :order => "due_date DESC") | |
| 17 | # end | |
| 18 | ||
| 19 | def self.qconcat (filters, types, lstart) | |
| 20 | s = "" | |
| 21 | types.each do |t| | |
| 22 | if filters[t] == "1" | |
| 23 | s << ", " if s.length > 0 | |
| 24 | s << "'" << t.to_s[lstart..t.to_s.length] << "'" | |
| 25 | end | |
| 26 | end | |
| 27 | s.size > 0 ? s : nil | |
| 28 | end | |
| 29 | ||
| 30 | # | |
| 31 | def self.filtered(filters = {}) | |
| 32 | ||
| 33 | ttype = qconcat(filters, [:ttype_defect, :ttype_enhancement, :ttype_task], 6) | |
| 34 | status = qconcat(filters, [:status_proposed, :status_open, :status_closed], 7) | |
| 35 | impact = qconcat(filters, [:impact_low, :impact_high, :impact_security], 7) | |
| 36 | priority = qconcat(filters, [:priority_none, :priority_low, :priority_high, :priority_critical], 9) | |
| 37 | ||
| 38 | w = "WHERE true " | |
| 39 | w << "AND tickets.ttype IN (#{ttype})\n" if ttype | |
| 40 | w << "AND tickets.status IN (#{status})\n" if status | |
| 41 | w << "AND tickets.impact IN (#{impact})\n" if impact | |
| 42 | w << "AND tickets.priority IN (#{priority})\n" if priority | |
| 43 | #w << "AND tickets.audience IN (#{audience})\n" | |
| 44 | ||
| 45 | find_by_sql("SELECT tickets.title, | |
| 46 | tickets.ttype, | |
| 47 | tickets.status, | |
| 48 | tickets.impact, | |
| 49 | tickets.priority, | |
| 50 | tickets.audience, | |
| 51 | users.fullname AS fullname, | |
| 52 | milestones.name AS name | |
| 53 | FROM tickets | |
| 54 | JOIN users ON tickets.assignee_id = users.id | |
| 55 | LEFT JOIN milestones ON tickets.milestone_id = milestones.id | |
| 56 | #{w} | |
| 57 | ORDER BY milestones.due_date DESC, priority") | |
| 17 | 58 | end |
| 59 | ||
| 60 | ||
| 18 | 61 | |
| 19 | 62 | # |
| 20 | 63 | |
| toggle raw diff | ||
app/views/activities/_ac_right_actionbox_post_message.html.erb
|   | ||
| 8 | 8 | <%= f.text_area(:activity, :rows => 4) -%> |
| 9 | 9 | |
| 10 | 10 | <p> |
| 11 | ||
| 11 | <a href="javascript:document.postmessage.submit();">Update</a> | |
| 12 | 12 | </p> |
| 13 | 13 | |
| 14 | 14 | <% end -%> |
| toggle raw diff | ||
app/views/projects/ac_timeline.html.erb
|   | ||
| 0 | ||
| 1 | ||
| 2 | ||
| 3 | ||
| toggle raw diff | ||
app/views/sessions/ac_new.html.erb
|   | ||
| 25 | 25 | <%= check_box_tag 'remember_me' %> |
| 26 | 26 | </p> |
| 27 | 27 | |
| 28 | ||
| 28 | <p><a href="javascript:document.sessionform.submit();">Login</a></p> | |
| 29 | 29 | <% end -%> |
| 30 | 30 | |
| 31 | 31 | <%= div_formattedtext_close %> |
| toggle raw diff | ||
app/views/tickets/_ac_right_ticket_filter.html.erb
|   | ||
| 1 | ||
| 2 | <table class='right_default_table' cellspacing=0px> | |
| 3 | ||
| 4 | <% form_for :ticket, :url => project_tickets_path(@project.slug), :method => :get, :html => {:name => 'ticketfilter'} do |f| %> | |
| 5 | ||
| 6 | <tr><th colspan=2>Ticket Filter</th></tr> | |
| 7 | ||
| 8 | <tr> | |
| 9 | ||
| 10 | <td><small> | |
| 11 | <br /> | |
| 12 | <%= check_box(:ticket, :ttype_defect, {:checked => ticket_value_checked?(:ttype_defect)}, "1", "0") %>Defect<br /> | |
| 13 | <%= check_box(:ticket, :ttype_enhancement, {:checked => ticket_value_checked?(:ttype_enhancement)}, "1", "0") %>Enhancement<br /> | |
| 14 | <%= check_box(:ticket, :ttype_task, {:checked => ticket_value_checked?(:ttype_task)}, "1", "0") %>Task<br /> | |
| 15 | <br /> | |
| 16 | <%= check_box(:ticket, :status_proposed, {:checked => ticket_value_checked?(:status_proposed)}, "1", "0") %>Proposed<br /> | |
| 17 | <%= check_box(:ticket, :status_open, {:checked => ticket_value_checked?(:status_open)}, "1", "0") %>Open<br /> | |
| 18 | <%= check_box(:ticket, :status_closed, {:checked => ticket_value_checked?(:status_closed)}, "1", "0") %>Closed<br /> | |
| 19 | <br /> | |
| 20 | </small></td> | |
| 21 | ||
| 22 | <td><small> | |
| 23 | <br /> | |
| 24 | <%= check_box(:ticket, :impact_low, {:checked => ticket_value_checked?(:impact_low)}, "1", "0") %>Low Impact<br /> | |
| 25 | <%= check_box(:ticket, :impact_high, {:checked => ticket_value_checked?(:impact_high)}, "1", "0") %>High Impact<br /> | |
| 26 | <%= check_box(:ticket, :impact_security, {:checked => ticket_value_checked?(:impact_security)}, "1", "0") %>Security Impact<br /> | |
| 27 | <br /> | |
| 28 | <%= check_box(:ticket, :priority_none, {:checked => ticket_value_checked?(:priority_none)}, "1", "0") %>No Priority<br /> | |
| 29 | <%= check_box(:ticket, :priority_low, {:checked => ticket_value_checked?(:priority_low)}, "1", "0") %>Low Priority<br /> | |
| 30 | <%= check_box(:ticket, :priority_high, {:checked => ticket_value_checked?(:priority_high)}, "1", "0") %>High Priority<br /> | |
| 31 | <%= check_box(:ticket, :priority_critical, {:checked => ticket_value_checked?(:priority_critical)}, "1", "0") %>Critical<br /> | |
| 32 | <br /> | |
| 33 | </small></td> | |
| 34 | ||
| 35 | </tr> | |
| 36 | ||
| 37 | <tr><td colspan=2> | |
| 38 | <center><a href="javascript:document.ticketfilter.submit();" class='function'>Update</a></center><br /> | |
| 39 | </td></tr> | |
| 40 | ||
| 41 | <% end %> | |
| 42 | ||
| 43 | </table> | |
| 44 | ||
| toggle raw diff | ||
app/views/tickets/ac_project_index.html.erb
|   | ||
| 1 | 1 | <%= render :partial => "projects/ac_project_header", :locals => { :tab => PRJ_TAB_TICKETS, :project => @project, :pagetitle => @title } %> |
| 2 | 2 | |
| 3 | ||
| 4 | ||
| 5 | ||
| 6 | ||
| 7 | ||
| 8 | 3 | <%= render_project_tickets %> |
| 9 | 4 | |
| 10 | ||
| 11 | ||
| 12 | ||
| 13 | ||
| 14 | ||
| 15 | ||
| 16 | ||
| 17 | ||
| 18 | ||
| 19 | ||
| 20 | ||
| 21 | ||
| 22 | ||
| 23 | ||
| 24 | ||
| 25 | ||
| 26 | ||
| 27 | ||
| 28 | ||
| 29 | ||
| 30 | ||
| 31 | ||
| 32 | ||
| 33 | ||
| 34 | ||
| 35 | ||
| 36 | ||
| 37 | ||
| 38 | ||
| 39 | ||
| 40 | ||
| 41 | ||
| 42 | ||
| 43 | ||
| 44 | 5 | <%= render :partial => "projects/ac_project_footer" %> |
| toggle raw diff | ||
app/views/wikis/ac_project_edit.html.erb
|   | ||
| 21 | 21 | </p> |
| 22 | 22 | |
| 23 | 23 | <p> |
| 24 | ||
| 25 | ||
| 26 | ||
| 24 | <%= link_to "Cancel", project_wiki_path(@project.slug, @wiki.slug) %> | |
| 25 | <a href="javascript:document.editwiki.submit();">Preview</a> | |
| 26 | <a href="javascript:document.editwiki.submit();">Update</a> | |
| 27 | 27 | </p> |
| 28 | 28 | |
| 29 | 29 | <% end -%> |
| toggle raw diff | ||
app/views/wikis/ac_project_new.html.erb
|   | ||
| 17 | 17 | |
| 18 | 18 | <p> |
| 19 | 19 | <%= link_to "Cancel", project_path(@project.slug), :class => 'function' %> |
| 20 | ||
| 21 | ||
| 20 | <a href="javascript:document.newwiki.submit();">Preview</a> | |
| 21 | <a href="javascript:document.newwiki.submit();">Create</a> | |
| 22 | 22 | </p> |
| 23 | 23 | |
| 24 | 24 | <% end -%> |
| toggle raw diff | ||
public/robots.txt
|   | ||
| 7 | 7 | #User-agent: * |
| 8 | 8 | #Disallow: /projects/ |
| 9 | 9 | |
| 10 | ||
| 11 | ||
| 10 | #User-agent: * | |
| 11 | #Disallow: / | |
| toggle raw diff | ||
public/stylesheets/base.css
|   | ||
| 1 | 1 | /* |
| 2 | ||
| 3 | ||
| 4 | 2 | Note: CSS for syntax highlighting is in /vendor/coderay/styles/gitlab.rb |
| 5 | 3 | */ |
| 6 | 4 | |
| … | … | |
| 189 | 189 | table.right_default_table th { font-weight: 800; text-align: left; background-color: #eee; border: 0px; margin: 0px; padding: 4px 10px 4px 10px; } |
| 190 | 190 | table.right_default_table td { vertical-align: top; text-align: left; background-color: #fbfbfb; border: 0px; margin: 0px; padding: 4px 5px 4px 10px; } |
| 191 | 191 | table.right_default_table .count { font-size: 0.9em; } |
| 192 | table.right_default_table .function { margin: 10px 0px 0px 0px; background-color: #fff; text-decoration: none; padding: 4px 8px 4px 8px; border: 1px solid #dde; font-weight: 800; } | |
| 193 | ||
| 192 | 194 | /* |
| 193 | 195 | table.releasedownload { margin-top: 10px; margin-bottom: 20px; background-color: #fff; border-spacing: 0px; } |
| 194 | 196 | table.releasedownload td { vertical-align: top; color: #000; font-size: 1.0em; border: 0px; } |
| toggle raw diff | ||
test/fixtures/milestones.yml
|   | ||
| 6 | 6 | <% fixtures :projects %> |
| 7 | 7 | |
| 8 | 8 | gitlabstable: |
| 9 | ||
| 10 | ||
| 9 | id: 1 | |
| 10 | name: "0.1 Stable" | |
| 11 | 11 | description: "90% of Model, very little CRUD, loads missing." |
| 12 | 12 | status: :complete |
| 13 | 13 | slug: "0-1" |
| … | … | |
| 18 | 18 | progress: 96 |
| 19 | 19 | |
| 20 | 20 | gitlabdevelopment: |
| 21 | ||
| 22 | ||
| 21 | id: 2 | |
| 22 | name: "0.2 Active Dev" | |
| 23 | 23 | description: "Current pre-alpha development version, loads missing. Commits go to <a href=''>0.2 Development</a>" |
| 24 | 24 | status: :active |
| 25 | 25 | slug: "0-2" |
| … | … | |
| 30 | 30 | progress: 20 |
| 31 | 31 | |
| 32 | 32 | gitlabdevelopmentplusone: |
| 33 | ||
| 33 | id: 3 | |
| 34 | 34 | name: "0.3 Next" |
| 35 | 35 | description: "Proposed next development version." |
| 36 | 36 | status: :proposed |
| … | … | |
| 42 | 42 | progress: 30 |
| 43 | 43 | |
| 44 | 44 | gitlabpublic: |
| 45 | ||
| 46 | ||
| 45 | id: 4 | |
| 46 | name: "1.x Public" | |
| 47 | 47 | description: "First fully functional release." |
| 48 | 48 | status: :proposed |
| 49 | 49 | slug: "1-x" |
| … | … | |
| 53 | 53 | project_id: <%= projects(:gitlab) %> |
| 54 | 54 | progress: 10 |
| 55 | 55 | |
| 56 | ||
| 57 | ||
| 58 | ||
| 59 | ||
| 60 | ||
| 61 | ||
| 62 | ||
| 63 | ||
| 64 | ||
| 65 | ||
| 66 | ||
| 67 | ||
| 68 | ||
| 69 | ||
| 70 | ||
| toggle raw diff | ||
test/fixtures/tickets.yml
|   | ||
| 7 | 7 | <% fixtures :users, :milestones %> |
| 8 | 8 | |
| 9 | 9 | # |
| 10 | ||
| 11 | ||
| 12 | ||
| 13 | ||
| 14 | ||
| 15 | ||
| 16 | ||
| 17 | ||
| 18 | ||
| 19 | ||
| 20 | ||
| 21 | ||
| 22 | ||
| 23 | ||
| 24 | ||
| 25 | ||
| 26 | ||
| 27 | ||
| 28 | ||
| 29 | ||
| 30 | ||
| 31 | ||
| 32 | ||
| 33 | ||
| 34 | ||
| 35 | ||
| 36 | ||
| 37 | ||
| 38 | ||
| 39 | ||
| 40 | ||
| 41 | ||
| 42 | ||
| 43 | ||
| 44 | ||
| 45 | ||
| 46 | ||
| 47 | ||
| 48 | ||
| 49 | ||
| 50 | ||
| 51 | ||
| 52 | ||
| 53 | ||
| 54 | ||
| 55 | ||
| 56 | ||
| 57 | ||
| 58 | ||
| 10 | # Possible filtering | |
| 59 | 11 | # |
| 60 | 12 | # * Summary |
| 61 | 13 | # * Roadmap [filter milestone, urgency, user] |
| … | … | |
| 30 | 30 | # Forum [filter project] |
| 31 | 31 | # Timeline [filter project, branch, event_type] |
| 32 | 32 | # |
| 33 | ||
| 34 | ||
| 35 | ||
| 36 | ||
| 37 | ||
| 38 | ||
| 39 | ||
| 40 | ||
| 41 | ||
| 42 | ||
| 43 | ||
| 44 | ||
| 45 | ||
| 46 | ||
| 47 | ||
| 48 | ||
| 49 | ||
| 50 | ||
| 51 | ||
| 52 | ||
| 53 | ||
| 54 | ||
| 55 | ||
| 56 | ||
| 57 | ||
| 58 | ||
| 59 | ||
| 60 | ||
| 61 | ||
| 62 | ||
| 63 | ||
| 64 | ||
| 65 | ||
| 66 | ||
| 67 | ||
| 68 | ||
| 69 | ||
| 70 | ||
| 71 | ||
| 72 | ||
| 73 | ||
| 74 | ||
| 75 | ||
| 76 | ||
| 77 | ||
| 78 | 33 | |
| 79 | ||
| 80 | ||
| 81 | ||
| 82 | ||
| 34 | ||
| 35 | ||
| 36 | DEFAULTS: &DEFAULTS | |
| 37 | open_date: "2008-02-16 21:56:00" | |
| 83 | 38 | assignee_id: <%= users(:mtkd) %> |
| 84 | 39 | submitter_id: <%= users(:mtkd) %> |
| 40 | audience: :public | |
| 41 | ||
| 42 | ||
| 43 | 37: | |
| 44 | id: 37 | |
| 45 | title: "Rename and move gitorious config to a table" | |
| 46 | <<: *DEFAULTS | |
| 47 | milestone_id: <%= milestones(:gitlabdevelopment) %> | |
| 48 | ttype: :task #:defect, :enhancement, :task | |
| 49 | status: :proposed #:proposed, :open, :closed, :deleted | |
| 50 | impact: :low #:low, :high, :security | |
| 51 | priority: :low #:none, :low, :high, :critical | |
| 52 | ||
| 53 | 36: | |
| 54 | id: 36 | |
| 55 |
