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:
AEtherC0r3 2017-04-22 09:40:08 +03:00 committed by Stella Rouzi
parent 36b8088726
commit fa56ff7f6d
7 changed files with 25 additions and 9 deletions

View file

@ -62,7 +62,6 @@ module Admin
@comments = @event.root_comments
@comment_count = @event.comment_threads.count
@user = @event.submitter
@users = User.all.order(:name)
@url = admin_conference_program_event_path(@conference.short_title, @event)
@languages = @program.languages_list
end
@ -80,7 +79,6 @@ module Admin
end
def update
@users = User.all.order(:name)
@languages = @program.languages_list
if @event.update_attributes(event_params)
@ -99,7 +97,6 @@ module Admin
def create
@url = admin_conference_program_events_path(@conference.short_title, @event)
@users = User.all.order(:name)
@languages = @program.languages_list
@event.submitter = current_user
@ -115,7 +112,6 @@ module Admin
def new
@url = admin_conference_program_events_path(@conference.short_title, @event)
@languages = @program.languages_list
@users = User.all.order(:name)
end
def accept

View file

@ -25,7 +25,6 @@ class ProposalsController < ApplicationController
def edit
@url = conference_program_proposal_path(@conference.short_title, params[:id])
@users = User.all.order(:name)
@languages = @program.languages_list
end
@ -61,7 +60,6 @@ class ProposalsController < ApplicationController
def update
@url = conference_program_proposal_path(@conference.short_title, params[:id])
@users = User.all.order(:name)
if @event.update(event_params)
redirect_to conference_program_proposals_path(conference_id: @conference.short_title),

View file

@ -602,4 +602,11 @@ module ApplicationHelper
def speaker_links(event)
event.speakers.map{ |speaker| link_to speaker.name, admin_user_path(speaker) }.join(', ').html_safe
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

View file

@ -53,6 +53,7 @@ class User < ActiveRecord::Base
accepts_nested_attributes_for :roles
scope :admin, -> { where(is_admin: true) }
scope :active, -> { where(is_disabled: false) }
validates :email, presence: true

View file

@ -4,9 +4,7 @@
= f.input :subtitle, as: :string
= f.input :speakers, as: :select,
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' }
= speaker_selector_input f
- if @program.tracks.any?
= f.input :track_id, as: :select,

View file

@ -29,6 +29,7 @@ FactoryGirl.define do
Quisque cursus facilisis consequat. Etiam volutpat ligula turpis, at
gravida.
EOS
is_disabled false
after(:create) do |user|
user.is_admin = false
@ -44,6 +45,10 @@ FactoryGirl.define do
user.save!
end
end
trait :disabled do
is_disabled true
end
end
factory :user_xss, parent: :user do

View file

@ -10,6 +10,7 @@ describe User do
let(:volunteers_coordinator_role) { Role.find_by(name: 'volunteers_coordinator', resource: conference) }
let(:organizer) { create(:user, role_ids: [organizer_role.id]) }
let(:user) { create(:user) }
let(:user_disabled) { create(:user, :disabled) }
let(:event1) { create(:event, program: conference.program) }
let(:another_conference) { create(:conference) }
@ -75,6 +76,16 @@ describe User do
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
let(:cfp_user) { create(:user, role_ids: [cfp_role.id]) }