Project

General

Profile

Patch #14679 » redmine-2.3-stable-roadmap-parent-and-son-issues.patch

Jun Den, 2015-01-11 02:42

View differences:

app/models/issue.rb (working copy)
1030 1030
    end
1031 1031
  end
1032
  def parents_count
1033
    parent.nil? || parent.project_id != project_id ? 0 : 1 + parent.parents_count
1034
  end
1035

  
1032 1036
  # Returns true if issue's project is a valid
1033 1037
  # parent issue project
1034 1038
  def valid_parent_project?(issue=parent)
app/models/version.rb (working copy)
205 205
  scope :sorted, order(fields_for_order_statement)
206
  def sorted_fixed_issues
207
    issues = []
208
    fixed_issues.visible.find(:all,
209
                              :conditions => nil,
210
                              :include => [:parent, :status, :tracker, :priority],
211
                              :order => "#{Tracker.table_name}.position, #{Issue.table_name}.id").each do |issue|
212
      if issue.parent.nil? || issue.parent.project_id != issue.project_id
213
        issues << issue
214
        issues += find_son_issues({:parent => issue})
215
      end
216
    end
217
    issues
218
  end
219
  # find all son and grandson issue
220
  def find_son_issues(options)
221
    issues = []
222
    fixed_issues.visible.find(:all,
223
                              :conditions => {:parent_id => options[:parent]},
224
                              :include => [:parent, :status, :tracker, :priority],
225
                              :order => "#{Tracker.table_name}.position, #{Issue.table_name}.id").each do |issue|
226
      issues << issue
227
      issues += find_son_issues(options.merge(:parent => issue))
228
    end
229
    issues
230
  end
231

  
206 232
  # Returns the sharings that +user+ can set the version to
207 233
  def allowed_sharings(user = User.current)
208 234
    VERSION_SHARINGS.select do |s|
app/controllers/versions_controller.rb (working copy)
62 62
  end
63 63
  def show
64
    respond_to do |format|
65
      format.html {
66
        @issues = @version.fixed_issues.visible.
67
          includes(:status, :tracker, :priority).
68
          reorder("#{Tracker.table_name}.position, #{Issue.table_name}.id").
69
          all
70
      }
71
      format.api
72
    end
64
    @issues = @version.sorted_fixed_issues
73 65
  end
74 66
  def new
app/views/versions/index.html.erb (working copy)
13 13
    <%= render :partial => 'versions/overview', :locals => {:version => version} %>
14 14
    <%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %>
15
    <% if (issues = @issues_by_version[version]) && issues.size > 0 %>
15
    <% if (issues = version.sorted_fixed_issues) && issues.size > 0 %>
16 16
    <%= form_tag({}) do -%>
17 17
    <table class="list related-issues">
18 18
    <caption><%= l(:label_related_issues) %></caption>
19 19
    <% issues.each do |issue| -%>
20 20
      <tr class="hascontextmenu">
21 21
        <td class="checkbox"><%= check_box_tag 'ids[]', issue.id, false, :id => nil %></td>
22
        <td><%= link_to_issue(issue, :project => (@project != issue.project)) %></td>
22
        <td style="padding-left: <%= issue.parents_count %>em"><%= link_to_issue(issue, :project => (@project != issue.project)) %></td>
23 23
      </tr>
24 24
    <% end -%>
25 25
    </table>
app/views/versions/show.html.erb (working copy)
41 41
  <%- @issues.each do |issue| -%>
42 42
    <tr class="hascontextmenu">
43 43
      <td class="checkbox"><%= check_box_tag 'ids[]', issue.id, false, :id => nil %></td>
44
      <td><%= link_to_issue(issue, :project => (@project != issue.project)) %></td>
44
      <td style="padding-left: <%= issue.parents_count %>em"><%= link_to_issue(issue, :project => (@project != issue.project)) %></td>
45 45
    </tr>
46 46
  <% end %>
47 47
  </table>
(2-2/2)