From 3ed071f486cb9282ded45b0a44227a835878345c Mon Sep 17 00:00:00 2001 From: bohung Date: Sat, 16 May 2020 21:43:37 +0800 Subject: [PATCH] Add only_manager_can_edit_status setting. --- .../admin/announcements_controller.rb | 27 +++++++++++++------ app/models/announcement_setting.rb | 1 + app/views/admin/announcements/_form.html.erb | 7 +++-- .../admin/announcements/settings.html.erb | 6 +++++ config/locales/en.yml | 1 + config/locales/zh_tw.yml | 1 + 6 files changed, 33 insertions(+), 10 deletions(-) diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb index 6414b79..1d0f243 100644 --- a/app/controllers/admin/announcements_controller.rb +++ b/app/controllers/admin/announcements_controller.rb @@ -15,6 +15,7 @@ class Admin::AnnouncementsController < OrbitAdminController Bulletin.remove_expired_status @tags = @module_app.tags @table_fields = [:status, :category, :title, :start_date, :end_date, :last_modified] + @current_user = current_user if AnnouncementSetting.first.is_display_edit_only && !current_user.is_admin? && !current_user.is_manager?(@module_app) current_user_is_sub_manager = !current_user.is_manager?(@module_app) && (current_user.is_sub_manager?(@module_app) || current_user.is_sub_manager_with_role?(@module_app)) rescue false if current_user_is_sub_manager @@ -173,9 +174,15 @@ class Admin::AnnouncementsController < OrbitAdminController bps['bulletin_links_attributes'].delete(idx.to_s) if link['url'].blank? end end - if bps[:is_top] == "1" && !AnnouncementSetting.check_limit_for_user(current_user.id) - bps[:is_top] = "0" - bps[:top_end_date] = nil + if((!AnnouncementSetting.first.only_manager_can_edit_status) || (AnnouncementSetting.first.only_manager_can_edit_status && (@current_user.is_admin? || @current_user.is_manager?(@module_app))) ) + if bps[:is_top] == "1" && !AnnouncementSetting.check_limit_for_user(bulletin.create_user_id, bulletin.id) + bps[:is_top] = "0" + bps[:top_end_date] = nil + end + else + bps[:is_top] = false + bps[:is_hot] = false + bps[:is_hidden] = false end bulletin = Bulletin.new(bps) @@ -237,12 +244,16 @@ class Admin::AnnouncementsController < OrbitAdminController bps['bulletin_links_attributes'].delete(idx.to_s) if link['url'].blank? end end - - if bps[:is_top] == "1" && !AnnouncementSetting.check_limit_for_user(bulletin.create_user_id, bulletin.id) - bps[:is_top] = "0" - bps[:top_end_date] = nil + if((!AnnouncementSetting.first.only_manager_can_edit_status) || (AnnouncementSetting.first.only_manager_can_edit_status && (@current_user.is_admin? || @current_user.is_manager?(@module_app))) ) + if bps[:is_top] == "1" && !AnnouncementSetting.check_limit_for_user(bulletin.create_user_id, bulletin.id) + bps[:is_top] = "0" + bps[:top_end_date] = nil + end + else + bps[:is_top] = bulletin.is_top + bps[:is_hot] = bulletin.is_hot + bps[:is_hidden] = bulletin.is_hidden end - bulletin.update_attributes(bps) bulletin.update_user_id = current_user.id if bulletin.rejected diff --git a/app/models/announcement_setting.rb b/app/models/announcement_setting.rb index f1c6af1..8078b11 100644 --- a/app/models/announcement_setting.rb +++ b/app/models/announcement_setting.rb @@ -7,6 +7,7 @@ class AnnouncementSetting field :approvers, type: Array, :default => [] field :email_to, type: Array, :default => ["admins","managers","approvers"] field :is_display_edit_only, type: Boolean, :default => false + field :only_manager_can_edit_status, type: Boolean, :default => false 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) diff --git a/app/views/admin/announcements/_form.html.erb b/app/views/admin/announcements/_form.html.erb index 402cfba..74d4785 100644 --- a/app/views/admin/announcements/_form.html.erb +++ b/app/views/admin/announcements/_form.html.erb @@ -30,7 +30,9 @@