Class: Decidim::Initiatives::InitiativeSignaturesController

Inherits:
ApplicationController
  • Object
show all
Includes:
FormFactory, HasSignatureWorkflow, NeedsInitiative
Defined in:
app/controllers/decidim/initiatives/initiative_signatures_controller.rb

Instance Method Summary collapse

Methods inherited from ApplicationController

#permission_class_chain, #permission_scope, #permissions_context

Instance Method Details

#createObject

POST /initiatives/:initiative_id/initiative_signatures



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 36

def create
  enforce_permission_to :vote, :initiative, initiative: current_initiative

  @form = form(signature_form_class).from_params(
    initiative: current_initiative,
    user: current_user
  )

  VoteInitiative.call(@form) do
    on(:ok) do
      current_initiative.reload
      render :update_buttons_and_counters
    end

    on(:invalid) do
      render :error_on_vote, status: :unprocessable_entity
    end
  end
end

#fill_personal_dataObject



56
57
58
59
60
61
62
63
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 56

def fill_personal_data
  redirect_to(sms_phone_number_path) && return unless fill_personal_data_step?

  @form = form(signature_form_class).from_params(
    initiative: current_initiative,
    user: current_user
  )
end

#finishObject



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 150

def finish
  if params.has_key?(:initiatives_vote) || !fill_personal_data_step?
    build_vote_form(params)
  else
    check_session_personal_data
  end

  return if @vote_form.blank?

  VoteInitiative.call(@vote_form) do
    on(:ok) do
      session[:initiative_vote_form] = {}
      clear_authorization_path
    end

    on(:invalid) do |vote|
      logger.fatal "Failed creating signature: #{vote.errors.full_messages.join(", ")}" if vote
      flash[:alert] = I18n.t("create.invalid", scope: "decidim.initiatives.initiative_votes")
      send(sms_step? ? :sms_code_path : :fill_personal_data_path)
    end
  end
end

#indexObject



31
32
33
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 31

def index
  redirect_to send(fill_personal_data_step? ? :fill_personal_data_path : :sms_phone_number_path)
end

#sms_codeObject



108
109
110
111
112
113
114
115
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 108

def sms_code
  redirect_to(finish_path) && return unless sms_step?

  return redirect_to sms_phone_number_path if session_sms_code.blank?

  @sms_code_form = Decidim::Verifications::Sms::ConfirmationForm.new
  @phone_number_form = sms_mobile_phone_form_class.from_params(mobile_phone_number: session_sms_code[:phone_number], user: current_user)
end

#sms_phone_numberObject



83
84
85
86
87
88
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 83

def sms_phone_number
  return redirect_to fill_personal_data_path if fill_personal_data_step? && session[:initiative_vote_form].blank?
  return redirect_to(finish_path) unless sms_step?

  @form = sms_mobile_phone_form_class.new
end

#store_personal_dataObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 65

def store_personal_data
  redirect_to(sms_phone_number_path) && return unless fill_personal_data_step?

  build_vote_form(params)

  if @vote_form.already_voted?
    flash[:alert] = I18n.t("create.already_voted", scope: "decidim.initiatives.initiative_votes")
    clear_authorization_path
    redirect_to initiative_path(current_initiative)
  elsif @vote_form.invalid?
    @form = @vote_form

    render :fill_personal_data
  else
    redirect_to sms_phone_number_path
  end
end

#store_sms_codeObject



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 117

def store_sms_code
  redirect_to(finish_path) && return unless sms_step?

  @sms_code_form = Decidim::Verifications::Sms::ConfirmationForm.from_params(params)
  sms_code_validator_class.call(@sms_code_form, session_sms_code) do
    on(:ok) do
      respond_to do |format|
        format.js do
          render json: { sms_code: "OK" }
        end

        format.html do
          clear_session_sms_code
          redirect_to finish_path
        end
      end
    end

    on(:invalid) do
      respond_to do |format|
        format.js do
          render json: { sms_code: "KO" }
        end

        format.html do
          flash[:alert] = I18n.t("sms_code.invalid", scope: "decidim.initiatives.initiative_votes")
          render :sms_code, status: :unprocessable_entity
        end
      end
    end
  end
end

#store_sms_phone_numberObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'app/controllers/decidim/initiatives/initiative_signatures_controller.rb', line 90

def store_sms_phone_number
  redirect_to(finish_path) && return unless sms_step?

  @form = sms_mobile_phone_form_class.from_params(params.merge(user: current_user))

  sms_mobile_phone_validator_class.call(@form, current_user) do
    on(:ok) do ||
      store_session_sms_code(, @form.mobile_phone_number)
      redirect_to sms_code_path
    end

    on(:invalid) do
      flash[:alert] = I18n.t("sms_phone.invalid", scope: "decidim.initiatives.initiative_votes")
      render :sms_phone_number, status: :unprocessable_entity
    end
  end
end