summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-04-07 15:19:56 +0000
committerRémy Coutable <remy@rymai.me>2016-04-07 15:19:56 +0000
commit074c2393901de2f06d9c4317f2ada6600b13d2e8 (patch)
tree44af89dee8a0fe7fb3f9fb32f0185c19b034e02e /app/controllers
parent9cae14037a0c52039c15483a29487a06697ad79d (diff)
parent0bef4b97647893df8cf0a781f768b1775ae2bb58 (diff)
downloadgitlab-ce-074c2393901de2f06d9c4317f2ada6600b13d2e8.tar.gz
Merge branch 'issue_14012' into 'master'
Fix problem when creating milestones in groups without projects Fixes #14012 See merge request !3481
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/groups/milestones_controller.rb31
1 files changed, 26 insertions, 5 deletions
diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb
index b23c3022fb5..9d5a28e8d4d 100644
--- a/app/controllers/groups/milestones_controller.rb
+++ b/app/controllers/groups/milestones_controller.rb
@@ -18,14 +18,14 @@ class Groups::MilestonesController < Groups::ApplicationController
end
def create
- project_ids = params[:milestone][:project_ids]
+ project_ids = params[:milestone][:project_ids].reject(&:blank?)
title = milestone_params[:title]
- @projects.where(id: project_ids).each do |project|
- Milestones::CreateService.new(project, current_user, milestone_params).execute
+ if create_milestones(project_ids)
+ redirect_to milestone_path(title)
+ else
+ render_new_with_error(project_ids.empty?)
end
-
- redirect_to milestone_path(title)
end
def show
@@ -41,6 +41,27 @@ class Groups::MilestonesController < Groups::ApplicationController
private
+ def create_milestones(project_ids)
+ return false unless project_ids.present?
+
+ ActiveRecord::Base.transaction do
+ @projects.where(id: project_ids).each do |project|
+ Milestones::CreateService.new(project, current_user, milestone_params).execute
+ end
+ end
+
+ true
+ rescue ActiveRecord::ActiveRecordError => e
+ flash.now[:alert] = "An error occurred while creating the milestone: #{e.message}"
+ false
+ end
+
+ def render_new_with_error(empty_project_ids)
+ @milestone = Milestone.new(milestone_params)
+ @milestone.errors.add(:project_id, "Please select at least one project.") if empty_project_ids
+ render :new
+ end
+
def authorize_admin_milestones!
return render_404 unless can?(current_user, :admin_milestones, group)
end