mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Extract all locale-setting logic to a service
This commit is contained in:
@@ -6,7 +6,6 @@ module Spree
|
||||
include Spree::Core::ControllerHelpers::Common
|
||||
include Spree::Core::ControllerHelpers::Order
|
||||
include Spree::Core::ControllerHelpers::SSL
|
||||
include I18nHelper
|
||||
|
||||
ssl_required :new, :create, :destroy, :update
|
||||
ssl_allowed :login_bar
|
||||
@@ -54,9 +53,8 @@ module Spree
|
||||
def ensure_valid_locale_persisted
|
||||
# When creating a new user session we have to wait until after a successful
|
||||
# login to be able to persist a locale on the current user
|
||||
return unless spree_current_user && !available_locale?(spree_current_user.locale)
|
||||
|
||||
spree_current_user.update!(locale: I18n.default_locale)
|
||||
UserLocaleSetter.ensure_valid_locale_persisted(spree_current_user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,49 +1,9 @@
|
||||
module I18nHelper
|
||||
def set_locale
|
||||
save_locale_from_params
|
||||
|
||||
# After logging in, check if the user chose a locale before
|
||||
if current_user_locale.nil? && cookies[:locale] && available_locale?(params[:locale])
|
||||
spree_current_user&.update!(locale: params[:locale])
|
||||
end
|
||||
|
||||
I18n.locale = valid_current_locale
|
||||
UserLocaleSetter.new(spree_current_user, params[:locale], cookies).call
|
||||
end
|
||||
|
||||
def valid_locale(user)
|
||||
if user.present? &&
|
||||
user.locale.present? &&
|
||||
available_locale?(user.locale)
|
||||
user.locale
|
||||
else
|
||||
I18n.default_locale
|
||||
end
|
||||
end
|
||||
|
||||
def available_locale?(locale)
|
||||
Rails.application.config.i18n.available_locales.include?(locale)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def save_locale_from_params
|
||||
return unless params[:locale] && available_locale?(params[:locale])
|
||||
|
||||
spree_current_user&.update!(locale: params[:locale])
|
||||
cookies[:locale] = params[:locale]
|
||||
end
|
||||
|
||||
def current_user_locale
|
||||
spree_current_user.andand.locale
|
||||
end
|
||||
|
||||
def valid_current_locale
|
||||
if available_locale?(current_user_locale)
|
||||
current_user_locale
|
||||
elsif available_locale?(cookies[:locale])
|
||||
cookies[:locale]
|
||||
else
|
||||
I18n.default_locale
|
||||
end
|
||||
UserLocaleSetter.valid_locale_for_user(user)
|
||||
end
|
||||
end
|
||||
|
||||
67
app/services/user_locale_setter.rb
Normal file
67
app/services/user_locale_setter.rb
Normal file
@@ -0,0 +1,67 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UserLocaleSetter
|
||||
def initialize(current_user, params_locale, cookies)
|
||||
@current_user = current_user
|
||||
@params_locale = params_locale
|
||||
@cookies = cookies
|
||||
end
|
||||
|
||||
def call
|
||||
save_locale_from_params
|
||||
|
||||
# After logging in, check if the user chose a locale before
|
||||
if current_user_locale.nil? && cookies[:locale] && available_locale?(params_locale)
|
||||
current_user&.update!(locale: params_locale)
|
||||
end
|
||||
|
||||
I18n.locale = valid_current_locale
|
||||
end
|
||||
|
||||
def self.ensure_valid_locale_persisted(user)
|
||||
return unless user && !available_locale?(user.locale)
|
||||
|
||||
user.update!(locale: I18n.default_locale)
|
||||
end
|
||||
|
||||
def self.valid_locale_for_user(user)
|
||||
if user.present? && user.locale.present? && available_locale?(user.locale)
|
||||
user.locale
|
||||
else
|
||||
I18n.default_locale
|
||||
end
|
||||
end
|
||||
|
||||
def self.available_locale?(locale)
|
||||
Rails.application.config.i18n.available_locales.include?(locale)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :current_user, :params_locale, :cookies
|
||||
|
||||
def save_locale_from_params
|
||||
return unless params_locale && available_locale?(params_locale)
|
||||
|
||||
current_user&.update!(locale: params_locale)
|
||||
cookies[:locale] = params_locale
|
||||
end
|
||||
|
||||
def available_locale?(locale)
|
||||
self.class.available_locale?(locale)
|
||||
end
|
||||
|
||||
def current_user_locale
|
||||
current_user.andand.locale
|
||||
end
|
||||
|
||||
def valid_current_locale
|
||||
if available_locale?(current_user_locale)
|
||||
current_user_locale
|
||||
elsif available_locale?(cookies[:locale])
|
||||
cookies[:locale]
|
||||
else
|
||||
I18n.default_locale
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user