cama_subscriber 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|