@@ -22,7 +22,7 @@ class Admin::AnnouncementsController < Admin::BaseController | |||||
if @announcement.save | if @announcement.save | ||||
PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | ||||
log_action :create, @announcement | 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 | else | ||||
render :new | render :new | ||||
end | end | ||||
@@ -38,18 +38,34 @@ class Admin::AnnouncementsController < Admin::BaseController | |||||
if @announcement.update(resource_params) | if @announcement.update(resource_params) | ||||
PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | ||||
log_action :update, @announcement | log_action :update, @announcement | ||||
redirect_to admin_announcements_path | |||||
redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.updated_msg') | |||||
else | else | ||||
render :edit | render :edit | ||||
end | end | ||||
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 | def destroy | ||||
authorize :announcement, :destroy? | authorize :announcement, :destroy? | ||||
@announcement.destroy! | @announcement.destroy! | ||||
UnpublishAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | UnpublishAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? | ||||
log_action :destroy, @announcement | log_action :destroy, @announcement | ||||
redirect_to admin_announcements_path | |||||
redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.destroyed_msg') | |||||
end | end | ||||
private | private | ||||
@@ -32,6 +32,14 @@ class Announcement < ApplicationRecord | |||||
before_validation :set_all_day | before_validation :set_all_day | ||||
before_validation :set_published, on: :create | 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? | def time_range? | ||||
starts_at.present? && ends_at.present? | starts_at.present? && ends_at.present? | ||||
end | end | ||||
@@ -10,5 +10,12 @@ | |||||
- else | - else | ||||
= l(announcement.created_at) | = l(announcement.created_at) | ||||
%td | %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) | = 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 | .fields-group | ||||
= f.input :text, wrapper: :with_block_label | = f.input :text, wrapper: :with_block_label | ||||
- if @announcement.scheduled_at.present? && !@announcement.published? | |||||
- unless @announcement.published? | |||||
.fields-group | .fields-group | ||||
= f.input :scheduled_at, include_blank: true, wrapper: :with_block_label | = f.input :scheduled_at, include_blank: true, wrapper: :with_block_label | ||||
@@ -7,7 +7,7 @@ class PublishScheduledAnnouncementWorker | |||||
def perform(announcement_id) | def perform(announcement_id) | ||||
announcement = Announcement.find(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 = InlineRenderer.render(announcement, nil, :announcement) | ||||
payload = Oj.dump(event: :announcement, payload: payload) | payload = Oj.dump(event: :announcement, payload: payload) | ||||
@@ -232,6 +232,7 @@ en: | |||||
deleted_status: "(deleted status)" | deleted_status: "(deleted status)" | ||||
title: Audit log | title: Audit log | ||||
announcements: | announcements: | ||||
destroyed_msg: Announcement successfully deleted! | |||||
edit: | edit: | ||||
title: Edit announcement | title: Edit announcement | ||||
empty: No announcements found. | empty: No announcements found. | ||||
@@ -240,8 +241,12 @@ en: | |||||
create: Create announcement | create: Create announcement | ||||
title: New announcement | title: New announcement | ||||
published: Published | published: Published | ||||
published_msg: Announcement successfully published! | |||||
scheduled_msg: Announcement scheduled for publication! | |||||
time_range: Time range | time_range: Time range | ||||
title: Announcements | title: Announcements | ||||
unpublished_msg: Announcement successfully unpublished! | |||||
updated_msg: Announcement successfully updated! | |||||
custom_emojis: | custom_emojis: | ||||
assign_category: Assign category | assign_category: Assign category | ||||
by_domain: Domain | by_domain: Domain | ||||
@@ -177,7 +177,13 @@ Rails.application.routes.draw do | |||||
resources :email_domain_blocks, only: [:index, :new, :create, :destroy] | resources :email_domain_blocks, only: [:index, :new, :create, :destroy] | ||||
resources :action_logs, only: [:index] | resources :action_logs, only: [:index] | ||||
resources :warning_presets, except: [:new] | 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] | resource :settings, only: [:edit, :update] | ||||