Class: Www::EmailPreferencesController
- Inherits:
-
BasePortalController
- Object
- ActionController::Base
- ApplicationController
- BasePortalController
- Www::EmailPreferencesController
- Defined in:
- app/controllers/www/email_preferences_controller.rb
Overview
Controller: email preferences.
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
-
#edit ⇒ void
Renders the email preferences form for the tokenized email address.
-
#one_click_unsubscribe ⇒ void
RFC 8058 one-click unsubscribe endpoint.
-
#update ⇒ void
Saves the submitted email preferences and marks the related communication recipient unsubscribed when applicable.
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
#edit ⇒ void
This method returns an undefined value.
Renders the email preferences form for the tokenized email address.
35 36 37 38 39 40 41 |
# File 'app/controllers/www/email_preferences_controller.rb', line 35 def edit email_address = EmailPreference.decrypt_token(params[:token]) @email_preference = EmailPreference.find_or_create_by!(email: email_address) @show_tracking_consent = @email_preference.eu_recipient? rescue StandardError redirect_to root_path, notice: 'Unable to display email preferences, please contact customer service on 1-800-875-5285 for further assistance.' end |
#one_click_unsubscribe ⇒ void
This method returns an undefined value.
RFC 8058 one-click unsubscribe endpoint. Always returns a bare 200.
19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'app/controllers/www/email_preferences_controller.rb', line 19 def one_click_unsubscribe email_address = EmailPreference.decrypt_token(params[:token]) if email_address.present? PaperTrail.request(whodunnit: 'OneClickUnsubscribe') do EmailPreference.find_or_create_by!(email: email_address) EmailPreference.unsubscribe(email_address) end end # RFC 8058 only requires a 2xx. Always return a bare 200 — never reveal # whether the token resolved to a real recipient. head :ok end |
#update ⇒ void
This method returns an undefined value.
Saves the submitted email preferences and marks the related
communication recipient unsubscribed when applicable.
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 |
# File 'app/controllers/www/email_preferences_controller.rb', line 47 def update email_address = EmailPreference.decrypt_token(params[:token]) @email_preference = EmailPreference.find_or_create_by!(email: email_address) permitted = params.expect( email_preference: %i[disable_announcements disable_events disable_newsletters disable_promotions disable_reviews disable_webinars disable_email_tracking] ) @email_preference.update(permitted) has_unsubscribed = @email_preference.unsubscribed_categories_changes.any? # If our user has unsubscribed from any category, and the email preference has a link to the # communication record, we will find the communication recipient and mark it unsubscribed # this improves the reporting on campaign if has_unsubscribed && params[:uid].present? && (co = Communication.find_by(unique_id: params[:uid])) # Find the recipient if (cr = co.communication_recipients.emails.find_by(detail: email_address)) cr.ignore_global_unsubscribe = true # this prevents from unsubscribing from all cr.unsubscribe end end respond_to do |format| format.turbo_stream do flash.now[:success] = 'Preferences updated.' render partial: 'shared/flash' end format.html do # Fallback path when Turbo/JS isn't driving the submit (e.g. the # "Save preferences" button with the bundle unavailable). `_alerts` # renders flash[:info] as a success banner after the redirect. flash[:info] = 'Preferences updated.' redirect_to email_preferences_my_account_path(token: params[:token], uid: params[:uid]) end end end |