Add track type to admin dashboard
This commit is contained in:
parent
770a63e15c
commit
abc59bb3d7
18 changed files with 252 additions and 2 deletions
55
app/controllers/admin/track_types_controller.rb
Normal file
55
app/controllers/admin/track_types_controller.rb
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Admin
|
||||
class TrackTypesController < Admin::BaseController
|
||||
load_and_authorize_resource :conference, find_by: :short_title
|
||||
load_and_authorize_resource :program, through: :conference, singleton: true
|
||||
load_and_authorize_resource :track_type, through: :program
|
||||
|
||||
def index; end
|
||||
|
||||
def edit; end
|
||||
|
||||
def new
|
||||
@track_type = @conference.program.track_types.new
|
||||
end
|
||||
|
||||
def create
|
||||
@track_type = @conference.program.track_types.new(track_type_params)
|
||||
if @track_type.save
|
||||
redirect_to admin_conference_program_track_types_path(conference_id: @conference),
|
||||
notice: 'Track type successfully created.'
|
||||
else
|
||||
flash.now[:error] = "Creating track type failed: #{@track_type.errors.full_messages.join('. ')}."
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if @track_type.update_attributes(track_type_params)
|
||||
redirect_to admin_conference_program_track_types_path(conference_id: @conference),
|
||||
notice: 'Track type successfully updated.'
|
||||
else
|
||||
flash.now[:error] = "Update track type failed: #{@track_type.errors.full_messages.join('. ')}."
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
if @track_type.destroy
|
||||
redirect_to admin_conference_program_track_types_path(conference_id: @conference),
|
||||
notice: 'Track type successfully deleted.'
|
||||
else
|
||||
redirect_to admin_conference_program_track_types_path(conference_id: @conference),
|
||||
error: 'Destroying track type failed! '\
|
||||
"#{@track_type.errors.full_messages.join('. ')}."
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def track_type_params
|
||||
params.require(:track_type).permit(:title, :description)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -102,6 +102,7 @@ class AdminAbility
|
|||
signed_in_with_organizer_role(user, conf_ids_for_organization_admin)
|
||||
end
|
||||
|
||||
# rubocop:disable Metrics/AbcSize
|
||||
def signed_in_with_organizer_role(user, conf_ids_for_organization_admin = [])
|
||||
# ids of all the conferences for which the user has the 'organizer' role and
|
||||
# conferences that belong to organizations for which user is 'organization_admin'
|
||||
|
|
@ -131,6 +132,7 @@ class AdminAbility
|
|||
can :manage, Cfp, program: { conference_id: conf_ids }
|
||||
can :manage, Event, program: { conference_id: conf_ids }
|
||||
can :manage, EventType, program: { conference_id: conf_ids }
|
||||
can :manage, TrackType, program: { conference_id: conf_ids }
|
||||
can :manage, Track, program: { conference_id: conf_ids }
|
||||
can :manage, DifficultyLevel, program: { conference_id: conf_ids }
|
||||
can :manage, Commercial, commercialable_type: 'Event',
|
||||
|
|
@ -163,6 +165,7 @@ class AdminAbility
|
|||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version, item_type: 'User'
|
||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version, conference_id: conf_ids
|
||||
end
|
||||
# rubocop:enable Metrics/AbcSize
|
||||
|
||||
def signed_in_with_cfp_role(user)
|
||||
# ids of all the conferences for which the user has the 'cfp' role
|
||||
|
|
@ -175,6 +178,7 @@ class AdminAbility
|
|||
can :manage, Booth, conference_id: conf_ids_for_cfp
|
||||
can :manage, Event, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, EventType, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, TrackType, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, Track, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, DifficultyLevel, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, EmailSettings, conference_id: conf_ids_for_cfp
|
||||
|
|
@ -201,7 +205,7 @@ class AdminAbility
|
|||
end
|
||||
|
||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version,
|
||||
item_type: %w[Event EventType Track DifficultyLevel EmailSettings Room Cfp Program Comment], conference_id: conf_ids_for_cfp
|
||||
item_type: %w[Event EventType Track TrackType DifficultyLevel EmailSettings Room Cfp Program Comment], conference_id: conf_ids_for_cfp
|
||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version,
|
||||
["item_type = 'Commercial' AND conference_id IN (?) AND (object LIKE '%Event%' OR object_changes LIKE '%Event%')", conf_ids_for_cfp] do |version|
|
||||
version.item_type == 'Commercial' && conf_ids_for_cfp.include?(version.conference_id) &&
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ class Conference < ApplicationRecord
|
|||
through: :program,
|
||||
source: :events
|
||||
has_many :event_types, through: :program
|
||||
has_many :track_types, through: :program
|
||||
|
||||
has_many :surveys, as: :surveyable, dependent: :destroy do
|
||||
def for_registration
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ class Program < ApplicationRecord
|
|||
has_many :cfps, dependent: :destroy
|
||||
has_many :event_types, dependent: :destroy
|
||||
has_many :tracks, dependent: :destroy
|
||||
has_many :track_types, dependent: :destroy
|
||||
has_many :difficulty_levels, dependent: :destroy
|
||||
has_many :schedules, dependent: :destroy
|
||||
has_many :event_schedules, through: :schedules
|
||||
|
|
|
|||
16
app/models/track_type.rb
Normal file
16
app/models/track_type.rb
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class TrackType < ApplicationRecord
|
||||
belongs_to :program, touch: true
|
||||
|
||||
has_paper_trail meta: { conference_id: :conference_id },
|
||||
ignore: %i[updated_at]
|
||||
|
||||
validates :title, presence: true
|
||||
|
||||
private
|
||||
|
||||
def conference_id
|
||||
program.conference_id
|
||||
end
|
||||
end
|
||||
17
app/views/admin/track_types/_form.html.haml
Normal file
17
app/views/admin/track_types/_form.html.haml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
- if track_type.new_record?
|
||||
New
|
||||
Track Type
|
||||
= track_type.title
|
||||
.row
|
||||
.col-md-12
|
||||
= semantic_form_for(track_type,
|
||||
url: (track_type.new_record? ? admin_conference_program_track_types_path : admin_conference_program_track_type_path(conference,
|
||||
track_type))) do |f|
|
||||
= f.input :title, input_html: { autofocus: true }
|
||||
= f.input :description
|
||||
%p.text-right
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
1
app/views/admin/track_types/edit.html.haml
Normal file
1
app/views/admin/track_types/edit.html.haml
Normal file
|
|
@ -0,0 +1 @@
|
|||
= render 'form', track_type: @track_type, conference: @conference
|
||||
29
app/views/admin/track_types/index.html.haml
Normal file
29
app/views/admin/track_types/index.html.haml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1 Track Types
|
||||
%p.text-muted
|
||||
The different types of tracks in your conference
|
||||
.row
|
||||
.col-md-12
|
||||
%table.table.table-hover#track-types
|
||||
%thead
|
||||
%th Title
|
||||
%th Description
|
||||
%th Actions
|
||||
%tbody
|
||||
- @conference.program.track_types.each do |track_type|
|
||||
%tr
|
||||
%td
|
||||
= track_type.title
|
||||
%td
|
||||
= track_type.description
|
||||
%td
|
||||
.btn-group{ role: 'group' }
|
||||
= link_to 'Edit', edit_admin_conference_program_track_type_path(@conference.short_title, track_type.id),
|
||||
method: :get, class: 'btn btn-primary'
|
||||
= link_to 'Delete', admin_conference_program_track_type_path(@conference.short_title, track_type.id),
|
||||
method: :delete, class: 'btn btn-danger', data: { confirm: "Do you really want to delete #{track_type.title}?" }
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'Add Track Type', new_admin_conference_program_track_type_path(@conference.short_title), class: 'btn btn-primary'
|
||||
1
app/views/admin/track_types/new.html.haml
Normal file
1
app/views/admin/track_types/new.html.haml
Normal file
|
|
@ -0,0 +1 @@
|
|||
= render 'form', track_type: @track_type, conference: @conference
|
||||
|
|
@ -78,6 +78,9 @@
|
|||
- if can? :update, @conference.program.event_types.build
|
||||
%li{class: active_nav_li(admin_conference_program_event_types_path(@conference.short_title))}
|
||||
= link_to 'Event Types', admin_conference_program_event_types_path(@conference.short_title)
|
||||
- if can? :update, @conference.program.track_types.build
|
||||
%li{class: active_nav_li(admin_conference_program_track_types_path(@conference))}
|
||||
= link_to 'Track Types', admin_conference_program_track_types_path(@conference.short_title)
|
||||
- if can? :update, @conference.program.difficulty_levels.build, conference_id: @conference.id
|
||||
%li{class: active_nav_li(admin_conference_program_difficulty_levels_path(@conference.short_title))}
|
||||
= link_to 'Difficulty Levels', admin_conference_program_difficulty_levels_path(@conference.short_title)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue