Newer
Older
dmpopidor / app / controllers / guidances_controller.rb
@briley briley on 23 May 2018 4 KB Template Versioning
class GuidancesController < ApplicationController
  after_action :verify_authorized
  respond_to :html

  ##
  # GET /guidances
  def admin_index
    authorize Guidance
    @guidances = Guidance.by_org(current_user.org).includes(:guidance_group, :themes).page(1)
    @guidance_groups = GuidanceGroup.by_org(current_user.org).page(1)
  end

  def admin_new
    guidance = Guidance.new
    authorize guidance
    themes = Theme.all.order('title')
    guidance_groups = GuidanceGroup.where(org_id: current_user.org_id).order('name ASC')
    render(:new_edit, locals: { guidance: guidance, themes: themes,
      guidance_groups: guidance_groups, options: { url: admin_create_guidance_path, method: :post }})
  end

  ##
  # GET /guidances/1/edit
  def admin_edit
    guidance = Guidance.eager_load(:themes, :guidance_group).find(params[:id])
    authorize guidance
    themes = Theme.all.order('title')
    guidance_groups = GuidanceGroup.where(org_id: current_user.org_id).order('name ASC')
    render(:new_edit, locals: { guidance: guidance, themes: themes,
      guidance_groups: guidance_groups, options: { url: admin_update_guidance_path(guidance), method: :put }})
  end

  ##
  # POST /guidances
  def admin_create
    guidance = Guidance.new(guidance_params)
    authorize guidance
    guidance.text = params["guidance-text"]
    
    if guidance.save

      if guidance.published?
        guidance_group = GuidanceGroup.find(guidance.guidance_group_id)
        if !guidance_group.published? || guidance_group.published.nil?
          guidance_group.published = true
          guidance_group.save
        end
      end
      flash[:notice] = success_message(_('guidance'), _('created'))
      redirect_to(action: :admin_index)

    else
      flash[:alert] = failed_create_error(guidance, _('guidance'))
      redirect_to(action: :admin_index)
    end
  end

  ##
  # PUT /guidances/1
  def admin_update
    guidance = Guidance.find(params[:id])
    authorize guidance
    guidance.text = params["guidance-text"]
    
    attrs = guidance_params
    
    if guidance.update_attributes(attrs)
      if guidance.published?
        guidance_group = GuidanceGroup.find(guidance.guidance_group_id)
        if !guidance_group.published? || guidance_group.published.nil?
          guidance_group.published = true
          guidance_group.save
        end
      end
      flash[:notice] = success_message(_('guidance'), _('saved')) 
      redirect_to(action: :admin_index)
    else
      flash[:alert] = failed_update_error(guidance, _('guidance'))
      redirect_to(action: :admin_edit, id: params[:id])
    end
  end

  ##
  # DELETE /guidances/1
  def admin_destroy
    guidance = Guidance.find(params[:id])
    authorize guidance
    guidance_group = GuidanceGroup.find(guidance.guidance_group_id)
    if guidance.destroy
      unless guidance_group.guidances.where(published: true).exists? 
        guidance_group.published = false
        guidance_group.save
      end
      flash[:notice] = success_message(_('guidance'), _('deleted'))
      redirect_to(action: :admin_index)
    else
      flash[:alert] = failed_destroy_error(guidance, _('guidance'))
      redirect_to(action: :admin_index)
    end
  end

  # PUT /guidances/1
  def admin_publish
    guidance = Guidance.find(params[:id])
    authorize guidance

    guidance.published = true
    guidance_group = GuidanceGroup.find(guidance.guidance_group_id)
    if !guidance_group.published? || guidance_group.published.nil?
      guidance_group.published = true
      guidance_group.save
    end
    guidance.save

    flash[:notice] = _('Your guidance has been published and is now available to users.')
    redirect_to(action: :admin_index)
  end

  # PUT /guidances/1
  def admin_unpublish
    guidance = Guidance.find(params[:id])
    authorize guidance

    guidance.published = false
    guidance.save
    guidance_group = GuidanceGroup.find(guidance.guidance_group_id)
    unless guidance_group.guidances.where(published: true).exists? 
      guidance_group.published = false
      guidance_group.save
    end

    flash[:notice] = _('Your guidance is no longer published and will not be available to users.')
    redirect_to(action: :admin_index)
  end

  private
    def guidance_params
      # The form on the page is weird. The text and template/section/question stuff is outside of the normal form params
      params.require(:guidance).permit(:guidance_group_id, :published, theme_ids: [])
    end
end