Add helper function for speaker selection
The line '@users = User.all.order(:name)' is replicated a lot of times in EventsController and ProposalsController. So, this commit removes it and adds a helper function 'speaker_selector_input' that generates the field where the @users variable was used. Also, it makes the query more specific. Fix #1455 Other changes: * Include the username in the drop down menu * Add .active scope to User and corresponding tests * Add :disabled trait to User factory
This commit is contained in:
parent
36b8088726
commit
fa56ff7f6d
7 changed files with 25 additions and 9 deletions
|
|
@ -62,7 +62,6 @@ module Admin
|
||||||
@comments = @event.root_comments
|
@comments = @event.root_comments
|
||||||
@comment_count = @event.comment_threads.count
|
@comment_count = @event.comment_threads.count
|
||||||
@user = @event.submitter
|
@user = @event.submitter
|
||||||
@users = User.all.order(:name)
|
|
||||||
@url = admin_conference_program_event_path(@conference.short_title, @event)
|
@url = admin_conference_program_event_path(@conference.short_title, @event)
|
||||||
@languages = @program.languages_list
|
@languages = @program.languages_list
|
||||||
end
|
end
|
||||||
|
|
@ -80,7 +79,6 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@users = User.all.order(:name)
|
|
||||||
@languages = @program.languages_list
|
@languages = @program.languages_list
|
||||||
if @event.update_attributes(event_params)
|
if @event.update_attributes(event_params)
|
||||||
|
|
||||||
|
|
@ -99,7 +97,6 @@ module Admin
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@url = admin_conference_program_events_path(@conference.short_title, @event)
|
@url = admin_conference_program_events_path(@conference.short_title, @event)
|
||||||
@users = User.all.order(:name)
|
|
||||||
@languages = @program.languages_list
|
@languages = @program.languages_list
|
||||||
@event.submitter = current_user
|
@event.submitter = current_user
|
||||||
|
|
||||||
|
|
@ -115,7 +112,6 @@ module Admin
|
||||||
def new
|
def new
|
||||||
@url = admin_conference_program_events_path(@conference.short_title, @event)
|
@url = admin_conference_program_events_path(@conference.short_title, @event)
|
||||||
@languages = @program.languages_list
|
@languages = @program.languages_list
|
||||||
@users = User.all.order(:name)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def accept
|
def accept
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ class ProposalsController < ApplicationController
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@url = conference_program_proposal_path(@conference.short_title, params[:id])
|
@url = conference_program_proposal_path(@conference.short_title, params[:id])
|
||||||
@users = User.all.order(:name)
|
|
||||||
@languages = @program.languages_list
|
@languages = @program.languages_list
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -61,7 +60,6 @@ class ProposalsController < ApplicationController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@url = conference_program_proposal_path(@conference.short_title, params[:id])
|
@url = conference_program_proposal_path(@conference.short_title, params[:id])
|
||||||
@users = User.all.order(:name)
|
|
||||||
|
|
||||||
if @event.update(event_params)
|
if @event.update(event_params)
|
||||||
redirect_to conference_program_proposals_path(conference_id: @conference.short_title),
|
redirect_to conference_program_proposals_path(conference_id: @conference.short_title),
|
||||||
|
|
|
||||||
|
|
@ -602,4 +602,11 @@ module ApplicationHelper
|
||||||
def speaker_links(event)
|
def speaker_links(event)
|
||||||
event.speakers.map{ |speaker| link_to speaker.name, admin_user_path(speaker) }.join(', ').html_safe
|
event.speakers.map{ |speaker| link_to speaker.name, admin_user_path(speaker) }.join(', ').html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def speaker_selector_input(form)
|
||||||
|
users = User.active.pluck(:id, :name, :username, :email).map { |user| [user[0], user[1].blank? ? user[2] : user[1], user[2], user[3]] }.sort_by { |user| user[1].downcase }
|
||||||
|
form.input :speakers, as: :select,
|
||||||
|
collection: options_for_select(users.map {|user| ["#{user[1]} (#{user[2]}) #{user[3]}", user[0]]}, @event.speakers.map(&:id)),
|
||||||
|
include_blank: false, label: 'Speakers', input_html: { class: 'select-help-toggle', multiple: 'true' }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ class User < ActiveRecord::Base
|
||||||
accepts_nested_attributes_for :roles
|
accepts_nested_attributes_for :roles
|
||||||
|
|
||||||
scope :admin, -> { where(is_admin: true) }
|
scope :admin, -> { where(is_admin: true) }
|
||||||
|
scope :active, -> { where(is_disabled: false) }
|
||||||
|
|
||||||
validates :email, presence: true
|
validates :email, presence: true
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,7 @@
|
||||||
|
|
||||||
= f.input :subtitle, as: :string
|
= f.input :subtitle, as: :string
|
||||||
|
|
||||||
= f.input :speakers, as: :select,
|
= speaker_selector_input f
|
||||||
collection: options_for_select(@users.map {|user| ["#{user.name} (#{user.email})", user.id]}, @event.speakers.map(&:id)),
|
|
||||||
include_blank: false, label: 'Speakers', input_html: { class: 'select-help-toggle', multiple: 'true' }
|
|
||||||
|
|
||||||
- if @program.tracks.any?
|
- if @program.tracks.any?
|
||||||
= f.input :track_id, as: :select,
|
= f.input :track_id, as: :select,
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ FactoryGirl.define do
|
||||||
Quisque cursus facilisis consequat. Etiam volutpat ligula turpis, at
|
Quisque cursus facilisis consequat. Etiam volutpat ligula turpis, at
|
||||||
gravida.
|
gravida.
|
||||||
EOS
|
EOS
|
||||||
|
is_disabled false
|
||||||
|
|
||||||
after(:create) do |user|
|
after(:create) do |user|
|
||||||
user.is_admin = false
|
user.is_admin = false
|
||||||
|
|
@ -44,6 +45,10 @@ FactoryGirl.define do
|
||||||
user.save!
|
user.save!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
trait :disabled do
|
||||||
|
is_disabled true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
factory :user_xss, parent: :user do
|
factory :user_xss, parent: :user do
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ describe User do
|
||||||
let(:volunteers_coordinator_role) { Role.find_by(name: 'volunteers_coordinator', resource: conference) }
|
let(:volunteers_coordinator_role) { Role.find_by(name: 'volunteers_coordinator', resource: conference) }
|
||||||
let(:organizer) { create(:user, role_ids: [organizer_role.id]) }
|
let(:organizer) { create(:user, role_ids: [organizer_role.id]) }
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
let(:user_disabled) { create(:user, :disabled) }
|
||||||
|
|
||||||
let(:event1) { create(:event, program: conference.program) }
|
let(:event1) { create(:event, program: conference.program) }
|
||||||
let(:another_conference) { create(:conference) }
|
let(:another_conference) { create(:conference) }
|
||||||
|
|
@ -75,6 +76,16 @@ describe User do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.active' do
|
||||||
|
it 'includes users without is_disabled flag' do
|
||||||
|
expect(User.active).to include(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'excludes users with is_disabled flag' do
|
||||||
|
expect(User.active).not_to include(user_disabled)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '.comment_notifiable' do
|
describe '.comment_notifiable' do
|
||||||
let(:cfp_user) { create(:user, role_ids: [cfp_role.id]) }
|
let(:cfp_user) { create(:user, role_ids: [cfp_role.id]) }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue