-
Notifications
You must be signed in to change notification settings - Fork 433
/
search_helper.rb
68 lines (56 loc) · 1.89 KB
/
search_helper.rb
1
2
3
4
5
6
7
8
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
59
60
61
62
63
64
65
66
67
module SearchHelper
include Maintainership
def search_owner(params, obj)
params[:attribute] ||= "OBS:OwnerRootProject"
at = AttribType.find_by_name(params[:attribute])
unless at
render_error :status => 404, :errorcode => "unknown_attribute_type",
:message => "Attribute Type #{params[:attribute]} does not exist"
return
end
limit = params[:limit] || 1
projects = []
if params[:project]
# default project specified
projects = [Project.get_by_name(params[:project])]
else
# Find all marked projects
projects = Project.find_by_attribute_type(at)
if projects.empty?
render_error :status => 400, :errorcode => "attribute_not_set",
:message => "The attribute type #{params[:attribute]} is not set on any projects. No default projects defined."
return
end
end
# search in each marked project
owners = []
projects.each do |project|
attrib = project.attribs.where(attrib_type_id: at.id).first
filter = ["maintainer","bugowner"]
devel = true
if params[:filter]
filter=params[:filter].split(",")
else
if attrib and v=attrib.values.where(value: "BugownerOnly").exists?
filter=["bugowner"]
end
end
if params[:devel]
devel=false if [ "0", "false" ].include? params[:devel]
else
if attrib and v=attrib.values.where(value: "DisableDevel").exists?
devel=false
end
end
if obj.nil?
owners += find_containers_without_definition(project, devel, filter)
elsif obj.is_a? String
owners += find_assignees(project, obj, limit.to_i, devel,
filter, (true unless params[:webui_mode].blank?))
else
owners += find_containers(project, obj, devel, filter)
end
end
return owners
end
end