spree_admin 5.3.3 → 5.4.0.beta

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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/controllers/concerns/spree/admin/order_concern.rb +1 -1
  4. data/app/controllers/spree/admin/action_text/video_embeds_controller.rb +1 -1
  5. data/app/controllers/spree/admin/addresses_controller.rb +1 -1
  6. data/app/controllers/spree/admin/admin_users_controller.rb +3 -3
  7. data/app/controllers/spree/admin/api_keys_controller.rb +56 -0
  8. data/app/controllers/spree/admin/assets_controller.rb +2 -2
  9. data/app/controllers/spree/admin/base_controller.rb +4 -4
  10. data/app/controllers/spree/admin/classifications_controller.rb +5 -4
  11. data/app/controllers/spree/admin/coupon_codes_controller.rb +1 -1
  12. data/app/controllers/spree/admin/customer_group_users_controller.rb +3 -2
  13. data/app/controllers/spree/admin/dashboard_controller.rb +2 -1
  14. data/app/controllers/spree/admin/digital_assets_controller.rb +1 -1
  15. data/app/controllers/spree/admin/gift_cards_controller.rb +5 -5
  16. data/app/controllers/spree/admin/import_mappings_controller.rb +1 -1
  17. data/app/controllers/spree/admin/import_rows_controller.rb +1 -1
  18. data/app/controllers/spree/admin/integrations_controller.rb +1 -1
  19. data/app/controllers/spree/admin/invitations_controller.rb +6 -5
  20. data/app/controllers/spree/admin/line_items_controller.rb +1 -1
  21. data/app/controllers/spree/admin/markets_controller.rb +28 -0
  22. data/app/controllers/spree/admin/option_values_controller.rb +1 -1
  23. data/app/controllers/spree/admin/orders/adjustments_controller.rb +4 -4
  24. data/app/controllers/spree/admin/orders/billing_address_controller.rb +4 -4
  25. data/app/controllers/spree/admin/orders/customer_returns_controller.rb +1 -1
  26. data/app/controllers/spree/admin/orders/shipping_address_controller.rb +3 -3
  27. data/app/controllers/spree/admin/orders/user_controller.rb +4 -4
  28. data/app/controllers/spree/admin/orders_controller.rb +8 -4
  29. data/app/controllers/spree/admin/payments_controller.rb +3 -3
  30. data/app/controllers/spree/admin/price_list_products_controller.rb +1 -1
  31. data/app/controllers/spree/admin/price_rules_controller.rb +1 -1
  32. data/app/controllers/spree/admin/products_controller.rb +24 -15
  33. data/app/controllers/spree/admin/profile_controller.rb +1 -1
  34. data/app/controllers/spree/admin/promotion_actions_controller.rb +1 -1
  35. data/app/controllers/spree/admin/promotion_rules_controller.rb +1 -1
  36. data/app/controllers/spree/admin/promotions_controller.rb +1 -1
  37. data/app/controllers/spree/admin/refunds_controller.rb +1 -1
  38. data/app/controllers/spree/admin/reimbursements_controller.rb +2 -2
  39. data/app/controllers/spree/admin/resource_controller.rb +30 -11
  40. data/app/controllers/spree/admin/shipments_controller.rb +3 -3
  41. data/app/controllers/spree/admin/shipping_methods_controller.rb +1 -1
  42. data/app/controllers/spree/admin/store_credits_controller.rb +5 -5
  43. data/app/controllers/spree/admin/stores_controller.rb +1 -32
  44. data/app/controllers/spree/admin/taxons_controller.rb +3 -3
  45. data/app/controllers/spree/admin/translations_controller.rb +1 -0
  46. data/app/controllers/spree/admin/users_controller.rb +2 -2
  47. data/app/helpers/spree/admin/api_keys_helper.rb +32 -0
  48. data/app/helpers/spree/admin/base_helper.rb +6 -1
  49. data/app/helpers/spree/admin/json_preview_helper.rb +29 -25
  50. data/app/helpers/spree/admin/orders_filters_helper.rb +1 -1
  51. data/app/helpers/spree/admin/sortable_tree_helper.rb +1 -1
  52. data/app/helpers/spree/admin/stores_helper.rb +0 -4
  53. data/app/helpers/spree/admin/table_helper.rb +1 -1
  54. data/app/javascript/spree/admin/controllers/autocomplete_select_controller.js +5 -1
  55. data/app/javascript/spree/admin/controllers/bulk_editor_controller.js +0 -86
  56. data/app/javascript/spree/admin/controllers/money_field_controller.js +1 -23
  57. data/app/javascript/spree/admin/controllers/select_controller.js +4 -0
  58. data/app/javascript/spree/admin/controllers/variants_form_controller.js +30 -91
  59. data/app/models/spree/admin/table/column.rb +1 -1
  60. data/app/models/spree/admin/table/query_builder.rb +7 -2
  61. data/app/views/spree/admin/api_keys/_details.html.erb +51 -0
  62. data/app/views/spree/admin/api_keys/_form.html.erb +26 -0
  63. data/app/views/spree/admin/api_keys/_token_card.html.erb +28 -0
  64. data/app/views/spree/admin/api_keys/_usage_info.html.erb +16 -0
  65. data/app/views/spree/admin/api_keys/index.html.erb +9 -0
  66. data/app/views/spree/admin/api_keys/show.html.erb +26 -0
  67. data/app/views/spree/admin/classifications/_classification.html.erb +2 -2
  68. data/app/views/spree/admin/classifications/index.html.erb +1 -1
  69. data/app/views/spree/admin/classifications/new.html.erb +1 -1
  70. data/app/views/spree/admin/json_previews/show.html.erb +6 -6
  71. data/app/views/spree/admin/markets/_form.html.erb +28 -0
  72. data/app/views/spree/admin/markets/edit.html.erb +1 -0
  73. data/app/views/spree/admin/markets/index.html.erb +9 -0
  74. data/app/views/spree/admin/markets/new.html.erb +1 -0
  75. data/app/views/spree/admin/orders/billing_address/_form.html.erb +2 -2
  76. data/app/views/spree/admin/orders/shipping_address/_form.html.erb +2 -2
  77. data/app/views/spree/admin/payment_methods/_form.html.erb +0 -12
  78. data/app/views/spree/admin/price_rules/forms/_market_rule.html.erb +7 -0
  79. data/app/views/spree/admin/products/_form.html.erb +0 -1
  80. data/app/views/spree/admin/products/form/_variants.html.erb +4 -13
  81. data/app/views/spree/admin/products/form/variants/_variant_template.html.erb +1 -1
  82. data/app/views/spree/admin/promotion_rules/forms/_country.html.erb +1 -1
  83. data/app/views/spree/admin/shared/_content_header.html.erb +1 -1
  84. data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +0 -33
  85. data/app/views/spree/admin/shared/sidebar/_store_nav.html.erb +2 -2
  86. data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +2 -2
  87. data/app/views/spree/admin/stores/form/_basic.html.erb +10 -7
  88. data/app/views/spree/admin/stores/form/_checkout.html.erb +5 -8
  89. data/app/views/spree/admin/tables/_table.html.erb +3 -4
  90. data/app/views/spree/admin/tables/columns/_api_key_status.html.erb +2 -0
  91. data/app/views/spree/admin/tables/columns/_api_key_type.html.erb +2 -0
  92. data/app/views/spree/admin/taxonomies/show.html.erb +1 -1
  93. data/app/views/spree/admin/taxons/_form.html.erb +2 -2
  94. data/app/views/spree/admin/taxons/edit.html.erb +1 -2
  95. data/app/views/spree/admin/taxons/update.turbo_stream.erb +1 -1
  96. data/app/views/spree/admin/users/_billing.html.erb +2 -2
  97. data/app/views/spree/admin/users/_shipping.html.erb +1 -1
  98. data/app/views/spree/admin/variants/_variant.html.erb +1 -1
  99. data/config/brakeman.ignore +28 -0
  100. data/config/initializers/spree_admin_navigation.rb +16 -16
  101. data/config/initializers/spree_admin_tables.rb +112 -18
  102. data/config/locales/en.yml +31 -0
  103. data/config/routes.rb +6 -6
  104. data/lib/spree/admin/engine.rb +1 -0
  105. data/lib/spree/admin/tailwind_helper.rb +11 -1
  106. data/lib/spree/admin/testing_support/tom_select.rb +1 -1
  107. metadata +30 -27
  108. data/LICENSE.md +0 -13
  109. data/app/controllers/spree/admin/custom_domains_controller.rb +0 -21
  110. data/app/controllers/spree/admin/oauth_applications_controller.rb +0 -23
  111. data/app/views/spree/admin/custom_domains/_custom_domain.html.erb +0 -11
  112. data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +0 -19
  113. data/app/views/spree/admin/custom_domains/_form.html.erb +0 -7
  114. data/app/views/spree/admin/custom_domains/index.html.erb +0 -65
  115. data/app/views/spree/admin/oauth_applications/_form.html.erb +0 -6
  116. data/app/views/spree/admin/oauth_applications/_table_header.html.erb +0 -7
  117. data/app/views/spree/admin/oauth_applications/_table_row.html.erb +0 -34
  118. data/app/views/spree/admin/oauth_applications/create.turbo_stream.erb +0 -31
  119. data/app/views/spree/admin/oauth_applications/edit.html.erb +0 -1
  120. data/app/views/spree/admin/oauth_applications/index.html.erb +0 -21
  121. data/app/views/spree/admin/oauth_applications/new.html.erb +0 -1
  122. data/app/views/spree/admin/products/form/_stores.html.erb +0 -27
  123. data/app/views/spree/admin/stores/new.html.erb +0 -128
  124. data/app/views/spree/admin/stores/new.turbo_stream.erb +0 -1
  125. /data/app/views/spree/admin/{custom_domains → api_keys}/edit.html.erb +0 -0
  126. /data/app/views/spree/admin/{custom_domains → api_keys}/new.html.erb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f53aab5bf5de0f40206a80c2a2375cc915973139dec1a0ca669a36f4d98a6469
4
- data.tar.gz: c3c5c6babf054c33dc7027464c9c38bc5e27eb1fcb41d7ff4891a223291dcde0
3
+ metadata.gz: 2c3c1bcea62974a037285f20685e3d926e15bf03b1865b82f5a98b11f8c83a9b
4
+ data.tar.gz: a3c6ec7ac7ad5d4e0e3d941bc34d2b68b8a8c63122b0c4e12162f38cd3f85faa
5
5
  SHA512:
6
- metadata.gz: 30e6161df15f8ba37bfe8b41c7920f63352f344cf7176941a44ce0d43952347ac22aca27d2ddb9209e6423bebb5f089b0b9c9cf51238752ff25552e9ca8440f6
7
- data.tar.gz: 6a14594a4adf0b59a58f0dcae7607e0e65bc945bd99134895889ba312e26a56702712f25f148879b48d250d2edb27c026f89d9ad2b3824a6aac50930852d9c77
6
+ metadata.gz: 564215eebe42f983fc907cf5f53fbc17e4282fe1af905580cdcefff52d053d6f258a64069196823527e6727de062f77fdf274fd98b9f9731aff86469c8e23257
7
+ data.tar.gz: 77f2de97d0af53f65de94783e9182ff3a97007e656ab3b19667cea55716d7928f14a39a3988993a7433d0dc61be976c1fd652251d2077084c14c5faf362dbb40
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/spree_admin.svg)](https://badge.fury.io/rb/spree_admin)
4
4
 
5
- Spree Admin provides a modern, fully-featured admin dashboard for managing your Spree Commerce store.
5
+ Spree Admin provides a modern, fully-featured admin dashboard for managing your Spree application.
6
6
 
7
7
  ## Overview
8
8
 
@@ -147,4 +147,4 @@ end
147
147
 
148
148
  - [Admin Customization Guide](https://docs.spreecommerce.org/developer/customization/admin)
149
149
  - [Navigation Configuration](https://docs.spreecommerce.org/developer/customization/admin-navigation)
150
- - [Permissions Guide](https://docs.spreecommerce.org/developer/customization/permissions)
150
+ - [Permissions Guide](https://docs.spreecommerce.org/developer/customization/permissions)
@@ -10,7 +10,7 @@ module Spree
10
10
  protected
11
11
 
12
12
  def load_order
13
- @order = current_store.orders.find_by!(number: params[:order_id])
13
+ @order = current_store.orders.find_by_prefix_id!(params[:order_id])
14
14
  authorize! action, @order
15
15
  @order
16
16
  end
@@ -20,7 +20,7 @@ module Spree
20
20
 
21
21
  render json: { sgid: video_embed.attachable_sgid, content: content }, status: :created
22
22
  else
23
- render json: { error: video_embed.errors.full_messages.to_sentence }, status: :unprocessable_entity
23
+ render json: { error: video_embed.errors.full_messages.to_sentence }, status: :unprocessable_content
24
24
  end
25
25
  end
26
26
 
@@ -4,7 +4,7 @@ module Spree
4
4
  before_action :set_new_address_country, only: :new
5
5
 
6
6
  def create
7
- user = Spree.user_class.find(params[:user_id])
7
+ user = Spree.user_class.find_by_prefix_id!(params[:user_id])
8
8
 
9
9
  result = create_service.call(
10
10
  address_params: permitted_resource_params,
@@ -56,7 +56,7 @@ module Spree
56
56
  end
57
57
  redirect_to spree.admin_path
58
58
  else
59
- render :new, status: :unprocessable_entity
59
+ render :new, status: :unprocessable_content
60
60
  end
61
61
  end
62
62
 
@@ -74,7 +74,7 @@ module Spree
74
74
  if @admin_user.update(permitted_params)
75
75
  redirect_to spree.admin_admin_user_path(@admin_user), status: :see_other, notice: flash_message_for(@admin_user, :successfully_updated)
76
76
  else
77
- render :edit, status: :unprocessable_entity
77
+ render :edit, status: :unprocessable_content
78
78
  end
79
79
  end
80
80
 
@@ -110,7 +110,7 @@ module Spree
110
110
  end
111
111
 
112
112
  def load_admin_user
113
- @admin_user = Spree.admin_user_class.accessible_by(current_ability).find(params[:id])
113
+ @admin_user = Spree.admin_user_class.accessible_by(current_ability).find_by_prefix_id!(params[:id])
114
114
  end
115
115
 
116
116
  # for self signup flow, we use the minimal layout
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Admin
5
+ class ApiKeysController < ResourceController
6
+ include Spree::Admin::SettingsConcern
7
+ include Spree::Admin::TableConcern
8
+
9
+ helper 'spree/admin/api_keys'
10
+
11
+ def revoke
12
+ @object = scope.find_by_prefix_id!(params[:id])
13
+ @object.revoke!(try_spree_current_user)
14
+ flash[:success] = Spree.t('admin.api_keys.revoked')
15
+ redirect_to spree.admin_api_key_path(@object)
16
+ end
17
+
18
+ private
19
+
20
+ def model_class
21
+ Spree::ApiKey
22
+ end
23
+
24
+ def scope
25
+ current_store.api_keys
26
+ end
27
+
28
+ def object_name
29
+ 'api_key'
30
+ end
31
+
32
+ def permitted_resource_params
33
+ permitted = params.require(:api_key).permit(permitted_api_key_attributes)
34
+ # key_type can only be set on create, not update
35
+ permitted.delete(:key_type) unless action_name == 'create'
36
+ permitted
37
+ end
38
+
39
+ def location_after_save
40
+ spree.admin_api_key_path(@object)
41
+ end
42
+
43
+ def update_turbo_stream_enabled?
44
+ true
45
+ end
46
+
47
+ def build_resource
48
+ if params[:api_key].present?
49
+ scope.new(permitted_resource_params.merge(created_by: try_spree_current_user))
50
+ else
51
+ scope.new(created_by: try_spree_current_user)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -14,7 +14,7 @@ module Spree
14
14
  store_uploaded_asset_in_session(@asset, @asset.viewable_type) if @asset.viewable.nil? || @asset.viewable.new_record?
15
15
  else
16
16
  flash.now[:error] = @asset.errors.full_messages.to_sentence
17
- render :create, status: :unprocessable_entity
17
+ render :create, status: :unprocessable_content
18
18
  end
19
19
  end
20
20
 
@@ -27,7 +27,7 @@ module Spree
27
27
  format.json { render json: @asset }
28
28
  end
29
29
  else
30
- head :unprocessable_entity
30
+ head :unprocessable_content
31
31
  end
32
32
  end
33
33
 
@@ -14,7 +14,6 @@ module Spree
14
14
  helper 'spree/integrations'
15
15
 
16
16
  before_action :authorize_admin
17
- after_action :set_return_to, only: [:index]
18
17
 
19
18
  protected
20
19
 
@@ -56,7 +55,8 @@ module Spree
56
55
 
57
56
  def try_spree_current_user
58
57
  if Spree.admin_user_class && Spree.admin_user_class != Spree.user_class
59
- send("current_#{Spree.admin_user_class.model_name.singular_route_key}")
58
+ method_name = "current_#{Spree.admin_user_class.model_name.singular_route_key}"
59
+ respond_to?(method_name, true) ? send(method_name) : nil
60
60
  else
61
61
  # use Spree::Core::ControllerHelpers::Auth#try_spree_current_user
62
62
  super
@@ -80,8 +80,8 @@ module Spree
80
80
  Spree.t(event_sym, resource: resource_desc)
81
81
  end
82
82
 
83
- def config_locale
84
- I18n.default_locale
83
+ def default_locale
84
+ @default_locale ||= current_store&.preferred_admin_locale.presence || super
85
85
  end
86
86
 
87
87
  def current_timezone
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class ClassificationsController < ResourceController
4
- belongs_to 'spree/taxon', find_by: :id
4
+ belongs_to 'spree/taxon', find_by: :permalink
5
5
 
6
6
  layout 'turbo_rails/frame'
7
7
 
@@ -19,7 +19,7 @@ module Spree
19
19
  private
20
20
 
21
21
  def collection_url
22
- spree.admin_taxon_classifications_path(@parent.id)
22
+ spree.admin_taxon_classifications_path(@parent)
23
23
  end
24
24
 
25
25
  def update_turbo_stream_enabled?
@@ -38,8 +38,9 @@ module Spree
38
38
  includes(
39
39
  :taxon,
40
40
  product: {
41
- master: [:images, :stock_items, :stock_locations],
42
- variants: [:images, :stock_items, :stock_locations]
41
+ thumbnail: [attachment_attachment: :blob],
42
+ master: [:stock_items, :stock_locations],
43
+ variants: [:stock_items, :stock_locations]
43
44
  }
44
45
  ).
45
46
  accessible_by(current_ability)
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class CouponCodesController < ResourceController
4
- belongs_to 'spree/promotion', find_by: :id
4
+ belongs_to 'spree/promotion', find_by: :prefix_id
5
5
 
6
6
  include PromotionsBreadcrumbConcern
7
7
  end
@@ -33,7 +33,8 @@ module Spree
33
33
  end
34
34
 
35
35
  def destroy
36
- deleted_count = @customer_group.remove_customers([params[:id]])
36
+ user = Spree.user_class.find_by_prefix_id!(params[:id])
37
+ deleted_count = @customer_group.remove_customers([user.id])
37
38
 
38
39
  if deleted_count > 0
39
40
  flash[:success] = Spree.t(:customer_removed_from_group)
@@ -58,7 +59,7 @@ module Spree
58
59
  private
59
60
 
60
61
  def set_customer_group
61
- @customer_group = current_store.customer_groups.find(params[:customer_group_id])
62
+ @customer_group = current_store.customer_groups.find_by_prefix_id!(params[:customer_group_id])
62
63
  end
63
64
 
64
65
  def model_class
@@ -146,7 +146,8 @@ module Spree
146
146
  end
147
147
 
148
148
  @top_landing_pages = @visits_scope.where.not(landing_page: [nil, '']).top(:landing_page, 10)
149
- @top_referrers = @visits_scope.where.not(referring_domain: current_store.custom_domains.pluck(:url) << current_store.url).top(
149
+ excluded_domains = current_store.respond_to?(:custom_domains) ? current_store.custom_domains.pluck(:url) : []
150
+ @top_referrers = @visits_scope.where.not(referring_domain: excluded_domains << current_store.url).top(
150
151
  :referring_domain, 10
151
152
  )
152
153
  @top_locations = @visits_scope.top(:country, 10)
@@ -26,7 +26,7 @@ module Spree
26
26
  end
27
27
 
28
28
  def find_resource
29
- parent.digitals.find(params[:id])
29
+ parent.digitals.find_by_prefix_id!(params[:id])
30
30
  end
31
31
 
32
32
  def create_turbo_stream_enabled?
@@ -1,8 +1,8 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class GiftCardsController < ResourceController
4
- prepend_before_action :load_user
5
4
  prepend_before_action :set_user_id_filter, only: :index
5
+ prepend_before_action :load_user
6
6
  before_action :add_breadcrumbs
7
7
  before_action :load_orders, only: :show
8
8
 
@@ -27,10 +27,10 @@ module Spree
27
27
  end
28
28
 
29
29
  def set_user_id_filter
30
- return if params[:user_id].blank?
30
+ return if @user.blank?
31
31
 
32
32
  params[:q] ||= {}
33
- params[:q][:user_id_eq] = params[:user_id] if params[:user_id].present?
33
+ params[:q][:user_id_eq] = @user.id
34
34
  end
35
35
 
36
36
  def location_after_destroy
@@ -42,11 +42,11 @@ module Spree
42
42
  end
43
43
 
44
44
  def location_after_save
45
- spree.admin_gift_card_path(@object.id)
45
+ spree.admin_gift_card_path(@object)
46
46
  end
47
47
 
48
48
  def load_user
49
- @user = Spree.user_class.find_by(id: params[:user_id]) if params[:user_id].present?
49
+ @user = Spree.user_class.find_by_prefix_id(params[:user_id]) if params[:user_id].present?
50
50
  end
51
51
 
52
52
  def gift_cards_filter_dropdown_value
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class ImportMappingsController < ResourceController
4
- belongs_to 'spree/import', find_by: :number
4
+ belongs_to 'spree/import', find_by: :prefix_id
5
5
 
6
6
  def update_turbo_stream_enabled?
7
7
  true
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class ImportRowsController < ResourceController
4
- belongs_to 'spree/import', find_by: :number
4
+ belongs_to 'spree/import', find_by: :prefix_id
5
5
  end
6
6
  end
7
7
  end
@@ -49,7 +49,7 @@ module Spree
49
49
 
50
50
  unless @integration.can_connect?
51
51
  @integration.errors.add(:base, :unable_to_connect, error_message: @integration.connection_error_message)
52
- render action == :create ? :new : :edit, status: :unprocessable_entity
52
+ render action == :create ? :new : :edit, status: :unprocessable_content
53
53
  end
54
54
  end
55
55
 
@@ -42,13 +42,14 @@ module Spree
42
42
  format.turbo_stream
43
43
  end
44
44
  else
45
- render :new, status: :unprocessable_entity
45
+ render :new, status: :unprocessable_content
46
46
  end
47
47
  end
48
48
 
49
49
  # GET /admin/invitations/:id?token=:token
50
50
  def show
51
- @invitation = Spree::Invitation.pending.not_expired.find_by!(id: params[:id], token: params[:token])
51
+ decoded_id = Spree::Invitation.decode_prefixed_id(params[:id])
52
+ @invitation = Spree::Invitation.pending.not_expired.find_by!(id: decoded_id, token: params[:token])
52
53
  @parent = @invitation.resource
53
54
 
54
55
  if try_spree_current_user.present?
@@ -68,7 +69,7 @@ module Spree
68
69
 
69
70
  # PUT /admin/invitations/:id/accept
70
71
  def accept
71
- @invitation = try_spree_current_user.invitations.pending.not_expired.find(params[:id])
72
+ @invitation = try_spree_current_user.invitations.pending.not_expired.find_by_prefix_id!(params[:id])
72
73
 
73
74
  authorize! :accept, @invitation
74
75
 
@@ -78,7 +79,7 @@ module Spree
78
79
 
79
80
  # PUT /admin/invitations/:id/resend
80
81
  def resend
81
- @invitation = scope.find(params[:id])
82
+ @invitation = scope.find_by_prefix_id!(params[:id])
82
83
  @invitation.resend!
83
84
  redirect_back fallback_location: spree.admin_invitations_path, notice: Spree.t('invitation_resent')
84
85
  end
@@ -94,7 +95,7 @@ module Spree
94
95
  private
95
96
 
96
97
  def load_invitation
97
- @invitation = scope.find(params[:id])
98
+ @invitation = scope.find_by_prefix_id!(params[:id])
98
99
  end
99
100
 
100
101
  def load_parent
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class LineItemsController < Spree::Admin::ResourceController
4
- belongs_to 'spree/order', find_by: :number
4
+ belongs_to 'spree/order', find_by: :prefix_id
5
5
 
6
6
  layout 'turbo_rails/frame'
7
7
 
@@ -0,0 +1,28 @@
1
+ module Spree
2
+ module Admin
3
+ class MarketsController < ResourceController
4
+ include Spree::Admin::SettingsConcern
5
+
6
+ before_action :load_data, except: :index
7
+ before_action :normalize_supported_locales, only: [:create, :update]
8
+
9
+ protected
10
+
11
+ def load_data
12
+ @countries = current_store.countries_with_shipping_coverage
13
+ end
14
+
15
+ def permitted_resource_params
16
+ params.require(:market).permit(permitted_market_attributes)
17
+ end
18
+
19
+ private
20
+
21
+ def normalize_supported_locales
22
+ if params.dig(:market, :supported_locales)&.is_a?(Array)
23
+ params[:market][:supported_locales] = params[:market][:supported_locales].compact.uniq.reject(&:blank?).join(',')
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class OptionValuesController < ResourceController
4
- belongs_to 'spree/option_type', find_by: :id
4
+ belongs_to 'spree/option_type', find_by: :prefix_id
5
5
 
6
6
  def select_options
7
7
  render json: @option_type.option_values.accessible_by(current_ability).to_tom_select_json
@@ -35,7 +35,7 @@ module Spree
35
35
  flash.now[:error] = @adjustment.errors.full_messages.to_sentence
36
36
  respond_to do |format|
37
37
  format.turbo_stream
38
- format.html { render :new, status: :unprocessable_entity }
38
+ format.html { render :new, status: :unprocessable_content }
39
39
  end
40
40
  end
41
41
  end
@@ -58,7 +58,7 @@ module Spree
58
58
  end
59
59
  else
60
60
  flash.now[:error] = @adjustment.errors.full_messages.to_sentence
61
- render :edit, status: :unprocessable_entity
61
+ render :edit, status: :unprocessable_content
62
62
  end
63
63
  end
64
64
 
@@ -102,12 +102,12 @@ module Spree
102
102
  end
103
103
 
104
104
  def load_order
105
- @order = current_store.orders.find_by!(number: params[:order_id])
105
+ @order = current_store.orders.find_by_prefix_id!(params[:order_id])
106
106
  authorize! :update, @order
107
107
  end
108
108
 
109
109
  def load_adjustment
110
- @adjustment = @order.all_adjustments.find(params[:id])
110
+ @adjustment = @order.all_adjustments.find_by_prefix_id!(params[:id])
111
111
  authorize! action, @adjustment
112
112
  end
113
113
 
@@ -20,7 +20,7 @@ module Spree
20
20
  @order.clone_shipping_address
21
21
 
22
22
  elsif params[:billing_address_id].present?
23
- @address = Spree::Address.accessible_by(current_ability, :manage).find(params[:billing_address_id])
23
+ @address = Spree::Address.accessible_by(current_ability, :manage).find_by_prefix_id!(params[:billing_address_id])
24
24
  @order.bill_address_id = @address.id
25
25
  else
26
26
  @order.bill_address_attributes = address_params
@@ -48,7 +48,7 @@ module Spree
48
48
  flash[:success] = Spree.t(:successfully_created, resource: Spree.t(:billing_address))
49
49
  redirect_to spree.edit_admin_order_path(@order)
50
50
  else
51
- render :create, status: :unprocessable_entity
51
+ render :create, status: :unprocessable_content
52
52
  end
53
53
  end
54
54
 
@@ -60,7 +60,7 @@ module Spree
60
60
  if params[:billing_address_type] == 'same_as_shipping'
61
61
  @order.clone_shipping_address
62
62
  elsif params[:billing_address_id].present?
63
- @address = Spree::Address.accessible_by(current_ability, :manage).find(params[:billing_address_id])
63
+ @address = Spree::Address.accessible_by(current_ability, :manage).find_by_prefix_id!(params[:billing_address_id])
64
64
  @order.bill_address_id = @address.id
65
65
  else
66
66
  @order.bill_address_attributes = address_params
@@ -88,7 +88,7 @@ module Spree
88
88
  flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:billing_address))
89
89
  redirect_to spree.edit_admin_order_path(@order)
90
90
  else
91
- render :update, status: :unprocessable_entity
91
+ render :update, status: :unprocessable_content
92
92
  end
93
93
  end
94
94
 
@@ -32,7 +32,7 @@ module Spree
32
32
  end
33
33
 
34
34
  def find_resource
35
- current_store.customer_returns.accessible_by(current_ability, :show).find(params[:id])
35
+ current_store.customer_returns.accessible_by(current_ability, :show).find_by_prefix_id!(params[:id])
36
36
  end
37
37
 
38
38
  def load_form_data
@@ -36,7 +36,7 @@ module Spree
36
36
 
37
37
  redirect_to spree.edit_admin_order_path(@order)
38
38
  else
39
- render :create, status: :unprocessable_entity
39
+ render :create, status: :unprocessable_content
40
40
  end
41
41
  end
42
42
 
@@ -46,7 +46,7 @@ module Spree
46
46
 
47
47
  def update
48
48
  if params[:shipping_address_id].present?
49
- @address = Spree::Address.accessible_by(current_ability, :manage).find(params[:shipping_address_id])
49
+ @address = Spree::Address.accessible_by(current_ability, :manage).find_by_prefix_id!(params[:shipping_address_id])
50
50
  @order.ship_address_id = @address.id
51
51
  else
52
52
  @order.ship_address_attributes = address_params
@@ -70,7 +70,7 @@ module Spree
70
70
 
71
71
  redirect_to spree.edit_admin_order_path(@order)
72
72
  else
73
- render :update, status: :unprocessable_entity
73
+ render :update, status: :unprocessable_content
74
74
  end
75
75
  end
76
76
 
@@ -29,11 +29,11 @@ module Spree
29
29
  redirect_to spree.edit_admin_order_path(@order)
30
30
  else
31
31
  flash[:error] = result.error.value.full_messages.to_sentence
32
- redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_entity
32
+ redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_content
33
33
  end
34
34
  else
35
35
  flash[:error] = @user.errors.full_messages.to_sentence
36
- redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_entity
36
+ redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_content
37
37
  end
38
38
  else
39
39
  @user = @order.build_user(user_params)
@@ -47,13 +47,13 @@ module Spree
47
47
  redirect_to spree.edit_admin_order_path(@order)
48
48
  else
49
49
  flash[:error] = @user.errors.full_messages.to_sentence
50
- redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_entity
50
+ redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_content
51
51
  end
52
52
  end
53
53
  end
54
54
 
55
55
  def update
56
- user = Spree.user_class.find(params[:user_id])
56
+ user = Spree.user_class.find_by_prefix_id!(params[:user_id])
57
57
  @order.associate_user!(user)
58
58
 
59
59
  if !@order.completed? && @order.line_items.any?
@@ -24,7 +24,7 @@ module Spree
24
24
  flash[:success] = flash_message_for(@order, :successfully_created)
25
25
  redirect_to spree.edit_admin_order_path(@order)
26
26
  else
27
- render :new, status: :unprocessable_entity
27
+ render :new, status: :unprocessable_content
28
28
  end
29
29
  end
30
30
 
@@ -47,8 +47,12 @@ module Spree
47
47
 
48
48
  # PUT /admin/orders/:id/cancel
49
49
  def cancel
50
- @order.canceled_by(try_spree_current_user)
51
- flash[:success] = Spree.t(:order_canceled)
50
+ result = @order.canceled_by(try_spree_current_user)
51
+ if result.success?
52
+ flash[:success] = Spree.t(:order_canceled)
53
+ else
54
+ flash[:error] = result.error.to_s
55
+ end
52
56
  redirect_back fallback_location: spree.edit_admin_order_url(@order)
53
57
  end
54
58
 
@@ -102,7 +106,7 @@ module Spree
102
106
  end
103
107
 
104
108
  def load_order
105
- @order = scope.includes(:adjustments).find_by!(number: params[:id])
109
+ @order = scope.includes(:adjustments).find_by_prefix_id!(params[:id])
106
110
  authorize! action, @order
107
111
  end
108
112
 
@@ -3,7 +3,7 @@ module Spree
3
3
  class PaymentsController < Spree::Admin::ResourceController
4
4
  include Spree::Admin::OrderBreadcrumbConcern
5
5
 
6
- belongs_to 'spree/order', find_by: :number
6
+ belongs_to 'spree/order', find_by: :prefix_id
7
7
 
8
8
  before_action :load_data
9
9
  before_action :proceed_order_state, only: :new
@@ -48,13 +48,13 @@ module Spree
48
48
  invoke_callbacks(:create, :fails)
49
49
 
50
50
  flash[:error] = e.message.to_s
51
- render :new, status: :unprocessable_entity
51
+ render :new, status: :unprocessable_content
52
52
  rescue ActiveRecord::RecordInvalid => _e
53
53
  @object.failure if defined?(@object) && @object.persisted?
54
54
  invoke_callbacks(:create, :fails)
55
55
 
56
56
  flash[:error] = @object.errors.full_messages.to_sentence
57
- render :new, status: :unprocessable_entity
57
+ render :new, status: :unprocessable_content
58
58
  end
59
59
 
60
60
  def capture
@@ -3,7 +3,7 @@ module Spree
3
3
  class PriceListProductsController < ResourceController
4
4
  include BulkOperationsConcern
5
5
 
6
- belongs_to 'spree/price_list', find_by: :id
6
+ belongs_to 'spree/price_list', find_by: :prefix_id
7
7
 
8
8
  before_action :set_price_list
9
9
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class PriceRulesController < ResourceController
4
- belongs_to 'spree/price_list', find_by: :id
4
+ belongs_to 'spree/price_list', find_by: :prefix_id
5
5
 
6
6
  helper_method :allowed_rule_types
7
7