Fix feed.
This commit is contained in:
parent
a6360c5e5d
commit
ab902a8c04
|
@ -3,8 +3,25 @@ class EventNewsFeedsController < ApplicationController
|
||||||
include Admin::EventNewsHelper
|
include Admin::EventNewsHelper
|
||||||
def feed
|
def feed
|
||||||
uid = params[:uid].to_s
|
uid = params[:uid].to_s
|
||||||
anns = get_event_news(uid)
|
startdt = params[:start].blank? ? nil : params[:start]
|
||||||
render :json => anns.to_json
|
enddt = params[:end].blank? ? nil : params[:end]
|
||||||
|
dt = params[:date].blank? ? nil : params[:date]
|
||||||
|
feed_cache = EventNewsFeedCache.where(uid: uid, start: startdt, end: enddt, date: dt)
|
||||||
|
feed_cache_old = feed_cache.all_of([{:invalid_date.ne=>nil},{:invalid_date.lte => Time.now}]).last
|
||||||
|
feed_cache.all_of([{:invalid_date.ne=>nil},{:invalid_date.lte => Time.now}]).destroy
|
||||||
|
count = feed_cache.count
|
||||||
|
if count > 1
|
||||||
|
feed_cache.limit(count-1).destroy
|
||||||
|
end
|
||||||
|
feed_cache = feed_cache.first
|
||||||
|
anns = ''
|
||||||
|
if feed_cache.nil?
|
||||||
|
anns = EventNewsFeed.where(uid: uid).first.generate_one_cache_timeout(startdt: startdt,enddt: enddt,dt: dt,base_url: request.base_url,timeout: 20)
|
||||||
|
anns = (feed_cache_old.content rescue "") if anns.nil?
|
||||||
|
else
|
||||||
|
anns = feed_cache.content
|
||||||
|
end
|
||||||
|
render :json => anns
|
||||||
end
|
end
|
||||||
|
|
||||||
def rssfeed
|
def rssfeed
|
||||||
|
@ -14,6 +31,8 @@ class EventNewsFeedsController < ApplicationController
|
||||||
tags = @bf.tag_ids
|
tags = @bf.tag_ids
|
||||||
if !tags.empty?
|
if !tags.empty?
|
||||||
@event_news = EventNews.can_display_and_sorted.is_approved.filter_by_tags(tags)
|
@event_news = EventNews.can_display_and_sorted.is_approved.filter_by_tags(tags)
|
||||||
|
else
|
||||||
|
@event_news = EventNews.can_display_and_sorted.is_approved
|
||||||
end
|
end
|
||||||
categories = @bf.category_ids
|
categories = @bf.category_ids
|
||||||
if !categories.empty?
|
if !categories.empty?
|
||||||
|
@ -48,136 +67,6 @@ class EventNewsFeedsController < ApplicationController
|
||||||
render :json => {"feeds" => feeds}.to_json
|
render :json => {"feeds" => feeds}.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def smart_convertor(text)
|
|
||||||
html_string = text
|
|
||||||
links = html_string.scan(/img.*?src="(.*?)"/i)
|
|
||||||
links = links + html_string.scan(/a.*?href="(.*?)"/i)
|
|
||||||
links.uniq!
|
|
||||||
links.each do |link|
|
|
||||||
l = link.first
|
|
||||||
new_link = nil
|
|
||||||
if l.starts_with?("/")
|
|
||||||
new_link = request.protocol + request.host_with_port + l
|
|
||||||
elsif l.starts_with?("..")
|
|
||||||
l1 = l.gsub("../","")
|
|
||||||
new_link = request.protocol + request.host_with_port + "/" + l1
|
|
||||||
end
|
|
||||||
html_string = html_string.gsub(l,new_link) if !new_link.nil?
|
|
||||||
end
|
|
||||||
return html_string
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_event_news(uid)
|
|
||||||
bf = EventNewsFeed.find_by(:uid => uid) rescue nil
|
|
||||||
startdt = params[:start]
|
|
||||||
enddt = params[:end]
|
|
||||||
dt = params[:date]
|
|
||||||
if !bf.nil?
|
|
||||||
tags = bf.tag_ids
|
|
||||||
categories = bf.category_ids
|
|
||||||
if !(categories.empty? && tags.empty?)
|
|
||||||
if !dt.nil?
|
|
||||||
dt = DateTime.parse(dt)
|
|
||||||
dtt = dt + 1.day
|
|
||||||
event_news = EventNews.where(:postdate.gt => dt, :postdate.lt => dtt).can_display_and_sorted.is_approved
|
|
||||||
elsif !startdt.nil? && enddt.nil?
|
|
||||||
startdt = DateTime.parse(startdt)
|
|
||||||
enddt = DateTime.now
|
|
||||||
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
|
|
||||||
elsif !startdt.nil? && !enddt.nil?
|
|
||||||
startdt = DateTime.parse(startdt)
|
|
||||||
enddt = DateTime.parse(enddt) + 1.day
|
|
||||||
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
|
|
||||||
else
|
|
||||||
event_news = EventNews.all.can_display_and_sorted.is_approved
|
|
||||||
end
|
|
||||||
if !tags.empty?
|
|
||||||
event_news = event_news.filter_by_tags(tags)
|
|
||||||
end
|
|
||||||
if !categories.empty?
|
|
||||||
event_news = event_news.filter_by_categories(categories)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
event_news = []
|
|
||||||
end
|
|
||||||
end
|
|
||||||
all_anns = []
|
|
||||||
tag_names = []
|
|
||||||
category_titles = []
|
|
||||||
tag_ids = []
|
|
||||||
category_ids = []
|
|
||||||
event_news.each do |anns|
|
|
||||||
user = User.find(anns.create_user_id) rescue nil
|
|
||||||
if !user.nil?
|
|
||||||
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
|
|
||||||
else
|
|
||||||
author = ""
|
|
||||||
end
|
|
||||||
a = {}
|
|
||||||
a["id"] = anns.uid
|
|
||||||
translations_fields = ["title","subtitle","speaker","place","host","notes"]
|
|
||||||
translations_fields.each do |translations_field|
|
|
||||||
a[translations_field+"_translations"] = anns.send(translations_field+"_translations") rescue {}
|
|
||||||
end
|
|
||||||
a["text_translations"] = {}
|
|
||||||
a["text_translations"]["en"] = smart_convertor(anns.text_translations["en"]) if !anns.text_translations["en"].blank?
|
|
||||||
a["text_translations"]["zh_tw"] = smart_convertor(anns.text_translations["zh_tw"]) if !anns.text_translations["zh_tw"].blank?
|
|
||||||
a["event_date"] = anns.event_date
|
|
||||||
a["event_end_date"] = anns.event_end_date
|
|
||||||
a["postdate"] = anns.event_date#anns.postdate
|
|
||||||
a["image_description_translations"] = anns.image_description_translations
|
|
||||||
a["image"] = {}
|
|
||||||
a["image"]["original"] = ("#{request.base_url}" + anns.image.url rescue "")
|
|
||||||
a["image"]["thumb"] = ("#{request.base_url}" + anns.image.thumb.url rescue "")
|
|
||||||
a["image"]["mobile"] = ("#{request.base_url}" + anns.image.mobile.url rescue "")
|
|
||||||
a["img_src"] = a["image"]["thumb"] || "/assets/announcement-default.jpg"
|
|
||||||
a["tags"] = []
|
|
||||||
a["category"] = {}
|
|
||||||
a["author"] = author
|
|
||||||
a["params"] = anns.to_param
|
|
||||||
a["event_news_links"] = []
|
|
||||||
a["event_news_files"] = []
|
|
||||||
a["event_carousel_images"] = anns.event_carousel_images.map{|image| {"src"=>"#{request.base_url}" + image.file.url,"description"=>image.description.to_s,"description_text"=>image.description_text }}
|
|
||||||
anns.tags.each do |tag|
|
|
||||||
if !tag_ids.include?(tag.id.to_s)
|
|
||||||
tag_ids << tag.id.to_s
|
|
||||||
tag_names << {"name_translations" => tag.name_translations}
|
|
||||||
end
|
|
||||||
a["tags"] << {"name_translations" => tag.name_translations}
|
|
||||||
end
|
|
||||||
cat = anns.category
|
|
||||||
if (!category_ids.include?(cat.id.to_s) rescue false)
|
|
||||||
category_ids << cat.id.to_s
|
|
||||||
category_titles << {"title_translations" => cat.title_translations}
|
|
||||||
end
|
|
||||||
a["category"] = {"title_translations" => (cat.title_translations rescue {})}
|
|
||||||
anns.event_news_links.each do |bl|
|
|
||||||
b = {}
|
|
||||||
b["url"] = bl.url
|
|
||||||
b["title_translations"] = bl.title_translations
|
|
||||||
b["link_url"] = b["url"]
|
|
||||||
b["link_title_translations"] = bl.title_translations.map{|k,v| [k,(v.blank? ? File.basename(b["url"]) : v rescue '')]}.to_h
|
|
||||||
a["event_news_links"] << b
|
|
||||||
end
|
|
||||||
anns.event_news_files.each do |bf|
|
|
||||||
b = {}
|
|
||||||
b["description_translations"] = bf.description_translations
|
|
||||||
b["title_translations"] = bf.title_translations
|
|
||||||
b["url"] = ("#{request.base_url}" + bf.file.url rescue "")
|
|
||||||
b["file_url"] = b["url"]
|
|
||||||
b["file_title_translations"] = bf.title_translations.map{|k,v| [k,(v.blank? ? File.basename(b["url"]) : v rescue '')]}.to_h
|
|
||||||
a["event_news_files"] << b
|
|
||||||
end
|
|
||||||
all_anns << a
|
|
||||||
end
|
|
||||||
{
|
|
||||||
"event_news" => all_anns,
|
|
||||||
"tags" => tag_names,
|
|
||||||
"categories" => category_titles
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -709,14 +709,14 @@ class EventNewsModsController < ApplicationController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
files = event_news["event_news_files"].map{|file| { "file_url" => file["url"], "file_title" => (file["title_translations"][locale] == "" ? URI.unescape(File.basename(file["url"])) : file["title_translations"][locale] rescue '') } } rescue []
|
files = event_news["event_news_files"].map{|file| { "file_url" => file["file_url"], "file_title" => file["file_title_translations"][locale] } } rescue []
|
||||||
|
|
||||||
files.each do |file|
|
files.each do |file|
|
||||||
if file["file_url"] =="" || file["file_url"] == nil
|
if file["file_url"] =="" || file["file_url"] == nil
|
||||||
files.delete(file)
|
files.delete(file)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
links = event_news["event_news_links"].map{|link| { "link_url" => link["url"], "link_title" => (link["title_translations"][locale] == "" ? link["url"] : link["title_translations"][locale]) } } rescue []
|
links = event_news["event_news_links"].map{|link| { "link_url" => link["link_url"], "link_title" => link["link_title_translations"][locale] } } rescue []
|
||||||
|
|
||||||
update_user = event_news["author"]
|
update_user = event_news["author"]
|
||||||
desc = event_news["image_description_translations"][locale] rescue ""
|
desc = event_news["image_description_translations"][locale] rescue ""
|
||||||
|
@ -733,18 +733,29 @@ class EventNewsModsController < ApplicationController
|
||||||
meta_desc = ""
|
meta_desc = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
OrbitHelper.render_meta_tags([{"property" => "og:title", "content" => event_news["title_translations"][locale]},{"property" => "og:site_name", "content" => Site.first.title},{"property" => "og:url", "content" => request.original_url.split("?").first},{"property" => "og:description", "content" => meta_desc},{"property" => "og:image", "content" => event_news["image"]["original"]},{"property" => "og:type", "content" => "Article"}])
|
metas = [{"property" => "og:title", "content" => event_news["title_translations"][locale]},{"property" => "og:site_name", "content" => Site.first.title},{"property" => "og:url", "content" => request.original_url.split("?").first},{"property" => "og:description", "content" => meta_desc},{"property" => "og:type", "content" => "Article"}]
|
||||||
|
if event_news["image"]["original"].present?
|
||||||
|
image = event_news["image"]
|
||||||
|
metas << {"property" => "og:image", "content" => image["original"]}
|
||||||
|
if image["width"]
|
||||||
|
metas << {"property" => "og:image:width", "content" => image["width"].to_s}
|
||||||
|
end
|
||||||
|
if image["height"]
|
||||||
|
metas << {"property" => "og:image:height", "content" => image["height"].to_s}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
OrbitHelper.render_meta_tags(metas)
|
||||||
|
|
||||||
event_date = DateTime.parse(event_news["event_date"].to_s) rescue nil
|
event_date = DateTime.parse(event_news["event_date"].to_s) rescue nil
|
||||||
event_end_date = DateTime.parse(event_news["event_end_date"].to_s) rescue nil
|
event_end_date = DateTime.parse(event_news["event_end_date"].to_s) rescue nil
|
||||||
event_time = EventNewsSetting.event_time_formated_for_frontend(event_news["event_date"],event_news["event_end_date"])
|
event_time = EventNewsSetting.event_time_formated_for_frontend(event_date, event_end_date)
|
||||||
event_carousel_images = Array(event_news["event_carousel_images"])
|
event_carousel_images = Array(event_news["event_carousel_images"])
|
||||||
resume_btn_title = (I18n.locale.to_s =="zh_tw") ? "繼續播放" : "resume"
|
resume_btn_title = (I18n.locale.to_s =="zh_tw") ? "繼續播放" : "resume"
|
||||||
pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause"
|
pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause"
|
||||||
prev_btn_title = (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev"
|
prev_btn_title = (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev"
|
||||||
next_btn_title = (I18n.locale.to_s =="zh_tw") ? "下一張" : "next"
|
next_btn_title = (I18n.locale.to_s =="zh_tw") ? "下一張" : "next"
|
||||||
speaker = event_news["speaker_translations"][locale] rescue ""
|
speaker = event_news["speaker_translations"][locale]
|
||||||
host = event_news["host_translations"][locale] rescue ""
|
host = event_news["host_translations"][locale]
|
||||||
{
|
{
|
||||||
"tags" => tags,
|
"tags" => tags,
|
||||||
"event_news_files" => files,
|
"event_news_files" => files,
|
||||||
|
|
|
@ -75,8 +75,8 @@ module EventNewsHelper
|
||||||
"img_description" => desc
|
"img_description" => desc
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
def get_feed_annc(type,site_source,locale,categories=nil)
|
def get_feed_annc(type,site_source,locale,categories=nil,max_len=nil)
|
||||||
ma_key = 'event_news'
|
ma_key = 'event_news_mod'
|
||||||
if categories.nil?
|
if categories.nil?
|
||||||
if type == "index"
|
if type == "index"
|
||||||
categories = Array(OrbitHelper.page_categories)
|
categories = Array(OrbitHelper.page_categories)
|
||||||
|
@ -87,25 +87,13 @@ module EventNewsHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
categories = ["all"] if categories.length==0
|
categories = ["all"] if categories.length==0
|
||||||
if categories.include?("all")
|
data = SiteFeedAnnc.get_feed_cache(ma_key,categories,site_source,locale,type=='widget',max_len)
|
||||||
feeds = SiteFeedAnnc.where(:channel_key => ma_key)
|
|
||||||
else
|
|
||||||
feeds = SiteFeedAnnc.where(:channel_key => ma_key, :merge_with_category.in => categories)
|
|
||||||
end
|
|
||||||
if feeds.count > 0
|
|
||||||
temp_ids = []
|
|
||||||
data = feeds.collect do |feed|
|
|
||||||
feed.all_contents_for_feed(site_source,locale,type=='widget')
|
|
||||||
end.flatten.compact
|
|
||||||
else
|
|
||||||
data = []
|
|
||||||
end
|
|
||||||
data
|
data
|
||||||
end
|
end
|
||||||
def get_feed_event_news(type,site_source=nil,categories=nil,max_len=nil)
|
def get_feed_event_news(type,site_source=nil,categories=nil,max_len=nil)
|
||||||
locale = OrbitHelper.get_site_locale.to_s
|
locale = OrbitHelper.get_site_locale.to_s
|
||||||
if !(defined? SiteFeedAnnc).nil?
|
if !(defined? SiteFeedAnnc).nil?
|
||||||
fans = get_feed_annc(type,site_source,locale,categories)
|
fans = get_feed_annc(type,site_source,locale,categories,max_len)
|
||||||
else
|
else
|
||||||
feed_anns = OrbitHelper.get_feed_for_module(type)
|
feed_anns = OrbitHelper.get_feed_for_module(type)
|
||||||
fans = []
|
fans = []
|
||||||
|
@ -116,8 +104,8 @@ module EventNewsHelper
|
||||||
"status-class" => "status-source"
|
"status-class" => "status-source"
|
||||||
}
|
}
|
||||||
|
|
||||||
files = fa["event_news_files"].collect{|bf| { "file_url" => bf["url"], "file_title" => (fa["title_translations"][locale].blank? ? File.basename(fa["url"]) : fa["title_translations"][locale] rescue '') }} rescue []
|
files = fa["event_news_files"].collect{|bf| { "file_url" => bf["file_url"], "file_title" => fa["file_title_translations"][locale] }} rescue []
|
||||||
links = fa["event_news_links"].map{|link| { "link_url" => link["url"], "link_title" => (link["title_translations"][locale].blank? ? link["url"] : link["title_translations"][locale]) } } rescue []
|
links = fa["event_news_links"].map{|link| { "link_url" => link["link_url"], "link_title" => link["link_title_translations"][locale] } } rescue []
|
||||||
event_time_formated = a.event_time_formated
|
event_time_formated = a.event_time_formated
|
||||||
s = DateTime.parse(fa["event_date"]) rescue nil
|
s = DateTime.parse(fa["event_date"]) rescue nil
|
||||||
e = DateTime.parse(fa["event_end_date"]) rescue nil
|
e = DateTime.parse(fa["event_end_date"]) rescue nil
|
||||||
|
|
|
@ -10,14 +10,32 @@ class EventNews
|
||||||
include Slug
|
include Slug
|
||||||
require 'event_news_model/cache'
|
require 'event_news_model/cache'
|
||||||
include EventNewsModel::Cache
|
include EventNewsModel::Cache
|
||||||
attr_accessor :org_tag_ids
|
attr_accessor :org_tag_ids, :org_category_id
|
||||||
|
def tags=(ids)
|
||||||
|
self.org_tag_ids = self.tag_ids
|
||||||
|
super(ids)
|
||||||
|
end
|
||||||
|
def category=(cat)
|
||||||
|
self.org_category_id = self.category_id
|
||||||
|
super(cat)
|
||||||
|
end
|
||||||
|
def tag_ids=(ids)
|
||||||
|
self.org_tag_ids = self.tag_ids
|
||||||
|
super(ids)
|
||||||
|
end
|
||||||
|
def category_id=(cat_id)
|
||||||
|
self.org_category_id = self.category_id
|
||||||
|
super(cat_id)
|
||||||
|
end
|
||||||
def tags=(ids)
|
def tags=(ids)
|
||||||
self.org_tag_ids = self.tag_ids
|
self.org_tag_ids = self.tag_ids
|
||||||
super(ids)
|
super(ids)
|
||||||
end
|
end
|
||||||
def []=(index,value)
|
def []=(index,value)
|
||||||
if index.to_s=='tags'
|
if index.to_s=='tags' || index.to_s=='tag_ids'
|
||||||
self.org_tag_ids = self.tag_ids
|
self.org_tag_ids = self.tag_ids
|
||||||
|
elsif index.to_s=='category' || index.to_s=='category_id'
|
||||||
|
self.org_category_id = self.category_id
|
||||||
end
|
end
|
||||||
super(index,value)
|
super(index,value)
|
||||||
end
|
end
|
||||||
|
@ -379,4 +397,102 @@ class EventNews
|
||||||
:end => re.event_end_date}
|
:end => re.event_end_date}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
def self.smart_convertor(text,url)
|
||||||
|
html_string = text
|
||||||
|
html_string = html_string.gsub(/img.*?src="(?=\/)(.*?)|a.*?href="(?=\/)(.*?)/i){|w| w+url}
|
||||||
|
html_string = html_string.gsub(/img.*?src="\.\.(?=\/)(.*?)|a.*?href="\.\.(?=\/)(.*?)/i){|w| w[0...-2]+url}
|
||||||
|
return html_string
|
||||||
|
end
|
||||||
|
def get_data(more_url=nil, base_url=nil, cat_ids=nil, tag_ids=nil, locale=nil)
|
||||||
|
locale = I18n.locale if locale.nil?
|
||||||
|
base_url = Site.first.root_url if base_url.nil?
|
||||||
|
user = User.find(self.create_user_id) rescue nil
|
||||||
|
if !user.nil?
|
||||||
|
author = user.member_name || user.user_name
|
||||||
|
else
|
||||||
|
author = ""
|
||||||
|
end
|
||||||
|
a = {}
|
||||||
|
if more_url.nil?
|
||||||
|
if cat_ids.nil?
|
||||||
|
cat_ids = [self.category_id]
|
||||||
|
end
|
||||||
|
if tag_ids.nil?
|
||||||
|
tag_ids = self.tag_ids
|
||||||
|
end
|
||||||
|
basic_query = {:module => 'event_news_mod',:enabled_for=>locale}
|
||||||
|
if !cat_ids.blank?
|
||||||
|
query = basic_query.merge({:categories.all => cat_ids})
|
||||||
|
else
|
||||||
|
query = basic_query.clone
|
||||||
|
end
|
||||||
|
if !tag_ids.blank?
|
||||||
|
query = query.merge({:tags.all => tag_ids})
|
||||||
|
end
|
||||||
|
page = Page.where(query).first || Page.where(basic_query).first
|
||||||
|
more_url = page ? page.get_url : nil
|
||||||
|
end
|
||||||
|
if more_url
|
||||||
|
a['show_url'] = "#{more_url}/#{self.to_param}"
|
||||||
|
end
|
||||||
|
a["org_is_top"] = (self.is_top ? 1 : 0)
|
||||||
|
a["id"] = self.uid
|
||||||
|
a["title_translations"] = self.title_translations
|
||||||
|
a["subtitle_translations"] = self.subtitle_translations
|
||||||
|
a["speaker_translations"] = self.speaker_translations
|
||||||
|
a["host_translations"] = self.host_translations
|
||||||
|
a["place_translations"] = self.place_translations
|
||||||
|
a["notes_translations"] = self.notes_translations
|
||||||
|
a["text_translations"] = {}
|
||||||
|
text_translations = self.text_translations
|
||||||
|
self.text_translations.each do |l, text|
|
||||||
|
a["text_translations"][l] = self.class.smart_convertor(text,base_url)
|
||||||
|
end
|
||||||
|
a["event_date"] = self.event_date
|
||||||
|
a["event_end_date"] = self.event_end_date
|
||||||
|
a["postdate"] = self.postdate
|
||||||
|
a["img_description_translations"] = self.image_description_translations
|
||||||
|
a["image"] = {}
|
||||||
|
a["display_img"] = self.display_img
|
||||||
|
if self.image.present?
|
||||||
|
a["image"]["original"] = base_url + self.image.url
|
||||||
|
a["image"]["thumb"] = base_url + self.image.thumb.url
|
||||||
|
a["image"]["mobile"] = base_url + self.image.mobile.url
|
||||||
|
a["img_src"] = a["image"]["thumb"] || "/assets/event_news-default.jpg"
|
||||||
|
image = MiniMagick::Image.open(self.image.path) rescue nil
|
||||||
|
if image
|
||||||
|
a["image"]["width"] = image[:width]
|
||||||
|
a["image"]["height"] = image[:height]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
a["tags"] = []
|
||||||
|
a["category"] = {}
|
||||||
|
a["author"] = author
|
||||||
|
a["params"] = self.to_param
|
||||||
|
a["subtitle_ann"] = self.subtitle if self.display_subtitle?
|
||||||
|
a["event_news_links"] = []
|
||||||
|
a["event_news_files"] = []
|
||||||
|
a["event_carousel_images"] = self.event_carousel_images.map{|image| {"src"=> base_url + image.file.url,"description"=>image.description.to_s,"description_text"=>image.description_text }}
|
||||||
|
a["external_link"] = self["is_external_link"] ? self.external_link : nil
|
||||||
|
self.tags.each do |tag|
|
||||||
|
a["tags"] << {"name_translations" => tag.name_translations}
|
||||||
|
end
|
||||||
|
cat = self.category
|
||||||
|
a["category"] = cat ? {"title_translations" => cat.title_translations} : {"title_translations" => {}}
|
||||||
|
self.event_news_links.each do |bl|
|
||||||
|
b = {}
|
||||||
|
b["link_url"] = bl.url
|
||||||
|
b["link_title_translations"] = bl.title_translations.map{|k,v| [k, (v.blank? ? b["url"] : v)]}.to_h
|
||||||
|
a["event_news_links"] << b
|
||||||
|
end
|
||||||
|
self.event_news_files.each do |bf|
|
||||||
|
next if bf.file.blank?
|
||||||
|
b = {}
|
||||||
|
b["description_translations"] = bf.description_translations
|
||||||
|
b["file_url"] = base_url + bf.file.url
|
||||||
|
b["file_title_translations"] = bf.title_translations.map{|k,v| [k, (v.blank? ? File.basename(b["url"]) : v)]}.to_h
|
||||||
|
a["event_news_files"] << b
|
||||||
|
end
|
||||||
|
return a
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,7 @@ class EventNewsFeed
|
||||||
field :tag_ids, type: Array, default: []
|
field :tag_ids, type: Array, default: []
|
||||||
field :category_ids, type: Array, default: []
|
field :category_ids, type: Array, default: []
|
||||||
before_save do
|
before_save do
|
||||||
EventNewsCache.where(uid: self.uid).each do |cache|
|
EventNewsFeedCache.where(uid: self.uid).each do |cache|
|
||||||
cache.regenerate
|
cache.regenerate
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -16,13 +16,13 @@ class EventNewsFeed
|
||||||
if !event_news.nil?
|
if !event_news.nil?
|
||||||
self.where(:tag_ids.in => Array(event_news.tag_ids).collect{|v| v.to_s}).each do |event_news_feed|
|
self.where(:tag_ids.in => Array(event_news.tag_ids).collect{|v| v.to_s}).each do |event_news_feed|
|
||||||
uid = event_news_feed.uid
|
uid = event_news_feed.uid
|
||||||
EventNewsCache.where(:uid => uid).each do |cache|
|
EventNewsFeedCache.where(:uid => uid).each do |cache|
|
||||||
cache.regenerate
|
cache.regenerate
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elsif !event_news_feed.nil?
|
elsif !event_news_feed.nil?
|
||||||
uid = event_news_feed.uid
|
uid = event_news_feed.uid
|
||||||
EventNewsCache.where(:uid => uid).each do |cache|
|
EventNewsFeedCache.where(:uid => uid).each do |cache|
|
||||||
cache.regenerate
|
cache.regenerate
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -82,13 +82,24 @@ class EventNewsFeed
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
all_anns = []
|
all_anns = []
|
||||||
tag_names = []
|
|
||||||
category_titles = []
|
|
||||||
tag_ids = []
|
|
||||||
category_ids = []
|
|
||||||
|
|
||||||
first_postdate = anns_before_filter.open_in_future.limit(1).pluck(:postdate)[0]
|
first_postdate = anns_before_filter.open_in_future.limit(1).pluck(:postdate)[0]
|
||||||
first_deadline = nil
|
first_deadline = nil
|
||||||
|
cat_ids = announcements.collect{|a| a.category_id.blank? ? nil : a.category_id.to_s}.compact.uniq
|
||||||
|
tag_ids = announcements.collect{|a| a.tag_ids.collect{|v| v.blank? ? nil : v.to_s}}.flatten.compact.uniq
|
||||||
|
tag_names = tag_ids.map{|tag_id| Tag.find(tag_id).name_translations rescue nil}.compact
|
||||||
|
category_titles = cat_ids.map{|cat_id| Category.find(cat_id).title_translations rescue nil}.compact
|
||||||
|
basic_query = {:module => 'event_news_mod',:enabled_for=>I18n.locale}
|
||||||
|
if !cat_ids.blank?
|
||||||
|
query = basic_query.merge({:categories.all => cat_ids})
|
||||||
|
else
|
||||||
|
query = basic_query.clone
|
||||||
|
end
|
||||||
|
if !tag_ids.blank?
|
||||||
|
query = query.merge({:tags.all => tag_ids})
|
||||||
|
end
|
||||||
|
page = Page.where(query).first || Page.where(basic_query).first
|
||||||
|
more_url = page ? page.get_url : nil
|
||||||
|
|
||||||
announcements.each do |anns|
|
announcements.each do |anns|
|
||||||
deadline = anns.deadline
|
deadline = anns.deadline
|
||||||
|
@ -97,75 +108,15 @@ class EventNewsFeed
|
||||||
first_deadline = deadline
|
first_deadline = deadline
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
user = User.find(anns.create_user_id) rescue nil
|
a = anns.get_data(more_url, base_url, cat_ids, tag_ids)
|
||||||
if !user.nil?
|
|
||||||
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
|
|
||||||
else
|
|
||||||
author = ""
|
|
||||||
end
|
|
||||||
a = {}
|
|
||||||
a["id"] = anns.uid
|
|
||||||
a["title_translations"] = anns.title_translations
|
|
||||||
a["subtitle_translations"] = anns.subtitle_translations
|
|
||||||
a["text_translations"] = {}
|
|
||||||
a["text_translations"]["en"] = self.class.smart_convertor(anns.text_translations["en"],base_url) if !anns.text_translations["en"].blank?
|
|
||||||
a["text_translations"]["zh_tw"] = self.class.smart_convertor(anns.text_translations["zh_tw"],base_url) if !anns.text_translations["zh_tw"].blank?
|
|
||||||
a["postdate"] = anns.postdate
|
|
||||||
a["image_description_translations"] = anns.image_description_translations
|
|
||||||
a["image"] = {}
|
|
||||||
a["display_img"] = anns.display_img
|
|
||||||
a["image"]["original"] = ("#{base_url}" + anns.image.url rescue "")
|
|
||||||
a["image"]["thumb"] = ("#{base_url}" + anns.image.thumb.url rescue "")
|
|
||||||
a["image"]["mobile"] = ("#{base_url}" + anns.image.mobile.url rescue "")
|
|
||||||
a["tags"] = []
|
|
||||||
a["category"] = {}
|
|
||||||
a["author"] = author
|
|
||||||
a["params"] = anns.to_param
|
|
||||||
a["subtitle_ann"] = anns.subtitle if anns.display_subtitle?
|
|
||||||
a["event_news_links"] = []
|
|
||||||
a["event_news_files"] = []
|
|
||||||
a["event_carousel_images"] = anns.event_carousel_images.map{|image| {"src"=>"#{base_url}" + image.file.url,"description"=>image.description.to_s,"description_text"=>image.description_text }}
|
|
||||||
a["external_link"] = anns["is_external_link"] ? anns.external_link : nil
|
|
||||||
anns.tags.each do |tag|
|
|
||||||
if !tag_ids.include?(tag.id.to_s)
|
|
||||||
tag_ids << tag.id.to_s
|
|
||||||
tag_names << {"name_translations" => tag.name_translations}
|
|
||||||
end
|
|
||||||
a["tags"] << {"name_translations" => tag.name_translations}
|
|
||||||
end
|
|
||||||
cat = anns.category
|
|
||||||
if (!category_ids.include?(cat.id.to_s) rescue false)
|
|
||||||
category_ids << cat.id.to_s
|
|
||||||
category_titles << {"title_translations" => cat.title_translations}
|
|
||||||
end
|
|
||||||
a["category"] = {"title_translations" => (cat.title_translations rescue {})}
|
|
||||||
anns.event_news_links.each do |bl|
|
|
||||||
b = {}
|
|
||||||
b["url"] = bl.url
|
|
||||||
b["title_translations"] = bl.title_translations
|
|
||||||
a["event_news_links"] << b
|
|
||||||
end
|
|
||||||
anns.event_news_files.each do |bf|
|
|
||||||
b = {}
|
|
||||||
b["description_translations"] = bf.description_translations
|
|
||||||
b["title_translations"] = bf.title_translations
|
|
||||||
b["url"] = ("#{base_url}" + bf.file.url rescue "")
|
|
||||||
a["event_news_files"] << b
|
|
||||||
end
|
|
||||||
all_anns << a
|
all_anns << a
|
||||||
end
|
end
|
||||||
invalid_date = [first_postdate,first_deadline].compact.sort[0]
|
invalid_date = [first_postdate,first_deadline].compact.sort[0]
|
||||||
anns = {
|
anns = {
|
||||||
"announcements" => all_anns,
|
"event_news_mods" => all_anns,
|
||||||
"tags" => tag_names,
|
"tags" => tag_names,
|
||||||
"categories" => category_titles
|
"categories" => category_titles
|
||||||
}.to_json
|
}.to_json
|
||||||
feed_cache = EventNewsFeedCache.create(uid: uid,content: anns,start: startdt,end: enddt,date: dt,invalid_date: invalid_date)
|
feed_cache = EventNewsFeedCache.create(uid: uid,content: anns,start: startdt,end: enddt,date: dt,invalid_date: invalid_date)
|
||||||
end
|
end
|
||||||
def self.smart_convertor(text,url)
|
|
||||||
html_string = text
|
|
||||||
html_string = html_string.gsub(/img.*?src="(?=\/)(.*?)|a.*?href="(?=\/)(.*?)/i){|w| w+url}
|
|
||||||
html_string = html_string.gsub(/img.*?src="\.\.(?=\/)(.*?)|a.*?href="\.\.(?=\/)(.*?)/i){|w| w[0...-2]+url}
|
|
||||||
return html_string
|
|
||||||
end
|
|
||||||
end
|
end
|
|
@ -1,29 +1,34 @@
|
||||||
class EventNewsFeedCache
|
class EventNewsFeedCache
|
||||||
include Mongoid::Document
|
include Mongoid::Document
|
||||||
include Mongoid::Timestamps
|
include Mongoid::Timestamps
|
||||||
|
|
||||||
field :content, type: String, default: ''
|
field :content, type: String, default: ''
|
||||||
field :uid
|
field :uid
|
||||||
field :start
|
field :start
|
||||||
field :end
|
field :end
|
||||||
field :date
|
field :date
|
||||||
field :invalid_date, type: DateTime
|
field :invalid_date, type: DateTime
|
||||||
def self.regenerate_all
|
def self.regenerate_all
|
||||||
caches = self.all.to_a
|
caches = self.all.to_a
|
||||||
caches.each do |cache|
|
time_now = Time.now
|
||||||
cache.regenerate
|
caches.each do |cache|
|
||||||
end
|
if cache.invalid_date && cache.invalid_date <= time_now
|
||||||
uids = EventNewsFeed.all.pluck(:uid) - caches.collect(&:uid)
|
cache.destroy
|
||||||
EventNewsFeed.where(:uid.in=> uids).each do |feed|
|
else
|
||||||
feed.generate_one_cache()
|
cache.regenerate
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
def regenerate
|
uids = EventNewsFeed.all.pluck(:uid) - caches.collect(&:uid)
|
||||||
st = self.start
|
EventNewsFeed.where(:uid.in=> uids).each do |feed|
|
||||||
et = self.end
|
feed.generate_one_cache()
|
||||||
dt = self.date
|
end
|
||||||
uid = self.uid
|
end
|
||||||
EventNewsFeed.where(uid: uid).first.generate_one_cache(startdt: st,enddt: et,dt: dt) rescue nil
|
def regenerate
|
||||||
self.destroy
|
st = self.start
|
||||||
end
|
et = self.end
|
||||||
|
dt = self.date
|
||||||
|
uid = self.uid
|
||||||
|
EventNewsFeed.where(uid: uid).each{|v| v.generate_one_cache(startdt: st,enddt: et,dt: dt)} rescue nil
|
||||||
|
self.destroy
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -67,6 +67,21 @@ class EventNewsSetting
|
||||||
end
|
end
|
||||||
datetime_format
|
datetime_format
|
||||||
end
|
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
|
def event_date_format
|
||||||
@event_date_format ||= self.event_date_default_format
|
@event_date_format ||= self.event_date_default_format
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,16 +3,27 @@ module EventNewsModel
|
||||||
require 'active_support/concern'
|
require 'active_support/concern'
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
included do
|
included do
|
||||||
before_save :do_before_save
|
after_save :cache_tag_ids, :do_before_save
|
||||||
|
after_destroy :do_before_save
|
||||||
|
before_destroy :cache_tag_ids
|
||||||
|
end
|
||||||
|
def cache_tag_ids
|
||||||
|
if self.class == ::EventNews
|
||||||
|
@tag_ids = self.tag_ids
|
||||||
|
@org_tag_ids = self.org_tag_ids
|
||||||
|
@category_id = self.category_id
|
||||||
|
@org_category_id = self.org_category_id
|
||||||
|
end
|
||||||
end
|
end
|
||||||
def do_before_save
|
def do_before_save
|
||||||
if self.class == SubPart
|
if self.class == SubPart
|
||||||
::EventNewsCache.where(parent_id:self.id).destroy
|
::EventNewsCache.where(parent_id:self.id).destroy
|
||||||
elsif self.class == ::EventNews || (self.class == Page && self.module == "event_news")
|
elsif self.class == ::EventNews || (self.class == Page && self.module == "event_news_mod")
|
||||||
if self.class == ::EventNews
|
if self.class == ::EventNews
|
||||||
tmp_tag_ids = (Array(self.tag_ids) + Array(self.org_tag_ids)).uniq
|
tmp_tag_ids = (Array(@tag_ids) + Array(@org_tag_ids)).uniq
|
||||||
|
tmp_cat_ids = (Array(@category_id) + Array(@org_category_id)).uniq
|
||||||
Thread.new do
|
Thread.new do
|
||||||
::EventNewsCache.where(:uid.in => ::EventNewsFeed.where(:tag_ids.in => tmp_tag_ids.collect{|v| v.to_s}).pluck(:uid)).each do |cache|
|
::EventNewsFeedCache.where(:uid.in => ::EventNewsFeed.any_of([{:tag_ids.in => tmp_tag_ids.collect{|v| v.to_s}},{:category_ids.in => tmp_cat_ids.collect{|v| v.to_s}}]).pluck(:uid)).to_a.each do |cache|
|
||||||
cache.regenerate
|
cache.regenerate
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue