# encoding: utf-8 class BulletinsController < ApplicationController before_filter :set_I18n def annc_depts_translations if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash OrbitHelper::SharedHash['announcement'][:annc_depts_translations] rescue AnnouncementSetting.first.annc_depts_translations else AnnouncementSetting.first.annc_depts_translations rescue {} end end def enable_annc_dept if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash OrbitHelper::SharedHash['announcement'][:enable_annc_dept] rescue AnnouncementSetting.first.enable_annc_dept else AnnouncementSetting.first.enable_annc_dept rescue false end end def get_bulletins page = Page.where(:module => "announcement").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 annc_depts = [] tmp_enable_annc_dept = (enable_annc_dept rescue false) if tmp_enable_annc_dept annc_depts = annc_depts_translations[locale] rescue [] end I18n.locale = :zh_tw keyword = params[:keyword].to_s if keyword.present? keyword_regex = OrbitHelper.get_keyword_regex(keyword) bulletins = Bulletin.any_of({:title=>keyword_regex},{:subtitle=>keyword_regex},{:text=>keyword_regex}) else bulletins = Bulletin.all end if !params[:category].blank? module_id = ModuleApp.where(:key=>"announcement").first.id category = Regexp.new(".*"+params[:category]+".*") category_id = Category.where(:title => category, :module_app_id => module_id).first.id bulletins = bulletins.where(:category_id => category_id) else bulletins = bulletins end bulletins = bulletins.where(:is_preview.in=>[false,nil]) bulletins = bulletins.where(:approved.ne => false , :rejected.ne => true) bulletins = bulletins.where(:postdate.lt=>Time.now) if (AnnouncementsHelper.enable_manually_sort rescue false) bulletins = bulletins.order({:is_top => -1, :sort_number => 1, :postdate => -1}).page(page_num).per(per_page) else bulletins = bulletins.desc( :is_top, :postdate).page(page_num).per(per_page) end bulletins = bulletins.to_a 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 = tmp_enable_annc_dept ? annc_depts[b.annc_dept] : 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 keyword.present? keyword_regex = OrbitHelper.get_keyword_regex(keyword) bulletin_count = Bulletin.any_of({:title=>keyword_regex},{:subtitle=>keyword_regex},{:text=>keyword_regex}) else bulletin_count = Bulletin.all end bulletin_count = bulletin_count.where(:is_preview.in=>[false,nil]) bulletin_count = bulletin_count.where(:approved.ne => false , :rejected.ne => true) bulletin_count = bulletin_count.where(:postdate.lt=>Time.now) 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