diff --git a/app/controllers/admin/event_news_controller.rb b/app/controllers/admin/event_news_controller.rb index 37cb7c6..aed6f73 100644 --- a/app/controllers/admin/event_news_controller.rb +++ b/app/controllers/admin/event_news_controller.rb @@ -24,9 +24,7 @@ class Admin::EventNewsController < OrbitAdminController def update_sort_setting setting = @event_news_setting setting.update_attributes(settings_params) - if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash - OrbitHelper::SharedHash['event_news_mod'][:enable_manually_sort] = setting.enable_manually_sort - end + update_enable_manually_sort(setting) redirect_to edit_sort_admin_event_news_index_path end @@ -198,6 +196,7 @@ class Admin::EventNewsController < OrbitAdminController def createsettings setting = EventNewsSetting.new(settings_params) setting.save + update_is_postdate_sort_first(setting) redirect_to admin_event_news_settings_path end @@ -206,9 +205,10 @@ class Admin::EventNewsController < OrbitAdminController ids = params['event_news_setting']['anns_status_settings'].to_a.collect do |i,v| v['_id'] end.compact - AnnsStatusSetting.where(:id.nin=>ids).destroy + EventNewsStatusSetting.where(:id.nin=>ids).destroy setting.update_attributes(settings_params) setting.save + update_is_postdate_sort_first(setting) redirect_to admin_event_news_settings_path end @@ -575,4 +575,16 @@ class Admin::EventNewsController < OrbitAdminController def settings_params params.require(:event_news_setting).permit! end + + def update_enable_manually_sort(setting) + if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash + OrbitHelper::SharedHash['event_news_mod'][:enable_manually_sort] = setting.enable_manually_sort + end + end + + def update_is_postdate_sort_first(setting) + if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash + OrbitHelper::SharedHash['event_news_mod'][:is_postdate_sort_first] = setting.is_postdate_sort_first + end + end end diff --git a/app/controllers/event_news_mods_controller.rb b/app/controllers/event_news_mods_controller.rb index 4026953..b171081 100644 --- a/app/controllers/event_news_mods_controller.rb +++ b/app/controllers/event_news_mods_controller.rb @@ -3,17 +3,8 @@ class EventNewsModsController < ApplicationController def initialize super @app_title = 'event_news_mod' - @manually_sort = manually_sort - EventNews.instance_variable_set('@manually_sort',@manually_sort) #self.request = OrbitHelper.request end - def manually_sort - if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash - OrbitHelper::SharedHash['event_news_mod'][:enable_manually_sort] rescue EventNewsSetting.first.enable_manually_sort - else - EventNewsSetting.first.enable_manually_sort rescue false - end - end def index EventNews.remove_expired_status sorted,total_pages = get_sorted_event_news diff --git a/app/helpers/event_news_helper.rb b/app/helpers/event_news_helper.rb index 4ba42fc..5f4ef83 100644 --- a/app/helpers/event_news_helper.rb +++ b/app/helpers/event_news_helper.rb @@ -539,4 +539,18 @@ module EventNewsHelper ").html_safe end + def self.enable_manually_sort + if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash + OrbitHelper::SharedHash['event_news_mod'][:enable_manually_sort] + else + EventNewsSetting.first.enable_manually_sort rescue false + end + end + def self.is_postdate_sort_first + if defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash + OrbitHelper::SharedHash['event_news_mod'][:is_postdate_sort_first] + else + EventNewsSetting.first.is_postdate_sort_first rescue false + end + end end diff --git a/app/models/event_news.rb b/app/models/event_news.rb index 661abe8..02dd66c 100644 --- a/app/models/event_news.rb +++ b/app/models/event_news.rb @@ -106,9 +106,24 @@ class EventNews before_destroy :destroy_email scope :open_in_future, ->{where(:is_hidden.ne=>true,:is_preview.ne => true,:postdate.gt=>Time.now).order(postdate: :asc)} - scope :can_display_and_sorted, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).valid_time_range.order(event_date: :desc)} - scope :can_display_and_sorted_according_today, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).order(event_date: :asc).valid_time_range.where(:event_date.gte => Date.today.to_time)} - scope :valid_time_range, ->{and_any_of([{"postdate"=>{"$lte"=> Time.now}, "deadline"=>{"$gte"=> Time.now}}, {"postdate"=>{"$lte"=> Time.now}, "deadline"=>nil}]).order((@manually_sort ? {is_top: :desc,sort_number: :asc,postdate: :desc,id: :desc} : {is_top: :desc,postdate: :desc,id: :desc}))} + scope :can_display_and_sorted, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).valid_time_range} + scope :can_display_and_sorted_according_today, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).valid_time_range.where(:event_date.gte => Date.today.to_time)} + scope :valid_time_range, ->{ + and_any_of([ + {"postdate"=>{"$lte"=> Time.now}, "deadline"=>{"$gte"=> Time.now}}, + {"postdate"=>{"$lte"=> Time.now}, "deadline"=>nil} + ]) + .order( + (EventNewsHelper.enable_manually_sort ? + {is_top: :desc, sort_number: :asc} : + {is_top: :desc} + ).merge( + EventNewsHelper.is_postdate_sort_first ? + {postdate: :desc, event_date: :desc, id: :desc} : + {event_date: :desc, postdate: :desc, id: :desc} + ) + ) + } scope :is_approved, ->{where(:approved => true)} scope :is_approved_and_show, ->{where(:approved => true,:is_hidden.ne=>true,:is_preview.ne => true)} scope :filter_cats_and_tags, ->(cats,tags) {filter_by_widget_categories(cats,false).filter_by_tags(tags)} diff --git a/app/models/event_news_setting.rb b/app/models/event_news_setting.rb index 141fde7..403a806 100644 --- a/app/models/event_news_setting.rb +++ b/app/models/event_news_setting.rb @@ -12,6 +12,7 @@ class EventNewsSetting field :including_time, type: Boolean, default: true field :hour_clock_24, type: Boolean, default: true field :enable_manually_sort, type: Boolean, default: false + field :is_postdate_sort_first, type: Boolean, default: false has_many :event_news_status_settings, :autosave => true, :dependent => :destroy accepts_nested_attributes_for :event_news_status_settings, :allow_destroy => true diff --git a/app/views/admin/event_news/_form.html.erb b/app/views/admin/event_news/_form.html.erb index 5daf66a..271eee2 100644 --- a/app/views/admin/event_news/_form.html.erb +++ b/app/views/admin/event_news/_form.html.erb @@ -13,6 +13,9 @@ cursor: default; display: inline-block; } + legend { + background: white; + } <% content_for :page_specific_javascript do %> <%= javascript_include_tag "lib/bootstrap-fileupload" %> diff --git a/app/views/admin/event_news/settings.html.erb b/app/views/admin/event_news/settings.html.erb index 9dbc196..335cb96 100644 --- a/app/views/admin/event_news/settings.html.erb +++ b/app/views/admin/event_news/settings.html.erb @@ -79,6 +79,9 @@ .td-delete{ width: 10%; } + legend { + background: white; + } <% sub_managers = @module_app.sub_managers @@ -166,6 +169,12 @@ <%= f.check_box :is_display_edit_only %> +
+ <%= f.label :is_postdate_sort_first, t("event_news.is_postdate_sort_first"), :class => "control-label muted" %> +
+ <%= f.check_box :is_postdate_sort_first %> +
+
<%= f.label :top_limit, t("event_news.top_limit"), :class => "control-label muted" %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index 914259e..2803e21 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -169,6 +169,7 @@ en: display_subtitle: Display Subtitle in Content Page display_img: Display Cover Image in Content Page is_display_edit_only: Only display editable event news + is_postdate_sort_first: Sort by Post Date first (Sort by Event Date first as Default) only_manager_can_edit_status: Only manager can edit status of event news layout_type: Layout type event_news_setting_for_iframe: Event News settings for iframe diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index a2a8fef..b39f361 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -172,6 +172,7 @@ zh_tw: display_subtitle: 內容頁顯示副標題 display_img: 內容頁顯示封面圖片 is_display_edit_only: 只顯示可更新的活動公告 + is_postdate_sort_first: 優先使用公告日期排序(預設優先使用事件日期) only_manager_can_edit_status: 只有管理者可更新活動公告狀態 layout_type: 頁面樣式 event_news_setting_for_iframe: 活動公告iframe設定 diff --git a/event_news_mod.gemspec b/event_news_mod.gemspec index e758175..50e4840 100644 --- a/event_news_mod.gemspec +++ b/event_news_mod.gemspec @@ -163,7 +163,7 @@ Gem::Specification.new do |s| s.license = "MIT" s.metadata = { "_require" => "#{File.expand_path("../app/models/event_news_setting", __FILE__)}", - "global_hash" => "{enable_manually_sort: (EventNewsSetting.first.enable_manually_sort rescue false)}" + "global_hash" => "{enable_manually_sort: (EventNewsSetting.first.enable_manually_sort rescue false), is_postdate_sort_first: (EventNewsSetting.first.is_postdate_sort_first rescue false)}" } s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]