# frozen_string_literal: true class Admin::AnnouncementsController < Admin::BaseController before_action :set_announcements, only: :index before_action :set_announcement, except: [:index, :new, :create] def index authorize :announcement, :index? @published_announcements_count = Announcement.published.async_count end def new authorize :announcement, :create? @announcement = Announcement.new end def edit authorize :announcement, :update? end def create authorize :announcement, :create? @announcement = Announcement.new(resource_params) if @announcement.save PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? log_action :create, @announcement redirect_to admin_announcements_path, notice: @announcement.published? ? I18n.t('admin.announcements.published_msg') : I18n.t('admin.announcements.scheduled_msg') else render :new end end def update authorize :announcement, :update? if @announcement.update(resource_params) PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published? log_action :update, @announcement 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, notice: I18n.t('admin.announcements.destroyed_msg') end private def set_announcements @announcements = AnnouncementFilter.new(filter_params).results.reverse_chronological.page(params[:page]) end def set_announcement @announcement = Announcement.find(params[:id]) end def filter_params params.slice(*AnnouncementFilter::KEYS).permit(*AnnouncementFilter::KEYS) end def resource_params params.require(:announcement).permit(:text, :scheduled_at, :starts_at, :ends_at, :all_day) end end