Class: Www::BlogSubscriptionsController

Inherits:
BasePortalController show all
Defined in:
app/controllers/www/blog_subscriptions_controller.rb

Overview

Handles blog subscription signup and email confirmation
using the existing Audience (ID 2652) and AudienceMember model.
Unsubscribe is handled by the EmailPreference system (newsletters category).

Constant Summary collapse

BLOG_AUDIENCE_ID =

Blog audience id.

2652

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

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

#device_detector, #is_ie?

Methods included from Controllers::SubdomainDetection

#is_crm_request?, #is_www_request?, #json_request?

Methods included from Controllers::TurboSafeRedirect

#redirect_to

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

#confirmvoid

This method returns an undefined value.

Confirms a blog subscription from the emailed token, activating the
audience member.



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'app/controllers/www/blog_subscriptions_controller.rb', line 56

def confirm
  email = begin
    Encryption.decrypt_string(params[:token].to_s)
  rescue StandardError
    nil
  end

  audience_member = email.present? ? find_audience_member(email) : nil

  if audience_member
    audience_member.activate
    render layout: 'www/pages/account_portal'
  else
    redirect_to www_posts_path, alert: t('.invalid_confirmation')
  end
end

#createvoid

This method returns an undefined value.

Subscribes an email to the blog audience, sending a confirmation email
for a new or reactivated subscription.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/controllers/www/blog_subscriptions_controller.rb', line 16

def create
  email = params[:email].to_s.strip.downcase

  unless Truemail.valid?(email, with: :mx)
    flash.now[:warning] = t('.invalid_email')
    return respond_to do |format|
      format.turbo_stream { render partial: 'shared/flash' }
      format.html { redirect_to www_posts_path }
    end
  end

  audience_member = find_audience_member(email)

  if audience_member
    if audience_member.active?
      flash.now[:info] = t('.already_subscribed')
    else
      BlogSubscriptionMailer.confirmation(audience_member).deliver_later
      flash.now[:info] = t('.check_email')
    end
  else
    audience_member = AudienceMember.new(email_address: email, audience_id: BLOG_AUDIENCE_ID, active: false)
    if audience_member.save
      BlogSubscriptionMailer.confirmation(audience_member).deliver_later
      flash.now[:success] = t('.check_email')
    else
      flash.now[:warning] = audience_member.errors.full_messages.first || t('.invalid_email')
    end
  end

  respond_to do |format|
    format.turbo_stream { render partial: 'shared/flash' }
    format.html { redirect_to www_posts_path }
  end
end