diff --git a/vedia.rb b/vedia.rb index 34c37dd..4b6e308 100644 --- a/vedia.rb +++ b/vedia.rb @@ -133,17 +133,18 @@ post '/login' do end session.clear session[:user_id] = user.id - redirect '/' + session[:timezone] = params[:timezone] + if params[:r] + redirect params[:r] + else + redirect '/' + end else @error = _("Incorrect email or password.") erb :login end end -post '/timezone' do - session[:timezone] = JSON.parse(request.body.read)['timezone'] -end - get '/reset' do erb :reset end @@ -317,19 +318,26 @@ post '/votes/new' do end get '/votes/:id' do - require_login find_vote - case @vote.state - when 'draft' - if @vote.users.exists?(current_user.id) - erb :votes_edit + if not @vote + erb :votes_show_unknown + else + if not current_user + erb :votes_show_unauthenticated else - erb :votes_show_draft + case @vote.state + when 'draft' + if @vote.users.exists?(current_user.id) + erb :votes_edit + else + erb :votes_show_draft + end + when 'open' + erb :votes_show_open + when 'closed' + erb :votes_show_closed + end end - when 'open' - erb :votes_show_open - when 'closed' - erb :votes_show_closed end end @@ -510,15 +518,15 @@ post '/votes/:id/ratings' do 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 + @voted = true end + erb :votes_show_open end get '/votes/:id/organizers' do @@ -594,10 +602,11 @@ helpers do end def require_login - redirect '/login' unless current_user + redirect "/login?r=#{request.path}" unless current_user end def require_admin + require_login redirect '/' unless is_admin end @@ -634,12 +643,7 @@ helpers do end def format_date(timestamp) - if session[:timezone] - "#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F')}" - else - # Otherwise, format_date fails on first page after login. Not sure why... - "#{timestamp.strftime('%F')}" - end + "#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F')}" end def format_date_and_time(timestamp) diff --git a/views/admin.erb b/views/admin.erb index 802627c..9857d75 100644 --- a/views/admin.erb +++ b/views/admin.erb @@ -3,7 +3,7 @@
<%= @error %>
<% end %> - + + diff --git a/views/votes.erb b/views/votes.erb index fe1f7a7..1e10aed 100644 --- a/views/votes.erb +++ b/views/votes.erb @@ -14,6 +14,11 @@ <% when 'closed' %> <%= _("Closed") %> <% end %> + <% if vote.ratings.find { |rating| rating.user == current_user } %> + <%= _("Voted") %> + <% elsif vote.state == 'open' %> + <%= _("Not voted") %> + <% end %> <% if vote.users.exists?(current_user.id) %> <%= _("Organizer") %> <% end %> diff --git a/views/votes_show_closed.erb b/views/votes_show_closed.erb index d908383..4ad63eb 100644 --- a/views/votes_show_closed.erb +++ b/views/votes_show_closed.erb @@ -97,7 +97,7 @@ end <% end %> - <% @vote.ratings.collect { |rating| rating.user }.uniq.each do |user| %> + <% @vote.ratings.collect { |rating| rating.user }.uniq.sort_by { |user| user.email }.each do |user| %><%= _("Gràcies per votar!") %>
+<% end %> +<%= _("You need to log in to see the details of this vote.") %>
+ + + + diff --git a/views/votes_show_unknown.erb b/views/votes_show_unknown.erb new file mode 100644 index 0000000..0d35540 --- /dev/null +++ b/views/votes_show_unknown.erb @@ -0,0 +1,3 @@ +