spree_core 5.2.8 → 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 (296) 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 +9 -3
  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/address_book.rb +4 -12
  47. data/app/models/spree/order/checkout.rb +7 -2
  48. data/app/models/spree/order/emails.rb +3 -11
  49. data/app/models/spree/order/store_credit.rb +5 -1
  50. data/app/models/spree/order.rb +80 -31
  51. data/app/models/spree/order_updater.rb +28 -9
  52. data/app/models/spree/payment/custom_events.rb +37 -0
  53. data/app/models/spree/payment.rb +13 -4
  54. data/app/models/spree/payment_capture_event.rb +0 -4
  55. data/app/models/spree/payment_method.rb +1 -1
  56. data/app/models/spree/permission_sets/default_customer.rb +3 -3
  57. data/app/models/spree/policy.rb +1 -8
  58. data/app/models/spree/post.rb +2 -7
  59. data/app/models/spree/post_category.rb +2 -0
  60. data/app/models/spree/price.rb +8 -6
  61. data/app/models/spree/price_list.rb +263 -0
  62. data/app/models/spree/price_rule.rb +26 -0
  63. data/app/models/spree/price_rules/customer_group_rule.rb +21 -0
  64. data/app/models/spree/price_rules/user_rule.rb +19 -0
  65. data/app/models/spree/price_rules/volume_rule.rb +21 -0
  66. data/app/models/spree/price_rules/zone_rule.rb +19 -0
  67. data/app/models/spree/product.rb +117 -76
  68. data/app/models/spree/product_property.rb +2 -2
  69. data/app/models/spree/promotion/rules/customer_group.rb +22 -0
  70. data/app/models/spree/promotion/rules/user.rb +2 -2
  71. data/app/models/spree/promotion.rb +3 -4
  72. data/app/models/spree/promotion_handler/coupon.rb +3 -3
  73. data/app/models/spree/property.rb +3 -6
  74. data/app/models/spree/prototype.rb +0 -3
  75. data/app/models/spree/refund.rb +2 -3
  76. data/app/models/spree/reimbursement.rb +5 -3
  77. data/app/models/spree/report.rb +7 -1
  78. data/app/models/spree/reports/products_performance.rb +1 -1
  79. data/app/models/spree/reports/sales_total.rb +1 -1
  80. data/app/models/spree/return_authorization.rb +7 -3
  81. data/app/models/spree/return_item.rb +15 -4
  82. data/app/models/spree/shipment/custom_events.rb +47 -0
  83. data/app/models/spree/shipment.rb +12 -5
  84. data/app/models/spree/shipping_category.rb +0 -3
  85. data/app/models/spree/shipping_method.rb +0 -3
  86. data/app/models/spree/stock/quantifier.rb +1 -1
  87. data/app/models/spree/stock_item.rb +2 -0
  88. data/app/models/spree/stock_location.rb +0 -3
  89. data/app/models/spree/stock_movement/custom_events.rb +44 -0
  90. data/app/models/spree/stock_movement.rb +3 -0
  91. data/app/models/spree/stock_transfer.rb +2 -3
  92. data/app/models/spree/store.rb +64 -92
  93. data/app/models/spree/store_credit.rb +3 -4
  94. data/app/models/spree/store_product.rb +14 -0
  95. data/app/models/spree/subscriber.rb +186 -0
  96. data/app/models/spree/tax_category.rb +0 -4
  97. data/app/models/spree/tax_rate.rb +0 -3
  98. data/app/models/spree/taxon.rb +3 -36
  99. data/app/models/spree/taxonomy.rb +0 -3
  100. data/app/models/spree/variant.rb +114 -21
  101. data/app/models/spree/webhook_delivery.rb +60 -0
  102. data/app/models/spree/webhook_endpoint.rb +53 -0
  103. data/app/models/spree/wished_item.rb +2 -4
  104. data/app/models/spree/wishlist.rb +2 -3
  105. data/app/models/spree/zone.rb +0 -9
  106. data/app/paginators/spree/shared/paginate.rb +4 -0
  107. data/app/serializers/spree/events/asset_serializer.rb +22 -0
  108. data/app/serializers/spree/events/base_serializer.rb +61 -0
  109. data/app/serializers/spree/events/customer_return_serializer.rb +20 -0
  110. data/app/serializers/spree/events/digital_link_serializer.rb +20 -0
  111. data/app/serializers/spree/events/digital_serializer.rb +18 -0
  112. data/app/serializers/spree/events/export_serializer.rb +22 -0
  113. data/app/serializers/spree/events/gift_card_batch_serializer.rb +24 -0
  114. data/app/serializers/spree/events/gift_card_serializer.rb +29 -0
  115. data/app/serializers/spree/events/image_serializer.rb +9 -0
  116. data/app/serializers/spree/events/import_row_serializer.rb +23 -0
  117. data/app/serializers/spree/events/import_serializer.rb +24 -0
  118. data/app/serializers/spree/events/invitation_serializer.rb +28 -0
  119. data/app/serializers/spree/events/line_item_serializer.rb +31 -0
  120. data/app/serializers/spree/events/newsletter_subscriber_serializer.rb +21 -0
  121. data/app/serializers/spree/events/order_serializer.rb +39 -0
  122. data/app/serializers/spree/events/payment_serializer.rb +24 -0
  123. data/app/serializers/spree/events/post_category_serializer.rb +20 -0
  124. data/app/serializers/spree/events/post_serializer.rb +26 -0
  125. data/app/serializers/spree/events/price_serializer.rb +22 -0
  126. data/app/serializers/spree/events/product_serializer.rb +24 -0
  127. data/app/serializers/spree/events/promotion_serializer.rb +32 -0
  128. data/app/serializers/spree/events/refund_serializer.rb +23 -0
  129. data/app/serializers/spree/events/reimbursement_serializer.rb +22 -0
  130. data/app/serializers/spree/events/report_serializer.rb +23 -0
  131. data/app/serializers/spree/events/return_authorization_serializer.rb +22 -0
  132. data/app/serializers/spree/events/return_item_serializer.rb +27 -0
  133. data/app/serializers/spree/events/shipment_serializer.rb +24 -0
  134. data/app/serializers/spree/events/stock_item_serializer.rb +22 -0
  135. data/app/serializers/spree/events/stock_movement_serializer.rb +22 -0
  136. data/app/serializers/spree/events/stock_transfer_serializer.rb +22 -0
  137. data/app/serializers/spree/events/store_credit_serializer.rb +30 -0
  138. data/app/serializers/spree/events/user_serializer.rb +18 -0
  139. data/app/serializers/spree/events/variant_serializer.rb +34 -0
  140. data/app/serializers/spree/events/wished_item_serializer.rb +20 -0
  141. data/app/serializers/spree/events/wishlist_serializer.rb +22 -0
  142. data/app/services/spree/addresses/update.rb +1 -1
  143. data/app/services/spree/cart/add_item.rb +1 -1
  144. data/app/services/spree/coupon_codes/coupon_codes_handler.rb +2 -1
  145. data/app/services/spree/data_feeds/google/required_attributes.rb +4 -4
  146. data/app/services/spree/newsletter/verify.rb +5 -0
  147. data/app/services/spree/products/auto_match_taxons.rb +1 -1
  148. data/app/services/spree/seeds/all.rb +1 -1
  149. data/app/services/spree/taxons/add_products.rb +8 -4
  150. data/app/services/spree/taxons/regenerate_products.rb +8 -0
  151. data/app/services/spree/taxons/remove_products.rb +12 -7
  152. data/app/subscribers/spree/event_log_subscriber.rb +64 -0
  153. data/app/subscribers/spree/export_subscriber.rb +26 -0
  154. data/app/subscribers/spree/invitation_email_subscriber.rb +40 -0
  155. data/app/subscribers/spree/product_metrics_subscriber.rb +29 -0
  156. data/app/subscribers/spree/report_subscriber.rb +26 -0
  157. data/config/locales/en.yml +126 -0
  158. data/db/migrate/20251110120000_create_spree_price_lists.rb +22 -0
  159. data/db/migrate/20251110120001_create_spree_price_rules.rb +13 -0
  160. data/db/migrate/20251110120002_add_price_list_id_to_spree_prices.rb +6 -0
  161. data/db/migrate/20251110120003_add_price_list_id_to_spree_line_items.rb +5 -0
  162. data/db/migrate/20251201172118_fix_indexes_on_friendly_id_slugs.rb +8 -0
  163. data/db/migrate/20251214000001_create_spree_webhook_endpoints.rb +19 -0
  164. data/db/migrate/20251214000002_create_spree_webhook_deliveries.rb +23 -0
  165. data/db/migrate/20251222000000_add_performance_indexes_to_spree_adjustments.rb +25 -0
  166. data/db/migrate/20260112000000_fix_spree_prices_unique_indexes.rb +33 -0
  167. data/db/migrate/20260115120000_create_spree_customer_groups.rb +14 -0
  168. data/db/migrate/20260115120001_create_spree_customer_group_users.rb +14 -0
  169. data/db/migrate/20260117140831_remove_not_null_constraint_from_policy_name.rb +5 -0
  170. data/db/migrate/20260118120000_add_statistics_to_store_products.rb +11 -0
  171. data/db/migrate/20260119120000_add_counter_caches_to_spree_products.rb +9 -0
  172. data/db/migrate/20260119170000_add_counter_caches_to_spree_taxons.rb +9 -0
  173. data/db/migrate/20260120120000_add_image_count_to_spree_variants.rb +9 -0
  174. data/lib/generators/spree/dummy/dummy_generator.rb +14 -2
  175. data/lib/spree/core/configuration.rb +1 -0
  176. data/lib/spree/core/controller_helpers/auth.rb +0 -15
  177. data/lib/spree/core/controller_helpers/currency.rb +13 -9
  178. data/lib/spree/core/controller_helpers/search.rb +1 -1
  179. data/lib/spree/core/controller_helpers/store.rb +5 -1
  180. data/lib/spree/core/engine.rb +61 -78
  181. data/lib/spree/core/importer/order.rb +1 -1
  182. data/lib/spree/core/importer/product.rb +1 -1
  183. data/lib/spree/core/preferences/preferable.rb +14 -1
  184. data/lib/spree/core/pricing/context.rb +63 -0
  185. data/lib/spree/core/pricing/resolver.rb +129 -0
  186. data/lib/spree/core/search/base.rb +1 -1
  187. data/lib/spree/core/token_generator.rb +1 -1
  188. data/lib/spree/core/version.rb +1 -1
  189. data/lib/spree/core.rb +42 -47
  190. data/lib/spree/events/adapters/active_support_notifications.rb +112 -0
  191. data/lib/spree/events/adapters/base.rb +193 -0
  192. data/lib/spree/events/registry.rb +99 -0
  193. data/lib/spree/events.rb +240 -0
  194. data/lib/spree/permitted_attributes.rb +13 -2
  195. data/lib/spree/testing_support/common_rake.rb +68 -35
  196. data/lib/spree/testing_support/factories/customer_group_factory.rb +6 -0
  197. data/lib/spree/testing_support/factories/customer_group_user_factory.rb +6 -0
  198. data/lib/spree/testing_support/factories/price_factory.rb +4 -0
  199. data/lib/spree/testing_support/factories/price_list_factory.rb +34 -0
  200. data/lib/spree/testing_support/factories/price_rule_factory.rb +49 -0
  201. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +12 -0
  202. data/lib/spree/testing_support/factories/stock_item_factory.rb +6 -4
  203. data/lib/spree/testing_support/factories/store_product_factory.rb +6 -0
  204. data/lib/spree/testing_support/factories/taxon_factory.rb +0 -1
  205. data/lib/spree/testing_support/factories/webhook_delivery_factory.rb +48 -0
  206. data/lib/spree/testing_support/factories/webhook_endpoint_factory.rb +22 -0
  207. data/lib/spree/testing_support/lifecycle_events.rb +38 -0
  208. data/lib/spree/testing_support/store.rb +4 -2
  209. data/lib/spree/webhooks.rb +22 -0
  210. data/lib/tasks/products.rake +40 -0
  211. data/lib/tasks/taxons.rake +19 -0
  212. data/lib/tasks/variants.rake +18 -0
  213. metadata +112 -115
  214. data/app/jobs/spree/themes/duplicate_components_job.rb +0 -59
  215. data/app/jobs/spree/themes/screenshot_job.rb +0 -81
  216. data/app/models/concerns/spree/has_page_links.rb +0 -53
  217. data/app/models/spree/page.rb +0 -188
  218. data/app/models/spree/page_block.rb +0 -73
  219. data/app/models/spree/page_blocks/buttons.rb +0 -29
  220. data/app/models/spree/page_blocks/heading.rb +0 -18
  221. data/app/models/spree/page_blocks/image.rb +0 -20
  222. data/app/models/spree/page_blocks/link.rb +0 -21
  223. data/app/models/spree/page_blocks/mega_nav.rb +0 -33
  224. data/app/models/spree/page_blocks/mega_nav_with_subcategories.rb +0 -32
  225. data/app/models/spree/page_blocks/metafields.rb +0 -18
  226. data/app/models/spree/page_blocks/nav.rb +0 -15
  227. data/app/models/spree/page_blocks/newsletter_form.rb +0 -18
  228. data/app/models/spree/page_blocks/products/brand.rb +0 -15
  229. data/app/models/spree/page_blocks/products/buy_buttons.rb +0 -24
  230. data/app/models/spree/page_blocks/products/description.rb +0 -18
  231. data/app/models/spree/page_blocks/products/price.rb +0 -18
  232. data/app/models/spree/page_blocks/products/quantity_selector.rb +0 -20
  233. data/app/models/spree/page_blocks/products/share.rb +0 -8
  234. data/app/models/spree/page_blocks/products/title.rb +0 -19
  235. data/app/models/spree/page_blocks/products/variant_picker.rb +0 -13
  236. data/app/models/spree/page_blocks/subheading.rb +0 -17
  237. data/app/models/spree/page_blocks/text.rb +0 -16
  238. data/app/models/spree/page_link.rb +0 -60
  239. data/app/models/spree/page_section.rb +0 -222
  240. data/app/models/spree/page_sections/announcement_bar.rb +0 -28
  241. data/app/models/spree/page_sections/breadcrumbs.rb +0 -12
  242. data/app/models/spree/page_sections/collection_banner.rb +0 -18
  243. data/app/models/spree/page_sections/custom_code.rb +0 -11
  244. data/app/models/spree/page_sections/featured_posts.rb +0 -45
  245. data/app/models/spree/page_sections/featured_product.rb +0 -50
  246. data/app/models/spree/page_sections/featured_taxon.rb +0 -90
  247. data/app/models/spree/page_sections/featured_taxons.rb +0 -45
  248. data/app/models/spree/page_sections/footer.rb +0 -101
  249. data/app/models/spree/page_sections/header.rb +0 -62
  250. data/app/models/spree/page_sections/image_banner.rb +0 -55
  251. data/app/models/spree/page_sections/image_with_text.rb +0 -65
  252. data/app/models/spree/page_sections/main_password_footer.rb +0 -18
  253. data/app/models/spree/page_sections/main_password_header.rb +0 -20
  254. data/app/models/spree/page_sections/newsletter.rb +0 -54
  255. data/app/models/spree/page_sections/page_title.rb +0 -19
  256. data/app/models/spree/page_sections/post_details.rb +0 -19
  257. data/app/models/spree/page_sections/post_grid.rb +0 -19
  258. data/app/models/spree/page_sections/product_details.rb +0 -53
  259. data/app/models/spree/page_sections/product_grid.rb +0 -13
  260. data/app/models/spree/page_sections/related_products.rb +0 -58
  261. data/app/models/spree/page_sections/rich_text.rb +0 -31
  262. data/app/models/spree/page_sections/taxon_banner.rb +0 -18
  263. data/app/models/spree/page_sections/taxon_grid.rb +0 -17
  264. data/app/models/spree/page_sections/video.rb +0 -107
  265. data/app/models/spree/pages/account.rb +0 -19
  266. data/app/models/spree/pages/cart.rb +0 -19
  267. data/app/models/spree/pages/checkout.rb +0 -15
  268. data/app/models/spree/pages/custom.rb +0 -38
  269. data/app/models/spree/pages/homepage.rb +0 -72
  270. data/app/models/spree/pages/login.rb +0 -19
  271. data/app/models/spree/pages/password.rb +0 -59
  272. data/app/models/spree/pages/post.rb +0 -27
  273. data/app/models/spree/pages/post_list.rb +0 -36
  274. data/app/models/spree/pages/product_details.rb +0 -30
  275. data/app/models/spree/pages/search_results.rb +0 -43
  276. data/app/models/spree/pages/shop_all.rb +0 -40
  277. data/app/models/spree/pages/taxon.rb +0 -29
  278. data/app/models/spree/pages/taxon_list.rb +0 -41
  279. data/app/models/spree/pages/wishlist.rb +0 -15
  280. data/app/models/spree/theme.rb +0 -233
  281. data/app/models/spree/themes/default.rb +0 -97
  282. data/app/presenters/spree/csv/formula_sanitizer.rb +0 -28
  283. data/app/services/spree/taxons/touch_featured_sections.rb +0 -21
  284. data/db/migrate/20250120094216_create_page_builder_models.rb +0 -78
  285. data/db/migrate/20250305121352_remove_page_builder_indices.rb +0 -11
  286. data/db/migrate/20250825175217_add_missing_page_builder_indexes.rb +0 -7
  287. data/db/migrate/20250913130044_add_page_links_counter_cache_to_spree_stores.rb +0 -10
  288. data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
  289. data/lib/generators/spree/install/install_generator.rb +0 -219
  290. data/lib/generators/spree/install/templates/config/initializers/spree.rb +0 -126
  291. data/lib/spree/core/webhooks.rb +0 -21
  292. data/lib/spree/testing_support/factories/page_block_factory.rb +0 -22
  293. data/lib/spree/testing_support/factories/page_factory.rb +0 -33
  294. data/lib/spree/testing_support/factories/page_link_factory.rb +0 -7
  295. data/lib/spree/testing_support/factories/page_section_factory.rb +0 -27
  296. data/lib/spree/testing_support/factories/theme_factory.rb +0 -14
@@ -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
@@ -1,58 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class RelatedProducts < 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.related_products.heading_default')
8
- preference :heading_size, :string, default: 'medium'
9
- preference :heading_alignment, :string, default: 'left'
10
- preference :description_alignment, :string, default: 'left'
11
- preference :max_products_to_show, :integer, default: 10
12
-
13
- def icon_name
14
- 'tags'
15
- end
16
-
17
- def lazy?
18
- true
19
- end
20
-
21
- def layout
22
- 'swiper'
23
- end
24
-
25
- def lazy_path(variables)
26
- section_id = variables[:section].id
27
- url_options = variables[:url_options] || {}
28
-
29
- if variables[:product].present?
30
- product_id = variables[:product].id
31
- Spree::Core::Engine.routes.url_helpers.related_product_path(
32
- product_id,
33
- section_id: section_id,
34
- **url_options
35
- )
36
- elsif variables[:post].present?
37
- post_id = variables[:post].id
38
- Spree::Core::Engine.routes.url_helpers.related_products_post_path(
39
- post_id,
40
- section_id: section_id,
41
- **url_options
42
- )
43
- end
44
- end
45
-
46
- private
47
-
48
- def make_alignment_valid
49
- self.preferred_heading_alignment = 'left' unless %w[left center right].include?(preferred_heading_alignment)
50
- self.preferred_description_alignment = 'left' unless %w[left center right].include?(preferred_description_alignment)
51
- end
52
-
53
- def make_heading_size_valid
54
- self.preferred_heading_size = 'small' unless %w[small medium large].include?(preferred_heading_size)
55
- end
56
- end
57
- end
58
- end
@@ -1,31 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class RichText < Spree::PageSection
4
- def default_blocks
5
- [
6
- Spree::PageBlocks::Heading.new(text: Spree.t('page_sections.rich_text.heading_default')),
7
- Spree::PageBlocks::Text.new(text: Spree.t('page_sections.rich_text.text_default'))
8
- ]
9
- end
10
-
11
- def available_blocks_to_add
12
- [
13
- Spree::PageBlocks::Heading,
14
- Spree::PageBlocks::Text
15
- ]
16
- end
17
-
18
- def blocks_available?
19
- true
20
- end
21
-
22
- def can_sort_blocks?
23
- true
24
- end
25
-
26
- def icon_name
27
- 'text-caption'
28
- end
29
- end
30
- end
31
- end
@@ -1,18 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class TaxonBanner < Spree::PageSection
4
- TOP_PADDING_DEFAULT = 20
5
- BOTTOM_PADDING_DEFAULT = 20
6
- TOP_BORDER_WIDTH_DEFAULT = 0
7
- BOTTOM_BORDER_WIDTH_DEFAULT = 1
8
-
9
- def icon_name
10
- 'heading'
11
- end
12
-
13
- def self.role
14
- 'system'
15
- end
16
- end
17
- end
18
- end
@@ -1,17 +0,0 @@
1
- module Spree
2
- module PageSections
3
- class TaxonGrid < Spree::PageSection
4
- TOP_BORDER_WIDTH_DEFAULT = 0
5
-
6
- preference :heading, :string, default: Spree.t('page_sections.taxon_grid.heading_default')
7
-
8
- def icon_name
9
- 'layout-grid'
10
- end
11
-
12
- def self.role
13
- 'system'
14
- end
15
- end
16
- end
17
- end