# frozen_string_literal: true module Decidim module Proposals module Admin # This controller manages the participatory texts area. class ParticipatoryTextsController < Admin::ApplicationController helper_method :proposal helper ParticipatoryTextsHelper def index @drafts = Proposal.where(component: current_component).drafts.order(:position) @preview_form = form(Admin::PreviewParticipatoryTextForm).instance @preview_form.from_models(@drafts) end def new_import enforce_permission_to :manage, :participatory_texts participatory_text = Decidim::Proposals::ParticipatoryText.find_by(component: current_component) @import = form(Admin::ImportParticipatoryTextForm).from_model(participatory_text) end def import enforce_permission_to :manage, :participatory_texts @import = form(Admin::ImportParticipatoryTextForm).from_params(params) Admin::ImportParticipatoryText.call(@import) do on(:ok) do flash[:notice] = I18n.t("participatory_texts.import.success", scope: "decidim.proposals.admin") redirect_to EngineRouter.admin_proxy(current_component).participatory_texts_path end on(:invalid) do flash.now[:alert] = I18n.t("participatory_texts.import.invalid", scope: "decidim.proposals.admin") render action: "new_import" end on(:invalid_file) do flash.now[:alert] = I18n.t("participatory_texts.import.invalid_file", scope: "decidim.proposals.admin") render action: "new_import" end end end # When `save_draft` param exists, proposals are only saved. # When no `save_draft` param is set, proposals are saved and published. def update enforce_permission_to :manage, :participatory_texts form_params = params.require(:preview_participatory_text) @preview_form = form(Admin::PreviewParticipatoryTextForm).from_params(proposals: form_params[:proposals_attributes]&.values) if params.has_key?("save_draft") UpdateParticipatoryText.call(@preview_form) do on(:ok) do flash[:notice] = I18n.t("participatory_texts.update.success", scope: "decidim.proposals.admin") redirect_to EngineRouter.admin_proxy(current_component).participatory_texts_path end on(:invalid) do |failures| alert_msg = [I18n.t("participatory_texts.publish.invalid", scope: "decidim.proposals.admin")] failures.each_pair { |id, msg| alert_msg << "ID:[#{id}] #{msg}" } flash.now[:alert] = alert_msg.join("
").html_safe index render action: "index" end end else PublishParticipatoryText.call(@preview_form) do on(:ok) do flash[:notice] = I18n.t("participatory_texts.publish.success", scope: "decidim.proposals.admin") redirect_to proposals_path end on(:invalid) do |failures| alert_msg = [I18n.t("participatory_texts.publish.invalid", scope: "decidim.proposals.admin")] failures.each_pair { |id, msg| alert_msg << "ID:[#{id}] #{msg}" } flash.now[:alert] = alert_msg.join("
").html_safe index render action: "index" end end end end # Removes all the unpublished proposals (drafts). def discard enforce_permission_to :manage, :participatory_texts DiscardParticipatoryText.call(current_component) do on(:ok) do flash[:notice] = I18n.t("participatory_texts.discard.success", scope: "decidim.proposals.admin") redirect_to EngineRouter.admin_proxy(current_component).participatory_texts_path end end end end end end end