diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 7e842146..295a45d6 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -73,6 +73,43 @@ module Admin end end + def register_user + conference = Conference.find(params[:conference_id]) + + if @user.registrations.exists?(conference: conference) + redirect_to edit_admin_user_path(@user), + error: "User is already registered to #{conference.title}." + else + registration = @user.registrations.build(conference: conference) + registration.accepted_code_of_conduct = true if conference.code_of_conduct.present? + + if registration.save + redirect_to edit_admin_user_path(@user), + notice: "Successfully registered #{@user.name} to #{conference.title}." + else + redirect_to edit_admin_user_path(@user), + error: "Failed to register user: #{registration.errors.full_messages.join('. ')}." + end + end + rescue ActiveRecord::RecordNotFound + redirect_to edit_admin_user_path(@user), error: 'Conference not found.' + end + + def unregister_user + registration = @user.registrations.find(params[:registration_id]) + conference_title = registration.conference.title + + if registration.destroy + redirect_to edit_admin_user_path(@user), + notice: "Successfully removed #{@user.name} from #{conference_title}." + else + redirect_to edit_admin_user_path(@user), + error: "Failed to remove registration: #{registration.errors.full_messages.join('. ')}." + end + rescue ActiveRecord::RecordNotFound + redirect_to edit_admin_user_path(@user), error: 'Registration not found.' + end + private def user_params diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 51a50069..1b9e1ce2 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -42,3 +42,42 @@ = f.text_area :biography, rows: 10, data: { provide: 'markdown' }, class: 'form-control' %span.help-block= markdown_hint = f.submit nil, class: 'btn btn-primary' + +- unless @user.new_record? + %hr + %h4 Conference Registration + .row + .col-md-6 + %h5 Register to Conference + = form_with url: register_user_admin_user_path(@user), local: true, method: :post do |form| + .form-group + = form.label :conference_id, 'Select Conference' + = form.select :conference_id, + options_from_collection_for_select(Conference.all.order(:title), :id, :title), + { prompt: 'Choose a conference...' }, + { class: 'form-control', required: true } + = form.submit 'Register User', class: 'btn btn-success' + + .col-md-6 + %h5 Current Registrations + - if @user.registrations.any? + .table-responsive + %table.table.table-condensed + %thead + %tr + %th Conference + %th Registered On + %th Actions + %tbody + - @user.registrations.includes(:conference).each do |registration| + %tr + %td= registration.conference.title + %td= registration.created_at.strftime('%B %d, %Y') + %td + = link_to 'Remove', + unregister_user_admin_user_path(@user, registration_id: registration.id), + method: :delete, + class: 'btn btn-xs btn-danger', + confirm: 'Are you sure you want to remove this registration?' + - else + %p.text-muted No current registrations diff --git a/config/routes.rb b/config/routes.rb index 9f78e1c3..bffee67b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,6 +26,8 @@ Osem::Application.routes.draw do resources :users do member do patch :toggle_confirmation + post :register_user + delete :unregister_user end end resource :ticket_scanning, only: [:create]