Class: MyAccountsController

Inherits:
BasePortalController show all
Includes:
Controllers::DeviseReturnable, Controllers::MasqueradeGuarded, MyAccountHelper
Defined in:
app/controllers/my_accounts_controller.rb

Overview

Customer-portal account management: dashboard, profile/billing-address
edits, social-login linking, password change, and account deletion.
Blocked from destructive/identity-linking actions while an employee is
masquerading as the customer.

Constant Summary

Constants included from Controllers::MasqueradeGuarded

Controllers::MasqueradeGuarded::DEFAULT_BLOCK_MESSAGE

Constants included from Controllers::DeviseReturnable

Controllers::DeviseReturnable::ALLOWED_REDIRECT_HOSTS

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 included from MyAccountHelper

#account_nav_active?, #can_list_contact_resources?, #is_current_user_or_customer_login_email?, #setup_contact, #setup_customer_account, #sorted_contact_points

Methods included from Controllers::MasqueradeGuarded

block_while_masquerading, #masquerade_blocks?

Methods included from Controllers::DeviseReturnable

#check_for_devise_return_path, #devise_return_path_from_omniauth_hash, #safe_referer

Methods inherited from BasePortalController

#current_ability, #portal_party, #set_catalog, #set_webpack

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, #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

#change_passwordvoid

This method returns an undefined value.

Redirects to Devise's registration edit form (password change).



170
171
172
# File 'app/controllers/my_accounts_controller.rb', line 170

def change_password
  redirect_to 
end

#destroyvoid

This method returns an undefined value.

Deletes the customer's account (blocked while masquerading).



141
142
143
144
145
146
147
148
149
150
# File 'app/controllers/my_accounts_controller.rb', line 141

def destroy
   = @context_user.
  sign_out()
  if .destroy
    flash[:info] = 'Sigh... WarmlyYours account deleted. Until we meet again...'
  else
    flash[:error] = 'Oops! Could not delete WarmlyYours account.'
  end
  redirect_to cms_link('/')
end

#editvoid

This method returns an undefined value.

Loads the profile-edit form.



68
69
70
71
72
73
74
75
76
77
78
# File 'app/controllers/my_accounts_controller.rb', line 68

def edit
  @contact_points = sorted_contact_points(@context_user.customer, begin
    .email
  rescue StandardError
    nil
  end)
  @hide_new_address_form = true if @context_user.billing_address.nil? || @context_user.billing_address.new_record?
  @cancel_path = 
  @customer = @context_user.customer
  @contact = @context_user.is_a?(Contact) ? @context_user : @context_user.contacts.first || @context_user.contacts.build
end

#edit_billing_addressvoid

This method returns an undefined value.

Loads the billing-address edit form.



83
84
85
86
87
88
89
90
91
92
# File 'app/controllers/my_accounts_controller.rb', line 83

def edit_billing_address
  @contact_points = sorted_contact_points(@context_user.customer, begin
    .email
  rescue StandardError
    nil
  end)
  @hide_new_address_form = true if @context_user.billing_address.nil? || @context_user.billing_address.new_record?
  @cancel_path = 
  @return_path = 
end

#manage_usersvoid

This method returns an undefined value.

Renders the sub-user management page.



182
# File 'app/controllers/my_accounts_controller.rb', line 182

def manage_users; end

#newvoid

This method returns an undefined value.

Redirects to the dashboard if the customer already has a valid
account (there's no separate "new account" form).



52
53
54
55
56
57
58
# File 'app/controllers/my_accounts_controller.rb', line 52

def new
  @account = @context_user.
  return unless @account&.valid?

  flash[:info] = 'You already have an account'
  redirect_to  and return
end

#omniauth_registervoid

This method returns an undefined value.

Starts the OAuth flow to link a social-login identity to the account
(blocked while masquerading).



156
157
158
159
160
161
162
163
164
165
# File 'app/controllers/my_accounts_controller.rb', line 156

def omniauth_register
  provider = nil
  provider = params[:provider].to_sym if params[:provider]
  if provider && Authentication::SUPPORTED_PROVIDERS.include?(provider.to_s)
    redirect_post delocalized_path(omniauth_authorize_path(:account, provider, authenticity_token: form_authenticity_token, devise_return_path: ))
  else
    flash[:error] = 'Whoops! Unsupported provider.'
    redirect_to 
  end
end

#pendingvoid

This method returns an undefined value.

Shows the "confirm your email" pending page.



131
132
133
134
135
136
# File 'app/controllers/my_accounts_controller.rb', line 131

def pending
  return unless @context_user..nil? || !@context_user..pending_confirmation?

  flash[:error] = 'No user confirmation pending'
  redirect_to cms_link('/')
end

#settingsvoid

This method returns an undefined value.

Renders the account settings menu.



63
# File 'app/controllers/my_accounts_controller.rb', line 63

def settings; end

#showvoid

This method returns an undefined value.

Renders the account dashboard (orders, active projects). Employees
aren't customers, so this is unavailable to them.



36
37
38
39
40
41
42
43
44
45
46
# File 'app/controllers/my_accounts_controller.rb', line 36

def show
  if @context_user.is_a?(Employee) || @party.is_a?(Employee)
    flash[:error] = 'Your current Employee log-in does not support this function'
    redirect_to cms_link('/')
  else
    @orders = (@context_user || @party).orders.active.non_credit
    @order_pending_payment = @orders.pending_payment
    @projects = (@context_user || @party).opportunities
    @active_projects = @projects.open_opportunities
  end
end

#social_loginsvoid

This method returns an undefined value.

Renders the linked-social-logins management page.



177
# File 'app/controllers/my_accounts_controller.rb', line 177

def social_logins; end

#updatevoid

This method returns an undefined value.

Updates the customer's profile.



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'app/controllers/my_accounts_controller.rb', line 109

def update
  @customer = @context_user.customer
  @customer.attributes = params[:customer]
  @customer.leadify
  if @customer.save
    redirect_to(@devise_return_path || @return_path || )
  else
    @contact_points = sorted_contact_points(@context_user.customer, begin
      .email
    rescue StandardError
      nil
    end)
    @contact = @context_user.is_a?(Contact) ? @context_user : @context_user.contacts.first || @context_user.contacts.build
    @cancel_path = 
    @hide_new_address_form = true if @context_user.billing_address.nil? || @context_user.billing_address.new_record?
    render action: :edit, status: :unprocessable_content
  end
end

#update_billing_addressvoid

This method returns an undefined value.

Updates the customer's billing address.



97
98
99
100
101
102
103
104
# File 'app/controllers/my_accounts_controller.rb', line 97

def update_billing_address
  if @context_user.customer.update(params[:customer])
    redirect_to 
  else
    @hide_new_address_form = true if @context_user.billing_address.nil? || @context_user.billing_address.new_record?
    render action: :edit_billing_address, status: :unprocessable_content
  end
end