cama_subscriber 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +37 -0
- data/app/controllers/plugins/cama_subscriber/admin_controller.rb +13 -0
- data/app/controllers/plugins/cama_subscriber/front_controller.rb +101 -0
- data/app/controllers/plugins/cama_subscriber/groups_controller.rb +46 -0
- data/app/controllers/plugins/cama_subscriber/items_controller.rb +56 -0
- data/app/controllers/plugins/cama_subscriber/promotions_controller.rb +94 -0
- data/app/helpers/plugins/cama_subscriber/main_helper.rb +35 -0
- data/app/models/plugins/cama_subscriber/group.rb +5 -0
- data/app/models/plugins/cama_subscriber/group_item.rb +4 -0
- data/app/models/plugins/cama_subscriber/item.rb +43 -0
- data/app/models/plugins/cama_subscriber/promotion.rb +27 -0
- data/app/models/plugins/cama_subscriber/promotion_group.rb +4 -0
- data/app/models/plugins/cama_subscriber/promotion_item.rb +11 -0
- data/app/models/plugins/cama_subscriber.rb +13 -0
- data/app/views/plugins/cama_subscriber/admin/index.html.erb +9 -0
- data/app/views/plugins/cama_subscriber/admin/settings.html.erb +27 -0
- data/app/views/plugins/cama_subscriber/front/index.html.erb +2 -0
- data/app/views/plugins/cama_subscriber/groups/form.html.erb +17 -0
- data/app/views/plugins/cama_subscriber/groups/index.html.erb +124 -0
- data/app/views/plugins/cama_subscriber/items/form.html.erb +27 -0
- data/app/views/plugins/cama_subscriber/items/index.html.erb +52 -0
- data/app/views/plugins/cama_subscriber/items/show.html.erb +25 -0
- data/app/views/plugins/cama_subscriber/layouts/readme.txt +2 -0
- data/app/views/plugins/cama_subscriber/promotions/form.html.erb +65 -0
- data/app/views/plugins/cama_subscriber/promotions/form_test.html.erb +18 -0
- data/app/views/plugins/cama_subscriber/promotions/index.html.erb +55 -0
- data/app/views/plugins/cama_subscriber/promotions/show.html.erb +25 -0
- data/config/camaleon_plugin.json +19 -0
- data/config/initializers/custom_models.rb +7 -0
- data/config/locales/en.yml +5 -0
- data/config/locales/es.yml +112 -0
- data/config/routes.rb +39 -0
- data/db/migrate/20160319112345_subscriber_structure.rb +65 -0
- data/lib/1x1.png +0 -0
- data/lib/cama_subscriber/engine.rb +4 -0
- data/lib/cama_subscriber/version.rb +3 -0
- data/lib/cama_subscriber.rb +4 -0
- data/lib/tasks/cama_subscriber_tasks.rake +4 -0
- metadata +112 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
<div class="panel panel-default" id="newsletter_table">
|
2
|
+
<div class="panel-heading">
|
3
|
+
<div class="row">
|
4
|
+
<div class="col-md-6">
|
5
|
+
<h4><%= t('plugins.cama_subscriber.groups.title') %></h4>
|
6
|
+
</div>
|
7
|
+
<div class="col-md-6 text-right">
|
8
|
+
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#news_preview_group"><%= t('.preview_btn', default: 'Sample Form') %></button>
|
9
|
+
<%= link_to("<i class='fa fa-plus'></i> #{t('.add_new', default: 'Add New')}".html_safe, url_for(action: :new), class: 'btn btn-primary ajax_link', title: t('.add_new', default: 'Add New')) %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
<div class="panel-body">
|
14
|
+
<table class="table table-responsive table-hover table-striped">
|
15
|
+
<thead>
|
16
|
+
<tr>
|
17
|
+
<th><%= t('.id', default: 'ID') %></th>
|
18
|
+
<th><%= t('.name', default: 'Name') %></th>
|
19
|
+
<th><%= t('.key', default: 'Key') %></th>
|
20
|
+
<th><%= t('.subscribers', default: 'Subscribers') %></th>
|
21
|
+
<th><%= t('.created_at', default: 'Created at') %></th>
|
22
|
+
<th><%= t('camaleon_cms.admin.table.actions') %></th>
|
23
|
+
</tr>
|
24
|
+
</thead>
|
25
|
+
<tbody>
|
26
|
+
<% @items.each do |item| %>
|
27
|
+
<tr>
|
28
|
+
<td><%= item.id %></td>
|
29
|
+
<td><%= item.name %></td>
|
30
|
+
<td><%= item.key %></td>
|
31
|
+
<td><%= item.items.count %></td>
|
32
|
+
<td><%= item.created_at %></td>
|
33
|
+
<td>
|
34
|
+
<%= link_to raw('<i class="fa fa-pencil"></i>'), {action: :edit, id: item.id }, class: "btn btn-default btn-xs ajax_link", title: "#{t('camaleon_cms.admin.button.edit')}" %>
|
35
|
+
<%= link_to raw('<i class="fa fa-eye"></i>'), admin_plugins_cama_subscriber_items_path(group: item.id), class: "btn btn-default btn-xs", title: t('.view', default: 'View subscribers') %>
|
36
|
+
<%= link_to raw('<i class="fa fa-times"></i>'), { action: :destroy, id: item.id },method: :delete, data: { confirm: t('camaleon_cms.admin.message.delete_item') }, class: "btn btn-danger btn-xs", title: "#{t('camaleon_cms.admin.button.delete')}" %>
|
37
|
+
</td>
|
38
|
+
</tr>
|
39
|
+
<% end %>
|
40
|
+
</tbody>
|
41
|
+
</table>
|
42
|
+
<%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @items.empty? %>
|
43
|
+
<%= raw cama_do_pagination(@items) %>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div class="modal fade" tabindex="-1" role="dialog" id="news_preview_group">
|
48
|
+
<div class="modal-dialog">
|
49
|
+
<div class="modal-content">
|
50
|
+
<div class="modal-header">
|
51
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
52
|
+
<h4 class="modal-title">Modal title</h4>
|
53
|
+
</div>
|
54
|
+
<div class="modal-body">
|
55
|
+
<small>
|
56
|
+
<code>
|
57
|
+
<%= form_tag(plugins_cama_subscriber_subscribe_url) do %> <br>
|
58
|
+
<%= render partial: "/camaleon_cms/flash_messages.html.erb", locals:{ flash: flash[:cama_subscriber] } %> <br>
|
59
|
+
<input type='hidden' name="group_id" value='1' > <!--Group ID--> <br>
|
60
|
+
<div class="form-group"> <!-- optional --> <br>
|
61
|
+
<label>Name:</label><br> <br>
|
62
|
+
<input name="name" class="form-control"> <br>
|
63
|
+
</div> <br>
|
64
|
+
|
65
|
+
<div class="form-group"> <br>
|
66
|
+
<label>Email:</label><br> <br>
|
67
|
+
<input name="email" class="form-control"> <br>
|
68
|
+
</div> <br>
|
69
|
+
<br>
|
70
|
+
<!--Unlimited of Extra Values--><br>
|
71
|
+
<div class="form-group"><br>
|
72
|
+
<label>Company:</label><br><br>
|
73
|
+
<input name="extra_values[company]" class="form-control"><br>
|
74
|
+
</div><br>
|
75
|
+
<div class="form-group"><br>
|
76
|
+
<label>Country:</label><br><br>
|
77
|
+
<input name="extra_values[country]" class="form-control"><br>
|
78
|
+
</div><br>
|
79
|
+
<br>
|
80
|
+
<div class="text-right"><br>
|
81
|
+
<button type="submit" class="btn btn-primary">Subscribe</button><br>
|
82
|
+
</div><br>
|
83
|
+
<% end %><br>
|
84
|
+
</code>
|
85
|
+
</small>
|
86
|
+
<hr>
|
87
|
+
<h4><%= t('.result_code', default: 'Preview') %></h4>
|
88
|
+
<%= form_tag(plugins_cama_subscriber_subscribe_url) do %>
|
89
|
+
<input type="hidden" name="group_id" value="1">
|
90
|
+
<div class="form-group"> <!-- optional -->
|
91
|
+
<label>Name:</label><br>
|
92
|
+
<input name="name" class="form-control">
|
93
|
+
</div>
|
94
|
+
|
95
|
+
<div class="form-group">
|
96
|
+
<label>Email:</label><br>
|
97
|
+
<input name="email" class="form-control">
|
98
|
+
</div>
|
99
|
+
|
100
|
+
<!--Unlimited of Extra Values-->
|
101
|
+
<div class="form-group">
|
102
|
+
<label>Company:</label><br>
|
103
|
+
<input name="extra_values[company]" class="form-control">
|
104
|
+
</div>
|
105
|
+
<div class="form-group">
|
106
|
+
<label>Country:</label><br>
|
107
|
+
<input name="extra_values[country]" class="form-control">
|
108
|
+
</div>
|
109
|
+
|
110
|
+
<div class="text-right">
|
111
|
+
<button type="submit" class="btn btn-primary">Subscribe</button>
|
112
|
+
</div>
|
113
|
+
<% end %>
|
114
|
+
</div>
|
115
|
+
</div><!-- /.modal-content -->
|
116
|
+
</div><!-- /.modal-dialog -->
|
117
|
+
</div><!-- /.modal -->
|
118
|
+
|
119
|
+
<script type="text/javascript" charset="utf-8">
|
120
|
+
jQuery(function(){
|
121
|
+
var panel = $("#newsletter_table");
|
122
|
+
panel.find(".ajax_link").ajax_modal();
|
123
|
+
});
|
124
|
+
</script>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<%= form_for [:admin, @item], class: 'validate' do |f| %>
|
2
|
+
<div class="panel panel-default">
|
3
|
+
<div class="panel-body">
|
4
|
+
<div class="form-group">
|
5
|
+
<label><%= t('plugins.cama_subscriber.items.index.email') %></label><br>
|
6
|
+
<%= f.text_field :email, class: 'form-control email required' %>
|
7
|
+
</div>
|
8
|
+
<div class="form-group">
|
9
|
+
<label><%= t('plugins.cama_subscriber.items.index.name') %></label><br>
|
10
|
+
<%= f.text_field :name, class: 'form-control' %>
|
11
|
+
</div>
|
12
|
+
<div class="form-group">
|
13
|
+
<label><%= t('plugins.cama_subscriber.items.index.status') %></label><br>
|
14
|
+
<%= f.select :status, Plugins::CamaSubscriber::Item::STATUS.map{|i| [t("plugins.cama_subscriber.items.status.#{i}", default: i), i] }, {}, class: 'form-control' %>
|
15
|
+
</div>
|
16
|
+
<div class="form-group">
|
17
|
+
<label><%= t('plugins.cama_subscriber.items.index.groups') %></label><br>
|
18
|
+
<% groups = @item.groups.pluck(:id); current_site.subscriber_groups.each do |g| %>
|
19
|
+
<label><%= check_box_tag "groups[]", g.id, groups.include?(g.id) %> <%= g.name %></label><br>
|
20
|
+
<% end %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="panel-footer text-right">
|
24
|
+
<button class="btn btn-primary" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<div class="panel panel-default" id="newsletter_table">
|
2
|
+
<div class="panel-heading">
|
3
|
+
<div class="row">
|
4
|
+
<div class="col-md-6">
|
5
|
+
<h4><%= t('plugins.cama_subscriber.items.title') %> <%= ("(#{@group.name})" rescue "") %> </h4>
|
6
|
+
</div>
|
7
|
+
<div class="col-md-6 text-right">
|
8
|
+
<%= link_to("<i class='fa fa-plus'></i> #{t('.add_new', default: 'Add New')}".html_safe, url_for(action: :new), class: 'btn btn-primary ajax_link', title: t('.add_new', default: 'Add New')) %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="panel-body">
|
13
|
+
<table class="table table-responsive table-hover table-striped">
|
14
|
+
<thead>
|
15
|
+
<tr>
|
16
|
+
<th><%= t('.email', default: 'Email') %></th>
|
17
|
+
<th><%= t('.name', default: 'Name') %></th>
|
18
|
+
<th><%= t('.status_accepted', default: 'Status') %></th>
|
19
|
+
<th><%= t('.subscribed_at', default: 'Subscribed at') %></th>
|
20
|
+
<th><%= t('.unsubscribed_at', default: 'Unsubscribed at') %></th>
|
21
|
+
<th><%= t('.groups', default: 'Groups') %></th>
|
22
|
+
<th><%= t('camaleon_cms.admin.table.actions') %></th>
|
23
|
+
</tr>
|
24
|
+
</thead>
|
25
|
+
<tbody>
|
26
|
+
<% @items.each do |item| %>
|
27
|
+
<tr>
|
28
|
+
<td><%= item.email %></td>
|
29
|
+
<td><%= item.name %></td>
|
30
|
+
<td><%= item.status %></td>
|
31
|
+
<td><%= item.created_at %></td>
|
32
|
+
<td><%= item.unsubscribed_at %></td>
|
33
|
+
<td><%= item.groups.pluck(:name).join(', ') %></td>
|
34
|
+
<td>
|
35
|
+
<%= link_to raw('<i class="fa fa-pencil"></i>'), {action: :edit, id: item.id }, class: "btn btn-default btn-xs ajax_link", title: "#{t('camaleon_cms.admin.button.edit')}" %>
|
36
|
+
<%= link_to raw('<i class="fa fa-eye"></i>'), {action: :show, id: item.id }, class: "btn btn-default btn-xs ajax_link", title: "#{t('.view')} - #{item.email}", default: "View #{item.email}" %>
|
37
|
+
<%= link_to raw('<i class="fa fa-times"></i>'), { action: :destroy, id: item.id },method: :delete, data: { confirm: t('camaleon_cms.admin.message.delete_item') }, class: "btn btn-danger btn-xs", title: "#{t('camaleon_cms.admin.button.delete')}" %>
|
38
|
+
</td>
|
39
|
+
</tr>
|
40
|
+
<% end %>
|
41
|
+
</tbody>
|
42
|
+
</table>
|
43
|
+
<%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @items.empty? %>
|
44
|
+
<%= raw cama_do_pagination(@items) %>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
<script type="text/javascript" charset="utf-8">
|
48
|
+
jQuery(function(){
|
49
|
+
var panel = $("#newsletter_table");
|
50
|
+
panel.find(".ajax_link").ajax_modal();
|
51
|
+
});
|
52
|
+
</script>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div class="panel panel-default">
|
2
|
+
<div class="panel-body">
|
3
|
+
<div class="form-group">
|
4
|
+
<label><%= t('plugins.cama_subscriber.items.index.email') %></label><br>
|
5
|
+
<span><%= @item.email %></span>
|
6
|
+
</div>
|
7
|
+
<div class="form-group">
|
8
|
+
<label><%= t('plugins.cama_subscriber.items.index.name') %></label><br>
|
9
|
+
<span><%= @item.name %></span>
|
10
|
+
</div>
|
11
|
+
<div class="form-group">
|
12
|
+
<label><%= t('plugins.cama_subscriber.items.index.status') %></label><br>
|
13
|
+
<span><%= t("plugins.cama_subscriber.items.status.#{@item.status}", default: @item.status) %></span>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<% if @item.options('custom_values').present? %>
|
17
|
+
<div class="form-group">
|
18
|
+
<label><%= t('.custom_values', default: 'Custom Values') %></label>
|
19
|
+
<% @item.options('custom_values').each do |k, v| %>
|
20
|
+
<label><%= k %></label>: <%= v %> <br>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
</div>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<% id = Time.current.to_i %>
|
2
|
+
<%= form_for [:admin, @item], html:{class: 'validate', id: 'promotion_form' } do |f| %>
|
3
|
+
<div class="panel panel-default">
|
4
|
+
<div class="panel-body">
|
5
|
+
<div class="form-group">
|
6
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.name', default: "Name") %></label><br>
|
7
|
+
<%= f.text_field :name, class: 'form-control required' %>
|
8
|
+
</div>
|
9
|
+
<hr>
|
10
|
+
<div class="form-group">
|
11
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.subject', default: 'Email Subject') %></label><br>
|
12
|
+
<%= f.text_field :subject, class: 'form-control required' %>
|
13
|
+
</div>
|
14
|
+
<div class="form-group">
|
15
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.email_from', default: 'Email From') %></label><br>
|
16
|
+
<%= f.text_field :email_from, class: 'form-control' %>
|
17
|
+
</div>
|
18
|
+
<div class="form-group">
|
19
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.email_cc', default: 'Email CC') %></label><br>
|
20
|
+
<%= f.text_field :email_cc, class: 'form-control' %>
|
21
|
+
</div>
|
22
|
+
<div class="form-group">
|
23
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.groups_to_send', default: 'Groups where to send the campaign') %></label><br>
|
24
|
+
<% groups = @item.groups.pluck(:id); current_site.subscriber_groups.each do |g| %>
|
25
|
+
<label><%= check_box_tag "groups[]", g.id, groups.include?(g.id) %> <%= g.name %></label><br>
|
26
|
+
<% end %>
|
27
|
+
<%= "<h4><label class='label label-danger'>#{t('plugins.cama_subscriber.required_groups', default: 'Please create groups where to send the campaign.')}</label></h4>".html_safe if current_site.subscriber_groups.count == 0 %>
|
28
|
+
</div>
|
29
|
+
<div class="form-group">
|
30
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.content', default: 'Content') %></label><br>
|
31
|
+
<%= f.text_area :content, class: 'form-control required', id: id %>
|
32
|
+
<div class="list-group-item list-group-item-info">
|
33
|
+
<%= t(".follow_code", default: 'Use the following codes:') %> <br>
|
34
|
+
<small>
|
35
|
+
<code>unsubscribe_url</code>: <%= t(".unsubscribe_url", default: 'Url to permit unsubscribe the subscriber from current groups') %><br>
|
36
|
+
<code>unsubscribe_all_url</code>: <%= t(".unsubscribe_all_url", default: 'Url to permit unsubscribe the subscriber from all groups') %><br>
|
37
|
+
</small>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
<div>
|
41
|
+
<a href="#" onclick="$(this).closest('div').hide().next().removeClass('hidden'); return false;" class="btn box-default"><%= t('plugins.cama_subscriber.promotions.advanced', default: 'Advanced Options') %></a>
|
42
|
+
</div>
|
43
|
+
<div class="hidden">
|
44
|
+
<div class="form-group">
|
45
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.layout', default: 'Layout') %></label><br>
|
46
|
+
<%= f.text_field :layout, class: 'form-control' %>
|
47
|
+
</div>
|
48
|
+
<div class="form-group">
|
49
|
+
<label><%= t('plugins.cama_subscriber.promotions.index.template', default: 'Template') %></label><br>
|
50
|
+
<%= f.text_field :template, class: 'form-control' %>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
|
55
|
+
<div class="panel-footer text-right">
|
56
|
+
<button class="btn btn-primary" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
<% end %>
|
60
|
+
<script>
|
61
|
+
jQuery(function(){
|
62
|
+
$("#promotion_form").validate();
|
63
|
+
$("#<%= id %>").tinymce(cama_get_tinymce_settings({height: 420}));
|
64
|
+
});
|
65
|
+
</script>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= form_tag url_for(action: :send_test, promotion_id: @promotion.id), class: 'validate', id: 'promotion_test_form' do |f| %>
|
2
|
+
<div class="panel panel-default">
|
3
|
+
<div class="panel-body">
|
4
|
+
<div class="form-group">
|
5
|
+
<label><%= t('plugins.cama_subscriber.promotions.email_test', default: "Test Email") %></label><br>
|
6
|
+
<%= text_field_tag "email", "", class: 'form-control required email' %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<div class="panel-footer text-right">
|
10
|
+
<button class="btn btn-primary" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
<script>
|
15
|
+
jQuery(function(){
|
16
|
+
$("#promotion_test_form").validate();
|
17
|
+
});
|
18
|
+
</script>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<div class="panel panel-default" id="newsletter_table">
|
2
|
+
<div class="panel-heading">
|
3
|
+
<div class="row">
|
4
|
+
<div class="col-md-6">
|
5
|
+
<h4><%= t('plugins.cama_subscriber.promotions.title', default: 'Campaigns') %></h4>
|
6
|
+
</div>
|
7
|
+
<div class="col-md-6 text-right">
|
8
|
+
<%= link_to("<i class='fa fa-plus'></i> #{t('.add_new', default: 'Add New')}".html_safe, url_for(action: :new), class: 'btn btn-primary ajax_link', "data-modal_size" => 'modal-lg', title: t('.add_new', default: 'Add New')) %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="panel-body">
|
13
|
+
<table class="table table-responsive table-hover table-striped">
|
14
|
+
<thead>
|
15
|
+
<tr>
|
16
|
+
<th><%= t('.name', default: 'Name') %></th>
|
17
|
+
<th><%= t('.subject', default: 'Subject') %></th>
|
18
|
+
<th><%= t('.subscribers', default: 'Subscribers') %></th>
|
19
|
+
<th><%= t('.status', default: 'Status') %></th>
|
20
|
+
<th><%= t('.groups', default: 'Groups') %></th>
|
21
|
+
<th><%= t('.created_at', default: 'Created At') %></th>
|
22
|
+
<th><%= t('camaleon_cms.admin.table.actions') %></th>
|
23
|
+
</tr>
|
24
|
+
</thead>
|
25
|
+
<tbody>
|
26
|
+
<% @items.each do |item| %>
|
27
|
+
<tr>
|
28
|
+
<td><%= item.name %></td>
|
29
|
+
<td><%= item.subject %></td>
|
30
|
+
<td><%= item.sent? ? "(#{item.sent_promo_items.open.count}/#{item.sent_items.count})" : item.items.count %></td>
|
31
|
+
<td><%= t(".s.#{item.status}", default: item.status.titleize) %></td>
|
32
|
+
<td><%= item.groups.pluck(:name).join(", ") %></td>
|
33
|
+
<td><%= item.created_at %></td>
|
34
|
+
<td>
|
35
|
+
<%= link_to raw('<i class="fa fa-pencil"></i>'), {action: :edit, id: item.id }, class: "btn btn-default btn-xs ajax_link", title: "#{t('camaleon_cms.admin.button.edit')}" %>
|
36
|
+
<%= link_to raw('<i class="fa fa-eye"></i>'), {action: :show, id: item.id }, class: "btn btn-default btn-xs", title: "#{t('.view')}", default: "View" %>
|
37
|
+
<%= link_to(raw('<i class="fa fa-bomb"></i>'), {action: :send_campaign, promotion_id: item.id }, class: "btn btn-default btn-xs", data: { confirm: t('.confirm_send', default: 'Are you sure to send this campaign?') }, title: "#{t('.send_btn')}", default: "Send Campaign") if item.status == 'pending' %>
|
38
|
+
<%= link_to(raw('<i class="fa fa-bolt"></i>'), {action: :send_test, promotion_id: item.id }, class: "btn btn-default btn-xs ajax_link", title: "#{t('.send_test')}", default: "Send test campaign") %>
|
39
|
+
|
40
|
+
<%= link_to raw('<i class="fa fa-times"></i>'), { action: :destroy, id: item.id },method: :delete, data: { confirm: t('camaleon_cms.admin.message.delete_item') }, class: "btn btn-danger btn-xs", title: "#{t('camaleon_cms.admin.button.delete')}" %>
|
41
|
+
</td>
|
42
|
+
</tr>
|
43
|
+
<% end %>
|
44
|
+
</tbody>
|
45
|
+
</table>
|
46
|
+
<%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @items.empty? %>
|
47
|
+
<%= raw cama_do_pagination(@items) %>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<script type="text/javascript" charset="utf-8">
|
51
|
+
jQuery(function(){
|
52
|
+
var panel = $("#newsletter_table");
|
53
|
+
panel.find(".ajax_link").ajax_modal({modal_settings:{keyboard: false, backdrop: 'static' }});
|
54
|
+
});
|
55
|
+
</script>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div class="panel panel-default">
|
2
|
+
<div class="panel-body">
|
3
|
+
<div class="form-group">
|
4
|
+
<label><%= t('plugins.cama_subscriber.items.index.email') %></label><br>
|
5
|
+
<span><%= @item.email %></span>
|
6
|
+
</div>
|
7
|
+
<div class="form-group">
|
8
|
+
<label><%= t('plugins.cama_subscriber.items.index.name') %></label><br>
|
9
|
+
<span><%= @item.name %></span>
|
10
|
+
</div>
|
11
|
+
<div class="form-group">
|
12
|
+
<label><%= t('plugins.cama_subscriber.items.index.status') %></label><br>
|
13
|
+
<span><%= t("plugins.cama_subscriber.items.status.#{@item.status}", default: @item.status) %></span>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<% if @item.options('custom_values').present? %>
|
17
|
+
<div class="form-group">
|
18
|
+
<label><%= t('.custom_values', default: 'Custom Values') %></label>
|
19
|
+
<% @item.options('custom_values').each do |k, v| %>
|
20
|
+
<label><%= k %></label>: <%= v %> <br>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
</div>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{
|
2
|
+
"title": "Cama Subscriber",
|
3
|
+
"descr": "",
|
4
|
+
"key": "cama_subscriber",
|
5
|
+
"helpers": [
|
6
|
+
"Plugins::CamaSubscriber::MainHelper"
|
7
|
+
],
|
8
|
+
"hooks": {
|
9
|
+
"on_active": [
|
10
|
+
"cama_subscriber_on_active"
|
11
|
+
],
|
12
|
+
"on_inactive": [
|
13
|
+
"cama_subscriber_on_inactive"
|
14
|
+
],
|
15
|
+
"plugin_options": ["cama_subscriber_plugin_options"],
|
16
|
+
"admin_before_load": ["cama_subscriber_before_admin"]
|
17
|
+
//here you can add all your hooks (read documentation)
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Rails.application.config.to_prepare do
|
2
|
+
CamaleonCms::Site.class_eval do
|
3
|
+
has_many :subscriber_groups, class_name: "Plugins::CamaSubscriber::Group", foreign_key: :site_id
|
4
|
+
has_many :subscriber_items, class_name: "Plugins::CamaSubscriber::Item", foreign_key: :site_id
|
5
|
+
has_many :subscriber_promotions, class_name: "Plugins::CamaSubscriber::Promotion", foreign_key: :site_id
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
es:
|
2
|
+
plugins:
|
3
|
+
cama_subscriber:
|
4
|
+
title: 'Boletín de Noticias'
|
5
|
+
settings: 'Ajustes'
|
6
|
+
required_groups: 'Por favor cree los grupos a quienes desea enviar la campaña'
|
7
|
+
front:
|
8
|
+
subscribe:
|
9
|
+
you_have_subscribed: 'Tu suscripción fue guardada correctamente'
|
10
|
+
please_confirm_email: 'Su suscripción esta pendiente, por favor confirme su suscripción desde su correo electrónico'
|
11
|
+
already_registered: 'Usted ya esta suscrito a este boletín de noticias'
|
12
|
+
email_required: 'Su correo es requerido para suscribirse a este Boletin de noticias'
|
13
|
+
unsubscribe:
|
14
|
+
you_have_unsubscribed: 'Tu suscripción fue cancelada correctamente'
|
15
|
+
unsubscribe_all:
|
16
|
+
you_have_unsubscribed: 'Tu suscripción fue cancelada correctamente'
|
17
|
+
verify:
|
18
|
+
success_confirm: 'Tu suscripción fué confirmado!'
|
19
|
+
admin:
|
20
|
+
save_settings:
|
21
|
+
saved_settings: 'Su configuración fué guardado correctamente'
|
22
|
+
settings:
|
23
|
+
title: 'Configuración de Boletín de Noticias'
|
24
|
+
needs_confirmation: 'Suscripciones necesitan confirmación?'
|
25
|
+
welcome_msg: 'Mensaje de bienvenida'
|
26
|
+
welcome_subject: 'Titulo del mensaje de bienvenida'
|
27
|
+
settings: 'Configurariones'
|
28
|
+
items:
|
29
|
+
title: 'Subscripciones'
|
30
|
+
status:
|
31
|
+
approved: 'Aprobado'
|
32
|
+
pending: 'Pendiente'
|
33
|
+
unsubscribed: 'Dado de baja'
|
34
|
+
index:
|
35
|
+
add_new: 'Agregar nuevo'
|
36
|
+
view: 'Ver detalles'
|
37
|
+
email: 'Correo Electrónico'
|
38
|
+
name: 'Nombre'
|
39
|
+
groups: 'Grupos'
|
40
|
+
status_accepted: 'Estado'
|
41
|
+
subscribed_at: 'Fecha de suscripción'
|
42
|
+
unsubscribed_at: 'Fecha de baja'
|
43
|
+
show:
|
44
|
+
custom_values: 'Valores Adicionales'
|
45
|
+
create:
|
46
|
+
saved: 'La subscripción fué guardado'
|
47
|
+
update:
|
48
|
+
updated: 'La subscripción fué actualizada'
|
49
|
+
destroy:
|
50
|
+
destroyed: 'La subscripción fué eliminada'
|
51
|
+
|
52
|
+
groups:
|
53
|
+
title: 'Grupos'
|
54
|
+
index:
|
55
|
+
add_new: 'Agregar nuevo'
|
56
|
+
view: 'Ver suscritos'
|
57
|
+
name: 'Nombre'
|
58
|
+
key: 'Código'
|
59
|
+
created_at: 'Fecha de creación'
|
60
|
+
subscribers: 'Suscritos'
|
61
|
+
result_code: 'Vista Previa'
|
62
|
+
preview_btn: 'Ver Ejemplo'
|
63
|
+
create:
|
64
|
+
saved: 'El grupo fué guardado'
|
65
|
+
update:
|
66
|
+
updated: 'El grupo fué actualizado'
|
67
|
+
destroy:
|
68
|
+
destroyed: 'El grupo fué eliminado'
|
69
|
+
|
70
|
+
|
71
|
+
promotions:
|
72
|
+
title: 'Campañas'
|
73
|
+
advanced: 'Configuración avanzada'
|
74
|
+
index:
|
75
|
+
add_new: 'Agregar nuevo'
|
76
|
+
view: 'Ver detalles'
|
77
|
+
email: 'Correo Electrónico'
|
78
|
+
name: 'Nombre'
|
79
|
+
datas: 'Datos'
|
80
|
+
layout: 'Diseño'
|
81
|
+
template: 'Plantilla'
|
82
|
+
email_from: 'Correo de Envío'
|
83
|
+
subject: 'Sujeto/Titulo de Correo'
|
84
|
+
email_cc: 'Coreo en copia'
|
85
|
+
content: 'Contenido'
|
86
|
+
created_at: 'Fecha de creación'
|
87
|
+
groups: 'Grupos'
|
88
|
+
groups_to_send: 'Grupos a quienes enviar la campaña'
|
89
|
+
status: 'Estado'
|
90
|
+
send_btn: 'Enviar Campaña'
|
91
|
+
confirm_send: 'Esta seguro de enviar esta campaña?'
|
92
|
+
send_test: 'Enviar prueba de campaña'
|
93
|
+
subscribers: 'Suscritos'
|
94
|
+
s:
|
95
|
+
pending: 'Pendiente'
|
96
|
+
sent: 'Enviado'
|
97
|
+
show:
|
98
|
+
custom_values: 'Valores Adicionales'
|
99
|
+
create:
|
100
|
+
saved: 'La subscripción fué guardado'
|
101
|
+
update:
|
102
|
+
updated: 'La subscripción fué actualizada'
|
103
|
+
destroy:
|
104
|
+
destroyed: 'La subscripción fué eliminada'
|
105
|
+
send_campaign:
|
106
|
+
success_send: 'El envió de la campaña a %{qty} suscritos se realizó con éxito'
|
107
|
+
send_test:
|
108
|
+
success_test_send: 'El envió de la campaña prueba se realizó con éxito'
|
109
|
+
form:
|
110
|
+
follow_code: 'Usa los siguientes códigos permitidos:'
|
111
|
+
unsubscribe_url: 'Url para abandonar la suscripción a los grupos de esta promoción'
|
112
|
+
unsubscribe_all_url: 'Url para abandonar la suscripción de todos los grupos suscritos'
|
data/config/routes.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
|
3
|
+
scope PluginRoutes.system_info["relative_url_root"] do
|
4
|
+
scope '(:locale)', locale: /#{PluginRoutes.all_locales}/, :defaults => { } do
|
5
|
+
# frontend
|
6
|
+
namespace :plugins do
|
7
|
+
namespace 'cama_subscriber' do
|
8
|
+
post 'subscribe' => 'front#subscribe'
|
9
|
+
get 'unsubscribe/:key' => 'front#unsubscribe', as: :unsubscribe
|
10
|
+
get 'unsubscribe_all/:key' => 'front#unsubscribe_all', as: :unsubscribe_all
|
11
|
+
get 'verify/:key' => 'front#verify', as: :verify
|
12
|
+
get 'image_email/:key' => 'front#image_email', as: :image_email
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
#Admin Panel
|
18
|
+
scope 'admin', as: 'admin' do
|
19
|
+
namespace 'plugins' do
|
20
|
+
namespace 'cama_subscriber' do
|
21
|
+
resources :groups
|
22
|
+
resources :promotions do
|
23
|
+
get 'send_campaign'
|
24
|
+
get 'send_test' => :form_test
|
25
|
+
post 'send_test'
|
26
|
+
end
|
27
|
+
resources :items
|
28
|
+
get 'settings' => 'admin#settings'
|
29
|
+
post 'settings' => 'admin#save_settings'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# main routes
|
35
|
+
#scope 'cama_subscriber', module: 'plugins/cama_subscriber/', as: 'cama_subscriber' do
|
36
|
+
# Here my routes for main routes
|
37
|
+
#end
|
38
|
+
end
|
39
|
+
end
|