spree_bronto 3.pre.0.pre.stable
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +1 -0
- data/Gemfile +8 -0
- data/LICENSE +26 -0
- data/README.md +73 -0
- data/Rakefile +21 -0
- data/app/assets/javascripts/spree/backend/spree_bronto.js +4 -0
- data/app/assets/javascripts/spree/frontend/bronto_list.js.coffee +8 -0
- data/app/assets/javascripts/spree/frontend/spree_bronto.js +2 -0
- data/app/assets/stylesheets/spree/backend/spree_bronto.css +4 -0
- data/app/assets/stylesheets/spree/frontend/spree_bronto.css +4 -0
- data/app/controllers/spree/admin/bronto_lists_controller.rb +24 -0
- data/app/controllers/spree/checkout_controller_decorator.rb +23 -0
- data/app/controllers/spree/home_controller_decorator.rb +120 -0
- data/app/controllers/spree/lists.rb +152 -0
- data/app/controllers/spree/orders_controller_decorator.rb +56 -0
- data/app/controllers/spree/users_controller_decorator.rb +27 -0
- data/app/mailers/spree/order_mailer/_order_cancel_html.html.erb +4 -0
- data/app/mailers/spree/order_mailer/_order_cancel_plain.erb +7 -0
- data/app/mailers/spree/order_mailer/_order_confirm_html.html.erb +5 -0
- data/app/mailers/spree/order_mailer/_order_confirm_plain.erb +7 -0
- data/app/mailers/spree/order_mailer/_order_details_html.html.erb +52 -0
- data/app/mailers/spree/order_mailer/_order_details_plain.erb +22 -0
- data/app/mailers/spree/order_mailer/_order_shipped_html.html.erb +20 -0
- data/app/mailers/spree/order_mailer/_order_shipped_plain.erb +21 -0
- data/app/mailers/spree/user_mailer/_password_reset_instructions.html.erb +9 -0
- data/app/mailers/spree/user_mailer_decorator.rb +13 -0
- data/app/models/spree/bronto_configuration.rb +12 -0
- data/app/models/spree/bronto_list.rb +20 -0
- data/app/models/spree/order_decorator.rb +30 -0
- data/app/models/spree/shipment_decorator.rb +18 -0
- data/app/models/spree/shipment_handler_decorator.rb +17 -0
- data/app/models/spree/store_decorator.rb +7 -0
- data/app/models/spree/user_decorator.rb +51 -0
- data/app/overrides/decorate_account_my_orders.rb +6 -0
- data/app/overrides/decorate_admin_configurations_index.rb +5 -0
- data/app/overrides/decorate_bronto_cart_recorvery.rb +6 -0
- data/app/overrides/decorate_bronto_list_subscribe.rb +6 -0
- data/app/views/spree/admin/bronto_lists/_autocomplete_form.js.erb +23 -0
- data/app/views/spree/admin/bronto_lists/_form.html.erb +49 -0
- data/app/views/spree/admin/bronto_lists/_get_lists.html.erb +1 -0
- data/app/views/spree/admin/bronto_lists/_get_lists.js.erb +1 -0
- data/app/views/spree/admin/bronto_lists/_retrieve_lists.js.erb +13 -0
- data/app/views/spree/admin/bronto_lists/edit.html.erb +11 -0
- data/app/views/spree/admin/bronto_lists/index.html.erb +38 -0
- data/app/views/spree/admin/bronto_lists/new.html.erb +11 -0
- data/app/views/spree/bronto_lists/_edit.html.erb +21 -0
- data/app/views/spree/bronto_lists/_form.html.erb +17 -0
- data/app/views/spree/bronto_lists/_signup.html.erb +13 -0
- data/app/views/spree/shared/_bronto_tags.html.erb +69 -0
- data/bin/rails +7 -0
- data/config/bronto.yml +39 -0
- data/config/locales/en.yml +27 -0
- data/config/routes.rb +19 -0
- data/db/migrate/20150427135748_spree_bronto_lists_users.rb +12 -0
- data/db/migrate/20150427135923_create_spree_bronto_lists.rb +16 -0
- data/lib/bronto_integration/bronto.rb +255 -0
- data/lib/bronto_integration/bronto_integration/communication.rb +83 -0
- data/lib/bronto_integration/bronto_integration/contact.rb +53 -0
- data/lib/bronto_integration/bronto_integration/order.rb +44 -0
- data/lib/bronto_integration/bronto_integration.rb +6 -0
- data/lib/delayed_send.rb +40 -0
- data/lib/delayed_simple_send.rb +17 -0
- data/lib/delayed_subscriber_add.rb +38 -0
- data/lib/delayed_subscriber_delete.rb +35 -0
- data/lib/delayed_subscriber_update.rb +38 -0
- data/lib/delayed_trigger.rb +17 -0
- data/lib/generators/spree_bronto/install/install_generator.rb +31 -0
- data/lib/spree_bronto/engine.rb +30 -0
- data/lib/spree_bronto/factories.rb +6 -0
- data/lib/spree_bronto.rb +2 -0
- data/spec/spec_helper.rb +87 -0
- data/spree_bronto.gemspec +32 -0
- metadata +258 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a3b281282ef7df4d0775cc2f3976816056a08299
|
4
|
+
data.tar.gz: c79c53d0d2365adb45ccaa4bdeb28f1303e1af75
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3a7f38114418ee73de73409ab38df5912de2a61c1f0138be74801d4c0ce7abe92de5c6985dc66c66539d1189865f8e641f2563087185f16ff493bd113d84f772
|
7
|
+
data.tar.gz: 88c9f9674a8036d3bfc5ef1625cef6227ce3713d870ad7948a38f08bc1912e62e105b737bf5f98c375d74d07ac8174bcea9f4488ff9c2df84c8fb1b98e0373df
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'spree', github: 'spree/spree', branch: '3-0-stable'
|
4
|
+
gem 'savon', github: 'savonrb/savon'
|
5
|
+
# Provides basic authentication functionality for testing parts of your engine
|
6
|
+
gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '3-0-stable'
|
7
|
+
|
8
|
+
gemspec
|
data/LICENSE
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2015 [name of plugin creator]
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
* Neither the name Spree nor the names of its contributors may be used to
|
13
|
+
endorse or promote products derived from this software without specific
|
14
|
+
prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
20
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
SpreeBronto
|
2
|
+
===========
|
3
|
+
|
4
|
+
Spree_bronto is one extension for spree to use Bronto mailing services and cart recovery tagging. Bronto API call code is basically one copy
|
5
|
+
from Wombat Bronto End_point.
|
6
|
+
|
7
|
+
This extension's older version is used in your Spree 0.11 web site.
|
8
|
+
This new spree 3.0 compatible version is brand new, please give any feedback to us: albertliu at naturalwellbeing.com
|
9
|
+
|
10
|
+
|
11
|
+
Yaml file to config your bronto acccount and email api id for order/shipment confirmation emails.
|
12
|
+
This extension support multi-domain, and can confiture at store level with identity with store code. if no store level config found, it fall to use the default
|
13
|
+
|
14
|
+
Put your own bronto.yml in your application's config folder. Its content should include following:
|
15
|
+
##################
|
16
|
+
disable_cart_recovery: false
|
17
|
+
# if this option is false, the tagkey must be present in your yaml file
|
18
|
+
|
19
|
+
handle_asynchronously: true
|
20
|
+
# if this option is true, delayed_job must be configured.
|
21
|
+
|
22
|
+
default:
|
23
|
+
token: YOUR_BRONTO_TOKEN_TO_ACCESS_API
|
24
|
+
from_name: EMAIL_FROM NAME
|
25
|
+
tagkey: YOUR_BRONTO_CART_RECOVERY_KEY_IF_CART_RECOVERY_IS_ENABLED
|
26
|
+
order_shipped: EMAIL_API_ID_FOR_ORDER_SHIPPED_NOTIFICATION
|
27
|
+
order_received: EMAIL_API_ID_FOR_ORDER_CONFIRMATION
|
28
|
+
new_account: EMAIL_API_ID_FOR_ACCOUNT_CREATED
|
29
|
+
password_reset: EMAIL_API_ID_FOR_PASSWORD_RESET
|
30
|
+
order_canceled: EMAIL_API_ID_FOR_ORDER_CANCELED
|
31
|
+
#######################
|
32
|
+
|
33
|
+
|
34
|
+
Delayed_job is supposed to handle the asynch event here.
|
35
|
+
|
36
|
+
In bronto's configuration, you need create the email templates specified in bronto.yml. You also need create two content tags with name as
|
37
|
+
SENDTIME__CONTENT1 and SENDTIME__CONTENT2 .
|
38
|
+
|
39
|
+
|
40
|
+
Installation
|
41
|
+
------------
|
42
|
+
|
43
|
+
Add spree_bronto to your Gemfile:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
gem 'spree_bronto'
|
47
|
+
```
|
48
|
+
|
49
|
+
Bundle your dependencies and run the installation generator:
|
50
|
+
|
51
|
+
```shell
|
52
|
+
bundle
|
53
|
+
bundle exec rails g spree_bronto:install
|
54
|
+
```
|
55
|
+
|
56
|
+
Testing
|
57
|
+
-------
|
58
|
+
|
59
|
+
First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`.
|
60
|
+
|
61
|
+
```shell
|
62
|
+
bundle
|
63
|
+
bundle exec rake
|
64
|
+
```
|
65
|
+
|
66
|
+
When testing your applications integration with this extension you may use it's factories.
|
67
|
+
Simply add this require statement to your spec_helper:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
require 'spree_bronto/factories'
|
71
|
+
```
|
72
|
+
|
73
|
+
Copyright (c) 2015 Naturalwellbeing distribution, released under the New BSD License
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'spree/testing_support/extension_rake'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new
|
8
|
+
|
9
|
+
task :default do
|
10
|
+
if Dir["spec/dummy"].empty?
|
11
|
+
Rake::Task[:test_app].invoke
|
12
|
+
Dir.chdir("../../")
|
13
|
+
end
|
14
|
+
Rake::Task[:spec].invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Generates a dummy app for testing'
|
18
|
+
task :test_app do
|
19
|
+
ENV['LIB_NAME'] = 'spree_bronto'
|
20
|
+
Rake::Task['extension:test_app'].invoke
|
21
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
$(document).ready $('#retrieve_bronto_list').click(->
|
2
|
+
$.getScript '/admin/bronto_lists/get_lists?list_id=' + $('#bronto_list_list_id').val() + '&store_id=' + $('#bronto_list_store_id').val()
|
3
|
+
return
|
4
|
+
)
|
5
|
+
$(document).ready $('#bronto_list_store_id').change(->
|
6
|
+
$.getScript '/admin/bronto_lists/get_lists?list_id=' + $('#bronto_list_list_id').val() + '&store_id=' + $('#bronto_list_store_id').val()
|
7
|
+
return
|
8
|
+
)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Spree::Admin::BrontoListsController < Spree::Admin::ResourceController
|
2
|
+
before_action :find_stores, only: [:edit, :new]
|
3
|
+
|
4
|
+
def get_lists
|
5
|
+
@lists = []
|
6
|
+
@list_id = params[:list_id] if params.key? :list_id
|
7
|
+
@store_id = params[:store_id] if params.key? :store_id
|
8
|
+
@site= Spree::Store.find(@store_id)
|
9
|
+
bronto=Bronto.new(Spree::BrontoConfiguration.account[@site.code]['token'])
|
10
|
+
et_lists=bronto.read_lists
|
11
|
+
#et_list = ET::List.new(Spree::Config.get(:exact_target_user), Spree::Config.get(:exact_target_password))
|
12
|
+
et_lists.each do |etl|
|
13
|
+
#list = et_list.retrieve_by_id etl[:id]
|
14
|
+
@lists << ["#{etl[:name]}", etl[:id]]
|
15
|
+
end
|
16
|
+
render :partial => "get_lists", :layout => false
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def find_stores
|
22
|
+
@stores=Spree::Store.all
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Spree::CheckoutController.class_eval do
|
2
|
+
include Spree::Lists
|
3
|
+
before_action :check_newsletter
|
4
|
+
|
5
|
+
def load_order_with_lock
|
6
|
+
@order = current_order(lock: true)
|
7
|
+
@bronto_lists=current_store.bronto_lists.select{|l| l.visible && !l.subscribe_all_new_users}
|
8
|
+
redirect_to spree.cart_path and return unless @order
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def check_newsletter
|
13
|
+
if params['bronto_list']
|
14
|
+
params['bronto_list'].each do |k,v|
|
15
|
+
list=Spree::BrontoList.find(k)
|
16
|
+
if k && v && @order.email
|
17
|
+
subscribe_to_list(@order.email, list)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
Spree::HomeController.class_eval do
|
2
|
+
|
3
|
+
def subscribenewsletter
|
4
|
+
name=params[:name] || ''
|
5
|
+
email=params[:email]
|
6
|
+
receipt=params[:receipt] || ''
|
7
|
+
subject=params[:subject] || 'Customer Record'
|
8
|
+
if receipt.length>0
|
9
|
+
external_key = Spree::BrontoConfiguration.account[current_store.code]["ET_simple_send"]
|
10
|
+
params.delete('action')
|
11
|
+
params.delete('receipt')
|
12
|
+
params.delete('authenticity_token')
|
13
|
+
params.delete('controller')
|
14
|
+
params.delete('subject')
|
15
|
+
params.delete('cc_receipt')
|
16
|
+
the_content=''
|
17
|
+
ks=[]
|
18
|
+
vs=[]
|
19
|
+
params.each do |k,v|
|
20
|
+
ks << k
|
21
|
+
vs << v
|
22
|
+
end
|
23
|
+
the_content = ks.join(',') + '<br/>' + vs.join(',')
|
24
|
+
et_a={:SENDTIME__CONTENT2 => the_content, :SENDTIME__CONTENT1 => subject}
|
25
|
+
#et_a={:SENDTIME__CONTENT2 => 'Name: ' + name +'<br/>Email: ' + email + '<br/>Address: ' + params[:address] + '<br/>City: ' + params[:city] + '<br/>State: ' + params[:state] +'<br/>Zip: ' + params[:zip] +'<br/>Phone: ' + params[:phone] +'<br/>Credentials: ' + params[:credentials]}
|
26
|
+
Delayed::Job.enqueue DelayedSimpleSend.new(current_store.code, receipt, external_key, et_a,'html')
|
27
|
+
cc_receipt= params[:cc_receipt] || ''
|
28
|
+
if cc_receipt.length>0
|
29
|
+
Delayed::Job.enqueue DelayedSimpleSend.new(current_store.code, cc_receipt, external_key, et_a,'html')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
if email.length>0
|
33
|
+
if current_store.code == 'pwb'
|
34
|
+
title='Pets & Products Newsletter'
|
35
|
+
elsif current_store.code == 'he'
|
36
|
+
title='HairEssentials Products Newsletter'
|
37
|
+
else
|
38
|
+
title='Natural Products Newsletter'
|
39
|
+
end
|
40
|
+
campaign= Spree::BrontoList.find_by_title(title)
|
41
|
+
if !!campaign
|
42
|
+
Delayed::Job.enqueue DelayedSubscriberAdd.new(current_store.code, email, campaign, {:First_Name => name})
|
43
|
+
end
|
44
|
+
render :json => ({
|
45
|
+
:success => true,
|
46
|
+
:message => t( :subscription_sent )
|
47
|
+
}).to_json
|
48
|
+
else
|
49
|
+
render :json => ({
|
50
|
+
:success => false,
|
51
|
+
:message => t( :subscription_notsent )
|
52
|
+
}).to_json
|
53
|
+
end
|
54
|
+
#redirect_to "/meetexperts"
|
55
|
+
#render :js =>'alert("Our server temperarily busy, please try again later.")'
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
# sign up compaign flexible form, like the one for newsletter.
|
60
|
+
def subscribecampaign
|
61
|
+
name=params[:name] || ''
|
62
|
+
email=params[:email]
|
63
|
+
campaign_id=params[:campaign_id] || ''
|
64
|
+
if email.length>0
|
65
|
+
campaign=Spree::BrontoList.find_by_list_id(campaign_id)
|
66
|
+
if !!campaign
|
67
|
+
options=cookies[:campaign_options] || '{}'
|
68
|
+
options=Hash[JSON.parse(options).map{|(k,v)| [k.to_sym,v]}]
|
69
|
+
Rails.logger.info "find campaign_options cookie: #{cookies.inspect}"
|
70
|
+
Delayed::Job.enqueue DelayedSubscriberAdd.new(current_store.code, email, campaign, {:First_Name => name})
|
71
|
+
end
|
72
|
+
|
73
|
+
drop_email_key=params[:drop_email_key] || ''
|
74
|
+
unless drop_email_key.blank?
|
75
|
+
Delayed::Job.enqueue DelayedSimpleSend.new(current_store.code, email, drop_email_key, {},'html')
|
76
|
+
end
|
77
|
+
render :json => ({
|
78
|
+
:success => true,
|
79
|
+
:message => t( :subscription_sent )
|
80
|
+
}).to_json
|
81
|
+
else
|
82
|
+
render :json => ({
|
83
|
+
:success => false,
|
84
|
+
:message => t( :subscription_notsent )
|
85
|
+
}).to_json
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
# sign up compaign flexible form, like the one for newsletter.
|
92
|
+
def subscribecampaign_with_ops
|
93
|
+
email=params[:email]
|
94
|
+
campaign_id=params[:campaign_id] || ''
|
95
|
+
ops=params[:ops]
|
96
|
+
if email.length>0
|
97
|
+
campaign=Spree::BrontoList.find_by_list_id(campaign_id)
|
98
|
+
if !!campaign
|
99
|
+
Delayed::Job.enqueue DelayedSubscriberAdd.new(current_store.code, email, campaign,ops)
|
100
|
+
end
|
101
|
+
|
102
|
+
drop_email_key=params[:drop_email_key] || ''
|
103
|
+
unless drop_email_key.blank?
|
104
|
+
Delayed::Job.enqueue DelayedSimpleSend.new(current_store.code, email, drop_email_key, {},'html')
|
105
|
+
end
|
106
|
+
|
107
|
+
render :json => ({
|
108
|
+
:success => true,
|
109
|
+
:message => t( :subscription_sent )
|
110
|
+
}).to_json
|
111
|
+
else
|
112
|
+
render :json => ({
|
113
|
+
:success => false,
|
114
|
+
:message => t( :subscription_notsent )
|
115
|
+
}).to_json
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
module Spree
|
2
|
+
module Lists
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
def autosubscribe_list(store)
|
6
|
+
Spree::BrontoList.where(:store_id =>store.id,:subscribe_all_new_users =>true)
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_subscriber(user)
|
10
|
+
if user.is_a? String
|
11
|
+
order = Spree::Order.find_by_email(user, :order => "updated_at desc")
|
12
|
+
store= current_order.store
|
13
|
+
list = autosubscribe_list(store) if checkout
|
14
|
+
else
|
15
|
+
store=current_store
|
16
|
+
list = autosubscribe_list(store)
|
17
|
+
end
|
18
|
+
|
19
|
+
subscribe_to_list(user, list) unless !list
|
20
|
+
|
21
|
+
# synchronize the subscription list from bronto this customer subscribed before registration
|
22
|
+
unless user.is_a? String
|
23
|
+
begin
|
24
|
+
user.reload
|
25
|
+
bronto=Bronto.new(Spree::BrontoConfiguration.account[store.code]['bronto_token'])
|
26
|
+
contact=bronto.read_contacts(user.email,true)
|
27
|
+
list_ids=contact[:list_ids]
|
28
|
+
if list_ids
|
29
|
+
unless list_ids.class == Array
|
30
|
+
list_ids=[list_ids]
|
31
|
+
end
|
32
|
+
list_ids.each do |l|
|
33
|
+
list=Spree::BrontoList.find_by_list_id(l)
|
34
|
+
if !!list && (!user.bronto_lists.map(&:list_id).include? l )
|
35
|
+
user.exact_target_subscriber_id = contact[:id] #seems we do not need this
|
36
|
+
user.bronto_lists << list
|
37
|
+
user.save!
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
rescue
|
43
|
+
# do nothing here at this moment
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
def subscribe_to_list(user, list)
|
50
|
+
|
51
|
+
order=current_order
|
52
|
+
|
53
|
+
pwb_cat=''
|
54
|
+
pwbCat = lambda{|order|
|
55
|
+
iscat=false
|
56
|
+
order.line_items.each do |item|
|
57
|
+
if item.variant.product.taxons.map{|t| t.id}.include?(3002)
|
58
|
+
iscat=true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
if iscat
|
62
|
+
'cat'
|
63
|
+
else
|
64
|
+
'dog'
|
65
|
+
end
|
66
|
+
}
|
67
|
+
if order
|
68
|
+
#logger.debug 'call subscribe_to_list there is a order'
|
69
|
+
store=order.store
|
70
|
+
store_code=store.code
|
71
|
+
pwb_cat= (store_code=="pwb" ? pwbCat.call(order) : '')
|
72
|
+
else
|
73
|
+
store_code=current_store.code
|
74
|
+
pwb_cat=''
|
75
|
+
end
|
76
|
+
#logger.debug '-- found the pwb_cat: ' + pwb_cat
|
77
|
+
Delayed::Job.enqueue( DelayedSubscriberAdd.new(store_code, user, list, {:C_or_D => pwb_cat}), -20 )
|
78
|
+
|
79
|
+
unless user.is_a? String
|
80
|
+
user.bronto_lists << list
|
81
|
+
user.save!
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
def unsubscribe_from_list(user, list)
|
87
|
+
|
88
|
+
store = current_store
|
89
|
+
Delayed::Job.enqueue( DelayedSubscriberDelete.new(store.code, user, list), -20 )
|
90
|
+
|
91
|
+
unless user.is_a? String # update exact_target_lists
|
92
|
+
begin
|
93
|
+
list_del=user.bronto_lists.select{|l| l.id== list.id}
|
94
|
+
if list_del.length>0
|
95
|
+
user.bronto_lists.delete(list_del)
|
96
|
+
end
|
97
|
+
user.save!
|
98
|
+
rescue
|
99
|
+
#raise exception
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
#private
|
106
|
+
#CONTROLLER Actions
|
107
|
+
def get_bronto_lists
|
108
|
+
@bronto_lists = Spree::BrontoList.where(:visible => true)
|
109
|
+
end
|
110
|
+
|
111
|
+
def update_bronto_lists
|
112
|
+
return unless params.key? :bronto_list
|
113
|
+
|
114
|
+
unless @checkout.nil?
|
115
|
+
session[ :bronto_list ] = []
|
116
|
+
end
|
117
|
+
|
118
|
+
@user = @checkout.order.user if @user.nil? && !@checkout.nil?
|
119
|
+
|
120
|
+
params[:bronto_list].each do |id, do_subscribe|
|
121
|
+
do_subscribe = (do_subscribe == "true")
|
122
|
+
list = Spree::BrontoList.find(id)
|
123
|
+
if !@checkout.nil? && do_subscribe
|
124
|
+
session[ :bronto_list ] << id
|
125
|
+
end
|
126
|
+
|
127
|
+
if @user.nil? && !@checkout.nil? #guest checkout
|
128
|
+
if do_subscribe
|
129
|
+
#subscribe
|
130
|
+
subscribe_to_list(@checkout.email, list)
|
131
|
+
else
|
132
|
+
#unsubscribe
|
133
|
+
unsubscribe_from_list(@checkout.email, list)
|
134
|
+
end
|
135
|
+
else #normal checkout
|
136
|
+
if do_subscribe
|
137
|
+
#subscribe
|
138
|
+
unless @user.bronto_lists.include? list
|
139
|
+
subscribe_to_list(@user, list)
|
140
|
+
end
|
141
|
+
else
|
142
|
+
#unsubscribe
|
143
|
+
if @user.bronto_lists.include? list
|
144
|
+
unsubscribe_from_list(@user, list)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Spree::OrdersController.class_eval do
|
2
|
+
include Spree::Lists
|
3
|
+
|
4
|
+
def subscribe
|
5
|
+
@order = Spree::Order.find_by_number!(params[:id])
|
6
|
+
list = Spree::BrontoList.find( params[ :list ] )
|
7
|
+
unless list.nil?
|
8
|
+
unless @order.user.nil?
|
9
|
+
dest = @order.user
|
10
|
+
else
|
11
|
+
dest = @order.email
|
12
|
+
end
|
13
|
+
unless dest.nil?
|
14
|
+
subscribe_to_list(dest, list)
|
15
|
+
respond_to do |format|
|
16
|
+
format.html {
|
17
|
+
flash[:notice] = Spree.t( :subscription_sent ) unless session[ :return_to ]
|
18
|
+
redirect_to checkout_state_path(@order.state)
|
19
|
+
}
|
20
|
+
format.js {
|
21
|
+
render :json => ({
|
22
|
+
:success => true,
|
23
|
+
:message => Spree.t( :subscription_sent )
|
24
|
+
}).to_json
|
25
|
+
}
|
26
|
+
end
|
27
|
+
else
|
28
|
+
respond_to do |format|
|
29
|
+
format.html {
|
30
|
+
flash[:error] = Spree.t( :subscription_notsent ) unless session[ :return_to ]
|
31
|
+
redirect_to checkout_state_path(@order.state)
|
32
|
+
}
|
33
|
+
format.js {
|
34
|
+
render :json => ({
|
35
|
+
:success => false,
|
36
|
+
:message => Spree.t( :subscription_notsent )
|
37
|
+
}).to_json
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
else
|
42
|
+
respond_to do |format|
|
43
|
+
format.html {
|
44
|
+
flash[:error] = Spree.t( :no_such_list ) unless session[ :return_to ]
|
45
|
+
redirect_to checkout_state_path(@order.state)
|
46
|
+
}
|
47
|
+
format.js {
|
48
|
+
render :json => ({
|
49
|
+
:success => false,
|
50
|
+
:message => Spree.t( :no_such_list )
|
51
|
+
}).to_json
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Spree::UsersController.class_eval do
|
2
|
+
include Spree::Lists
|
3
|
+
|
4
|
+
before_action :load_bronto_lists
|
5
|
+
before_action :check_newsletter
|
6
|
+
|
7
|
+
private
|
8
|
+
def load_bronto_lists
|
9
|
+
@bronto_lists=current_store.bronto_lists
|
10
|
+
end
|
11
|
+
|
12
|
+
def check_newsletter
|
13
|
+
if params['user'] && params['user']['bronto_list_attributes']
|
14
|
+
params['user']['bronto_list_attributes'].each do|k,v|
|
15
|
+
list=Spree::BrontoList.find(k)
|
16
|
+
if k && @user && v=="true"
|
17
|
+
subscribe_to_list(@user, list)
|
18
|
+
end
|
19
|
+
|
20
|
+
if k && @user && v=="false"
|
21
|
+
unsubscribe_from_list(@user, list)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<p>This email is to inform you that your order has been <strong>cancelled</strong> on <%= Time.now.strftime("%B %d %Y at %I:%M %p") %>.</p>
|
2
|
+
<p>Your order number is <strong class="pink"><%= order.number %></strong> Please keep it for reference if you speak to a customer service representative.</p>
|
3
|
+
<p>Your <%= order.store.name %> order included the following item(s):</p>
|
4
|
+
<%= render "order_mailer/order_details_html", :order => order %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
This email is to inform you that your order has been CANCELLED on <%= Time.now.strftime("%B %d %Y at %I:%M %p") %>.
|
2
|
+
|
3
|
+
Your order number is <%= order.number %> Please keep it for reference if you speak to a customer service representative.
|
4
|
+
|
5
|
+
Your <%= order.store.name %> order included the following item(s):
|
6
|
+
|
7
|
+
<%= render "order_mailer/order_details_plain", :order => order %>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<p>Here are the details of your order received on <%= order.completed_at.strftime("%B %d %Y at %I:%M %p") %>.</p>
|
2
|
+
<p>Your order number is <strong class="pink"><%= order.number %></strong> Please keep it for reference if you speak to a customer service representative.</p>
|
3
|
+
|
4
|
+
<p>Your <%= order.store.name %> order includes the following item(s):</p>
|
5
|
+
<%= render "order_mailer/order_details_html", :order => order %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Here are the details of your order received on <%= order.completed_at.strftime("%B %d %Y at %I:%M %p") %>.
|
2
|
+
|
3
|
+
Your order number is <%= order.number %> Please keep it for reference if you speak to a customer service representative.
|
4
|
+
|
5
|
+
Your <%= order.store.name %> order includes the following item(s):
|
6
|
+
|
7
|
+
<%= render "order_mailer/order_details_plain", :order => order %>
|