mail_manager 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. checksums.yaml +15 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +20 -0
  4. data/.rspec +1 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/Gemfile +27 -0
  8. data/Guardfile +24 -0
  9. data/LICENSE.txt +22 -0
  10. data/MIT-LICENSE +20 -0
  11. data/Manifest.txt +141 -0
  12. data/Procfile +4 -0
  13. data/README +243 -0
  14. data/README.md +29 -0
  15. data/README.rdoc +3 -0
  16. data/Rakefile +33 -0
  17. data/app/.DS_Store +0 -0
  18. data/app/assets/javascripts/mail_manager/application.js +15 -0
  19. data/app/assets/stylesheets/mail_manager/application.css +13 -0
  20. data/app/controllers/mail_manager/application_controller.rb +4 -0
  21. data/app/controllers/mail_manager/base_controller.rb +22 -0
  22. data/app/controllers/mail_manager/bounces_controller.rb +32 -0
  23. data/app/controllers/mail_manager/contacts_controller.rb +75 -0
  24. data/app/controllers/mail_manager/mailing_lists_controller.rb +49 -0
  25. data/app/controllers/mail_manager/mailings_controller.rb +102 -0
  26. data/app/controllers/mail_manager/messages_controller.rb +30 -0
  27. data/app/controllers/mail_manager/subscriptions_controller.rb +104 -0
  28. data/app/helpers/mail_manager/application_helper.rb +4 -0
  29. data/app/helpers/mail_manager/subscriptions_helper.rb +8 -0
  30. data/app/models/.DS_Store +0 -0
  31. data/app/models/mail_manager.rb +12 -0
  32. data/app/models/mail_manager/bounce.rb +133 -0
  33. data/app/models/mail_manager/contact.rb +91 -0
  34. data/app/models/mail_manager/contactable_registry.rb +190 -0
  35. data/app/models/mail_manager/mailable_registry.rb +127 -0
  36. data/app/models/mail_manager/mailer.rb +267 -0
  37. data/app/models/mail_manager/mailing.rb +266 -0
  38. data/app/models/mail_manager/mailing_list.rb +36 -0
  39. data/app/models/mail_manager/message.rb +127 -0
  40. data/app/models/mail_manager/subscription.rb +126 -0
  41. data/app/models/mail_manager/test_message.rb +175 -0
  42. data/app/models/status_history.rb +60 -0
  43. data/app/views/layouts/mail_manager/application.html.erb +14 -0
  44. data/app/views/mail_manager/bounces/_email_parts.html.erb +30 -0
  45. data/app/views/mail_manager/bounces/index.html.erb +32 -0
  46. data/app/views/mail_manager/bounces/show.html.erb +38 -0
  47. data/app/views/mail_manager/contacts/_form.html.erb +27 -0
  48. data/app/views/mail_manager/contacts/double_opt_in.html.erb +1 -0
  49. data/app/views/mail_manager/contacts/edit.html.erb +12 -0
  50. data/app/views/mail_manager/contacts/index.html.erb +86 -0
  51. data/app/views/mail_manager/contacts/new.html.erb +9 -0
  52. data/app/views/mail_manager/contacts/show.html.erb +22 -0
  53. data/app/views/mail_manager/contacts/subscribe.html.erb +2 -0
  54. data/app/views/mail_manager/contacts/thank_you.html.erb +12 -0
  55. data/app/views/mail_manager/help/_available_email_substitutions.html.erb +5 -0
  56. data/app/views/mail_manager/mailer/double_opt_in.erb +6 -0
  57. data/app/views/mail_manager/mailer/unsubscribed.erb +5 -0
  58. data/app/views/mail_manager/mailer/unsubscribed.html.erb +5 -0
  59. data/app/views/mail_manager/mailing_lists/_form.html.erb +20 -0
  60. data/app/views/mail_manager/mailing_lists/edit.html.erb +13 -0
  61. data/app/views/mail_manager/mailing_lists/index.html.erb +39 -0
  62. data/app/views/mail_manager/mailing_lists/new.html.erb +9 -0
  63. data/app/views/mail_manager/mailing_lists/show.html.erb +13 -0
  64. data/app/views/mail_manager/mailings/_form.html.erb +81 -0
  65. data/app/views/mail_manager/mailings/edit.html.erb +12 -0
  66. data/app/views/mail_manager/mailings/index.html.erb +52 -0
  67. data/app/views/mail_manager/mailings/new.html.erb +9 -0
  68. data/app/views/mail_manager/mailings/show.html.erb +28 -0
  69. data/app/views/mail_manager/mailings/test.html.erb +12 -0
  70. data/app/views/mail_manager/messages/index.html.erb +37 -0
  71. data/app/views/mail_manager/subscriptions/_form.html.erb +37 -0
  72. data/app/views/mail_manager/subscriptions/_subscriptions.html.erb +13 -0
  73. data/app/views/mail_manager/subscriptions/edit.html.erb +11 -0
  74. data/app/views/mail_manager/subscriptions/index.html.erb +32 -0
  75. data/app/views/mail_manager/subscriptions/new.html.erb +9 -0
  76. data/app/views/mail_manager/subscriptions/show.html.erb +8 -0
  77. data/app/views/mail_manager/subscriptions/unsubscribe.html.erb +2 -0
  78. data/app/views/mail_manager/subscriptions/unsubscribe_by_email_address.html.erb +13 -0
  79. data/config/daemons.yml +5 -0
  80. data/config/routes.rb +43 -0
  81. data/db/migrate/001_mail_mgr_initial.rb +84 -0
  82. data/db/migrate/002_mail_mgr_create_contact.rb +60 -0
  83. data/db/migrate/003_mail_mgr_test_message.rb +23 -0
  84. data/db/migrate/004_add_deleted_at_to_mailing_lists.rb +15 -0
  85. data/db/migrate/005_contacts_deleted_at.rb +15 -0
  86. data/db/migrate/006_mail_mgr_mailing_list_add_defaults_to_active.rb +15 -0
  87. data/db/migrate/007_mail_mgr_message_add_from_email_address.rb +15 -0
  88. data/db/mlm_migrate/001_mlm_initial.rb +67 -0
  89. data/db/mlm_migrate/002_mailable_as_polymorphic.rb +27 -0
  90. data/db/mlm_migrate/003_contact_as_polymorphic.rb +64 -0
  91. data/db/mlm_migrate/004_bounce_mlm_mailing_id.rb +26 -0
  92. data/db/mlm_migrate/005_mlm_to_mail_mgr_scoped.rb +29 -0
  93. data/engine_plan.rb +13 -0
  94. data/features/bounce_management.feature +0 -0
  95. data/features/contact_management.feature +24 -0
  96. data/features/mailable.feature +23 -0
  97. data/features/mailing_management.feature +78 -0
  98. data/features/message.feature +11 -0
  99. data/features/step_definitions/email_steps.rb +50 -0
  100. data/features/step_definitions/mlm_steps.rb +11 -0
  101. data/features/step_definitions/pickle_steps.rb +41 -0
  102. data/features/step_definitions/webrat_steps.rb +115 -0
  103. data/features/subscription_management.feature +17 -0
  104. data/features/support/env.rb +31 -0
  105. data/features/support/paths.rb +44 -0
  106. data/lib/daemons/mail_manager.rb +38 -0
  107. data/lib/daemons/mail_manager_ctl +15 -0
  108. data/lib/deleteable.rb +50 -0
  109. data/lib/lock.rb +36 -0
  110. data/lib/mail_manager.rb +5 -0
  111. data/lib/mail_manager/config.rb +50 -0
  112. data/lib/mail_manager/engine.rb +43 -0
  113. data/lib/mail_manager/version.rb +3 -0
  114. data/lib/tasks/mail_manager.rake +143 -0
  115. data/lib/tasks/mail_manager_tasks.rake +4 -0
  116. data/lib/tasks/rspec.rake +165 -0
  117. data/lib/workers/mail_manager/bounce_job.rb +52 -0
  118. data/lib/workers/mail_manager/mailing_job.rb +30 -0
  119. data/lib/workers/mail_manager/message_job.rb +38 -0
  120. data/lib/workers/mail_manager/test_message_job.rb +37 -0
  121. data/mail_manager.gemspec +29 -0
  122. data/script/rails +8 -0
  123. data/spec/rcov.opts +2 -0
  124. data/spec/spec.opts +4 -0
  125. data/spec/spec_helper.rb +47 -0
  126. data/spec/test_app/README.rdoc +261 -0
  127. data/spec/test_app/Rakefile +7 -0
  128. data/spec/test_app/app/assets/javascripts/application.js +15 -0
  129. data/spec/test_app/app/assets/javascripts/users.js +2 -0
  130. data/spec/test_app/app/assets/stylesheets/application.css +13 -0
  131. data/spec/test_app/app/assets/stylesheets/scaffold.css +56 -0
  132. data/spec/test_app/app/assets/stylesheets/users.css +4 -0
  133. data/spec/test_app/app/controllers/application_controller.rb +3 -0
  134. data/spec/test_app/app/controllers/users_controller.rb +83 -0
  135. data/spec/test_app/app/helpers/application_helper.rb +2 -0
  136. data/spec/test_app/app/helpers/users_helper.rb +2 -0
  137. data/spec/test_app/app/models/user.rb +13 -0
  138. data/spec/test_app/app/views/layouts/application.html.erb +14 -0
  139. data/spec/test_app/app/views/users/_form.html.erb +33 -0
  140. data/spec/test_app/app/views/users/edit.html.erb +6 -0
  141. data/spec/test_app/app/views/users/index.html.erb +29 -0
  142. data/spec/test_app/app/views/users/new.html.erb +5 -0
  143. data/spec/test_app/app/views/users/show.html.erb +25 -0
  144. data/spec/test_app/config.ru +4 -0
  145. data/spec/test_app/config/application.rb +65 -0
  146. data/spec/test_app/config/boot.rb +10 -0
  147. data/spec/test_app/config/database.yml +25 -0
  148. data/spec/test_app/config/environment.rb +14 -0
  149. data/spec/test_app/config/environments/development.rb +37 -0
  150. data/spec/test_app/config/environments/production.rb +67 -0
  151. data/spec/test_app/config/environments/test.rb +37 -0
  152. data/spec/test_app/config/initializers/backtrace_silencers.rb +7 -0
  153. data/spec/test_app/config/initializers/inflections.rb +15 -0
  154. data/spec/test_app/config/initializers/mime_types.rb +5 -0
  155. data/spec/test_app/config/initializers/secret_token.rb +7 -0
  156. data/spec/test_app/config/initializers/session_store.rb +8 -0
  157. data/spec/test_app/config/initializers/wrap_parameters.rb +14 -0
  158. data/spec/test_app/config/locales/en.yml +5 -0
  159. data/spec/test_app/config/lockable.yml +3 -0
  160. data/spec/test_app/config/mail_manager.yml +21 -0
  161. data/spec/test_app/config/routes.rb +7 -0
  162. data/spec/test_app/db/migrate/20131217101010_create_users.rb +13 -0
  163. data/spec/test_app/db/migrate/20131221064151_mail_mgr_initial.rb +84 -0
  164. data/spec/test_app/db/migrate/20131221064152_mail_mgr_create_contact.rb +60 -0
  165. data/spec/test_app/db/migrate/20131221064153_mail_mgr_test_message.rb +23 -0
  166. data/spec/test_app/db/migrate/20131221064154_add_deleted_at_to_mailing_lists.rb +15 -0
  167. data/spec/test_app/db/migrate/20131221064155_contacts_deleted_at.rb +15 -0
  168. data/spec/test_app/db/migrate/20131221064156_mail_mgr_mailing_list_add_defaults_to_active.rb +15 -0
  169. data/spec/test_app/db/migrate/20131221064157_mail_mgr_message_add_from_email_address.rb +15 -0
  170. data/spec/test_app/db/migrate/20131221072600_create_delayed_jobs.rb +22 -0
  171. data/spec/test_app/db/schema.rb +131 -0
  172. data/spec/test_app/db/structure.sql +31 -0
  173. data/spec/test_app/public/404.html +26 -0
  174. data/spec/test_app/public/422.html +26 -0
  175. data/spec/test_app/public/500.html +25 -0
  176. data/spec/test_app/public/favicon.ico +0 -0
  177. data/spec/test_app/script/delayed_job +5 -0
  178. data/spec/test_app/script/lockable +36 -0
  179. data/spec/test_app/script/rails +6 -0
  180. data/spec/test_app/spec/controllers/users_controller_spec.rb +160 -0
  181. data/spec/test_app/spec/factories/mailing_lists.rb +7 -0
  182. data/spec/test_app/spec/factories/mailings.rb +6 -0
  183. data/spec/test_app/spec/factories/original_factories.rb.txt +107 -0
  184. data/spec/test_app/spec/factories/users.rb +10 -0
  185. data/spec/test_app/spec/models/mail_manager/bounce_spec.rb +17 -0
  186. data/spec/test_app/spec/models/mail_manager/mailing_list_spec.rb +15 -0
  187. data/spec/test_app/spec/models/user_spec.rb +37 -0
  188. data/spec/test_app/spec/requests/users_spec.rb +11 -0
  189. data/spec/test_app/spec/routing/users_routing_spec.rb +35 -0
  190. data/spec/test_app/spec/support/database_cleaner.rb +23 -0
  191. data/spec/test_app/spec/support/files/bad_utf8_chars.eml +32 -0
  192. data/spec/test_app/spec/views/users/edit.html.erb_spec.rb +24 -0
  193. data/spec/test_app/spec/views/users/index.html.erb_spec.rb +29 -0
  194. data/spec/test_app/spec/views/users/new.html.erb_spec.rb +24 -0
  195. data/spec/test_app/spec/views/users/show.html.erb_spec.rb +21 -0
  196. data/zeus.json +22 -0
  197. metadata +424 -0
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # MailManager
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'mail_manager'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install mail_manager
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = MailManager
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'MailManager'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/test_app/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
29
+ require 'rspec/core'
30
+ require 'rspec/core/rake_task'
31
+ desc "Run all specs in spec directory (excluding plugin specs)"
32
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
33
+ task :default => :spec
data/app/.DS_Store ADDED
Binary file
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,4 @@
1
+ module MailManager
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,22 @@
1
+ require 'dynamic_form'
2
+ class MailManager::BaseController < ApplicationController
3
+ layout MailManager.layout
4
+ helper_method :title, :use_show_for_resources?, :site_url
5
+
6
+ def title(value=nil)
7
+ @title = value if value.present?
8
+ @title
9
+ end
10
+
11
+ def use_show_for_resources?
12
+ MailManager.use_show_for_resources
13
+ rescue
14
+ false
15
+ end
16
+
17
+ def site_url
18
+ MailManager.site_url
19
+ rescue
20
+ "#{default_url_options[:protocol]||'http'}://#{default_url_options[:domain]}"
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ module MailManager
2
+ class BouncesController < BaseController
3
+ before_filter :find_bounce, :except => [:new, :create, :index]
4
+ before_filter :find_mailing
5
+
6
+ def index
7
+ params[:bounce] = Hash.new unless params[:bounce]
8
+ @mailings = Mailing.with_bounces(params[:bounce][:status])
9
+ @bounces = []
10
+ @bounces = Bounce.scoped
11
+ @bounces = @bounces.by_mailing_id(@mailing.id) if @mailing.present?
12
+ @bounces = @bounces.by_status(params[:bounce][:status]) if params[:bounce][:status].present?
13
+ @bounces = @bounces.paginate(:page => params[:page])
14
+ end
15
+
16
+ def show
17
+ end
18
+
19
+ protected
20
+
21
+ def find_bounce
22
+ @bounce = Bounce.find(params[:id])
23
+ end
24
+
25
+ def find_mailing
26
+ return @mailing = Mailing.find_by_id(params[:mailing_id]) if params[:mailing_id]
27
+ return @mailing = @bounce.mailing if @bounce
28
+ nil
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,75 @@
1
+ module MailManager
2
+ class ContactsController < BaseController
3
+
4
+ include DeleteableActions
5
+
6
+ def subscribe
7
+ if params[:contact].present? and params[:contact][:email_address].present?
8
+ @contact = MailManager::Contact.find_by_email_address(params[:contact][:email_address])
9
+ @contact = MailManager::Contact.new if @contact.nil?
10
+ @contact.update_attributes(params[:contact])
11
+ #check to see what list we subscribed to, if Austin local redirect, if San Antonio, redirect to their thank you page
12
+ end
13
+
14
+ if params[:redirect_url].present? #check to see if it came from SA
15
+ redirect_to params[:redirect_url]
16
+ else
17
+ redirect_to mail_manager.thank_you_path #uncomment after testing...
18
+ end
19
+ end
20
+
21
+ def send_one_off_message
22
+ @contact = Contact.find(params[:id])
23
+ @mailing = Mailing.find(params[:mailing_id])
24
+ @mailing.send_one_off_message(@contact)
25
+ flash[:info] = "Test message sent to #{@contact.email_address_with_name}"
26
+ redirect_to mail_manager.contacts_path
27
+ end
28
+
29
+ def index
30
+ @mailing_list = MailingList.find_by_id(params[:mailing_list_id])
31
+ params[:status] ||= 'active'
32
+ @contacts = Contact.search(params).paginate(:page => params[:page], :per_page => params[:per_page])
33
+ end
34
+
35
+ def new
36
+ @contact = Contact.new
37
+ end
38
+
39
+ def edit
40
+ find_contact
41
+ end
42
+
43
+ def create
44
+ @contact = Contact.new(params[:contact])
45
+ if @contact.save
46
+ flash[:notice] = 'Contact was successfully created.'
47
+ redirect_to(mail_manager.contacts_path)
48
+ else
49
+ render :action => "new"
50
+ end
51
+ end
52
+
53
+ def update
54
+ find_contact
55
+ if @contact.update_attributes(params[:contact])
56
+ flash[:notice] = 'Contact was successfully updated.'
57
+ redirect_to(mail_manager.contacts_path)
58
+ else
59
+ render :action => "edit"
60
+ end
61
+ end
62
+
63
+ def destroy
64
+ find_contact
65
+ @contact.delete
66
+ redirect_to(mail_manager.contacts_url)
67
+ end
68
+
69
+ protected
70
+
71
+ def find_contact
72
+ @contact = Contact.find(params[:id])
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,49 @@
1
+ module MailManager
2
+ class MailingListsController < BaseController
3
+ before_filter :find_mailing_list, :except => [:new,:create,:index]
4
+
5
+ def index
6
+ @mailing_lists = MailingList.active.order("name asc").paginate(:page => params[:page])
7
+ end
8
+
9
+ def show
10
+ end
11
+
12
+ def new
13
+ @mailing_list = MailingList.new
14
+ end
15
+
16
+ def edit
17
+ end
18
+
19
+ def create
20
+ @mailing_list = MailingList.new(params[:mailing_list])
21
+ if @mailing_list.save
22
+ flash[:notice] = 'MailingList was successfully created.'
23
+ redirect_to(mail_manager.mailing_lists_path)
24
+ else
25
+ render :action => "new"
26
+ end
27
+ end
28
+
29
+ def update
30
+ if @mailing_list.update_attributes(params[:mailing_list])
31
+ flash[:notice] = 'MailingList was successfully updated.'
32
+ redirect_to(mail_manager.mailing_lists_path)
33
+ else
34
+ render :action => "edit"
35
+ end
36
+ end
37
+
38
+ def destroy
39
+ @mailing_list.destroy
40
+ redirect_to(mail_manager.mailing_lists_url)
41
+ end
42
+
43
+ protected
44
+
45
+ def find_mailing_list
46
+ @mailing_list = MailingList.find(params[:id])
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,102 @@
1
+ module MailManager
2
+ class MailingsController < BaseController
3
+ before_filter :find_mailing, :except => [:new,:create,:index]
4
+ before_filter :find_all_mailing_lists, :only => [:new,:create,:edit,:update]
5
+ before_filter :find_mailables, :only => [:new,:create,:edit,:update]
6
+ before_filter :get_mailables_for_select, :only => [:new,:create,:edit,:update]
7
+
8
+ def index
9
+ @mailings = Mailing.all.sort_by{|mailing| mailing.created_at}.reverse
10
+ end
11
+
12
+ def show
13
+ end
14
+
15
+ def new
16
+ @mailing = Mailing.new
17
+ @mailing.from_email_address = MailManager.default_from_email_address if MailManager.default_from_email_address
18
+ @mailing.scheduled_at = Time.now
19
+ @mailing.include_images = true
20
+ @mailing.mailing_lists = @all_mailing_lists
21
+ end
22
+
23
+ def edit
24
+ end
25
+
26
+ def test
27
+ end
28
+
29
+ def schedule
30
+ @mailing.schedule
31
+ redirect_to mail_manager.mailings_path
32
+ end
33
+
34
+ def cancel
35
+ @mailing.cancel
36
+ redirect_to mail_manager.mailings_path
37
+ end
38
+
39
+ def resume
40
+ @mailing.resume
41
+ redirect_to mail_manager.mailings_path
42
+ end
43
+
44
+ def pause
45
+ @mailing.pause
46
+ redirect_to mail_manager.mailings_path
47
+ end
48
+
49
+ def send_test
50
+ @mailing.send_test_message(params[:test_email_addresses])
51
+ flash[:notice] = "Test messages sent to #{params[:test_email_addresses]}."
52
+ redirect_to mail_manager.mailings_path
53
+ end
54
+
55
+ def create
56
+ @mailing = Mailing.new(params[:mailing])
57
+ if @mailing.save
58
+ flash[:notice] = 'Mailing was successfully created.'
59
+ redirect_to(mail_manager.mailings_path)
60
+ else
61
+ render :action => "new"
62
+ end
63
+ end
64
+
65
+ def update
66
+ if @mailing.update_attributes(params[:mailing])
67
+ @mailing.cancel
68
+ flash[:notice] = 'Mailing was successfully updated and set to pending. Be sure to reschedule your mailing.'
69
+ redirect_to(mail_manager.mailings_path)
70
+ else
71
+ render :action => "edit"
72
+ end
73
+ end
74
+
75
+ def destroy
76
+ @mailing.destroy
77
+ redirect_to(mail_manager.mailings_url)
78
+ end
79
+
80
+ protected
81
+
82
+ def find_mailing
83
+ @mailing = Mailing.find(params[:id])
84
+ end
85
+
86
+ def find_all_mailing_lists
87
+ @all_mailing_lists = MailingList.active.find(:all, :order => "name asc")
88
+ end
89
+
90
+ def find_mailables
91
+ @mailables = MailableRegistry.find
92
+ end
93
+
94
+ def get_mailables_for_select
95
+ #@mailables_for_select = [['Choose Mailable', @mailable.is_a?(Mailable) ?
96
+ # 'Mailable_new' : '']]+@mailables.collect{|mailable|
97
+ # [mailable.name,"#{mailable.class.name}_#{mailable.id}"]}
98
+ @mailables_for_select = @mailables.collect{|mailable|
99
+ [mailable.name,"#{mailable.class.name}_#{mailable.id}"]}
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,30 @@
1
+ module MailManager
2
+ class MessagesController < ApplicationController
3
+ layout 'admin'
4
+ before_filter :find_message, :except => [:new,:create,:index]
5
+ before_filter :find_mailing
6
+
7
+ def index
8
+ params[:message] = Hash.new unless params[:message]
9
+ params[:message][:status] = 'failed' if params[:message][:status].nil?
10
+ search_params = params[:message].merge(:mailing_id => params[:mailing_id])
11
+ @valid_statuses = Message.valid_statuses
12
+ @messages = Message.search(search_params).paginate(:page => params[:page])
13
+ end
14
+
15
+ def show
16
+ end
17
+
18
+ protected
19
+
20
+ def find_message
21
+ @message = Message.find(params[:id])
22
+ end
23
+
24
+ def find_mailing
25
+ return @mailing = Mailing.find_by_id(params[:mailing_id]) if params[:mailing_id]
26
+ return @mailing = @message.message.try(:mailing) if @message
27
+ nil
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,104 @@
1
+ module MailManager
2
+ class SubscriptionsController < BaseController
3
+ before_filter :find_subscription, :except => [:new,:create,:index,:unsubscribe,:unsubscribe_by_email_address]
4
+ before_filter :find_mailing_list
5
+ before_filter :find_contact, :except => [:new,:create,:index,:unsubscribe,:unsubscribe_by_email_address]
6
+ skip_before_filter :authorize, :only => [:unsubscribe,:unsubscribe_by_email_address]
7
+
8
+ def index
9
+ params[:search] = Hash.new unless params[:search]
10
+ search_params = params[:search].merge(:mailing_list_id => params[:mailing_list_id])
11
+ @valid_statuses = Subscription.valid_statuses
12
+ @subscriptions = Subscription.search(search_params).paginate(:all, :page => params[:page])
13
+ end
14
+
15
+ def unsubscribe
16
+ raise "Empty id for#{params[:guid]}" if params[:guid].blank?
17
+ if params[:guid] =~ /^test/
18
+ @message = TestMessage.find_by_guid(params[:guid])
19
+ @mailing_lists = ['Test Mailing List']
20
+ @contact = Contact.new(:first_name => 'Test', :last_name => 'Guy',
21
+ :email_address => @message.test_email_address)
22
+ else
23
+ unsubscribed_subscriptions = Subscription.unsubscribe_by_message_guid(params[:guid])
24
+ @mailing_lists = unsubscribed_subscriptions.reject{|subscription|
25
+ subscription.mailing_list.nil?}.collect{|subscription| subscription.mailing_list.name}
26
+ @contact = Message.find_by_guid(params[:guid]).try(:contact)
27
+ raise "Could not find your subscription. Please try unsubscribing with your email address." if @contact.nil?
28
+ end
29
+ render 'unsubscribe', :layout => 'layout'
30
+ rescue => e
31
+ Rails.logger.warn "Error unsubscribing: #{e.message}\n #{e.backtrace.join("\n ")}"
32
+ flash[:error] = e.message
33
+ redirect_to mail_manager.unsubscribe_by_email_address_path
34
+ end
35
+
36
+ def unsubscribe_by_email_address
37
+ unless params[:email_address].blank?
38
+ unsubscribed_subscriptions = Subscription.unsubscribe_by_email_address(params[:email_address])
39
+ @mailing_lists = unsubscribed_subscriptions.reject{|subscription|
40
+ subscription.mailing_list.nil?}.collect{|subscription| subscription.mailing_list.name}
41
+ @contact = Contact.new(:email_address => params[:email_address])
42
+ return render('unsubscribe', :layout => 'layout')
43
+ end
44
+ render :layout => 'layout'
45
+ end
46
+
47
+ def show
48
+ end
49
+
50
+ def new
51
+ @subscription = Subscription.new
52
+ @subscription.mailing_list = @mailing_list
53
+ @contact = @subscription
54
+ end
55
+
56
+ def edit
57
+ end
58
+
59
+ def create
60
+ @subscription = Subscription.new(params[:subscription])
61
+ @subscription.mailing_list_id = @mailing_list.id
62
+ if @subscription.save
63
+ flash[:notice] = 'Subscription was successfully created.'
64
+ return redirect_to(mail_manager.mailing_list_subscriptions_path(@mailing_list))
65
+ else
66
+ @contact = @subscription
67
+ render :action => "new"
68
+ end
69
+ end
70
+
71
+ def update
72
+ if @subscription.update_attributes(params[:subscription])
73
+ @subscription.change_status(params[:subscription][:status])
74
+ flash[:notice] = 'Subscription was successfully updated.'
75
+ redirect_to(mail_manager.mailing_list_subscriptions_path(@mailing_list))
76
+ else
77
+ render :action => "edit"
78
+ end
79
+ end
80
+
81
+ def destroy
82
+ @subscription.destroy
83
+ redirect_to(mail_manager.subscriptions_url)
84
+ end
85
+
86
+ protected
87
+
88
+ def find_subscription
89
+ @subscription = Subscription.find(params[:id])
90
+ end
91
+
92
+ def find_mailing_list
93
+ return @mailing_list = @subscription.mailing_list if @subscription
94
+ return @mailing_list = MailingList.find_by_id(params[:mailing_list_id]) if params[:mailing_list_id]
95
+ return @mailing_list = MailingList.find_by_id(params[:subscription][:mailing_list_id]) if
96
+ params[:subscription]
97
+ nil
98
+ end
99
+
100
+ def find_contact
101
+ @contact = @subscription.contact
102
+ end
103
+ end
104
+ end