spree_core 4.2.3.1 → 4.3.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/finders/concerns/spree/product_filterable.rb +9 -0
- data/app/finders/spree/cms_pages/find.rb +41 -0
- data/app/finders/spree/menus/find.rb +11 -0
- data/app/finders/spree/option_values/find_available.rb +20 -0
- data/app/finders/spree/orders/find_complete.rb +14 -2
- data/app/finders/spree/orders/find_current.rb +1 -13
- data/app/finders/spree/product_properties/find_available.rb +20 -0
- data/app/finders/spree/products/find.rb +82 -26
- data/app/finders/spree/stores/find_current.rb +24 -0
- data/app/helpers/spree/base_helper.rb +63 -2
- data/app/helpers/spree/locale_helper.rb +5 -1
- data/app/helpers/spree/products_helper.rb +7 -3
- data/app/models/concerns/spree/display_link.rb +42 -0
- data/app/models/concerns/spree/display_money.rb +6 -2
- data/app/models/concerns/spree/filter_param.rb +21 -0
- data/app/models/concerns/spree/memoized_data.rb +24 -0
- data/app/models/concerns/spree/multi_store_resource.rb +24 -0
- data/app/models/concerns/spree/product_scopes.rb +71 -8
- data/app/models/concerns/spree/single_store_resource.rb +19 -0
- data/app/models/concerns/spree/user_address.rb +19 -0
- data/app/models/concerns/spree/user_methods.rb +14 -12
- data/app/models/concerns/spree/user_payment_source.rb +1 -1
- data/app/models/concerns/spree/user_reporting.rb +35 -10
- data/app/models/concerns/spree/user_roles.rb +25 -0
- data/app/models/spree/ability.rb +3 -1
- data/app/models/spree/address.rb +27 -6
- data/app/models/spree/app_configuration.rb +8 -0
- data/app/models/spree/app_dependencies.rb +18 -6
- data/app/models/spree/base.rb +18 -0
- data/app/models/spree/classification.rb +3 -0
- data/app/models/spree/cms/pages/feature_page.rb +7 -0
- data/app/models/spree/cms/pages/homepage.rb +20 -0
- data/app/models/spree/cms/pages/standard_page.rb +4 -0
- data/app/models/spree/cms/sections/featured_article.rb +29 -0
- data/app/models/spree/cms/sections/hero_image.rb +47 -0
- data/app/models/spree/cms/sections/image_gallery.rb +103 -0
- data/app/models/spree/cms/sections/product_carousel.rb +14 -0
- data/app/models/spree/cms/sections/rich_text_content.rb +13 -0
- data/app/models/spree/cms/sections/side_by_side_images.rb +74 -0
- data/app/models/spree/cms_page.rb +66 -0
- data/app/models/spree/cms_section.rb +57 -0
- data/app/models/spree/country.rb +14 -6
- data/app/models/spree/credit_card.rb +2 -8
- data/app/models/spree/customer_return.rb +8 -2
- data/app/models/spree/icon.rb +9 -0
- data/app/models/spree/image/configuration/active_storage.rb +2 -0
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +1 -1
- data/app/models/spree/menu.rb +63 -0
- data/app/models/spree/menu_item.rb +76 -0
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +11 -0
- data/app/models/spree/option_value_variant.rb +1 -1
- data/app/models/spree/order/address_book.rb +3 -5
- data/app/models/spree/order/currency_updater.rb +1 -1
- data/app/models/spree/order/emails.rb +32 -0
- data/app/models/spree/order/payments.rb +1 -1
- data/app/models/spree/order/store_credit.rb +1 -1
- data/app/models/spree/order.rb +46 -45
- data/app/models/spree/payment.rb +7 -0
- data/app/models/spree/payment_method.rb +4 -0
- data/app/models/spree/preferences/preferable.rb +12 -0
- data/app/models/spree/preferences/preferable_class_methods.rb +10 -1
- data/app/models/spree/product.rb +36 -22
- data/app/models/spree/product_property.rb +19 -4
- data/app/models/spree/promotion/rules/country.rb +1 -1
- data/app/models/spree/promotion/rules/first_order.rb +4 -3
- data/app/models/spree/promotion/rules/taxon.rb +10 -7
- data/app/models/spree/promotion.rb +6 -15
- data/app/models/spree/promotion_handler/cart.rb +7 -2
- data/app/models/spree/promotion_handler/coupon.rb +5 -4
- data/app/models/spree/promotion_handler/free_shipping.rb +5 -6
- data/app/models/spree/promotion_handler/page.rb +3 -2
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -0
- data/app/models/spree/promotion_rule.rb +2 -0
- data/app/models/spree/property.rb +28 -1
- data/app/models/spree/reimbursement.rb +3 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -1
- data/app/models/spree/shipment_handler.rb +4 -2
- data/app/models/spree/stock/quantifier.rb +6 -6
- data/app/models/spree/stock_location.rb +19 -12
- data/app/models/spree/store.rb +90 -7
- data/app/models/spree/store_credit.rb +7 -3
- data/app/models/spree/store_credit_event.rb +2 -2
- data/app/models/spree/store_payment_method.rb +11 -0
- data/app/models/spree/store_product.rb +11 -0
- data/app/models/spree/store_promotion.rb +11 -0
- data/app/models/spree/taxon.rb +21 -1
- data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -0
- data/app/models/spree/taxonomy.rb +3 -1
- data/app/models/spree/variant.rb +13 -4
- data/app/presenters/spree/filters/options_presenter.rb +27 -0
- data/app/presenters/spree/filters/price_presenter.rb +22 -0
- data/app/presenters/spree/filters/price_range_presenter.rb +29 -0
- data/app/presenters/spree/filters/properties_presenter.rb +23 -0
- data/app/presenters/spree/filters/property_presenter.rb +22 -0
- data/app/presenters/spree/filters/quantified_price_range_presenter.rb +44 -0
- data/app/services/spree/account/addresses/create.rb +1 -0
- data/app/services/spree/account/addresses/helper.rb +6 -0
- data/app/services/spree/account/addresses/update.rb +9 -3
- data/app/services/spree/account/create.rb +17 -0
- data/app/services/spree/account/update.rb +15 -0
- data/app/services/spree/build_localized_redirect_url.rb +1 -1
- data/app/services/spree/cart/create.rb +5 -3
- data/app/services/spree/cart/destroy.rb +40 -0
- data/app/services/spree/cart/empty.rb +36 -0
- data/app/services/spree/cart/estimate_shipping_rates.rb +3 -3
- data/app/services/spree/checkout/add_store_credit.rb +1 -1
- data/app/services/spree/classifications/reposition.rb +18 -0
- data/app/services/spree/credit_cards/destroy.rb +41 -0
- data/app/validators/db_maximum_length_validator.rb +5 -0
- data/app/validators/email_validator.rb +3 -1
- data/app/views/spree/shared/_purchased_items_table.text.erb +25 -0
- data/config/initializers/active_storage.rb +2 -0
- data/config/locales/en.yml +175 -3
- data/config/routes.rb +0 -5
- data/db/migrate/20191016134113_add_deafult_value_for_store_default_currency.rb +1 -1
- data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +1 -1
- data/db/migrate/20200102141311_add_social_to_spree_stores.rb +1 -1
- data/db/migrate/20200212144523_add_hide_from_nav_to_taxons.rb +1 -1
- data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +1 -1
- data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +1 -1
- data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +1 -1
- data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +1 -1
- data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +1 -1
- data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +1 -1
- data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +1 -1
- data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +1 -1
- data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +1 -1
- data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +1 -1
- data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +1 -1
- data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +1 -1
- data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +1 -1
- data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +8 -0
- data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +1 -1
- data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +1 -1
- data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +1 -1
- data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +1 -1
- data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +1 -1
- data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +1 -1
- data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +1 -1
- data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +1 -1
- data/db/migrate/20210407200948_create_spree_menus.rb +16 -0
- data/db/migrate/20210408092939_create_spree_menu_items.rb +31 -0
- data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +8 -0
- data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +8 -0
- data/db/migrate/20210512191732_create_spree_cms_pages.rb +24 -0
- data/db/migrate/20210514204251_create_spree_cms_sections.rb +22 -0
- data/db/migrate/20210527094055_create_spree_products_stores.rb +36 -0
- data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +5 -0
- data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +46 -0
- data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +29 -0
- data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +10 -0
- data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +11 -0
- data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
- data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
- data/db/migrate/20210721125657_create_spree_promotions_stores.rb +29 -0
- data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +11 -0
- data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +305 -0
- data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +9 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +11 -7
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
- data/lib/generators/spree/dummy_model/templates/model.rb.tt +1 -1
- data/lib/generators/spree/install/install_generator.rb +12 -24
- data/lib/spree/core/components.rb +8 -0
- data/lib/spree/core/controller_helpers/auth.rb +7 -1
- data/lib/spree/core/controller_helpers/common.rb +1 -1
- data/lib/spree/core/controller_helpers/order.rb +4 -4
- data/lib/spree/core/controller_helpers/search.rb +1 -0
- data/lib/spree/core/controller_helpers/store.rb +24 -1
- data/lib/spree/core/engine.rb +6 -0
- data/lib/spree/core/importer/product.rb +3 -1
- data/lib/spree/core/product_duplicator.rb +1 -0
- data/lib/spree/core/search/base.rb +17 -22
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +8 -4
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/money.rb +2 -1
- data/lib/spree/permitted_attributes.rb +14 -3
- data/lib/spree/testing_support/authorization_helpers.rb +6 -3
- data/lib/spree/testing_support/capybara_config.rb +3 -1
- data/lib/spree/testing_support/common_rake.rb +17 -4
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +1 -1
- data/lib/spree/testing_support/factories/classification_factory.rb +8 -0
- data/lib/spree/testing_support/factories/cms_page_factory.rb +20 -0
- data/lib/spree/testing_support/factories/cms_section_factory.rb +31 -0
- data/lib/spree/testing_support/factories/customer_return_factory.rb +24 -17
- data/lib/spree/testing_support/factories/icon_factory.rb +7 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +6 -2
- data/lib/spree/testing_support/factories/menu_factory.rb +16 -0
- data/lib/spree/testing_support/factories/menu_item_factory.rb +10 -0
- data/lib/spree/testing_support/factories/options_factory.rb +15 -0
- data/lib/spree/testing_support/factories/order_factory.rb +11 -2
- data/lib/spree/testing_support/factories/payment_method_factory.rb +21 -4
- data/lib/spree/testing_support/factories/product_factory.rb +17 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +18 -9
- data/lib/spree/testing_support/factories/property_factory.rb +22 -0
- data/lib/spree/testing_support/factories/stock_location_factory.rb +5 -4
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -0
- data/lib/spree/testing_support/factories/store_factory.rb +11 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +3 -1
- data/lib/spree/testing_support/factories/taxon_image_factory.rb +7 -0
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -0
- data/lib/spree/testing_support/factories/user_factory.rb +7 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
- data/lib/spree/testing_support/flatpickr_capybara.rb +58 -35
- data/lib/spree/testing_support/locale_helpers.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +9 -9
- data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
- data/lib/tasks/core.rake +1 -1
- data/spec/fixtures/favicon.ico +0 -0
- data/spec/fixtures/files/icon_256x256.gif +0 -0
- data/spec/fixtures/files/icon_256x256.png +0 -0
- data/spec/fixtures/files/icon_512x512.png +0 -0
- data/spec/fixtures/files/img_256x128.png +0 -0
- data/spree_core.gemspec +21 -21
- metadata +225 -207
- data/app/assets/images/logo/spree_50.png +0 -0
- data/app/assets/images/noimage/large.png +0 -0
- data/app/assets/images/noimage/mini.png +0 -0
- data/app/assets/images/noimage/product.png +0 -0
- data/app/assets/images/noimage/small.png +0 -0
- data/app/assets/javascripts/spree.js +0 -78
- data/app/controllers/spree/errors_controller.rb +0 -11
- data/app/helpers/spree/mail_helper.rb +0 -29
- data/app/mailers/spree/base_mailer.rb +0 -46
- data/app/mailers/spree/order_mailer.rb +0 -26
- data/app/mailers/spree/reimbursement_mailer.rb +0 -12
- data/app/mailers/spree/shipment_mailer.rb +0 -12
- data/app/mailers/spree/test_mailer.rb +0 -8
- data/app/models/spree/validations/db_maximum_length_validator.rb +0 -22
- data/app/views/layouts/spree/base_mailer.html.erb +0 -46
- data/app/views/spree/errors/forbidden.html.erb +0 -0
- data/app/views/spree/errors/unauthorized.html.erb +0 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +0 -24
- data/app/views/spree/order_mailer/cancel_email.text.erb +0 -38
- data/app/views/spree/order_mailer/confirm_email.html.erb +0 -23
- data/app/views/spree/order_mailer/confirm_email.text.erb +0 -39
- data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -23
- data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -38
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -56
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
- data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -12
- data/app/views/spree/shared/_base_mailer_header.html.erb +0 -13
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -456
- data/app/views/spree/shared/_error_messages.html.erb +0 -11
- data/app/views/spree/shared/_mailer_line_item.html.erb +0 -16
- data/app/views/spree/shared/_paths.html.erb +0 -8
- data/app/views/spree/shared/_purchased_items_table.html.erb +0 -69
- data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -13
- data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -27
- data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -13
- data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -13
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -36
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
- data/app/views/spree/test_mailer/test_email.html.erb +0 -40
- data/app/views/spree/test_mailer/test_email.text.erb +0 -4
- data/config/initializers/assets.rb +0 -2
- data/config/initializers/premailer_assets.rb +0 -1
- data/config/initializers/premailer_rails.rb +0 -3
- data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +0 -10
- data/lib/generators/spree/dummy/templates/initializers/bullet.rb +0 -5
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -15
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -16
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -16
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -16
- data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +0 -23
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +0 -13
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +0 -5
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +0 -5
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +0 -11
- data/lib/tasks/email.rake +0 -10
- data/vendor/assets/javascripts/cleave.js +0 -1669
- data/vendor/assets/javascripts/fetch.umd.js +0 -531
- data/vendor/assets/javascripts/jquery.payment.js +0 -652
- data/vendor/assets/javascripts/jsuri.js +0 -458
- data/vendor/assets/javascripts/polyfill.min.js +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d280751e897448ce4593ebe1d5f2fc9cd823e998699864ac8b52d2dfa28b49d6
|
4
|
+
data.tar.gz: 21ed38407942b369d6a7a2360730190a124264bd9b8137e79c49d4058fac16f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 803917626fa68a87c54fd9d88dbb2388e84fefce8873ef3a7a96e7a49e1a1a7a9b327864a7c222fc31006795eaefbf10c12db584e5cd308b19464617b3235b80
|
7
|
+
data.tar.gz: f1ecb88f76d6061727b9bd569f24ae672491507248584106d1be936a2dfb3c78a1a1693b0affb84d0f8e34fe2991346b2884386ac7ac67df838408a81d10bc85
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Spree
|
2
|
+
module CmsPages
|
3
|
+
class Find < ::Spree::BaseFinder
|
4
|
+
ALLOWED_KINDS = %w[standard home feature].freeze
|
5
|
+
|
6
|
+
def initialize(scope:, params:)
|
7
|
+
@scope = scope
|
8
|
+
@title = params.dig(:filter, :title)
|
9
|
+
@kind = params.dig(:filter, :type)
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
pages = by_title(scope)
|
14
|
+
pages = by_kind(pages)
|
15
|
+
|
16
|
+
pages
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :scope, :title, :kind
|
22
|
+
|
23
|
+
def title_matcher
|
24
|
+
Spree::CmsPage.arel_table[:title].matches("%#{title}%")
|
25
|
+
end
|
26
|
+
|
27
|
+
def by_title(pages)
|
28
|
+
return pages if title.blank?
|
29
|
+
|
30
|
+
pages.where(title_matcher)
|
31
|
+
end
|
32
|
+
|
33
|
+
def by_kind(pages)
|
34
|
+
return pages if kind.blank?
|
35
|
+
return pages if ALLOWED_KINDS.exclude?(kind)
|
36
|
+
|
37
|
+
pages.send(kind)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spree
|
2
|
+
module OptionValues
|
3
|
+
class FindAvailable
|
4
|
+
include ProductFilterable
|
5
|
+
|
6
|
+
def initialize(scope: OptionValue.spree_base_scopes, products_scope: Product.spree_base_scopes)
|
7
|
+
@scope = scope
|
8
|
+
@products_scope = products_scope
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute
|
12
|
+
find_available(scope, products_scope)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :scope, :products_scope
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,18 +1,20 @@
|
|
1
1
|
module Spree
|
2
2
|
module Orders
|
3
3
|
class FindComplete
|
4
|
-
attr_reader :user, :number, :token
|
4
|
+
attr_reader :user, :number, :token, :store
|
5
5
|
|
6
|
-
def initialize(user: nil, number: nil, token: nil)
|
6
|
+
def initialize(user: nil, number: nil, token: nil, store: nil)
|
7
7
|
@user = user
|
8
8
|
@number = number
|
9
9
|
@token = token
|
10
|
+
@store = store
|
10
11
|
end
|
11
12
|
|
12
13
|
def execute
|
13
14
|
orders = by_user(scope)
|
14
15
|
orders = by_number(orders)
|
15
16
|
orders = by_token(orders)
|
17
|
+
orders = by_store(orders)
|
16
18
|
|
17
19
|
orders
|
18
20
|
end
|
@@ -35,6 +37,10 @@ module Spree
|
|
35
37
|
token.present?
|
36
38
|
end
|
37
39
|
|
40
|
+
def store?
|
41
|
+
store.present?
|
42
|
+
end
|
43
|
+
|
38
44
|
def by_user(orders)
|
39
45
|
return orders unless user?
|
40
46
|
|
@@ -53,6 +59,12 @@ module Spree
|
|
53
59
|
orders.where(token: token)
|
54
60
|
end
|
55
61
|
|
62
|
+
def by_store(orders)
|
63
|
+
return orders unless store?
|
64
|
+
|
65
|
+
orders.where(store: store)
|
66
|
+
end
|
67
|
+
|
56
68
|
def scope_includes
|
57
69
|
{
|
58
70
|
line_items: [
|
@@ -15,19 +15,7 @@ module Spree
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def incomplete_orders
|
18
|
-
Spree::Order.incomplete.not_canceled
|
19
|
-
end
|
20
|
-
|
21
|
-
def scope_includes
|
22
|
-
{
|
23
|
-
line_items: [
|
24
|
-
variant: [
|
25
|
-
:images,
|
26
|
-
option_values: :option_type,
|
27
|
-
product: :product_properties,
|
28
|
-
]
|
29
|
-
]
|
30
|
-
}
|
18
|
+
Spree::Order.incomplete.not_canceled
|
31
19
|
end
|
32
20
|
end
|
33
21
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spree
|
2
|
+
module ProductProperties
|
3
|
+
class FindAvailable
|
4
|
+
include ProductFilterable
|
5
|
+
|
6
|
+
def initialize(scope: ProductProperty.spree_base_scopes, products_scope: Product.spree_base_scopes)
|
7
|
+
@scope = scope
|
8
|
+
@products_scope = products_scope
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute
|
12
|
+
find_available(scope, products_scope)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :scope, :products_scope
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,13 +1,23 @@
|
|
1
1
|
module Spree
|
2
2
|
module Products
|
3
3
|
class Find
|
4
|
-
def initialize(scope:, params:, current_currency:)
|
4
|
+
def initialize(scope:, params:, current_currency: nil)
|
5
5
|
@scope = scope
|
6
6
|
|
7
|
+
ActiveSupport::Deprecation.warn('`current_currency` param is deprecated and will be removed in Spree 5') if current_currency
|
8
|
+
|
9
|
+
if current_currency.present?
|
10
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
11
|
+
`current_currency` param is deprecated and will be removed in Spree 5.
|
12
|
+
Please pass `:currency` in `params` hash instead.
|
13
|
+
DEPRECATION
|
14
|
+
end
|
15
|
+
|
7
16
|
@ids = String(params.dig(:filter, :ids)).split(',')
|
8
17
|
@skus = String(params.dig(:filter, :skus)).split(',')
|
9
|
-
@
|
10
|
-
@
|
18
|
+
@store = params[:store] || Spree::Store.default
|
19
|
+
@price = map_prices(String(params.dig(:filter, :price)).split(','))
|
20
|
+
@currency = current_currency || params.dig(:filter, :currency) || params[:currency]
|
11
21
|
@taxons = taxon_ids(params.dig(:filter, :taxons))
|
12
22
|
@concat_taxons = taxon_ids(params.dig(:filter, :concat_taxons))
|
13
23
|
@name = params.dig(:filter, :name)
|
@@ -16,6 +26,10 @@ module Spree
|
|
16
26
|
@sort_by = params.dig(:sort_by)
|
17
27
|
@deleted = params.dig(:filter, :show_deleted)
|
18
28
|
@discontinued = params.dig(:filter, :show_discontinued)
|
29
|
+
@properties = params.dig(:filter, :properties)
|
30
|
+
@in_stock = params.dig(:filter, :in_stock)
|
31
|
+
@backorderable = params.dig(:filter, :backorderable)
|
32
|
+
@purchasable = params.dig(:filter, :purchasable)
|
19
33
|
end
|
20
34
|
|
21
35
|
def execute
|
@@ -28,8 +42,12 @@ module Spree
|
|
28
42
|
products = by_name(products)
|
29
43
|
products = by_options(products)
|
30
44
|
products = by_option_value_ids(products)
|
45
|
+
products = by_properties(products)
|
31
46
|
products = include_deleted(products)
|
32
47
|
products = include_discontinued(products)
|
48
|
+
products = show_only_stock(products)
|
49
|
+
products = show_only_backorderable(products)
|
50
|
+
products = show_only_purchasable(products)
|
33
51
|
products = ordered(products)
|
34
52
|
|
35
53
|
products.distinct
|
@@ -37,8 +55,8 @@ module Spree
|
|
37
55
|
|
38
56
|
private
|
39
57
|
|
40
|
-
attr_reader :ids, :skus, :price, :currency, :taxons, :concat_taxons, :name, :options,
|
41
|
-
:
|
58
|
+
attr_reader :ids, :skus, :price, :currency, :taxons, :concat_taxons, :name, :options, :option_value_ids, :scope,
|
59
|
+
:sort_by, :deleted, :discontinued, :properties, :store, :in_stock, :backorderable, :purchasable
|
42
60
|
|
43
61
|
def ids?
|
44
62
|
ids.present?
|
@@ -80,8 +98,8 @@ module Spree
|
|
80
98
|
sort_by.present?
|
81
99
|
end
|
82
100
|
|
83
|
-
def
|
84
|
-
|
101
|
+
def properties?
|
102
|
+
properties.present? && properties.values.reject(&:empty?).present?
|
85
103
|
end
|
86
104
|
|
87
105
|
def by_ids(products)
|
@@ -99,19 +117,13 @@ module Spree
|
|
99
117
|
def by_price(products)
|
100
118
|
return products unless price?
|
101
119
|
|
102
|
-
products.
|
103
|
-
where(
|
104
|
-
spree_prices: {
|
105
|
-
amount: price.min..price.max,
|
106
|
-
currency: currency&.upcase
|
107
|
-
}
|
108
|
-
)
|
120
|
+
products.price_between(price.min, price.max)
|
109
121
|
end
|
110
122
|
|
111
123
|
def by_currency(products)
|
112
124
|
return products unless currency?
|
113
125
|
|
114
|
-
products.
|
126
|
+
products.with_currency(currency)
|
115
127
|
end
|
116
128
|
|
117
129
|
def by_taxons(products)
|
@@ -136,17 +148,14 @@ module Spree
|
|
136
148
|
def by_name(products)
|
137
149
|
return products unless name?
|
138
150
|
|
139
|
-
products.
|
151
|
+
products.like_any([:name], [name])
|
140
152
|
end
|
141
153
|
|
142
154
|
def by_options(products)
|
143
155
|
return products unless options?
|
144
156
|
|
145
|
-
products.
|
146
|
-
|
147
|
-
products.with_option_value(key, value).ids
|
148
|
-
end.flatten.compact.uniq
|
149
|
-
)
|
157
|
+
products_ids = options.map { |key, value| products.with_option_value(key, value).ids }
|
158
|
+
products.where(id: products_ids.reduce(&:intersection))
|
150
159
|
end
|
151
160
|
|
152
161
|
def by_option_value_ids(products)
|
@@ -163,6 +172,27 @@ module Spree
|
|
163
172
|
products.where(id: product_ids)
|
164
173
|
end
|
165
174
|
|
175
|
+
def by_properties(products)
|
176
|
+
return products unless properties?
|
177
|
+
|
178
|
+
product_ids = []
|
179
|
+
index = 0
|
180
|
+
|
181
|
+
properties.to_unsafe_hash.each do |property_filter_param, product_properties_values|
|
182
|
+
next if property_filter_param.blank? || product_properties_values.empty?
|
183
|
+
|
184
|
+
values = product_properties_values.split(',').reject(&:empty?).uniq.map(&:parameterize)
|
185
|
+
|
186
|
+
next if values.empty?
|
187
|
+
|
188
|
+
ids = products.with_property_values(property_filter_param, values).ids
|
189
|
+
product_ids = index == 0 ? ids : product_ids & ids
|
190
|
+
index += 1
|
191
|
+
end
|
192
|
+
|
193
|
+
products.where(id: product_ids)
|
194
|
+
end
|
195
|
+
|
166
196
|
def option_types_count(option_value_ids)
|
167
197
|
Spree::OptionValue.
|
168
198
|
where(id: option_value_ids).
|
@@ -176,12 +206,14 @@ module Spree
|
|
176
206
|
case sort_by
|
177
207
|
when 'default'
|
178
208
|
if taxons?
|
179
|
-
products.
|
180
|
-
select("#{Product.table_name}.*, #{Classification.table_name}.position").
|
181
|
-
order("#{Classification.table_name}.position" => :asc)
|
209
|
+
products.ascend_by_taxons_min_position(taxons)
|
182
210
|
else
|
183
211
|
products
|
184
212
|
end
|
213
|
+
when 'name-a-z'
|
214
|
+
products.order(name: :asc)
|
215
|
+
when 'name-z-a'
|
216
|
+
products.order(name: :desc)
|
185
217
|
when 'newest-first'
|
186
218
|
products.order(available_on: :desc)
|
187
219
|
when 'price-high-to-low'
|
@@ -202,13 +234,37 @@ module Spree
|
|
202
234
|
end
|
203
235
|
|
204
236
|
def include_discontinued(products)
|
205
|
-
discontinued ? products : products.
|
237
|
+
discontinued ? products : products.active(currency)
|
238
|
+
end
|
239
|
+
|
240
|
+
def show_only_stock(products)
|
241
|
+
return products unless in_stock.to_s == 'true'
|
242
|
+
|
243
|
+
products.in_stock
|
244
|
+
end
|
245
|
+
|
246
|
+
def show_only_backorderable(products)
|
247
|
+
return products unless backorderable.to_s == 'true'
|
248
|
+
|
249
|
+
products.backorderable
|
250
|
+
end
|
251
|
+
|
252
|
+
def show_only_purchasable(products)
|
253
|
+
return products unless purchasable.to_s == 'true'
|
254
|
+
|
255
|
+
products.in_stock_or_backorderable
|
256
|
+
end
|
257
|
+
|
258
|
+
def map_prices(prices)
|
259
|
+
prices.map do |price|
|
260
|
+
price == 'Infinity' ? Float::INFINITY : price.to_f
|
261
|
+
end
|
206
262
|
end
|
207
263
|
|
208
264
|
def taxon_ids(taxons_ids)
|
209
265
|
return if taxons_ids.nil? || taxons_ids.to_s.blank?
|
210
266
|
|
211
|
-
taxons =
|
267
|
+
taxons = store.taxons.where(id: taxons_ids.to_s.split(','))
|
212
268
|
taxons.map(&:cached_self_and_descendants_ids).flatten.compact.uniq.map(&:to_s)
|
213
269
|
end
|
214
270
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Spree
|
2
|
+
module Stores
|
3
|
+
class FindCurrent
|
4
|
+
def initialize(scope: nil, url: nil)
|
5
|
+
@scope = scope || Spree::Store
|
6
|
+
@url = url
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute
|
10
|
+
by_url(scope) || scope.default
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
|
15
|
+
attr_reader :scope, :url
|
16
|
+
|
17
|
+
def by_url(scope)
|
18
|
+
return if url.blank?
|
19
|
+
|
20
|
+
scope.by_url(url).first
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -9,6 +9,25 @@ module Spree
|
|
9
9
|
end.sort_by { |c| c.name.parameterize }
|
10
10
|
end
|
11
11
|
|
12
|
+
def all_countries
|
13
|
+
countries = Spree::Country.all
|
14
|
+
|
15
|
+
countries.collect do |country|
|
16
|
+
country.name = Spree.t(country.iso, scope: 'country_names', default: country.name)
|
17
|
+
country
|
18
|
+
end.sort_by { |c| c.name.parameterize }
|
19
|
+
end
|
20
|
+
|
21
|
+
def spree_resource_path(resource)
|
22
|
+
last_word = resource.class.name.split('::', 10).last
|
23
|
+
|
24
|
+
spree_class_name_as_path(last_word)
|
25
|
+
end
|
26
|
+
|
27
|
+
def spree_class_name_as_path(class_name)
|
28
|
+
class_name.underscore.humanize.parameterize(separator: '_')
|
29
|
+
end
|
30
|
+
|
12
31
|
def display_price(product_or_variant)
|
13
32
|
product_or_variant.
|
14
33
|
price_in(current_currency).
|
@@ -36,6 +55,11 @@ module Spree
|
|
36
55
|
end
|
37
56
|
|
38
57
|
def logo(image_path = nil, options = {})
|
58
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
|
59
|
+
`BaseHelper#logo` is deprecated and will be removed in Spree 5.0.
|
60
|
+
Please use `FrontendHelper#logo` instead
|
61
|
+
DEPRECATION
|
62
|
+
|
39
63
|
image_path ||= if current_store.logo.attached? && current_store.logo.variable?
|
40
64
|
main_app.url_for(current_store.logo.variant(resize: '244x104>'))
|
41
65
|
elsif current_store.logo.attached? && current_store.logo.image?
|
@@ -51,6 +75,10 @@ module Spree
|
|
51
75
|
end
|
52
76
|
end
|
53
77
|
|
78
|
+
def spree_favicon_path
|
79
|
+
main_app.url_for(current_store.favicon || 'favicon.ico')
|
80
|
+
end
|
81
|
+
|
54
82
|
def object
|
55
83
|
instance_variable_get('@' + controller_name.singularize)
|
56
84
|
end
|
@@ -95,7 +123,7 @@ module Spree
|
|
95
123
|
description: [object.name, current_store.meta_description].reject(&:blank?).join(', '))
|
96
124
|
else
|
97
125
|
meta.reverse_merge!(keywords: (current_store.meta_keywords || current_store.seo_title),
|
98
|
-
description: (current_store.
|
126
|
+
description: (current_store.homepage(I18n.locale)&.seo_meta_description || current_store.seo_meta_description))
|
99
127
|
end
|
100
128
|
end
|
101
129
|
meta
|
@@ -143,6 +171,34 @@ module Spree
|
|
143
171
|
Spree::Core::Engine.frontend_available?
|
144
172
|
end
|
145
173
|
|
174
|
+
def rails_5?
|
175
|
+
Rails::VERSION::STRING < '6.0'
|
176
|
+
end
|
177
|
+
|
178
|
+
def spree_storefront_resource_url(resource, options = {})
|
179
|
+
if defined?(locale_param) && locale_param.present?
|
180
|
+
options.merge!(locale: locale_param)
|
181
|
+
end
|
182
|
+
|
183
|
+
localize = if options[:locale].present?
|
184
|
+
"/#{options[:locale]}"
|
185
|
+
else
|
186
|
+
''
|
187
|
+
end
|
188
|
+
|
189
|
+
if resource.instance_of?(Spree::Product)
|
190
|
+
"#{current_store.formatted_url + localize}/#{Spree::Config[:storefront_products_path]}/#{resource.slug}"
|
191
|
+
elsif resource.instance_of?(Spree::Taxon)
|
192
|
+
"#{current_store.formatted_url + localize}/#{Spree::Config[:storefront_taxons_path]}/#{resource.permalink}"
|
193
|
+
elsif resource.instance_of?(Spree::Cms::Pages::FeaturePage) || resource.instance_of?(Spree::Cms::Pages::StandardPage)
|
194
|
+
"#{current_store.formatted_url + localize}/#{Spree::Config[:storefront_pages_path]}/#{resource.slug}"
|
195
|
+
elsif localize.blank?
|
196
|
+
current_store.formatted_url
|
197
|
+
else
|
198
|
+
current_store.formatted_url + localize
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
146
202
|
# we should always try to render image of the default variant
|
147
203
|
# same as it's done on PDP
|
148
204
|
def default_image_for_product(product)
|
@@ -170,7 +226,8 @@ module Spree
|
|
170
226
|
end
|
171
227
|
|
172
228
|
def base_cache_key
|
173
|
-
[I18n.locale, current_currency
|
229
|
+
[I18n.locale, current_currency, defined?(try_spree_current_user) && try_spree_current_user.present?,
|
230
|
+
defined?(try_spree_current_user) && try_spree_current_user.try(:has_spree_role?, 'admin')]
|
174
231
|
end
|
175
232
|
|
176
233
|
def maximum_quantity
|
@@ -210,5 +267,9 @@ module Spree
|
|
210
267
|
|
211
268
|
tag('meta', name: 'robots', content: current_store.seo_robots)
|
212
269
|
end
|
270
|
+
|
271
|
+
def taxon_wysiwyg_editor_enabled?
|
272
|
+
Spree::Config[:taxon_wysiwyg_editor_enabled]
|
273
|
+
end
|
213
274
|
end
|
214
275
|
end
|