From e4cc6f158fe98af8cb9bb77f7a5aaf5075dca70c Mon Sep 17 00:00:00 2001 From: differentreality Date: Sun, 14 Jul 2013 14:39:40 +0300 Subject: [PATCH] fix new registration, add check if user/person exists but is not registered --- .../admin/registrations_controller.rb | 86 +++++++++++-------- app/views/admin/registrations/new.html.haml | 13 ++- 2 files changed, 56 insertions(+), 43 deletions(-) diff --git a/app/controllers/admin/registrations_controller.rb b/app/controllers/admin/registrations_controller.rb index 9de63749..ffc92d2d 100644 --- a/app/controllers/admin/registrations_controller.rb +++ b/app/controllers/admin/registrations_controller.rb @@ -41,8 +41,10 @@ class Admin::RegistrationsController < ApplicationController begin @person.update_attributes!(params[:registration][:person_attributes]) params[:registration].delete :person_attributes - @registration.supporter_registration = @conference.supporter_registrations.new(params[:registration][:supporter_registration_attributes]) - params[:registration].delete :supporter_registration_attributes + if params[:registration][:supporter_registration] + @registration.supporter_registration.update_attributes(params[:registration][:supporter_registration_attributes]) + params[:registration].delete :supporter_registration_attributes + end @registration.update_attributes!(params[:registration]) flash[:notice] = "Successfully updated registration for #{@person.public_name} #{@person.email}" redirect_to(admin_conference_registrations_path(@conference.short_title)) @@ -54,50 +56,62 @@ class Admin::RegistrationsController < ApplicationController end def new - @registration = Registration.new + @user = User.new + @person = Person.new + @registration = @person.registrations.new + @supporter_registration = @conference.supporter_registrations.new @conference = Conference.find_all_by_short_title(params[:conference_id]).first end def create @conference = Conference.find_all_by_short_title(params[:conference_id]).first + person = Person.where("email LIKE ?", params[:registration][:user][:email]).first - if params[:registration][:people][:first_name].blank? || params[:registration][:people][:last_name].blank? - redirect_to(:back, :alert => "Please fill in your first and last name before registering.") - return - end - - user = User.new - user.email = params[:registration][:user][:email] - user.password = params[:registration][:user][:password] - begin - user.save! - user.skip_confirmation! - person = Person.where("user_id = ?", user.id).first - person.update_attributes(params[:registration][:people]) - begin - params[:registration].delete :people - params[:registration].delete :user - + if !person.nil? + reg = @conference.registrations.where("person_id = ?", person.id).first + if reg.nil? registration = person.registrations.new - registration.supporter_registration = @conference.supporter_registrations.new(:supporter_level_id => params[:registration][:supporter_registrations][:supporter_level], :code => params[:registration][:supporter_registrations][:code], :email => person.email, :name => person.public_name) - params[:registration].delete :supporter_registrations - - registration.update_attributes(params[:registration]) - registration.update_attributes(:conference_id => @conference.id, :attended => true) - registration.save! - + else redirect_to admin_conference_registrations_path(@conference.short_title) - flash[:notice] = "Successfully created new registration for #{person.email}." -# rescue Exception => e -# user.destroy -# person.destroy -# redirect_to(:back, :alert => "Did not create registration. #{e.message}") -# return + flash[:notice] = "#{person.email} is already registred!" + return + end + else + if params[:registration][:person][:first_name].blank? || params[:registration][:person][:last_name].blank? + redirect_to(:back, :alert => "Please fill in your first and last name before registering.") + return + end + user = User.new + user.email = params[:registration][:user][:email] + user.password = rand(36**6).to_s(36) + begin user.save! + user.skip_confirmation! + person = Person.where("user_id = ?", user.id).first + person.update_attributes(params[:registration][:person]) + begin + registration = person.registrations.new + if params[:registration][:supporter_registration] + registration.supporter_registration = @conference.supporter_registrations.new(:supporter_level_id => params[:registration][:supporter_registration][:supporter_level_id], :code => params[:registration][:supporter_registration][:code], :email => person.email, :name => person.public_name) + end + rescue Exception => e + user.destroy + person.destroy + redirect_to(:back, :alert => "Did not create registration. #{e.message}") + return + end + rescue Exception => e + redirect_to(:back, :alert => "Did not create new user/person. #{e.message}") + return end -# rescue Exception => e -# redirect_to(:back, :alert => "Did not create new user/person. #{e.message}") -# return end + params[:registration].delete :person + params[:registration].delete :user + params[:registration].delete :supporter_registration + registration.update_attributes(params[:registration]) + registration.update_attributes(:conference_id => @conference.id, :attended => true) + registration.save! + redirect_to admin_conference_registrations_path(@conference.short_title) + flash[:notice] = "Successfully created new registration for #{person.email}." end def delete diff --git a/app/views/admin/registrations/new.html.haml b/app/views/admin/registrations/new.html.haml index 4ad08782..20cdbe05 100644 --- a/app/views/admin/registrations/new.html.haml +++ b/app/views/admin/registrations/new.html.haml @@ -6,14 +6,13 @@ .span12 = semantic_form_for(@registration, :url => admin_conference_registrations_new_path(@conference.short_title), :html => { :method => :put }) do |f| - = f.inputs "Account Information" do + = f.inputs "Your details" do = f.fields_for :user do |u| - = u.input :email - = u.input :password, :hint => "Password must be at least 6 characters" - = f.inputs "Personal Information" do - = f.fields_for :people do |p| + = u.input :email, :hint => "Please enter a valid email address. You will need it to log in to OSEM later." + = f.fields_for @person do |p| = p.input :first_name = p.input :last_name + = p.input :public_name = p.label :Nickname = p.text_field :irc_nickname = p.label :Affiliation @@ -21,7 +20,7 @@ = f.inputs "Registration Information" do - if @conference.use_supporter_levels? - = f.semantic_fields_for :supporter_registrations do |reg| + = f.semantic_fields_for @supporter_registration do |reg| = reg.input :supporter_level, :as => :select, :collection => @conference.supporter_levels = reg.input :code, :label => "Confirmation or registration code (if applicable)" %span#supporter-link.help-block @@ -72,4 +71,4 @@ onSelect: function(selected) { $("#registration-arrival-datepicker").datepicker("option","maxDate", selected) } - }); \ No newline at end of file + }); \ No newline at end of file