refinerycms-newsletters 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,30 @@
1
+ module Admin
2
+ class NewslettersController < Admin::BaseController
3
+
4
+ crudify :newsletter,
5
+ :title_attribute => 'name'
6
+
7
+ def index
8
+ search_all_newsletters if searching?
9
+ paginate_all_newsletters
10
+
11
+ render :partial => 'newsletters' if request.xhr?
12
+ end
13
+
14
+
15
+ def download_csv
16
+ csv_lib = RUBY_VERSION =~ /1.8/ ? FasterCSV : CSV
17
+
18
+ csv_string = csv_lib.generate do |csv|
19
+ csv << ["Name", "Email"]
20
+ Newsletter.all.each do |newsletter|
21
+ csv << [newsletter.name, newsletter.email]
22
+ end
23
+ end
24
+ send_data(csv_string,
25
+ :type => 'text/csv; charset=utf-8; header=present',
26
+ :filename => "newsletters_#{Date.today.to_s}.csv")
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ class NewslettersController < ApplicationController
2
+
3
+ def thank_you
4
+ end
5
+
6
+ def index
7
+ @newsletter = Newsletter.new
8
+ end
9
+
10
+ def create
11
+
12
+ @newsletter = Newsletter.new(params[:newsletter])
13
+ if @newsletter.save
14
+ redirect_to thank_you_newsletters_url
15
+ else
16
+ render :action => 'new'
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,7 @@
1
+ class Newsletter < ActiveRecord::Base
2
+
3
+ acts_as_indexed :fields => [:name, :email]
4
+
5
+ validates :name, :presence => true, :uniqueness => true
6
+
7
+ end
@@ -0,0 +1,24 @@
1
+ <%= form_for [:admin, @newsletter] do |f| -%>
2
+ <%= render :partial => "/shared/admin/error_messages", :locals => {
3
+ :object => @newsletter,
4
+ :include_object_name => true
5
+ } %>
6
+
7
+ <div class='field'>
8
+ <%= f.label :name -%>
9
+ <%= f.text_field :name, :class => 'larger widest' -%>
10
+ </div>
11
+
12
+ <div class='field'>
13
+ <%= f.label :email -%>
14
+ <%= f.text_field :email -%>
15
+ </div>
16
+
17
+ <%= render :partial => "/shared/admin/form_actions",
18
+ :locals => {
19
+ :f => f,
20
+ :continue_editing => false,
21
+ :delete_title => t('delete', :scope => 'admin.newsletters.newsletter'),
22
+ :delete_confirmation => t('message', :scope => 'shared.admin.delete', :title => @newsletter.name)
23
+ } %>
24
+ <% end -%>
@@ -0,0 +1,18 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(newsletter) -%>">
2
+ <span class='title'>
3
+ <%= "#{newsletter.name} - #{newsletter.email}" %>
4
+ <span class="preview">&nbsp;</span>
5
+ </span>
6
+ <span class='actions'>
7
+ <%= link_to refinery_icon_tag("application_go.png"), admin_newsletter_url(newsletter),
8
+ :title => t('.view_live_html'),
9
+ :target => "_blank" %>
10
+ <%= link_to refinery_icon_tag("application_edit.png"), edit_admin_newsletter_path(newsletter),
11
+ :title => t('.edit') %>
12
+ <%= link_to refinery_icon_tag("delete.png"), admin_newsletter_path(newsletter),
13
+ :class => "cancel confirm-delete",
14
+ :title => t('.delete'),
15
+ :confirm => t('message', :scope => 'shared.admin.delete', :title => newsletter.name),
16
+ :method => :delete %>
17
+ </span>
18
+ </li>
@@ -0,0 +1,2 @@
1
+ <%= will_paginate @newsletters %>
2
+ <%= render :partial => "sortable_list" %>
@@ -0,0 +1,7 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'newsletter', :collection => @newsletters %>
3
+ </ul>
4
+ <%= render :partial => "/shared/admin/sortable_list",
5
+ :locals => {
6
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true
7
+ } %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,56 @@
1
+ <div id='records'>
2
+ <% if searching? %>
3
+ <h2><%= t('results_for', :scope => 'shared.admin.search', :query => params[:search]) %></h2>
4
+ <% end %>
5
+ <% if @newsletters.any? %>
6
+ <div class='pagination_container'>
7
+ <%= render :partial => 'newsletters' %>
8
+
9
+ <%= link_to "Download subscription list", download_csv_admin_newsletters_path %>
10
+ </div>
11
+ <% else %>
12
+ <p>
13
+ <% unless searching? %>
14
+ <strong>
15
+ <%= t('.no_items_yet') %>
16
+ </strong>
17
+ <% else %>
18
+ <%= t('no_results', :scope => 'shared.admin.search') %>
19
+ <% end %>
20
+ </p>
21
+ <% end %>
22
+ </div>
23
+ <div id='actions'>
24
+ <ul>
25
+ <% if Admin::NewslettersController.searchable? %>
26
+ <li>
27
+ <%= render :partial => "/shared/admin/search",
28
+ :locals => {
29
+ :url => admin_newsletters_url
30
+ } %>
31
+ </li>
32
+ <% end %>
33
+ <li>
34
+ <%= link_to t('.create_new'), new_admin_newsletter_url,
35
+ :class => "add_icon" %>
36
+ </li>
37
+ <% if !searching? and Admin::NewslettersController.sortable? and Newsletter.count > 1 %>
38
+ <li>
39
+ <%= link_to t('.reorder', :what => "Newsletters"),
40
+ admin_newsletters_url,
41
+ :id => "reorder_action",
42
+ :class => "reorder_icon" %>
43
+
44
+ <%= link_to t('.reorder_done', :what => "Newsletters"),
45
+ admin_newsletters_url,
46
+ :id => "reorder_action_done",
47
+ :style => "display: none;",
48
+ :class => "reorder_icon" %>
49
+ </li>
50
+ <% end %>
51
+ </ul>
52
+ </div>
53
+ <%= render :partial => "/shared/admin/make_sortable",
54
+ :locals => {
55
+ :tree => false
56
+ } if !searching? and Admin::NewslettersController.sortable? and Newsletter.count > 1 %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,26 @@
1
+ <% content_for :body_content_left do %>
2
+ <div class='newsletters'>
3
+ <%#=raw @page[Page.default_parts.first.to_sym] %>
4
+
5
+ <%= form_for @newsletter do |f| %>
6
+ <%= render :partial => "/shared/admin/error_messages",
7
+ :locals => {
8
+ :object => @newsletter,
9
+ :include_object_name => true
10
+ } %>
11
+ <div class='field'>
12
+ <%= f.required_label :name %>
13
+ <%= f.text_field :name %>
14
+ </div>
15
+ <div class='field'>
16
+ <%= f.required_label :email %>
17
+ <%= f.text_field :email %>
18
+ </div>
19
+ <div class='actions'>
20
+ <%= f.submit "Subscribe" %>
21
+ <%= link_to t('.privacy_policy'), "/pages/privacy-policy", :id => "privacy_link" if RefinerySetting.find_or_set(:show_contact_privacy_link, false) %>
22
+ </div>
23
+ <% end %>
24
+ </div>
25
+ <% end %>
26
+ <%= render :partial => "/shared/content_page" %>
@@ -0,0 +1 @@
1
+ Thank you for your subscription. Have a nice day!
@@ -0,0 +1,26 @@
1
+ en:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: image
6
+ plugins:
7
+ newsletters:
8
+ title: Newsletters
9
+ admin:
10
+ newsletters:
11
+ index:
12
+ title: Newsletters
13
+ create_new: Add New Newsletter
14
+ reorder: Reorder Newsletters
15
+ reorder_done: Done Reordering Newsletters
16
+ sorry_no_results: Sorry! There are no results found.
17
+ no_items_yet: There are no Newsletters yet. Click "Add New Newsletter" to add your first newsletter.
18
+ subscribe: Subscribe
19
+ send: Send
20
+ newsletter:
21
+ view_live_html: View this newsletter live <br/><em>(opens in a new window)</em>
22
+ edit: Edit this newsletter
23
+ delete: Remove this newsletter forever
24
+ newsletters:
25
+ show:
26
+ other: Other Newsletters
@@ -0,0 +1,24 @@
1
+ lolcat:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: IMAGE
6
+ plugins:
7
+ newsletters:
8
+ title: Newsletters
9
+ admin:
10
+ newsletters:
11
+ index:
12
+ title: Newsletters
13
+ create_new: CREATE NEW Newsletter
14
+ reorder: REORDR Newsletters
15
+ reorder_done: DUN REORDERIN Newsletters
16
+ sorry_no_results: SRY! THAR R NO RESULTS FINDZ.
17
+ no_items_yet: THAR R NO Newsletters YET. CLICK "CREATE NEW Newsletter" 2 ADD UR FURST newsletter.
18
+ newsletter:
19
+ view_live_html: VIEW DIS newsletter LIV <BR/><EM>(OPENS IN NEW WINDOW)</EM>
20
+ edit: EDIT DIS newsletter
21
+ delete: REMOOV DIS newsletter FOREVR
22
+ newsletters:
23
+ show:
24
+ other: OTHR Newsletters
@@ -0,0 +1,20 @@
1
+ nb:
2
+ plugins:
3
+ newsletters:
4
+ title: Newsletters
5
+ admin:
6
+ newsletters:
7
+ index:
8
+ title: Newsletters
9
+ create_new: Lag en ny Newsletter
10
+ reorder: Endre rekkefølgen på Newsletters
11
+ reorder_done: Ferdig å endre rekkefølgen Newsletters
12
+ sorry_no_results: Beklager! Vi fant ikke noen resultater.
13
+ no_items_yet: Det er ingen Newsletters enda. Klikk på "Lag en ny Newsletter" for å legge til din første newsletter.
14
+ newsletter:
15
+ view_live_html: Vis hvordan denne newsletter ser ut offentlig <br/><em>(åpner i et nytt vindu)</em>
16
+ edit: Rediger denne newsletter
17
+ delete: Fjern denne newsletter permanent
18
+ newsletters:
19
+ show:
20
+ other: Andre Newsletters
@@ -0,0 +1,20 @@
1
+ nl:
2
+ plugins:
3
+ newsletters:
4
+ title: Newsletters
5
+ admin:
6
+ newsletters:
7
+ index:
8
+ title: Newsletters
9
+ create_new: Maak een nieuwe Newsletter
10
+ reorder: Wijzig de volgorde van de Newsletters
11
+ reorder_done: Klaar met het wijzingen van de volgorde van de Newsletters
12
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
13
+ no_items_yet: Er zijn nog geen Newsletters. Druk op 'Maak een nieuwe Newsletter' om de eerste aan te maken.
14
+ newsletter:
15
+ view_live_html: Bekijk deze newsletter op de website <br/><em>(opent een nieuw venster)</em>
16
+ edit: Bewerk deze newsletter
17
+ delete: Verwijder deze newsletter voor eeuwig
18
+ newsletters:
19
+ show:
20
+ other: Andere Newsletters
@@ -0,0 +1,20 @@
1
+ Refinery::Application.routes.draw do
2
+
3
+ resources :newsletters,
4
+ :only => [:index, :create],
5
+ :as => :newsletters,
6
+ :controller => 'newsletters' do
7
+ collection do
8
+ get :thank_you
9
+ end
10
+ end
11
+
12
+ scope(:path => 'admin', :as => 'admin', :module => 'admin') do
13
+ resources :newsletters, :except => :show do
14
+ collection do
15
+ post :update_positions
16
+ get :download_csv
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ class RefinerycmsNewsletters < Refinery::Generators::EngineInstaller
2
+
3
+ source_root File.expand_path('../../../', __FILE__)
4
+ engine_name "newsletters"
5
+
6
+ end
@@ -0,0 +1,21 @@
1
+ require 'refinery'
2
+
3
+ module Refinery
4
+ module Newsletters
5
+ class Engine < Rails::Engine
6
+ initializer "static assets" do |app|
7
+ app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
8
+ end
9
+
10
+ config.after_initialize do
11
+ Refinery::Plugin.register do |plugin|
12
+ plugin.name = "newsletters"
13
+ plugin.activity = {
14
+ :class => Newsletter,
15
+ :title => 'name'
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ namespace :refinery do
2
+
3
+ namespace :newsletters do
4
+
5
+ # call this task my running: rake refinery:newsletters:my_task
6
+ # desc "Description of my task below"
7
+ # task :my_task => :environment do
8
+ # # add your logic here
9
+ # end
10
+
11
+ end
12
+
13
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: refinerycms-newsletters
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ version: "1.0"
10
+ platform: ruby
11
+ authors: []
12
+
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-10 00:00:00 +08:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Ruby on Rails Newsletters engine for Refinery CMS
22
+ email:
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/generators/refinerycms_newsletters_generator.rb
31
+ - lib/refinerycms-newsletters.rb
32
+ - lib/tasks/newsletters.rake
33
+ - config/locales/en.yml
34
+ - config/locales/lolcat.yml
35
+ - config/locales/nb.yml
36
+ - config/locales/nl.yml
37
+ - config/routes.rb
38
+ - app/controllers/admin/newsletters_controller.rb
39
+ - app/controllers/newsletters_controller.rb
40
+ - app/models/newsletter.rb
41
+ - app/views/admin/newsletters/_form.html.erb
42
+ - app/views/admin/newsletters/_newsletter.html.erb
43
+ - app/views/admin/newsletters/_newsletters.html.erb
44
+ - app/views/admin/newsletters/_sortable_list.html.erb
45
+ - app/views/admin/newsletters/edit.html.erb
46
+ - app/views/admin/newsletters/index.html.erb
47
+ - app/views/admin/newsletters/new.html.erb
48
+ - app/views/newsletters/index.html.erb
49
+ - app/views/newsletters/thank_you.html.erb
50
+ has_rdoc: true
51
+ homepage:
52
+ licenses: []
53
+
54
+ post_install_message:
55
+ rdoc_options: []
56
+
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ requirements: []
78
+
79
+ rubyforge_project:
80
+ rubygems_version: 1.3.7
81
+ signing_key:
82
+ specification_version: 3
83
+ summary: Newsletters engine for Refinery CMS
84
+ test_files: []
85
+