Skip to content

Commit

Permalink
An option for Admin users to destroy messageboards from the UI (#826)
Browse files Browse the repository at this point in the history
  • Loading branch information
shelmire authored and glebm committed Aug 12, 2019
1 parent 7c50e7f commit 8b2cda3
Show file tree
Hide file tree
Showing 19 changed files with 160 additions and 3 deletions.
4 changes: 4 additions & 0 deletions app/assets/stylesheets/thredded/components/_messageboard.scss
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@
margin-bottom: 0;
}

.thredded--messageboard--delete {
background-color: $thredded-alert-danger-color;
}

.thredded--messageboards--actions {
@extend %thredded--buttons-list;
@media print {
Expand Down
11 changes: 9 additions & 2 deletions app/controllers/thredded/messageboards_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

module Thredded
class MessageboardsController < Thredded::ApplicationController
before_action :thredded_require_login!, only: %i[new create edit update]
before_action :thredded_require_login!, only: %i[new create edit update destroy]

after_action :verify_authorized, except: %i[index]
after_action :verify_policy_scoped, except: %i[new create edit update]
after_action :verify_policy_scoped, except: %i[new create edit update destroy]

def index
@groups = Thredded::MessageboardGroupView.grouped(
Expand Down Expand Up @@ -44,6 +44,13 @@ def update
end
end

def destroy
@messageboard = Thredded::Messageboard.friendly_find!(params[:id])
authorize @messageboard, :destroy?
@messageboard.destroy!
redirect_to root_path, notice: t('thredded.messageboard.deleted_notice')
end

private

def messageboard_params
Expand Down
4 changes: 4 additions & 0 deletions app/policies/thredded/messageboard_policy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ def update?
@user.thredded_admin?
end

def destroy?
@user.thredded_admin?
end

def post?
@user.thredded_admin? ||
(!@messageboard.locked? || moderate?) &&
Expand Down
8 changes: 8 additions & 0 deletions app/views/thredded/messageboards/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,11 @@
</li>
</ul>
<% end %>
<% if messageboard.persisted? and Thredded.show_messageboard_delete_button %>
<%= button_to t('thredded.messageboard.form.delete'),
messageboard_path(messageboard),
method: 'delete',
class: 'thredded--messageboard--delete',
form_class: 'thredded--form',
data: {confirm: t('thredded.messageboard.form.delete_confirm', messageboard_name: messageboard.name)}%>
<% end %>
5 changes: 5 additions & 0 deletions config/locales/de.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,13 @@ de:
update_btn_submitting: Änderungen übernehmen...
messageboard:
create: Erstelle ein neues Forum
deleted_notice: Messageboard gelöscht
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Messageboard löschen
delete_confirm: >-
Dadurch werden das Messageboard %{messageboard_name} und alle zugehörigen Posts entfernt. Sie können es
nicht wiederherstellen. Möchten Sie das wirklich tun?
description_label: Beschreibung
locked_label: Geschlossen
locked_notice: Dieses Forum ist geschlossen. Nur Moderatoren können hier neue Beiträge erstellen.
Expand Down
5 changes: 5 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,13 @@ en:
update_btn_submitting: Updating...
messageboard:
create: Create a New Messageboard
deleted_notice: Messageboard deleted
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Delete Messageboard
delete_confirm: >-
This will remove the messageboard %{messageboard_name} and all of its posts. You will not be able to recover
it. Are you sure you want to do this?
description_label: Description
locked_label: Locked
locked_notice: This messageboard is locked. Only moderators can create new topics here.
Expand Down
5 changes: 5 additions & 0 deletions config/locales/es.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,13 @@ es:
update_btn_submitting: Actualizando...
messageboard:
create: Crear un nuevo foro
deleted_notice: Tablero de mensajes eliminado
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Eliminar tablero de mensajes
delete_confirm: >-
Esto eliminará el tablero de mensajes %{messageboard_name} y todas sus publicaciones. No podrás recuperarlo.
¿Seguro que quieres hacer esto?
description_label: Descripción
locked_label: Bloqueado
locked_notice: Este mensaje está bloqueado. Solo los moderadores pueden crear nuevos temas aquí.
Expand Down
5 changes: 5 additions & 0 deletions config/locales/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,13 @@ fr:
update_btn_submitting: Mise à jour en cours...
messageboard:
create: Créer une nouvelle catégorie
deleted_notice: Messageboard supprimé
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Supprimer le babillard
delete_confirm: >-
Cela supprimera le panneau de messages %{messageboard_name} et tous ses messages. Vous ne pourrez pas
le récupérer. Es-tu sûr de vouloir faire ça?
description_label: Description
locked_label: Verrouillé
locked_notice: Ce message est verrouillé. Seuls les modérateurs peuvent créer de nouveaux sujets ici.
Expand Down
5 changes: 5 additions & 0 deletions config/locales/it.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,13 @@ it:
update_btn_submitting: Aggiornamento in corso...
messageboard:
create: Crea una nuova bacheca
deleted_notice: Messageboard cancellato
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Elimina bacheca
delete_confirm: >-
Ciò rimuoverà la bacheca %{messageboard_name} e tutti i suoi post. Non sarai in grado di recuperarlo.
Sei sicuro di volerlo fare?
description_label: Descrizione
locked_label: Bloccato
locked_notice: Questa bacheca è bloccata. Solo i moderatori possono creare nuove discussioni qui.
Expand Down
5 changes: 5 additions & 0 deletions config/locales/pl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,13 @@ pl:
update_btn_submitting: Aktualizowanie...
messageboard:
create: Stwórz nową tablicę
deleted_notice: Tablica ogłoszeń została usunięta
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Usuń tablicę wiadomości
delete_confirm: >-
Spowoduje to usunięcie tablicy %{messageboard_name} i wszystkich jej postów. Nie będziesz w stanie go
odzyskać. Czy na pewno chcesz to zrobić?
description_label: Opis
locked_label: Zablokowany
locked_notice: Ta wiadomość jest zablokowana. Tylko moderatorzy mogą tworzyć nowe tematy tutaj.
Expand Down
5 changes: 5 additions & 0 deletions config/locales/pt-BR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,13 @@ pt-BR:
update_btn_submitting: Atualizando...
messageboard:
create: Criar um novo Fórum de Mensagem
deleted_notice: Messageboard excluído
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Excluir Messageboard
delete_confirm: >-
Isto irá remover o messageboard %{messageboard_name} e todos os seus posts. Você não poderá recuperá-lo.
Você tem certeza de que quer fazer isso?
description_label: Descrição
locked_label: Bloqueado
locked_notice: Este quadro de mensagens está bloqueado. Somente os moderadores podem criar novos tópicos
Expand Down
5 changes: 5 additions & 0 deletions config/locales/ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,13 @@ ru:
update_btn_submitting: Обновляю...
messageboard:
create: Создать форум
deleted_notice: Доска объявлений удалена
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: Удалить доску объявлений
delete_confirm: >-
Это удалит доску сообщений %{messageboard_name} и все ее сообщения. Вы не сможете его восстановить. Вы
уверены, что хотите это сделать?
description_label: Описание
locked_label: Заблокировать
locked_notice: Этот форум заблокирован. Только модераторы могут создавать новые темы здесь.
Expand Down
3 changes: 3 additions & 0 deletions config/locales/zh-CN.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,11 @@ zh-CN:
update_btn_submitting: 更新中...
messageboard:
create: 创建一个新板块
deleted_notice: 留言板已删除
form:
create_btn_submitting: :thredded.form.create_btn_submitting
delete: 删除留言板
delete_confirm: 这将删除留言板%{messageboard_name}及其所有帖子。你将无法恢复它。你确定你要这么做吗?
description_label: 描述
locked_label: 锁定
locked_notice: 这个消息板被锁定。只有版主可以在这里创建新的主题。
Expand Down
2 changes: 1 addition & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@

resource :preferences, only: %i[edit update], as: :global_preferences
resource :messageboard, path: 'messageboards', only: [:new]
resources :messageboards, only: %i[edit update]
resources :messageboards, only: %i[edit update destroy]
resources :messageboards, only: %i[index create], path: '' do
resource :preferences, only: %i[edit update]
resource :topic, path: 'topics', only: [:new] do
Expand Down
3 changes: 3 additions & 0 deletions lib/generators/thredded/install/templates/initializer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@
# :topics_count_desc most topics first
Thredded.messageboards_order = :position

# Whether admin users see button to delete entire messageboards on the messageboard edit page.
Thredded.show_messageboard_delete_button = false

# Whether users that are following a topic are listed on the topic page.
Thredded.show_topic_followers = false

Expand Down
4 changes: 4 additions & 0 deletions lib/thredded.rb
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ class << self
# @return [Symbol] The name of the moderator flag column on the users table for the default permissions model
attr_accessor :moderator_column

# @return [Boolean] Whether admin users see button to delete entire messageboards on the messageboard edit page.
attr_accessor :show_messageboard_delete_button

#== UI

# @return [String] The layout to use for rendering Thredded views.
Expand Down Expand Up @@ -271,6 +274,7 @@ def rails_supports_csp_nonce?

self.content_visible_while_pending_moderation = true
self.moderator_column = :admin
self.show_messageboard_delete_button = false

self.layout = 'thredded/application'

Expand Down
1 change: 1 addition & 0 deletions spec/dummy/config/initializers/thredded.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
Thredded.moderator_column = :admin
Thredded.admin_column = :admin
Thredded.content_visible_while_pending_moderation = true
Thredded.show_messageboard_delete_button = false
Thredded.parent_mailer = 'ApplicationMailer'
Thredded::ContentFormatter.after_markup_filters.insert(1, HTMLPipelineTwemoji)

Expand Down
48 changes: 48 additions & 0 deletions spec/features/thredded/user_deletes_messageboard_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# frozen_string_literal: true

require 'spec_helper'

RSpec.feature 'Deleting a messageboard' do
describe 'with show_messageboard_delete_button set to true', js: true do
around do |example|
with_thredded_setting(:show_messageboard_delete_button, true, &example)
end

it 'succeeds' do
messageboard = a_messageboard
user = an_admin
user.log_in
messageboard.visit_messageboard_edit
expect(messageboard).to be_deletable

messageboard.delete

expect(messageboard).to have_redirected_after_delete
expect(messageboard).not_to be_listed
end
end

describe 'with show_messageboard_delete_button set to false' do
around do |example|
with_thredded_setting(:show_messageboard_delete_button, false, &example)
end

it 'does not have delete button' do
messageboard = a_messageboard
user = an_admin
user.log_in
messageboard.visit_messageboard_edit

expect(messageboard).not_to be_deletable
end
end

def an_admin
PageObject::User.new(create(:user, name: 'joe-admin', admin: true))
end

def a_messageboard
messageboard = create(:messageboard)
PageObject::MessageBoard.new(messageboard)
end
end
35 changes: 35 additions & 0 deletions spec/support/features/page_object/messageboard.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# frozen_string_literal: true

require 'support/features/page_object/base'

module PageObject
class MessageBoard < Base
attr_accessor :messageboard

def initialize(messageboard)
@messageboard = messageboard
end

def listed?
has_content? @messageboard.name
end

def deletable?
has_button? I18n.t('thredded.messageboard.form.delete')
end

def delete
accept_confirm do
click_button I18n.t('thredded.messageboard.form.delete')
end
end

def visit_messageboard_edit
visit edit_messageboard_path(@messageboard)
end

def has_redirected_after_delete?
has_content?(I18n.t('thredded.messageboard.deleted_notice'))
end
end
end

0 comments on commit 8b2cda3

Please sign in to comment.