From 90f7fbedf16ef01c0be6d69c65d421245195fe9c Mon Sep 17 00:00:00 2001 From: rulingcom Date: Mon, 25 May 2026 20:04:36 +0800 Subject: [PATCH] Add event expiry ranking and file drag-sort functionality --- app/models/event_news.rb | 13 +++++ app/models/event_news_file.rb | 2 + app/models/event_news_setting.rb | 3 +- app/views/admin/event_news/_form.html.erb | 50 +++++++++++++++++-- .../admin/event_news/_form_file.html.erb | 1 + app/views/admin/event_news/settings.html.erb | 8 ++- config/locales/en.yml | 1 + config/locales/zh_tw.yml | 1 + 8 files changed, 74 insertions(+), 5 deletions(-) diff --git a/app/models/event_news.rb b/app/models/event_news.rb index 1eac057..b9c3e33 100644 --- a/app/models/event_news.rb +++ b/app/models/event_news.rb @@ -109,6 +109,8 @@ class EventNews accepts_nested_attributes_for :event_carousel_images, :allow_destroy => true before_destroy :destroy_email + before_save :calculate_is_event_expired + 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, ->{ is_approved_and_show @@ -355,6 +357,17 @@ class EventNews (self.deadline < Time.now) rescue false end + def calculate_is_event_expired + setting = EventNewsSetting.first + if setting && setting.expired_event_to_bottom && event_end_date.present? && event_end_date >= Time.now + self.is_top = true + self.top_end_date = event_end_date + elsif setting && setting.expired_event_to_bottom && event_end_date.present? && event_end_date < Time.now + self.is_top = false + self.top_end_date = nil + end + end + def destroy_email mail = Email.find(self.email_id) rescue nil mail.destroy if !mail.nil? diff --git a/app/models/event_news_file.rb b/app/models/event_news_file.rb index 26a7c36..f6c4f28 100644 --- a/app/models/event_news_file.rb +++ b/app/models/event_news_file.rb @@ -10,6 +10,8 @@ class EventNewsFile field :title, localize: true field :choose_lang, :type => Array, :default => ["en","zh_tw"] field :privacy_type, type: String, default: 'public' + field :position, type: Integer, default: 0 + default_scope ->{ order_by(position: :asc) } belongs_to :event_news def self.to_fronted(locale=I18n.locale) self.all.map{|file| file.to_fronted(locale)}.compact rescue [] diff --git a/app/models/event_news_setting.rb b/app/models/event_news_setting.rb index cf4e854..6e94b13 100644 --- a/app/models/event_news_setting.rb +++ b/app/models/event_news_setting.rb @@ -14,6 +14,7 @@ class EventNewsSetting 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 + field :expired_event_to_bottom, type: Boolean, default: false field :migrate_flag, type: Array, default: [] @@ -128,4 +129,4 @@ class EventNewsSetting end end end -end \ No newline at end of file +end diff --git a/app/views/admin/event_news/_form.html.erb b/app/views/admin/event_news/_form.html.erb index dd72530..0d956d0 100644 --- a/app/views/admin/event_news/_form.html.erb +++ b/app/views/admin/event_news/_form.html.erb @@ -3,6 +3,24 @@ <%= stylesheet_link_tag "lib/fileupload" %> <%= stylesheet_link_tag "lib/main-list" %> <% end %> +