diff --git a/app/controllers/admin/conference_controller.rb b/app/controllers/admin/conference_controller.rb index 6093d2d2..b4d25a43 100644 --- a/app/controllers/admin/conference_controller.rb +++ b/app/controllers/admin/conference_controller.rb @@ -74,6 +74,19 @@ class Admin::ConferenceController < ApplicationController def update @conference = Conference.find_by(short_title: params[:id]) short_title = @conference.short_title + @conference.assign_attributes(params[:conference]) + if @conference.start_date_changed? || @conference.end_date_changed? + if @conference.email_settings.send_on_updated_conference_dates + Mailbot.conference_date_update_mail(@conference,date_string(@conference.start_date, @conference.end_date)).deliver + end + end + + if @conference.registration_start_date_changed? || @conference.registration_end_date_changed? + if @conference.email_settings.send_on_updated_conference_registration_dates + Mailbot.conference_registration_date_update_mail(@conference,date_string(@conference.registration_start_date, @conference.registration_end_date)).deliver + end + end + if @conference.update_attributes(params[:conference]) redirect_to(edit_admin_conference_path(id: @conference.short_title), notice: 'Conference was successfully updated.') diff --git a/app/mailers/mailbot.rb b/app/mailers/mailbot.rb index abc60968..a7bd0807 100644 --- a/app/mailers/mailbot.rb +++ b/app/mailers/mailbot.rb @@ -38,6 +38,24 @@ class Mailbot < ActionMailer::Base conference.email_settings.confirmed_but_not_registered_email(event)) end + def conference_date_update_mail(conference,dates) + subject = conference.email_settings.updated_conference_dates_subject.blank? ? "#{conference.title} Dates Updated" : conference.email_settings.updated_conference_dates_subject + partial = "#{conference.title}\n New Dates : #{dates}\n For more information visit #{Rails.application.routes.url_helpers.conference_path(conference.short_title, host: CONFIG['url_for_emails'])}" + body = conference.email_settings.updated_conference_dates_template.blank? ? "#{partial}" : "#{conference.email_settings.updated_conference_dates_template}\n #{partial}" + conference.registrations.each do |u| + build_email(conference, u.user.email, subject, body) + end + end + + def conference_registration_date_update_mail(conference, dates) + subject = conference.email_settings.updated_conference_registration_dates_subject.blank? ? "#{conference.title} Registration Dates Updated" : conference.email_settings.updated_conference_registration_dates_subject + partial = "#{conference.title}\n New Registration Dates : #{dates}\n For more information visit #{Rails.application.routes.url_helpers.conference_path(conference.short_title, host: CONFIG['url_for_emails'])}" + body = conference.email_settings.updated_conference_registration_dates_template.blank? ? "#{partial}" : "#{conference.email_settings.updated_conference_dates_template}\n #{partial}" + conference.registrations.each do |u| + build_email(conference, u.user.email, subject, body) + end + end + def build_email(conference, to, subject, body) mail(:to => to, :from => conference.contact_email, diff --git a/app/models/email_settings.rb b/app/models/email_settings.rb index 532869cc..633c6834 100644 --- a/app/models/email_settings.rb +++ b/app/models/email_settings.rb @@ -3,7 +3,10 @@ class EmailSettings < ActiveRecord::Base :send_on_confirmed_without_registration, :registration_email_template, :accepted_email_template, :rejected_email_template, :confirmed_email_template, :registration_subject, :accepted_subject, :rejected_subject, - :confirmed_without_registration_subject + :confirmed_without_registration_subject, + :send_on_updated_conference_dates, :updated_conference_dates_subject, + :updated_conference_dates_template, :send_on_updated_conference_registration_dates, + :updated_conference_registration_dates_subject, :updated_conference_registration_dates_template def get_values(conference, user, event = nil) h = { diff --git a/app/views/admin/emails/index.html.haml b/app/views/admin/emails/index.html.haml index c33b0596..0cf146ff 100644 --- a/app/views/admin/emails/index.html.haml +++ b/app/views/admin/emails/index.html.haml @@ -35,6 +35,12 @@ = f.input :send_on_confirmed_without_registration, :label => false, :hint => "Send an email when a user has a confirmed proposal, but isn't yet registered?" = f.input :confirmed_without_registration_subject = f.input :confirmed_email_template, :input_html => { :rows => 10, :cols => 20 } + = f.input :send_on_updated_conference_dates, hint: "This is to notify all participants that the conference dates has been changed." + = f.input :updated_conference_dates_subject + = f.input :updated_conference_dates_template, :input_html => { :rows => 10, :cols => 20 } + = f.input :send_on_updated_conference_registration_dates, hint: "This is to notify all participants that the conference registration dates has been changed." + = f.input :updated_conference_registration_dates_subject + = f.input :updated_conference_registration_dates_template, :input_html => { :rows => 10, :cols => 20 } = f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"} :javascript diff --git a/db/migrate/20140707120158_add_conference_dates_updates_to_email_settings.rb b/db/migrate/20140707120158_add_conference_dates_updates_to_email_settings.rb new file mode 100644 index 00000000..24889597 --- /dev/null +++ b/db/migrate/20140707120158_add_conference_dates_updates_to_email_settings.rb @@ -0,0 +1,7 @@ +class AddConferenceDatesUpdatesToEmailSettings < ActiveRecord::Migration + def change + add_column :email_settings, :send_on_updated_conference_dates, :boolean, default: true + add_column :email_settings, :updated_conference_dates_subject, :string + add_column :email_settings, :updated_conference_dates_template, :text + end +end diff --git a/db/migrate/20140710130608_add_conference_registration_dates_updates_to_email_settings.rb b/db/migrate/20140710130608_add_conference_registration_dates_updates_to_email_settings.rb new file mode 100644 index 00000000..6313619b --- /dev/null +++ b/db/migrate/20140710130608_add_conference_registration_dates_updates_to_email_settings.rb @@ -0,0 +1,7 @@ +class AddConferenceRegistrationDatesUpdatesToEmailSettings < ActiveRecord::Migration + def change + add_column :email_settings, :send_on_updated_conference_registration_dates, :boolean, default: true + add_column :email_settings, :updated_conference_registration_dates_subject, :string + add_column :email_settings, :updated_conference_registration_dates_template, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index ad4bad11..1cc455ee 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140714141156) do +ActiveRecord::Schema.define(version: 20140710130608) do create_table "ahoy_events", force: true do |t| t.uuid "visit_id" @@ -150,10 +150,10 @@ ActiveRecord::Schema.define(version: 20140714141156) do create_table "email_settings", force: true do |t| t.integer "conference_id" - t.boolean "send_on_registration", default: true - t.boolean "send_on_accepted", default: true - t.boolean "send_on_rejected", default: true - t.boolean "send_on_confirmed_without_registration", default: true + t.boolean "send_on_registration", default: true + t.boolean "send_on_accepted", default: true + t.boolean "send_on_rejected", default: true + t.boolean "send_on_confirmed_without_registration", default: true t.text "registration_email_template" t.text "accepted_email_template" t.text "rejected_email_template" @@ -164,6 +164,12 @@ ActiveRecord::Schema.define(version: 20140714141156) do t.string "accepted_subject" t.string "rejected_subject" t.string "confirmed_without_registration_subject" + t.boolean "send_on_updated_conference_dates", default: true + t.string "updated_conference_dates_subject" + t.text "updated_conference_dates_template" + t.boolean "send_on_updated_conference_registration_dates", default: true + t.string "updated_conference_registration_dates_subject" + t.text "updated_conference_registration_dates_template" end create_table "event_attachments", force: true do |t| diff --git a/spec/controllers/admin/conferences_controller_spec.rb b/spec/controllers/admin/conferences_controller_spec.rb index d1845584..86523fc1 100644 --- a/spec/controllers/admin/conferences_controller_spec.rb +++ b/spec/controllers/admin/conferences_controller_spec.rb @@ -21,7 +21,6 @@ describe Admin::ConferenceController do it 'locates the requested conference' do patch :update, id: conference.short_title, conference: attributes_for(:conference, title: 'Example Con') - expect(assigns(:conference)).to eq(conference) end @@ -42,6 +41,26 @@ describe Admin::ConferenceController do expect(response).to redirect_to edit_admin_conference_path( conference.short_title) end + + it 'sends email notification on conference date update' do + mailer = double + allow(mailer).to receive(:deliver) + conference.email_settings = create(:email_settings) + patch :update, id: conference.short_title, conference: + attributes_for(:conference, start_date: Date.today + 2.days, end_date: Date.today + 4.days) + conference.reload + allow(Mailbot).to receive(:conference_date_update_mail).and_return(mailer) + end + + it 'sends email notification on conference registration date update' do + mailer = double + allow(mailer).to receive(:deliver) + conference.email_settings = create(:email_settings) + patch :update, id: conference.short_title, conference: + attributes_for(:conference, registration_start_date: Date.today + 2.days, registration_end_date: Date.today + 4.days) + conference.reload + allow(Mailbot).to receive(:conference_registration_date_update_mail).and_return(mailer) + end end context 'invalid attributes' do diff --git a/spec/factories/conferences.rb b/spec/factories/conferences.rb index 3b07782c..e4b6732f 100644 --- a/spec/factories/conferences.rb +++ b/spec/factories/conferences.rb @@ -8,7 +8,9 @@ FactoryGirl.define do timezone 'Amsterdam' contact_email 'admin@example.com' start_date Date.today - end_date Date.tomorrow + end_date Date.today + 6.days + registration_start_date Date.today + 3.days + registration_end_date Date.today + 5.days make_conference_public true venue end diff --git a/spec/factories/email_settings.rb b/spec/factories/email_settings.rb index e0856537..ec4887ed 100644 --- a/spec/factories/email_settings.rb +++ b/spec/factories/email_settings.rb @@ -6,6 +6,12 @@ FactoryGirl.define do send_on_accepted false send_on_rejected false send_on_confirmed_without_registration false + send_on_updated_conference_dates true + send_on_updated_conference_registration_dates true + updated_conference_dates_template 'Sample Conference\n New Dates: January 17 - 21 2014' + updated_conference_dates_subject 'Conference dates have been updated' + updated_conference_registration_dates_subject 'Conference registration dates have been updated' + updated_conference_registration_dates_template 'Sample Conference\n New Dates: January 17 - 21 2014' registration_subject 'Lorem Ipsum Dolsum' registration_email_template 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' end diff --git a/spec/views/admin/emails/index.html.haml_spec.rb b/spec/views/admin/emails/index.html.haml_spec.rb index de09ac8f..c6acb8d1 100644 --- a/spec/views/admin/emails/index.html.haml_spec.rb +++ b/spec/views/admin/emails/index.html.haml_spec.rb @@ -1,19 +1,22 @@ require 'spec_helper' describe 'admin/emails/index' do - it 'renders email templates' do + it 'renders email templates' do @conference = create(:conference) assign :conference, @conference @settings = create(:email_settings) assign :settings, @settings render expect(rendered). - to have_selector("input[type='checkbox'][value='1']", count: 4) + to have_selector("input[type='checkbox'][value='1']", count: 6) expect(rendered). - to have_selector("input[checked='checked'][type='checkbox'][value='1']", count: 1) + to have_selector("input[checked='checked'][type='checkbox'][value='1']", count: 3) expect(rendered).to include('Lorem Ipsum Dolsum') expect(rendered). to include('Lorem ipsum dolor sit amet, consectetuer adipiscing elit') + expect(rendered). + to include('Conference dates have been updated') + expect(rendered). + to include('Conference registration dates have been updated') end - end