spree_admin 5.1.1 → 5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/spree/admin/components/_buttons.scss +1 -1
- data/app/assets/stylesheets/spree/admin/components/_main.scss +46 -0
- data/app/controllers/spree/admin/dashboard_controller.rb +6 -0
- data/app/controllers/spree/admin/digital_assets_controller.rb +1 -0
- data/app/controllers/spree/admin/reports_controller.rb +14 -2
- data/app/controllers/spree/admin/storefront_controller.rb +1 -1
- data/app/helpers/spree/admin/base_helper.rb +10 -0
- data/app/helpers/spree/admin/orders_filters_helper.rb +5 -4
- data/app/helpers/spree/admin/products_helper.rb +1 -1
- data/app/models/spree/admin/updater.rb +9 -5
- data/app/views/spree/admin/admin_users/show.html.erb +1 -1
- data/app/views/spree/admin/dashboard/_updater.html.erb +15 -5
- data/app/views/spree/admin/dashboard/getting_started.html.erb +1 -3
- data/app/views/spree/admin/dashboard/show.html.erb +2 -2
- data/app/views/spree/admin/integrations/index.html.erb +16 -16
- data/app/views/spree/admin/pages/index.html.erb +2 -1
- data/app/views/spree/admin/payment_methods/_form.html.erb +47 -54
- data/app/views/spree/admin/payment_methods/edit.html.erb +7 -3
- data/app/views/spree/admin/payment_methods/new.html.erb +7 -4
- data/app/views/spree/admin/profile/edit.html.erb +6 -8
- data/app/views/spree/admin/promotions/new.html.erb +51 -5
- data/app/views/spree/admin/shared/_content_header.html.erb +3 -3
- data/app/views/spree/admin/shared/_stock_nav.html.erb +2 -4
- data/app/views/spree/admin/shared/sidebar/_enterprise_edition_notice.html.erb +1 -1
- data/app/views/spree/admin/storefront/edit.html.erb +6 -6
- data/app/views/spree/admin/stores/edit.html.erb +0 -1
- data/app/views/spree/admin/stores/form/_checkout.html.erb +20 -24
- data/app/views/spree/admin/stores/form/_emails.html.erb +16 -18
- data/app/views/spree/admin/variants/edit.html.erb +3 -6
- data/config/routes.rb +2 -1
- metadata +8 -9
- data/app/views/spree/admin/promotions/_form.html.erb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38049374f6d7f79407c48dfcf500d7fdc68d33066be7a19aa9ed6d43097f0251
|
4
|
+
data.tar.gz: 3b6da7a55d29b372f6e1ea85550eb83834a85220b3386f3168ecd551a892b2b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f7a0c8b6512c468a00bcbbe83d674191984292b00349a2cdafd1fc2f4ab1213f839a9a2bc2e3901811f4bc3ff880f338892e7a6d0e02ae772bad0cf27a36cd9
|
7
|
+
data.tar.gz: 1177771475c2b570e542146d1e2e860bf11fe6960cd4ee5e46f2d8022abba0c52f8036b95a393d004183d9f68a30ef849a8c0f50d505f83dcf2aa631790dbc87
|
@@ -25,6 +25,37 @@
|
|
25
25
|
font-size: 1.25rem;
|
26
26
|
}
|
27
27
|
|
28
|
+
#page-tabs {
|
29
|
+
border-bottom: 1px solid $border-color;
|
30
|
+
margin-bottom: 1rem;
|
31
|
+
padding-left: 1.5rem;
|
32
|
+
padding-right: 1.5rem;
|
33
|
+
margin-top: -1rem;
|
34
|
+
|
35
|
+
.nav {
|
36
|
+
gap: 1rem;
|
37
|
+
display: flex;
|
38
|
+
flex-wrap: nowrap;
|
39
|
+
overflow-x: auto;
|
40
|
+
padding-left: 0;
|
41
|
+
margin-bottom: -1px;
|
42
|
+
|
43
|
+
.nav-link {
|
44
|
+
border-radius: 0;
|
45
|
+
padding-bottom: 1rem;
|
46
|
+
padding-top: 1rem;
|
47
|
+
padding-left: 0rem;
|
48
|
+
padding-right: 0rem;
|
49
|
+
|
50
|
+
&.active {
|
51
|
+
background-color: transparent;
|
52
|
+
color: theme-color('primary');
|
53
|
+
font-weight: 600;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
28
59
|
.store-dropdown {
|
29
60
|
display: flex;
|
30
61
|
align-items: center;
|
@@ -245,6 +276,21 @@
|
|
245
276
|
}
|
246
277
|
}
|
247
278
|
|
279
|
+
#updater-notice {
|
280
|
+
background-color: $white;
|
281
|
+
width: 100%;
|
282
|
+
display: flex;
|
283
|
+
flex-direction: row;
|
284
|
+
gap: 1rem;
|
285
|
+
justify-content: flex-start;
|
286
|
+
align-items: center;
|
287
|
+
padding: 0.5rem 0.5rem;
|
288
|
+
border: 1px solid $border-color;
|
289
|
+
border-radius: $border-radius-lg;
|
290
|
+
box-shadow: $box-shadow-xs;
|
291
|
+
}
|
292
|
+
|
293
|
+
|
248
294
|
.documentation-link-container {
|
249
295
|
font-size: $font-size-sm;
|
250
296
|
text-align: center;
|
@@ -64,6 +64,12 @@ module Spree
|
|
64
64
|
redirect_back(fallback_location: spree.admin_dashboard_path)
|
65
65
|
end
|
66
66
|
|
67
|
+
# PATCH /admin/dashboard/dismiss_updater_notice
|
68
|
+
def dismiss_updater_notice
|
69
|
+
session[:spree_updater_notice_dismissed] = { value: true, expires_at: 7.days.from_now }
|
70
|
+
redirect_back(fallback_location: spree.admin_dashboard_path)
|
71
|
+
end
|
72
|
+
|
67
73
|
private
|
68
74
|
|
69
75
|
def load_vendor
|
@@ -31,7 +31,10 @@ module Spree
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def build_resource
|
34
|
-
model_class.new(store: current_store,
|
34
|
+
model_class.new(store: current_store,
|
35
|
+
date_from: parse_date_param(params[:date_from]),
|
36
|
+
date_to: parse_date_param(params[:date_to])&.end_of_day,
|
37
|
+
currency: params[:currency])
|
35
38
|
end
|
36
39
|
|
37
40
|
def model_class
|
@@ -55,7 +58,16 @@ module Spree
|
|
55
58
|
end
|
56
59
|
|
57
60
|
def permitted_resource_params
|
58
|
-
params.require(:report).permit(permitted_report_attributes)
|
61
|
+
attributes = params.require(:report).permit(permitted_report_attributes)
|
62
|
+
attributes[:date_from] = parse_date_param(attributes[:date_from]) if attributes[:date_from].present?
|
63
|
+
attributes[:date_to] = parse_date_param(attributes[:date_to])&.end_of_day if attributes[:date_to].present?
|
64
|
+
attributes
|
65
|
+
end
|
66
|
+
|
67
|
+
def parse_date_param(date_string)
|
68
|
+
return if date_string.blank?
|
69
|
+
|
70
|
+
date_string.to_date&.in_time_zone(current_timezone)
|
59
71
|
end
|
60
72
|
end
|
61
73
|
end
|
@@ -29,7 +29,7 @@ module Spree
|
|
29
29
|
:meta_description, :meta_title, :meta_keywords, :seo_robots,
|
30
30
|
:facebook, :twitter, :instagram, :linkedin, :youtube, :tiktok, :pinterest,
|
31
31
|
:storefront_custom_code_head, :storefront_custom_code_body_start,
|
32
|
-
:storefront_custom_code_body_end, :storefront_password
|
32
|
+
:storefront_custom_code_body_end, :storefront_password, :spotify, :discord
|
33
33
|
)
|
34
34
|
end
|
35
35
|
|
@@ -13,6 +13,7 @@ module Spree
|
|
13
13
|
defined?(SpreeEnterprise)
|
14
14
|
end
|
15
15
|
|
16
|
+
# @return [Spree::Admin::Updater] the spree updater
|
16
17
|
def spree_updater
|
17
18
|
@spree_updater ||= Spree::Admin::Updater
|
18
19
|
end
|
@@ -21,6 +22,15 @@ module Spree
|
|
21
22
|
@spree_update_available ||= !Rails.env.test? && spree_updater.update_available?
|
22
23
|
end
|
23
24
|
|
25
|
+
def updater_notice_dismissed?
|
26
|
+
dismissal_data = session[:spree_updater_notice_dismissed]
|
27
|
+
dismissal_data.is_a?(Hash) && dismissal_data['expires_at'].to_time > Time.current
|
28
|
+
end
|
29
|
+
|
30
|
+
def show_spree_updater_notice?
|
31
|
+
Spree::Admin::RuntimeConfig.admin_updater_enabled && can?(:manage, current_store) && spree_update_available? && !updater_notice_dismissed?
|
32
|
+
end
|
33
|
+
|
24
34
|
# check if the current controller is a settings controller
|
25
35
|
# this is used to display different sidebar navigation for settings pages
|
26
36
|
# @return [Boolean]
|
@@ -14,7 +14,8 @@ module Spree
|
|
14
14
|
|
15
15
|
if search_params[:created_at_gt].present?
|
16
16
|
search_params[:created_at_gt] = begin
|
17
|
-
|
17
|
+
# Firstly we parse to date to avoid issues with timezones because frontend sends time in local timezone
|
18
|
+
search_params[:created_at_gt].to_date&.in_time_zone(current_timezone)
|
18
19
|
rescue StandardError
|
19
20
|
''
|
20
21
|
end
|
@@ -22,7 +23,7 @@ module Spree
|
|
22
23
|
|
23
24
|
if search_params[:created_at_lt].present?
|
24
25
|
search_params[:created_at_lt] = begin
|
25
|
-
|
26
|
+
search_params[:created_at_lt].to_date&.in_time_zone(current_timezone)&.end_of_day
|
26
27
|
rescue StandardError
|
27
28
|
''
|
28
29
|
end
|
@@ -30,7 +31,7 @@ module Spree
|
|
30
31
|
|
31
32
|
if search_params[:completed_at_gt].present?
|
32
33
|
search_params[:completed_at_gt] = begin
|
33
|
-
|
34
|
+
search_params[:completed_at_gt].to_date&.in_time_zone(current_timezone)
|
34
35
|
rescue StandardError
|
35
36
|
''
|
36
37
|
end
|
@@ -38,7 +39,7 @@ module Spree
|
|
38
39
|
|
39
40
|
if search_params[:completed_at_lt].present?
|
40
41
|
search_params[:completed_at_lt] = begin
|
41
|
-
|
42
|
+
search_params[:completed_at_lt].to_date&.in_time_zone(current_timezone)&.end_of_day
|
42
43
|
rescue StandardError
|
43
44
|
''
|
44
45
|
end
|
@@ -124,7 +124,7 @@ module Spree
|
|
124
124
|
end
|
125
125
|
|
126
126
|
def sorted_product_properties(product)
|
127
|
-
product.product_properties.
|
127
|
+
product.product_properties.sort_by { |product_property| product_property.property.position }
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
@@ -5,7 +5,7 @@ require 'uri'
|
|
5
5
|
module Spree
|
6
6
|
module Admin
|
7
7
|
class Updater
|
8
|
-
SPREE_CLOUD_UPDATES_URL = 'https://spreecloud.io/updates.json'
|
8
|
+
SPREE_CLOUD_UPDATES_URL = 'https://spreecloud.io/updates.json'.freeze
|
9
9
|
|
10
10
|
@updates = nil
|
11
11
|
|
@@ -13,14 +13,18 @@ module Spree
|
|
13
13
|
fetch_updates.any?
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.
|
17
|
-
@
|
16
|
+
def self.latest_release
|
17
|
+
@latest_release ||= fetch_updates.first
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.current_release
|
21
|
+
@current_release ||= Spree.version
|
18
22
|
end
|
19
23
|
|
20
24
|
def self.fetch_updates
|
21
|
-
@updates ||= Rails.cache.fetch("spree/admin/updater/fetch_updates/#{
|
25
|
+
@updates ||= Rails.cache.fetch("spree/admin/updater/fetch_updates/#{current_release}", expires_in: 1.day) do
|
22
26
|
uri = URI(SPREE_CLOUD_UPDATES_URL)
|
23
|
-
params = { version:
|
27
|
+
params = { version: current_release, environment: Rails.env, url: Spree::Store.current.url_or_custom_domain }
|
24
28
|
uri.query = URI.encode_www_form(params)
|
25
29
|
|
26
30
|
http = Net::HTTP.new(uri.host, uri.port)
|
@@ -1,9 +1,19 @@
|
|
1
|
-
<% if
|
2
|
-
<div class="
|
3
|
-
|
4
|
-
|
1
|
+
<% if show_spree_updater_notice? %>
|
2
|
+
<div id="updater-notice" class="mb-3">
|
3
|
+
<%= image_tag 'favicon_256x256.png', alt: 'Spree', width: 32, height: 32 %>
|
4
|
+
<div class="d-flex flex-column">
|
5
|
+
<p class="mb-1">
|
6
|
+
<strong>Spree <%= spree_updater.latest_release['name'] %></strong> is available.
|
7
|
+
<br />Your current version is <strong>Spree <%= spree_updater.current_release %></strong>.
|
8
|
+
</p>
|
5
9
|
|
6
|
-
|
10
|
+
<% if spree_updater.latest_release['url'] %>
|
11
|
+
<div>
|
12
|
+
<%= external_link_to "View release notes", spree_updater.latest_release['url'], target: '_blank', class: 'btn btn-sm btn-link' %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
7
15
|
</div>
|
16
|
+
|
17
|
+
<%= link_to '', spree.admin_dismiss_updater_notice_path, data: { turbo_method: :patch }, class: 'btn-close ml-auto' %>
|
8
18
|
</div>
|
9
19
|
<% end %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div class="row pt-3">
|
2
|
-
<div class="col-lg-8 mb-4">
|
2
|
+
<div class="col-lg-8 offset-lg-2 mb-4">
|
3
3
|
<h2 class="page-header-title">
|
4
4
|
<%= Spree.t('admin.getting_started') %>
|
5
5
|
</h2>
|
@@ -17,6 +17,4 @@
|
|
17
17
|
<% end %>
|
18
18
|
<% end %>
|
19
19
|
</div>
|
20
|
-
<div class="col-lg-4">
|
21
|
-
</div>
|
22
20
|
</div>
|
@@ -15,8 +15,8 @@
|
|
15
15
|
<%= form_tag spree.admin_dashboard_analytics_path, method: :get, data: { turbo_frame: :analytics } do %>
|
16
16
|
<%= hidden_field_tag :vendor_id, @vendor.id if @vendor.present? %>
|
17
17
|
<%= render 'spree/admin/shared/calendar_range_picker',
|
18
|
-
date_from_value: params[:date_from] || 1.month.ago.
|
19
|
-
date_to_value: params[:date_to] ||
|
18
|
+
date_from_value: params[:date_from] || 1.month.ago.end_of_day,
|
19
|
+
date_to_value: params[:date_to] || Time.zone.now.beginning_of_day,
|
20
20
|
css_classes: "btn btn-sm border rounded-lg hover-light d-inline-flex align-items-center h-100 dropdown-toggle" %>
|
21
21
|
<% end %>
|
22
22
|
</div>
|
@@ -2,22 +2,22 @@
|
|
2
2
|
<%= Spree.t(:integrations) %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
|
6
|
-
<div class="
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<div class="container px-lg-0 mt-2">
|
12
|
-
<% grouped_available_store_integrations.each do |group, integrations| %>
|
13
|
-
<% if group.present? %>
|
14
|
-
<div class="my-2 text-muted font-weight-light text-uppercase"><%= Spree.t(group) %></div>
|
15
|
-
<% end %>
|
5
|
+
<div class="row">
|
6
|
+
<div class="col-lg-8 offset-lg-2">
|
7
|
+
<div class="alert alert-info mb-4">
|
8
|
+
<%= Spree.t('admin.integrations.page_subtitle') %>
|
9
|
+
</div>
|
16
10
|
|
17
|
-
|
18
|
-
<%
|
19
|
-
|
11
|
+
<% grouped_available_store_integrations.each do |group, integrations| %>
|
12
|
+
<% if group.present? %>
|
13
|
+
<div class="my-2 text-muted font-weight-light text-uppercase"><%= Spree.t(group) %></div>
|
20
14
|
<% end %>
|
21
|
-
|
22
|
-
|
15
|
+
|
16
|
+
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 mb-4">
|
17
|
+
<% integrations.each do |integration| %>
|
18
|
+
<%= render 'spree/admin/integrations/integration', integration_class: integration %>
|
19
|
+
<% end %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
23
|
</div>
|
@@ -19,7 +19,8 @@
|
|
19
19
|
</tr>
|
20
20
|
</thead>
|
21
21
|
<tbody>
|
22
|
-
|
22
|
+
<% default_theme = current_store.default_theme %>
|
23
|
+
<%= render collection: @collection, partial: "spree/admin/pages/page", cached: ->(page) { [*spree_base_cache_scope.call(page), default_theme] } %>
|
23
24
|
</tbody>
|
24
25
|
</table>
|
25
26
|
<%= render "spree/admin/shared/index_table_options", collection: @collection %>
|
@@ -2,69 +2,62 @@
|
|
2
2
|
<%= render "spree/admin/payment_methods/configuration_guides/#{@object.configuration_guide_partial_name}", f: f %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
+
<% if !preference_fields(@object, f).empty? || @object.respond_to?(:custom_form_fields_partial_name) %>
|
6
|
+
<div class="card mb-4">
|
7
|
+
<div class="card-header">
|
8
|
+
<h5 class="card-title"><%= Spree.t(:payment_provider_settings) %></h5>
|
9
|
+
</div>
|
10
|
+
<div class="card-body">
|
11
|
+
<%= preference_fields(@object, f) unless preference_fields(@object, f).empty? %>
|
5
12
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<div class="card mb-4">
|
10
|
-
<div class="card-header">
|
11
|
-
<h5 class="card-title"><%= Spree.t(:payment_provider_settings) %></h5>
|
12
|
-
</div>
|
13
|
-
<div class="card-body">
|
14
|
-
<%= preference_fields(@object, f) unless preference_fields(@object, f).empty? %>
|
15
|
-
|
16
|
-
<% if @object.respond_to?(:custom_form_fields_partial_name) %>
|
17
|
-
<%= render "spree/admin/payment_methods/custom_form_fields/#{@object.custom_form_fields_partial_name}", f: f %>
|
18
|
-
<% end %>
|
19
|
-
</div>
|
20
|
-
</div>
|
13
|
+
<% if @object.respond_to?(:custom_form_fields_partial_name) %>
|
14
|
+
<%= render "spree/admin/payment_methods/custom_form_fields/#{@object.custom_form_fields_partial_name}", f: f %>
|
15
|
+
<% end %>
|
21
16
|
</div>
|
22
|
-
|
17
|
+
</div>
|
18
|
+
<% end %>
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
</span>
|
20
|
+
<div class="card mb-4">
|
21
|
+
<div class="card-header">
|
22
|
+
<h5 class="card-title"><%= Spree.t(:display_settings) %></h5>
|
23
|
+
</div>
|
24
|
+
<div class="card-body">
|
25
|
+
<div class="form-group">
|
26
|
+
<%= label_tag :payment_method_name, Spree.t(:name) %>
|
27
|
+
<%= text_field :payment_method, :name, class: 'form-control' %>
|
28
|
+
<span class="text-muted form-text mt-2">
|
29
|
+
This name will be used to identify the payment method on the storefront
|
30
|
+
</span>
|
36
31
|
|
37
|
-
|
38
|
-
|
32
|
+
<%= error_message_on :payment_method, :name %>
|
33
|
+
</div>
|
39
34
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
</div>
|
48
|
-
<% end %>
|
35
|
+
<% if can?(:manage, Spree::Store) && available_stores.count > 1 %>
|
36
|
+
<div class="form-group">
|
37
|
+
<%= label_tag :payment_method_stores, Spree.t(:stores) %>
|
38
|
+
<%= f.collection_check_boxes :store_ids, available_stores, :id, :name do |b| %>
|
39
|
+
<div class="custom-control custom-checkbox mb-1">
|
40
|
+
<%= b.check_box(class: 'custom-control-input') %>
|
41
|
+
<%= b.label(class: 'custom-control-label') %>
|
49
42
|
</div>
|
50
43
|
<% end %>
|
44
|
+
</div>
|
45
|
+
<% end %>
|
51
46
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
47
|
+
<div class="form-group">
|
48
|
+
<%= label_tag :payment_method_display_on, Spree.t(:display) %>
|
49
|
+
<%= f.select :display_on, display_on_options, {}, { class: 'custom-select' } %>
|
50
|
+
</div>
|
51
|
+
<div class="form-group">
|
52
|
+
<%= label_tag :payment_method_auto_capture, Spree.t(:auto_capture) %>
|
53
|
+
<%= select(:payment_method, :auto_capture, [["#{Spree.t(:use_app_default)} (#{Spree::Config[:auto_capture]})", ''], [Spree.t(:say_yes).to_s, true], [Spree.t(:say_no).to_s, false]], {}, {class: 'custom-select'}) %>
|
54
|
+
</div>
|
60
55
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
</div>
|
67
|
-
</div>
|
56
|
+
<div class="form-group">
|
57
|
+
<label><%= Spree.t(:active) %></label>
|
58
|
+
<div class="custom-control custom-switch">
|
59
|
+
<%= f.check_box :active, class: 'custom-control-input' %>
|
60
|
+
<%= f.label :active, ' '.html_safe, class: 'custom-control-label' %>
|
68
61
|
</div>
|
69
62
|
</div>
|
70
63
|
</div>
|
@@ -2,9 +2,13 @@
|
|
2
2
|
<%= page_header_back_button spree.admin_payment_methods_path %>
|
3
3
|
<%= @payment_method.name %>
|
4
4
|
<% end %>
|
5
|
-
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @payment_method } %>
|
6
5
|
|
7
6
|
<%= form_for @payment_method, as: :payment_method, url: spree.admin_payment_method_path(@payment_method) do |f| %>
|
8
|
-
|
9
|
-
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-lg-6 offset-lg-3">
|
9
|
+
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @payment_method } %>
|
10
|
+
<%= render 'form', f: f %>
|
11
|
+
<%= render 'spree/admin/shared/edit_resource_links', f: f %>
|
12
|
+
</div>
|
13
|
+
</div>
|
10
14
|
<% end %>
|
@@ -3,10 +3,13 @@
|
|
3
3
|
<%= @payment_method.name %>
|
4
4
|
<% end %>
|
5
5
|
|
6
|
-
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @payment_method } %>
|
7
|
-
|
8
6
|
<%= form_for @payment_method, as: :payment_method, url: spree.admin_payment_methods_path do |f| %>
|
9
7
|
<%= f.hidden_field :type %>
|
10
|
-
|
11
|
-
|
8
|
+
<div class="row">
|
9
|
+
<div class="col-lg-6 offset-lg-3">
|
10
|
+
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @payment_method } %>
|
11
|
+
<%= render 'form', f: f %>
|
12
|
+
<%= render 'spree/admin/shared/new_resource_links' %>
|
13
|
+
</div>
|
14
|
+
</div>
|
12
15
|
<% end %>
|
@@ -2,10 +2,14 @@
|
|
2
2
|
<%= Spree.t('admin.edit_profile') %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
+
<%= content_for :page_actions do %>
|
6
|
+
<%= turbo_save_button_tag Spree.t('actions.update'), form: 'edit_user' %>
|
7
|
+
<% end %>
|
8
|
+
|
5
9
|
<%= form_for @user, url: spree.admin_profile_path, method: :put, as: :user do |f| %>
|
6
10
|
<div class="row">
|
7
|
-
<div class="col-lg-6
|
8
|
-
<div class="card">
|
11
|
+
<div class="col-lg-6 offset-lg-3">
|
12
|
+
<div class="card mb-4">
|
9
13
|
<div class="card-header">
|
10
14
|
<h5 class="card-title"><%= Spree.t('admin.personal_details') %></h5>
|
11
15
|
</div>
|
@@ -30,9 +34,7 @@
|
|
30
34
|
</div>
|
31
35
|
</div>
|
32
36
|
</div>
|
33
|
-
</div>
|
34
37
|
|
35
|
-
<div class="col-lg-6 mb-4">
|
36
38
|
<div class="card">
|
37
39
|
<div class="card-header">
|
38
40
|
<h5 class="card-title"><%= Spree.t('admin.notifications') %></h5>
|
@@ -72,8 +74,4 @@
|
|
72
74
|
</div>
|
73
75
|
</div>
|
74
76
|
</div>
|
75
|
-
|
76
|
-
<div class="form-actions">
|
77
|
-
<%= turbo_save_button_tag Spree.t('actions.update') %>
|
78
|
-
</div>
|
79
77
|
<% end %>
|
@@ -3,9 +3,55 @@
|
|
3
3
|
<%= Spree.t(:new_promotion) %>
|
4
4
|
<% end %>
|
5
5
|
<%= form_for :promotion, url: collection_url do |f| %>
|
6
|
-
|
7
|
-
<
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-12 col-lg-6 offset-lg-3">
|
9
|
+
<%= render 'spree/admin/shared/error_messages', target: @promotion %>
|
10
|
+
|
11
|
+
<div class="card mb-4">
|
12
|
+
<div class="card-header">
|
13
|
+
<h5 class="card-title">
|
14
|
+
<%= Spree.t(:details) %>
|
15
|
+
</h5>
|
16
|
+
</div>
|
17
|
+
<div class="card-body">
|
18
|
+
<div class="form-group">
|
19
|
+
<%= f.label :name %>
|
20
|
+
<%= f.text_field :name, class: 'form-control', required: true, autofocus: true %>
|
21
|
+
<%= f.error_message_on :name %>
|
22
|
+
<span class="form-text text-muted mt-2">
|
23
|
+
Customers will see this in their cart and at checkout.
|
24
|
+
</span>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class="card mb-4">
|
30
|
+
<div class="card-header">
|
31
|
+
<h5 class="card-title">
|
32
|
+
<%= Spree.t(:kind) %>
|
33
|
+
</h5>
|
34
|
+
</div>
|
35
|
+
<div class="card-body">
|
36
|
+
<%= render 'spree/admin/promotions/form/kind', f: f %>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class="card mb-4">
|
41
|
+
<div class="card-header">
|
42
|
+
<h5 class="card-title">
|
43
|
+
<%= Spree.t(:settings) %>
|
44
|
+
</h5>
|
45
|
+
</div>
|
46
|
+
<div class="card-body">
|
47
|
+
<%= render 'spree/admin/promotions/form/settings', f: f %>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
|
51
|
+
<p class="alert alert-info text-center">
|
52
|
+
In the next step you will be able to add actions and rules to your promotion
|
53
|
+
</p>
|
54
|
+
<%= render 'spree/admin/shared/new_resource_links' %>
|
55
|
+
</div>
|
56
|
+
</div>
|
11
57
|
<% end %>
|
@@ -38,7 +38,7 @@
|
|
38
38
|
<% if record.respond_to?(:audits) && spree.respond_to?(:admin_audits_path) && defined?(Audited) && can?(:read, Audited.audit_class) %>
|
39
39
|
<a href="<%= spree.admin_audits_path(q: { auditable_id_eq: record.id, auditable_type_eq: record.class.to_s }) %>" target="_blank" class="dropdown-item">
|
40
40
|
<%= icon 'history' %>
|
41
|
-
<%= Spree.t(
|
41
|
+
<%= Spree.t('admin.audit_log') %>
|
42
42
|
</a>
|
43
43
|
<% end %>
|
44
44
|
<% if record.respond_to?(:number) %>
|
@@ -71,8 +71,8 @@
|
|
71
71
|
<% end %>
|
72
72
|
|
73
73
|
<% if content_for?(:page_tabs) %>
|
74
|
-
<div class="container">
|
75
|
-
<ul class="nav
|
74
|
+
<div class="container-fluid" id="page-tabs">
|
75
|
+
<ul class="nav">
|
76
76
|
<%= yield :page_tabs %>
|
77
77
|
</ul>
|
78
78
|
</div>
|
@@ -1,4 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<%= nav_item(Spree.t(:stock_transfers), spree.admin_stock_transfers_path) if can?(:manage, Spree::StockTransfer) %>
|
4
|
-
</ul>
|
1
|
+
<%= nav_item(Spree.t(:stock_items), spree.admin_stock_items_path) if can?(:manage, Spree::StockItem) %>
|
2
|
+
<%= nav_item(Spree.t(:stock_transfers), spree.admin_stock_transfers_path) if can?(:manage, Spree::StockTransfer) %>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<% unless session[:spree_enterprise_edition_notice_dismissed] %>
|
3
3
|
<section class="d-none d-lg-block">
|
4
4
|
<div id="enterprise-edition-notice">
|
5
|
-
<%= link_to '', spree.admin_dismiss_enterprise_edition_notice_path,
|
5
|
+
<%= link_to '', spree.admin_dismiss_enterprise_edition_notice_path, data: { turbo_method: :patch }, class: 'btn-close' %>
|
6
6
|
<p>You're using Spree Community Edition. To get access to all features, please upgrade to Enterprise Edition.</p>
|
7
7
|
|
8
8
|
<%= external_link_to 'Upgrade', 'https://spreecommerce.org/pricing', target: '_blank', class: 'btn btn-link btn-sm shadow-xs' %>
|
@@ -6,15 +6,19 @@
|
|
6
6
|
<%= Spree.t(:settings) %>
|
7
7
|
<% end %>
|
8
8
|
|
9
|
-
<%= content_for(:
|
9
|
+
<%= content_for(:page_actions_dropdown) do %>
|
10
10
|
<%= link_to_edit_translations(@store) %>
|
11
11
|
<% end %>
|
12
12
|
|
13
|
+
<%= content_for(:page_actions) do %>
|
14
|
+
<%= turbo_save_button_tag Spree.t('actions.update'), form: "edit_store_#{@store.id}" %>
|
15
|
+
<% end %>
|
16
|
+
|
13
17
|
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @store }, class: 'mb-5 pb-5' %>
|
14
18
|
|
15
19
|
<%= form_for @store, url: spree.admin_storefront_path, method: :patch do |f| %>
|
16
20
|
<div class="row">
|
17
|
-
<div class="col-lg-6">
|
21
|
+
<div class="col-lg-6 offset-lg-3">
|
18
22
|
<div class="card mb-4">
|
19
23
|
<div class="card-header">
|
20
24
|
<h5 class="card-title">
|
@@ -85,9 +89,7 @@
|
|
85
89
|
</div>
|
86
90
|
</div>
|
87
91
|
</div>
|
88
|
-
</div>
|
89
92
|
|
90
|
-
<div class="col-lg-6">
|
91
93
|
<div class="card mb-4">
|
92
94
|
<div class="card-header">
|
93
95
|
<h5 class="card-title">
|
@@ -139,6 +141,4 @@
|
|
139
141
|
</div>
|
140
142
|
</div>
|
141
143
|
</div>
|
142
|
-
|
143
|
-
<%= render 'spree/admin/stores/form/buttons' %>
|
144
144
|
<% end %>
|
@@ -9,5 +9,4 @@
|
|
9
9
|
<%= render partial: 'spree/admin/stores/form/emails', locals: { f: f } if params[:section] == 'emails' %>
|
10
10
|
<%= render partial: 'spree/admin/stores/form/checkout', locals: { f: f } if params[:section] == 'checkout' %>
|
11
11
|
<%= render partial: 'spree/admin/stores/form/policies', locals: { f: f } if params[:section] == 'policies' %>
|
12
|
-
<%= render 'spree/admin/stores/form/buttons' %>
|
13
12
|
<% end %>
|
@@ -2,33 +2,14 @@
|
|
2
2
|
<%= Spree.t(:checkout) %> <%= Spree.t(:settings) %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
<%= content_for :page_alerts do %>
|
6
|
-
<div class="alert alert-info mb-3">
|
7
|
-
<p>
|
8
|
-
<%= Spree.t('admin.checkout_settings.policy_copy', policies_link: link_to(Spree.t(:policies), spree.edit_admin_store_path + '?section=policies', class: 'alert-link')).html_safe %>
|
9
|
-
</p>
|
10
|
-
</div>
|
11
|
-
<% end %>
|
12
|
-
|
13
5
|
<div class="row">
|
14
|
-
<div class="col-lg-
|
15
|
-
<div class="
|
16
|
-
<
|
17
|
-
|
18
|
-
</
|
19
|
-
|
20
|
-
<div class="card-body">
|
21
|
-
<p class="text-muted">
|
22
|
-
<%= Spree.t('admin.checkout_settings.checkout_message_description') %>
|
23
|
-
</p>
|
24
|
-
<div class="trix-container">
|
25
|
-
<%= f.rich_text_area :checkout_message, class: 'overflow-auto', style: 'height: 300px' %>
|
26
|
-
</div>
|
27
|
-
</div>
|
6
|
+
<div class="col-lg-6 offset-lg-3">
|
7
|
+
<div class="alert alert-info mb-3">
|
8
|
+
<p>
|
9
|
+
<%= Spree.t('admin.checkout_settings.policy_copy', policies_link: link_to(Spree.t(:policies), spree.edit_admin_store_path + '?section=policies', class: 'alert-link')).html_safe %>
|
10
|
+
</p>
|
28
11
|
</div>
|
29
|
-
</div>
|
30
12
|
|
31
|
-
<div class="col-lg-5">
|
32
13
|
<div class="card mb-4">
|
33
14
|
<div class="card-header">
|
34
15
|
<h5 class="card-title"><%= Spree.t(:settings) %></h5>
|
@@ -66,5 +47,20 @@
|
|
66
47
|
</div>
|
67
48
|
</div>
|
68
49
|
</div>
|
50
|
+
|
51
|
+
<div class="card mb-4">
|
52
|
+
<div class="card-header">
|
53
|
+
<h5 class="card-title"><%= Spree.t(:checkout_message) %></h5>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
<div class="card-body">
|
57
|
+
<p class="text-muted">
|
58
|
+
<%= Spree.t('admin.checkout_settings.checkout_message_description') %>
|
59
|
+
</p>
|
60
|
+
<div class="trix-container">
|
61
|
+
<%= f.rich_text_area :checkout_message, class: 'overflow-auto', style: 'height: 300px' %>
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
</div>
|
69
65
|
</div>
|
70
66
|
</div>
|
@@ -3,24 +3,7 @@
|
|
3
3
|
<% end %>
|
4
4
|
|
5
5
|
<div class="row">
|
6
|
-
<div class="col-lg-6">
|
7
|
-
<div class="card mb-4">
|
8
|
-
<div class="card-header">
|
9
|
-
<h5 class="card-title">Logo for emails</h5>
|
10
|
-
</div>
|
11
|
-
<div class="card-body">
|
12
|
-
<p class="text-muted">This logo is included in all email notifications such as order confirmation</p>
|
13
|
-
<%= render 'active_storage/upload_form', form: f, field_name: :mailer_logo, width: 204, height: 104 %>
|
14
|
-
<p class="form-text text-muted mb-0 mt-2">
|
15
|
-
We recommend images with a transparent background.
|
16
|
-
<br />
|
17
|
-
Only JPEG and PNG formats are supported.
|
18
|
-
</p>
|
19
|
-
</div>
|
20
|
-
</div>
|
21
|
-
</div>
|
22
|
-
|
23
|
-
<div class="col-lg-6">
|
6
|
+
<div class="col-lg-6 offset-lg-3">
|
24
7
|
<div class="card mb-4">
|
25
8
|
<div class="card-header">
|
26
9
|
<h5 class="card-title">Email addresses</h5>
|
@@ -55,5 +38,20 @@
|
|
55
38
|
</div>
|
56
39
|
</div>
|
57
40
|
</div>
|
41
|
+
|
42
|
+
<div class="card mb-4">
|
43
|
+
<div class="card-header">
|
44
|
+
<h5 class="card-title">Logo for emails</h5>
|
45
|
+
</div>
|
46
|
+
<div class="card-body">
|
47
|
+
<p class="text-muted">This logo is included in all email notifications such as order confirmation</p>
|
48
|
+
<%= render 'active_storage/upload_form', form: f, field_name: :mailer_logo, width: 204, height: 104 %>
|
49
|
+
<p class="form-text text-muted mb-0 mt-2">
|
50
|
+
We recommend images with a transparent background.
|
51
|
+
<br />
|
52
|
+
Only JPEG and PNG formats are supported.
|
53
|
+
</p>
|
54
|
+
</div>
|
55
|
+
</div>
|
58
56
|
</div>
|
59
57
|
</div>
|
@@ -3,18 +3,15 @@
|
|
3
3
|
<%= @variant.human_name %>
|
4
4
|
<% end %>
|
5
5
|
|
6
|
-
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @variant } %>
|
7
|
-
|
8
6
|
<%= form_for [:admin, @product, @variant] do |f| %>
|
9
7
|
<div class="row">
|
10
|
-
<div class="col-lg-6">
|
8
|
+
<div class="col-lg-6 offset-lg-3">
|
9
|
+
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @variant } %>
|
11
10
|
<%= render 'spree/admin/variants/form/basic', f: f %>
|
12
11
|
<%= render 'spree/admin/variants/form/pricing', f: f %>
|
13
12
|
<%= render 'spree/admin/variants/form/inventory', f: f %>
|
14
|
-
</div>
|
15
|
-
<div class="col-lg-6">
|
16
13
|
<%= render 'spree/admin/variants/form/media', viewable: @variant %>
|
14
|
+
<%= render 'spree/admin/shared/edit_resource_links', f: f %>
|
17
15
|
</div>
|
18
16
|
</div>
|
19
|
-
<%= render 'spree/admin/shared/edit_resource_links', f: f %>
|
20
17
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -249,7 +249,8 @@ Spree::Core::Engine.add_routes do
|
|
249
249
|
resource :dashboard, controller: 'dashboard'
|
250
250
|
get '/dashboard/analytics', to: 'dashboard#analytics', as: :dashboard_analytics
|
251
251
|
get '/getting-started', to: 'dashboard#getting_started', as: :getting_started
|
252
|
-
|
252
|
+
patch '/dismiss_enterprise_edition_notice', to: 'dashboard#dismiss_enterprise_edition_notice', as: :dismiss_enterprise_edition_notice
|
253
|
+
patch '/dismiss_updater_notice', to: 'dashboard#dismiss_updater_notice', as: :dismiss_updater_notice
|
253
254
|
|
254
255
|
root to: 'dashboard#show'
|
255
256
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.1.
|
4
|
+
version: 5.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vendo Connect Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-07-
|
11
|
+
date: 2025-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree_core
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.1.
|
19
|
+
version: 5.1.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.1.
|
26
|
+
version: 5.1.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: spree_api
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 5.1.
|
33
|
+
version: 5.1.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 5.1.
|
40
|
+
version: 5.1.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: active_link_to
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -837,7 +837,6 @@ files:
|
|
837
837
|
- app/views/spree/admin/promotion_rules/new.html.erb
|
838
838
|
- app/views/spree/admin/promotions/_actions.html.erb
|
839
839
|
- app/views/spree/admin/promotions/_filters.html.erb
|
840
|
-
- app/views/spree/admin/promotions/_form.html.erb
|
841
840
|
- app/views/spree/admin/promotions/_header.html.erb
|
842
841
|
- app/views/spree/admin/promotions/_promotion.html.erb
|
843
842
|
- app/views/spree/admin/promotions/_rules.html.erb
|
@@ -1145,9 +1144,9 @@ licenses:
|
|
1145
1144
|
- AGPL-3.0-or-later
|
1146
1145
|
metadata:
|
1147
1146
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
1148
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v5.1.
|
1147
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v5.1.2
|
1149
1148
|
documentation_uri: https://docs.spreecommerce.org/
|
1150
|
-
source_code_uri: https://github.com/spree/spree/tree/v5.1.
|
1149
|
+
source_code_uri: https://github.com/spree/spree/tree/v5.1.2
|
1151
1150
|
post_install_message:
|
1152
1151
|
rdoc_options: []
|
1153
1152
|
require_paths:
|
@@ -1,47 +0,0 @@
|
|
1
|
-
<%= render 'spree/admin/shared/error_messages', target: @promotion %>
|
2
|
-
|
3
|
-
<div class="row">
|
4
|
-
<div class="col-12 col-lg-8">
|
5
|
-
<div class="card mb-4">
|
6
|
-
<div class="card-header">
|
7
|
-
<h5 class="card-title">
|
8
|
-
<%= Spree.t(:details) %>
|
9
|
-
</h5>
|
10
|
-
</div>
|
11
|
-
<div class="card-body">
|
12
|
-
<div class="form-group">
|
13
|
-
<%= f.label :name %>
|
14
|
-
<%= f.text_field :name, class: 'form-control', required: true, autofocus: true %>
|
15
|
-
<%= f.error_message_on :name %>
|
16
|
-
<span class="form-text text-muted mt-2">
|
17
|
-
Customers will see this in their cart and at checkout.
|
18
|
-
</span>
|
19
|
-
</div>
|
20
|
-
</div>
|
21
|
-
</div>
|
22
|
-
|
23
|
-
<div class="card">
|
24
|
-
<div class="card-header">
|
25
|
-
<h5 class="card-title">
|
26
|
-
<%= Spree.t(:kind) %>
|
27
|
-
</h5>
|
28
|
-
</div>
|
29
|
-
<div class="card-body">
|
30
|
-
<%= render 'spree/admin/promotions/form/kind', f: f %>
|
31
|
-
</div>
|
32
|
-
</div>
|
33
|
-
</div>
|
34
|
-
|
35
|
-
<div class="col-12 col-lg-4">
|
36
|
-
<div class="card">
|
37
|
-
<div class="card-header">
|
38
|
-
<h5 class="card-title">
|
39
|
-
<%= Spree.t(:settings) %>
|
40
|
-
</h5>
|
41
|
-
</div>
|
42
|
-
<div class="card-body">
|
43
|
-
<%= render 'spree/admin/promotions/form/settings', f: f %>
|
44
|
-
</div>
|
45
|
-
</div>
|
46
|
-
</div>
|
47
|
-
</div>
|