Merge pull request #298 from gopesht/notify_on_date_change

Notify on date change
This commit is contained in:
James Mason 2014-07-15 08:10:21 -07:00
commit 143e20d1a3
11 changed files with 102 additions and 12 deletions

View file

@ -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.')

View file

@ -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,

View file

@ -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 = {

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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|

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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