Class: Www::LeadsController
- Inherits:
-
BasePortalController
- Object
- ActionController::Base
- ApplicationController
- BasePortalController
- Www::LeadsController
- Defined in:
- app/controllers/www/leads_controller.rb
Overview
Controller: leads.
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
-
#call_me ⇒ void
Places a callback via the phone system to the submitted number, if phone-chat is currently available.
-
#complete_trade_application ⇒ void
Appends the submitted trade-pro application answers to the user's most recent open lead activity.
-
#consultation ⇒ void
Renders the consultation-request contact form.
-
#create ⇒ void
Creates a lead from the submitted contact form.
-
#form_content ⇒ Object
GET /contact/form Turbo Frame lazy-loaded content for modal contact form Reduces page load by only loading form, turnstile, and uppy when modal opens.
-
#new ⇒ void
Renders the general contact form.
-
#new_es ⇒ void
Renders the Spanish-language contact form.
-
#quote ⇒ void
Renders the quote-request contact form.
-
#referral_thank_you ⇒ void
Renders the referral thank-you page.
-
#support_thank_you ⇒ void
Renders the support-request thank-you page.
-
#thank_you ⇒ void
Renders the general lead thank-you page.
-
#thank_you_es ⇒ void
Renders the Spanish-language lead thank-you page.
-
#trade_thank_you ⇒ void
Renders the trade-pro application thank-you 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
#call_me ⇒ void
This method returns an undefined value.
Places a callback via the phone system to the submitted number, if
phone-chat is currently available.
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'app/controllers/www/leads_controller.rb', line 173 def call_me check_current_time phone_number = PhoneNumber.parse_and_format(params[:phone_number]) respond_to do |format| if @phone_chat_status if phone_number.nil? flash.now[:info] = 'Wrong Number? Please verify that the number you entered is correct and we\'ll try again.' format.turbo_stream { render partial: 'shared/flash' } else @context_user.phone = phone_number pbx = Phone::Pbx.instance result = begin pbx.place_call('616', phone_number, '1161') rescue StandardError false end if result == false flash.now[:info] = 'Sorry About That. Something went wrong with processing the call. Please try again in a few minutes.' format.turbo_stream { render partial: 'shared/flash' } else format.turbo_stream { render 'quote_request_call_me_success' } end end else flash.now[:info] = 'Service Unavailable Right Now. We\'re sorry but that service isn\'t available right now. You can try again during business hours or just send us an email.' format.turbo_stream { render partial: 'shared/flash' } end end end |
#complete_trade_application ⇒ void
This method returns an undefined value.
Appends the submitted trade-pro application answers to the user's most
recent open lead activity.
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'app/controllers/www/leads_controller.rb', line 207 def complete_trade_application lead_notes = [] lead_notes << "\r\nCUSTOMER WANTS TO BECOME A TRADE PRO" params[:tradepro_lead].each do |k, v| response = case v when '1' 'Yes' when '0' 'No' else v end lead_notes << "#{k.to_s.titleize}: #{response}" end activity = @context_user.activities.open_activities.leads.last if activity.nil? @context_user.contacts.each do |co| activity = co.activities.open_activities.leads.last end end if activity.present? activity.notes += lead_notes.join("\r\n") activity.save end flash[:info] = 'Thank you. One of our experts will be in touch soon.' redirect_to cms_link('/') end |
#consultation ⇒ void
This method returns an undefined value.
Renders the consultation-request contact form.
42 43 44 |
# File 'app/controllers/www/leads_controller.rb', line 42 def consultation check_current_time end |
#create ⇒ void
This method returns an undefined value.
Creates a lead from the submitted contact form.
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 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 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'app/controllers/www/leads_controller.rb', line 61 def create backup_request lead_params = params.fetch(:lead, {}).to_h # Handle fallback file upload if present (when Uppy fails to initialize) # Native file input uses lead_fallback[sketch_drawings] instead of JSON upload IDs if params[:lead_fallback].present? && params[:lead_fallback][:sketch_drawings].present? fallback_files = Array(params[:lead_fallback][:sketch_drawings]).select { |f| f.respond_to?(:read) } if fallback_files.any? upload_ids = process_fallback_uploads(fallback_files) # Merge into lead_params as JSON array to match Uppy format lead_params['sketch_drawings'] = upload_ids.to_json if upload_ids.present? end end # Turnstile validates bot protection via before_action # SpamCheck validates contact points against known fraudulent customers is_fraud = SpamCheck.new.process( author_email: lead_params[:email].presence, phone_number: lead_params[:phone].presence, request: request ) if is_fraud flash[:error] = 'There was an error submitting your request. Please call us at (800) 875-5285.' # Both Turbo and non-Turbo: navigate back to /contact. The # ApplicationController#redirect_to override defaults POST → 303 # see_other so Turbo follows the redirect as a Visit. redirect_to cms_link('contact') return end send_invite = false if params[:lang] == 'es' request.env['HTTP_REFERER'] ||= cms_link('/contact_es') redirect_thank_you_url = '/contact_es/thank-you' error_notice = 'Ha ocurrido un error' elsif /trade/.match?(request.env['HTTP_REFERER']) redirect_thank_you_url = '/trade/thank-you' send_invite = true elsif /referral/.match?(request.env['HTTP_REFERER']) redirect_thank_you_url = '/referral-program/thank-you' send_invite = true elsif request.env['HTTP_REFERER'] =~ /support/ || request.env['HTTP_REFERER'] =~ %r{services/troubleshooting} redirect_thank_you_url = '/support/thank-you' send_invite = true else request.env['HTTP_REFERER'] ||= cms_link('/contact') redirect_thank_you_url = '/contact/thank-you' end error_notice ||= "Ooops, we couldn't process your request" @redirect_path = request.env['HTTP_REFERER'] @lead = Lead.new(lead_params) save_result = @lead.save_to_user(@context_user.customer, send_invite) = save_result. unless save_result.success @frame_id = params[:frame_id].presence || 'contact-form-content' @support_case_reference = save_result.support_case_reference respond_to do |format| if .blank? # Clear expiration_date for any uploaded files now attached via hidden field begin ids = begin JSON.parse(lead_params[:sketch_drawings].to_s) rescue StandardError [] end Upload.where(id: ids).update_all(expiration_date: nil) if ids.present? rescue StandardError => _e # Non-blocking: if it fails, uploads will be cleaned up by expiration end # Record visit event for successful lead form submission record_lead_form_visit_event(lead_params) # Only include support_case_reference when the SupportCase branch # ran (Lead#save_to_user only populates it for create_support_case). # Otherwise `cms_link` would serialize nil as an empty `&support_case_reference` # query param on the thank-you URL. thank_you_params = { cn: @context_user.reference_number } thank_you_params[:support_case_reference] = save_result.support_case_reference if save_result.support_case_reference.present? thank_you_path = cms_link(redirect_thank_you_url, nil, parameters: thank_you_params) # Modal forms render an in-place turbo_stream that swaps the form # frame for a thank-you panel. Public lead forms (now Turbo-enabled) # navigate to the thank-you page via Turbo Visit — the # ApplicationController#redirect_to override defaults POST → 303 # see_other so Turbo follows correctly. if params[:modal_form] == 'true' format.turbo_stream { render 'lead_form_modal_thank_you' } format.html { redirect_to_return_path_or_default thank_you_path } else format.html { redirect_to_return_path_or_default thank_you_path } format.turbo_stream { redirect_to_return_path_or_default thank_you_path } end else validation_details = @lead&.errors&.any? ? " #{@lead.errors..to_sentence}" : "" flash[:error] = "#{error_notice}: #{}#{validation_details}" if params[:modal_form] == 'true' format.turbo_stream { render 'lead_form_modal_error' } format.html { redirect_to @redirect_path } else format.html { redirect_to @redirect_path } format.turbo_stream { redirect_to @redirect_path } end end end end |
#form_content ⇒ Object
GET /contact/form
Turbo Frame lazy-loaded content for modal contact form
Reduces page load by only loading form, turnstile, and uppy when modal opens
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'app/controllers/www/leads_controller.rb', line 22 def form_content @show_upload = params[:show_upload] != 'false' @business_focused = params[:business_focused] == 'true' @submit_label = params[:submit_label].presence || 'Send Message' @header_title = params[:header_title].presence @header_intro = params[:header_intro].presence @application_type = params[:application_type].presence @activity_type_id = params[:activity_type_id].presence @about_project = params[:about_project].presence @frame_id = params[:frame_id].presence || 'contact-form-content' # Track form opened event (user opened the modal) record_lead_form_opened_event render layout: false end |
#new ⇒ void
This method returns an undefined value.
Renders the general contact form.
12 13 14 15 16 17 |
# File 'app/controllers/www/leads_controller.rb', line 12 def new check_current_time @quote_builder_url = params[:quote_builder_url] @quote_reference = params[:quote_reference] @phone_chat_status = false end |
#new_es ⇒ void
This method returns an undefined value.
Renders the Spanish-language contact form.
54 55 56 |
# File 'app/controllers/www/leads_controller.rb', line 54 def new_es check_current_time end |
#quote ⇒ void
This method returns an undefined value.
Renders the quote-request contact form.
49 |
# File 'app/controllers/www/leads_controller.rb', line 49 def quote; end |
#referral_thank_you ⇒ void
This method returns an undefined value.
Renders the referral thank-you page.
253 254 255 |
# File 'app/controllers/www/leads_controller.rb', line 253 def referral_thank_you render action: 'referral_thank_you' end |
#support_thank_you ⇒ void
This method returns an undefined value.
Renders the support-request thank-you page.
246 247 248 |
# File 'app/controllers/www/leads_controller.rb', line 246 def support_thank_you render action: 'support_thank_you' end |
#thank_you ⇒ void
This method returns an undefined value.
Renders the general lead thank-you page.
260 261 262 |
# File 'app/controllers/www/leads_controller.rb', line 260 def thank_you render action: 'lead_form_thank_you' end |
#thank_you_es ⇒ void
This method returns an undefined value.
Renders the Spanish-language lead thank-you page.
267 268 269 |
# File 'app/controllers/www/leads_controller.rb', line 267 def thank_you_es render action: 'lead_form_thank_you_es' end |
#trade_thank_you ⇒ void
This method returns an undefined value.
Renders the trade-pro application thank-you page.
239 240 241 |
# File 'app/controllers/www/leads_controller.rb', line 239 def trade_thank_you render action: 'tradepro_lead_form_thank_you' end |