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
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
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
- 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)
.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
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)
deleted_status: "(deleted status)"
title: Audit log
announcements:
+ destroyed_msg: Announcement successfully deleted!
edit:
title: Edit announcement
empty: No announcements found.
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
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]