2013-01-07 09:04:09 +01:00
class ProposalController < ApplicationController
before_filter :verify_user
2013-01-16 08:22:20 +01:00
before_filter :setup
2013-01-08 08:51:34 +01:00
before_filter :verify_access , :only = > [ :edit , :update , :destroy , :confirm ]
2013-01-08 08:36:21 +01:00
2013-01-16 08:22:20 +01:00
def setup
2013-01-08 08:36:21 +01:00
@person = current_user . person
2013-01-16 08:22:20 +01:00
@url = conference_proposal_index_path ( @conference . short_title )
@event_types = @conference . event_types
end
def verify_access
2013-01-08 08:51:34 +01:00
if params . has_key? :proposal_id
params [ :id ] = params [ :proposal_id ]
end
2013-01-11 15:00:54 +01:00
2013-01-08 08:36:21 +01:00
begin
if ! organizer_or_admin?
2013-01-11 15:00:54 +01:00
@event = @person . events . find ( params [ :id ] )
2013-01-08 08:36:21 +01:00
else
@event = Event . find ( params [ :id ] )
end
rescue Exception = > e
2013-01-11 15:00:54 +01:00
Rails . logger . debug ( " Proposal failure in verify_access: #{ e . message } " )
2013-01-08 08:36:21 +01:00
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :alert = > 'Invalid or uneditable proposal.' )
end
end
2013-01-07 09:04:09 +01:00
def index
@events = @person . proposals @conference
end
def destroy
2013-01-08 08:36:21 +01:00
@person . withdraw_proposal ( params [ :id ] )
2013-01-07 09:04:09 +01:00
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :alert = > 'Proposal withdrawn.' )
end
def new
@event = Event . new
end
def edit
@url = conference_proposal_path ( @conference . short_title , params [ :id ] )
@event_types = @conference . event_types
@attachments = @event . event_attachments
2013-01-08 08:36:21 +01:00
if @event . nil? || ! @conference . cfp_open? || @event . unconfirmed? || @event . confirmed?
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :alert = > 'Invalid or uneditable proposal.' )
2013-01-07 09:04:09 +01:00
end
end
def update
session [ :return_to ] || = request . referer
submitter = params [ :person ]
params [ :event ] . delete :people_attributes
params [ :event ] . delete :person
2013-01-31 14:38:58 +01:00
if submitter [ :public_name ] . blank?
redirect_to edit_conference_proposal_path ( @conference . short_title , @event ) , :alert = > " Your public name cannot be blank "
return
end
if submitter [ :biography ] . blank?
redirect_to edit_conference_proposal_path ( @conference . short_title , @event ) , :alert = > " Your biography cannot be blank "
return
end
2013-01-08 08:36:21 +01:00
if submitter [ :public_name ] != @person . public_name || submitter [ :biography ] != @person . biography
@person . update_attributes ( submitter )
2013-01-07 09:04:09 +01:00
end
event = Event . find_by_id ( params [ :id ] )
2013-01-31 14:38:58 +01:00
begin
event . update_attributes! ( params [ :event ] )
2013-01-07 09:04:09 +01:00
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :notice = > " ' #{ event . title } ' was successfully updated. " )
2013-01-31 14:38:58 +01:00
rescue Exception = > e
redirect_to edit_conference_proposal_path ( @conference . short_title , @event ) , :alert = > e . message
2013-01-07 09:04:09 +01:00
end
end
def create
person = current_user . person
session [ :return_to ] || = request . referer
event_params = params [ :event ]
submitter = params [ :person ]
params [ :event ] . delete :person
2013-01-16 08:22:20 +01:00
@event = Event . new ( event_params )
@event . conference = @conference
if submitter [ :public_name ] . blank?
flash [ :error ] = " Your public name cannot be blank. "
render :action = > " new "
return
end
if submitter [ :biography ] . blank?
flash [ :error ] = " Your biography cannot be blank. "
render :action = > " new "
return
end
2013-01-07 09:04:09 +01:00
# First, update the submitter's info, if they've changed anything
if submitter [ :public_name ] != person . public_name || submitter [ :biography ] != person . biography
person . update_attributes ( submitter )
end
@event . event_people . new ( :person = > person ,
:event_role = > " submitter " )
@event . event_people . new ( :person = > person ,
:event_role = > " speaker " )
begin
@event . save!
rescue Exception = > e
@url = conference_proposal_index_path ( @conference . short_title )
@event_types = @conference . event_types
@person = current_user . person
flash [ :error ] = " Could not submit proposal: #{ e . message } "
render :action = > 'new'
return
end
registration = person . registrations . where ( :conference_id = > @conference . id ) . first
if registration . nil?
redirect_to ( register_conference_path ( @conference . short_title ) , :notice = > 'Event was successfully submitted. You probably want to register for the conference now!' )
else
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :notice = > 'Event was successfully submitted.' )
end
end
def show
end
2013-01-08 08:51:34 +01:00
def confirm
if @event . transition_possible? :confirm
begin
@event . confirm!
rescue Exception = > e
2013-02-12 19:17:19 +01:00
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :alert = > " Event was NOT confirmed: #{ e . message } " )
2013-01-08 08:51:34 +01:00
return
end
if ! @conference . user_registered? ( current_user )
redirect_to ( register_conference_path ( @conference . short_title ) , :notice = > " Event was confirmed. Please register to attend the conference. " )
return
end
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :notice = > 'Event was confirmed.' )
else
redirect_to ( conference_proposal_index_path ( :conference_id = > @conference . short_title ) , :alert = > 'Event was NOT confirmed!' )
end
end
2013-01-07 09:04:09 +01:00
end