diff options
Diffstat (limited to 'app/finders/group_projects_finder.rb')
-rw-r--r-- | app/finders/group_projects_finder.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/app/finders/group_projects_finder.rb b/app/finders/group_projects_finder.rb new file mode 100644 index 00000000000..3b9a421b118 --- /dev/null +++ b/app/finders/group_projects_finder.rb @@ -0,0 +1,42 @@ +class GroupProjectsFinder < UnionFinder + def initialize(group, options = {}) + @group = group + @options = options + end + + def execute(current_user = nil) + segments = group_projects(current_user) + find_union(segments, Project) + end + + private + + def group_projects(current_user) + 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 +end |