Add Preview Pending action to Admin System Emails
Some system emails need to be manually reviewed before being sent. This new action allows admins to see a preview of all Pending to be sent Proposal Notification Digest messages.
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
class Admin::SystemEmailsController < Admin::BaseController
|
||||
|
||||
before_action :load_system_email, only: [:view]
|
||||
before_action :load_system_email, only: [:view, :preview_pending]
|
||||
|
||||
def index
|
||||
@system_emails = %w(proposal_notification_digest)
|
||||
@system_emails = {
|
||||
proposal_notification_digest: %w(view preview_pending)
|
||||
}
|
||||
end
|
||||
|
||||
def view
|
||||
@@ -14,9 +16,22 @@ class Admin::SystemEmailsController < Admin::BaseController
|
||||
end
|
||||
end
|
||||
|
||||
def preview_pending
|
||||
case @system_email
|
||||
when "proposal_notification_digest"
|
||||
@previews = ProposalNotification.where(id: unsent_proposal_notifications_ids)
|
||||
.page(params[:page])
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_system_email
|
||||
@system_email = params[:system_email_id]
|
||||
end
|
||||
|
||||
def unsent_proposal_notifications_ids
|
||||
Notification.where(notifiable_type: "ProposalNotification", emailed_at: nil)
|
||||
.group(:notifiable_id).count.keys
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,17 +9,24 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @system_emails.each do |system_email| %>
|
||||
<tr id="<%= system_email %>" class="system_email">
|
||||
<% @system_emails.each do |system_email_title, system_email_actions| %>
|
||||
<tr id="<%= system_email_title %>" class="system_email">
|
||||
<td>
|
||||
<%= t("admin.system_emails.#{system_email}.title") %>
|
||||
<%= t("admin.system_emails.#{system_email_title}.title") %>
|
||||
</td>
|
||||
<td>
|
||||
<%= t("admin.system_emails.#{system_email}.description") %>
|
||||
<%= t("admin.system_emails.#{system_email_title}.description") %>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<%= link_to t("admin.shared.view"), admin_system_email_view_path(system_email),
|
||||
class: "button hollow" %>
|
||||
<% if system_email_actions.include?('view') %>
|
||||
<%= link_to t("admin.shared.view"), admin_system_email_view_path(system_email_title),
|
||||
class: "button hollow" %>
|
||||
<% end %>
|
||||
<% if system_email_actions.include?('preview_pending') %>
|
||||
<%= link_to t("admin.system_emails.preview_pending.action"),
|
||||
admin_system_email_preview_pending_path(system_email_title),
|
||||
class: "button" %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
16
app/views/admin/system_emails/preview_pending.html.erb
Normal file
16
app/views/admin/system_emails/preview_pending.html.erb
Normal file
@@ -0,0 +1,16 @@
|
||||
<%= back_link_to admin_system_emails_path %>
|
||||
|
||||
<% system_email_name = t("admin.system_emails.#{@system_email}.title") %>
|
||||
<h2><%= t("admin.system_emails.preview_pending.preview_of", name: system_email_name) %></h2>
|
||||
|
||||
<div class="small-12 column">
|
||||
<h4><%= t("admin.system_emails.preview_pending.pending_to_be_sent") %></h4>
|
||||
<p><%= t("admin.system_emails.#{@system_email}.preview_detail") %></p>
|
||||
|
||||
<% @previews.each do |preview| %>
|
||||
<%= render partial: "admin/system_emails/preview_pending/#{@system_email}",
|
||||
locals: { preview: preview } %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= paginate @previews %>
|
||||
@@ -0,0 +1,33 @@
|
||||
<% if preview.proposal.present? %>
|
||||
<div class="callout highlight">
|
||||
<div class="row">
|
||||
<div class="small-12 medium-6 column">
|
||||
<strong><%= t("admin.shared.proposal") %></strong><br>
|
||||
<%= link_to preview.proposal.title, proposal_url(preview.proposal) %>
|
||||
</div>
|
||||
<div class="small-12 medium-6 column">
|
||||
<strong><%= t("admin.shared.title") %></strong><br>
|
||||
<%= link_to preview.title, proposal_url(preview.proposal, anchor: "tab-notifications") %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="small-12 medium-6 column">
|
||||
<strong><%= t("admin.shared.author") %></strong><br>
|
||||
<%= preview.proposal.author&.username || '-' %>
|
||||
</div>
|
||||
<div class="small-12 medium-6 column">
|
||||
<strong><%= t("admin.shared.created_at") %></strong><br>
|
||||
<%= l(preview.created_at, format: :datetime) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<strong><%= t("admin.shared.content") %></strong>
|
||||
<p class="help-text" id="phase-description-help-text">
|
||||
<%= preview.body %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -651,9 +651,14 @@ en:
|
||||
sent_guide: "This is how the users see the notification:"
|
||||
send_alert: Are you sure you want to send this notification to %{n} users?
|
||||
system_emails:
|
||||
preview_pending:
|
||||
action: Preview Pending
|
||||
preview_of: Preview of %{name}
|
||||
pending_to_be_sent: This is the content pending to be sent
|
||||
proposal_notification_digest:
|
||||
title: Proposal Notification Digest
|
||||
description: Gathers all proposal notifications for an user in a single message, to avoid too much emails.
|
||||
preview_detail: Users will only recieve notifications from the proposals they are following
|
||||
emails_download:
|
||||
index:
|
||||
title: Emails download
|
||||
@@ -1051,7 +1056,10 @@ en:
|
||||
show_image: Show image
|
||||
moderated_content: "Check the content moderated by the moderators, and confirm if the moderation has been done correctly."
|
||||
view: View
|
||||
preview: Preview
|
||||
proposal: Proposal
|
||||
author: Author
|
||||
content: Content
|
||||
created_at: Created at
|
||||
spending_proposals:
|
||||
index:
|
||||
geozone_filter_all: All zones
|
||||
|
||||
@@ -652,9 +652,14 @@ es:
|
||||
sent_guide: "Así es como los usuarios ven la notificación:"
|
||||
send_alert: ¿Estás seguro/a de que quieres enviar esta notificación a %{n} usuarios?
|
||||
system_emails:
|
||||
preview_pending:
|
||||
action: Previsualizar Pendientes
|
||||
preview_of: Vista previa de %{name}
|
||||
pending_to_be_sent: Este es todo el contenido pendiente de enviar
|
||||
proposal_notification_digest:
|
||||
title: Resumen de Notificationes de Propuestas
|
||||
description: Reune todas las notificaciones de propuestas en un único mensaje, para evitar demasiados emails.
|
||||
preview_detail: Los usuarios sólo recibirán las notificaciones de aquellas propuestas que siguen.
|
||||
emails_download:
|
||||
index:
|
||||
title: Descarga de emails
|
||||
@@ -1052,7 +1057,10 @@ es:
|
||||
show_image: Mostrar imagen
|
||||
moderated_content: "Revisa el contenido moderado por los moderadores, y confirma si la moderación se ha realizado correctamente."
|
||||
view: Ver
|
||||
preview: Previsualizar
|
||||
proposal: Propuesta
|
||||
author: Autor
|
||||
content: Contenido
|
||||
created_at: Fecha de creación
|
||||
spending_proposals:
|
||||
index:
|
||||
geozone_filter_all: Todos los ámbitos de actuación
|
||||
|
||||
@@ -167,6 +167,7 @@ namespace :admin do
|
||||
|
||||
resources :system_emails, only: [:index] do
|
||||
get :view
|
||||
get :preview_pending
|
||||
end
|
||||
|
||||
resources :emails_download, only: :index do
|
||||
|
||||
@@ -40,4 +40,29 @@ feature "System Emails" do
|
||||
end
|
||||
end
|
||||
|
||||
context "Preview Pending" do
|
||||
scenario "#proposal_notification_digest" do
|
||||
proposal_a = create(:proposal, title: 'Proposal A')
|
||||
proposal_b = create(:proposal, title: 'Proposal B')
|
||||
proposal_notification_a = create(:proposal_notification, proposal: proposal_a,
|
||||
title: 'Proposal A Title',
|
||||
body: 'Proposal A Notification Body')
|
||||
proposal_notification_b = create(:proposal_notification, proposal: proposal_b,
|
||||
title: 'Proposal B Title',
|
||||
body: 'Proposal B Notification Body')
|
||||
create(:notification, notifiable: proposal_notification_a, emailed_at: nil)
|
||||
create(:notification, notifiable: proposal_notification_b, emailed_at: nil)
|
||||
|
||||
visit admin_system_email_preview_pending_path('proposal_notification_digest')
|
||||
|
||||
expect(page).to have_content('This is the content pending to be sent')
|
||||
expect(page).to have_link('Proposal A', href: proposal_url(proposal_a))
|
||||
expect(page).to have_link('Proposal B', href: proposal_url(proposal_b))
|
||||
expect(page).to have_link('Proposal A Title', href: proposal_url(proposal_a,
|
||||
anchor: 'tab-notifications'))
|
||||
expect(page).to have_link('Proposal B Title', href: proposal_url(proposal_b,
|
||||
anchor: 'tab-notifications'))
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user