Feature #35559 » 35559.patch
| app/helpers/issues_helper.rb | ||
|---|---|---|
| 152 | 152 | |
| 153 | 153 |
open_subtasks = subtasks_grouped[false].to_i |
| 154 | 154 |
closed_subtasks = subtasks_grouped[true].to_i |
| 155 |
all_subtasks = open_subtasks + closed_subtasks |
|
| 155 |
render_issues_stats(open_subtasks, closed_subtasks, {:parent_id => "~#{issue.id}"})
|
|
| 156 |
end |
|
| 156 | 157 | |
| 157 |
return if all_subtasks == 0 |
|
| 158 |
# Renders relations stats (total relations (open - closed)) with query links |
|
| 159 |
def render_relations_stats(issue, relations) |
|
| 160 |
open_relations = relations.count{|r|(r.other_issue(issue).closed?)==false}
|
|
| 161 |
closed_relations = relations.count{|r|r.other_issue(issue).closed?}
|
|
| 162 |
render_issues_stats(open_relations, closed_relations, {:issue_id => relations.map{|r|r.other_issue(issue).id}.join(',')})
|
|
| 163 |
end |
|
| 158 | 164 | |
| 165 |
# Renders issues stats (total relations (open - closed)) with query links |
|
| 166 |
def render_issues_stats(open_issues=0, closed_issues=0, issues_path_attr={})
|
|
| 167 |
total_issues = open_issues + closed_issues |
|
| 168 |
return if total_issues == 0 |
|
| 159 | 169 |
all_block = content_tag( |
| 160 | 170 |
'span', |
| 161 |
link_to(all_subtasks, issues_path(parent_id: "~#{issue.id}", set_filter: true, status_id: '*')),
|
|
| 171 |
link_to(total_issues, issues_path(issues_path_attr.merge({:set_filter => true, :status_id => '*'}))),
|
|
| 162 | 172 |
class: 'badge badge-issues-count' |
| 163 | 173 |
) |
| 164 | ||
| 165 | 174 |
closed_block = content_tag( |
| 166 | 175 |
'span', |
| 167 | 176 |
link_to_if( |
| 168 |
closed_subtasks > 0,
|
|
| 169 |
l(:label_x_closed_issues_abbr, count: closed_subtasks),
|
|
| 170 |
issues_path(parent_id: "~#{issue.id}", set_filter: true, status_id: 'c')
|
|
| 177 |
closed_issues > 0,
|
|
| 178 |
l(:label_x_closed_issues_abbr, count: closed_issues),
|
|
| 179 |
issues_path(issues_path_attr.merge({:set_filter => true, :status_id => 'c'}))
|
|
| 171 | 180 |
), |
| 172 | 181 |
class: 'closed' |
| 173 | 182 |
) |
| 174 | ||
| 175 | 183 |
open_block = content_tag( |
| 176 | 184 |
'span', |
| 177 | 185 |
link_to_if( |
| 178 |
open_subtasks > 0,
|
|
| 179 |
l(:label_x_open_issues_abbr, :count => open_subtasks),
|
|
| 180 |
issues_path(:parent_id => "~#{issue.id}", :set_filter => true, :status_id => 'o')
|
|
| 186 |
open_issues > 0,
|
|
| 187 |
l(:label_x_open_issues_abbr, :count => open_issues),
|
|
| 188 |
issues_path(issues_path_attr.merge({:set_filter => true, :status_id => 'o'}))
|
|
| 181 | 189 |
), |
| 182 | 190 |
class: 'open' |
| 183 | 191 |
) |
| 184 | ||
| 185 | 192 |
content_tag( |
| 186 | 193 |
'span', |
| 187 | 194 |
"#{all_block} (#{open_block} — #{closed_block})".html_safe,
|
| app/views/issues/_relations.html.erb | ||
|---|---|---|
| 4 | 4 |
<% end %> |
| 5 | 5 |
</div> |
| 6 | 6 | |
| 7 |
<p><strong><%=l(:label_related_issues)%></strong></p> |
|
| 7 |
<p> |
|
| 8 |
<strong><%=l(:label_related_issues)%></strong> |
|
| 9 |
<%= render_relations_stats(@issue, @relations) if @relations.present? %> |
|
| 10 |
</p> |
|
| 8 | 11 | |
| 9 | 12 |
<% if @relations.present? %> |
| 10 | 13 |
<%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do %>
|
| public/stylesheets/application.css | ||
|---|---|---|
| 547 | 547 |
#issue_tree td.checkbox, #relations td.checkbox {display:none;}
|
| 548 | 548 |
#issue_tree td.subject, #relations td.subject {width: 50%;}
|
| 549 | 549 |
#issue_tree td.buttons, #relations td.buttons {padding:0;}
|
| 550 |
#issue_tree .issues-stat {font-size: 80%}
|
|
| 551 |
#issue_tree .issues-stat .badge {bottom: initial;}
|
|
| 550 |
#issue_tree, #relations .issues-stat {font-size: 80%}
|
|
| 551 |
#issue_tree, #relations .issues-stat .badge {bottom: initial;}
|
|
| 552 | 552 | |
| 553 | 553 |
#trackers_description {display:none;}
|
| 554 | 554 |
#trackers_description dt {font-weight: bold; text-decoration: underline;}
|
| test/helpers/issues_helper_test.rb | ||
|---|---|---|
| 375 | 375 |
assert_equal new_project_issue_path(issue.project, params), |
| 376 | 376 |
url_for_new_subtask(issue) |
| 377 | 377 |
end |
| 378 | ||
| 379 |
def test_render_issues_stats |
|
| 380 |
html = render_issues_stats(1, 1, {:issue_id => '15,16'})
|
|
| 381 | ||
| 382 |
assert_include '<a href="/issues?issue_id=15%2C16&set_filter=true&status_id=%2A">2</a>', html |
|
| 383 |
assert_include '<a href="/issues?issue_id=15%2C16&set_filter=true&status_id=o">1 open</a>', html |
|
| 384 |
assert_include '<a href="/issues?issue_id=15%2C16&set_filter=true&status_id=c">1 closed</a>', html |
|
| 385 |
end |
|
| 386 | ||
| 387 |
def test_render_descendants_stats |
|
| 388 |
parent = Issue.generate!(:status_id => 1) |
|
| 389 |
child = Issue.generate!(:parent_issue_id => parent.id, :status_id => 1) |
|
| 390 |
Issue.generate!(:parent_issue_id => child.id, :status_id => 5) |
|
| 391 |
parent.reload |
|
| 392 |
html = render_descendants_stats(parent) |
|
| 393 | ||
| 394 |
assert_include "<a href=\"/issues?parent_id=~#{parent.id}&set_filter=true&status_id=%2A\">2</a>", html
|
|
| 395 |
assert_include "<a href=\"/issues?parent_id=~#{parent.id}&set_filter=true&status_id=o\">1 open</a>", html
|
|
| 396 |
assert_include "<a href=\"/issues?parent_id=~#{parent.id}&set_filter=true&status_id=c\">1 closed</a>", html
|
|
| 397 |
end |
|
| 398 | ||
| 399 |
def test_render_relations_stats |
|
| 400 |
issue = Issue.generate!(:status_id => 1) |
|
| 401 |
relations = [] |
|
| 402 |
open_issue = Issue.generate!(:status_id => 1) |
|
| 403 |
relations << IssueRelation.create!(:issue_from => open_issue, |
|
| 404 |
:issue_to => issue, |
|
| 405 |
:relation_type => IssueRelation::TYPE_RELATES) |
|
| 406 |
closed_issue = Issue.generate!(:status_id => 5) |
|
| 407 |
relations << IssueRelation.create!(:issue_from => closed_issue, |
|
| 408 |
:issue_to => issue, |
|
| 409 |
:relation_type => IssueRelation::TYPE_FOLLOWS) |
|
| 410 |
html = render_relations_stats(issue, relations) |
|
| 411 | ||
| 412 |
assert_include "<a href=\"/issues?issue_id=#{open_issue.id}%2C#{closed_issue.id}&set_filter=true&status_id=%2A\">2</a></span>", html
|
|
| 413 |
assert_include "<a href=\"/issues?issue_id=#{open_issue.id}%2C#{closed_issue.id}&set_filter=true&status_id=o\">1 open</a>", html
|
|
| 414 |
assert_include "<a href=\"/issues?issue_id=#{open_issue.id}%2C#{closed_issue.id}&set_filter=true&status_id=c\">1 closed</a>", html
|
|
| 415 |
end |
|
| 378 | 416 |
end |