Subscription on Registration, Independent Subscription without registration

This commit is contained in:
Gopesh Tulsyan 2014-07-25 13:13:35 +05:30
parent 41fc21f7f4
commit a39f4cf0dd
9 changed files with 71 additions and 33 deletions

View file

@ -4,6 +4,42 @@ class ConferenceController < ApplicationController
redirect_to root_path, notice: "Conference not ready yet!!" unless @conference.make_conference_public?
end
def subscribe
conference = Conference.find_by_short_title(params[:id])
if current_user.subscriptions.where(conference: conference).blank?
subscription = Subscription.new(user_id: current_user.id, conference_id: conference.id)
begin
subscription.save!
flash[:success] = "You have been subscribed to receive Email Notifications from this Conference."
redirect_to root_path
rescue ActiveRecord::RecordInvalid
flash[:error] = subscription.errors.full_messages.to_sentence
redirect_to root_path
end
else
flash[:notice] = "Already Subscribed"
redirect_to root_path
end
end
def unsubscribe
conference = Conference.find_by_short_title(params[:id])
subscription = current_user.subscriptions.where(conference_id: conference.id).first
if subscription.blank?
flash[:notice] = "Already Unsubscribed"
redirect_to root_path
else
begin
subscription.destroy!
flash[:notice] = "You have been unsubscribed and now you won't be receiving any Email Notifications."
redirect_to root_path
rescue ActiveRecord::RecordInvalid
flash[:error] = subscription.errors.full_messages.to_sentence
redirect_to root_path
end
end
end
def gallery_photos
@photos = Conference.find_by_short_title(params[:id]).photos
render "photos", formats: [:js]

View file

@ -65,6 +65,10 @@ class ConferenceRegistrationController < ApplicationController
registration.conference_id = conference.id
registration.save!
if user.subscriptions.where(conference: conference).blank?
subscription = Subscription.new(conference_id: conference.id, user_id: user.id)
redirect_message = subscription.save ? 'You are now Registered and will be receiving Email Notifications.' : 'You are now Registered.'
end
else
registration.update_attributes!(registration_params)
end
@ -75,7 +79,6 @@ class ConferenceRegistrationController < ApplicationController
return
end
redirect_message = 'You are now registered.'
if update_registration
redirect_message = 'Registration updated.'
else
@ -93,6 +96,10 @@ class ConferenceRegistrationController < ApplicationController
conference = Conference.find_by(short_title: params[:id])
user = current_user
registration = user.registrations.where(conference_id: conference.id).first
subscription = user.subscriptions.where(conference: conference)
unless subscription.blank?
subscription.first.destroy
end
registration.destroy
redirect_to :root
end

View file

@ -14,7 +14,7 @@ class Mailbot < ActionMailer::Base
build_email(conference,
person.email,
conference.email_settings.accepted_subject,
conference.email_settings.generate_accepted_email(event))
conference.email_settings.generate_event_email(event, accepted_email_template))
end
def rejection_mail(event)
@ -23,59 +23,58 @@ class Mailbot < ActionMailer::Base
build_email(conference,
person.email,
conference.email_settings.rejected_subject,
conference.email_settings.generate_rejected_email(event))
conference.email_settings.generate_event_email(event, rejected_email_template))
end
def confirm_reminder_mail(event)
conference = event.conference
person = event.submitter
build_email(conference,
person.email,
conference.email_settings.confirmed_without_registration_subject,
conference.email_settings.confirmed_but_not_registered_email(event))
conference.email_settings.generate_event_email(event, confirmed_email_template))
end
def conference_date_update_mail(conference)
conference.registrations.each do |user|
User.joins(:subscriptions).merge(conference.subscriptions) do |user|
build_email(conference,
user.user.email,
user.email,
conference.email_settings.updated_conference_dates_subject,
conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.updated_conference_dates_template))
end
end
def conference_registration_date_update_mail(conference)
conference.registrations.each do |user|
User.joins(:subscriptions).merge(conference.subscriptions).uniq.joins('INNER JOIN registrations ON registrations.user_id != users.id').merge(conference.registrations) do |user|
build_email(conference,
user.user.email,
user.email,
conference.email_settings.updated_conference_registration_dates_subject,
conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.updated_conference_registration_dates_template))
end
end
def send_email_on_venue_update(conference)
conference.registrations.each do |user|
User.joins(:subscriptions).merge(conference.subscriptions) do |user|
build_email(conference,
user.user.email,
user.email,
conference.email_settings.venue_update_subject,
conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.venue_update_template))
end
end
def send_on_schedule_public(conference)
conference.registrations.each do |user|
User.joins(:subscriptions).merge(conference.subscriptions) do |user|
build_email(conference,
user.user.email,
user.email,
conference.email_settings.call_for_papers_schedule_public_subject,
conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.call_for_papers_schedule_public_template))
end
end
def send_on_call_for_papers_dates_updates(conference)
conference.registrations.each do |user|
User.joins(:subscriptions).merge(conference.subscriptions) do |user|
build_email(conference,
user.user.email,
user.email,
conference.email_settings.call_for_papers_dates_updates_subject,
conference.email_settings.generate_email_on_conf_updates(conference, user, conference.email_settings.call_for_papers_dates_updates_template))
end

View file

@ -50,6 +50,7 @@ class Conference < ActiveRecord::Base
has_many :campaigns, dependent: :destroy
has_many :commercials, as: :commercialable, dependent: :destroy
has_many :subscriptions, dependent: :destroy
belongs_to :venue
accepts_nested_attributes_for :rooms, reject_if: proc { |r| r['name'].blank? }, allow_destroy: true
accepts_nested_attributes_for :tracks, reject_if: proc { |r| r['name'].blank? }, allow_destroy: true

View file

@ -41,28 +41,14 @@ class EmailSettings < ActiveRecord::Base
h
end
def generate_accepted_email(event)
def generate_event_mail(event, event_template)
values = get_values(event.conference, event.submitter, event)
template = accepted_email_template
parse_template(template, values)
end
def generate_rejected_email(event)
values = get_values(event.conference, event.submitter, event)
template = rejected_email_template
parse_template(template, values)
end
def confirmed_but_not_registered_email(event)
values = get_values(event.conference, event.submitter, event)
template = confirmed_email_template
parse_template(template, values)
parse_template(event_template, values)
end
def generate_email_on_conf_updates(conference, user, conf_update_template)
values = get_values(conference, user)
template = conf_update_template
parse_template(template, values)
parse_template(conf_update_template, values)
end
def parse_template(text, values)

View file

@ -1,5 +1,6 @@
class Subscription < ActiveRecord::Base
attr_accessible :user_id, :conference_id
validates_uniqueness_of :user_id, scope: [:conference_id]
belongs_to :conference
belongs_to :user
end

View file

@ -20,6 +20,12 @@
= simple_format(conference.venue.description, class: 'lead')
.col-md-2
.btn-group-vertical
- unless current_user.blank?
- if Conference.joins(:subscriptions).merge(current_user.subscriptions).include? conference
= link_to "Unsubscribe", subscription_conference_path(conference.short_title), method: "DELETE", class: "btn btn-danger btn-group-vertical"
-else
= link_to "Subscribe", subscription_conference_path(conference.short_title), method: "PATCH", class: "btn btn-info btn-group-vertical"
- if !@conference || @conference != conference
- if conference.make_conference_public?
= link_to "View Conference", conference_path(conference.short_title), :class =>"btn btn-default"

View file

@ -96,6 +96,8 @@ Osem::Application.routes.draw do
patch "/register" => "conference_registration#update"
delete "/register" => "conference_registration#unregister"
get "gallery_photos"
patch "subscription" => "conference#subscribe"
delete "subscription" => "conference#unsubscribe"
end
end

View file

@ -130,7 +130,7 @@ feature Event do
# Register for conference
find('#register').click
expect(flash).to eq('You are now registered.')
expect(flash).to eq('You are now Registered and will be receiving Email Notifications.')
# Withdraw proposal
visit conference_proposal_index_path(conference.short_title)