Add admin panel for users and votes

Closes #2
This commit is contained in:
ricola 2025-06-08 20:46:37 -06:00
parent 9993d04ab0
commit 5fa73da51a
12 changed files with 484 additions and 82 deletions

View file

@ -91,6 +91,7 @@ post '/signup' do
@user.password = hash_password(params[:password])
end
if @errors.empty? and @user.valid?
@user.admin = true if @user.id == 1
@user.save
session.clear
session[:user_id] = @user.id
@ -192,6 +193,71 @@ post '/logout' do
redirect '/login'
end
get '/admin' do
require_admin
@users = User.all
@votes = Vote.all
erb :admin
end
get '/admin/users/:id' do
require_admin
@user = User.find(params[:id])
erb :admin_users
end
get '/admin/users/:id/organizers/:vote/delete' do
require_admin
rating = Organizer.where(user: params[:id]).where(vote: params[:vote]).each do |organizer|
organizer.destroy
end
redirect "/admin/users/#{params[:id]}"
end
get '/admin/users/:id/ratings/:vote/delete' do
require_admin
rating = Rating.where(user: params[:id]).where(vote: params[:vote]).each do |rating|
rating.destroy
end
redirect "/admin/users/#{params[:id]}"
end
post '/admin/users/:id/delete' do
require_admin
@user = User.find(params[:id])
@user.destroy
redirect '/admin'
end
get '/admin/votes/:id' do
require_admin
@vote = Vote.find(params[:id])
erb :admin_votes
end
get '/admin/votes/:id/organizers/:user/delete' do
require_admin
rating = Organizer.where(vote: params[:id]).where(user: params[:user]).each do |organizer|
organizer.destroy
end
redirect "/admin/votes/#{params[:id]}"
end
get '/admin/votes/:id/ratings/:user/delete' do
require_admin
rating = Rating.where(vote: params[:id]).where(user: params[:user]).each do |rating|
rating.destroy
end
redirect "/admin/votes/#{params[:id]}"
end
post '/admin/votes/:id/delete' do
require_admin
@vote = Vote.find(params[:id])
@vote.destroy
redirect '/admin'
end
get '/votes/new' do
require_login
erb :votes_new
@ -370,10 +436,18 @@ helpers do
end
end
def is_admin
current_user and current_user.admin
end
def require_login
redirect '/login' unless current_user
end
def require_admin
redirect '/' unless is_admin
end
def find_vote
@vote = Vote.find_by(secure_id: params[:id])
end
@ -399,6 +473,10 @@ helpers do
end
def format_date(timestamp)
"#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F')}"
end
def format_date_and_time(timestamp)
"#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F %R')} (#{session[:timezone].gsub('_', ' ')})"
end
end