mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
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
|
||||
@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
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]) }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue