class Projects::MilestonesController < Projects::ApplicationController before_filter :module_enabled before_filter :milestone, only: [:edit, :update, :destroy, :show] # Allow read any milestone before_filter :authorize_read_milestone! # Allow admin milestone before_filter :authorize_admin_milestone!, except: [:index, :show] respond_to :html def index @milestones = case params[:f] when 'all'; @project.milestones.order("state, due_date DESC") when 'closed'; @project.milestones.closed.order("due_date DESC") else @project.milestones.active.order("due_date ASC") end @milestones = @milestones.includes(:project) @milestones = @milestones.page(params[:page]).per(20) end def new @milestone = @project.milestones.new respond_with(@milestone) end def edit respond_with(@milestone) end def show @issues = @milestone.issues @users = @milestone.participants.uniq @merge_requests = @milestone.merge_requests respond_to do |format| format.html format.js end end def create @milestone = @project.milestones.new(params[:milestone]) @milestone.author_id_of_changes = current_user.id if @milestone.save redirect_to project_milestone_path(@project, @milestone) else render "new" end end def update @milestone.update_attributes(params[:milestone].merge(author_id_of_changes: current_user.id)) respond_to do |format| format.js format.html do if @milestone.valid? redirect_to [@project, @milestone] else render :edit end end end end def destroy return access_denied! unless can?(current_user, :admin_milestone, @milestone) @milestone.destroy respond_to do |format| format.html { redirect_to project_milestones_path } format.js { render nothing: true } end end protected def milestone @milestone ||= @project.milestones.find_by_iid!(params[:id]) end def authorize_admin_milestone! return render_404 unless can?(current_user, :admin_milestone, @project) end def module_enabled return render_404 unless @project.issues_enabled end end