119 lines
2.8 KiB
Ruby
119 lines
2.8 KiB
Ruby
class Event < ActiveRecord::Base
|
|
date_format = /\A(0[1-9]|[12][0-9]|3[01])[\/](0[1-9]|1[012])[\/](19|20)\d\d\z/i
|
|
hour_format = /\A([0-1]?[0-9]|2[0-3]):([0-5][0-9])(:[0-5][0-9])?\z/i
|
|
validates :title, :presence => true
|
|
|
|
belongs_to :image_file
|
|
|
|
# validates :start_at_date, :presence => true, :format => { :with => date_format }
|
|
# validates :start_at_time, :presence => true, :format => { :with => hour_format }, :if => :with_time?
|
|
# validates :stop_at_date, :presence => true, :format => { :with => date_format }, :if => :stop_date
|
|
# validates :stop_at_time, :presence => true, :format => { :with => hour_format }, :if => [:with_time?,:stop_date]
|
|
|
|
attr_accessor :start_at_date, :start_at_time, :stop_at_date, :stop_at_time, :event_id, :skip_date
|
|
|
|
has_one :block, :as => :blockable
|
|
|
|
|
|
scope :between, lambda { |start, stop|
|
|
after(start).before(stop)
|
|
}
|
|
|
|
scope :after, lambda { |date|
|
|
where("(start_at >= ? or stop_at >= ?)", date, date )
|
|
}
|
|
scope :before, lambda { |date|
|
|
where("(stop_at <= ?) or (start_at <= ?)", date, date )
|
|
}
|
|
|
|
def alloweds_types
|
|
self.block.allow_types :TitleContent, :TextContent, :ImageContent, :LinkContent, :GalleryContent, :HtmlContent
|
|
|
|
end
|
|
|
|
after_create do
|
|
if self.event_id and Event.where(:id => self.event_id).exists?
|
|
|
|
event = Event.find(self.event_id)
|
|
|
|
@block = event.block.dup
|
|
@block.blockable = self
|
|
@block.save
|
|
|
|
else
|
|
@block = Block.new(:block_name => "general")
|
|
@block.blockable = self
|
|
@block.save
|
|
end
|
|
|
|
|
|
end
|
|
|
|
def create_block(event_id=nil)
|
|
if event_id
|
|
|
|
else
|
|
|
|
|
|
|
|
end
|
|
end
|
|
|
|
before_validation do
|
|
|
|
if !self.skip_date
|
|
self.stop_at_date, self.stop_at_time = nil, nil if !self.stop_date
|
|
self.start_at_time, self.stop_at_time = nil, nil if self.entire_day
|
|
|
|
if self.entire_day
|
|
self.start_at = self.start_at_date.to_s
|
|
self.stop_at = self.stop_at_date.to_s
|
|
else
|
|
self.start_at = self.start_at_date.to_s+" "+self.start_at_time.to_s
|
|
self.stop_at = self.stop_at_date.to_s+" "+self.stop_at_time.to_s
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if self.stop_date and self.start_at and (self.stop_at.beginning_of_day != self.start_at.beginning_of_day)
|
|
self.many_days = true
|
|
else
|
|
self.many_days = false
|
|
end
|
|
|
|
true
|
|
|
|
end
|
|
|
|
def with_time?
|
|
true if !self.entire_day
|
|
end
|
|
|
|
after_initialize do
|
|
if self.start_at
|
|
if self.entire_day
|
|
self.start_at_date = self.start_at.strftime('%d/%m/%Y')
|
|
else
|
|
self.start_at_date = self.start_at.strftime('%d/%m/%Y')
|
|
self.start_at_time = self.start_at.strftime('%H:%M')
|
|
end
|
|
end
|
|
|
|
if self.stop_at
|
|
if self.entire_day
|
|
self.stop_at_date = self.stop_at.strftime('%d/%m/%Y')
|
|
else
|
|
self.stop_at_date = self.stop_at.strftime('%d/%m/%Y')
|
|
self.stop_at_time = self.stop_at.strftime('%H:%M')
|
|
end
|
|
end
|
|
end
|
|
|
|
def human_date
|
|
|
|
|
|
|
|
end
|
|
end
|