188 lines
6.2 KiB
Ruby
188 lines
6.2 KiB
Ruby
require "rss"
|
|
class EventNewsFeedsController < ApplicationController
|
|
include Admin::EventNewsHelper
|
|
def feed
|
|
uid = params[:uid].to_s
|
|
anns = get_event_news(uid)
|
|
render :json => anns.to_json
|
|
end
|
|
|
|
def rssfeed
|
|
uid = params[:uid].to_s
|
|
@bf = EventNewsFeed.find_by(:uid => uid) rescue nil
|
|
if !@bf.nil?
|
|
tags = @bf.tag_ids
|
|
if !tags.empty?
|
|
@event_news = EventNews.can_display_and_sorted.is_approved.filter_by_tags(tags)
|
|
end
|
|
categories = @bf.category_ids
|
|
if !categories.empty?
|
|
@event_news = @event_news.filter_by_categories(categories)
|
|
end
|
|
else
|
|
@event_news = []
|
|
end
|
|
respond_to do |format|
|
|
format.html {redirect_to "/xhr/event_news/rssfeed/#{@bf.uid}.rss"}
|
|
format.rss
|
|
end
|
|
end
|
|
|
|
def feeds
|
|
feeds = []
|
|
EventNewsFeed.all.each do |bf|
|
|
feed = {}
|
|
feed["title_translations"] = bf.title_translations
|
|
feed["uid"] = bf.uid
|
|
feed["url"] = "#{request.base_url}/xhr/event_news/feed/#{bf.uid}"
|
|
feed["xml_url"] = "#{request.base_url}/xhr/event_news/rssfeed/#{bf.uid}.rss"
|
|
feed["tags"] = []
|
|
bf.tag_ids.each do |t|
|
|
tag = Tag.find(t)
|
|
d = {}
|
|
d["name_translations"] = tag.name_translations
|
|
feed["tags"] << d
|
|
end
|
|
feeds << feed
|
|
end
|
|
render :json => {"feeds" => feeds}.to_json
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|