# frozen_string_literal: true 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 render :new_edit end ## # GET /guidances/1/edit def admin_edit @guidance = Guidance.eager_load(:themes, :guidance_group) .find(params[:id]) authorize @guidance render :new_edit 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.now[:notice] = success_message(@guidance, _("created")) else flash.now[:alert] = failure_message(@guidance, _("create")) end render :new_edit end ## # PUT /guidances/1 def admin_update @guidance = Guidance.find(params[:id]) authorize @guidance @guidance.text = params["guidance-text"] if @guidance.update_attributes(guidance_params) 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.now[:notice] = success_message(@guidance, _("saved")) else flash.now[:alert] = failure_message(@guidance, _("save")) end render :new_edit 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] = failure_message(@guidance, _("delete")) redirect_to(action: :admin_index) end end # PUT /guidances/1 def admin_publish @guidance = Guidance.find(params[:id]) authorize @guidance if @guidance.update_attributes(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 # rubocop:disable Metrics/LineLength flash[:notice] = _("Your guidance has been published and is now available to users.") # rubocop:enable Metrics/LineLength else flash[:alert] = failure_message(@guidance, _("publish")) end redirect_to(action: :admin_index) end # PUT /guidances/1 def admin_unpublish @guidance = Guidance.find(params[:id]) authorize @guidance if @guidance.update_attributes(published: false) guidance_group = GuidanceGroup.find(@guidance.guidance_group_id) unless guidance_group.guidances.where(published: true).exists? guidance_group.published = false guidance_group.save end # rubocop:disable Metrics/LineLength flash[:notice] = _("Your guidance is no longer published and will not be available to users.") # rubocop:enable Metrics/LineLength else flash[:alert] = failure_message(@guidance, _("unpublish")) end 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