1
|
class MtController < ApplicationController
|
2
|
unloadable
|
3
|
|
4
|
before_filter :find_project_by_project_id, :authorize, :get_trackers
|
5
|
menu_item :traceability_matrix
|
6
|
|
7
|
helper :issues
|
8
|
helper :projects
|
9
|
helper :queries
|
10
|
include QueriesHelper
|
11
|
helper :sort
|
12
|
include SortHelper
|
13
|
|
14
|
attr_accessor :issue_rows
|
15
|
attr_accessor :issue_cols
|
16
|
attr_accessor :query_rows
|
17
|
attr_accessor :query_cols
|
18
|
attr_accessor :tracker_rows
|
19
|
attr_accessor :tracker_cols
|
20
|
attr_accessor :issue_pairs
|
21
|
attr_accessor :not_seen_issue_cols
|
22
|
|
23
|
|
24
|
def init_macro_context(project)
|
25
|
@project = project
|
26
|
end
|
27
|
|
28
|
def build_list_of_issues
|
29
|
@issue_rows = @query_rows.issues().sort {|issue_a, issue_b| issue_a.id <=> issue_b.id}
|
30
|
@issue_cols = @query_cols.issues().sort {|issue_a, issue_b| issue_a.id <=> issue_b.id}
|
31
|
@issue_pairs = {}
|
32
|
@not_seen_issue_cols = {}
|
33
|
|
34
|
if @issue_rows.empty?
|
35
|
return
|
36
|
end
|
37
|
|
38
|
if @issue_cols.empty?
|
39
|
return
|
40
|
end
|
41
|
|
42
|
relations = IssueRelation.where("issue_from_id IN (:ids) OR issue_to_id IN (:ids)", :ids => @issue_rows.map(&:id)).all
|
43
|
|
44
|
Issue.load_relations(@issue_cols)
|
45
|
|
46
|
@not_seen_issue_cols = @issue_cols.dup
|
47
|
relations.each do |relation|
|
48
|
if @not_seen_issue_cols.include?relation.issue_to
|
49
|
@issue_pairs[relation.issue_from] ||= {}
|
50
|
@issue_pairs[relation.issue_from][relation.issue_to] ||= []
|
51
|
@issue_pairs[relation.issue_from][relation.issue_to] << true
|
52
|
@not_seen_issue_cols.delete relation.issue_to
|
53
|
elsif @not_seen_issue_cols.include?relation.issue_from
|
54
|
@issue_pairs[relation.issue_to] ||= {}
|
55
|
@issue_pairs[relation.issue_to][relation.issue_from] ||= []
|
56
|
@issue_pairs[relation.issue_to][relation.issue_from] << true
|
57
|
@not_seen_issue_cols.delete relation.issue_from
|
58
|
else
|
59
|
end
|
60
|
end
|
61
|
|
62
|
relations = IssueRelation.where("issue_from_id IN (:ids) OR issue_to_id IN (:ids)", :ids => @issue_cols.map(&:id)).all
|
63
|
|
64
|
issue_rows_copy = @issue_rows.dup
|
65
|
relations.each do |relation|
|
66
|
if issue_rows_copy.include?relation.issue_from
|
67
|
@issue_pairs[relation.issue_from] ||= {}
|
68
|
@issue_pairs[relation.issue_from][relation.issue_to] ||= []
|
69
|
@issue_pairs[relation.issue_from][relation.issue_to] << true
|
70
|
issue_rows_copy.delete relation.issue_to
|
71
|
elsif issue_rows_copy.include?relation.issue_to
|
72
|
@issue_pairs[relation.issue_to] ||= {}
|
73
|
@issue_pairs[relation.issue_to][relation.issue_from] ||= []
|
74
|
@issue_pairs[relation.issue_to][relation.issue_from] << true
|
75
|
issue_rows_copy.delete relation.issue_from
|
76
|
else
|
77
|
end
|
78
|
end
|
79
|
|
80
|
return
|
81
|
|
82
|
end
|
83
|
|
84
|
def get_trackers(query_rows_id=Setting.plugin_traceability_matrix['tracker0'],
|
85
|
query_cols_id=Setting.plugin_traceability_matrix['tracker1'])
|
86
|
@tracker_rows = nil
|
87
|
@query_rows = IssueQuery.find_by_id(query_rows_id)
|
88
|
if @project.nil?
|
89
|
@query_rows.project = Project.find_by_id(@query_rows.project_id)
|
90
|
else
|
91
|
@query_rows.project = @project
|
92
|
end
|
93
|
@query_rows.filters.each do |name, options|
|
94
|
if (name == "tracker_id")
|
95
|
tracker_id = options[:values].first
|
96
|
@tracker_rows = Tracker.find_by_id(tracker_id)
|
97
|
end
|
98
|
|
99
|
end
|
100
|
@tracker_cols = nil
|
101
|
@query_cols = IssueQuery.find_by_id(query_cols_id)
|
102
|
if @project.nil?
|
103
|
@query_cols.project = Project.find_by_id(@query_cols.project_id)
|
104
|
else
|
105
|
@query_cols.project = @project
|
106
|
end
|
107
|
@query_cols.filters.each do |name, options|
|
108
|
if (name == "tracker_id")
|
109
|
tracker_id_ = options[:values].first
|
110
|
@tracker_cols = Tracker.find_by_id(tracker_id_)
|
111
|
end
|
112
|
end
|
113
|
|
114
|
rescue ActiveRecord::RecordNotFound
|
115
|
flash[:error] = l(:'traceability_matrix.setup')
|
116
|
render
|
117
|
end
|
118
|
end
|
119
|
|
120
|
|