Compare commits

..

No commits in common. "e474a9a8eadad4de283aac1f0c4b23ef3a025cff" and "fa4f77c365d0636f71f8dced4fe282b250f38d44" have entirely different histories.

14 changed files with 113 additions and 304 deletions

1
.gitignore vendored
View file

@ -4,4 +4,3 @@ locale
db/*.sqlite3
db/*.sqlite3-*
config/environments/development.rb
vedia.log

View file

@ -2,9 +2,9 @@ require_relative 'vedia'
require 'sinatra/activerecord/rake'
desc "Update PO files"
task :update_po do
task :updatepo do
require 'gettext/tools/xgettext'
GetText::Tools::XGetText.run(*["vedia.rb"] + Dir.glob("views/*.{rb,erb}") + ["config/environments/defaults.rb"] + ["-o", "po/vedia.pot"])
GetText::Tools::XGetText.run(*["vedia.rb"] + Dir.glob("views/*.{rb,erb}") + ["-o", "po/vedia.pot"])
require 'gettext/tools/msgmerge'
Dir.glob("po/**/vedia.po").collect { |po| /po\/(.+)\/vedia\.po/.match(po)[1] }.each do |locale|
GetText::Tools::MsgMerge.run("po/#{locale}/vedia.po", "po/vedia.pot", "-o", "po/#{locale}/vedia.po")
@ -12,7 +12,7 @@ task :update_po do
end
desc "Build MO files"
task :build_mo do
task :buildmo do
require 'gettext/tools/msgfmt'
Dir.mkdir("locale") unless Dir.exist?("locale")
Dir.glob("po/**/vedia.po").collect { |po| /po\/(.+)\/vedia\.po/.match(po)[1] }.each do |locale|
@ -20,8 +20,3 @@ task :build_mo do
GetText::Tools::MsgFmt.run("po/#{locale}/vedia.po", "-o", "locale/#{locale}/vedia.mo")
end
end
desc "Close votes that have expired"
task :close_expired_votes do
close_expired_votes
end

View file

@ -1,8 +0,0 @@
set :admin_email, 'vedia@potager.org'
set :values, [ { :id => 1, :label => _("Awful"), :color => '#ff4500' },
{ :id => 2, :label => _("Very bad"), :color => '#ffa500' },
{ :id => 3, :label => _("Bad"), :color => '#ffff00' },
{ :id => 4, :label => _("Mediocre"), :color => '#9acd32' },
{ :id => 5, :label => _("Good"), :color => '#228b22' },
{ :id => 6, :label => _("Very good"), :color => '#006400' } ]
set :expire_after, 7 * 24 * 60 * 60 # 7 days

View file

@ -1,9 +0,0 @@
if ENV['RAILS_ENV']
set :environment, ENV['RAILS_ENV']
end
set :output, 'vedia.log'
every 5.minutes do
rake "close_expired_votes"
end

View file

@ -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-07 18:22-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"
@ -17,39 +17,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: ../config/environments/defaults.rb:2
#: ../vedia.rb:64
msgid "Awful"
msgstr "Molt malament"
#: ../config/environments/defaults.rb:3
#: ../vedia.rb:65
msgid "Very bad"
msgstr "Malament"
#: ../config/environments/defaults.rb:4
#: ../vedia.rb:66
msgid "Bad"
msgstr "Poc bé"
#: ../config/environments/defaults.rb:5
#: ../vedia.rb:67
msgid "Mediocre"
msgstr "Mig bé"
#: ../config/environments/defaults.rb:6
#: ../vedia.rb:68
msgid "Good"
msgstr "Bé"
#: ../config/environments/defaults.rb:7
#: ../vedia.rb:69
msgid "Very good"
msgstr "Molt bé"
#: ../vedia.rb:118
#: ../vedia.rb:121
msgid "Incorrect email or password."
msgstr "Correu o contrasenya incorrecte."
#: ../vedia.rb:140
#: ../vedia.rb:139
msgid "Reset your password"
msgstr "Reiniciar contrasenya"
#: ../views/home.erb:1 ../views/layout.erb:23
#: ../views/home.erb:1 ../views/layout.erb:14
msgid "Home"
msgstr "Inici"
@ -85,21 +85,21 @@ msgstr "(Tancada)"
msgid "Create new vote"
msgstr "Crear una nova votació"
#: ../views/layout.erb:22
#: ../views/layout.erb:13
msgid "Logged in as %{email}."
msgstr "Estàs connectada com a %{email}."
#: ../views/layout.erb:22
#: ../views/layout.erb:13
msgid "Logout"
msgstr "Desconnexió"
#: ../views/layout.erb:25 ../views/login.erb:1 ../views/login.erb:16
#: ../views/layout.erb:16 ../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:85 ../views/votes_show_open.erb:58
msgid "Email"
msgstr "Correu"
@ -122,7 +122,7 @@ msgid "Specify a password."
msgstr "Entra una contrasenya."
#: ../views/reset_email.erb:1
msgid "Visit this link to reset your password:"
msgid "Visit the following link to reset your password:"
msgstr "Visita aquest enllaç per reiniciar la teva contrasenya:"
#: ../views/reset_invalid.erb:3
@ -153,14 +153,6 @@ msgstr "El correu no és una direcció de correu vàlida."
msgid "An account already exists for %{email}."
msgstr "Un compte ja existeix pel correu %{email}."
#: ../views/votes_close_email.erb:1
msgid "Results:"
msgstr "Resultats:"
#: ../views/votes_close_email.erb:5
msgid "Visit this link to see the full results:"
msgstr "Visita aquest enllaç per veure els resultats complets:"
#: ../views/votes_edit.erb:1
msgid "Edit draft vote"
msgstr "Editar un esborrany de votació"
@ -174,12 +166,11 @@ 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:23
msgid "Save"
msgstr "Guardar"
#: ../views/votes_edit.erb:15 ../views/votes_open.erb:23
#: ../views/votes_show_draft.erb:13
#: ../views/votes_edit.erb:15 ../views/votes_show_draft.erb:13
msgid "Candidates"
msgstr "Opcions"
@ -187,7 +178,7 @@ msgstr "Opcions"
msgid "Delete"
msgstr "Suprimir"
#: ../views/votes_edit.erb:25 ../views/votes_edit.erb:36
#: ../views/votes_edit.erb:25
msgid "Add candidate"
msgstr "Afegeix una opció"
@ -195,24 +186,27 @@ 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
#: ../views/votes_edit.erb:36 ../views/votes_edit.erb:54
#: ../views/votes_show_closed.erb:81 ../views/votes_show_closed.erb:88
#: ../views/votes_show_open.erb:61
msgid "Add"
msgstr "Afegir"
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:65
#: ../views/votes_show_draft.erb:5 ../views/votes_show_open.erb:34
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_edit.erb:47 ../views/votes_show_open.erb:54
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_edit.erb:57 ../views/votes_show_closed.erb:75
#: ../views/votes_show_open.erb:44
msgid "Actions for organizers"
msgstr "Accions per les organitzadores"
#: ../views/votes_edit.erb:61 ../views/votes_edit.erb:64
#: ../views/votes_open.erb:12
msgid "Open vote to participants"
msgstr "Obrir la votació als votants"
@ -228,80 +222,54 @@ msgstr "Suprimir la votació"
msgid "New vote"
msgstr "Nova votació"
#: ../views/votes_open.erb:1
msgid "Open vote"
msgstr "Obrir la votació"
#: ../views/votes_open.erb:5
msgid ""
"The vote will automatically close on that date and the results will\n"
"be sent to all users by email."
msgstr ""
"La votació es tancarà automàticament en aquesta data i els resultats\n"
"s'enviaran a tothom per email."
#: ../views/votes_open.erb:8
msgid ""
"You won't be able to modify or delete this vote anymore after\n"
"opening it."
msgstr "Ja no podràs modificar o suprimir aquesta votació desprès d'obrir-la."
#: ../views/votes_open.erb:16
msgid "Cancel"
msgstr "Cancel·lar"
#: ../views/votes_show_closed.erb:11
#: ../views/votes_show_closed.erb:5
msgid "All ratings"
msgstr "Totes les valoracions"
#: ../views/votes_show_closed.erb:15
#: ../views/votes_show_closed.erb:9
msgid "Participant"
msgstr "Votant"
#: ../views/votes_show_closed.erb:33 ../views/votes_show_closed.erb:73
#: ../views/votes_show_closed.erb:27
msgid "Results"
msgstr "Resultats"
#: ../views/votes_show_closed.erb:37
#: ../views/votes_show_closed.erb:31
msgid "Rank"
msgstr "Rang"
#: ../views/votes_show_closed.erb:38
#: ../views/votes_show_closed.erb:32
msgid "Candidate"
msgstr "Opció"
#: ../views/votes_show_closed.erb:39
#: ../views/votes_show_closed.erb:33
msgid "Majority Judgment"
msgstr "Judici majoritari"
#: ../views/votes_show_closed.erb:40
#: ../views/votes_show_closed.erb:34
msgid "Proponents"
msgstr "Defensores"
#: ../views/votes_show_closed.erb:41
#: ../views/votes_show_closed.erb:35
msgid "Opponents"
msgstr "Detractores"
#: ../views/votes_show_closed.erb:75
msgid "No results are available because nobody voted on this vote."
msgstr "No hi ha cap resultat perquè ningú va votar en aquesta votació."
#: ../views/votes_show_closed.erb:92
#: ../views/votes_show_closed.erb:78
msgid "Reopen voting period"
msgstr "Reobrir el període de votació"
#: ../views/votes_show_open.erb:9
#: ../views/votes_show_open.erb:5
msgid "Your ratings"
msgstr "Les teves valoracions"
#: ../views/votes_show_open.erb:30
#: ../views/votes_show_open.erb:26
msgid "Participants"
msgstr "Votants"
#: ../views/votes_show_open.erb:51
#: ../views/votes_show_open.erb:47
msgid "Change back to draft vote"
msgstr "Tornar a l'esborrany de votació"
#: ../views/votes_show_open.erb:55
#: ../views/votes_show_open.erb:51
msgid "Close votes and show results"
msgstr "Tancar la votació i veure els resultats"

View file

@ -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-07 18:22-0600\n"
"PO-Revision-Date: 2025-06-07 18:22-0600\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
@ -18,39 +18,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: ../config/environments/defaults.rb:2
#: ../vedia.rb:64
msgid "Awful"
msgstr ""
#: ../config/environments/defaults.rb:3
#: ../vedia.rb:65
msgid "Very bad"
msgstr ""
#: ../config/environments/defaults.rb:4
#: ../vedia.rb:66
msgid "Bad"
msgstr ""
#: ../config/environments/defaults.rb:5
#: ../vedia.rb:67
msgid "Mediocre"
msgstr ""
#: ../config/environments/defaults.rb:6
#: ../vedia.rb:68
msgid "Good"
msgstr ""
#: ../config/environments/defaults.rb:7
#: ../vedia.rb:69
msgid "Very good"
msgstr ""
#: ../vedia.rb:118
#: ../vedia.rb:121
msgid "Incorrect email or password."
msgstr ""
#: ../vedia.rb:140
#: ../vedia.rb:139
msgid "Reset your password"
msgstr ""
#: ../views/home.erb:1 ../views/layout.erb:23
#: ../views/home.erb:1 ../views/layout.erb:14
msgid "Home"
msgstr ""
@ -86,21 +86,21 @@ msgstr ""
msgid "Create new vote"
msgstr ""
#: ../views/layout.erb:22
#: ../views/layout.erb:13
msgid "Logged in as %{email}."
msgstr ""
#: ../views/layout.erb:22
#: ../views/layout.erb:13
msgid "Logout"
msgstr ""
#: ../views/layout.erb:25 ../views/login.erb:1 ../views/login.erb:16
#: ../views/layout.erb:16 ../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:85 ../views/votes_show_open.erb:58
msgid "Email"
msgstr ""
@ -123,7 +123,7 @@ msgid "Specify a password."
msgstr ""
#: ../views/reset_email.erb:1
msgid "Visit this link to reset your password:"
msgid "Visit the following link to reset your password:"
msgstr ""
#: ../views/reset_invalid.erb:3
@ -152,14 +152,6 @@ msgstr ""
msgid "An account already exists for %{email}."
msgstr ""
#: ../views/votes_close_email.erb:1
msgid "Results:"
msgstr ""
#: ../views/votes_close_email.erb:5
msgid "Visit this link to see the full results:"
msgstr ""
#: ../views/votes_edit.erb:1
msgid "Edit draft vote"
msgstr ""
@ -173,12 +165,11 @@ 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:23
msgid "Save"
msgstr ""
#: ../views/votes_edit.erb:15 ../views/votes_open.erb:23
#: ../views/votes_show_draft.erb:13
#: ../views/votes_edit.erb:15 ../views/votes_show_draft.erb:13
msgid "Candidates"
msgstr ""
@ -186,7 +177,7 @@ msgstr ""
msgid "Delete"
msgstr ""
#: ../views/votes_edit.erb:25 ../views/votes_edit.erb:36
#: ../views/votes_edit.erb:25
msgid "Add candidate"
msgstr ""
@ -194,24 +185,27 @@ 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
#: ../views/votes_edit.erb:36 ../views/votes_edit.erb:54
#: ../views/votes_show_closed.erb:81 ../views/votes_show_closed.erb:88
#: ../views/votes_show_open.erb:61
msgid "Add"
msgstr ""
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:65
#: ../views/votes_show_draft.erb:5 ../views/votes_show_open.erb:34
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_edit.erb:47 ../views/votes_show_open.erb:54
msgid "Add organizer"
msgstr ""
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:89
#: ../views/votes_show_open.erb:48
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:75
#: ../views/votes_show_open.erb:44
msgid "Actions for organizers"
msgstr ""
#: ../views/votes_edit.erb:61 ../views/votes_edit.erb:64
#: ../views/votes_open.erb:12
msgid "Open vote to participants"
msgstr ""
@ -227,78 +221,54 @@ msgstr ""
msgid "New vote"
msgstr ""
#: ../views/votes_open.erb:1
msgid "Open vote"
msgstr ""
#: ../views/votes_open.erb:5
msgid ""
"The vote will automatically close on that date and the results will\n"
"be sent to all users by email."
msgstr ""
#: ../views/votes_open.erb:8
msgid ""
"You won't be able to modify or delete this vote anymore after\n"
"opening it."
msgstr ""
#: ../views/votes_open.erb:16
msgid "Cancel"
msgstr ""
#: ../views/votes_show_closed.erb:11
#: ../views/votes_show_closed.erb:5
msgid "All ratings"
msgstr ""
#: ../views/votes_show_closed.erb:15
#: ../views/votes_show_closed.erb:9
msgid "Participant"
msgstr ""
#: ../views/votes_show_closed.erb:33 ../views/votes_show_closed.erb:73
#: ../views/votes_show_closed.erb:27
msgid "Results"
msgstr ""
#: ../views/votes_show_closed.erb:37
#: ../views/votes_show_closed.erb:31
msgid "Rank"
msgstr ""
#: ../views/votes_show_closed.erb:38
#: ../views/votes_show_closed.erb:32
msgid "Candidate"
msgstr ""
#: ../views/votes_show_closed.erb:39
#: ../views/votes_show_closed.erb:33
msgid "Majority Judgment"
msgstr ""
#: ../views/votes_show_closed.erb:40
#: ../views/votes_show_closed.erb:34
msgid "Proponents"
msgstr ""
#: ../views/votes_show_closed.erb:41
#: ../views/votes_show_closed.erb:35
msgid "Opponents"
msgstr ""
#: ../views/votes_show_closed.erb:75
msgid "No results are available because nobody voted on this vote."
msgstr ""
#: ../views/votes_show_closed.erb:92
#: ../views/votes_show_closed.erb:78
msgid "Reopen voting period"
msgstr ""
#: ../views/votes_show_open.erb:9
#: ../views/votes_show_open.erb:5
msgid "Your ratings"
msgstr ""
#: ../views/votes_show_open.erb:30
#: ../views/votes_show_open.erb:26
msgid "Participants"
msgstr ""
#: ../views/votes_show_open.erb:51
#: ../views/votes_show_open.erb:47
msgid "Change back to draft vote"
msgstr ""
#: ../views/votes_show_open.erb:55
#: ../views/votes_show_open.erb:51
msgid "Close votes and show results"
msgstr ""

View file

@ -5,12 +5,7 @@ require 'gettext'
require 'securerandom'
require 'chartkick'
require 'mail'
require 'tzinfo'
include GetText
require_relative 'mj'
require_relative 'config/environments/defaults.rb'
require_relative "config/environments/#{settings.environment}"
class Vote < ActiveRecord::Base
@ -60,11 +55,19 @@ def verify_password(password, hash)
BCrypt::Password.new(hash) == password
end
include GetText
set_output_charset('UTF-8')
bindtextdomain('vedia', 'locale')
set_locale('ca')
enable :sessions
set :values, [ { :id => 1, :label => _("Awful"), :color => '#ff4500' },
{ :id => 2, :label => _("Very bad"), :color => '#ffa500' },
{ :id => 3, :label => _("Bad"), :color => '#ffff00' },
{ :id => 4, :label => _("Mediocre"), :color => '#9acd32' },
{ :id => 5, :label => _("Good"), :color => '#228b22' },
{ :id => 6, :label => _("Very good"), :color => '#006400' } ]
set :admin_email, 'vedia@potager.org'
MajorityJudgment.values = settings.values
get '/' do
@ -120,10 +123,6 @@ post '/login' do
end
end
post '/timezone' do
session[:timezone] = JSON.parse(request.body.read)['timezone']
end
get '/reset' do
erb :reset
end
@ -131,8 +130,7 @@ end
post '/reset' do
@user = User.find_by(email: params[:email])
if @user
@reset = SecureRandom.uuid
@user.reset = hash_password(@reset)
@user.reset = SecureRandom.uuid
@user.save
mail = Mail.new
mail.from = settings.admin_email
@ -145,10 +143,7 @@ post '/reset' do
end
get '/reset/:uuid' do
@user = nil
User.where.not(reset: nil).each do |user|
@user = user if verify_password(params[:uuid], user.reset)
end
@user = User.find_by(reset: params[:uuid])
if @user
erb :reset_change
else
@ -157,10 +152,7 @@ get '/reset/:uuid' do
end
post '/reset/:uuid' do
@user = nil
User.where.not(reset: nil).each do |user|
@user = user if verify_password(params[:uuid], user.reset)
end
@user = User.find_by(reset: params[:uuid])
if @user
@errors = []
if params[:password].empty?
@ -221,6 +213,10 @@ get '/votes/:id' do
erb :votes_show_open
when 'closed'
erb :votes_show_closed
else
@vote.state = 'draft'
@vote.save
erb :votes_edit
end
end
@ -257,15 +253,6 @@ post '/votes/:id/candidates/:cid/delete' do
redirect '/votes/' + @vote.secure_id
end
get '/votes/:id/open' do
require_login
find_vote
require_organizer
require_draft_vote
@expire_on = Time.now.utc + settings.expire_after
erb :votes_open
end
post '/votes/:id/open' do
require_login
find_vote
@ -273,7 +260,6 @@ post '/votes/:id/open' do
require_draft_vote
if not @vote.candidates.length < 2
@vote.state = 'open'
@vote.expire_on = Time.now.utc + settings.expire_after
@vote.save
end
redirect '/votes/' + @vote.secure_id
@ -284,7 +270,6 @@ post '/votes/:id/draft' do
find_vote
require_organizer
require_open_vote
require_no_expire_on
@vote.ratings.each {|r| r.destroy}
@vote.state = 'draft'
@vote.save
@ -296,7 +281,6 @@ post '/votes/:id/close' do
find_vote
require_organizer
require_open_vote
require_no_expire_on
@vote.state = 'closed'
@vote.save
redirect '/votes/' + @vote.secure_id
@ -307,7 +291,6 @@ post '/votes/:id/reopen' do
find_vote
require_organizer
require_closed_vote
require_no_expire_on
@vote.state = 'open'
@vote.save
redirect '/votes/' + @vote.secure_id
@ -316,7 +299,6 @@ end
post '/votes/:id/ratings' do
require_login
find_vote
require_open_vote
@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]
@ -342,24 +324,6 @@ post '/votes/:id/delete' do
redirect '/'
end
def close_expired_votes
Vote.where(state: 'open').where("expire_on < :now", { now: Time.now.utc }).each do |vote|
puts "#{Time.now.utc} Closing vote \"#{vote.title}\" because it expired on #{vote.expire_on}..."
vote.state = 'closed'
vote.save
User.all.each do |user|
puts "#{Time.now.utc} Sending results by email to #{user.email}..."
mail = Mail.new
mail.from = settings.admin_email
mail.to = user.email
mail.subject = _("Results of the vote: #{vote.title}")
template = ERB.new(File.read("views/votes_close_email.erb"))
mail.body = template.result(binding)
mail.deliver
end
end
end
helpers do
def current_user
if session[:user_id]
@ -392,12 +356,4 @@ helpers do
def require_closed_vote
redirect '/votes/' + @vote.secure_id unless @vote.state == 'closed'
end
def require_no_expire_on
redirect '/votes/' + @vote.secure_id unless @vote.expire_on.nil?
end
def format_date(timestamp)
"#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F %R')} (#{session[:timezone].gsub('_', ' ')})"
end
end

View file

@ -8,15 +8,6 @@
<script src="/Chart.bundle.js"></script>
<link rel="stylesheet" href="/style.css">
</head>
<script>
fetch('/timezone', {
method: 'post',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone })
});
</script>
<body>
<% if current_user %>
<p><%= _("Logged in as %{email}.") % { email: current_user.email } %> <a href="/logout"><%= _("Logout") %></a></p>

View file

@ -1,3 +1,3 @@
<%= _("Visit this link to reset your password:") %>
<%= _("Visit the following link to reset your password:") %>
<%= "#{settings.base_url}reset/#{@reset}" %>
<%= "#{settings.base_url}reset/#{@user.reset}" %>

View file

@ -1,7 +0,0 @@
<%= _("Results:") %>
<% i = 0 %><% vote.candidates.sort { |a, b| a.mj <=> b.mj }.reverse.each do |candidate| %><% i = i + 1 %>
<%= "#{i}. #{candidate.name}" %>
<% end %>
<%= _("Visit this link to see the full results:") %>
<%= "#{settings.base_url}votes/#{vote.secure_id}" %>

View file

@ -33,7 +33,7 @@
<label for="description"><%= _("Description") %></label>
<input type="text" name="description">
</p>
<button type="submit"><%= _("Add candidate") %></button>
<button type="submit"><%= _("Add") %></button>
</form>
<h2><%= _("Organizers") %></h2>
@ -51,12 +51,12 @@
<label for="email"><%= _("Email") %></label>
<input type="text" name="email">
</p>
<button type="submit"><%= _("Add organizer") %></button>
<button type="submit"><%= _("Add") %></button>
</form>
<h3><%= _("Actions for organizers") %></h2>
<form action="/votes/<%= @vote.secure_id %>/open" method="get">
<form action="/votes/<%= @vote.secure_id %>/open" method="post">
<% if @vote.candidates.length < 2 %>
<button type="submit" disabled><%= _("Open vote to participants") %></button>
<p><%= _("Add at least 2 candidates before opening the vote to participants.") %></p>

View file

@ -1,28 +0,0 @@
<h1><%= _("Open vote") %></h1>
<p><%= _("Closing date: #{format_date(@expire_on)}") %></p>
<p><%= _("The vote will automatically close on that date and the results will
be sent to all users by email.") %></p>
<p><%= _("You won't be able to modify or delete this vote anymore after
opening it.") %></p>
<form action="/votes/<%= @vote.secure_id %>/open" method="post">
<button type="submit"><%= _("Open vote to participants") %></button>
</form>
<form action="/votes/<%= @vote.secure_id %>" method="get">
<button type="submit"><%= _("Cancel") %></button>
</form>
<h2><%= @vote.title %></h2>
<p><%= @vote.description %></p>
<h2><%= _("Candidates") %></h2>
<% @vote.candidates.each do |candidate| %>
<h3><%= candidate.name %></h3>
<p><%= candidate.description %></p>
<% end %>

View file

@ -1,13 +1,7 @@
<h1><%= @vote.title %></h1>
<% if @vote.expire_on %>
<p><%= _("Closing date: #{format_date(@vote.expire_on)}") %></p>
<% end %>
<p><%= @vote.description %></p>
<% if @vote.ratings.length > 0 %>
<h2><%= _("All ratings") %></h2>
<table>
@ -68,14 +62,6 @@ end
%>
<%= bar_chart data, colors: colors, stacked: true, legend: 'bottom' %>
<% else %>
<h2><%= _("Results") %></h2>
<%= _("No results are available because nobody voted on this vote.") %>
<% end %>
<h2><%= _("Organizers") %></h2>
<ul>
@ -84,7 +70,7 @@ end
<% end %>
</ul>
<% if @vote.users.exists?(current_user.id) and @vote.expire_on.nil? %>
<% if @vote.users.exists?(current_user.id) %>
<h3><%= _("Actions for organizers") %></h3>
@ -92,14 +78,14 @@ end
<button type="submit"><%= _("Reopen voting period") %></button>
</form>
<h3><%= _("Add organizer") %></h3>
<h3><%= _("Add") %></h3>
<form action="/votes/<%= @vote.secure_id %>/organizers" method="post">
<p>
<label for="email"><%= _("Email") %></label>
<input type="text" name="email">
</p>
<button type="submit"><%= _("Add organizer") %></button>
<button type="submit"><%= _("Add") %></button>
</form>
<% end %>

View file

@ -1,9 +1,5 @@
<h1><%= @vote.title %></h1>
<% if @vote.expire_on %>
<p><%= _("Closing date: #{format_date(@vote.expire_on)}") %></p>
<% end %>
<p><%= @vote.description %></p>
<h2><%= _("Your ratings") %></h2>
@ -43,7 +39,7 @@
<% end %>
</ul>
<% if @vote.users.exists?(current_user.id) and @vote.expire_on.nil? %>
<% if @vote.users.exists?(current_user.id) %>
<h3><%= _("Actions for organizers") %></h3>
@ -62,7 +58,7 @@
<label for="email"><%= _("Email") %></label>
<input type="text" name="email">
</p>
<button type="submit"><%= _("Add organizer") %></button>
<button type="submit"><%= _("Add") %></button>
</form>
<% end %>