spree_emails 5.4.0.beta7 → 5.4.0.beta8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75fb2d74e5aca0dcc60597867e8e354bf2f6ca32ce5d45bbdca62e286c5d045b
4
- data.tar.gz: d2b7ec3adee7cb1ee77a98670db666a048ae3959f11ba1180ba444677574b09d
3
+ metadata.gz: 67f60d55f4678131cc6aef5fa9c225b3e189d853a64637d833a1e3fb2dfa6200
4
+ data.tar.gz: 997cf645f50e346c7bf8e901e9cadfea738760dff15d3919e7e5d04a1c603344
5
5
  SHA512:
6
- metadata.gz: 52e2e67decb78998455dbf5de09cb441881fbcaf5e0520e8838a3fd0e7d658cae6fb4af4b7577408b895d4741b38f9e62da97e0b6a713bd44f4a39f3ec968d79
7
- data.tar.gz: b69587fc2b588552c46807ace481d242fc6562d954e144fd19c51f297f80e0a55c22967703be64c3c9cd31b42972bf1cf97081a3d42335cd222e4b08eb212e7d
6
+ metadata.gz: d98ec2dc83c4f9d7065680e57968b9dc98f83cee1bf077b1a0ec989f325e481ec3dc1e156585bd35d6eedb0f112d89bbfcaec1ab22beb193811c534d0db65f25
7
+ data.tar.gz: 79cdfd6c7dc8bb11c1d0305dab76a061e3b279212da428dfa7c45c330c312f622ea43e8dd8bc465255a5ccbb613f9a84f1b17fae6fdabaed7a532267d9a67190
@@ -4,7 +4,7 @@ module Spree
4
4
  include Spree::ImagesHelper
5
5
 
6
6
  def variant_image_url(variant)
7
- image = variant.default_image
7
+ image = variant.primary_media
8
8
  image.present? && image.attached? ? spree_image_url(image, variant: :mini) : image_url('noimage/small.png')
9
9
  end
10
10
 
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ class CustomerMailer < BaseMailer
5
+ def password_reset_email(user_id, store_id, reset_token, redirect_url = nil)
6
+ @user = Spree.user_class.find(user_id)
7
+ @current_store = Spree::Store.find(store_id)
8
+ @reset_token = reset_token
9
+ @reset_url = build_reset_url(redirect_url, reset_token)
10
+
11
+ subject = "#{@current_store.name} #{Spree.t('customer_mailer.password_reset_email.subject')}"
12
+ mail(
13
+ to: @user.email,
14
+ from: from_address,
15
+ subject: subject,
16
+ store_url: @current_store.storefront_url,
17
+ reply_to: reply_to_address
18
+ )
19
+ end
20
+
21
+ private
22
+
23
+ def build_reset_url(redirect_url, token)
24
+ return nil if redirect_url.blank?
25
+
26
+ uri = URI.parse(redirect_url)
27
+ params = URI.decode_www_form(uri.query || '')
28
+ params << ['token', token]
29
+ uri.query = URI.encode_www_form(params)
30
+ uri.to_s
31
+ end
32
+ end
33
+ end
@@ -2,7 +2,7 @@ module Spree
2
2
  class NewsletterMailer < BaseMailer
3
3
  def email_confirmation(subscriber)
4
4
  @subscriber = subscriber
5
- @confirm_email_url = spree.verify_newsletter_subscribers_url(token: @subscriber.verification_token, host: Spree::Current.store.url_or_custom_domain)
5
+ @confirm_email_url = spree.verify_newsletter_subscribers_url(token: @subscriber.verification_token, host: Spree::Current.store.storefront_url)
6
6
  mail(to: @subscriber.email, from: from_address, subject: Spree.t('newsletter_mailer.email_confirmation.subject'))
7
7
  end
8
8
  end
@@ -7,14 +7,14 @@ module Spree
7
7
  current_store = @order.store
8
8
  subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
9
9
  subject += "#{current_store.name} #{Spree.t('order_mailer.confirm_email.subject')} ##{@order.number}"
10
- mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
10
+ mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.storefront_url, reply_to: reply_to_address)
11
11
  end
12
12
 
13
13
  def store_owner_notification_email(order)
14
14
  @order = order.respond_to?(:id) ? order : Spree::Order.find(order)
15
15
  current_store = @order.store
16
16
  subject = Spree.t('order_mailer.store_owner_notification_email.subject', store_name: current_store.name)
17
- mail(to: current_store.new_order_notifications_email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
17
+ mail(to: current_store.new_order_notifications_email, from: from_address, subject: subject, store_url: current_store.storefront_url, reply_to: reply_to_address)
18
18
  end
19
19
 
20
20
  def cancel_email(order, resend = false)
@@ -22,16 +22,16 @@ module Spree
22
22
  current_store = @order.store
23
23
  subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
24
24
  subject += "#{current_store.name} #{Spree.t('order_mailer.cancel_email.subject')} ##{@order.number}"
25
- mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
25
+ mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.storefront_url, reply_to: reply_to_address)
26
26
  end
27
27
 
28
28
  def payment_link_email(order_id)
29
29
  @order = Spree::Order.incomplete.not_canceled.find(order_id)
30
30
  @current_store = @order.store
31
- @checkout_payment_url = spree.checkout_state_url(@order.token, :payment, host: @current_store.url_or_custom_domain)
31
+ @checkout_payment_url = spree.checkout_state_url(@order.token, :payment, host: @current_store.storefront_url)
32
32
 
33
33
  mail(to: @order.email, from: from_address, subject: Spree.t('order_mailer.payment_link_email.subject', number: @order.number),
34
- store_url: @current_store.url_or_custom_domain, reply_to: reply_to_address)
34
+ store_url: @current_store.storefront_url, reply_to: reply_to_address)
35
35
  end
36
36
  end
37
37
  end
@@ -8,7 +8,7 @@ module Spree
8
8
  current_store = @reimbursement.store || Spree::Store.default
9
9
  subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
10
10
  subject += "#{current_store.name} #{Spree.t('reimbursement_mailer.reimbursement_email.subject')} ##{@order.number}"
11
- mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
11
+ mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.storefront_url, reply_to: reply_to_address)
12
12
  end
13
13
  end
14
14
  end
@@ -9,7 +9,7 @@ module Spree
9
9
  current_store = @shipment.store
10
10
  subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
11
11
  subject += "#{current_store.name} #{Spree.t('shipment_mailer.shipped_email.subject')} ##{@order.number}"
12
- mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.url_or_custom_domain, reply_to: reply_to_address)
12
+ mail(to: @order.email, from: from_address, subject: subject, store_url: current_store.storefront_url, reply_to: reply_to_address)
13
13
  end
14
14
  end
15
15
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ class CustomerEmailSubscriber < Spree::Subscriber
5
+ subscribes_to 'customer.password_reset_requested'
6
+
7
+ def handle(event)
8
+ email = event.payload['email']
9
+ return if email.blank?
10
+
11
+ user = Spree.user_class.find_by(email: email)
12
+ return unless user
13
+
14
+ store = find_store(event)
15
+ return unless store
16
+ return unless store.prefers_send_consumer_transactional_emails?
17
+
18
+ reset_token = event.payload['reset_token']
19
+ redirect_url = event.payload['redirect_url']
20
+
21
+ CustomerMailer.password_reset_email(
22
+ user.id,
23
+ store.id,
24
+ reset_token,
25
+ redirect_url
26
+ ).deliver_later
27
+ end
28
+
29
+ private
30
+
31
+ def find_store(event)
32
+ store_id = event.store_id
33
+ return Spree::Store.find(store_id) if store_id.present?
34
+
35
+ Spree::Current.store || Spree::Store.default
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,26 @@
1
+ <h1>
2
+ <%= Spree.t('customer_mailer.password_reset_email.greeting', name: @user.first_name.presence || @user.email) %>
3
+ </h1>
4
+ <p>
5
+ <%= Spree.t('customer_mailer.password_reset_email.instructions') %>
6
+ </p>
7
+ <% if @reset_url %>
8
+ <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
9
+ <tr>
10
+ <td align="center">
11
+ <a href="<%= @reset_url %>" class="button" target="_blank">
12
+ <%= Spree.t('customer_mailer.password_reset_email.action') %>
13
+ </a>
14
+ </td>
15
+ </tr>
16
+ </table>
17
+ <% end %>
18
+ <p>
19
+ <%= Spree.t('customer_mailer.password_reset_email.expiry_notice') %>
20
+ </p>
21
+ <p>
22
+ <%= Spree.t('customer_mailer.password_reset_email.ignore_notice') %>
23
+ </p>
24
+ <p>
25
+ <%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
26
+ </p>
@@ -0,0 +1,13 @@
1
+ <%= Spree.t('customer_mailer.password_reset_email.greeting', name: @user.first_name.presence || @user.email) %>
2
+
3
+ <%= Spree.t('customer_mailer.password_reset_email.instructions') %>
4
+
5
+ <% if @reset_url %>
6
+ <%= Spree.t('customer_mailer.password_reset_email.action') %>: <%= @reset_url %>
7
+ <% end %>
8
+
9
+ <%= Spree.t('customer_mailer.password_reset_email.expiry_notice') %>
10
+
11
+ <%= Spree.t('customer_mailer.password_reset_email.ignore_notice') %>
12
+
13
+ <%= Spree.t('order_mailer.store_team', store_name: current_store.name) %>
@@ -15,7 +15,8 @@ module Spree
15
15
  Spree::OrderEmailSubscriber,
16
16
  Spree::ShipmentEmailSubscriber,
17
17
  Spree::ReimbursementEmailSubscriber,
18
- Spree::NewsletterSubscriberEmailSubscriber
18
+ Spree::NewsletterSubscriberEmailSubscriber,
19
+ Spree::CustomerEmailSubscriber
19
20
  ]
20
21
  end
21
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_emails
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.4.0.beta7
4
+ version: 5.4.0.beta8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2026-03-15 00:00:00.000000000 Z
13
+ date: 2026-03-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: spree
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 5.4.0.beta7
21
+ version: 5.4.0.beta8
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 5.4.0.beta7
28
+ version: 5.4.0.beta8
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: email_spec
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,18 @@ files:
58
58
  - app/assets/images/noimage/noimage/small.png
59
59
  - app/assets/images/noimage/small.png
60
60
  - app/helpers/spree/mail_helper.rb
61
+ - app/mailers/spree/customer_mailer.rb
61
62
  - app/mailers/spree/newsletter_mailer.rb
62
63
  - app/mailers/spree/order_mailer.rb
63
64
  - app/mailers/spree/reimbursement_mailer.rb
64
65
  - app/mailers/spree/shipment_mailer.rb
66
+ - app/subscribers/spree/customer_email_subscriber.rb
65
67
  - app/subscribers/spree/newsletter_subscriber_email_subscriber.rb
66
68
  - app/subscribers/spree/order_email_subscriber.rb
67
69
  - app/subscribers/spree/reimbursement_email_subscriber.rb
68
70
  - app/subscribers/spree/shipment_email_subscriber.rb
71
+ - app/views/spree/customer_mailer/password_reset_email.html.erb
72
+ - app/views/spree/customer_mailer/password_reset_email.text.erb
69
73
  - app/views/spree/newsletter_mailer/email_confirmation.html.erb
70
74
  - app/views/spree/newsletter_mailer/email_confirmation.text.erb
71
75
  - app/views/spree/order_mailer/cancel_email.html.erb
@@ -99,9 +103,9 @@ licenses:
99
103
  - BSD-3-Clause
100
104
  metadata:
101
105
  bug_tracker_uri: https://github.com/spree/spree/issues
102
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.beta7
106
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.beta8
103
107
  documentation_uri: https://docs.spreecommerce.org/
104
- source_code_uri: https://github.com/spree/spree/tree/v5.4.0.beta7
108
+ source_code_uri: https://github.com/spree/spree/tree/v5.4.0.beta8
105
109
  post_install_message:
106
110
  rdoc_options: []
107
111
  require_paths: