spree_core 4.2.0.rc3 → 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree.js +19 -0
- data/app/controllers/spree/base_controller.rb +2 -1
- data/app/controllers/spree/errors_controller.rb +11 -0
- data/app/finders/spree/orders/find_current.rb +1 -1
- data/app/finders/spree/products/find.rb +14 -3
- data/app/helpers/spree/base_helper.rb +2 -1
- data/app/helpers/spree/currency_helper.rb +34 -0
- data/app/helpers/spree/locale_helper.rb +31 -0
- data/app/helpers/spree/products_helper.rb +37 -12
- data/app/models/concerns/spree/product_scopes.rb +1 -1
- data/app/models/concerns/spree/user_payment_source.rb +1 -1
- data/app/models/spree/ability.rb +45 -30
- data/app/models/spree/app_configuration.rb +2 -2
- data/app/models/spree/app_dependencies.rb +3 -1
- data/app/models/spree/credit_card.rb +4 -0
- data/app/models/spree/image.rb +14 -14
- data/app/models/spree/line_item.rb +6 -9
- data/app/models/spree/price.rb +1 -1
- data/app/models/spree/product.rb +29 -15
- data/app/models/spree/promotion/rules/option_value.rb +1 -1
- data/app/models/spree/store.rb +38 -9
- data/app/models/spree/variant.rb +8 -8
- data/app/paginators/spree/shared/paginate.rb +8 -1
- data/app/presenters/spree/variant_presenter.rb +2 -5
- data/app/services/spree/build_localized_redirect_url.rb +101 -0
- data/app/services/spree/cart/estimate_shipping_rates.rb +1 -1
- data/app/views/spree/errors/forbidden.html.erb +0 -0
- data/app/views/spree/errors/unauthorized.html.erb +0 -0
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +13 -2
- data/app/views/spree/shared/_purchased_items_table.html.erb +15 -6
- data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +2 -2
- data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +2 -2
- data/config/locales/en.yml +8 -54
- data/config/routes.rb +2 -1
- data/db/default/spree/stores.rb +1 -0
- data/db/default/spree/zones.rb +4 -1
- data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +1 -0
- data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +6 -2
- data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +5 -0
- data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +11 -0
- data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +22 -0
- data/lib/generators/spree/install/install_generator.rb +9 -6
- data/lib/spree/core.rb +2 -1
- data/lib/spree/core/controller_helpers/auth.rb +3 -1
- data/lib/spree/core/controller_helpers/common.rb +6 -8
- data/lib/spree/core/controller_helpers/currency.rb +54 -0
- data/lib/spree/core/controller_helpers/locale.rb +58 -0
- data/lib/spree/core/controller_helpers/search.rb +1 -1
- data/lib/spree/core/controller_helpers/store.rb +4 -16
- data/lib/spree/core/version.rb +3 -1
- data/lib/spree/i18n.rb +12 -0
- data/lib/spree/permitted_attributes.rb +1 -1
- data/lib/spree/service_module.rb +2 -2
- data/lib/spree/testing_support/common_rake.rb +1 -1
- data/lib/spree/testing_support/controller_requests.rb +10 -10
- data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_factory.rb +1 -0
- data/lib/spree/testing_support/flatpickr_capybara.rb +101 -0
- data/lib/spree/testing_support/locale_helpers.rb +78 -0
- data/lib/spree/testing_support/next_instance_of.rb +38 -0
- data/spree_core.gemspec +1 -1
- metadata +20 -9
- data/lib/generators/spree/install/templates/config/initializers/spree_storefront.rb +0 -1
- data/lib/generators/spree/install/templates/config/spree_storefront.yml +0 -67
- data/lib/spree/core/controller_helpers/currency_helpers.rb +0 -15
@@ -8,10 +8,13 @@
|
|
8
8
|
<td></td>
|
9
9
|
<td>
|
10
10
|
<p class="f-fallback purchase_total purchase_total--label">
|
11
|
-
<%= Spree.t(:promotion)
|
11
|
+
<%= Spree.t(:promotion) %>:
|
12
|
+
</p>
|
13
|
+
<p class="f-fallback purchase_total--name purchase_total--label">
|
14
|
+
<%= label %>
|
12
15
|
</p>
|
13
16
|
</td>
|
14
|
-
<td>
|
17
|
+
<td class="purchase_total-col">
|
15
18
|
<p class="f-fallback purchase_total">
|
16
19
|
<%= Spree::Money.new(adjustments.sum(&:amount), currency: order.currency) %>
|
17
20
|
</p>
|
@@ -25,10 +28,13 @@
|
|
25
28
|
<td></td>
|
26
29
|
<td>
|
27
30
|
<p class="f-fallback purchase_total purchase_total--label">
|
28
|
-
<%= Spree.t(:shipping)
|
31
|
+
<%= Spree.t(:shipping) %>:
|
32
|
+
</p>
|
33
|
+
<p class="f-fallback purchase_total--name purchase_total--label">
|
34
|
+
<%= name %>
|
29
35
|
</p>
|
30
36
|
</td>
|
31
|
-
<td>
|
37
|
+
<td class="purchase_total-col">
|
32
38
|
<p class="f-fallback purchase_total">
|
33
39
|
<%= Spree::Money.new(shipments.sum(&:discounted_cost), currency: order.currency) %>
|
34
40
|
</p>
|
@@ -41,10 +47,13 @@
|
|
41
47
|
<td></td>
|
42
48
|
<td>
|
43
49
|
<p class="f-fallback purchase_total purchase_total--label">
|
44
|
-
<%= Spree.t(:tax)
|
50
|
+
<%= Spree.t(:tax) %>:
|
51
|
+
</p>
|
52
|
+
<p class="f-fallback purchase_total--name purchase_total--label">
|
53
|
+
<%= label %>
|
45
54
|
</p>
|
46
55
|
</td>
|
47
|
-
<td>
|
56
|
+
<td class="purchase_total-col">
|
48
57
|
<p class="f-fallback purchase_total">
|
49
58
|
<%= Spree::Money.new(adjustments.sum(&:amount), currency: order.currency) %>
|
50
59
|
</p>
|
@@ -18,9 +18,9 @@
|
|
18
18
|
</strong>
|
19
19
|
<p class="purchase_item--additional"><%= raw(line_item.variant.options_text) -%></p>
|
20
20
|
</td>
|
21
|
-
<td class="align-right">
|
21
|
+
<td class="align-right" width="30%">
|
22
22
|
<span class="f-fallback purchase_item_price">
|
23
|
-
<%= line_item.quantity %> x <%= line_item.single_money
|
23
|
+
<%= line_item.quantity %> x <%= line_item.single_money %><br>
|
24
24
|
<%= line_item.display_amount %>
|
25
25
|
</span>
|
26
26
|
</td>
|
data/config/locales/en.yml
CHANGED
@@ -663,7 +663,6 @@ en:
|
|
663
663
|
jackets_and_coats: JACKET & COASTS
|
664
664
|
new_collection: NEW COLLECTION
|
665
665
|
special_offers: SPECIAL OFFERS
|
666
|
-
summer_2019: SUMMER 2019
|
667
666
|
channel: Channel
|
668
667
|
charged: Charged
|
669
668
|
checkout: Checkout
|
@@ -756,42 +755,14 @@ en:
|
|
756
755
|
new_order_notifications_email: New Order Notifications Email
|
757
756
|
cut: Cut
|
758
757
|
cvv: CVV
|
758
|
+
no_cc_type: N/A
|
759
759
|
cvv_response: CVV Response
|
760
760
|
date: Date
|
761
761
|
date_completed: Date Completed
|
762
762
|
date_picker:
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
hourAriaLabel: 'Hour'
|
767
|
-
js_format: Y/m/d
|
768
|
-
js_date_time: Y/m/d - H:i
|
769
|
-
minuteAriaLabel: 'Minute'
|
770
|
-
pm: 'PM'
|
771
|
-
rangeSeparator: ' to '
|
772
|
-
scrollTitle: 'Scroll to increment'
|
773
|
-
toggleTitle: 'Click to toggle'
|
774
|
-
weekAbbreviation: 'Wk'
|
775
|
-
yearAriaLabel: 'Year'
|
776
|
-
sun: 'Sun'
|
777
|
-
mon: 'Mon'
|
778
|
-
tue: 'Tue'
|
779
|
-
wed: 'Wed'
|
780
|
-
thu: 'Thu'
|
781
|
-
fri: 'Fri'
|
782
|
-
sat: 'Sat'
|
783
|
-
lh_jan: 'January'
|
784
|
-
lh_feb: 'February'
|
785
|
-
lh_mar: 'March'
|
786
|
-
lh_apr: 'April'
|
787
|
-
lh_may: 'May'
|
788
|
-
lh_jun: 'June'
|
789
|
-
lh_jul: 'July'
|
790
|
-
lh_aug: 'August'
|
791
|
-
lh_sep: 'September'
|
792
|
-
lh_oct: 'October'
|
793
|
-
lh_nov: 'November'
|
794
|
-
lh_dec: 'December'
|
763
|
+
# FlatPickr human friendly formatting
|
764
|
+
fpr_human_friendly_date_format: M j, Y
|
765
|
+
fpr_human_friendly_date_time_format: M j, Y at H:i
|
795
766
|
date_range: Date Range
|
796
767
|
default: Default
|
797
768
|
default_country_cannot_be_deleted: Default country cannot be deleted
|
@@ -926,24 +897,6 @@ en:
|
|
926
897
|
hide_from_subcategories_nav: Hide from subcategories navigation
|
927
898
|
home: Home
|
928
899
|
home_page: homepage
|
929
|
-
homepage:
|
930
|
-
bestsellers: BESTSELLERS
|
931
|
-
fashion_trends: FASHION TRENDS
|
932
|
-
fashion_trends_note: Want to rock this season’s hottest trend in style? These are the top fashion from Summer 2020 Fashion Weeks that are coming our way this season.
|
933
|
-
men: MEN
|
934
|
-
new: NEW
|
935
|
-
new_collection: NEW COLLECTION
|
936
|
-
read_more: READ MORE
|
937
|
-
shoes: SHOES
|
938
|
-
shop_now: SHOP NOW
|
939
|
-
sportswear: SPORTSWEAR
|
940
|
-
streetstyle: STREETSTYLE
|
941
|
-
summer_2020: Summer 2020
|
942
|
-
summer_collection: Summer Collection
|
943
|
-
summer_sale: SUMMER SALE
|
944
|
-
trending: TRENDING
|
945
|
-
up_to_60: UP TO 60%
|
946
|
-
women: WOMEN
|
947
900
|
help_center: Help Center
|
948
901
|
i18n:
|
949
902
|
available_locales: Available Locales
|
@@ -1582,7 +1535,7 @@ en:
|
|
1582
1535
|
show_only_considered_risky: Only show risky orders
|
1583
1536
|
show_property: Show Property
|
1584
1537
|
show_rate_in_label: Show rate in label
|
1585
|
-
|
1538
|
+
show_store_selector:
|
1586
1539
|
short: Show Store selector
|
1587
1540
|
long: Display the Store selector in the main nav bar of Storefront and allow users to change Store and Currency
|
1588
1541
|
sign_up: Sign Up
|
@@ -1660,9 +1613,9 @@ en:
|
|
1660
1613
|
unable_to_delete: Unable to delete store.
|
1661
1614
|
store_form:
|
1662
1615
|
code_help: "Store unique identifier, which is an abbreviated version of the store’s name (used as the layout directory name, and also helpful for separating templates by store)"
|
1663
|
-
checkout_zone_help: "Selecting
|
1616
|
+
checkout_zone_help: "Selecting zone will limit to which Countries or States products are shipped.
|
1664
1617
|
For more information <a href='https://guides.spreecommerce.org/user/configuration/configuring_geography.html#zones' target='_blank' class='alert-link'>please see documentation</a>"
|
1665
|
-
|
1618
|
+
locales_help: "Install <a href='https://github.com/spree-contrib/spree_i18n' target='_blank' class='alert-link'>Spree I18n extension</a> to add more locales"
|
1666
1619
|
social_help: "If you want to link to your social accounts in the footer part of your website please fill below fields"
|
1667
1620
|
default_country_help: "This is the Country that will be pre-selected on the Checkout Address form"
|
1668
1621
|
footer_help: "This content is visible in the footer section of your Store"
|
@@ -1719,6 +1672,7 @@ en:
|
|
1719
1672
|
summary: Summary
|
1720
1673
|
supported_currencies: Supported Currencies
|
1721
1674
|
supported_currencies_long: A comma separated list of supported currencies
|
1675
|
+
supported_locales: Supported Locales
|
1722
1676
|
tax: Tax
|
1723
1677
|
tax_included: "Tax (incl.)"
|
1724
1678
|
tax_categories: Tax Categories
|
data/config/routes.rb
CHANGED
data/db/default/spree/stores.rb
CHANGED
@@ -11,6 +11,7 @@ else
|
|
11
11
|
s.customer_support_email = 'support@example.com'
|
12
12
|
s.default_currency = 'USD'
|
13
13
|
s.default_country_id = Spree::Config[:default_country_id]
|
14
|
+
s.default_locale = I18n.locale
|
14
15
|
s.seo_title = 'Spree Commerce Demo Shop'
|
15
16
|
s.meta_description = 'This is the new Spree UX DEMO | OVERVIEW: http://bit.ly/new-spree-ux | DOCS: http://bit.ly/spree-ux-customization-docs | CONTACT: https://spreecommerce.org/contact/'
|
16
17
|
s.facebook = 'spreecommerce'
|
data/db/default/spree/zones.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
eu_vat = Spree::Zone.where(name: 'EU_VAT', description: 'Countries that make up the EU VAT zone.', kind: 'country').first_or_create!
|
2
|
+
uk_vat = Spree::Zone.where(name: 'UK_VAT', kind: 'country').first_or_create!
|
2
3
|
north_america = Spree::Zone.where(name: 'North America', description: 'USA + Canada', kind: 'country').first_or_create!
|
3
4
|
south_america = Spree::Zone.where(name: 'South America', description: 'South America', kind: 'country').first_or_create!
|
4
5
|
middle_east = Spree::Zone.where(name: 'Middle East', description: 'Middle East', kind: 'country').first_or_create!
|
5
6
|
asia = Spree::Zone.where(name: 'Asia', description: 'Asia', kind: 'country').first_or_create!
|
6
7
|
|
7
|
-
%w(PL FI PT RO DE FR SK HU SI IE AT ES IT BE SE LV BG
|
8
|
+
%w(PL FI PT RO DE FR SK HU SI IE AT ES IT BE SE LV BG LT CY LU MT DK NL EE HR CZ GR).each do |name|
|
8
9
|
eu_vat.zone_members.where(zoneable: Spree::Country.find_by!(iso: name)).first_or_create!
|
9
10
|
end
|
10
11
|
|
12
|
+
uk_vat.zone_members.where(zoneable: Spree::Country.find_by(iso: 'GB')).first_or_create!
|
13
|
+
|
11
14
|
%w(US CA).each do |name|
|
12
15
|
north_america.zone_members.where(zoneable: Spree::Country.find_by!(iso: name)).first_or_create!
|
13
16
|
end
|
@@ -2,6 +2,7 @@ class AddSupportedCurrenciesToStore < ActiveRecord::Migration[6.0]
|
|
2
2
|
def change
|
3
3
|
unless column_exists?(:spree_stores, :supported_currencies)
|
4
4
|
add_column :spree_stores, :supported_currencies, :string
|
5
|
+
Spree::Store.reset_column_information
|
5
6
|
Spree::Store.all.each do |store|
|
6
7
|
store.update_attribute(:supported_currencies, store.default_currency)
|
7
8
|
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
class AddFilterableColumnToSpreeOptionTypes < ActiveRecord::Migration[6.0]
|
2
2
|
def change
|
3
|
-
|
4
|
-
|
3
|
+
unless column_exists?(:spree_option_types, :filterable)
|
4
|
+
add_column :spree_option_types, :filterable, :boolean, default: true, null: false
|
5
|
+
end
|
6
|
+
unless index_exists?(:spree_option_types, :filterable)
|
7
|
+
add_index :spree_option_types, :filterable
|
8
|
+
end
|
5
9
|
end
|
6
10
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AddSupportedLocalesToSpreeStores < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
unless column_exists?(:spree_stores, :supported_locales)
|
4
|
+
add_column :spree_stores, :supported_locales, :string
|
5
|
+
Spree::Store.reset_column_information
|
6
|
+
Spree::Store.all.each do |store|
|
7
|
+
store.update_attribute(:supported_locales, store.default_locale)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class MigrateSpreeI18nGlobalizeConfig < ActiveRecord::Migration[6.0]
|
2
|
+
def up
|
3
|
+
locales = []
|
4
|
+
|
5
|
+
if defined?(SpreeI18n) && defined?(SpreeI18n::Config)
|
6
|
+
locales = (locales << SpreeI18n::Config[:available_locales]).flatten.uniq.compact
|
7
|
+
end
|
8
|
+
|
9
|
+
if defined?(SpreeGlobalize) && defined?(SpreeGlobalize::Config)
|
10
|
+
locales = (locales << SpreeGlobalize::Config[:supported_locales]).flatten.uniq.compact
|
11
|
+
end
|
12
|
+
|
13
|
+
default_store = Spree::Store.default
|
14
|
+
if default_store.supported_locales.blank? || default_store.supported_locales == default_store.default_locale
|
15
|
+
locales = (locales << default_store.default_locale).uniq.compact.join(',')
|
16
|
+
default_store.update(supported_locales: locales)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def down
|
21
|
+
end
|
22
|
+
end
|
@@ -10,7 +10,8 @@ module Spree
|
|
10
10
|
class_option :migrate, type: :boolean, default: true, banner: 'Run Spree migrations'
|
11
11
|
class_option :seed, type: :boolean, default: true, banner: 'load seed data (migrations must be run)'
|
12
12
|
class_option :sample, type: :boolean, default: true, banner: 'load sample data (migrations must be run)'
|
13
|
-
class_option :
|
13
|
+
class_option :install_storefront, type: :boolean, default: true, banner: 'installs storefront configuration files'
|
14
|
+
class_option :copy_storefront, type: :boolean, default: false, banner: 'copy all storefront views and stylesheets'
|
14
15
|
class_option :auto_accept, type: :boolean
|
15
16
|
class_option :user_class, type: :string
|
16
17
|
class_option :admin_email, type: :string
|
@@ -30,6 +31,7 @@ module Spree
|
|
30
31
|
@run_migrations = options[:migrate]
|
31
32
|
@load_seed_data = options[:seed]
|
32
33
|
@load_sample_data = options[:sample]
|
34
|
+
@install_storefront = options[:install_storefront]
|
33
35
|
@copy_storefront = options[:copy_storefront]
|
34
36
|
|
35
37
|
unless @run_migrations
|
@@ -40,11 +42,6 @@ module Spree
|
|
40
42
|
|
41
43
|
def add_files
|
42
44
|
template 'config/initializers/spree.rb', 'config/initializers/spree.rb'
|
43
|
-
|
44
|
-
if Spree::Core::Engine.frontend_available? || Rails.env.test?
|
45
|
-
template 'config/initializers/spree_storefront.rb', 'config/initializers/spree_storefront.rb'
|
46
|
-
template 'config/spree_storefront.yml', 'config/spree_storefront.yml'
|
47
|
-
end
|
48
45
|
end
|
49
46
|
|
50
47
|
def additional_tweaks
|
@@ -91,6 +88,12 @@ module Spree
|
|
91
88
|
empty_directory 'app/overrides'
|
92
89
|
end
|
93
90
|
|
91
|
+
def install_storefront
|
92
|
+
if @install_storefront && Spree::Core::Engine.frontend_available?
|
93
|
+
generate 'spree:frontend:install'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
94
97
|
def copy_storefront
|
95
98
|
if @copy_storefront && Spree::Core::Engine.frontend_available?
|
96
99
|
generate 'spree:frontend:copy_storefront'
|
data/lib/spree/core.rb
CHANGED
@@ -105,4 +105,5 @@ require 'spree/core/controller_helpers/order'
|
|
105
105
|
require 'spree/core/controller_helpers/search'
|
106
106
|
require 'spree/core/controller_helpers/store'
|
107
107
|
require 'spree/core/controller_helpers/strong_parameters'
|
108
|
-
require 'spree/core/controller_helpers/
|
108
|
+
require 'spree/core/controller_helpers/locale'
|
109
|
+
require 'spree/core/controller_helpers/currency'
|
@@ -76,7 +76,9 @@ module Spree
|
|
76
76
|
redirect_to spree.forbidden_path
|
77
77
|
else
|
78
78
|
store_location
|
79
|
-
if
|
79
|
+
if request.fullpath.match(Spree.admin_path) && defined?(spree.admin_login_path)
|
80
|
+
redirect_to spree.admin_login_path
|
81
|
+
elsif respond_to?(:spree_login_path)
|
80
82
|
redirect_to spree_login_path
|
81
83
|
elsif spree.respond_to?(:root_path)
|
82
84
|
redirect_to spree.root_path
|
@@ -10,8 +10,6 @@ module Spree
|
|
10
10
|
|
11
11
|
layout :get_layout
|
12
12
|
|
13
|
-
before_action :set_user_language
|
14
|
-
|
15
13
|
protected
|
16
14
|
|
17
15
|
# can be used in views as well as controllers.
|
@@ -43,12 +41,12 @@ module Spree
|
|
43
41
|
private
|
44
42
|
|
45
43
|
def set_user_language
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
44
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
45
|
+
ControllerHelpers::Common#set_user_language is deprecated and will be removed in Spree 5.0.
|
46
|
+
Please use `before_action :set_locale` instead
|
47
|
+
DEPRECATION
|
48
|
+
|
49
|
+
set_locale
|
52
50
|
end
|
53
51
|
|
54
52
|
# Returns which layout to render.
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
module ControllerHelpers
|
4
|
+
module Currency
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
helper_method :supported_currencies
|
9
|
+
helper_method :supported_currencies_for_all_stores
|
10
|
+
helper_method :current_currency
|
11
|
+
helper_method :supported_currency?
|
12
|
+
helper_method :currency_param
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_currency
|
16
|
+
@current_currency ||= if defined?(session) && session.key?(:currency) && supported_currency?(session[:currency])
|
17
|
+
session[:currency]
|
18
|
+
elsif params[:currency].present? && supported_currency?(params[:currency])
|
19
|
+
params[:currency]
|
20
|
+
elsif current_store.present?
|
21
|
+
current_store.default_currency
|
22
|
+
else
|
23
|
+
Spree::Config[:currency]
|
24
|
+
end&.upcase
|
25
|
+
end
|
26
|
+
|
27
|
+
def supported_currencies
|
28
|
+
@supported_currencies ||= current_store&.supported_currencies_list
|
29
|
+
end
|
30
|
+
|
31
|
+
def supported_currencies_for_all_stores
|
32
|
+
@supported_currencies_for_all_stores ||= begin
|
33
|
+
(
|
34
|
+
Spree::Store.pluck(:supported_currencies).map { |c| c&.split(',') }.flatten + Spree::Store.pluck(:default_currency)
|
35
|
+
).
|
36
|
+
compact.uniq.map { |code| ::Money::Currency.find(code.strip) }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def supported_currency?(currency_iso_code)
|
41
|
+
return false if supported_currencies.nil?
|
42
|
+
|
43
|
+
supported_currencies.map(&:iso_code).include?(currency_iso_code.upcase)
|
44
|
+
end
|
45
|
+
|
46
|
+
def currency_param
|
47
|
+
return if current_currency == current_store.default_currency
|
48
|
+
|
49
|
+
current_currency
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
module ControllerHelpers
|
4
|
+
module Locale
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
before_action :set_locale
|
9
|
+
|
10
|
+
helper_method :supported_locales
|
11
|
+
helper_method :supported_locales_for_all_stores
|
12
|
+
helper_method :current_locale
|
13
|
+
helper_method :supported_locale?
|
14
|
+
helper_method :available_locales
|
15
|
+
helper_method :locale_param
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_locale
|
19
|
+
I18n.locale = current_locale
|
20
|
+
end
|
21
|
+
|
22
|
+
def current_locale
|
23
|
+
@current_locale ||= if params[:locale].present? && supported_locale?(params[:locale])
|
24
|
+
params[:locale]
|
25
|
+
elsif respond_to?(:config_locale, true) && config_locale.present?
|
26
|
+
config_locale
|
27
|
+
else
|
28
|
+
current_store&.default_locale || Rails.application.config.i18n.default_locale || I18n.default_locale
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def supported_locales
|
33
|
+
@supported_locales ||= current_store&.supported_locales_list
|
34
|
+
end
|
35
|
+
|
36
|
+
def supported_locale?(locale_code)
|
37
|
+
return false if supported_locales.nil?
|
38
|
+
|
39
|
+
supported_locales.include?(locale_code&.to_s)
|
40
|
+
end
|
41
|
+
|
42
|
+
def supported_locales_for_all_stores
|
43
|
+
@supported_locales_for_all_stores ||= Spree.available_locales
|
44
|
+
end
|
45
|
+
|
46
|
+
def available_locales
|
47
|
+
Spree::Store.available_locales
|
48
|
+
end
|
49
|
+
|
50
|
+
def locale_param
|
51
|
+
return if I18n.locale.to_s == current_store.default_locale || current_store.default_locale.nil?
|
52
|
+
|
53
|
+
I18n.locale.to_s
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|