add new feature support for feed

This commit is contained in:
chiu 2020-04-05 22:38:26 +08:00
parent 7df1bb7bf7
commit b2a04aebe5
4 changed files with 70 additions and 63 deletions

View File

@ -1,3 +1,4 @@
# encoding: UTF-8
$:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version:
@ -31,7 +32,7 @@ all_template.each do |folder|
filename = folder+'assets/stylesheets/template/base/_variables.scss'
texts = File.open(filename,'r:UTF-8') do |f|
f.read
end
end.force_encoding('UTF-8')
s1 = texts.scan(/{|}/)
if s1.count % 2 != 0
i = texts.rindex(s1[-1])
@ -50,7 +51,7 @@ all_template.each do |folder|
File.open(filename,'w') do |f|
f.write texts
end
tp_text = File.read(folder+'assets/stylesheets/template/template.scss') rescue ''
tp_text = File.read(folder+'assets/stylesheets/template/template.scss').force_encoding('UTF-8') rescue ''
tp_last_text = tp_text
tp_text.scan(/@import.*http.*;/).each do |pat|
if pat.scan(/@import\W+url/).count==0

View File

@ -147,9 +147,11 @@ class AnnouncementsController < ApplicationController
anns = top_anns
else
feeds_anns = get_feed_announcements("widget")
rest_all_anns = feeds_anns + sorted_anns.select{|v| !v.is_top}.take(rest_count).map{|v| data_to_human_type(v)}
top_anns = top_anns + feeds_anns.select{|v| v['is_top']}
top_anns = top_anns.sort{|v1,v2| v2["postdate"]<=>v1["postdate"]}
rest_all_anns = feeds_anns.select{|v| v['is_top'] != true} + sorted_anns.select{|v| !v.is_top}.take(rest_count).map{|v| data_to_human_type(v)}
rest_anns = rest_all_anns.sort{|v1,v2| v2["postdate"]<=>v1["postdate"]}.take(rest_count)
anns = top_anns + rest_anns
anns = (top_anns + rest_anns).take(widget_data_count)
end
end
mp = (anns[0]["img_src"] rescue "")

View File

@ -60,42 +60,69 @@ module AnnouncementsHelper
"img_description" => desc
}
end
def get_feed_annc(type,site_source,locale)
ma_key = 'announcement'
if type == "index"
categories = Array(OrbitHelper.widget_categories)
elsif type == "widget"
categories = Array(OrbitHelper.widget_categories)
else
categories = []
end
if categories.include?("all")
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)
end.flatten.compact
else
data = []
end
data
end
def get_feed_announcements(type,site_source=nil)
feed_anns = OrbitHelper.get_feed_for_module(type)
fans = []
locale = OrbitHelper.get_site_locale.to_s
feed_anns.each do |fa|
next if !site_source.nil? && site_source != fa["source-site-title"]
status = {
"status" => "<a href='#{fa["source-site"]}' target='_blank' class='feed-source'>#{fa["source-site-title"]}</a>",
"status-class" => "status-source"
}
if !(defined? SiteFeedAnnc).nil?
fans = get_feed_annc(type,site_source,locale)
else
feed_anns = OrbitHelper.get_feed_for_module(type)
fans = []
feed_anns.each do |fa|
next if !site_source.nil? && site_source != fa["source-site-title"]
status = {
"status" => "<a href='#{fa["source-site"]}' target='_blank' class='feed-source'>#{fa["source-site-title"]}</a>",
"status-class" => "status-source"
}
files = fa["bulletin_files"].collect{|bf| { "file_url" => bf["url"], "file_title" => (fa["title_translations"][locale].blank? ? File.basename(fa["url"]) : fa["title_translations"][locale] rescue '') }} rescue []
links = fa["bulletin_links"].map{|link| { "link_url" => link["url"], "link_title" => (link["title_translations"][locale].blank? ? link["url"] : link["title_translations"][locale]) } } rescue []
files = fa["bulletin_files"].collect{|bf| { "file_url" => bf["url"], "file_title" => (fa["title_translations"][locale].blank? ? File.basename(fa["url"]) : fa["title_translations"][locale] rescue '') }} rescue []
links = fa["bulletin_links"].map{|link| { "link_url" => link["url"], "link_title" => (link["title_translations"][locale].blank? ? link["url"] : link["title_translations"][locale]) } } rescue []
x = {
"bulletin_links" => links,
"bulletin_files" => files,
"title" => fa["title_translations"][locale],
"subtitle" => fa["subtitle_translations"][locale],
"statuses" => [status],
"category" => fa["category"],
"postdate" => fa["postdate"],
"author" => fa["author"],
"is_top" => 0,
"source-site" => "<a href='#{fa["source-site"]}' target='_blank' class='feed-source'>#{fa["source-site-title"]}</a>",
"source-site-title" => fa["source-site-title"],
"source-site-link" => fa["source-site"],
"link_to_show" => OrbitHelper.url_to_show(fa["params"]),
"target" => "_self",
"img_src" => fa["image"]["thumb"] || "/assets/announcement-default.jpg",
"img_description" => fa["image_description_translations"][locale],
"more" => t(:more_plus),
"view_count" => ""
}
if (!x["title"].empty? rescue false)
fans << x
x = {
"bulletin_links" => links,
"bulletin_files" => files,
"title" => fa["title_translations"][locale],
"subtitle" => fa["subtitle_translations"][locale],
"statuses" => [status],
"category" => fa["category"],
"postdate" => fa["postdate"],
"author" => fa["author"],
"source-site" => "<a href='#{fa["source-site"]}' target='_blank' class='feed-source'>#{fa["source-site-title"]}</a>",
"source-site-title" => fa["source-site-title"],
"source-site-link" => fa["source-site"],
"link_to_show" => OrbitHelper.url_to_show(fa["params"]),
"target" => "_self",
"img_src" => fa["image"]["thumb"] || "/assets/announcement-default.jpg",
"img_description" => fa["image_description_translations"][locale],
"more" => t(:more_plus),
"view_count" => ""
}
if (!x["title"].empty? rescue false)
fans << x
end
end
end
fans
@ -137,12 +164,12 @@ module AnnouncementsHelper
end
if !feeds_anns.blank?
if announcements.count != 0
top_anns = announcements.select{|v| v.is_top}
rest_all_anns = feeds_anns + announcements.select{|v| !v.is_top}
top_anns = announcements.select{|v| v.is_top} + feeds_anns.select{|v| v['is_top']}
rest_all_anns = feeds_anns.select{|v| v['is_top'] != true} + announcements.select{|v| !v.is_top}
rest_anns = rest_all_anns.sort{|v1,v2| v2["postdate"]<=>v1["postdate"]}
all_sorted = top_anns + rest_anns
all_sorted = top_anns.sort{|v1,v2| v2["postdate"]<=>v1["postdate"]} + rest_anns
else
all_sorted = feeds_anns.sort{|v1,v2| v2["postdate"]<=>v1["postdate"]}
all_sorted = feeds_anns.sort{|v1,v2| [v2['is_top'],v2["postdate"]]<=>[v1['is_top'],v1["postdate"]]}
end
all_filter = filter_by_keywords(all_sorted,params[:keywords])
else

View File

@ -71,29 +71,6 @@ class Site
mount_uploader :site_logo_1, ImageUploader
mount_uploader :favicon, ImageUploader
mount_uploader :mobile_icon, ImageUploader
Impression.class_eval{
def self.create_date_for_group(date)
{'_id'=>{'year'=>date.year,'month'=>date.month,'day'=>date.day},'count'=>0}
end
def self.group_by(field,day_limit,start_day=Date.today,format = 'day')
limit_ele = self.desc(:id).where({ created_at: { "$lt" => start_day-(day_limit-2).days }}).first || self.first
key_op = [['year','$year'],['month', '$month'], ['day', '$dayOfMonth']]
key_op = key_op.take(1 + key_op.find_index { |key, op| format == key })
project_date_fields = Hash[*key_op.collect { |key, op| [key, {op => "$#{field}"}] }.flatten]
group_id_fields = Hash[*key_op.collect { |key, op| [key, "$#{key}"] }.flatten]
pipeline = [
{"$match"=> {"_id" => {"$gte" => (limit_ele['_id'] rescue '')}}},
{"$project" => {field => 1}.merge(project_date_fields)},
{"$group" => {"_id" => group_id_fields,"count" => {"$sum" => 1}}},
{"$sort" => {"_id"=>-1}}
]
tmp = collection.aggregate(pipeline)
if tmp.count < day_limit
tmp.concat(Array.new(day_limit-tmp.count).map.with_index.map{|v,i| create_date_for_group(start_day+i.days)})
end
tmp
end
}
after_initialize do
if !self.new_record?
if self.is_hidden_orbit_bar.nil?