diff --git a/announcement.gemspec b/announcement.gemspec index 099944f..5044448 100644 --- a/announcement.gemspec +++ b/announcement.gemspec @@ -294,7 +294,7 @@ Gem::Specification.new do |s| s.license = "MIT" s.metadata = { "_require" => "#{File.expand_path("../app/models/announcement_setting", __FILE__)}", - "global_hash" => "{enable_manually_sort: (AnnouncementSetting.first.enable_manually_sort rescue false)}" + "global_hash" => "{enable_manually_sort: (AnnouncementSetting.first.enable_manually_sort rescue false),enable_annc_dept: (AnnouncementSetting.first.enable_annc_dept rescue false), annc_depts_translations: (AnnouncementSetting.first.annc_depts_translations rescue {})}" } s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] s.test_files = Dir["test/**/*"] diff --git a/app/controllers/announcements_controller.rb b/app/controllers/announcements_controller.rb index 2c00b8f..7183cf1 100644 --- a/app/controllers/announcements_controller.rb +++ b/app/controllers/announcements_controller.rb @@ -7,7 +7,20 @@ class AnnouncementsController < ApplicationController Bulletin.instance_variable_set('@manually_sort',@manually_sort) #self.request = OrbitHelper.request end - + 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 manually_sort if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash OrbitHelper::SharedHash['announcement'][:enable_manually_sort] rescue AnnouncementSetting.first.enable_manually_sort @@ -67,6 +80,11 @@ class AnnouncementsController < ApplicationController sorted = [] total_pages = 0 end + annc_depts = [] + tmp_enable_annc_dept = (enable_annc_dept rescue false) + if tmp_enable_annc_dept + annc_depts = annc_depts_translations[locale] rescue [] + end anns = sorted.collect do |a| if a["source-site"].blank? statuses = a.statuses_with_classname.collect do |status| @@ -78,7 +96,7 @@ class AnnouncementsController < ApplicationController locale = OrbitHelper.get_site_locale.to_s files = a.bulletin_files.to_fronted(locale) 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_name rescue (User.find(a.create_user_id).member_profile.name rescue "") + author = tmp_enable_annc_dept ? annc_depts[a.annc_dept] : User.find(a.create_user_id).member_name rescue (User.find(a.create_user_id).member_profile.name rescue "") desc = a.image_description desc = (desc.blank? ? "announcement image" : desc) link_to_show = a.is_external_link ? a.external_link : OrbitHelper.url_to_show(a.to_param) @@ -665,7 +683,12 @@ class AnnouncementsController < ApplicationController } } rescue [] files = announcement.bulletin_files.to_fronted(locale) links = announcement.bulletin_links.map{|link| { "link_url" => link.url, "link_title" => (link.title.blank? ? link.url : link.title) } } rescue [] - update_user = announcement.update_user.member_profile.name rescue "" + update_user = "" + if enable_annc_dept + update_user = annc_depts_translations[locale][announcement.annc_dept] rescue "" + else + update_user = announcement.update_user.member_profile.name rescue "" + end desc = announcement.image_description desc = (desc.nil? || desc == "" ? "announcement image" : desc) @@ -873,6 +896,11 @@ class AnnouncementsController < ApplicationController OrbitHelper.set_page_number(params[:page_no].to_i) OrbitHelper.set_page_data_count((params[:data_count].blank? ? 10 : params[:data_count].to_i)) sorted,total_pages = get_sorted_annc + annc_depts = [] + tmp_enable_annc_dept = (enable_annc_dept rescue false) + if tmp_enable_annc_dept + annc_depts = annc_depts_translations[locale] rescue [] + end anns = sorted.collect do |a| if a["source-site"].blank? statuses = a.statuses_with_classname.collect do |status| @@ -884,7 +912,7 @@ class AnnouncementsController < ApplicationController locale = I18n.locale.to_s files = a.bulletin_files.to_fronted(locale) 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 "" + author = tmp_enable_annc_dept ? annc_depts[a.annc_dept] : User.find(a.create_user_id).member_profile.name rescue "" desc = a.image_description desc = (desc.blank? ? "announcement image" : desc) link_to_show = (a.is_external_link ? a.external_link : OrbitHelper.url_to_show(a.to_param)) rescue "" diff --git a/app/controllers/bulletins_controller.rb b/app/controllers/bulletins_controller.rb index 8db553c..ea16ec6 100644 --- a/app/controllers/bulletins_controller.rb +++ b/app/controllers/bulletins_controller.rb @@ -1,6 +1,27 @@ # 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 manually_sort + if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash + OrbitHelper::SharedHash['announcement'][:enable_manually_sort] rescue AnnouncementSetting.first.enable_manually_sort + else + AnnouncementSetting.first.enable_manually_sort rescue false + end + end def get_bulletins page = Page.where(:module => "announcement").first rescue nil @@ -9,7 +30,11 @@ class BulletinsController < ApplicationController # 每頁顯示的則數 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 if !params[:keyword].blank? keyword = Regexp.new(".*"+params[:keyword]+".*") @@ -30,8 +55,12 @@ class BulletinsController < ApplicationController bulletins = bulletins.where(:is_preview.in=>[false,nil]) bulletins = bulletins.where(:approved.ne => false , :rejected.ne => true) bulletins = bulletins.where(:postdate.lt=>Time.now) - bulletins = bulletins.desc( :is_top, :postdate).page(page_num).per(per_page) - + if (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 @@ -61,7 +90,7 @@ class BulletinsController < ApplicationController 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 "" + 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, diff --git a/app/models/announcement_setting.rb b/app/models/announcement_setting.rb index 0cceb59..5016248 100644 --- a/app/models/announcement_setting.rb +++ b/app/models/announcement_setting.rb @@ -14,6 +14,8 @@ class AnnouncementSetting field :hot_text , type: String , localize: true field :hidden_text , type: String , localize: true field :enable_manually_sort, type: Boolean, default: false + field :enable_annc_dept, type: Boolean, default: false + field :annc_depts, type: Array, default: [], localize: true has_many :anns_status_settings, :autosave => true, :dependent => :destroy accepts_nested_attributes_for :anns_status_settings, :allow_destroy => true def self.check_limit_for_user(user_id, b_id = nil) @@ -34,10 +36,23 @@ class AnnouncementSetting end before_save do + can_update_shared_hash = (defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash) + tmp_hash = {} if self.enable_manually_sort_changed? && self.enable_manually_sort AnnsCache.all.delete Bulletin.index({approved: -1,is_hidden: 1,is_preview: 1, is_top: -1,sort_number: 1,postdate: -1,_id: -1,deadline: -1}, { unique: false, background: true }) Bulletin.create_indexes + tmp_hash[:enable_manually_sort] = self.enable_manually_sort + end + if self.annc_depts_changed? + tmp_hash[:annc_depts_translations] = self.annc_depts_translations + end + if can_update_shared_hash + if tmp_hash.count != 0 + tmp_hash[:enable_manually_sort] = self.enable_manually_sort if tmp_hash[:enable_manually_sort].nil? + tmp_hash[:annc_depts_translations] = self.annc_depts_translations if tmp_hash[:annc_depts_translations].nil? + OrbitHelper::SharedHash["announcement"] = ProcesssShareWraper.new(tmp_hash) + end end end end \ No newline at end of file diff --git a/app/models/bulletin.rb b/app/models/bulletin.rb index 74f7339..5db2eec 100644 --- a/app/models/bulletin.rb +++ b/app/models/bulletin.rb @@ -115,6 +115,7 @@ class Bulletin index({is_top: -1,postdate: -1, _id: -1}, { unique: false, background: true }) index({approved: -1,is_hidden: 1,is_preview: 1, is_top: -1,postdate: -1,_id: -1,deadline: -1}, { unique: false, background: true }) field :sort_number, type: Integer + field :annc_dept, type: Integer def get_org_model if self.is_preview org_model = nil diff --git a/app/models/bulletin_feed.rb b/app/models/bulletin_feed.rb index 1afc49e..1a732fb 100644 --- a/app/models/bulletin_feed.rb +++ b/app/models/bulletin_feed.rb @@ -11,6 +11,20 @@ class BulletinFeed cache.regenerate end end + 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 self.create_feed_cache(bulletin=nil,bulletin_feed=nil) Thread.new do if !bulletin.nil? @@ -54,6 +68,11 @@ class BulletinFeed base_url = Site.first.root_url if base_url.nil? uid = self.uid bf = self + annc_depts = [] + tmp_enable_annc_dept = (enable_annc_dept rescue false) + if tmp_enable_annc_dept + annc_depts = annc_depts_translations[I18n.default_locale.to_s] rescue [] + end if !bf.nil? tags = bf.tag_ids categories = bf.category_ids @@ -121,11 +140,16 @@ class BulletinFeed first_deadline = deadline end end - user = User.find(anns.create_user_id) rescue nil - if !user.nil? - author = user.member_name || user.user_name + author = "" + if tmp_enable_annc_dept + author = annc_depts[anns.annc_dept] rescue "" else - author = "" + user = User.find(anns.create_user_id) rescue nil + if !user.nil? + author = user.member_name || user.user_name + else + author = "" + end end a = {} if more_url diff --git a/app/views/admin/announcements/_form.html.erb b/app/views/admin/announcements/_form.html.erb index eb4efab..431f2a3 100644 --- a/app/views/admin/announcements/_form.html.erb +++ b/app/views/admin/announcements/_form.html.erb @@ -90,7 +90,15 @@
- + <% if (AnnouncementSetting.first.enable_annc_dept rescue false) %> + +
+ +
+ <%= f.select("annc_dept", (options_for_select(AnnouncementSetting.first.annc_depts.to_a.map.with_index{|dept,i| [dept, i] },:selected => f.object.annc_dept) rescue []) , { include_blank: true, id: "annc_dept" }) %> +
+
+ <% end %>
diff --git a/app/views/admin/announcements/settings.html.erb b/app/views/admin/announcements/settings.html.erb index 78b7038..786a591 100644 --- a/app/views/admin/announcements/settings.html.erb +++ b/app/views/admin/announcements/settings.html.erb @@ -79,6 +79,9 @@ .td-delete{ width: 10%; } + #annc_depts_block .tab-content{ + float: left; + } <% sub_managers = @module_app.sub_managers @@ -163,6 +166,34 @@ <%= f.text_field :carousel_image_width %>
+
+ <%= f.label :enable_annc_dept, t("announcement.annc_dept"), :class => "control-label muted" %> +
+ <%= f.check_box :enable_annc_dept, :id=>"enable_annc_dept" %><%= t("announcement.enable") %> +
+ <% f.object.annc_depts.to_a.each_with_index do |dept, idx| %> +
+
+ <% @site_in_use_locales.each_with_index do |locale, i| %> +
" id="annc_depts_<%=idx%>_<%= locale %>"> + <%= f.fields_for :annc_depts_translations,f.object do |f| %> + <%= f.text_field "#{locale}][", :value => (f.object.annc_depts_translations[locale][idx] rescue ""), :placeholder=>t("announcement.annc_dept", :id=>nil) %> + <% end %> +
+ <% end %> +
+
+ <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#annc_depts_<%=idx%>_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> +
+ +
+ <% end %> + +
+
+
<%= f.label :only_manager_can_edit_status, t("announcement.only_manager_can_edit_status"), :class => "control-label muted" %>
@@ -387,6 +418,25 @@ return params; } $(document).ready(function(){ + $(document).on("click",".remove_dept",function(){ + if(window.confirm("Are you sure?")) + $(this).parents(".annc_dept").eq(0).remove(); + }) + $(".add_dept").click(function(){ + var tmp_text = '
'; + <% @site_in_use_locales.each_with_index do |locale, i| %> + tmp_text += '
" id="annc_depts_new_idx_<%= locale %>">
'; + <% end %> + tmp_text += '
'; + <% @site_in_use_locales.each_with_index do |locale, i| %> + tmp_text += '" href="#annc_depts_new_idx_<%=locale%>" data-toggle="tab"><%= t(locale.to_s) %>'; + <% end %> + tmp_text += '