From c6cce8eb3e59f45d1943d5cd6c74e297f792d84c Mon Sep 17 00:00:00 2001 From: nccu Date: Fri, 6 Mar 2015 14:45:17 +0800 Subject: [PATCH] fix json & search word --- .../admin/newsbulletins_controller.rb | 119 ++++++++++++++++++ app/controllers/news_controller.rb | 8 +- 2 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 app/controllers/admin/newsbulletins_controller.rb diff --git a/app/controllers/admin/newsbulletins_controller.rb b/app/controllers/admin/newsbulletins_controller.rb new file mode 100644 index 0000000..c417448 --- /dev/null +++ b/app/controllers/admin/newsbulletins_controller.rb @@ -0,0 +1,119 @@ +# encoding: utf-8 +class Admin::NewsbulletinsController < ApplicationController + before_filter :set_I18n + + def get_bulletins + page = Page.where(:module => "news").first rescue nil + + # 頁次 + page_num = params[:page_num].blank? ? 0 : params[:page_num].to_i + # 每頁顯示的則數 + per_page = params[:per_page].blank? ? 10 : params[:per_page].to_i + per_page = per_page > 0 ? per_page : 10 + + if !params[:keyword].blank? + keyword = Regexp.new(".*"+params[:keyword]+".*") + bulletins = NewsBulletin.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword}) + else + bulletins = NewsBulletin.all + end + + bulletins = bulletins.where(:is_hot => params[:is_hot]) if !params[:is_hot].blank? + bulletins = bulletins.where(:category_id.in => params[:categories]) if !params[:categories].blank? + bulletins = bulletins.where(:tagged_ids.in => params[:tags]) if !params[:tags].blank? + bulletins = bulletins.where(:is_preview.in=>[false,nil]) + + bulletins = bulletins.desc( :is_top, :postdate).page(page_num).per(per_page) + + bulletins = bulletins.collect do |b| + image = request.protocol + request.host_with_port + b.image.url rescue nil + + links = b.bulletin_links.collect do |bl| + { + "title" => bl.title_translations, + "url" => bl.url + } + end rescue nil + + files = b.bulletin_files.collect do |bf| + file = request.protocol + request.host_with_port + bf.file.url rescue nil + { + "title" => bf.title_translations, + "description" => bf.description_translations, + "file" => file + } + end rescue nil + + ts = b.tags.collect do |t| + { + "name" => t.name_translations + } + end rescue nil + + text = {"en" => "", "zh_tw" => ""} + text["en"] = (b.text_translations["en"].nil? ? "" :smart_convertor(b.text_translations["en"])) + text["zh_tw"] = (b.text_translations["zh_tw"].nil? ? "" : smart_convertor(b.text_translations["zh_tw"])) + + author = User.find(b.create_user_id).member_profile.name rescue "" + + { + "id" => b.id.to_s, + "title" => b.title_translations, + "subtitle" => b.subtitle_translations, + "text" => text, + "postdate" => b.postdate, + "deadline" => b.deadline, + "category" => b.category.title_translations, + "tags" => ts, + "image" => image, + "links" => links, + "files" => files, + "author" => author, + "url" => "/#{I18n.locale.to_s + page.url}/#{b.to_param}" + } + + end + + # 計算總筆數 Start + if !params[:keyword].blank? + keyword = Regexp.new(".*"+params[:keyword]+".*") + bulletin_count = NewsBulletin.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword}) + else + bulletin_count = NewsBulletin.all + end + bulletin_count = bulletin_count.where(:is_preview.in=>[false,nil]) + total_pages = bulletin_count.count + # End + + render :json => { + "bulletins" => bulletins, + "bulletins_count" => bulletins.count, + "page_num" => page_num, + "total_pages" => total_pages, + }.to_json + end + + def smart_convertor(text) + html_string = text + links = html_string.scan(/img.*?src="(.*?)"/i) + 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.sub(l,new_link) if !new_link.nil? + end + return html_string + end + + protected + + def set_I18n + I18n.locale = params[:lang] if params[:lang].present? + end + +end diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb index 73d2489..7478114 100644 --- a/app/controllers/news_controller.rb +++ b/app/controllers/news_controller.rb @@ -7,13 +7,13 @@ class NewsController < ApplicationController if params[:keywords] !params[:sort].blank? ? sort = {params[:sort].to_sym=>params[:order]} : sort = {:is_top=>"desc",:postdate=>"desc"} news = NewsBulletin.where(:title.ne => "").any_of(:title => /#{params[:keywords].to_s}/i).can_display_postdate.is_approved.order_by(sort).filter_by_categories(["all"]).per(15) if !params[:keywords].nil? - news_count = ",共有" + news.count.to_s + "筆資料" + news_count = ",共搜尋到" + news.count.to_s + "筆資料" keyword = "搜尋標題有關 ' " + params[:keywords] + " '" elsif params[:department] !params[:sort].blank? ? sort = {params[:sort].to_sym=>params[:order]} : sort = {:is_top=>"desc",:postdate=>"desc"} dept = Department.find_by(:uid => params["department"].split("-").last) rescue nil news = NewsBulletin.where(:title.ne => "" ,:department => dept).can_display_postdate.is_approved.order_by(sort).filter_by_categories(["all"]) if !dept.nil? - news_count = ",共有" + news.count.to_s + "筆資料" + news_count = ",共搜尋到" + news.count.to_s + "筆資料" keywords = params[:department].split("-") keywords.delete(keywords.last) @@ -27,7 +27,7 @@ class NewsController < ApplicationController unit = Unit.find_by(:uid => params["unit"].split("-").last) rescue nil !params[:sort].blank? ? sort = {params[:sort].to_sym=>params[:order]} : sort = {:is_top=>"desc",:postdate=>"desc"} news = NewsBulletin.where(:title.ne => "" ,:unit => unit).can_display_postdate.is_approved.order_by(sort).filter_by_categories(["all"]) if !unit.nil? - news_count = ",共有" + news.count.to_s + "筆資料" + news_count = ",共搜尋到" + news.count.to_s + "筆資料" keywords = params[:unit].split("-") keywords.delete(keywords.last) @@ -40,7 +40,7 @@ class NewsController < ApplicationController !params[:sort].blank? ? sort = {params[:sort].to_sym=>params[:order]} : sort = {:is_top=>"desc",:postdate=>"desc"} category = Category.find_by(:uid => params["category"].split("-").last) rescue nil news = NewsBulletin.all.where(:title.ne => "").can_display_postdate.is_approved.order_by(sort).filter_by_categories([category.id.to_s]) if !category.nil? - news_count = ",共有" + news.count.to_s + "筆資料" + news_count = ",共搜尋到" + news.count.to_s + "筆資料" keywords = params[:category].split("-") keywords.delete(keywords.last)