parent
9993d04ab0
commit
5fa73da51a
12 changed files with 484 additions and 82 deletions
5
db/migrate/20250608223006_add_admin_to_users.rb
Normal file
5
db/migrate/20250608223006_add_admin_to_users.rb
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
class AddAdminToUsers < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
add_column :users, :admin, :boolean
|
||||
end
|
||||
end
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.2].define(version: 2025_06_07_233053) do
|
||||
ActiveRecord::Schema[7.2].define(version: 2025_06_08_223006) do
|
||||
create_table "candidates", force: :cascade do |t|
|
||||
t.integer "vote_id"
|
||||
t.string "name"
|
||||
|
|
@ -45,6 +45,7 @@ ActiveRecord::Schema[7.2].define(version: 2025_06_07_233053) do
|
|||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "reset"
|
||||
t.boolean "admin"
|
||||
end
|
||||
|
||||
create_table "votes", force: :cascade do |t|
|
||||
|
|
|
|||
157
po/ca/vedia.po
157
po/ca/vedia.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-06-08 15:49-0600\n"
|
||||
"POT-Creation-Date: 2025-06-08 20:44-0600\n"
|
||||
"PO-Revision-Date: 2025-03-29 20:41-0600\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -41,46 +41,140 @@ msgstr "Bé"
|
|||
msgid "Very good"
|
||||
msgstr "Molt bé"
|
||||
|
||||
#: ../vedia.rb:118
|
||||
#: ../vedia.rb:119
|
||||
msgid "Incorrect email or password."
|
||||
msgstr "Correu o contrasenya incorrecte."
|
||||
|
||||
#: ../vedia.rb:140
|
||||
#: ../vedia.rb:141
|
||||
msgid "Reset your password"
|
||||
msgstr "Reiniciar contrasenya"
|
||||
|
||||
#: ../views/home.erb:1 ../views/layout.erb:23
|
||||
msgid "Home"
|
||||
msgstr "Inici"
|
||||
#: ../views/admin.erb:1 ../views/admin_users.erb:1 ../views/admin_votes.erb:1
|
||||
#: ../views/layout.erb:26
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: ../views/home.erb:3
|
||||
#: ../views/admin.erb:3
|
||||
msgid "Users"
|
||||
msgstr "Usuàries"
|
||||
|
||||
#: ../views/admin.erb:13 ../views/home.erb:3
|
||||
msgid "Votes"
|
||||
msgstr "Votacions"
|
||||
|
||||
#: ../views/admin.erb:21 ../views/home.erb:12 ../views/votes_show_draft.erb:1
|
||||
msgid "(Draft)"
|
||||
msgstr "(Esborrany)"
|
||||
|
||||
#: ../views/admin.erb:23 ../views/home.erb:16
|
||||
msgid "(Open)"
|
||||
msgstr "(Oberta)"
|
||||
|
||||
#: ../views/admin.erb:25 ../views/home.erb:20
|
||||
msgid "(Closed)"
|
||||
msgstr "(Tancada)"
|
||||
|
||||
#: ../views/admin_users.erb:5 ../views/admin_votes.erb:7
|
||||
msgid "Created: %{date}"
|
||||
msgstr "Creada: %{date}"
|
||||
|
||||
#: ../views/admin_users.erb:7 ../views/admin_votes.erb:9
|
||||
msgid "Updated: %{date}"
|
||||
msgstr "Modificada: %{date}"
|
||||
|
||||
#: ../views/admin_users.erb:9
|
||||
msgid "Admin: %{admin}"
|
||||
msgstr "Admin: %{admin}"
|
||||
|
||||
#: ../views/admin_users.erb:9
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
|
||||
#: ../views/admin_users.erb:9
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
#: ../views/admin_users.erb:11
|
||||
msgid "Organized votes"
|
||||
msgstr "Votacions organitzades"
|
||||
|
||||
#: ../views/admin_users.erb:19 ../views/admin_users.erb:38
|
||||
#: ../views/admin_votes.erb:27 ../views/admin_votes.erb:46
|
||||
#: ../views/votes_edit.erb:21
|
||||
msgid "Delete"
|
||||
msgstr "Suprimir"
|
||||
|
||||
#: ../views/admin_users.erb:26
|
||||
msgid "No vote organized."
|
||||
msgstr "Cap votació organitzada."
|
||||
|
||||
#: ../views/admin_users.erb:30 ../views/admin_votes.erb:38
|
||||
msgid "Ratings"
|
||||
msgstr "Valoracions"
|
||||
|
||||
#: ../views/admin_users.erb:45 ../views/admin_votes.erb:53
|
||||
msgid "No rating."
|
||||
msgstr "Cap valoració."
|
||||
|
||||
#: ../views/admin_users.erb:52
|
||||
msgid "Delete user"
|
||||
msgstr "Suprimir usuària"
|
||||
|
||||
#: ../views/admin_votes.erb:5
|
||||
msgid "View vote"
|
||||
msgstr "Veure votació"
|
||||
|
||||
#: ../views/admin_votes.erb:11
|
||||
msgid "Secure ID: %{secure_id}"
|
||||
msgstr "ID segura"
|
||||
|
||||
#: ../views/admin_votes.erb:13
|
||||
msgid "Description: %{description}"
|
||||
msgstr "Descripció: %{description}"
|
||||
|
||||
#: ../views/admin_votes.erb:15 ../views/votes_open.erb:3
|
||||
#: ../views/votes_show_closed.erb:4 ../views/votes_show_open.erb:4
|
||||
msgid "Closing date: %{date}"
|
||||
msgstr "Data de tancament: %{date}"
|
||||
|
||||
#: ../views/admin_votes.erb:15
|
||||
msgid "None"
|
||||
msgstr "Cap"
|
||||
|
||||
#: ../views/admin_votes.erb:17
|
||||
msgid "State: %{state}"
|
||||
msgstr "Estat: %{state}"
|
||||
|
||||
#: ../views/admin_votes.erb:19 ../views/votes_edit.erb:39
|
||||
#: ../views/votes_show_closed.erb:79 ../views/votes_show_draft.erb:5
|
||||
#: ../views/votes_show_open.erb:40
|
||||
msgid "Organizers"
|
||||
msgstr "Organitzadores"
|
||||
|
||||
#: ../views/admin_votes.erb:34
|
||||
msgid "No organizer."
|
||||
msgstr "Cap organitzadora."
|
||||
|
||||
#: ../views/admin_votes.erb:60 ../views/votes_edit.erb:68
|
||||
msgid "Delete vote"
|
||||
msgstr "Suprimir la votació"
|
||||
|
||||
#: ../views/home.erb:1 ../views/layout.erb:24
|
||||
msgid "Home"
|
||||
msgstr "Inici"
|
||||
|
||||
#: ../views/home.erb:11
|
||||
msgid "(Draft, organized by you)"
|
||||
msgstr "(Esborrany, organitzada per tu)"
|
||||
|
||||
#: ../views/home.erb:12 ../views/votes_show_draft.erb:1
|
||||
msgid "(Draft)"
|
||||
msgstr "(Esborrany)"
|
||||
|
||||
#: ../views/home.erb:15
|
||||
msgid "(Open, organized by you)"
|
||||
msgstr "(Oberta, organitzada per tu)"
|
||||
|
||||
#: ../views/home.erb:16
|
||||
msgid "(Open)"
|
||||
msgstr "(Oberta)"
|
||||
|
||||
#: ../views/home.erb:19
|
||||
msgid "(Closed, organized by you)"
|
||||
msgstr "(Tancada, organitzada per tu)"
|
||||
|
||||
#: ../views/home.erb:20
|
||||
msgid "(Closed)"
|
||||
msgstr "(Tancada)"
|
||||
|
||||
#: ../views/home.erb:28 ../views/votes_new.erb:12
|
||||
msgid "Create new vote"
|
||||
msgstr "Crear una nova votació"
|
||||
|
|
@ -93,13 +187,13 @@ msgstr "Estàs connectada com a %{email}."
|
|||
msgid "Logout"
|
||||
msgstr "Desconnexió"
|
||||
|
||||
#: ../views/layout.erb:25 ../views/login.erb:1 ../views/login.erb:16
|
||||
#: ../views/layout.erb:30 ../views/login.erb:1 ../views/login.erb:16
|
||||
msgid "Login"
|
||||
msgstr "Connexió"
|
||||
|
||||
#: ../views/login.erb:9 ../views/reset.erb:5 ../views/reset_change.erb:13
|
||||
#: ../views/signup.erb:24 ../views/votes_edit.erb:51
|
||||
#: ../views/votes_show_closed.erb:99 ../views/votes_show_open.erb:62
|
||||
#: ../views/votes_show_closed.erb:99 ../views/votes_show_open.erb:66
|
||||
msgid "Email"
|
||||
msgstr "Correu"
|
||||
|
||||
|
|
@ -183,10 +277,6 @@ msgstr "Guardar"
|
|||
msgid "Candidates"
|
||||
msgstr "Opcions"
|
||||
|
||||
#: ../views/votes_edit.erb:21
|
||||
msgid "Delete"
|
||||
msgstr "Suprimir"
|
||||
|
||||
#: ../views/votes_edit.erb:25 ../views/votes_edit.erb:36
|
||||
msgid "Add candidate"
|
||||
msgstr "Afegeix una opció"
|
||||
|
|
@ -195,19 +285,14 @@ msgstr "Afegeix una opció"
|
|||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:79
|
||||
#: ../views/votes_show_draft.erb:5 ../views/votes_show_open.erb:38
|
||||
msgid "Organizers"
|
||||
msgstr "Organitzadores"
|
||||
|
||||
#: ../views/votes_edit.erb:47 ../views/votes_edit.erb:54
|
||||
#: ../views/votes_show_closed.erb:95 ../views/votes_show_closed.erb:102
|
||||
#: ../views/votes_show_open.erb:58 ../views/votes_show_open.erb:65
|
||||
#: ../views/votes_show_open.erb:62 ../views/votes_show_open.erb:69
|
||||
msgid "Add organizer"
|
||||
msgstr "Afegeix organitzadora"
|
||||
|
||||
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:89
|
||||
#: ../views/votes_show_open.erb:48
|
||||
#: ../views/votes_show_open.erb:52
|
||||
msgid "Actions for organizers"
|
||||
msgstr "Accions per les organitzadores"
|
||||
|
||||
|
|
@ -220,10 +305,6 @@ msgstr "Obrir la votació als votants"
|
|||
msgid "Add at least 2 candidates before opening the vote to participants."
|
||||
msgstr "Afegeix com a mínim 2 opcions abans d'obrir la votació als votants."
|
||||
|
||||
#: ../views/votes_edit.erb:68
|
||||
msgid "Delete vote"
|
||||
msgstr "Suprimir la votació"
|
||||
|
||||
#: ../views/votes_new.erb:1
|
||||
msgid "New vote"
|
||||
msgstr "Nova votació"
|
||||
|
|
@ -298,10 +379,10 @@ msgstr "Les teves valoracions"
|
|||
msgid "Participants"
|
||||
msgstr "Votants"
|
||||
|
||||
#: ../views/votes_show_open.erb:51
|
||||
#: ../views/votes_show_open.erb:55
|
||||
msgid "Change back to draft vote"
|
||||
msgstr "Tornar a l'esborrany de votació"
|
||||
|
||||
#: ../views/votes_show_open.erb:55
|
||||
#: ../views/votes_show_open.erb:59
|
||||
msgid "Close votes and show results"
|
||||
msgstr "Tancar la votació i veure els resultats"
|
||||
|
|
|
|||
157
po/vedia.pot
157
po/vedia.pot
|
|
@ -8,8 +8,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-06-08 15:49-0600\n"
|
||||
"PO-Revision-Date: 2025-06-08 15:49-0600\n"
|
||||
"POT-Creation-Date: 2025-06-08 20:44-0600\n"
|
||||
"PO-Revision-Date: 2025-06-08 20:44-0600\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
|
|
@ -42,46 +42,140 @@ msgstr ""
|
|||
msgid "Very good"
|
||||
msgstr ""
|
||||
|
||||
#: ../vedia.rb:118
|
||||
#: ../vedia.rb:119
|
||||
msgid "Incorrect email or password."
|
||||
msgstr ""
|
||||
|
||||
#: ../vedia.rb:140
|
||||
#: ../vedia.rb:141
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:1 ../views/layout.erb:23
|
||||
msgid "Home"
|
||||
#: ../views/admin.erb:1 ../views/admin_users.erb:1 ../views/admin_votes.erb:1
|
||||
#: ../views/layout.erb:26
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:3
|
||||
#: ../views/admin.erb:3
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin.erb:13 ../views/home.erb:3
|
||||
msgid "Votes"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin.erb:21 ../views/home.erb:12 ../views/votes_show_draft.erb:1
|
||||
msgid "(Draft)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin.erb:23 ../views/home.erb:16
|
||||
msgid "(Open)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin.erb:25 ../views/home.erb:20
|
||||
msgid "(Closed)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:5 ../views/admin_votes.erb:7
|
||||
msgid "Created: %{date}"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:7 ../views/admin_votes.erb:9
|
||||
msgid "Updated: %{date}"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:9
|
||||
msgid "Admin: %{admin}"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:9
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:9
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:11
|
||||
msgid "Organized votes"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:19 ../views/admin_users.erb:38
|
||||
#: ../views/admin_votes.erb:27 ../views/admin_votes.erb:46
|
||||
#: ../views/votes_edit.erb:21
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:26
|
||||
msgid "No vote organized."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:30 ../views/admin_votes.erb:38
|
||||
msgid "Ratings"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:45 ../views/admin_votes.erb:53
|
||||
msgid "No rating."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_users.erb:52
|
||||
msgid "Delete user"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:5
|
||||
msgid "View vote"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:11
|
||||
msgid "Secure ID: %{secure_id}"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:13
|
||||
msgid "Description: %{description}"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:15 ../views/votes_open.erb:3
|
||||
#: ../views/votes_show_closed.erb:4 ../views/votes_show_open.erb:4
|
||||
msgid "Closing date: %{date}"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:15
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:17
|
||||
msgid "State: %{state}"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:19 ../views/votes_edit.erb:39
|
||||
#: ../views/votes_show_closed.erb:79 ../views/votes_show_draft.erb:5
|
||||
#: ../views/votes_show_open.erb:40
|
||||
msgid "Organizers"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:34
|
||||
msgid "No organizer."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/admin_votes.erb:60 ../views/votes_edit.erb:68
|
||||
msgid "Delete vote"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:1 ../views/layout.erb:24
|
||||
msgid "Home"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:11
|
||||
msgid "(Draft, organized by you)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:12 ../views/votes_show_draft.erb:1
|
||||
msgid "(Draft)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:15
|
||||
msgid "(Open, organized by you)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:16
|
||||
msgid "(Open)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:19
|
||||
msgid "(Closed, organized by you)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:20
|
||||
msgid "(Closed)"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/home.erb:28 ../views/votes_new.erb:12
|
||||
msgid "Create new vote"
|
||||
msgstr ""
|
||||
|
|
@ -94,13 +188,13 @@ msgstr ""
|
|||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/layout.erb:25 ../views/login.erb:1 ../views/login.erb:16
|
||||
#: ../views/layout.erb:30 ../views/login.erb:1 ../views/login.erb:16
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/login.erb:9 ../views/reset.erb:5 ../views/reset_change.erb:13
|
||||
#: ../views/signup.erb:24 ../views/votes_edit.erb:51
|
||||
#: ../views/votes_show_closed.erb:99 ../views/votes_show_open.erb:62
|
||||
#: ../views/votes_show_closed.erb:99 ../views/votes_show_open.erb:66
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -182,10 +276,6 @@ msgstr ""
|
|||
msgid "Candidates"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:21
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:25 ../views/votes_edit.erb:36
|
||||
msgid "Add candidate"
|
||||
msgstr ""
|
||||
|
|
@ -194,19 +284,14 @@ msgstr ""
|
|||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:79
|
||||
#: ../views/votes_show_draft.erb:5 ../views/votes_show_open.erb:38
|
||||
msgid "Organizers"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:47 ../views/votes_edit.erb:54
|
||||
#: ../views/votes_show_closed.erb:95 ../views/votes_show_closed.erb:102
|
||||
#: ../views/votes_show_open.erb:58 ../views/votes_show_open.erb:65
|
||||
#: ../views/votes_show_open.erb:62 ../views/votes_show_open.erb:69
|
||||
msgid "Add organizer"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:89
|
||||
#: ../views/votes_show_open.erb:48
|
||||
#: ../views/votes_show_open.erb:52
|
||||
msgid "Actions for organizers"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -219,10 +304,6 @@ msgstr ""
|
|||
msgid "Add at least 2 candidates before opening the vote to participants."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:68
|
||||
msgid "Delete vote"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_new.erb:1
|
||||
msgid "New vote"
|
||||
msgstr ""
|
||||
|
|
@ -295,10 +376,10 @@ msgstr ""
|
|||
msgid "Participants"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_open.erb:51
|
||||
#: ../views/votes_show_open.erb:55
|
||||
msgid "Change back to draft vote"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_open.erb:55
|
||||
#: ../views/votes_show_open.erb:59
|
||||
msgid "Close votes and show results"
|
||||
msgstr ""
|
||||
|
|
|
|||
78
vedia.rb
78
vedia.rb
|
|
@ -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
|
||||
|
|
|
|||
29
views/admin.erb
Normal file
29
views/admin.erb
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<h1><%= _("Admin") %></h1>
|
||||
|
||||
<h2><%= _("Users") %></h2>
|
||||
|
||||
<ul>
|
||||
<% @users.reverse.each do |user| %>
|
||||
<li>
|
||||
<a href="/admin/users/<%= user.id %>"><%= user.email %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<h2><%= _("Votes") %></h2>
|
||||
|
||||
<ul>
|
||||
<% @votes.reverse.each do |vote| %>
|
||||
<li>
|
||||
<a href="/admin/votes/<%= vote.id %>"><%= vote.title %></a>
|
||||
<% case vote.state
|
||||
when 'draft' %>
|
||||
<%= _("(Draft)") %>
|
||||
<% when 'open' %>
|
||||
<%= _("(Open)") %>
|
||||
<% when 'closed' %>
|
||||
<%= _("(Closed)") %>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
55
views/admin_users.erb
Normal file
55
views/admin_users.erb
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<h1><%= _("Admin") %></h1>
|
||||
|
||||
<h2><%= @user.email %></h2>
|
||||
|
||||
<p><%= _("Created: %{date}") % { date: format_date(@user.created_at) } %></p>
|
||||
|
||||
<p><%= _("Updated: %{date}") % { date: format_date(@user.updated_at) } %></p>
|
||||
|
||||
<p><%= _("Admin: %{admin}") % { admin: @user.admin ? _("Yes") : _("No") } %></p>
|
||||
|
||||
<h2><%= _("Organized votes") %></h2>
|
||||
|
||||
<% unless @user.organizers.blank? %>
|
||||
|
||||
<ul>
|
||||
<% @user.organizers.each do |organizer| %>
|
||||
<li>
|
||||
<%= organizer.user.email %>
|
||||
<a href="/admin/users/<%= @user.id %>/organizers/<%= organizer.vote.id %>/delete"><%= _("Delete") %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<% else %>
|
||||
|
||||
<p><%= _("No vote organized.") %></p>
|
||||
|
||||
<% end %>
|
||||
|
||||
<h2><%= _("Ratings") %></h2>
|
||||
|
||||
<% unless @user.ratings.blank? %>
|
||||
|
||||
<ul>
|
||||
<% @user.ratings.collect { |rating| rating.vote }.uniq.each do |vote| %>
|
||||
<li>
|
||||
<%= vote.title %>
|
||||
<a href="/admin/users/<%= @user.id %>/ratings/<%= vote.id %>/delete"><%= _("Delete") %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<% else %>
|
||||
|
||||
<p><%= _("No rating.") %></p>
|
||||
|
||||
<% end %>
|
||||
|
||||
<% if @user.ratings.blank? and @user.organizers.blank? %>
|
||||
|
||||
<form action="/admin/users/<%= @user.id %>/delete" method="post">
|
||||
<button type="submit"><%= _("Delete user") %></button>
|
||||
</form>
|
||||
|
||||
<% end %>
|
||||
63
views/admin_votes.erb
Normal file
63
views/admin_votes.erb
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
<h1><%= _("Admin") %></h1>
|
||||
|
||||
<h2><%= @vote.title %></h2>
|
||||
|
||||
<p><a href="/votes/<%= @vote.secure_id %>"><%= _("View vote") %></a></p>
|
||||
|
||||
<p><%= _("Created: %{date}") % { date: format_date(@vote.created_at) } %></p>
|
||||
|
||||
<p><%= _("Updated: %{date}") % { date: format_date(@vote.updated_at) } %></p>
|
||||
|
||||
<p><%= _("Secure ID: %{secure_id}") % { secure_id: @vote.secure_id } %></p>
|
||||
|
||||
<p><%= _("Description: %{description}") % { description: @vote.description } %></p>
|
||||
|
||||
<p><%= _("Closing date: %{date}") % { date: @vote.expire_on ? format_date_and_time(@vote.expire_on) : _("None") } %></p>
|
||||
|
||||
<p><%= _("State: %{state}") % { state: @vote.state } %></p>
|
||||
|
||||
<h2><%= _("Organizers") %></h2>
|
||||
|
||||
<% unless @vote.organizers.blank? %>
|
||||
|
||||
<ul>
|
||||
<% @vote.organizers.each do |organizer| %>
|
||||
<li>
|
||||
<%= organizer.user.email %>
|
||||
<a href="/admin/votes/<%= @vote.id %>/organizers/<%= organizer.user.id %>/delete"><%= _("Delete") %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<% else %>
|
||||
|
||||
<p><%= _("No organizer.") %></p>
|
||||
|
||||
<% end %>
|
||||
|
||||
<h2><%= _("Ratings") %></h2>
|
||||
|
||||
<% unless @vote.ratings.blank? %>
|
||||
|
||||
<ul>
|
||||
<% @vote.ratings.collect { |rating| rating.user }.uniq.each do |user| %>
|
||||
<li>
|
||||
<%= user.email %>
|
||||
<a href="/admin/votes/<%= @vote.id %>/ratings/<%= user.id %>/delete"><%= _("Delete") %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<% else %>
|
||||
|
||||
<p><%= _("No rating.") %></p>
|
||||
|
||||
<% end %>
|
||||
|
||||
<% if @vote.ratings.blank? and @vote.organizers.blank? %>
|
||||
|
||||
<form action="/admin/votes/<%= @vote.id %>/delete" method="post">
|
||||
<button type="submit"><%= _("Delete vote") %></button>
|
||||
</form>
|
||||
|
||||
<% end %>
|
||||
|
|
@ -20,7 +20,12 @@
|
|||
<body>
|
||||
<% if current_user %>
|
||||
<p><%= _("Logged in as %{email}.") % { email: current_user.email } %> <a href="/logout"><%= _("Logout") %></a></p>
|
||||
<p><a href="/"><%= _("Home") %></a></p>
|
||||
<p>
|
||||
<a href="/"><%= _("Home") %></a>
|
||||
<% if is_admin %>
|
||||
<a href="/admin"><%= _("Admin") %></a>
|
||||
<% end %>
|
||||
</p>
|
||||
<% else %>
|
||||
<p><a href="/login"><%= _("Login") %></a></p>
|
||||
<% end %>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<h1><%= _("Open vote") %></h1>
|
||||
|
||||
<p><%= _("Closing date: #{format_date(@expire_on)}") %></p>
|
||||
<p><%= _("Closing date: %{date}" % { date: format_date_and_time(@expire_on) }) %></p>
|
||||
|
||||
<p><%= _("The vote will automatically close on that date and the results will
|
||||
be sent to all users by email.") %></p>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<h1><%= @vote.title %></h1>
|
||||
|
||||
<% if @vote.expire_on %>
|
||||
<p><%= _("Closing date: #{format_date(@vote.expire_on)}") %></p>
|
||||
<p><%= _("Closing date: %{date}" % { date: format_date_and_time(@vote.expire_on) }) %></p>
|
||||
<% end %>
|
||||
|
||||
<p><%= @vote.description %></p>
|
||||
|
||||
<% if @vote.ratings.length > 0 %>
|
||||
<% unless @vote.ratings.blank? %>
|
||||
|
||||
<h2><%= _("All ratings") %></h2>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<h1><%= @vote.title %></h1>
|
||||
|
||||
<% if @vote.expire_on %>
|
||||
<p><%= _("Closing date: #{format_date(@vote.expire_on)}") %></p>
|
||||
<p><%= _("Closing date: %{date}" % { date: format_date_and_time(@vote.expire_on) }) %></p>
|
||||
<% end %>
|
||||
|
||||
<p><%= @vote.description %></p>
|
||||
|
|
@ -35,6 +35,8 @@
|
|||
<% end %>
|
||||
</ul>
|
||||
|
||||
<% unless @vote.organizers.blank? %>
|
||||
|
||||
<h2><%= _("Organizers") %></h2>
|
||||
|
||||
<ul>
|
||||
|
|
@ -43,6 +45,8 @@
|
|||
<% end %>
|
||||
</ul>
|
||||
|
||||
<% end %>
|
||||
|
||||
<% if @vote.users.exists?(current_user.id) and @vote.expire_on.nil? %>
|
||||
|
||||
<h3><%= _("Actions for organizers") %></h3>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue