1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
# frozen_string_literal: true
class Groups::MilestonesController < Groups::ApplicationController
include MilestoneActions
before_action :milestone, only: [:edit, :show, :update, :issues, :merge_requests, :participants, :labels, :destroy]
before_action :authorize_admin_milestones!, only: [:edit, :new, :create, :update, :destroy]
feature_category :team_planning
urgency :low
def index
respond_to do |format|
format.html do
@milestone_states = Milestone.states_count(group_projects_with_access.without_order, [group])
@milestones = milestones.page(params[:page])
end
format.json do
render json: milestones.to_json(only: [:id, :title, :due_date], methods: :name)
end
end
end
def new
@noteable = @milestone = Milestone.new
end
def create
@milestone = Milestones::CreateService.new(group, current_user, milestone_params).execute
if @milestone.persisted?
redirect_to milestone_path(@milestone)
else
render "new"
end
end
def show; end
def edit; end
def update
Milestones::UpdateService.new(@milestone.parent, current_user, milestone_params).execute(@milestone)
respond_to do |format|
format.html do
if @milestone.valid?
redirect_to milestone_path(@milestone)
else
render :edit
end
end
format.json do
if @milestone.valid?
head :no_content
else
render json: { errors: @milestone.errors.full_messages }, status: :unprocessable_entity
end
end
end
rescue ActiveRecord::StaleObjectError
respond_to do |format|
format.html do
@conflict = true
render :edit
end
format.json do
render json: {
errors: [
format(
_("Someone edited this %{model_name} at the same time you did. Please refresh your browser and make sure your changes will not unintentionally remove theirs."), # rubocop:disable Layout/LineLength
model_name: _('milestone')
)
]
}, status: :conflict
end
end
end
def destroy
Milestones::DestroyService.new(group, current_user).execute(@milestone)
respond_to do |format|
format.html { redirect_to group_milestones_path(group), status: :see_other }
format.js { head :ok }
end
end
private
def authorize_admin_milestones!
render_404 unless can?(current_user, :admin_milestone, group)
end
def milestone_params
params.require(:milestone)
.permit(
:description,
:due_date,
:lock_version,
:start_date,
:state_event,
:title
)
end
def milestones
MilestonesFinder.new(search_params).execute
end
def milestone
@noteable = @milestone ||= group.milestones.find_by_iid(params[:id])
render_404 unless @milestone
end
def search_params
groups = request.format.json? ? group_ids(include_ancestors: true) : group_ids
@sort = params[:sort] || 'due_date_asc'
params.permit(:state, :search_title).merge(sort: @sort, group_ids: groups, project_ids: group_projects_with_access)
end
def group_projects_with_access
group_projects_with_subgroups.with_issues_or_mrs_available_for_user(current_user)
end
def group_ids(include_ancestors: false)
if include_ancestors
group.self_and_hierarchy.public_or_visible_to_user(current_user).select(:id)
else
group.self_and_descendants.public_or_visible_to_user(current_user).select(:id)
end
end
end
Groups::MilestonesController.prepend_mod_with('Groups::MilestonesController')
|