Class: Decidim::Proposals::ProposalsController
- Inherits:
-
ApplicationController
- Object
- DecidimController
- ApplicationController
- Components::BaseController
- ApplicationController
- Decidim::Proposals::ProposalsController
- Includes:
- ApplicationHelper, AttachmentsHelper, FilterResource, Flaggable, FormFactory, Decidim::Paginable, Orderable, Withdrawable
- Defined in:
- decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb
Overview
Exposes the proposal resource so users can view and create them.
Constant Summary collapse
- STEP1 =
rubocop:disable Naming/VariableNumber
:step_1
- STEP2 =
:step_2
- STEP3 =
:step_3
- STEP4 =
:step_4
Constants included from IconHelper
IconHelper::DEFAULT_RESOURCE_TYPE_ICONS
Constants included from Decidim::Paginable
Constants included from AmendmentsHelper
Instance Method Summary collapse
- #compare ⇒ Object
- #complete ⇒ Object
- #create ⇒ Object
- #destroy_draft ⇒ Object
- #edit ⇒ Object
- #edit_draft ⇒ Object
-
#index ⇒ Object
rubocop:enable Naming/VariableNumber.
- #new ⇒ Object
- #preview ⇒ Object
- #publish ⇒ Object
- #show ⇒ Object
- #update ⇒ Object
- #update_draft ⇒ Object
- #withdraw ⇒ Object
Methods included from AttachmentsHelper
#attachment_title, #attachments_for, #attachments_tab_panel_items
Methods included from IconHelper
#component_icon, #manifest_icon, #resource_icon, #resource_type_icon, #resource_type_icon_key, #text_with_resource_icon
Methods included from LayoutHelper
#_icon_classes, #apple_favicon, #application_path, #current_user_unread_data, #extended_navigation_bar, #external_icon, #favicon, #icon, #legacy_favicon, #organization_colors, #role
Methods included from TooltipHelper
Methods included from ModalHelper
Methods included from ApplicationHelper
#cell, #edit_link, #extra_admin_link, #html_truncate, #present, #prevent_timeout_seconds, #resolve_presenter_class, #step_cta_url
Methods included from CacheHelper
Methods included from AmendmentsHelper
#accept_and_reject_buttons_for, #action_button_card_for, #allowed_to_accept_and_reject?, #allowed_to_promote?, #amend_button_for, #amendments_enabled?, #amendments_form_field_for, #amendments_form_fields_label, #amendments_form_fields_value, #can_participate_in_private_space?, #can_react_to_emendation?, #current_step, #emendation_actions_for, #emendation_announcement_for, #promote_button_for, #render_emendation_body, #total_steps, #wizard_aside_back_url, #wizard_header_title
Methods included from RichTextEditorHelper
Methods included from ContextualHelpHelper
Methods included from ScopesHelper
#has_visible_scopes?, #scope_name_for_picker, #scopes_picker_field, #scopes_picker_filter, #scopes_select_field, #scopes_select_tag
Methods included from TranslatableAttributes
Methods included from DecidimFormHelper
#areas_for_select, #base_error_messages, #decidim_form_for, #decidim_form_slug_url, #editor_field_tag, #form_field_has_error?, #form_required_explanation, #name_with_locale, #ordered_scopes_descendants, #ordered_scopes_descendants_for_select, #scopes_picker_field_tag, #tab_element_class_for, #translated_field_tag
Methods included from OmniauthHelper
#normalize_provider_name, #oauth_icon, #provider_name
Methods inherited from ApplicationController
#proposal_limit, #proposal_limit_reached?, #proposals
Methods inherited from Components::BaseController
#current_component, #current_manifest, #current_participatory_space, #permission_class_chain, #permission_scope, #redirect_unless_feature_private, #set_component_breadcrumb_item, #share_token
Methods included from RegistersPermissions
Methods included from UserBlockedChecker
#check_user_block_status, #check_user_not_blocked
Methods included from NeedsSnippets
Methods included from Headers::HttpCachingDisabler
Methods included from HasStoredPath
#skip_store_location?, #store_current_location
Methods included from NeedsOrganization
enhance_controller, extended, included
Instance Method Details
#compare ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 100 def compare :edit, :proposal, proposal: @proposal @step = STEP2 @similar_proposals ||= Decidim::Proposals::SimilarProposals .for(current_component, @proposal) .all if @similar_proposals.blank? flash[:notice] = I18n.t("proposals.proposals.compare.no_similars_found", scope: "decidim") redirect_to "#{Decidim::ResourceLocatorPresenter.new(@proposal).path}/complete" end end |
#complete ⇒ Object
113 114 115 116 117 118 119 120 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 113 def complete :edit, :proposal, proposal: @proposal @step = STEP3 @form = form_proposal_model @form. = end |
#create ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 81 def create :create, :proposal @step = STEP1 @form = form(ProposalWizardCreateStepForm).from_params(proposal_creation_params) CreateProposal.call(@form, current_user) do on(:ok) do |proposal| flash[:notice] = I18n.t("proposals.create.success", scope: "decidim") redirect_to "#{Decidim::ResourceLocatorPresenter.new(proposal).path}/compare" end on(:invalid) do flash.now[:alert] = I18n.t("proposals.create.error", scope: "decidim") render :new end end end |
#destroy_draft ⇒ Object
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 167 def destroy_draft :edit, :proposal, proposal: @proposal DestroyProposal.call(@proposal, current_user) do on(:ok) do flash[:notice] = I18n.t("proposals.destroy_draft.success", scope: "decidim") redirect_to new_proposal_path end on(:invalid) do flash.now[:alert] = I18n.t("proposals.destroy_draft.error", scope: "decidim") render :edit_draft end end end |
#edit ⇒ Object
183 184 185 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 183 def edit :edit, :proposal, proposal: @proposal end |
#edit_draft ⇒ Object
144 145 146 147 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 144 def edit_draft @step = STEP3 :edit, :proposal, proposal: @proposal end |
#index ⇒ Object
rubocop:enable Naming/VariableNumber
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 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 35 def index if component_settings.participatory_texts_enabled? @proposals = Decidim::Proposals::Proposal .where(component: current_component) .published .not_hidden .only_amendables .includes(:category, :scope, :attachments, :coauthorships) .order(position: :asc) render "decidim/proposals/proposals/participatory_texts/participatory_text" else @base_query = search .result .published .not_hidden @proposals = @base_query.includes(:component, :coauthorships, :attachments) @all_geocoded_proposals = @base_query.geocoded @voted_proposals = if current_user ProposalVote.where( author: current_user, proposal: @proposals.pluck(:id) ).pluck(:decidim_proposal_id) else [] end @proposals = reorder(@proposals) @proposals = paginate(@proposals) end end |
#new ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 71 def new :create, :proposal @step = STEP1 if proposal_draft.present? redirect_to edit_draft_proposal_path(proposal_draft, component_id: proposal_draft.component.id, question_slug: proposal_draft.component.participatory_space.slug) else @form = form(ProposalWizardCreateStepForm).from_params(body: translated_proposal_body_template) end end |
#preview ⇒ Object
122 123 124 125 126 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 122 def preview :edit, :proposal, proposal: @proposal @step = STEP4 @form = form(ProposalForm).from_model(@proposal) end |
#publish ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 128 def publish :edit, :proposal, proposal: @proposal @step = STEP4 PublishProposal.call(@proposal, current_user) do on(:ok) do flash[:notice] = I18n.t("proposals.publish.success", scope: "decidim") redirect_to proposal_path(@proposal) end on(:invalid) do flash.now[:alert] = I18n.t("proposals.publish.error", scope: "decidim") render :edit_draft end end end |
#show ⇒ Object
67 68 69 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 67 def show raise ActionController::RoutingError, "Not Found" if @proposal.blank? || !can_show_proposal? end |
#update ⇒ Object
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 187 def update :edit, :proposal, proposal: @proposal @form = form_proposal_params UpdateProposal.call(@form, current_user, @proposal) do on(:ok) do |proposal| flash[:notice] = I18n.t("proposals.update.success", scope: "decidim") redirect_to Decidim::ResourceLocatorPresenter.new(proposal).path end on(:invalid) do flash.now[:alert] = I18n.t("proposals.update.error", scope: "decidim") render :edit end end end |
#update_draft ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 149 def update_draft @step = STEP1 :edit, :proposal, proposal: @proposal @form = form_proposal_params UpdateProposal.call(@form, current_user, @proposal) do on(:ok) do |proposal| flash[:notice] = I18n.t("proposals.update_draft.success", scope: "decidim") redirect_to "#{Decidim::ResourceLocatorPresenter.new(proposal).path}/preview" end on(:invalid) do flash.now[:alert] = I18n.t("proposals.update_draft.error", scope: "decidim") render :edit_draft end end end |
#withdraw ⇒ Object
204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb', line 204 def withdraw :withdraw, :proposal, proposal: @proposal WithdrawProposal.call(@proposal, current_user) do on(:ok) do flash[:notice] = I18n.t("proposals.update.success", scope: "decidim") redirect_to Decidim::ResourceLocatorPresenter.new(@proposal).path end on(:has_supports) do flash[:alert] = I18n.t("proposals.withdraw.errors.has_supports", scope: "decidim") redirect_to Decidim::ResourceLocatorPresenter.new(@proposal).path end end end |