diff --git a/.gitignore b/.gitignore index 5142bb0..9020593 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ locale db/*.sqlite3 db/*.sqlite3-* config/environments/development.rb -vedia.log diff --git a/Rakefile b/Rakefile index 62ef4c3..bfa6157 100644 --- a/Rakefile +++ b/Rakefile @@ -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 diff --git a/config/environments/defaults.rb b/config/environments/defaults.rb deleted file mode 100644 index 108f981..0000000 --- a/config/environments/defaults.rb +++ /dev/null @@ -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 diff --git a/config/schedule.rb b/config/schedule.rb deleted file mode 100644 index 37830fe..0000000 --- a/config/schedule.rb +++ /dev/null @@ -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 diff --git a/po/ca/vedia.po b/po/ca/vedia.po index 492739d..0682d88 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-07 18:22-0600\n" "PO-Revision-Date: 2025-03-29 20:41-0600\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \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" diff --git a/po/vedia.pot b/po/vedia.pot index 6218cdc..089cb68 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-07 18:22-0600\n" +"PO-Revision-Date: 2025-06-07 18:22-0600\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \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 "" diff --git a/vedia.rb b/vedia.rb index 5c30dd2..0b5eb2c 100644 --- a/vedia.rb +++ b/vedia.rb @@ -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 diff --git a/views/layout.erb b/views/layout.erb index 1041d63..da0085e 100644 --- a/views/layout.erb +++ b/views/layout.erb @@ -8,15 +8,6 @@ - <% if current_user %>

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

diff --git a/views/reset_email.erb b/views/reset_email.erb index ded765c..4a2bd5a 100644 --- a/views/reset_email.erb +++ b/views/reset_email.erb @@ -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}" %> diff --git a/views/votes_close_email.erb b/views/votes_close_email.erb deleted file mode 100644 index 065d130..0000000 --- a/views/votes_close_email.erb +++ /dev/null @@ -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}" %> diff --git a/views/votes_edit.erb b/views/votes_edit.erb index 7ee4e93..e7fa5f6 100644 --- a/views/votes_edit.erb +++ b/views/votes_edit.erb @@ -33,7 +33,7 @@

- +

<%= _("Organizers") %>

@@ -51,12 +51,12 @@

- +

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

-
+ <% if @vote.candidates.length < 2 %>

<%= _("Add at least 2 candidates before opening the vote to participants.") %>

diff --git a/views/votes_open.erb b/views/votes_open.erb deleted file mode 100644 index bf7783a..0000000 --- a/views/votes_open.erb +++ /dev/null @@ -1,28 +0,0 @@ -

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

- -

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

- -

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

- -

<%= _("You won't be able to modify or delete this vote anymore after -opening it.") %>

- - - -
- -
- -
- -

<%= @vote.title %>

- -

<%= @vote.description %>

- -

<%= _("Candidates") %>

- -<% @vote.candidates.each do |candidate| %> -

<%= candidate.name %>

-

<%= candidate.description %>

-<% end %> diff --git a/views/votes_show_closed.erb b/views/votes_show_closed.erb index e482275..cb27423 100644 --- a/views/votes_show_closed.erb +++ b/views/votes_show_closed.erb @@ -1,13 +1,7 @@

<%= @vote.title %>

-<% if @vote.expire_on %> -

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

-<% end %> -

<%= @vote.description %>

-<% if @vote.ratings.length > 0 %> -

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

@@ -68,14 +62,6 @@ end %> <%= bar_chart data, colors: colors, stacked: true, legend: 'bottom' %> -<% else %> - -

<%= _("Results") %>

- -<%= _("No results are available because nobody voted on this vote.") %> - -<% end %> -

<%= _("Organizers") %>

    @@ -84,7 +70,7 @@ end <% end %>
-<% if @vote.users.exists?(current_user.id) and @vote.expire_on.nil? %> +<% if @vote.users.exists?(current_user.id) %>

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

@@ -92,14 +78,14 @@ end -

<%= _("Add organizer") %>

+

<%= _("Add") %>

- + <% end %> diff --git a/views/votes_show_open.erb b/views/votes_show_open.erb index c3c11c7..4e8cd49 100644 --- a/views/votes_show_open.erb +++ b/views/votes_show_open.erb @@ -1,9 +1,5 @@

<%= @vote.title %>

-<% if @vote.expire_on %> -

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

-<% end %> -

<%= @vote.description %>

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

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

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

@@ -62,7 +58,7 @@

- + <% end %>