class AttemptsController < ApplicationController # before_action :set_attempt, only: [:edit, :update] protect_from_forgery :except => [:twilio] def twilio recipient = Recipient.where(phone: twilio_params['From']).first attempt = recipient.attempts.last_sent.first all_twilio_details = (attempt.twilio_details || '').split('~!~') all_twilio_details << twilio_params.to_h.to_yaml attempt.save_response( answer_index: twilio_params[:Body].to_i > 0 ? twilio_params[:Body].to_i : nil, twilio_details: all_twilio_details.join('~!~') ) unless (['start', 'resume', 'restart', 'yes', 'go'].index(twilio_params[:Body].downcase).nil?) recipient.update(opted_out: false) render plain: 'Thank you, you will now begin receiving messages again.' return end unless (['stop', 'cancel', 'quit', 'no'].index(twilio_params[:Body].downcase).nil?) recipient.update(opted_out: true) render plain: 'Thank you, you have been opted out of these messages and will no longer receive them.' return end unless (['skip', 'i dont know', "i don't know", 'next'].index(twilio_params[:Body].downcase).nil?) render plain: 'Thank you, this question has been skipped.' return end response_message = ["We've registered your response of \"#{attempt.response}\"."] answer_count = Attempt.for_question(attempt.question).for_school(recipient.school).with_answer.count if answer_count > 1 response_message << "#{answer_count} people have responded to this question so far. To see all responses visit:" else response_message << 'You are the first person to respond to this question. Once more people have responded you will be able to see all responses at:' end response_message << school_category_url(attempt.recipient.school, attempt.question.category) render plain: response_message.join(' ') end # # GET /attempts/1/edit # def edit # end # # # PATCH/PUT /attempts/1 # # PATCH/PUT /attempts/1.json # def update # attempt_params = {} # if twilio_params.present? # attempt_params.merge!( # answer_index: twilio_params[:Body].to_i, # twilio_details: twilio_params.to_h.to_yaml # ) # end # # respond_to do |format| # if @attempt.update(attempt_params) # format.html { render plain: 'Thank you!' } # format.json { render :show, status: :ok, location: @attempt } # else # format.html { render :edit } # format.json { render json: @attempt.errors, status: :unprocessable_entity } # end # end # end # # DELETE /attempts/1 # # DELETE /attempts/1.json # def destroy # @attempt.destroy # respond_to do |format| # format.html { redirect_to attempts_url, notice: 'attempt was successfully destroyed.' } # format.json { head :no_content } # end # end private # Use callbacks to share common setup or constraints between actions. def set_attempt @attempt = Attempt.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def twilio_params {"Body"=>"5", ""=>"US", "To"=>"+16172023890", "ToZip"=>"02135", "NumSegments"=>"1", "MessageSid"=>"SMe37977e625b7f0b429339e752dddefef", "AccountSid"=>"AC57dc8a5a6d75addb9528e730e92f66b2", "From"=>"+16502693205", "ApiVersion"=>"2010-04-01"} params.permit(:FromCountry, :FromState, :FromZip, :FromCity, :ToCountry, :ToState, :SmsStatus, :SmsSid, :SmsMessageSid, :MessageSid, :AccountSid, :MessagingServiceSid, :From, :To, :Body, :NumMedia) end end