Add publish/unpublish controls to announcements in admin UI (#12967)
This commit is contained in:
		| @@ -22,7 +22,7 @@ class Admin::AnnouncementsController < Admin::BaseController | ||||
|     if @announcement.save | ||||
|       PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | ||||
|       log_action :create, @announcement | ||||
|       redirect_to admin_announcements_path | ||||
|       redirect_to admin_announcements_path, notice: @announcement.published? ? I18n.t('admin.announcements.published_msg') : I18n.t('admin.announcements.scheduled_msg') | ||||
|     else | ||||
|       render :new | ||||
|     end | ||||
| @@ -38,18 +38,34 @@ class Admin::AnnouncementsController < Admin::BaseController | ||||
|     if @announcement.update(resource_params) | ||||
|       PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | ||||
|       log_action :update, @announcement | ||||
|       redirect_to admin_announcements_path | ||||
|       redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.updated_msg') | ||||
|     else | ||||
|       render :edit | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def publish | ||||
|     authorize :announcement, :update? | ||||
|     @announcement.publish! | ||||
|     PublishScheduledAnnouncementWorker.perform_async(@announcement.id) | ||||
|     log_action :update, @announcement | ||||
|     redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.published_msg') | ||||
|   end | ||||
|  | ||||
|   def unpublish | ||||
|     authorize :announcement, :update? | ||||
|     @announcement.unpublish! | ||||
|     UnpublishAnnouncementWorker.perform_async(@announcement.id) | ||||
|     log_action :update, @announcement | ||||
|     redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.unpublished_msg') | ||||
|   end | ||||
|  | ||||
|   def destroy | ||||
|     authorize :announcement, :destroy? | ||||
|     @announcement.destroy! | ||||
|     UnpublishAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | ||||
|     log_action :destroy, @announcement | ||||
|     redirect_to admin_announcements_path | ||||
|     redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.destroyed_msg') | ||||
|   end | ||||
|  | ||||
|   private | ||||
|   | ||||
| @@ -32,6 +32,14 @@ class Announcement < ApplicationRecord | ||||
|   before_validation :set_all_day | ||||
|   before_validation :set_published, on: :create | ||||
|  | ||||
|   def publish! | ||||
|     update!(published: true, published_at: Time.now.utc, scheduled_at: nil) | ||||
|   end | ||||
|  | ||||
|   def unpublish! | ||||
|     update!(published: false, scheduled_at: nil) | ||||
|   end | ||||
|  | ||||
|   def time_range? | ||||
|     starts_at.present? && ends_at.present? | ||||
|   end | ||||
|   | ||||
| @@ -10,5 +10,12 @@ | ||||
|     - else | ||||
|       = l(announcement.created_at) | ||||
|   %td | ||||
|     = table_link_to 'pencil', t('generic.edit'), edit_admin_announcement_path(announcement) if can?(:update, announcement) | ||||
|     - if can?(:update, announcement) | ||||
|       - if announcement.published? | ||||
|         = table_link_to 'pause', t('admin.announcements.unpublish'), unpublish_admin_announcement_path(announcement), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } | ||||
|       - else | ||||
|         = table_link_to 'play', t('admin.announcements.publish'), publish_admin_announcement_path(announcement), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } | ||||
|  | ||||
|       = table_link_to 'pencil', t('generic.edit'), edit_admin_announcement_path(announcement) | ||||
|  | ||||
|     = table_link_to 'trash', t('generic.delete'), admin_announcement_path(announcement), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, announcement) | ||||
|   | ||||
| @@ -14,7 +14,7 @@ | ||||
|   .fields-group | ||||
|     = f.input :text, wrapper: :with_block_label | ||||
|  | ||||
|   - if @announcement.scheduled_at.present? && !@announcement.published? | ||||
|   - unless @announcement.published? | ||||
|     .fields-group | ||||
|       = f.input :scheduled_at, include_blank: true, wrapper: :with_block_label | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ class PublishScheduledAnnouncementWorker | ||||
|   def perform(announcement_id) | ||||
|     announcement = Announcement.find(announcement_id) | ||||
|  | ||||
|     announcement.update(published: true, published_at: Time.now.utc, scheduled_at: nil) unless announcement.published? | ||||
|     announcement.publish! unless announcement.published? | ||||
|  | ||||
|     payload = InlineRenderer.render(announcement, nil, :announcement) | ||||
|     payload = Oj.dump(event: :announcement, payload: payload) | ||||
|   | ||||
| @@ -232,6 +232,7 @@ en: | ||||
|       deleted_status: "(deleted status)" | ||||
|       title: Audit log | ||||
|     announcements: | ||||
|       destroyed_msg: Announcement successfully deleted! | ||||
|       edit: | ||||
|         title: Edit announcement | ||||
|       empty: No announcements found. | ||||
| @@ -240,8 +241,12 @@ en: | ||||
|         create: Create announcement | ||||
|         title: New announcement | ||||
|       published: Published | ||||
|       published_msg: Announcement successfully published! | ||||
|       scheduled_msg: Announcement scheduled for publication! | ||||
|       time_range: Time range | ||||
|       title: Announcements | ||||
|       unpublished_msg: Announcement successfully unpublished! | ||||
|       updated_msg: Announcement successfully updated! | ||||
|     custom_emojis: | ||||
|       assign_category: Assign category | ||||
|       by_domain: Domain | ||||
|   | ||||
| @@ -177,7 +177,13 @@ Rails.application.routes.draw do | ||||
|     resources :email_domain_blocks, only: [:index, :new, :create, :destroy] | ||||
|     resources :action_logs, only: [:index] | ||||
|     resources :warning_presets, except: [:new] | ||||
|     resources :announcements, except: [:show] | ||||
|  | ||||
|     resources :announcements, except: [:show] do | ||||
|       member do | ||||
|         post :publish | ||||
|         post :unpublish | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     resource :settings, only: [:edit, :update] | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user