Compare commits

...

3 commits

Author SHA1 Message Date
0e291dc31c Allow changing closing date 2026-03-01 15:44:42 -06:00
b1a0b21c47 Configure mailto and path with Sinatra 2026-03-01 13:23:41 -06:00
54d721abd4 Use Sinatra config in whenever 2026-03-01 13:18:32 -06:00
5 changed files with 73 additions and 12 deletions

View file

@ -12,3 +12,4 @@ gem 'bcrypt'
gem 'gettext'
gem 'mail'
gem 'redcarpet'
gem 'whenever'

View file

@ -23,6 +23,7 @@ GEM
bcrypt (3.1.20)
benchmark (0.4.0)
bigdecimal (3.1.9)
chronic (0.10.2)
concurrent-ruby (1.3.5)
connection_pool (2.5.0)
date (3.4.1)
@ -92,11 +93,16 @@ GEM
singleton (0.3.0)
sqlite3 (2.6.0)
mini_portile2 (~> 2.8.0)
sqlite3 (2.6.0-arm64-darwin)
sqlite3 (2.6.0-x86_64-darwin)
sqlite3 (2.6.0-x86_64-linux-gnu)
text (1.3.1)
tilt (2.6.0)
timeout (0.4.3)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
whenever (1.1.2)
chronic (>= 0.6.3)
PLATFORMS
arm64-darwin
@ -117,6 +123,7 @@ DEPENDENCIES
sinatra
sinatra-activerecord
sqlite3
whenever
BUNDLED WITH
2.3.15

View file

@ -1,6 +1,8 @@
if ENV['RACK_ENV']
set :environment, ENV['RACK_ENV']
end
require_relative '../vedia'
env 'MAILTO', Sinatra::Application.settings.admin
set :path, Sinatra::Application.settings.path
set :environment_variable, 'RACK_ENV'
every 5.minutes do
rake "close_expired_votes"

View file

@ -1,10 +1,4 @@
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'
@ -266,7 +260,22 @@ get '/admin/votes/:id' do
erb :admin_votes
end
get '/admin/votes/:id/organizers/:user/delete' do
post '/admin/votes/:id' do
require_admin
@vote = Vote.find(params[:id])
if params.has_key?('year')
new_expiry = TZInfo::Timezone.get(session[:timezone]).local_time(params['year'].to_i, params['month'].to_i, params['day'].to_i, params['hour'].to_i, params['minute'].to_i)
if (@vote.state == 'open' or @vote.state == 'closed') and new_expiry > Time.now
puts "change"
@vote.expire_on = new_expiry
@vote.state = 'open'
@vote.save
end
end
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
@ -650,8 +659,12 @@ helpers do
"#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F')}"
end
def format_timezone
session[:timezone].gsub('_', ' ')
end
def format_date_and_time(timestamp)
"#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F %R')} (#{session[:timezone].gsub('_', ' ')})"
"#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F %R')} (#{format_timezone})"
end
def markdown(markdown)

View file

@ -12,7 +12,45 @@
<p><%= _("Description: %{description}") % { description: @vote.description } %></p>
<p><%= _("Closing date: %{date}") % { date: @vote.expire_on ? format_date_and_time(@vote.expire_on) : _("None") } %></p>
<% if @vote.state == 'closed' or @vote.state == 'open' %>
<form action="/admin/votes/<%= @vote.id %>" method="post">
<p>
<%= _("Closing date: ") %>
<% year = Time.now.strftime('%Y').to_i %>
<select name='year'>
<% (-1..1).each do |i| %>
<option value="<%= year + i %>"<% if TZInfo::Timezone.get(session[:timezone]).to_local(@vote.expire_on).strftime('%Y').to_i == year + i %> selected="selected"<% end %>><%= year + i %></option>
<% end %>
</select>
-
<select name='month'>
<% (1..11).each do |m| %>
<option value="<%= m %>"<% if TZInfo::Timezone.get(session[:timezone]).to_local(@vote.expire_on).strftime('%m').to_i == m %> selected="selected"<% end %>><%= m %></option>
<% end %>
</select>
-
<select name='day'>
<% (1..31).each do |d| %>
<option value="<%= d %>"<% if TZInfo::Timezone.get(session[:timezone]).to_local(@vote.expire_on).strftime('%d').to_i == d %> selected="selected"<% end %>><%= d %></option>
<% end %>
</select>
&nbsp;
<select name='hour'>
<% (0..23).each do |h| %>
<option value="<%= h %>"<% if TZInfo::Timezone.get(session[:timezone]).to_local(@vote.expire_on).strftime('%H').to_i == h %> selected="selected"<% end %>><%= h %></option>
<% end %>
</select>
:
<select name='minute'>
<% (0..59).each do |m| %>
<option value="<%= m %>"<% if TZInfo::Timezone.get(session[:timezone]).to_local(@vote.expire_on).strftime('%M').to_i == m %> selected="selected"<% end %>><%= m %></option>
<% end %>
</select>
(<%= format_timezone %>)
<button type="submit" class="btn btn-link"><%= _("Change") %></button>
</p>
</form>
<% end %>
<p class="mb-5"><%= _("State: %{state}") % { state: @vote.state } %></p>