From 0dd3d03b671cc4e8b739160ed7946267595cf017 Mon Sep 17 00:00:00 2001 From: ricola Date: Tue, 7 Oct 2025 10:24:23 +0200 Subject: [PATCH 1/6] Read RACK_ENV but apply RAILS_ENV Ruby whenever uses RAILS_ENV in crontab. --- config/schedule.rb | 4 ++-- vedia.rb | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config/schedule.rb b/config/schedule.rb index 37830fe..ec9ae59 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -1,5 +1,5 @@ -if ENV['RAILS_ENV'] - set :environment, ENV['RAILS_ENV'] +if ENV['RACK_ENV'] + set :environment, ENV['RACK_ENV'] end set :output, 'vedia.log' diff --git a/vedia.rb b/vedia.rb index 048ed62..ee3ec7b 100644 --- a/vedia.rb +++ b/vedia.rb @@ -1,4 +1,10 @@ require 'sinatra' + +# Set environment before requiring 'sinatra/activerecord' to make `whenever` uses the database. +if ENV['RAILS_ENV'] + set :environment, ENV['RAILS_ENV'] +end + require 'sinatra/activerecord' require 'bcrypt' require 'gettext' From fa57d465be9ef4932f70a8a8982a9ac13135a544 Mon Sep 17 00:00:00 2001 From: ricola Date: Tue, 7 Oct 2025 11:02:22 +0200 Subject: [PATCH 2/6] Limit width of text --- views/style.erb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/views/style.erb b/views/style.erb index 1cbad52..8b07e38 100644 --- a/views/style.erb +++ b/views/style.erb @@ -2,6 +2,10 @@ color: red; } +p, li { + max-width: 50em; +} + textarea { width: 80em; height: 20em; From b07b0da6726b1cd60c002c95f7c51721fa639119 Mon Sep 17 00:00:00 2001 From: ricola Date: Mon, 13 Oct 2025 20:07:34 +0200 Subject: [PATCH 3/6] Force ratings on all candidates before saving --- vedia.rb | 24 ++++++++++++++++++++---- views/votes_show_open.erb | 16 +++++++++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/vedia.rb b/vedia.rb index ee3ec7b..54c3d70 100644 --- a/vedia.rb +++ b/vedia.rb @@ -11,6 +11,7 @@ require 'gettext' require 'securerandom' require 'chartkick' require 'mail' +require 'ostruct' require 'tzinfo' require 'redcarpet' @@ -386,16 +387,31 @@ post '/votes/:id/reopen' do redirect '/votes/' + @vote.secure_id end +get '/votes/:id/ratings' do + redirect '/votes/' + params[:id] +end + post '/votes/:id/ratings' do require_login find_vote require_open_vote + @errors = [] @vote.candidates.each do |candidate| - rating = Rating.find_or_initialize_by(vote: @vote, user: current_user, candidate: candidate) - rating.value = params[candidate.id.to_s] - rating.save + if not params[candidate.id.to_s] + @errors << OpenStruct.new(:attribute => :rating, :type => :blank, :candidate => candidate) + end + end + if not @errors.empty? + @params = params + erb :votes_show_open + else + @vote.candidates.each do |candidate| + rating = Rating.find_or_initialize_by(vote: @vote, user: current_user, candidate: candidate) + rating.value = params[candidate.id.to_s] + rating.save + end + redirect '/votes/' + @vote.secure_id end - redirect '/votes/' + @vote.secure_id end post '/votes/:id/organizers' do diff --git a/views/votes_show_open.erb b/views/votes_show_open.erb index d5f5a8f..757afb5 100644 --- a/views/votes_show_open.erb +++ b/views/votes_show_open.erb @@ -1,5 +1,13 @@

<%= @vote.title %>

+<% if @errors %> +<% @errors.each do |error| %> + <% if error.attribute == :rating and error.type == :blank %> +

<%= _("Missing rating for candidate %{name}." % { name: error.candidate.name }) %>

+ <% end %> +<% end %> +<% end %> + <% if @vote.expire_on %>

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

<% end %> @@ -12,7 +20,13 @@
    <% @vote.candidates.each do |candidate| %> <% rating = @vote.ratings.find { |rating| rating.user == current_user and rating.candidate == candidate } %> - <% value = rating ? rating.value : 0 %> + <% if rating + value = rating.value + elsif @params[candidate.id.to_s] + value = params[candidate.id.to_s].to_i + else + value = 0 + end %>
  • <%= candidate.name %>

    <%= markdown(candidate.description) %> From 8d8bce32074ef06cdd6d083c3c8ab97fe46e6082 Mon Sep 17 00:00:00 2001 From: ricola Date: Mon, 13 Oct 2025 20:10:15 +0200 Subject: [PATCH 4/6] Translate value labels --- views/votes_show_closed.erb | 4 ++-- views/votes_show_open.erb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/views/votes_show_closed.erb b/views/votes_show_closed.erb index 5ce1aa4..549bba8 100644 --- a/views/votes_show_closed.erb +++ b/views/votes_show_closed.erb @@ -23,7 +23,7 @@ <% @vote.candidates.each do |candidate| %> <% if rating = @vote.ratings.find { |rating| rating.user == user and rating.candidate == candidate } %> <% value = settings.values.select { |e| e[:id] == rating.value }.first %> - <%= value[:label] %> + <%= _(value[:label]) %> <% end %> <% end %> @@ -47,7 +47,7 @@ <%= i %> <%= candidate.name %> <% value = settings.values.select { |e| e[:id] == candidate.mj.mj }.first %> - <%= value[:label] %> + <%= _(value[:label]) %> <%= candidate.mj.proponents %> <%= candidate.mj.opponents %> diff --git a/views/votes_show_open.erb b/views/votes_show_open.erb index 757afb5..76f73b0 100644 --- a/views/votes_show_open.erb +++ b/views/votes_show_open.erb @@ -32,7 +32,7 @@ <%= markdown(candidate.description) %>
      <% settings.values.reverse.each do |v| %> -
    • checked<% end %>>
    • +
    • checked<% end %>>
    • <% end %>
  • From 507a8dfaea02ee6acdcd73da049020fcbf660b8f Mon Sep 17 00:00:00 2001 From: ricola Date: Mon, 13 Oct 2025 20:20:46 +0200 Subject: [PATCH 5/6] Fix translations --- views/votes_open.erb | 2 +- views/votes_show_closed.erb | 2 +- views/votes_show_open.erb | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/views/votes_open.erb b/views/votes_open.erb index 0290bd1..6e3670e 100644 --- a/views/votes_open.erb +++ b/views/votes_open.erb @@ -1,6 +1,6 @@

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

    -

    <%= _("Closing date: %{date}" % { date: format_date_and_time(@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 549bba8..788f38c 100644 --- a/views/votes_show_closed.erb +++ b/views/votes_show_closed.erb @@ -1,7 +1,7 @@

    <%= @vote.title %>

    <% if @vote.expire_on %> -

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

    +

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

    <% end %> <%= markdown(@vote.description) %> diff --git a/views/votes_show_open.erb b/views/votes_show_open.erb index 76f73b0..9935f43 100644 --- a/views/votes_show_open.erb +++ b/views/votes_show_open.erb @@ -3,13 +3,13 @@ <% if @errors %> <% @errors.each do |error| %> <% if error.attribute == :rating and error.type == :blank %> -

    <%= _("Missing rating for candidate %{name}." % { name: error.candidate.name }) %>

    +

    <%= _("Missing rating for candidate %{name}.") % { name: error.candidate.name } %>

    <% end %> <% end %> <% end %> <% if @vote.expire_on %> -

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

    +

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

    <% end %> <%= markdown(@vote.description) %> From 0b59a74cf66da880502b0d035759b935598f353c Mon Sep 17 00:00:00 2001 From: ricola Date: Mon, 13 Oct 2025 20:21:08 +0200 Subject: [PATCH 6/6] Update PO files and Catalan translation --- po/ca/vedia.po | 30 +++++++++++++++++------------- po/vedia.pot | 32 ++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/po/ca/vedia.po b/po/ca/vedia.po index 5c6734c..7d1ef4c 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 20:44-0600\n" +"POT-Creation-Date: 2025-10-13 20:19+0200\n" "PO-Revision-Date: 2025-03-29 20:41-0600\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,11 +41,11 @@ msgstr "Bé" msgid "Very good" msgstr "Molt bé" -#: ../vedia.rb:119 +#: ../vedia.rb:127 msgid "Incorrect email or password." msgstr "Correu o contrasenya incorrecte." -#: ../vedia.rb:141 +#: ../vedia.rb:149 msgid "Reset your password" msgstr "Reiniciar contrasenya" @@ -133,7 +133,7 @@ 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 +#: ../views/votes_show_closed.erb:4 ../views/votes_show_open.erb:12 msgid "Closing date: %{date}" msgstr "Data de tancament: %{date}" @@ -147,7 +147,7 @@ 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 +#: ../views/votes_show_open.erb:54 msgid "Organizers" msgstr "Organitzadores" @@ -193,7 +193,7 @@ 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:66 +#: ../views/votes_show_closed.erb:99 ../views/votes_show_open.erb:80 msgid "Email" msgstr "Correu" @@ -268,7 +268,7 @@ msgstr "Títol" msgid "Description" msgstr "Descripció" -#: ../views/votes_edit.erb:12 ../views/votes_show_open.erb:27 +#: ../views/votes_edit.erb:12 ../views/votes_show_open.erb:41 msgid "Save" msgstr "Guardar" @@ -287,12 +287,12 @@ msgstr "Nom" #: ../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:62 ../views/votes_show_open.erb:69 +#: ../views/votes_show_open.erb:76 ../views/votes_show_open.erb:83 msgid "Add organizer" msgstr "Afegeix organitzadora" #: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:89 -#: ../views/votes_show_open.erb:52 +#: ../views/votes_show_open.erb:66 msgid "Actions for organizers" msgstr "Accions per les organitzadores" @@ -371,18 +371,22 @@ msgstr "No hi ha cap resultat perquè ningú va votar en aquesta votació." msgid "Reopen voting period" msgstr "Reobrir el període de votació" -#: ../views/votes_show_open.erb:9 +#: ../views/votes_show_open.erb:6 +msgid "Missing rating for candidate %{name}." +msgstr "Falta una valoració per l'opció %{name}." + +#: ../views/votes_show_open.erb:17 msgid "Your ratings" msgstr "Les teves valoracions" -#: ../views/votes_show_open.erb:30 +#: ../views/votes_show_open.erb:44 msgid "Participants" msgstr "Votants" -#: ../views/votes_show_open.erb:55 +#: ../views/votes_show_open.erb:69 msgid "Change back to draft vote" msgstr "Tornar a l'esborrany de votació" -#: ../views/votes_show_open.erb:59 +#: ../views/votes_show_open.erb:73 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 4ff68a3..fe89967 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 20:44-0600\n" -"PO-Revision-Date: 2025-06-08 20:44-0600\n" +"POT-Creation-Date: 2025-10-13 20:19+0200\n" +"PO-Revision-Date: 2025-10-13 20:19+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -42,11 +42,11 @@ msgstr "" msgid "Very good" msgstr "" -#: ../vedia.rb:119 +#: ../vedia.rb:127 msgid "Incorrect email or password." msgstr "" -#: ../vedia.rb:141 +#: ../vedia.rb:149 msgid "Reset your password" msgstr "" @@ -134,7 +134,7 @@ 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 +#: ../views/votes_show_closed.erb:4 ../views/votes_show_open.erb:12 msgid "Closing date: %{date}" msgstr "" @@ -148,7 +148,7 @@ 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 +#: ../views/votes_show_open.erb:54 msgid "Organizers" msgstr "" @@ -194,7 +194,7 @@ 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:66 +#: ../views/votes_show_closed.erb:99 ../views/votes_show_open.erb:80 msgid "Email" msgstr "" @@ -267,7 +267,7 @@ msgstr "" msgid "Description" msgstr "" -#: ../views/votes_edit.erb:12 ../views/votes_show_open.erb:27 +#: ../views/votes_edit.erb:12 ../views/votes_show_open.erb:41 msgid "Save" msgstr "" @@ -286,12 +286,12 @@ 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:62 ../views/votes_show_open.erb:69 +#: ../views/votes_show_open.erb:76 ../views/votes_show_open.erb:83 msgid "Add organizer" msgstr "" #: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:89 -#: ../views/votes_show_open.erb:52 +#: ../views/votes_show_open.erb:66 msgid "Actions for organizers" msgstr "" @@ -368,18 +368,22 @@ msgstr "" msgid "Reopen voting period" msgstr "" -#: ../views/votes_show_open.erb:9 +#: ../views/votes_show_open.erb:6 +msgid "Missing rating for candidate %{name}." +msgstr "" + +#: ../views/votes_show_open.erb:17 msgid "Your ratings" msgstr "" -#: ../views/votes_show_open.erb:30 +#: ../views/votes_show_open.erb:44 msgid "Participants" msgstr "" -#: ../views/votes_show_open.erb:55 +#: ../views/votes_show_open.erb:69 msgid "Change back to draft vote" msgstr "" -#: ../views/votes_show_open.erb:59 +#: ../views/votes_show_open.erb:73 msgid "Close votes and show results" msgstr ""