Files
nairobi/app/helpers/polls_helper.rb
Javi Martín 864f750d92 Remove duplication in poll permissions
We were checking for `expired?` and `results_enabled?` in views and
helpers, when we've already defined a rule for accessing stats and
results for a poll.

This way we also fix a bug when stats were enabled but the poll wasn't
finished. In this scenario, the link pointed to the stats page, but when
clicking it we'd get a "you don't have permission" message.

Now the link doesn't point to the stats page anymore.
2019-11-09 19:33:02 +01:00

77 lines
2.0 KiB
Ruby

module PollsHelper
def poll_select_options(include_all = nil)
options = @polls.map do |poll|
[poll.name, current_path_with_query_params(poll_id: poll.id)]
end
options << all_polls if include_all
options_for_select(options, request.fullpath)
end
def all_polls
[I18n.t("polls.all"), admin_questions_path]
end
def poll_dates(poll)
if poll.starts_at.blank? || poll.ends_at.blank?
I18n.t("polls.no_dates")
else
I18n.t("polls.dates", open_at: l(poll.starts_at.to_date), closed_at: l(poll.ends_at.to_date))
end
end
def poll_dates_select_options(poll)
options = []
(poll.starts_at.to_date..poll.ends_at.to_date).each do |date|
options << [l(date, format: :long), l(date)]
end
options_for_select(options, params[:d])
end
def poll_booths_select_options(poll)
options = []
poll.booths.each do |booth|
options << [booth_name_with_location(booth), booth.id]
end
options_for_select(options)
end
def booth_name_with_location(booth)
location = booth.location.blank? ? "" : " (#{booth.location})"
booth.name + location
end
def poll_voter_token(poll, user)
Poll::Voter.find_by(poll: poll, user: user, origin: "web")&.token || ""
end
def voted_before_sign_in(question)
question.answers.where(author: current_user).any? { |vote| current_user.current_sign_in_at > vote.updated_at }
end
def link_to_poll(text, poll)
if can?(:results, poll)
link_to text, results_poll_path(id: poll.slug || poll.id)
elsif can?(:stats, poll)
link_to text, stats_poll_path(id: poll.slug || poll.id)
else
link_to text, poll_path(id: poll.slug || poll.id)
end
end
def results_menu?
controller_name == "polls" && action_name == "results"
end
def stats_menu?
controller_name == "polls" && action_name == "stats"
end
def info_menu?
controller_name == "polls" && action_name == "show"
end
def show_polls_description?
@active_poll.present? && @current_filter == "current"
end
end