Add announcements (#12662)
* Add announcements Fix #11006 * Add reactions to announcements * Add admin UI for announcements * Add unit tests * Fix issues - Add `with_dismissed` param to announcements API - Fix end date not being formatted when time range is given - Fix announcement delete causing reactions to send streaming updates - Fix announcements container growing too wide and mascot too small - Fix `all_day` being settable when no time range is given - Change text "Update" to "Announcement" * Fix scheduler unpublishing announcements before they are due * Fix filter params not being passed to announcements filter
This commit is contained in:
14
app/views/admin/announcements/_announcement.html.haml
Normal file
14
app/views/admin/announcements/_announcement.html.haml
Normal file
@ -0,0 +1,14 @@
|
||||
%tr
|
||||
%td
|
||||
= truncate(announcement.text)
|
||||
%td
|
||||
= time_range(announcement) if announcement.time_range?
|
||||
%td
|
||||
- if announcement.scheduled_at.present?
|
||||
= fa_icon('clock-o') if announcement.scheduled_at > Time.now.utc
|
||||
= l(announcement.scheduled_at)
|
||||
- else
|
||||
= l(announcement.created_at)
|
||||
%td
|
||||
= table_link_to 'pencil', t('generic.edit'), edit_admin_announcement_path(announcement) if can?(:update, 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)
|
22
app/views/admin/announcements/edit.html.haml
Normal file
22
app/views/admin/announcements/edit.html.haml
Normal file
@ -0,0 +1,22 @@
|
||||
- content_for :page_title do
|
||||
= t('.title')
|
||||
|
||||
= simple_form_for @announcement, url: admin_announcement_path(@announcement) do |f|
|
||||
= render 'shared/error_messages', object: @announcement
|
||||
|
||||
.fields-group
|
||||
= f.input :starts_at, include_blank: true, wrapper: :with_block_label
|
||||
= f.input :ends_at, include_blank: true, wrapper: :with_block_label
|
||||
|
||||
.fields-group
|
||||
= f.input :all_day, as: :boolean, wrapper: :with_label
|
||||
|
||||
.fields-group
|
||||
= f.input :text, wrapper: :with_block_label
|
||||
|
||||
- if @announcement.scheduled_at.present? && !@announcement.published?
|
||||
.fields-group
|
||||
= f.input :scheduled_at, include_blank: true, wrapper: :with_block_label
|
||||
|
||||
.actions
|
||||
= f.button :button, t('generic.save_changes'), type: :submit
|
30
app/views/admin/announcements/index.html.haml
Normal file
30
app/views/admin/announcements/index.html.haml
Normal file
@ -0,0 +1,30 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.announcements.title')
|
||||
|
||||
- content_for :heading_actions do
|
||||
= link_to t('admin.announcements.new.title'), new_admin_announcement_path, class: 'button'
|
||||
|
||||
.filters
|
||||
.filter-subset
|
||||
%strong= t('admin.relays.status')
|
||||
%ul
|
||||
%li= filter_link_to t('generic.all'), published: nil, unpublished: nil
|
||||
%li= filter_link_to safe_join([t('admin.announcements.live'), "(#{number_with_delimiter(Announcement.published.count)})"], ' '), published: '1', unpublished: nil
|
||||
|
||||
- if @announcements.empty?
|
||||
%div.muted-hint.center-text
|
||||
= t 'admin.announcements.empty'
|
||||
- else
|
||||
.table-wrapper
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= t('simple_form.labels.announcement.text')
|
||||
%th= t('admin.announcements.time_range')
|
||||
%th= t('admin.announcements.published')
|
||||
%th
|
||||
%tbody
|
||||
= render partial: 'announcement', collection: @announcements
|
||||
|
||||
= paginate @announcements
|
||||
|
21
app/views/admin/announcements/new.html.haml
Normal file
21
app/views/admin/announcements/new.html.haml
Normal file
@ -0,0 +1,21 @@
|
||||
- content_for :page_title do
|
||||
= t('.title')
|
||||
|
||||
= simple_form_for @announcement, url: admin_announcements_path do |f|
|
||||
= render 'shared/error_messages', object: @announcement
|
||||
|
||||
.fields-group
|
||||
= f.input :starts_at, include_blank: true, wrapper: :with_block_label
|
||||
= f.input :ends_at, include_blank: true, wrapper: :with_block_label
|
||||
|
||||
.fields-group
|
||||
= f.input :all_day, as: :boolean, wrapper: :with_label
|
||||
|
||||
.fields-group
|
||||
= f.input :text, wrapper: :with_block_label
|
||||
|
||||
.fields-group
|
||||
= f.input :scheduled_at, include_blank: true, wrapper: :with_block_label
|
||||
|
||||
.actions
|
||||
= f.button :button, t('.create'), type: :submit
|
Reference in New Issue
Block a user