mirror of
https://github.com/openSUSE/osem.git
synced 2026-01-01 18:48:11 -05:00
Fixes user-facing and non-user-facing typos Found via `codespell -S "./vendor" -L ontext,rememberable,ridiculus,varius`
129 lines
4.1 KiB
Ruby
129 lines
4.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Admin
|
|
class RolesController < Admin::BaseController
|
|
load_and_authorize_resource :conference, find_by: :short_title
|
|
before_action :set_selection
|
|
authorize_resource :role, except: :index
|
|
# Show flash message with ajax calls
|
|
after_action :prepare_unobtrusive_flash, only: :toggle_user
|
|
|
|
def index
|
|
@roles = Role.where(resource: @conference)
|
|
tracks = @conference.program.tracks.where.not(submitter: nil)
|
|
@roles += Role.where(resource: tracks)
|
|
authorize! :index, @role
|
|
end
|
|
|
|
def show
|
|
@url = if @track
|
|
toggle_user_admin_conference_program_track_role_path(@conference.short_title, @track, @role.name)
|
|
else
|
|
toggle_user_admin_conference_role_path(@conference.short_title, @role.name)
|
|
end
|
|
@users = @role.users
|
|
end
|
|
|
|
def edit
|
|
@url = if @track
|
|
admin_conference_program_track_role_path(@conference.short_title, @track, @role.name)
|
|
else
|
|
admin_conference_role_path(@conference.short_title, @role.name)
|
|
end
|
|
@users = @role.users
|
|
end
|
|
|
|
def update
|
|
role_name = @role.name
|
|
|
|
if @role.update(role_params)
|
|
url = if @track
|
|
admin_conference_program_track_role_path(@conference.short_title, @track, @role.name)
|
|
else
|
|
admin_conference_role_path(@conference.short_title, @role.name)
|
|
end
|
|
|
|
redirect_to url,
|
|
notice: 'Successfully updated role ' + @role.name
|
|
else
|
|
@role.name = role_name
|
|
flash.now[:error] = 'Could not update role! ' + @role.errors.full_messages.to_sentence
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def toggle_user
|
|
user = User.find_by(email: user_params[:email])
|
|
state = user_params[:state]
|
|
|
|
url = if @track
|
|
admin_conference_program_track_role_path(@conference.short_title, @track, @role.name)
|
|
else
|
|
admin_conference_role_path(@conference.short_title, @role.name)
|
|
end
|
|
|
|
unless user
|
|
redirect_to url,
|
|
error: 'Could not find user. Please provide a valid email!'
|
|
return
|
|
end
|
|
|
|
# The conference must have at least 1 organizer
|
|
if @role.name == 'organizer' && state == 'false' && @role.users.one?
|
|
redirect_to admin_conference_role_path(@conference.short_title, @role.name),
|
|
error: 'The conference must have at least 1 organizer!'
|
|
return
|
|
end
|
|
|
|
if @role.resource_type == 'Conference'
|
|
role_resource = @conference
|
|
elsif @role.resource_type == 'Track'
|
|
role_resource = @track
|
|
end
|
|
|
|
# Remove user
|
|
if state == 'false'
|
|
if user.remove_role @role.name, role_resource
|
|
flash[:notice] = "Successfully removed role #{@role.name} from user #{user.email}"
|
|
else
|
|
flash[:error] = "Could not remove role #{@role.name} from user #{user.email}"
|
|
end
|
|
elsif user.has_cached_role? @role.name, role_resource
|
|
flash[:error] = "User #{user.email} already has the role #{@role.name}"
|
|
# Add user
|
|
elsif user.add_role @role.name, role_resource
|
|
flash[:notice] = "Successfully added role #{@role.name} to user #{user.email}"
|
|
else
|
|
flash[:error] = "Could not add role #{@role.name} to #{user.email}"
|
|
end
|
|
|
|
respond_to do |format|
|
|
format.js
|
|
format.html { redirect_to url }
|
|
end
|
|
end
|
|
|
|
protected
|
|
|
|
def set_selection
|
|
# Set 'organizer' as default role, when there is no other selection
|
|
@selection = params[:id] ? params[:id].parameterize.underscore : 'organizer'
|
|
|
|
if @selection == 'track_organizer'
|
|
@track = @conference.program.tracks.find_by(short_name: params[:track_id])
|
|
@role = Role.find_by(name: @selection, resource: @track)
|
|
else
|
|
@role = Role.find_by(name: @selection, resource: @conference)
|
|
end
|
|
end
|
|
|
|
def role_params
|
|
params.require(:role).permit(:name, :description, user_ids: [])
|
|
end
|
|
|
|
def user_params
|
|
params.require(:user).permit(:email, :state)
|
|
end
|
|
end
|
|
end
|