Class: ContactFormsController
- Inherits:
-
BasePortalController
- Object
- ActionController::Base
- ApplicationController
- BasePortalController
- ContactFormsController
- Defined in:
- app/controllers/contact_forms_controller.rb
Overview
Controller: contact forms.
Constant Summary
Constants included from Controllers::MasqueradeGuarded
Controllers::MasqueradeGuarded::DEFAULT_BLOCK_MESSAGE
Constants included from Controllers::AnalyticsEvents
Controllers::AnalyticsEvents::MAX_QUEUED_EVENTS, Controllers::AnalyticsEvents::SESSION_KEY
Constants included from Controllers::ErrorRendering
Controllers::ErrorRendering::NON_CONTENT_PATH_PREFIXES
Instance Method Summary collapse
-
#create ⇒ void
POST /contact/:form_type — validates and submits the contact form, after spam/bot checks.
-
#new ⇒ void
GET /contact/:form_type — renders the requested contact form, restoring in-progress data if the visitor returned after a Turnstile failure.
-
#thank_you ⇒ void
GET /contact/:form_type/thank-you — post-submission confirmation page.
Methods inherited from BasePortalController
#current_ability, #portal_party, #set_catalog, #set_webpack
Methods included from Controllers::MasqueradeGuarded
block_while_masquerading, #masquerade_blocks?
Methods inherited from ApplicationController
#account_impersonated?, #add_to_flash, #after_sign_in_path_for, #bypass_forgery_protection?, #chat_enabled?, #cloudflare_cleared?, #default_catalog, #default_url_options, #enable_turbo_frames, #find_publication, #fix_invalid_accept_header, #init_js_utils, #is_globals_call?, #layout_by_resource, #locale_store, #redirect_to, #require_employee_for_crm, #set_base_host, #set_real_ip, #set_report_errors_for, #should_render_layout?, #skip_layout_for_turbo_frame?, #stamp_impersonation_context, #tab_frame_breakout_request?, #warmlyyours_canada_ip?, #warmlyyours_ip?, #y
Methods included from Controllers::ReturnPathHandling
#check_for_return_path, #redirect_to_return_path_or_default
Methods included from Controllers::AnalyticsEvents
#consume_queued_analytics_events, #registration_lead_type, #track_event
Methods included from Controllers::DeviceDetection
Methods included from Controllers::SubdomainDetection
#is_crm_request?, #is_www_request?, #json_request?
Methods included from Controllers::TurboSafeRedirect
Methods included from Controllers::TrackingDetection
#bot_request?, #gdpr_country?, #gdpr_country_data, #prevent_bots, #set_tracking_cookie, #track_visitor?
Methods included from Controllers::AcceleratedFileSending
#send_file_accelerated, #send_upload_accelerated
Methods included from Controllers::ErrorRendering
#excp_string, #mail_to_for_error_reporting, #render_400, #render_404, #render_406, #render_410, #render_500, #render_invalid_authenticity_token, #render_ip_spoof_error, #render_unpermitted_parameters, #safe_referer_or_fallback
Methods included from Controllers::TurnstileVerification
#load_turnstile_script_tag, #turnstile_lazy_widget, #turnstile_script_tag, #turnstile_widget, #validate_turnstile!
Methods included from Controllers::CloudflareCaching
edge_cached, #edge_cached_action?, #reset_cloudflare_cache, #set_cloudflare_cache, #skip_edge_cache!, #skip_session
Methods included from Controllers::Webpackable
#preload_webpack_fonts, #webpack_css_include, #webpack_css_url, #webpack_js_include, #wpd_is_running?
Methods included from Controllers::Localizable
#cloudflare_country_locale, #determine_request_locale, #geocoder_locale, #guest_user_locale_check, #locale_optional_www_auth_path?, #param_locale, #set_locale, #set_request_locale, #skip_localization?, #warmlyyours_ip_locale
Methods included from Controllers::Authenticable
#access_denied, #authenticate_account, #authenticate_account!, #authenticate_account_from_login_token!, #check_is_a_manager, #check_is_a_sales_manager, #check_is_an_admin, #check_is_an_employee, #check_party, #clear_mismatched_guest_user, #create_guest_user, #credentials?, #current_or_guest_user, #current_or_guest_user_id_read_only, #current_user, #devise_mapping, #fully_logged_in?, #generate_bot_id, #guest_user, #identifiable?, #init_current_user, #initialize_guest, #load_context_user, #logging_in, #resource, #resource_name, #restrict_access_for_non_employees, #scrubbed_request_path, #user_object, #warn_on_session_guest_id_leak
Methods included from UrlsHelper
#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?
Instance Method Details
#create ⇒ void
This method returns an undefined value.
POST /contact/:form_type — validates and submits the contact form,
after spam/bot checks.
31 32 33 34 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'app/controllers/contact_forms_controller.rb', line 31 def create initialize_form_class # Turnstile validates bot protection via before_action # SpamCheck validates contact points against known fraudulent customers is_fraud = SpamCheck.new.process( author_email: params.dig(:contact_form, :homeowner_email_address), phone_number: params.dig(:contact_form, :homeowner_phone), request: request ) if is_fraud respond_to do |format| flash[:error] = 'There was an error submitting your request. Please call us at (800) 875-5285.' format.html { redirect_back_or_to root_path } format.turbo_stream { redirect_back_or_to root_path } end return end if @form_class.nil? respond_to do |format| format.html { redirect_to_return_path_or_default cms_link('contact') } format.turbo_stream { redirect_to cms_link('contact') } end else @form_object = @form_class.new(params[:contact_form]) @form_object.request = request respond_to do |format| if @form_object.save # Clear any saved form data on successful submission session.delete(:turnstile_failed_form_data) format.html { redirect_to_return_path_or_default cms_link("/contact/#{params[:form_type]}/thank-you") } format.turbo_stream { render "#{@form_action}_thank_you" } elsif template_exists?(@form_action) # Some forms (e.g. custom_product_training) live only as partials # embedded in other pages and have no standalone template to # re-render. For those we fall back to redirecting the user back # to the referring page with a flash error so the page can be # re-rendered with the restored form data. flash.now[:error] = 'There was a problem sending your request. Please try again.' # Re-render the form template (with the user's input preserved in # @form_object) instead of redirecting away. Turbo needs 422 to # swap the body inline. format.html { render @form_action, layout: 'www/cms_page', status: :unprocessable_content } format.turbo_stream { render 'contact_form_error', status: :unprocessable_content } else flash[:error] = 'There was a problem sending your request. Please try again.' format.html { redirect_back_or_to root_path } format.turbo_stream { redirect_back_or_to root_path } end end end end |
#new ⇒ void
This method returns an undefined value.
GET /contact/:form_type — renders the requested contact form, restoring
in-progress data if the visitor returned after a Turnstile failure.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'app/controllers/contact_forms_controller.rb', line 12 def new initialize_form_class if @form_class.nil? || !template_exists?(@form_action) ErrorReporting.warning('Contact form not found', form_type: params[:form_type], form_class: @form_class) redirect_to cms_link('contact') else @form_object = @form_class.new # Restore form data if user is returning after Turnstile failure restore_form_data_if_needed render action: @form_action, layout: 'www/cms_page' end end |
#thank_you ⇒ void
This method returns an undefined value.
GET /contact/:form_type/thank-you — post-submission confirmation page.
91 92 93 94 95 96 97 98 |
# File 'app/controllers/contact_forms_controller.rb', line 91 def thank_you initialize_form_class if @form_class.present? render action: determine_thank_you_view, layout: 'www/cms_page' else redirect_to cms_link('contact') end end |