cama_subscriber 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +37 -0
  4. data/app/controllers/plugins/cama_subscriber/admin_controller.rb +13 -0
  5. data/app/controllers/plugins/cama_subscriber/front_controller.rb +101 -0
  6. data/app/controllers/plugins/cama_subscriber/groups_controller.rb +46 -0
  7. data/app/controllers/plugins/cama_subscriber/items_controller.rb +56 -0
  8. data/app/controllers/plugins/cama_subscriber/promotions_controller.rb +94 -0
  9. data/app/helpers/plugins/cama_subscriber/main_helper.rb +35 -0
  10. data/app/models/plugins/cama_subscriber/group.rb +5 -0
  11. data/app/models/plugins/cama_subscriber/group_item.rb +4 -0
  12. data/app/models/plugins/cama_subscriber/item.rb +43 -0
  13. data/app/models/plugins/cama_subscriber/promotion.rb +27 -0
  14. data/app/models/plugins/cama_subscriber/promotion_group.rb +4 -0
  15. data/app/models/plugins/cama_subscriber/promotion_item.rb +11 -0
  16. data/app/models/plugins/cama_subscriber.rb +13 -0
  17. data/app/views/plugins/cama_subscriber/admin/index.html.erb +9 -0
  18. data/app/views/plugins/cama_subscriber/admin/settings.html.erb +27 -0
  19. data/app/views/plugins/cama_subscriber/front/index.html.erb +2 -0
  20. data/app/views/plugins/cama_subscriber/groups/form.html.erb +17 -0
  21. data/app/views/plugins/cama_subscriber/groups/index.html.erb +124 -0
  22. data/app/views/plugins/cama_subscriber/items/form.html.erb +27 -0
  23. data/app/views/plugins/cama_subscriber/items/index.html.erb +52 -0
  24. data/app/views/plugins/cama_subscriber/items/show.html.erb +25 -0
  25. data/app/views/plugins/cama_subscriber/layouts/readme.txt +2 -0
  26. data/app/views/plugins/cama_subscriber/promotions/form.html.erb +65 -0
  27. data/app/views/plugins/cama_subscriber/promotions/form_test.html.erb +18 -0
  28. data/app/views/plugins/cama_subscriber/promotions/index.html.erb +55 -0
  29. data/app/views/plugins/cama_subscriber/promotions/show.html.erb +25 -0
  30. data/config/camaleon_plugin.json +19 -0
  31. data/config/initializers/custom_models.rb +7 -0
  32. data/config/locales/en.yml +5 -0
  33. data/config/locales/es.yml +112 -0
  34. data/config/routes.rb +39 -0
  35. data/db/migrate/20160319112345_subscriber_structure.rb +65 -0
  36. data/lib/1x1.png +0 -0
  37. data/lib/cama_subscriber/engine.rb +4 -0
  38. data/lib/cama_subscriber/version.rb +3 -0
  39. data/lib/cama_subscriber.rb +4 -0
  40. data/lib/tasks/cama_subscriber_tasks.rake +4 -0
  41. 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">&times;</span></button>
52
+ <h4 class="modal-title">Modal title</h4>
53
+ </div>
54
+ <div class="modal-body">
55
+ <small>
56
+ <code>
57
+ &lt;%= form_tag(plugins_cama_subscriber_subscribe_url) do %&gt; <br>
58
+ &lt;%= render partial: "/camaleon_cms/flash_messages.html.erb", locals:{ flash: flash[:cama_subscriber] } %> <br>
59
+ &nbsp; &nbsp;&lt;input type='hidden' name="group_id" value='1' &gt; &lt;!--Group ID--&gt; <br>
60
+ &nbsp; &nbsp;&lt;div class="form-group"&gt; &lt;!-- optional --&gt; <br>
61
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;label&gt;Name:&lt;/label&gt;&lt;br&gt; <br>
62
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;input name="name" class="form-control"&gt; <br>
63
+ &nbsp; &nbsp;&lt;/div&gt; <br>
64
+
65
+ &nbsp; &nbsp;&lt;div class="form-group"&gt; <br>
66
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;label&gt;Email:&lt;/label&gt;&lt;br&gt; <br>
67
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;input name="email" class="form-control"&gt; <br>
68
+ &nbsp; &nbsp;&lt;/div&gt; <br>
69
+ <br>
70
+ &nbsp; &nbsp;&lt;!--Unlimited of Extra Values--&gt;<br>
71
+ &nbsp; &nbsp;&lt;div class="form-group"&gt;<br>
72
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;label&gt;Company:&lt;/label&gt;&lt;br&gt;<br>
73
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;input name="extra_values[company]" class="form-control"&gt;<br>
74
+ &nbsp; &nbsp;&lt;/div&gt;<br>
75
+ &nbsp; &nbsp;&lt;div class="form-group"&gt;<br>
76
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;label&gt;Country:&lt;/label&gt;&lt;br&gt;<br>
77
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;input name="extra_values[country]" class="form-control"&gt;<br>
78
+ &nbsp; &nbsp;&lt;/div&gt;<br>
79
+ <br>
80
+ &nbsp; &nbsp;&lt;div class="text-right"&gt;<br>
81
+ &nbsp; &nbsp;&nbsp; &nbsp;&lt;button type="submit" class="btn btn-primary"&gt;Subscribe&lt;/button&gt;<br>
82
+ &nbsp; &nbsp;&lt;/div&gt;<br>
83
+ &lt;% end %&gt;<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,2 @@
1
+ You can create your layouts here.
2
+ To load your custom layout you can use: layout: plugin_layout(<layout_name>) in your controller
@@ -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,5 @@
1
+ en:
2
+ plugins:
3
+ cama_subscriber:
4
+ title: 'Newsletters'
5
+
@@ -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