From 140a8f0332b1adc526283b08ffda8ba3ad8c7bdf Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 11 Apr 2016 16:32:15 +0800 Subject: [PATCH] now feeds are sorted. major change in algo --- app/controllers/announcements_controller.rb | 179 ++++++++++++-------- 1 file changed, 110 insertions(+), 69 deletions(-) diff --git a/app/controllers/announcements_controller.rb b/app/controllers/announcements_controller.rb index b63fb61..2201b24 100644 --- a/app/controllers/announcements_controller.rb +++ b/app/controllers/announcements_controller.rb @@ -4,50 +4,74 @@ class AnnouncementsController < ApplicationController Bulletin.remove_expired_status params = OrbitHelper.params feeds_anns = [] + top_anns = [] if !params['tags'].blank? - announcements = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil]).and(:title.ne => nil).can_display.is_approved.filter_by_tags(params['tags']).page(OrbitHelper.page_number).per(OrbitHelper.page_data_count) + announcements = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil]).and(:title.ne => nil).can_display.is_approved.filter_by_tags(params['tags']).page(OrbitHelper.page_number).per(OrbitHelper.page_data_count).to_a else - announcements = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil]).and(:title.ne => nil).can_display.is_approved.filter_by_categories.filter_by_tags + announcements = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil]).and(:title.ne => nil, :is_top.ne => true).can_display.is_approved.filter_by_categories([],false).filter_by_tags.to_a + feeds_anns = get_feed_announcements("index") end - anns = announcements.collect do |a| - statuses = a.statuses_with_classname.collect do |status| - { - "status" => status["name"], - "status-class" => "status-#{status['classname']}" + if OrbitHelper.page_number == 1 or OrbitHelper.page_number.nil? + top_anns = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil], :is_top => true).and(:title.ne => nil).can_display.filter_by_categories([],false).to_a + end + if !feeds_anns.blank? + announcements = announcements.concat(feeds_anns) + sorted = announcements.sort{ |k,v| v["postdate"] <=> k["postdate"] } + sorted = top_anns + sorted + sorted = Kaminari.paginate_array(sorted).page(OrbitHelper.page_number).per(OrbitHelper.page_data_count) rescue [] + else + announcements = top_anns + announcements + sorted = Kaminari.paginate_array(announcements).page(OrbitHelper.page_number).per(OrbitHelper.page_data_count) rescue [] + end + total_pages = sorted.total_pages + + anns = [] + sorted.each do |a| + if !a["source-site"].present? + statuses = a.statuses_with_classname.collect do |status| + { + "status" => status["name"], + "status-class" => "status-#{status['classname']}" + } + end + files = a.bulletin_files.map{|file| { "file_url" => file.file.url, "file_title" => (file.title.blank? ? File.basename(file.file.path) : file.title rescue '') } } rescue [] + links = a.bulletin_links.map{|link| { "link_url" => link.url, "link_title" => (link.title.blank? ? link.url : link.title) } } rescue [] + author = User.find(a.create_user_id).member_profile.name rescue "" + desc = a.image_description + desc = (desc.nil? || desc == "" ? "announcement image" : desc) + anns << { + "bulletin_links" => links, + "bulletin_files" => files, + "title" => a.title, + "source-site" => "", + "source-site-title" => "", + "source-site-link" => "", + "subtitle" => a.subtitle, + "statuses" => statuses, + "category" => a.category.title, + "postdate" => a.postdate, + "author" => author, + "is_top" => (a.is_top? ? 1 : 0), + "link_to_show" => OrbitHelper.url_to_show(a.to_param), + "img_src" => a.image.thumb.url || "/assets/announcement-default.jpg", + "img_description" => desc, + "more" => t(:more_plus), + "view_count" => a.view_count } + else + anns << a end - files = a.bulletin_files.map{|file| { "file_url" => file.file.url, "file_title" => (file.title.blank? ? File.basename(file.file.path) : file.title rescue '') } } rescue [] - links = a.bulletin_links.map{|link| { "link_url" => link.url, "link_title" => (link.title.blank? ? link.url : link.title) } } rescue [] - author = User.find(a.create_user_id).member_profile.name rescue "" - desc = a.image_description - desc = (desc.nil? || desc == "" ? "announcement image" : desc) - { - "bulletin_links" => links, - "bulletin_files" => files, - "title" => a.title, - "source-site" => "", - "source-site-title" => "", - "source-site-link" => "", - "subtitle" => a.subtitle, - "statuses" => statuses, - "category" => a.category.title, - "postdate" => a.postdate, - "author" => author, - "link_to_show" => OrbitHelper.url_to_show(a.to_param), - "img_src" => a.image.thumb.url || "/assets/announcement-default.jpg", - "img_description" => desc, - "more" => t(:more_plus), - "view_count" => a.view_count - } end #If no data , hide title&table if announcements.count == 0 display = "hide" end - anns = anns.concat(feeds_anns) - # sorted = anns.sort{ |k,v| v["postdate"] <=> k["postdate"] } + # anns = anns.concat(feeds_anns) + # total_pages = announcements.total_pages + + { "announcements" => anns, "extras" => { @@ -63,7 +87,7 @@ class AnnouncementsController < ApplicationController "view-count-head" => t('announcement.table.view_count'), "display" => display }, - "total_pages" => announcements.total_pages + "total_pages" => total_pages } end @@ -86,6 +110,7 @@ class AnnouncementsController < ApplicationController "category" => fa["category"], "postdate" => fa["postdate"], "author" => fa["author"], + "is_top" => 0, "source-site" => "#{fa["source-site-title"]}", "source-site-title" => fa["source-site-title"], "source-site-link" => fa["source-site"], @@ -95,7 +120,9 @@ class AnnouncementsController < ApplicationController "more" => t(:more_plus), "view_count" => "" } - fans << x + if !x["title"].empty? + fans << x + end end fans end @@ -106,53 +133,67 @@ class AnnouncementsController < ApplicationController categories = OrbitHelper.widget_categories || [] announcements = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil],:uid.ne => uid, :category_id.in => categories).and(:title.ne => nil).can_display.is_approved.filter_by_tags(tags).sample(OrbitHelper.widget_data_count) - pack_data(announcements) + pack_data(announcements, []) end def widget Bulletin.remove_expired_status uid = OrbitHelper.params[:uid] rescue "" tags = OrbitHelper.widget_tags - announcements = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil],:uid.ne => uid).and(:title.ne => nil).can_display.is_approved.filter_by_widget_categories.filter_by_tags(tags) - - pack_data(announcements) + announcements = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil],:uid.ne => uid).and(:title.ne => nil, :is_top.ne => true).can_display.is_approved.filter_by_widget_categories([],false).filter_by_tags(tags).to_a + top_anns = Bulletin.where(:title.ne => "",:is_preview.in=>[false,nil], :is_top => true, :uid.ne => uid).and(:title.ne => nil).can_display.filter_by_widget_categories([],false).to_a + pack_data(announcements, top_anns) end - def pack_data(announcements) + def pack_data(announcements, top_anns = []) page = Page.where(:module => "announcement").first rescue nil - anns = announcements.collect do |a| - statuses = a.statuses_with_classname.collect do |status| - { - "status" => status["name"], - "status-class" => "status-#{status['classname']}" - } - end - files = a.bulletin_files.map{|file| { "file_url" => file.file.url, "file_title" => (file.title.blank? ? File.basename(file.file.path) : file.title rescue '') } } rescue [] - links = a.bulletin_links.map{|link| { "link_url" => link.url, "link_title" => (link.title.blank? ? link.url : link.title) } } rescue [] - author = User.find(a.create_user_id).member_profile.name rescue "" - desc = a.image_description - desc = (desc.nil? || desc == "" ? "announcement image" : desc) - { - "bulletin_links" => links, - "bulletin_files" => files, - "title" => a.title, - "source-site" => "", - "source-site-title" => "", - "source-site-link" => "", - "subtitle" => a.subtitle, - "statuses" => statuses, - "category" => a.category.title, - "postdate" => a.postdate, - "author" => author, - "link_to_show" => OrbitHelper.widget_item_url(a.to_param), - "img_src" => a.image.thumb.url || "/assets/announcement-default.jpg", - "img_description" => desc - } + feeds_anns = get_feed_announcements("widget") + announcements = announcements + feeds_anns + if !feeds_anns.blank? + sorted = announcements.sort{ |k,v| v["postdate"] <=> k["postdate"] } + sorted = top_anns + sorted + sorted = Kaminari.paginate_array(sorted).page(1).per(OrbitHelper.widget_data_count) rescue [] + else + announcements = top_anns + announcements + sorted = Kaminari.paginate_array(announcements).page(1).per(OrbitHelper.widget_data_count) rescue [] end + anns = [] + sorted.each do |a| + if !a["source-site"].present? + statuses = a.statuses_with_classname.collect do |status| + { + "status" => status["name"], + "status-class" => "status-#{status['classname']}" + } + end + files = a.bulletin_files.map{|file| { "file_url" => file.file.url, "file_title" => (file.title.blank? ? File.basename(file.file.path) : file.title rescue '') } } rescue [] + links = a.bulletin_links.map{|link| { "link_url" => link.url, "link_title" => (link.title.blank? ? link.url : link.title) } } rescue [] + author = User.find(a.create_user_id).member_profile.name rescue "" + desc = a.image_description + desc = (desc.nil? || desc == "" ? "announcement image" : desc) + anns << { + "bulletin_links" => links, + "bulletin_files" => files, + "title" => a.title, + "source-site" => "", + "source-site-title" => "", + "source-site-link" => "", + "subtitle" => a.subtitle, + "statuses" => statuses, + "category" => a.category.title, + "postdate" => a.postdate, + "author" => author, + "link_to_show" => OrbitHelper.widget_item_url(a.to_param), + "img_src" => a.image.thumb.url || "/assets/announcement-default.jpg", + "img_description" => desc + } + else + anns << a + end + end mp = (anns[0]["img_src"] rescue "") mpd = (anns[0]["img_description"] rescue "") - anns = anns.concat(get_feed_announcements("widget")) - # sorted = anns.sort{ |k,v| v["postdate"] <=> k["postdate"] } + { "announcements" => anns, "extras" => {