63 lines
1.6 KiB
Ruby
63 lines
1.6 KiB
Ruby
# GroupProjectsFinder
|
|
#
|
|
# Used to filter Projects by set of params
|
|
#
|
|
# Arguments:
|
|
# current_user - which user use
|
|
# project_ids_relation: int[] - project ids to use
|
|
# group
|
|
# options:
|
|
# only_owned: boolean
|
|
# only_shared: boolean
|
|
# params:
|
|
# sort: string
|
|
# visibility_level: int
|
|
# tags: string[]
|
|
# personal: boolean
|
|
# search: string
|
|
# non_archived: boolean
|
|
#
|
|
class GroupProjectsFinder < ProjectsFinder
|
|
attr_reader :group, :options
|
|
|
|
def initialize(group:, params: {}, options: {}, current_user: nil, project_ids_relation: nil)
|
|
super(params: params, current_user: current_user, project_ids_relation: project_ids_relation)
|
|
@group = group
|
|
@options = options
|
|
end
|
|
|
|
private
|
|
|
|
def init_collection
|
|
only_owned = options.fetch(:only_owned, false)
|
|
only_shared = options.fetch(:only_shared, false)
|
|
|
|
projects = []
|
|
|
|
if current_user
|
|
if group.users.include?(current_user)
|
|
projects << group.projects unless only_shared
|
|
projects << group.shared_projects unless only_owned
|
|
else
|
|
unless only_shared
|
|
projects << group.projects.visible_to_user(current_user)
|
|
projects << group.projects.public_to_user(current_user)
|
|
end
|
|
|
|
unless only_owned
|
|
projects << group.shared_projects.visible_to_user(current_user)
|
|
projects << group.shared_projects.public_to_user(current_user)
|
|
end
|
|
end
|
|
else
|
|
projects << group.projects.public_only unless only_shared
|
|
projects << group.shared_projects.public_only unless only_owned
|
|
end
|
|
|
|
projects
|
|
end
|
|
|
|
def union(items)
|
|
find_union(items, Project)
|
|
end
|
|
end
|