130 lines
4.2 KiB
Ruby
130 lines
4.2 KiB
Ruby
class EventNewsSetting
|
|
include Mongoid::Document
|
|
include Mongoid::Timestamps
|
|
field :carousel_image_width, type: String, :default => "75%"
|
|
field :top_limit, type: Integer, :default => 0
|
|
field :pro_enabled, type: Boolean, :default => false
|
|
field :approvers, type: Array, :default => []
|
|
field :email_to, type: Array, :default => ["admins","managers","approvers"]
|
|
field :is_display_edit_only, type: Boolean, :default => false
|
|
field :only_manager_can_edit_status, type: Boolean, :default => false
|
|
field :including_day_of_the_week, type: Boolean, default: true
|
|
field :including_time, type: Boolean, default: true
|
|
field :hour_clock_24, type: Boolean, default: true
|
|
field :enable_manually_sort, type: Boolean, default: false
|
|
field :is_postdate_sort_first, type: Boolean, default: false
|
|
|
|
field :migrate_flag, type: Array, default: []
|
|
|
|
has_many :event_news_status_settings, :autosave => true, :dependent => :destroy
|
|
accepts_nested_attributes_for :event_news_status_settings, :allow_destroy => true
|
|
|
|
before_save do
|
|
can_update_shared_hash = (defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash)
|
|
if self.including_day_of_the_week_changed? || self.including_time_changed? || self.hour_clock_24_changed?
|
|
@need_update_event_news = true
|
|
end
|
|
if self.enable_manually_sort_changed? && self.enable_manually_sort
|
|
EventNews.index({approved: -1,is_hidden: 1,is_preview: 1, is_top: -1,sort_number: 1,postdate: -1,_id: -1,deadline: -1}, { unique: false, background: true })
|
|
EventNews.create_indexes
|
|
if can_update_shared_hash
|
|
OrbitHelper::SharedMutex.synchronize do
|
|
OrbitHelper::SharedHash["event_news_mod"][:enable_manually_sort] = self.enable_manually_sort
|
|
end
|
|
end
|
|
@need_update_event_news = true
|
|
end
|
|
end
|
|
after_save do
|
|
if @need_update_event_news
|
|
@need_update_event_news = false
|
|
Thread.new do
|
|
EventNewsCache.all.delete
|
|
end
|
|
end
|
|
end
|
|
def self.check_limit_for_user(user_id, b_id = nil)
|
|
limit = self.first.top_limit rescue 0
|
|
return true if limit == 0
|
|
count = Bulletin.where(:is_top => true, :create_user_id => user_id, :id.ne => b_id).count
|
|
return count < limit
|
|
end
|
|
|
|
def self.is_pro?
|
|
self.first.pro_enabled rescue false
|
|
end
|
|
def self.event_date_default_format
|
|
setting = self.first
|
|
setting.event_date_default_format
|
|
end
|
|
def event_date_default_format
|
|
datetime_format = "%Y-%m-%d"
|
|
if self.including_day_of_the_week
|
|
datetime_format += " %a"
|
|
end
|
|
if self.including_time
|
|
if self.hour_clock_24
|
|
datetime_format += " %H:%M"
|
|
else
|
|
datetime_format += " %I:%M %P"
|
|
end
|
|
end
|
|
datetime_format
|
|
end
|
|
def get_weekday(w)
|
|
trans = EventNews::Week_day_trans
|
|
if trans.keys.include?(I18n.locale)
|
|
trans[I18n.locale][w]
|
|
else
|
|
trans[:en][w]
|
|
end
|
|
end
|
|
def custom_strftime(dt, datetime_format)
|
|
if dt
|
|
dt.strftime(datetime_format.sub("%a","%%a")).sub("%a",get_weekday(dt.wday))
|
|
else
|
|
""
|
|
end
|
|
end
|
|
def event_date_format
|
|
@event_date_format ||= self.event_date_default_format
|
|
end
|
|
def self.event_time_formated_for_frontend(st,ed)
|
|
self.first.event_time_formated_for_frontend(st,ed)
|
|
end
|
|
def event_time_formated_for_frontend(st,ed)
|
|
st,ed = self.event_time_formated(st,ed).split("~")
|
|
if st.blank?
|
|
st = "<span class=\"start_date\">#{st}</span>"
|
|
end
|
|
if ed.nil?
|
|
st
|
|
else
|
|
ed = "<span class=\"start_date\">#{ed}</span>"
|
|
"#{st} ~ #{ed}"
|
|
end
|
|
end
|
|
def event_time_formated(st,ed)
|
|
s = st
|
|
e = ed
|
|
if s.blank? && e.blank?
|
|
""
|
|
elsif e.blank?
|
|
custom_strftime(s, self.event_date_format)
|
|
elsif s.blank?
|
|
"~ " + custom_strftime(e, self.event_date_format)
|
|
else
|
|
parse_format = self.event_date_format
|
|
if s.to_date == e.to_date
|
|
parse_format_arr = parse_format.split(/(%d %a|%d) /)
|
|
parse_format_arr = parse_format_arr[0..-2].join(""), parse_format_arr[-1]
|
|
date_str = custom_strftime(s, parse_format_arr[0])
|
|
s_time = s.strftime(parse_format_arr[1])
|
|
e_time = e.strftime(parse_format_arr[1])
|
|
"#{date_str} #{s_time} ~ #{e_time}"
|
|
else
|
|
custom_strftime(s, self.event_date_format) + " ~ " + custom_strftime(e, self.event_date_format)
|
|
end
|
|
end
|
|
end
|
|
end |