Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/milestone_responses.rb')
-rw-r--r--lib/api/milestone_responses.rb29
1 files changed, 25 insertions, 4 deletions
diff --git a/lib/api/milestone_responses.rb b/lib/api/milestone_responses.rb
index 8ff885983bc..ec108ea8c83 100644
--- a/lib/api/milestone_responses.rb
+++ b/lib/api/milestone_responses.rb
@@ -31,12 +31,14 @@ module API
end
def list_milestones_for(parent)
- milestones = parent.milestones.order_id_desc
- milestones = Milestone.filter_by_state(milestones, params[:state])
- milestones = filter_by_iid(milestones, params[:iids]) if params[:iids].present?
- milestones = filter_by_title(milestones, params[:title]) if params[:title]
+ finder_params = params.merge(milestones_finder_params(parent))
+ milestones = MilestonesFinder.new(finder_params).execute
milestones = filter_by_search(milestones, params[:search]) if params[:search]
+ if params[:iids].present? && !params[:include_parent_milestones]
+ milestones = filter_by_iid(milestones, params[:iids])
+ end
+
present paginate(milestones), with: Entities::Milestone
end
@@ -96,6 +98,25 @@ module API
[MergeRequestsFinder, Entities::MergeRequestBasic]
end
end
+
+ def milestones_finder_params(parent)
+ if parent.is_a?(Group)
+ { group_ids: parent.id }
+ else
+ {
+ project_ids: parent.id,
+ group_ids: parent_group_ids(parent)
+ }
+ end
+ end
+
+ def parent_group_ids(parent)
+ return unless params[:include_parent_milestones].present?
+
+ parent.group.self_and_ancestors
+ .public_or_visible_to_user(current_user)
+ .select(:id)
+ end
end
end
end