Add Admin System Emails view & first system email
Admins need to be able to see what a particular System Email looks like with dummy data. Also adding the first system email to be managed: the proposal notification digest. In case the current admin doesn't have any Notifications from ProposalNotifications there will be a crash. We'll solve this in later PR's with a system to "inject" sample text in email templates without having to generate records in the database.
This commit is contained in:
@@ -1,7 +1,22 @@
|
|||||||
class Admin::SystemEmailsController < Admin::BaseController
|
class Admin::SystemEmailsController < Admin::BaseController
|
||||||
|
|
||||||
|
before_action :load_system_email, only: [:view]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@system_emails = %w(proposal_notification_digest)
|
@system_emails = %w(proposal_notification_digest)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def view
|
||||||
|
case @system_email
|
||||||
|
when "proposal_notification_digest"
|
||||||
|
@notifications = Notification.where(notifiable_type: "ProposalNotification").limit(2)
|
||||||
|
@subject = t('mailers.proposal_notification_digest.title', org_name: Setting['org_name'])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def load_system_email
|
||||||
|
@system_email = params[:system_email_id]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -20,8 +20,6 @@
|
|||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<%= link_to t("admin.shared.view"), admin_system_email_view_path(system_email),
|
<%= link_to t("admin.shared.view"), admin_system_email_view_path(system_email),
|
||||||
class: "button hollow" %>
|
class: "button hollow" %>
|
||||||
<%= link_to t("admin.shared.preview"), admin_system_email_preview_path(system_email),
|
|
||||||
class: "button" %>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
36
app/views/admin/system_emails/view.html.erb
Normal file
36
app/views/admin/system_emails/view.html.erb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<%= back_link_to admin_system_emails_path %>
|
||||||
|
|
||||||
|
<h2><%= t("admin.system_emails.#{@system_email}.title") %></h2>
|
||||||
|
|
||||||
|
<div class="small-12 column">
|
||||||
|
<div class="callout highlight">
|
||||||
|
<div class="row">
|
||||||
|
<div class="small-12 medium-4 column">
|
||||||
|
<strong><%= t("admin.newsletters.show.from") %></strong><br>
|
||||||
|
<%= Setting['mailer_from_address'] %>
|
||||||
|
</div>
|
||||||
|
<div class="small-12 medium-8 column">
|
||||||
|
<strong><%= t("admin.newsletters.show.subject") %></strong><br>
|
||||||
|
<%= @subject %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<strong><%= t("admin.newsletters.show.body") %></strong>
|
||||||
|
<p class="help-text" id="phase-description-help-text">
|
||||||
|
<%= t("admin.newsletters.show.body_help_text") %>
|
||||||
|
</p>
|
||||||
|
<div class="newsletter-body-content">
|
||||||
|
<%= render file: "app/views/layouts/_mailer_header.html.erb" %>
|
||||||
|
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0" style="background: #fff; margin: 0 auto; max-width: 700px; width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<%= render file: "app/views/mailer/#{@system_email}.html.erb" %>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%= render file: "app/views/layouts/_mailer_footer.html.erb" %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -53,18 +53,3 @@ en:
|
|||||||
recounting_poll: "Recounting Poll"
|
recounting_poll: "Recounting Poll"
|
||||||
expired_poll_without_stats: "Expired Poll without Stats & Results"
|
expired_poll_without_stats: "Expired Poll without Stats & Results"
|
||||||
expired_poll_with_stats: "Expired Poll with Stats & Results"
|
expired_poll_with_stats: "Expired Poll with Stats & Results"
|
||||||
admin_notifications:
|
|
||||||
internal_link:
|
|
||||||
title: 'Do you have a proposal?'
|
|
||||||
body: 'Remember you can create a proposal with your ideas and people will discuss & support it.'
|
|
||||||
link: '/proposals'
|
|
||||||
external_link:
|
|
||||||
title: Help us translate consul
|
|
||||||
body: 'If you are proficient in a language, please help us translate consul!.'
|
|
||||||
link: 'https://crwd.in/consul'
|
|
||||||
without_link:
|
|
||||||
title: 'You can now geolocate proposals & investments'
|
|
||||||
body: 'When you create a proposal or investment you now can specify a point on a map'
|
|
||||||
not_sent:
|
|
||||||
title: 'We are closing the Participatory Budget!!'
|
|
||||||
body: 'Hurry up and create a last proposal before it ends next in few days!'
|
|
||||||
|
|||||||
@@ -53,18 +53,3 @@ es:
|
|||||||
recounting_poll: "Votación en Recuento"
|
recounting_poll: "Votación en Recuento"
|
||||||
expired_poll_without_stats: "Votación Finalizada (sin Estadísticas o Resultados)"
|
expired_poll_without_stats: "Votación Finalizada (sin Estadísticas o Resultados)"
|
||||||
expired_poll_with_stats: "Votación Finalizada (con Estadísticas y Resultado)"
|
expired_poll_with_stats: "Votación Finalizada (con Estadísticas y Resultado)"
|
||||||
admin_notifications:
|
|
||||||
internal_link:
|
|
||||||
title: 'Tienes una propuesta?'
|
|
||||||
body: 'Recuerda que puedes crear propuestas y los ciudadanos las debatirán y apoyarán.'
|
|
||||||
link: '/proposals'
|
|
||||||
external_link:
|
|
||||||
title: 'Ayúdanos a traducir CONSUL'
|
|
||||||
body: 'Si dominas un idioma, ayúdanos a completar su traducción en CONSUL.'
|
|
||||||
link: 'https://crwd.in/consul'
|
|
||||||
without_link:
|
|
||||||
title: 'Ahora puedes geolocalizar propuestas y proyectos de inversión'
|
|
||||||
body: 'Cuando crees una propuesta o proyecto de inversión podrás especificar su localización en el mapa'
|
|
||||||
not_sent:
|
|
||||||
title: 'Últimos días para crear proyectos de Presupuestos Participativos'
|
|
||||||
body: 'Quedan pocos dias para que se cierre el plazo de presentación de proyectos de inversión para los presupuestos participativos!'
|
|
||||||
|
|||||||
@@ -167,7 +167,6 @@ namespace :admin do
|
|||||||
|
|
||||||
resources :system_emails, only: [:index] do
|
resources :system_emails, only: [:index] do
|
||||||
get :view
|
get :view
|
||||||
get :preview
|
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :emails_download, only: :index do
|
resources :emails_download, only: :index do
|
||||||
|
|||||||
43
spec/features/admin/system_emails_spec.rb
Normal file
43
spec/features/admin/system_emails_spec.rb
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
feature "System Emails" do
|
||||||
|
|
||||||
|
background do
|
||||||
|
admin = create(:administrator)
|
||||||
|
login_as(admin.user)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Index" do
|
||||||
|
scenario "Lists all system emails with correct actions" do
|
||||||
|
visit admin_system_emails_path
|
||||||
|
|
||||||
|
within('#proposal_notification_digest') do
|
||||||
|
expect(page).to have_link('View')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "View" 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')
|
||||||
|
notification_a = create(:notification, notifiable: proposal_notification_a)
|
||||||
|
notification_b = create(:notification, notifiable: proposal_notification_b)
|
||||||
|
|
||||||
|
visit admin_system_email_view_path('proposal_notification_digest')
|
||||||
|
|
||||||
|
expect(page).to have_content('Proposal notifications in')
|
||||||
|
expect(page).to have_link('Proposal A Title', href: notification_url(notification_a))
|
||||||
|
expect(page).to have_link('Proposal B Title', href: notification_url(notification_b))
|
||||||
|
expect(page).to have_content('Proposal A Notification Body')
|
||||||
|
expect(page).to have_content('Proposal B Notification Body')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user