mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
39 lines
1.2 KiB
Ruby
39 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Survey < ActiveRecord::Base
|
|
belongs_to :surveyable, polymorphic: true
|
|
has_many :survey_questions, dependent: :destroy
|
|
has_many :survey_submissions, dependent: :destroy
|
|
|
|
enum :target, [:after_conference, :during_registration, :after_event]
|
|
validates :title, presence: true
|
|
|
|
##
|
|
# Finds active surveys
|
|
# * if a survey has either start or end date, but not both
|
|
# check is performed only on the attribute that exists
|
|
# * if a survey does not have start/end dates, then it is marked active
|
|
# further check is expected, where appropriate, depending on the survey's target
|
|
# ====Returns
|
|
# * +true+ -> If the survey is active (will accept replies)
|
|
# * +false+ -> If the survey is closed
|
|
def active?
|
|
return true unless start_date || end_date
|
|
|
|
# Find timezone of conference (survyeable is Conference or Event)
|
|
timezone = surveyable.is_a?(Conference) ? surveyable.timezone : surveyable.conference.timezone
|
|
now = Time.current.in_time_zone(timezone)
|
|
|
|
if start_date && end_date
|
|
now.between?(start_date, end_date)
|
|
elsif start_date && !end_date
|
|
now >= start_date
|
|
elsif !start_date && end_date
|
|
now <= end_date
|
|
end
|
|
end
|
|
|
|
def closed?
|
|
!active?
|
|
end
|
|
end
|