camaleon_mailchimp 0.0.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +37 -0
- data/app/controllers/plugins/camaleon_mailchimp/admin_controller.rb +61 -0
- data/app/controllers/plugins/camaleon_mailchimp/front_controller.rb +8 -0
- data/app/helpers/plugins/camaleon_mailchimp/main_helper.rb +56 -0
- data/app/models/plugins/camaleon_mailchimp/camaleon_mailchimp.rb +12 -0
- data/app/views/plugins/camaleon_mailchimp/_register_form.erb +5 -0
- data/app/views/plugins/camaleon_mailchimp/_update_user_more_action.erb +112 -0
- data/app/views/plugins/camaleon_mailchimp/admin/settings.html.erb +27 -0
- data/config/camaleon_plugin.json +42 -0
- data/config/custom_models.rb +133 -0
- data/config/locales/translation.yml +47 -0
- data/config/routes.rb +29 -0
- data/lib/camaleon_mailchimp/engine.rb +4 -0
- data/lib/camaleon_mailchimp/version.rb +3 -0
- data/lib/camaleon_mailchimp.rb +4 -0
- data/lib/tasks/camaleon_mailchimp_tasks.rake +4 -0
- data/test/camaleon_mailchimp_test.rb +7 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +8 -0
- data/test/test_helper.rb +20 -0
- metadata +170 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 59b9b2da65e3f63e6462246b1b7c96a53cfb90c0
|
4
|
+
data.tar.gz: 124848d87d8748172d8f8f5982aed820008be02a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5689a4bfbd2eef0c0871f92ffc63b4cfff67c7ec33ef843bf837673b329462fa841cd2a19ec7630b3a79773cf0dccc7f73f0ebb6770ed8d8dc1f71711f518b0f
|
7
|
+
data.tar.gz: 47f39ff6f1c94ec6ba3260201060b8b6a4c964fa82f71947161dd7ebd0904ee0d2efb2e0339b9e3d37d7168a94528f4668afd77dc805887f990fa4a817229202
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2015 Raúl Anatol
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'CamaleonMailchimp'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
Bundler::GemHelper.install_tasks
|
26
|
+
|
27
|
+
require 'rake/testtask'
|
28
|
+
|
29
|
+
Rake::TestTask.new(:test) do |t|
|
30
|
+
t.libs << 'lib'
|
31
|
+
t.libs << 'test'
|
32
|
+
t.pattern = 'test/**/*_test.rb'
|
33
|
+
t.verbose = false
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
task default: :test
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class Plugins::CamaleonMailchimp::AdminController < Apps::PluginsAdminController
|
2
|
+
include Plugins::CamaleonMailchimp::MainHelper
|
3
|
+
|
4
|
+
def settings
|
5
|
+
@mailchimp = current_site.get_meta('mailchimp_config')
|
6
|
+
end
|
7
|
+
|
8
|
+
def save_settings
|
9
|
+
current_site.set_meta('mailchimp_config',
|
10
|
+
{
|
11
|
+
api_key: params[:mailchimp][:api_key],
|
12
|
+
list_id: params[:mailchimp][:list_id]
|
13
|
+
})
|
14
|
+
flash[:notice] = "#{t('plugin.mailchimp.messages.settings_saved')}"
|
15
|
+
redirect_to action: :settings
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def subscribe
|
20
|
+
user = current_site.users.find(params[:user_id])
|
21
|
+
error = user.mailchimp_subscribe!
|
22
|
+
if error.nil?
|
23
|
+
result = {
|
24
|
+
message: {
|
25
|
+
title: t('plugin.mailchimp.success.subscribe.title'),
|
26
|
+
close: t('plugin.mailchimp.close'),
|
27
|
+
}
|
28
|
+
}
|
29
|
+
else
|
30
|
+
result = {
|
31
|
+
errors: {
|
32
|
+
title: error[:title],
|
33
|
+
msg: error[:message],
|
34
|
+
close: t('plugin.mailchimp.close'),
|
35
|
+
}
|
36
|
+
}
|
37
|
+
end
|
38
|
+
render json: result
|
39
|
+
end
|
40
|
+
|
41
|
+
def unsubscribe
|
42
|
+
user = current_site.users.find(params[:user_id])
|
43
|
+
if user.mailchimp_unsubscribe!
|
44
|
+
result = {
|
45
|
+
message: {
|
46
|
+
title: t('plugin.mailchimp.success.unsubscribe.title'),
|
47
|
+
close: t('plugin.mailchimp.close'),
|
48
|
+
}
|
49
|
+
}
|
50
|
+
else
|
51
|
+
result = {
|
52
|
+
errors: {
|
53
|
+
title: t('plugin.mailchimp.error.unsubscribe.title'),
|
54
|
+
msg: t('plugin.mailchimp.error.unsubscribe.message'),
|
55
|
+
close: t('plugin.mailchimp.close'),
|
56
|
+
}
|
57
|
+
}
|
58
|
+
end
|
59
|
+
render json: result
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Plugins::CamaleonMailchimp::MainHelper
|
2
|
+
def self.included(klass)
|
3
|
+
# klass.helper_method [:my_helper_method] rescue "" # here your methods accessible from views
|
4
|
+
end
|
5
|
+
|
6
|
+
# here all actions on going to active
|
7
|
+
# you can run sql commands like this:
|
8
|
+
# results = ActiveRecord::Base.connection.execute(query);
|
9
|
+
# plugin: plugin model
|
10
|
+
def camaleon_mailchimp_on_active(plugin)
|
11
|
+
generate_custom_field_newsletter
|
12
|
+
|
13
|
+
current_site.set_meta('mailchimp_config', {api_key: 'XXX', list_id: 'XXX'})
|
14
|
+
end
|
15
|
+
|
16
|
+
# here all actions on going to inactive
|
17
|
+
# plugin: plugin model
|
18
|
+
def camaleon_mailchimp_on_inactive(plugin)
|
19
|
+
end
|
20
|
+
|
21
|
+
# here all actions to upgrade for a new version
|
22
|
+
# plugin: plugin model
|
23
|
+
def camaleon_mailchimp_on_upgrade(plugin)
|
24
|
+
end
|
25
|
+
|
26
|
+
def mailchimp_user_register_form(plugin)
|
27
|
+
plugin[:html] << render('plugins/camaleon_mailchimp/register_form', f: plugin[:f])
|
28
|
+
end
|
29
|
+
|
30
|
+
def mailchimp_user_update_more_actions(plugin)
|
31
|
+
plugin[:html] << render('plugins/camaleon_mailchimp/update_user_more_action', f: plugin[:f])
|
32
|
+
end
|
33
|
+
|
34
|
+
def camaleon_mailchimp_plugin_options(arg)
|
35
|
+
arg[:links] << link_to(t('plugin.mailchimp.settings.link_name'), admin_plugins_camaleon_mailchimp_settings_path)
|
36
|
+
end
|
37
|
+
|
38
|
+
def mailchimp_user_after_register(plugin)
|
39
|
+
if params[:user][:newsletter_enabled] == '1'
|
40
|
+
user = plugin[:user]
|
41
|
+
user.mailchimp_subscribe!
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def generate_custom_field_newsletter
|
48
|
+
group = User.first.get_user_field_groups(current_site).where({slug: 'plugin_mailchimp_user_data'})
|
49
|
+
unless group.present?
|
50
|
+
new_group = group.create({name: 'Mailchimp user data', slug: 'plugin_mailchimp_user_data', description: 'Mailchimp newsletter user subscription data'})
|
51
|
+
new_group.add_field({:name => "t('plugin.mailchimp.user.newsletter_subscribed')", :slug => 'mailchimp_newsletter_subscribed'}, {field_key: 'checkbox', default_value: false})
|
52
|
+
new_group.add_field({:name => "t('plugin.mailchimp.user.newsletter_enabled_at')", :slug => 'mailchimp_newsletter_enabled_at'}, {field_key: 'date'})
|
53
|
+
new_group.add_field({:name => "t('plugin.mailchimp.user.member_id')", :slug => 'mailchimp_member_id'}, {field_key: 'text_box'})
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# class Plugins::CamaleonMailchimp::Models::CamaleonMailchimp < ActiveRecord::Base
|
2
|
+
# attr_accessible :path, :browser_key
|
3
|
+
# belongs_to :site
|
4
|
+
|
5
|
+
# here create your models normally
|
6
|
+
# notice: your tables in database will be plugins_camaleon_mailchimp in plural (check rails documentation)
|
7
|
+
# end
|
8
|
+
|
9
|
+
# here your default models customization
|
10
|
+
# Site.class_eval do
|
11
|
+
# has_many :camaleon_mailchimp, class_name: "Plugins::CamaleonMailchimp::Models::CamaleonMailchimp"
|
12
|
+
# end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
<div class="col-md-3">
|
2
|
+
<div class="panel panel-default panel-lite plugin-panel-user-tags">
|
3
|
+
<div class="panel-heading">
|
4
|
+
<h3 class="panel-title">Mailchimp</h3>
|
5
|
+
<ul class="panel-controls">
|
6
|
+
<li><a href="#" class="panel-collapse"><span class="fa fa-angle-down"></span></a></li>
|
7
|
+
</ul>
|
8
|
+
</div>
|
9
|
+
<div class="panel-body ">
|
10
|
+
<% if !@user.the_newsletter_subscribed? %>
|
11
|
+
<a href="#" class="btn btn-success btn-block" data-toggle="modal" data-target="#modal_plugin_mailchimp_subscribe">
|
12
|
+
<%= t('plugin.mailchimp.form.subscribe') %>
|
13
|
+
</a>
|
14
|
+
<% else %>
|
15
|
+
<a href="#" class="btn btn-danger btn-block" data-toggle="modal" data-target="#modal_plugin_mailchimp_unsubscribe">
|
16
|
+
<%= t('plugin.mailchimp.form.unsubscribe') %>
|
17
|
+
</a>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div class="modal animated fadeIn" id="modal_plugin_mailchimp_subscribe" tabindex="-1" role="dialog" aria-labelledby="smallModalHead" aria-hidden="true">
|
24
|
+
<div class="modal-dialog">
|
25
|
+
<div class="modal-content">
|
26
|
+
<div class="modal-header">
|
27
|
+
<button type="button" class="close" data-dismiss="modal">
|
28
|
+
<span aria-hidden="true">×</span><span class="sr-only"><%= t('plugin.mailchimp.modal.close') %></span>
|
29
|
+
</button>
|
30
|
+
<h4 class="modal-title" id="smallModalHead"><%= t('plugin.mailchimp.modal.subscribe.title') %></h4>
|
31
|
+
</div>
|
32
|
+
<div class="modal-body">
|
33
|
+
<p><%= t('plugin.mailchimp.modal.subscribe.body') %></p>
|
34
|
+
<%= form_for @user, url: @user.new_record? ? admin_users_path : admin_plugins_camaleon_mailchimp_subscribe_path(@user), html: {class: 'form-ajax-mailchimp-subscribe'} do |f| %>
|
35
|
+
<div class="modal-body form-horizontal form-group-separated">
|
36
|
+
<div class="modal-footer">
|
37
|
+
<button type="submit" class="btn btn-danger mailchimp-subscribe-btn"><%= t('plugin.mailchimp.modal.subscribe.submit') %></button>
|
38
|
+
<button type="button" class="btn btn-default" data-dismiss="modal"><%= t('plugin.mailchimp.modal.close') %></button>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
<% end %>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div class="modal animated fadeIn" id="modal_plugin_mailchimp_unsubscribe" tabindex="-1" role="dialog" aria-labelledby="smallModalHead" aria-hidden="true">
|
48
|
+
<div class="modal-dialog">
|
49
|
+
<div class="modal-content">
|
50
|
+
<div class="modal-header">
|
51
|
+
<button type="button" class="close" data-dismiss="modal">
|
52
|
+
<span aria-hidden="true">×</span><span class="sr-only"><%= t('plugin.mailchimp.modal.close') %></span>
|
53
|
+
</button>
|
54
|
+
<h4 class="modal-title" id="smallModalHead"><%= t('plugin.mailchimp.modal.unsubscribe.title') %></h4>
|
55
|
+
</div>
|
56
|
+
<div class="modal-body">
|
57
|
+
<p><%= t('plugin.mailchimp.modal.unsubscribe.body') %></p>
|
58
|
+
<%= form_for @user, url: @user.new_record? ? admin_users_path : admin_plugins_camaleon_mailchimp_unsubscribe_path(@user), html: {class: 'form-ajax-mailchimp-unsubscribe'} do |f| %>
|
59
|
+
<div class="modal-body form-horizontal form-group-separated">
|
60
|
+
<div class="modal-footer">
|
61
|
+
<button type="submit" class="btn btn-danger"><%= t('plugin.mailchimp.modal.unsubscribe.submit') %></button>
|
62
|
+
<button type="button" class="btn btn-default" data-dismiss="modal"><%= t('plugin.mailchimp.modal.close') %></button>
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
<% end %>
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
|
71
|
+
<% add_asset_library('form_ajax', 'cropper') %>
|
72
|
+
|
73
|
+
<script>
|
74
|
+
jQuery(function ($) {
|
75
|
+
$('.form-ajax-mailchimp-subscribe').ajaxForm({
|
76
|
+
success: function (res) {
|
77
|
+
if (res.errors) {
|
78
|
+
$.fn.alert({
|
79
|
+
type: 'error',
|
80
|
+
title: res.errors.title,
|
81
|
+
content: res.errors.msg,
|
82
|
+
icon: 'times',
|
83
|
+
close: res.errors.close
|
84
|
+
});
|
85
|
+
} else {
|
86
|
+
$.fn.alert({title: res.message.msg, close: res.message.close});
|
87
|
+
$("#modal_plugin_mailchimp_subscribe").modal('hide');
|
88
|
+
window.location.href = '<%= admin_users_path %>';
|
89
|
+
}
|
90
|
+
}
|
91
|
+
});
|
92
|
+
|
93
|
+
$('.form-ajax-mailchimp-unsubscribe').ajaxForm({
|
94
|
+
success: function (res) {
|
95
|
+
if (res.errors) {
|
96
|
+
$.fn.alert({
|
97
|
+
type: 'error',
|
98
|
+
title: res.errors.title,
|
99
|
+
content: res.errors.msg,
|
100
|
+
icon: 'times',
|
101
|
+
close: res.errors.close
|
102
|
+
});
|
103
|
+
} else {
|
104
|
+
$.fn.alert({title: res.message.msg, close: res.message.close});
|
105
|
+
$("#modal_plugin_mailchimp_unsubscribe").modal('hide');
|
106
|
+
window.location.href = '<%= admin_users_path %>';
|
107
|
+
}
|
108
|
+
}
|
109
|
+
});
|
110
|
+
|
111
|
+
});
|
112
|
+
</script>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<%= form_for(admin_plugins_camaleon_mailchimp_settings_path, html: {id: 'mailchimp_form', class: 'validate'}) do %>
|
2
|
+
<div class="panel panel-default">
|
3
|
+
|
4
|
+
<div class="panel-heading">
|
5
|
+
<h3 class="panel-title"> <%= t('plugin.mailchimp.settings.title') %></h3>
|
6
|
+
</div>
|
7
|
+
<div class="panel-body">
|
8
|
+
<div class="form-group">
|
9
|
+
<div class="input-group">
|
10
|
+
<span class="input-group-addon"><%= t('plugin.mailchimp.form.api_key') %> </span>
|
11
|
+
<%= text_field_tag("mailchimp[api_key]", @mailchimp[:api_key], class: "required form-control") %>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
<div class="form-group">
|
15
|
+
<div class="input-group">
|
16
|
+
<span class="input-group-addon"><%= t('plugin.mailchimp.form.list_id') %> </span>
|
17
|
+
<%= text_field_tag("mailchimp[list_id]", @mailchimp[:list_id], class: "required form-control") %>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<div class="panel-footer">
|
22
|
+
<a class="btn btn-default" href="<%= url_for admin_plugins_path %>"><%= t('admin.button.back') %></a>
|
23
|
+
<button class="btn btn-primary pull-right" type="submit"><%= t('admin.button.submit') %></button>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<% end %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
{
|
2
|
+
"title": "Mailchimp",
|
3
|
+
"descr": "",
|
4
|
+
"version": "0.1",
|
5
|
+
"key": "camaleon_mailchimp",
|
6
|
+
"helpers": [
|
7
|
+
"Plugins::CamaleonMailchimp::MainHelper"
|
8
|
+
],
|
9
|
+
"options": [
|
10
|
+
{
|
11
|
+
"label": "Settings",
|
12
|
+
"url": "admin_plugins_camaleon_mailchimp_settings_path",
|
13
|
+
"eval_url": true
|
14
|
+
}
|
15
|
+
],
|
16
|
+
"hooks": {
|
17
|
+
"on_active": [
|
18
|
+
"camaleon_mailchimp_on_active"
|
19
|
+
],
|
20
|
+
"on_inactive": [
|
21
|
+
"camaleon_mailchimp_on_inactive"
|
22
|
+
],
|
23
|
+
"on_upgrade": [
|
24
|
+
"camaleon_mailchimp_on_upgrade"
|
25
|
+
],
|
26
|
+
"plugin_options": [
|
27
|
+
"camaleon_mailchimp_plugin_options"
|
28
|
+
],
|
29
|
+
"user_after_register": [
|
30
|
+
"mailchimp_user_after_register"
|
31
|
+
],
|
32
|
+
"user_register_form": [
|
33
|
+
"mailchimp_user_register_form"
|
34
|
+
],
|
35
|
+
"user_after_update": [
|
36
|
+
"mailchimp_user_after_update"
|
37
|
+
],
|
38
|
+
"user_update_more_actions": [
|
39
|
+
"mailchimp_user_update_more_actions"
|
40
|
+
]
|
41
|
+
}
|
42
|
+
}
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'gibbon'
|
2
|
+
# Extending User Model to add newsletter attributes
|
3
|
+
User.class_eval do
|
4
|
+
|
5
|
+
def the_newsletter_subscribed?
|
6
|
+
self.get_field_value('mailchimp_newsletter_subscribed').to_s.to_bool
|
7
|
+
end
|
8
|
+
|
9
|
+
def the_newsletter_enabled_at?
|
10
|
+
self.get_field_value('mailchimp_newsletter_enabled_at').to_date
|
11
|
+
end
|
12
|
+
|
13
|
+
def the_mailchimp_member_id
|
14
|
+
self.get_field_value('mailchimp_member_id').to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def mailchimp_subscribe!
|
18
|
+
error = nil
|
19
|
+
begin
|
20
|
+
new_member = mailchimp_api_subscribe
|
21
|
+
mailchimp_update_subscription_values!(new_member) unless new_member.nil?
|
22
|
+
error
|
23
|
+
rescue Gibbon::MailChimpError => mailchimp_exception
|
24
|
+
if mailchimp_exception.title.downcase.include? 'exists'
|
25
|
+
Rails.logger.error "[Mailchimp plugin error] EXISTS: #{mailchimp_exception} title: #{mailchimp_exception.title} detail: #{mailchimp_exception.detail} body: #{mailchimp_exception.body}"
|
26
|
+
error = {
|
27
|
+
:message => I18n.t('plugin.mailchimp.error.exists_subscribe.message'),
|
28
|
+
:title => I18n.t('plugin.mailchimp.error.exists_subscribe.title')
|
29
|
+
}
|
30
|
+
else
|
31
|
+
error = {
|
32
|
+
:message => I18n.t('plugin.mailchimp.error.generic.message'),
|
33
|
+
:title => I18n.t('plugin.mailchimp.error.generic.title')
|
34
|
+
}
|
35
|
+
end
|
36
|
+
rescue Exception => exception
|
37
|
+
Rails.logger.warn "[Mailchimp plugin] Error trying to subscribe an new user: #{id} - Error: #{exception}"
|
38
|
+
error = {
|
39
|
+
:message => I18n.t('plugin.mailchimp.error.generic.message'),
|
40
|
+
:title => I18n.t('plugin.mailchimp.error.generic.title')
|
41
|
+
}
|
42
|
+
ensure
|
43
|
+
error
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def mailchimp_unsubscribe!
|
48
|
+
begin
|
49
|
+
body_value = {
|
50
|
+
status: 'unsubscribed'
|
51
|
+
}
|
52
|
+
plugin_config = current_site.get_meta('mailchimp_config')
|
53
|
+
mailchimp_api_key = plugin_config[:api_key]
|
54
|
+
list_id = plugin_config[:list_id]
|
55
|
+
member_id = the_mailchimp_member_id
|
56
|
+
Rails.logger.info "[Mailchimp plugin] Start unsubscribe list: #{list_id} api: #{mailchimp_api_key} member_id: #{member_id}"
|
57
|
+
gibbon = Gibbon::Request.new(api_key: mailchimp_api_key)
|
58
|
+
gibbon.lists(list_id).members(member_id).update(body: body_value)
|
59
|
+
mailchimp_update_unsubscription_values!
|
60
|
+
rescue Gibbon::MailChimpError => exception
|
61
|
+
Rails.logger.error "[Mailchimp plugin error] exception: #{exception} title: #{exception.title} detail: #{exception.detail} body: #{exception.body}"
|
62
|
+
false
|
63
|
+
rescue Exception => exception
|
64
|
+
Rails.logger.warn "[Mailchimp plugin] Error trying to unsubscribe an new user: #{id} - Error: #{exception}"
|
65
|
+
false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def mailchimp_api_subscribe
|
72
|
+
body_value = {
|
73
|
+
email_address: email,
|
74
|
+
status: 'subscribed',
|
75
|
+
merge_fields: {
|
76
|
+
FNAME: meta[:first_name],
|
77
|
+
LNAME: meta[:last_name]
|
78
|
+
}
|
79
|
+
}
|
80
|
+
plugin_config = current_site.get_meta('mailchimp_config')
|
81
|
+
mailchimp_api_key = plugin_config[:api_key]
|
82
|
+
list_id = plugin_config[:list_id]
|
83
|
+
gibbon = Gibbon::Request.new(api_key: mailchimp_api_key)
|
84
|
+
gibbon.lists(list_id).members.create(body: body_value)
|
85
|
+
end
|
86
|
+
|
87
|
+
#
|
88
|
+
# def mailchimp_api_update_subscription
|
89
|
+
# begin
|
90
|
+
# body_value = {
|
91
|
+
# email_address: email,
|
92
|
+
# status: 'subscribed',
|
93
|
+
# merge_fields: {
|
94
|
+
# FNAME: meta[:first_name],
|
95
|
+
# LNAME: meta[:last_name]
|
96
|
+
# }
|
97
|
+
# }
|
98
|
+
# plugin_config = current_site.get_meta('mailchimp_config')
|
99
|
+
# mailchimp_api_key = plugin_config[:api_key]
|
100
|
+
# list_id = plugin_config[:list_id]
|
101
|
+
# gibbon = Gibbon::Request.new(api_key: mailchimp_api_key)
|
102
|
+
# gibbon.lists(list_id).members(mem).update(body: body_value)
|
103
|
+
# rescue Gibbon::MailChimpError => exception
|
104
|
+
# Rails.logger.error "[Mailchimp plugin error] exception: #{exception} title: #{exception.title} detail: #{exception.detail} body: #{exception.body}"
|
105
|
+
# nil
|
106
|
+
# end
|
107
|
+
# end
|
108
|
+
|
109
|
+
def mailchimp_update_unsubscription_values!
|
110
|
+
update_mailchimp_values(0, '', '')
|
111
|
+
end
|
112
|
+
|
113
|
+
def mailchimp_update_subscription_values!(new_member)
|
114
|
+
update_mailchimp_values(1, Time.zone.now, new_member['id'])
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
def update_mailchimp_values(subscribed, enabled_at, member_id)
|
119
|
+
field_groups = self.get_user_field_groups(current_site).where({:slug => 'plugin_mailchimp_user_data'}).first
|
120
|
+
field_newsletter_subscribed = field_groups.get_field('mailchimp_newsletter_subscribed')
|
121
|
+
field_newsletter_enabled_at = field_groups.get_field('mailchimp_newsletter_enabled_at')
|
122
|
+
field_member_id = field_groups.get_field('mailchimp_member_id')
|
123
|
+
|
124
|
+
values_to_save = {
|
125
|
+
:mailchimp_newsletter_subscribed => {id: field_newsletter_subscribed.id, values: [subscribed]},
|
126
|
+
:mailchimp_newsletter_enabled_at => {id: field_newsletter_enabled_at.id, values: [enabled_at]},
|
127
|
+
:mailchimp_member_id => {id: field_member_id.id, values: [member_id]}
|
128
|
+
}
|
129
|
+
|
130
|
+
set_field_values(values_to_save)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
en:
|
2
|
+
plugin:
|
3
|
+
mailchimp:
|
4
|
+
settings:
|
5
|
+
link_name: 'Settings'
|
6
|
+
title: "Mailchimp plugin"
|
7
|
+
user:
|
8
|
+
newsletter_subscribed: 'Subscribed'
|
9
|
+
newsletter_enabled_at: 'From:'
|
10
|
+
messages:
|
11
|
+
settings_saved: 'Settings saved!'
|
12
|
+
modal:
|
13
|
+
unsubscribe:
|
14
|
+
title: "Unsubscribe user"
|
15
|
+
body: "Are you sure?"
|
16
|
+
submit: "Unsubscribe"
|
17
|
+
subscribe:
|
18
|
+
submit: "Subscribe"
|
19
|
+
body: "Are you sure?"
|
20
|
+
title: "Subscribe user"
|
21
|
+
form:
|
22
|
+
api_key: "API Key"
|
23
|
+
list_id: "List ID"
|
24
|
+
subscribe: "Subscribe"
|
25
|
+
unsubscribe: "Unsubscribe"
|
26
|
+
success:
|
27
|
+
subscribe:
|
28
|
+
title: "User subscribed"
|
29
|
+
unsubscribe:
|
30
|
+
title: "User unsubscribed"
|
31
|
+
error:
|
32
|
+
subscribe:
|
33
|
+
title: "Error when subscribing to Mailchimp"
|
34
|
+
unsubscribe:
|
35
|
+
title: "Error when unsubscribing to Mailchimp"
|
36
|
+
message: "An error has occurred to do subscription"
|
37
|
+
close: "Close"
|
38
|
+
es:
|
39
|
+
plugin:
|
40
|
+
mailchimp:
|
41
|
+
settings:
|
42
|
+
link_name: 'Preferencias'
|
43
|
+
user:
|
44
|
+
newsletter_subscribed: 'Suscrito'
|
45
|
+
newsletter_enabled_at: 'Desde:'
|
46
|
+
messages:
|
47
|
+
settings_saved: '¡Preferencias guardadas!'
|
data/config/routes.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
|
3
|
+
scope '(:locale)', locale: /#{PluginRoutes.all_locales}/, :defaults => {} do
|
4
|
+
# frontend
|
5
|
+
namespace :plugins do
|
6
|
+
namespace 'camaleon_mailchimp' do
|
7
|
+
get 'index' => 'front#index'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
#Admin Panel
|
13
|
+
scope 'admin', as: 'admin' do
|
14
|
+
namespace 'plugins' do
|
15
|
+
namespace 'camaleon_mailchimp' do
|
16
|
+
get 'settings' => 'admin#settings'
|
17
|
+
post 'settings' => 'admin#save_settings'
|
18
|
+
|
19
|
+
patch ':user_id/subscribe' => 'admin#subscribe', :as => 'subscribe'
|
20
|
+
patch ':user_id/unsubscribe' => 'admin#unsubscribe', :as => 'unsubscribe'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# main routes
|
26
|
+
#scope 'camaleon_mailchimp', module: 'plugins/camaleon_mailchimp/', as: 'camaleon_mailchimp' do
|
27
|
+
# Here my routes for main routes
|
28
|
+
#end
|
29
|
+
end
|