From 5fa73da51a9965b4b4df6cb2f82ff9307cc35a94 Mon Sep 17 00:00:00 2001 From: ricola Date: Sun, 8 Jun 2025 20:46:37 -0600 Subject: [PATCH] Add admin panel for users and votes Closes #2 --- .../20250608223006_add_admin_to_users.rb | 5 + db/schema.rb | 3 +- po/ca/vedia.po | 157 +++++++++++++----- po/vedia.pot | 157 +++++++++++++----- vedia.rb | 78 +++++++++ views/admin.erb | 29 ++++ views/admin_users.erb | 55 ++++++ views/admin_votes.erb | 63 +++++++ views/layout.erb | 7 +- views/votes_open.erb | 2 +- views/votes_show_closed.erb | 4 +- views/votes_show_open.erb | 6 +- 12 files changed, 484 insertions(+), 82 deletions(-) create mode 100644 db/migrate/20250608223006_add_admin_to_users.rb create mode 100644 views/admin.erb create mode 100644 views/admin_users.erb create mode 100644 views/admin_votes.erb diff --git a/db/migrate/20250608223006_add_admin_to_users.rb b/db/migrate/20250608223006_add_admin_to_users.rb new file mode 100644 index 0000000..d589b6f --- /dev/null +++ b/db/migrate/20250608223006_add_admin_to_users.rb @@ -0,0 +1,5 @@ +class AddAdminToUsers < ActiveRecord::Migration[7.2] + def change + add_column :users, :admin, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index 347a427..bffb47b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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| diff --git a/po/ca/vedia.po b/po/ca/vedia.po index 492739d..5c6734c 100644 --- a/po/ca/vedia.po +++ b/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 \n" "Language-Team: LANGUAGE \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" diff --git a/po/vedia.pot b/po/vedia.pot index 6218cdc..4ff68a3 100644 --- a/po/vedia.pot +++ b/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 \n" "Language-Team: LANGUAGE \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 "" diff --git a/vedia.rb b/vedia.rb index 038f2b7..cab3dac 100644 --- a/vedia.rb +++ b/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 diff --git a/views/admin.erb b/views/admin.erb new file mode 100644 index 0000000..11da0bc --- /dev/null +++ b/views/admin.erb @@ -0,0 +1,29 @@ +

<%= _("Admin") %>

+ +

<%= _("Users") %>

+ + + +

<%= _("Votes") %>

+ +
    +<% @votes.reverse.each do |vote| %> +
  • + <%= vote.title %> + <% case vote.state + when 'draft' %> + <%= _("(Draft)") %> + <% when 'open' %> + <%= _("(Open)") %> + <% when 'closed' %> + <%= _("(Closed)") %> + <% end %> +
  • +<% end %> +
diff --git a/views/admin_users.erb b/views/admin_users.erb new file mode 100644 index 0000000..05f7e1d --- /dev/null +++ b/views/admin_users.erb @@ -0,0 +1,55 @@ +

<%= _("Admin") %>

+ +

<%= @user.email %>

+ +

<%= _("Created: %{date}") % { date: format_date(@user.created_at) } %>

+ +

<%= _("Updated: %{date}") % { date: format_date(@user.updated_at) } %>

+ +

<%= _("Admin: %{admin}") % { admin: @user.admin ? _("Yes") : _("No") } %>

+ +

<%= _("Organized votes") %>

+ +<% unless @user.organizers.blank? %> + +
    +<% @user.organizers.each do |organizer| %> +
  • + <%= organizer.user.email %> + <%= _("Delete") %> +
  • +<% end %> +
+ +<% else %> + +

<%= _("No vote organized.") %>

+ +<% end %> + +

<%= _("Ratings") %>

+ +<% unless @user.ratings.blank? %> + +
    +<% @user.ratings.collect { |rating| rating.vote }.uniq.each do |vote| %> +
  • + <%= vote.title %> + <%= _("Delete") %> +
  • +<% end %> +
+ +<% else %> + +

<%= _("No rating.") %>

+ +<% end %> + +<% if @user.ratings.blank? and @user.organizers.blank? %> + +
+ +
+ +<% end %> diff --git a/views/admin_votes.erb b/views/admin_votes.erb new file mode 100644 index 0000000..739adc1 --- /dev/null +++ b/views/admin_votes.erb @@ -0,0 +1,63 @@ +

<%= _("Admin") %>

+ +

<%= @vote.title %>

+ +

<%= _("View vote") %>

+ +

<%= _("Created: %{date}") % { date: format_date(@vote.created_at) } %>

+ +

<%= _("Updated: %{date}") % { date: format_date(@vote.updated_at) } %>

+ +

<%= _("Secure ID: %{secure_id}") % { secure_id: @vote.secure_id } %>

+ +

<%= _("Description: %{description}") % { description: @vote.description } %>

+ +

<%= _("Closing date: %{date}") % { date: @vote.expire_on ? format_date_and_time(@vote.expire_on) : _("None") } %>

+ +

<%= _("State: %{state}") % { state: @vote.state } %>

+ +

<%= _("Organizers") %>

+ +<% unless @vote.organizers.blank? %> + +
    +<% @vote.organizers.each do |organizer| %> +
  • + <%= organizer.user.email %> + <%= _("Delete") %> +
  • +<% end %> +
+ +<% else %> + +

<%= _("No organizer.") %>

+ +<% end %> + +

<%= _("Ratings") %>

+ +<% unless @vote.ratings.blank? %> + +
    +<% @vote.ratings.collect { |rating| rating.user }.uniq.each do |user| %> +
  • + <%= user.email %> + <%= _("Delete") %> +
  • +<% end %> +
+ +<% else %> + +

<%= _("No rating.") %>

+ +<% end %> + +<% if @vote.ratings.blank? and @vote.organizers.blank? %> + +
+ +
+ +<% end %> diff --git a/views/layout.erb b/views/layout.erb index 1041d63..a8bd2dc 100644 --- a/views/layout.erb +++ b/views/layout.erb @@ -20,7 +20,12 @@ <% if current_user %>

<%= _("Logged in as %{email}.") % { email: current_user.email } %> <%= _("Logout") %>

-

<%= _("Home") %>

+

+ <%= _("Home") %> + <% if is_admin %> + <%= _("Admin") %> + <% end %> +

<% else %>

<%= _("Login") %>

<% end %> diff --git a/views/votes_open.erb b/views/votes_open.erb index bf7783a..6cf345c 100644 --- a/views/votes_open.erb +++ b/views/votes_open.erb @@ -1,6 +1,6 @@

<%= _("Open vote") %>

-

<%= _("Closing date: #{format_date(@expire_on)}") %>

+

<%= _("Closing date: %{date}" % { date: format_date_and_time(@expire_on) }) %>

<%= _("The vote will automatically close on that date and the results will be sent to all users by email.") %>

diff --git a/views/votes_show_closed.erb b/views/votes_show_closed.erb index e482275..93f41a3 100644 --- a/views/votes_show_closed.erb +++ b/views/votes_show_closed.erb @@ -1,12 +1,12 @@

<%= @vote.title %>

<% if @vote.expire_on %> -

<%= _("Closing date: #{format_date(@vote.expire_on)}") %>

+

<%= _("Closing date: %{date}" % { date: format_date_and_time(@vote.expire_on) }) %>

<% end %>

<%= @vote.description %>

-<% if @vote.ratings.length > 0 %> +<% unless @vote.ratings.blank? %>

<%= _("All ratings") %>

diff --git a/views/votes_show_open.erb b/views/votes_show_open.erb index c3c11c7..ae75c4b 100644 --- a/views/votes_show_open.erb +++ b/views/votes_show_open.erb @@ -1,7 +1,7 @@

<%= @vote.title %>

<% if @vote.expire_on %> -

<%= _("Closing date: #{format_date(@vote.expire_on)}") %>

+

<%= _("Closing date: %{date}" % { date: format_date_and_time(@vote.expire_on) }) %>

<% end %>

<%= @vote.description %>

@@ -35,6 +35,8 @@ <% end %> +<% unless @vote.organizers.blank? %> +

<%= _("Organizers") %>

    @@ -43,6 +45,8 @@ <% end %>
+<% end %> + <% if @vote.users.exists?(current_user.id) and @vote.expire_on.nil? %>

<%= _("Actions for organizers") %>