spree_core 5.2.6 → 5.3.0.rc1

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.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/addresses_helper.rb +1 -23
  3. data/app/helpers/spree/base_helper.rb +25 -77
  4. data/app/helpers/spree/currency_helper.rb +2 -2
  5. data/app/helpers/spree/images_helper.rb +5 -0
  6. data/app/helpers/spree/mail_helper.rb +1 -1
  7. data/app/helpers/spree/products_helper.rb +1 -1
  8. data/app/jobs/spree/events/subscriber_job.rb +58 -0
  9. data/app/jobs/spree/products/refresh_metrics_job.rb +14 -0
  10. data/app/jobs/spree/products/touch_taxons_job.rb +0 -1
  11. data/app/jobs/spree/variants/touch_job.rb +9 -0
  12. data/app/models/concerns/spree/adjustment_source.rb +8 -0
  13. data/app/models/concerns/spree/parameterizable_name.rb +1 -1
  14. data/app/models/concerns/spree/product_scopes.rb +54 -8
  15. data/app/models/concerns/spree/publishable.rb +253 -0
  16. data/app/models/concerns/spree/unique_name.rb +1 -1
  17. data/app/models/concerns/spree/user_methods.rb +21 -1
  18. data/app/models/spree/ability.rb +3 -3
  19. data/app/models/spree/address.rb +0 -3
  20. data/app/models/spree/adjustable/promotion_accumulator.rb +1 -1
  21. data/app/models/spree/adjustment.rb +32 -6
  22. data/app/models/spree/asset.rb +6 -3
  23. data/app/models/spree/base.rb +3 -1
  24. data/app/models/spree/classification.rb +2 -2
  25. data/app/models/spree/credit_card.rb +0 -3
  26. data/app/models/spree/current.rb +24 -3
  27. data/app/models/spree/custom_domain.rb +1 -1
  28. data/app/models/spree/customer_group.rb +94 -0
  29. data/app/models/spree/customer_group_user.rb +16 -0
  30. data/app/models/spree/customer_return.rb +2 -3
  31. data/app/models/spree/digital.rb +2 -4
  32. data/app/models/spree/digital_link.rb +2 -3
  33. data/app/models/spree/event.rb +104 -0
  34. data/app/models/spree/export.rb +7 -1
  35. data/app/models/spree/gift_card.rb +13 -1
  36. data/app/models/spree/gift_card_batch.rb +3 -1
  37. data/app/models/spree/image.rb +20 -5
  38. data/app/models/spree/import.rb +17 -12
  39. data/app/models/spree/import_row.rb +13 -26
  40. data/app/models/spree/inventory_unit.rb +0 -3
  41. data/app/models/spree/invitation.rb +12 -6
  42. data/app/models/spree/line_item.rb +57 -4
  43. data/app/models/spree/newsletter_subscriber.rb +2 -0
  44. data/app/models/spree/option_type.rb +2 -5
  45. data/app/models/spree/option_value.rb +1 -4
  46. data/app/models/spree/order/checkout.rb +7 -2
  47. data/app/models/spree/order/emails.rb +3 -11
  48. data/app/models/spree/order/store_credit.rb +5 -1
  49. data/app/models/spree/order.rb +80 -31
  50. data/app/models/spree/order_updater.rb +28 -9
  51. data/app/models/spree/payment/custom_events.rb +37 -0
  52. data/app/models/spree/payment.rb +13 -4
  53. data/app/models/spree/payment_capture_event.rb +0 -4
  54. data/app/models/spree/payment_method.rb +1 -1
  55. data/app/models/spree/permission_sets/default_customer.rb +3 -3
  56. data/app/models/spree/policy.rb +1 -8
  57. data/app/models/spree/post.rb +2 -7
  58. data/app/models/spree/post_category.rb +2 -0
  59. data/app/models/spree/price.rb +8 -6
  60. data/app/models/spree/price_list.rb +263 -0
  61. data/app/models/spree/price_rule.rb +26 -0
  62. data/app/models/spree/price_rules/customer_group_rule.rb +21 -0
  63. data/app/models/spree/price_rules/user_rule.rb +19 -0
  64. data/app/models/spree/price_rules/volume_rule.rb +21 -0
  65. data/app/models/spree/price_rules/zone_rule.rb +19 -0
  66. data/app/models/spree/product.rb +117 -76
  67. data/app/models/spree/product_property.rb +2 -2
  68. data/app/models/spree/promotion/rules/customer_group.rb +22 -0
  69. data/app/models/spree/promotion/rules/user.rb +2 -2
  70. data/app/models/spree/promotion.rb +3 -4
  71. data/app/models/spree/promotion_handler/coupon.rb +3 -3
  72. data/app/models/spree/property.rb +3 -6
  73. data/app/models/spree/prototype.rb +0 -3
  74. data/app/models/spree/refund.rb +2 -3
  75. data/app/models/spree/reimbursement.rb +5 -3
  76. data/app/models/spree/report.rb +7 -1
  77. data/app/models/spree/reports/products_performance.rb +1 -1
  78. data/app/models/spree/reports/sales_total.rb +1 -1
  79. data/app/models/spree/return_authorization.rb +7 -3
  80. data/app/models/spree/return_item.rb +15 -4
  81. data/app/models/spree/shipment/custom_events.rb +47 -0
  82. data/app/models/spree/shipment.rb +12 -5
  83. data/app/models/spree/shipping_category.rb +0 -3
  84. data/app/models/spree/shipping_method.rb +0 -3
  85. data/app/models/spree/stock/quantifier.rb +1 -1
  86. data/app/models/spree/stock_item.rb +2 -0
  87. data/app/models/spree/stock_location.rb +0 -3
  88. data/app/models/spree/stock_movement/custom_events.rb +44 -0
  89. data/app/models/spree/stock_movement.rb +3 -0
  90. data/app/models/spree/stock_transfer.rb +2 -3
  91. data/app/models/spree/store.rb +64 -92
  92. data/app/models/spree/store_credit.rb +3 -4
  93. data/app/models/spree/store_product.rb +14 -0
  94. data/app/models/spree/subscriber.rb +186 -0
  95. data/app/models/spree/tax_category.rb +0 -4
  96. data/app/models/spree/tax_rate.rb +0 -3
  97. data/app/models/spree/taxon.rb +3 -36
  98. data/app/models/spree/taxonomy.rb +0 -3
  99. data/app/models/spree/variant.rb +114 -21
  100. data/app/models/spree/webhook_delivery.rb +60 -0
  101. data/app/models/spree/webhook_endpoint.rb +53 -0
  102. data/app/models/spree/wished_item.rb +2 -4
  103. data/app/models/spree/wishlist.rb +2 -3
  104. data/app/models/spree/zone.rb +0 -9
  105. data/app/paginators/spree/shared/paginate.rb +4 -0
  106. data/app/serializers/spree/events/asset_serializer.rb +22 -0
  107. data/app/serializers/spree/events/base_serializer.rb +61 -0
  108. data/app/serializers/spree/events/customer_return_serializer.rb +20 -0
  109. data/app/serializers/spree/events/digital_link_serializer.rb +20 -0
  110. data/app/serializers/spree/events/digital_serializer.rb +18 -0
  111. data/app/serializers/spree/events/export_serializer.rb +22 -0
  112. data/app/serializers/spree/events/gift_card_batch_serializer.rb +24 -0
  113. data/app/serializers/spree/events/gift_card_serializer.rb +29 -0
  114. data/app/serializers/spree/events/image_serializer.rb +9 -0
  115. data/app/serializers/spree/events/import_row_serializer.rb +23 -0
  116. data/app/serializers/spree/events/import_serializer.rb +24 -0
  117. data/app/serializers/spree/events/invitation_serializer.rb +28 -0
  118. data/app/serializers/spree/events/line_item_serializer.rb +31 -0
  119. data/app/serializers/spree/events/newsletter_subscriber_serializer.rb +21 -0
  120. data/app/serializers/spree/events/order_serializer.rb +39 -0
  121. data/app/serializers/spree/events/payment_serializer.rb +24 -0
  122. data/app/serializers/spree/events/post_category_serializer.rb +20 -0
  123. data/app/serializers/spree/events/post_serializer.rb +26 -0
  124. data/app/serializers/spree/events/price_serializer.rb +22 -0
  125. data/app/serializers/spree/events/product_serializer.rb +24 -0
  126. data/app/serializers/spree/events/promotion_serializer.rb +32 -0
  127. data/app/serializers/spree/events/refund_serializer.rb +23 -0
  128. data/app/serializers/spree/events/reimbursement_serializer.rb +22 -0
  129. data/app/serializers/spree/events/report_serializer.rb +23 -0
  130. data/app/serializers/spree/events/return_authorization_serializer.rb +22 -0
  131. data/app/serializers/spree/events/return_item_serializer.rb +27 -0
  132. data/app/serializers/spree/events/shipment_serializer.rb +24 -0
  133. data/app/serializers/spree/events/stock_item_serializer.rb +22 -0
  134. data/app/serializers/spree/events/stock_movement_serializer.rb +22 -0
  135. data/app/serializers/spree/events/stock_transfer_serializer.rb +22 -0
  136. data/app/serializers/spree/events/store_credit_serializer.rb +30 -0
  137. data/app/serializers/spree/events/user_serializer.rb +18 -0
  138. data/app/serializers/spree/events/variant_serializer.rb +34 -0
  139. data/app/serializers/spree/events/wished_item_serializer.rb +20 -0
  140. data/app/serializers/spree/events/wishlist_serializer.rb +22 -0
  141. data/app/services/spree/addresses/update.rb +1 -1
  142. data/app/services/spree/cart/add_item.rb +1 -1
  143. data/app/services/spree/coupon_codes/coupon_codes_handler.rb +2 -1
  144. data/app/services/spree/data_feeds/google/required_attributes.rb +4 -4
  145. data/app/services/spree/newsletter/verify.rb +5 -0
  146. data/app/services/spree/products/auto_match_taxons.rb +1 -1
  147. data/app/services/spree/seeds/all.rb +1 -1
  148. data/app/services/spree/taxons/add_products.rb +8 -4
  149. data/app/services/spree/taxons/regenerate_products.rb +8 -0
  150. data/app/services/spree/taxons/remove_products.rb +12 -7
  151. data/app/subscribers/spree/event_log_subscriber.rb +64 -0
  152. data/app/subscribers/spree/export_subscriber.rb +26 -0
  153. data/app/subscribers/spree/invitation_email_subscriber.rb +40 -0
  154. data/app/subscribers/spree/product_metrics_subscriber.rb +29 -0
  155. data/app/subscribers/spree/report_subscriber.rb +26 -0
  156. data/config/locales/en.yml +126 -0
  157. data/db/migrate/20251110120000_create_spree_price_lists.rb +22 -0
  158. data/db/migrate/20251110120001_create_spree_price_rules.rb +13 -0
  159. data/db/migrate/20251110120002_add_price_list_id_to_spree_prices.rb +6 -0
  160. data/db/migrate/20251110120003_add_price_list_id_to_spree_line_items.rb +5 -0
  161. data/db/migrate/20251201172118_fix_indexes_on_friendly_id_slugs.rb +8 -0
  162. data/db/migrate/20251214000001_create_spree_webhook_endpoints.rb +19 -0
  163. data/db/migrate/20251214000002_create_spree_webhook_deliveries.rb +23 -0
  164. data/db/migrate/20251222000000_add_performance_indexes_to_spree_adjustments.rb +25 -0
  165. data/db/migrate/20260112000000_fix_spree_prices_unique_indexes.rb +33 -0
  166. data/db/migrate/20260115120000_create_spree_customer_groups.rb +14 -0
  167. data/db/migrate/20260115120001_create_spree_customer_group_users.rb +14 -0
  168. data/db/migrate/20260117140831_remove_not_null_constraint_from_policy_name.rb +5 -0
  169. data/db/migrate/20260118120000_add_statistics_to_store_products.rb +11 -0
  170. data/db/migrate/20260119120000_add_counter_caches_to_spree_products.rb +9 -0
  171. data/db/migrate/20260119170000_add_counter_caches_to_spree_taxons.rb +9 -0
  172. data/db/migrate/20260120120000_add_image_count_to_spree_variants.rb +9 -0
  173. data/lib/generators/spree/dummy/dummy_generator.rb +14 -2
  174. data/lib/spree/core/configuration.rb +1 -0
  175. data/lib/spree/core/controller_helpers/auth.rb +0 -15
  176. data/lib/spree/core/controller_helpers/currency.rb +13 -9
  177. data/lib/spree/core/controller_helpers/search.rb +1 -1
  178. data/lib/spree/core/controller_helpers/store.rb +5 -1
  179. data/lib/spree/core/engine.rb +61 -78
  180. data/lib/spree/core/importer/order.rb +1 -1
  181. data/lib/spree/core/importer/product.rb +1 -1
  182. data/lib/spree/core/preferences/preferable.rb +14 -1
  183. data/lib/spree/core/pricing/context.rb +63 -0
  184. data/lib/spree/core/pricing/resolver.rb +129 -0
  185. data/lib/spree/core/search/base.rb +1 -1
  186. data/lib/spree/core/token_generator.rb +1 -1
  187. data/lib/spree/core/version.rb +1 -1
  188. data/lib/spree/core.rb +42 -47
  189. data/lib/spree/events/adapters/active_support_notifications.rb +112 -0
  190. data/lib/spree/events/adapters/base.rb +193 -0
  191. data/lib/spree/events/registry.rb +99 -0
  192. data/lib/spree/events.rb +240 -0
  193. data/lib/spree/permitted_attributes.rb +13 -2
  194. data/lib/spree/testing_support/common_rake.rb +68 -35
  195. data/lib/spree/testing_support/factories/customer_group_factory.rb +6 -0
  196. data/lib/spree/testing_support/factories/customer_group_user_factory.rb +6 -0
  197. data/lib/spree/testing_support/factories/price_factory.rb +4 -0
  198. data/lib/spree/testing_support/factories/price_list_factory.rb +34 -0
  199. data/lib/spree/testing_support/factories/price_rule_factory.rb +49 -0
  200. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +12 -0
  201. data/lib/spree/testing_support/factories/stock_item_factory.rb +6 -4
  202. data/lib/spree/testing_support/factories/store_product_factory.rb +6 -0
  203. data/lib/spree/testing_support/factories/taxon_factory.rb +0 -1
  204. data/lib/spree/testing_support/factories/webhook_delivery_factory.rb +48 -0
  205. data/lib/spree/testing_support/factories/webhook_endpoint_factory.rb +22 -0
  206. data/lib/spree/testing_support/lifecycle_events.rb +38 -0
  207. data/lib/spree/testing_support/store.rb +4 -2
  208. data/lib/spree/webhooks.rb +22 -0
  209. data/lib/tasks/products.rake +40 -0
  210. data/lib/tasks/taxons.rake +19 -0
  211. data/lib/tasks/variants.rake +18 -0
  212. metadata +112 -114
  213. data/app/jobs/spree/themes/duplicate_components_job.rb +0 -59
  214. data/app/jobs/spree/themes/screenshot_job.rb +0 -81
  215. data/app/models/concerns/spree/has_page_links.rb +0 -53
  216. data/app/models/spree/page.rb +0 -188
  217. data/app/models/spree/page_block.rb +0 -73
  218. data/app/models/spree/page_blocks/buttons.rb +0 -29
  219. data/app/models/spree/page_blocks/heading.rb +0 -18
  220. data/app/models/spree/page_blocks/image.rb +0 -20
  221. data/app/models/spree/page_blocks/link.rb +0 -21
  222. data/app/models/spree/page_blocks/mega_nav.rb +0 -33
  223. data/app/models/spree/page_blocks/mega_nav_with_subcategories.rb +0 -32
  224. data/app/models/spree/page_blocks/metafields.rb +0 -18
  225. data/app/models/spree/page_blocks/nav.rb +0 -15
  226. data/app/models/spree/page_blocks/newsletter_form.rb +0 -18
  227. data/app/models/spree/page_blocks/products/brand.rb +0 -15
  228. data/app/models/spree/page_blocks/products/buy_buttons.rb +0 -24
  229. data/app/models/spree/page_blocks/products/description.rb +0 -18
  230. data/app/models/spree/page_blocks/products/price.rb +0 -18
  231. data/app/models/spree/page_blocks/products/quantity_selector.rb +0 -20
  232. data/app/models/spree/page_blocks/products/share.rb +0 -8
  233. data/app/models/spree/page_blocks/products/title.rb +0 -19
  234. data/app/models/spree/page_blocks/products/variant_picker.rb +0 -13
  235. data/app/models/spree/page_blocks/subheading.rb +0 -17
  236. data/app/models/spree/page_blocks/text.rb +0 -16
  237. data/app/models/spree/page_link.rb +0 -60
  238. data/app/models/spree/page_section.rb +0 -222
  239. data/app/models/spree/page_sections/announcement_bar.rb +0 -28
  240. data/app/models/spree/page_sections/breadcrumbs.rb +0 -12
  241. data/app/models/spree/page_sections/collection_banner.rb +0 -18
  242. data/app/models/spree/page_sections/custom_code.rb +0 -11
  243. data/app/models/spree/page_sections/featured_posts.rb +0 -45
  244. data/app/models/spree/page_sections/featured_product.rb +0 -50
  245. data/app/models/spree/page_sections/featured_taxon.rb +0 -90
  246. data/app/models/spree/page_sections/featured_taxons.rb +0 -45
  247. data/app/models/spree/page_sections/footer.rb +0 -101
  248. data/app/models/spree/page_sections/header.rb +0 -62
  249. data/app/models/spree/page_sections/image_banner.rb +0 -55
  250. data/app/models/spree/page_sections/image_with_text.rb +0 -65
  251. data/app/models/spree/page_sections/main_password_footer.rb +0 -18
  252. data/app/models/spree/page_sections/main_password_header.rb +0 -20
  253. data/app/models/spree/page_sections/newsletter.rb +0 -54
  254. data/app/models/spree/page_sections/page_title.rb +0 -19
  255. data/app/models/spree/page_sections/post_details.rb +0 -19
  256. data/app/models/spree/page_sections/post_grid.rb +0 -19
  257. data/app/models/spree/page_sections/product_details.rb +0 -53
  258. data/app/models/spree/page_sections/product_grid.rb +0 -13
  259. data/app/models/spree/page_sections/related_products.rb +0 -58
  260. data/app/models/spree/page_sections/rich_text.rb +0 -31
  261. data/app/models/spree/page_sections/taxon_banner.rb +0 -18
  262. data/app/models/spree/page_sections/taxon_grid.rb +0 -17
  263. data/app/models/spree/page_sections/video.rb +0 -107
  264. data/app/models/spree/pages/account.rb +0 -19
  265. data/app/models/spree/pages/cart.rb +0 -19
  266. data/app/models/spree/pages/checkout.rb +0 -15
  267. data/app/models/spree/pages/custom.rb +0 -38
  268. data/app/models/spree/pages/homepage.rb +0 -72
  269. data/app/models/spree/pages/login.rb +0 -19
  270. data/app/models/spree/pages/password.rb +0 -59
  271. data/app/models/spree/pages/post.rb +0 -27
  272. data/app/models/spree/pages/post_list.rb +0 -36
  273. data/app/models/spree/pages/product_details.rb +0 -30
  274. data/app/models/spree/pages/search_results.rb +0 -43
  275. data/app/models/spree/pages/shop_all.rb +0 -40
  276. data/app/models/spree/pages/taxon.rb +0 -29
  277. data/app/models/spree/pages/taxon_list.rb +0 -41
  278. data/app/models/spree/pages/wishlist.rb +0 -15
  279. data/app/models/spree/theme.rb +0 -233
  280. data/app/models/spree/themes/default.rb +0 -97
  281. data/app/services/spree/taxons/touch_featured_sections.rb +0 -21
  282. data/db/migrate/20250120094216_create_page_builder_models.rb +0 -78
  283. data/db/migrate/20250305121352_remove_page_builder_indices.rb +0 -11
  284. data/db/migrate/20250825175217_add_missing_page_builder_indexes.rb +0 -7
  285. data/db/migrate/20250913130044_add_page_links_counter_cache_to_spree_stores.rb +0 -10
  286. data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
  287. data/lib/generators/spree/install/install_generator.rb +0 -219
  288. data/lib/generators/spree/install/templates/config/initializers/spree.rb +0 -126
  289. data/lib/spree/core/webhooks.rb +0 -21
  290. data/lib/spree/testing_support/factories/page_block_factory.rb +0 -22
  291. data/lib/spree/testing_support/factories/page_factory.rb +0 -33
  292. data/lib/spree/testing_support/factories/page_link_factory.rb +0 -7
  293. data/lib/spree/testing_support/factories/page_section_factory.rb +0 -27
  294. data/lib/spree/testing_support/factories/theme_factory.rb +0 -14
@@ -1,90 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class FeaturedTaxon < Spree::PageSection
4
- scope :by_taxon_id, lambda { |taxon_ids|
5
- queries = [*taxon_ids].map do |taxon_id|
6
- where("#{Spree::PageSections::FeaturedTaxon.table_name}.preferences LIKE ?", "%taxon_id: '#{taxon_id}'%")
7
- end
8
-
9
- queries.reduce(:or)
10
- }
11
-
12
- before_validation :make_heading_size_valid
13
- before_validation :make_alignment_valid
14
- before_validation :make_taxon_id_valid
15
-
16
- preference :heading, :string, default: Spree.t('page_sections.featured_taxon.heading_default')
17
- preference :heading_size, :string, default: 'large'
18
- preference :heading_alignment, :string, default: 'left'
19
- preference :description_alignment, :string, default: 'left'
20
- preference :use_description_from_admin, :boolean, default: true
21
- preference :show_taxon_image, :boolean, default: true
22
- preference :show_more_button, :boolean, default: true
23
- preference :taxon_id, :string, default: ''
24
- preference :max_products_to_show, :integer, default: 20
25
- preference :button_style, :string, default: 'primary'
26
- preference :button_text_color, :string, default: nil
27
- preference :button_background_color, :string, default: nil
28
- preference :button_text, :string, default: Spree.t('page_sections.featured_taxon.button_text_default')
29
-
30
- def icon_name
31
- 'tags'
32
- end
33
-
34
- def lazy?
35
- !Rails.env.test?
36
- end
37
-
38
- def taxon
39
- @taxon ||= store.taxons.find_by(id: preferred_taxon_id) if preferred_taxon_id.present?
40
- end
41
-
42
- def description_to_use
43
- @description_to_use ||= preferred_use_description_from_admin && description.blank? ? taxon&.description : description
44
- end
45
-
46
- def display_name
47
- @display_name ||= preferred_heading.present? ? "#{preferred_heading} - #{name}" : name
48
- end
49
-
50
- def products(currency)
51
- Spree::Deprecation.warn(
52
- 'FeaturedTaxon#products is deprecated and will be removed in Spree 6.0. ' \
53
- 'Please use taxon_products(featured_taxon.taxon) helper method in views instead'
54
- )
55
-
56
- @products ||= begin
57
- finder_params = {
58
- store: store,
59
- filter: { taxons: preferred_taxon_id },
60
- currency: currency,
61
- sort_by: 'default'
62
- }
63
-
64
- Spree.products_finder.new(scope: store.products, params: finder_params).execute.limit(preferred_max_products_to_show)
65
- end
66
- end
67
-
68
- private
69
-
70
- def make_taxon_id_valid
71
- self.preferred_taxon_id = preferred_taxon_id.presence || store.taxons.where(depth: 1).first&.id
72
- end
73
-
74
- def set_heading
75
- return unless collection_id_changed?
76
-
77
- self.heading = collection&.title
78
- end
79
-
80
- def make_alignment_valid
81
- self.preferred_heading_alignment = 'left' unless %w[left center right].include?(preferred_heading_alignment)
82
- self.preferred_description_alignment = 'left' unless %w[left center right].include?(preferred_description_alignment)
83
- end
84
-
85
- def make_heading_size_valid
86
- self.preferred_heading_size = 'small' unless %w[small medium large].include?(preferred_heading_size)
87
- end
88
- end
89
- end
90
- end
@@ -1,45 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class FeaturedTaxons < Spree::PageSection
4
- before_validation :make_heading_size_valid
5
- before_validation :make_alignment_valid
6
-
7
- preference :heading, :string, default: Spree.t('page_sections.featured_taxons.heading_default')
8
- preference :heading_size, :string, default: 'large'
9
- preference :heading_alignment, :string, default: 'left'
10
-
11
- def icon_name
12
- 'layout-grid'
13
- end
14
-
15
- def links_available?
16
- true
17
- end
18
-
19
- def allowed_linkable_types
20
- [
21
- [Spree.t(:taxon), 'Spree::Taxon']
22
- ]
23
- end
24
-
25
- def default_linkable_type
26
- default_linkable_resource.class.to_s
27
- end
28
-
29
- def default_linkable_resource
30
- @default_linkable_resource ||= Spree::Taxon.where(parent: store.taxonomies.first.root).first ||
31
- store.theme_pages.find_by(type: 'Spree::Pages::Homepage')
32
- end
33
-
34
- private
35
-
36
- def make_heading_size_valid
37
- self.preferred_heading_size = 'small' unless %w[small medium large].include?(preferred_heading_size)
38
- end
39
-
40
- def make_alignment_valid
41
- self.preferred_heading_alignment = 'left' unless %w[left center right].include?(preferred_heading_alignment)
42
- end
43
- end
44
- end
45
- end
@@ -1,101 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class Footer < Spree::PageSection
4
- alias logo asset
5
-
6
- BACKGROUND_COLOR_DEFAULT = '#F5F5F4'
7
- TOP_PADDING_DEFAULT = 32
8
- BOTTOM_PADDING_DEFAULT = 32
9
- TOP_BORDER_WIDTH_DEFAULT = 0
10
-
11
- preference :copyright_text_color, :string, default: '#FFFFFF'
12
- preference :copyright_background_color, :string, default: '#000000'
13
-
14
- def self.role
15
- 'footer'
16
- end
17
-
18
- def icon_name
19
- 'layout-bottombar'
20
- end
21
-
22
- def can_sort_blocks?
23
- true
24
- end
25
-
26
- def blocks_available?
27
- true
28
- end
29
-
30
- def available_blocks_to_add
31
- [Spree::PageBlocks::Nav]
32
- end
33
-
34
- def default_blocks
35
- shop_default_links = [
36
- Spree::PageLink.new(
37
- linkable: pages.find_by(type: 'Spree::Pages::ShopAll')
38
- )
39
- ]
40
-
41
- collections_taxonomy = store.taxonomies.find_by(name: Spree.t(:taxonomy_collections_name))
42
-
43
- if collections_taxonomy.present?
44
- on_sale_collection = collections_taxonomy.taxons.automatic.find_by(name: Spree.t('automatic_taxon_names.on_sale'))
45
- new_arrivals_collection = collections_taxonomy.taxons.automatic.find_by(name: Spree.t('automatic_taxon_names.new_arrivals'))
46
-
47
- shop_default_links << Spree::PageLink.new(linkable: on_sale_collection) if on_sale_collection.present?
48
- shop_default_links << Spree::PageLink.new(linkable: new_arrivals_collection) if new_arrivals_collection.present?
49
- end
50
-
51
- default_info_links = []
52
-
53
- if store.policies.find_by(name: Spree.t('terms_of_service')).present?
54
- default_info_links << Spree::PageLink.new(
55
- label: Spree.t('terms_of_service'),
56
- linkable: store.policies.find_by(name: Spree.t('terms_of_service'))
57
- )
58
- end
59
-
60
- if store.policies.find_by(name: Spree.t('privacy_policy')).present?
61
- default_info_links << Spree::PageLink.new(
62
- label: Spree.t('privacy_policy'),
63
- linkable: store.policies.find_by(name: Spree.t('privacy_policy'))
64
- )
65
- end
66
-
67
- [
68
- Spree::PageBlocks::Nav.new(
69
- preferred_label: 'Shop',
70
- default_links: shop_default_links
71
- ),
72
- Spree::PageBlocks::Nav.new(
73
- preferred_label: Spree.t('account'),
74
- default_links: [
75
- Spree::PageLink.new(
76
- label: Spree.t('my_account'),
77
- linkable: pages.find_by(type: 'Spree::Pages::Account')
78
- ),
79
- Spree::PageLink.new(
80
- label: 'Favorites',
81
- linkable: pages.find_by(type: 'Spree::Pages::Wishlist')
82
- )
83
- ]
84
- ),
85
- Spree::PageBlocks::Nav.new(
86
- preferred_label: 'Company',
87
- default_links: []
88
- ),
89
- Spree::PageBlocks::Nav.new(
90
- preferred_label: 'Info',
91
- default_links: default_info_links
92
- )
93
- ]
94
- end
95
-
96
- def pages
97
- @pages ||= theme.pages
98
- end
99
- end
100
- end
101
- end
@@ -1,62 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class Header < Spree::PageSection
4
- alias logo asset
5
-
6
- TOP_PADDING_DEFAULT = 15
7
- BOTTOM_PADDING_DEFAULT = 15
8
- TOP_BORDER_WIDTH_DEFAULT = 0
9
-
10
- preference :layout, :string, default: 'logo-centered'
11
- preference :desktop_logo_height, :integer, default: 0
12
-
13
- def self.role
14
- 'header'
15
- end
16
-
17
- def can_sort_blocks?
18
- true
19
- end
20
-
21
- def blocks_available?
22
- true
23
- end
24
-
25
- def available_blocks_to_add
26
- [Spree::PageBlocks::MegaNavWithSubcategories, Spree::PageBlocks::MegaNav, Spree::PageBlocks::Link]
27
- end
28
-
29
- def icon_name
30
- 'layout-navbar'
31
- end
32
-
33
- def links_available?
34
- true
35
- end
36
-
37
- def default_links
38
- links = [
39
- Spree::PageLink.new(linkable: pages.find_by(type: 'Spree::Pages::ShopAll'))
40
- ]
41
-
42
- collections_taxonomy = store.taxonomies.find_by(name: Spree.t(:taxonomy_collections_name))
43
-
44
- if collections_taxonomy.present?
45
- on_sale_collection = collections_taxonomy.taxons.automatic.find_by(name: Spree.t('automatic_taxon_names.on_sale'))
46
- new_arrivals_collection = collections_taxonomy.taxons.automatic.find_by(name: Spree.t('automatic_taxon_names.new_arrivals'))
47
-
48
- links << Spree::PageLink.new(linkable: on_sale_collection) if on_sale_collection.present?
49
- links << Spree::PageLink.new(linkable: new_arrivals_collection) if new_arrivals_collection.present?
50
- end
51
-
52
- links << Spree::PageLink.new(linkable: pages.find_by(type: 'Spree::Pages::PostList'))
53
-
54
- links
55
- end
56
-
57
- def pages
58
- @pages ||= theme.pages
59
- end
60
- end
61
- end
62
- end
@@ -1,55 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class ImageBanner < Spree::PageSection
4
- include Spree::HasImageAltText
5
-
6
- TOP_PADDING_DEFAULT = 0
7
- BOTTOM_PADDING_DEFAULT = 0
8
-
9
- preference :overlay_transparency, :integer, default: 40
10
- preference :height, :integer, default: 384
11
- preference :vertical_alignment, :string, default: :middle
12
- preference :image_alt, :string
13
-
14
- def default_blocks
15
- [
16
- Spree::PageBlocks::Heading.new(
17
- text: Spree.t('page_sections.image_banner.heading_default'),
18
- preferred_text_alignment: 'center',
19
- preferred_container_alignment: 'center',
20
- preferred_width_desktop: 50
21
- ),
22
- Spree::PageBlocks::Text.new(
23
- text: Spree.t('page_sections.image_banner.text_default'),
24
- preferred_text_alignment: 'center',
25
- preferred_container_alignment: 'center',
26
- preferred_width_desktop: 50
27
- ),
28
- Spree::PageBlocks::Buttons.new
29
- ]
30
- end
31
-
32
- def available_blocks_to_add
33
- [
34
- Spree::PageBlocks::Buttons,
35
- Spree::PageBlocks::Heading,
36
- Spree::PageBlocks::Text
37
- ]
38
- end
39
-
40
- def blocks_available?
41
- true
42
- end
43
-
44
- def can_sort_blocks?
45
- true
46
- end
47
-
48
- def icon_name
49
- 'slideshow'
50
- end
51
-
52
-
53
- end
54
- end
55
- end
@@ -1,65 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class ImageWithText < Spree::PageSection
4
- include Spree::HasImageAltText
5
-
6
- TOP_PADDING_DEFAULT = 16
7
- BOTTOM_PADDING_DEFAULT = 16
8
-
9
- preference :desktop_image_alignment, :string, default: 'right'
10
- preference :vertical_alignment, :string, default: :middle
11
- preference :image_alt, :string
12
-
13
- has_one :link, ->(ps) { ps.links }, class_name: 'Spree::PageLink', as: :parent, dependent: :destroy, inverse_of: :parent
14
- accepts_nested_attributes_for :link
15
-
16
- def default_blocks
17
- @default_blocks.presence || [
18
- Spree::PageBlocks::Heading.new(
19
- text: Spree.t('page_sections.image_with_text.heading_default'),
20
- preferred_text_alignment: 'left',
21
- preferred_bottom_padding: 8,
22
- preferred_top_padding: 24
23
- ),
24
- Spree::PageBlocks::Text.new(
25
- text: Spree.t('page_sections.image_with_text.text_default', store_name: store.name),
26
- preferred_text_alignment: 'left',
27
- preferred_bottom_padding: 16
28
- ),
29
- Spree::PageBlocks::Buttons.new(preferred_text_alignment: 'left')
30
- ]
31
- end
32
-
33
- def available_blocks_to_add
34
- [
35
- Spree::PageBlocks::Buttons,
36
- Spree::PageBlocks::Heading,
37
- Spree::PageBlocks::Text
38
- ]
39
- end
40
-
41
- def default_links
42
- @default_links.presence || [
43
- Spree::PageLink.new(
44
- label: Spree.t(:shop_all),
45
- linkable: theme.pages.find_by(type: 'Spree::Pages::ShopAll')
46
- )
47
- ]
48
- end
49
-
50
- def blocks_available?
51
- true
52
- end
53
-
54
- def can_sort_blocks?
55
- true
56
- end
57
-
58
- def icon_name
59
- 'photo'
60
- end
61
-
62
-
63
- end
64
- end
65
- end
@@ -1,18 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class MainPasswordFooter < Spree::PageSection
4
- alias logo asset
5
-
6
- TOP_PADDING_DEFAULT = 32
7
- BOTTOM_PADDING_DEFAULT = 32
8
-
9
- def self.role
10
- 'footer'
11
- end
12
-
13
- def icon_name
14
- 'layout-bottombar'
15
- end
16
- end
17
- end
18
- end
@@ -1,20 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class MainPasswordHeader < Spree::PageSection
4
- alias logo asset
5
-
6
- TOP_PADDING_DEFAULT = 15
7
- BOTTOM_PADDING_DEFAULT = 15
8
-
9
- preference :desktop_logo_height, :integer, default: 0
10
-
11
- def self.role
12
- 'header'
13
- end
14
-
15
- def icon_name
16
- 'layout-navbar'
17
- end
18
- end
19
- end
20
- end
@@ -1,54 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class Newsletter < Spree::PageSection
4
- include Spree::HasImageAltText
5
-
6
- preference :overlay_transparency, :integer, default: 40
7
- preference :image_alt, :string
8
-
9
- def default_blocks
10
- @default_blocks.presence || [
11
- Spree::PageBlocks::Heading.new(
12
- text: Spree.t('page_sections.newsletter.heading_default'),
13
- preferred_width_desktop: 50, # in %
14
- preferred_text_alignment: 'center',
15
- preferred_container_alignment: 'center',
16
- preferred_bottom_padding: 8
17
- ),
18
- Spree::PageBlocks::Text.new(
19
- text: Spree.t('page_sections.newsletter.text_default'),
20
- preferred_text_alignment: 'center',
21
- preferred_bottom_padding: 32,
22
- preferred_width_desktop: 50,
23
- preferred_container_alignment: 'center'
24
- ),
25
- Spree::PageBlocks::NewsletterForm.new
26
- ]
27
- end
28
-
29
- def self.role
30
- 'footer'
31
- end
32
-
33
- def lazy?
34
- !Rails.env.test?
35
- end
36
-
37
- def blocks_available?
38
- true
39
- end
40
-
41
- def available_blocks_to_add
42
- [Spree::PageBlocks::Image, Spree::PageBlocks::Heading, Spree::PageBlocks::Text, Spree::PageBlocks::NewsletterForm]
43
- end
44
-
45
- def can_sort_blocks?
46
- true
47
- end
48
-
49
- def icon_name
50
- 'mail'
51
- end
52
- end
53
- end
54
- end
@@ -1,19 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class PageTitle < Spree::PageSection
4
- preference :title, :string
5
-
6
- def icon_name
7
- 'heading'
8
- end
9
-
10
- def display_name
11
- if pageable.is_a?(Spree::Page) && pageable.custom?
12
- pageable.name
13
- else
14
- Spree.t('page_sections.page_title.display_name')
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class PostDetails < Spree::PageSection
4
- DISPLAY_NAME = Spree.t(:post).freeze
5
-
6
- def icon_name
7
- 'article'
8
- end
9
-
10
- def self.role
11
- 'system'
12
- end
13
-
14
- def display_name
15
- DISPLAY_NAME
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class PostGrid < Spree::PageSection
4
- DISPLAY_NAME = Spree.t(:posts).freeze
5
-
6
- def icon_name
7
- 'news'
8
- end
9
-
10
- def self.role
11
- 'system'
12
- end
13
-
14
- def display_name
15
- DISPLAY_NAME
16
- end
17
- end
18
- end
19
- end
@@ -1,53 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class ProductDetails < Spree::PageSection
4
- TOP_BORDER_WIDTH_DEFAULT = 0
5
- TOP_PADDING_DEFAULT = 0
6
- BOTTOM_PADDING_DEFAULT = 40
7
-
8
- def icon_name
9
- 'list-details'
10
- end
11
-
12
- def self.role
13
- 'system'
14
- end
15
-
16
- def default_blocks
17
- product_metafield_definition_ids = Spree::MetafieldDefinition.where(resource_type: 'Spree::Product').ids
18
-
19
- [
20
- Spree::PageBlocks::Products::Brand.new,
21
- Spree::PageBlocks::Products::Title.new,
22
- Spree::PageBlocks::Products::Price.new(text: Spree.t(:price), preferred_text_alignment: 'left'),
23
- Spree::PageBlocks::Products::VariantPicker.new,
24
- Spree::PageBlocks::Products::QuantitySelector.new,
25
- Spree::PageBlocks::Products::BuyButtons.new,
26
- Spree::PageBlocks::Products::Description.new,
27
- Spree::PageBlocks::Metafields.new(preferred_metafield_definition_ids: product_metafield_definition_ids),
28
- ]
29
- end
30
-
31
- def blocks_available?
32
- true
33
- end
34
-
35
- def can_sort_blocks?
36
- true
37
- end
38
-
39
- def available_blocks_to_add
40
- [
41
- Spree::PageBlocks::Products::Brand,
42
- Spree::PageBlocks::Products::Title,
43
- Spree::PageBlocks::Products::Price,
44
- Spree::PageBlocks::Products::VariantPicker,
45
- Spree::PageBlocks::Products::QuantitySelector,
46
- Spree::PageBlocks::Products::BuyButtons,
47
- Spree::PageBlocks::Products::Description,
48
- Spree::PageBlocks::Metafields,
49
- ]
50
- end
51
- end
52
- end
53
- end
@@ -1,13 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class ProductGrid < Spree::PageSection
4
- def icon_name
5
- 'layout-grid'
6
- end
7
-
8
- def self.role
9
- 'system'
10
- end
11
- end
12
- end
13
- end