summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2016-03-13 18:18:15 +0000
committerDouwe Maan <douwe@gitlab.com>2016-03-13 18:18:15 +0000
commitc07ef544d1eac5e6d838e1cd8826dee93ddd365e (patch)
tree77a901a90ee9104f95386bb8838735d91fd8ed40
parent065de4ab791373f7e6b8b5d3b73b5fe7c9e8e7c5 (diff)
parentd3b7633da4a3964eb4609c7591763aa8e43fd0eb (diff)
downloadgitlab-ce-c07ef544d1eac5e6d838e1cd8826dee93ddd365e.tar.gz
Merge branch 'upcoming' into 'master'
Implements upcoming filter in milstones ![Imgur](http://i.imgur.com/Oc2LZrF.png) @DouweM @JobV I think this is what you wanted :) Lemme know if it there is something that need changing Had alot of fun doing it! Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/14102 See merge request !3148
-rw-r--r--CHANGELOG1
-rw-r--r--app/finders/issuable_finder.rb7
-rw-r--r--app/helpers/milestones_helper.rb1
-rw-r--r--app/models/milestone.rb5
4 files changed, 14 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 07b187b31a2..d11f02e6e27 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -36,6 +36,7 @@ v 8.5.5
- Prevent a 500 error in Todos when author was removed
- Fix pagination for filtered dashboard and explore pages
- Fix "Show all" link behavior
+ - Add #upcoming filter to Milestone filter (Tiago Botelho)
v 8.5.4
- Do not cache requests for badges (including builds badge)
diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb
index c88a420b412..19e8c7a92be 100644
--- a/app/finders/issuable_finder.rb
+++ b/app/finders/issuable_finder.rb
@@ -244,10 +244,17 @@ class IssuableFinder
items
end
+ def filter_by_upcoming_milestone?
+ params[:milestone_title] == '#upcoming'
+ end
+
def by_milestone(items)
if milestones?
if filter_by_no_milestone?
items = items.where(milestone_id: [-1, nil])
+ elsif filter_by_upcoming_milestone?
+ upcoming = Milestone.where(project_id: projects).upcoming
+ items = items.joins(:milestone).where(milestones: { title: upcoming.title })
else
items = items.joins(:milestone).where(milestones: { title: params[:milestone_title] })
diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb
index e3e7daa49c5..e8ac8788d9d 100644
--- a/app/helpers/milestones_helper.rb
+++ b/app/helpers/milestones_helper.rb
@@ -59,6 +59,7 @@ module MilestonesHelper
grouped_milestones = grouped_milestones.sort_by { |x| x.due_date.nil? ? epoch : x.due_date }
grouped_milestones.unshift(Milestone::None)
grouped_milestones.unshift(Milestone::Any)
+ grouped_milestones.unshift(Milestone::Upcoming)
options_from_collection_for_select(grouped_milestones, 'name', 'title', params[:milestone_title])
end
diff --git a/app/models/milestone.rb b/app/models/milestone.rb
index e3b6c552f92..374590ba0c5 100644
--- a/app/models/milestone.rb
+++ b/app/models/milestone.rb
@@ -19,6 +19,7 @@ class Milestone < ActiveRecord::Base
MilestoneStruct = Struct.new(:title, :name, :id)
None = MilestoneStruct.new('No Milestone', 'No Milestone', 0)
Any = MilestoneStruct.new('Any Milestone', '', -1)
+ Upcoming = MilestoneStruct.new('Upcoming', '#upcoming', -2)
include InternalId
include Sortable
@@ -81,6 +82,10 @@ class Milestone < ActiveRecord::Base
super("milestones", /(?<milestone>\d+)/)
end
+ def self.upcoming
+ self.where('due_date > ?', Time.now).order(due_date: :asc).first
+ end
+
def to_reference(from_project = nil)
escaped_title = self.title.gsub("]", "\\]")