Merge pull request #2910 from consul/backport-make-admin-notifications-translatable
[Backport] Make admin notifications translatable
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
class Admin::AdminNotificationsController < Admin::BaseController
|
||||
include Translatable
|
||||
|
||||
def index
|
||||
@admin_notifications = AdminNotification.all
|
||||
@@ -62,6 +63,13 @@ class Admin::AdminNotificationsController < Admin::BaseController
|
||||
private
|
||||
|
||||
def admin_notification_params
|
||||
params.require(:admin_notification).permit(:title, :body, :link, :segment_recipient)
|
||||
attributes = [:title, :body, :link, :segment_recipient,
|
||||
*translation_params(AdminNotification)]
|
||||
|
||||
params.require(:admin_notification).permit(attributes)
|
||||
end
|
||||
|
||||
def resource
|
||||
AdminNotification.find(params[:id])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
class AdminNotification < ActiveRecord::Base
|
||||
include Notifiable
|
||||
|
||||
translates :title, touch: :true
|
||||
translates :body, touch: :true
|
||||
globalize_accessors
|
||||
|
||||
validates :title, presence: true
|
||||
validates :body, presence: true
|
||||
validates :segment_recipient, presence: true
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
<%= form_for [:admin, @admin_notification] do |f| %>
|
||||
<%= render "admin/shared/globalize_locales", resource: @admin_notification %>
|
||||
|
||||
<%= translatable_form_for [:admin, @admin_notification] do |f| %>
|
||||
<%= render 'shared/errors', resource: @admin_notification %>
|
||||
|
||||
<%= f.select :segment_recipient, options_for_select(user_segments_options,
|
||||
@admin_notification[:segment_recipient]) %>
|
||||
<%= f.text_field :title %>
|
||||
|
||||
<%= f.translatable_text_field :title %>
|
||||
|
||||
<%= f.text_field :link %>
|
||||
<%= f.text_area :body %>
|
||||
|
||||
<%= f.translatable_text_area :body %>
|
||||
|
||||
<div class="margin-top">
|
||||
<%= f.submit class: "button success" %>
|
||||
<%= f.submit t("admin.admin_notifications.#{admin_submit_action(@admin_notification)}.submit_button"),
|
||||
class: "button success" %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -145,6 +145,7 @@ ignore_unused:
|
||||
- 'admin.settings.index.features.*'
|
||||
- 'admin.polls.*.submit_button'
|
||||
- 'admin.booths.*.submit_button'
|
||||
- 'admin.admin_notifications.*.submit_button'
|
||||
- 'admin.homepage.*'
|
||||
- 'moderation.comments.index.filter*'
|
||||
- 'moderation.comments.index.order*'
|
||||
|
||||
@@ -658,8 +658,10 @@ en:
|
||||
empty_notifications: There are no notifications to show
|
||||
new:
|
||||
section_title: New notification
|
||||
submit_button: Create notification
|
||||
edit:
|
||||
section_title: Edit notification
|
||||
submit_button: Update notification
|
||||
show:
|
||||
section_title: Notification preview
|
||||
send: Send notification
|
||||
|
||||
@@ -659,8 +659,10 @@ es:
|
||||
empty_notifications: No hay notificaciones para mostrar
|
||||
new:
|
||||
section_title: Nueva notificación
|
||||
submit_button: Crear notificación
|
||||
edit:
|
||||
section_title: Editar notificación
|
||||
submit_button: Actualizar notificación
|
||||
show:
|
||||
section_title: Vista previa de notificación
|
||||
send: Enviar notificación
|
||||
|
||||
@@ -1,27 +1,43 @@
|
||||
section "Creating Admin Notifications & Templates" do
|
||||
AdminNotification.create!(
|
||||
title: I18n.t('seeds.admin_notification.internal_link.title'),
|
||||
body: I18n.t('seeds.admin_notification.internal_link.body'),
|
||||
link: Setting['url'] + I18n.t('seeds.admin_notification.internal_link.link'),
|
||||
title_en: 'Do you have a proposal?',
|
||||
title_es: 'Tienes una propuesta?',
|
||||
|
||||
body_en: 'Remember you can create a proposal with your ideas and people will discuss & support it.',
|
||||
body_es: 'Recuerda que puedes crear propuestas y los ciudadanos las debatirán y apoyarán.',
|
||||
|
||||
link: Setting['url'] + '/proposals',
|
||||
segment_recipient: 'administrators'
|
||||
).deliver
|
||||
|
||||
AdminNotification.create!(
|
||||
title: I18n.t('seeds.admin_notification.external_link.title'),
|
||||
body: I18n.t('seeds.admin_notification.external_link.body'),
|
||||
link: I18n.t('seeds.admin_notification.external_link.link'),
|
||||
title_en: 'Help us translate consul',
|
||||
title_es: 'Ayúdanos a traducir CONSUL',
|
||||
|
||||
body_en: 'If you are proficient in a language, please help us translate consul!.',
|
||||
body_es: 'Si dominas un idioma, ayúdanos a completar su traducción en CONSUL.',
|
||||
|
||||
link: 'https://crwd.in/consul',
|
||||
segment_recipient: 'administrators'
|
||||
).deliver
|
||||
|
||||
AdminNotification.create!(
|
||||
title: I18n.t('seeds.admin_notification.without_link.title'),
|
||||
body: I18n.t('seeds.admin_notification.without_link.body'),
|
||||
title_en: 'You can now geolocate proposals & investments',
|
||||
title_es: 'Ahora puedes geolocalizar propuestas y proyectos de inversión',
|
||||
|
||||
body_en: 'When you create a proposal or investment you now can specify a point on a map',
|
||||
body_es: 'Cuando crees una propuesta o proyecto de inversión podrás especificar su localización en el mapa',
|
||||
|
||||
segment_recipient: 'administrators'
|
||||
).deliver
|
||||
|
||||
AdminNotification.create!(
|
||||
title: I18n.t('seeds.admin_notification.not_sent.title'),
|
||||
body: I18n.t('seeds.admin_notification.not_sent.body'),
|
||||
title_en: 'We are closing the Participatory Budget!!',
|
||||
title_es: 'Últimos días para crear proyectos de Presupuestos Participativos',
|
||||
|
||||
body_en: 'Hurry up and create a last proposal before it ends next in few days!',
|
||||
body_es: 'Quedan pocos dias para que se cierre el plazo de presentación de proyectos de inversión para los presupuestos participativos!',
|
||||
|
||||
segment_recipient: 'administrators',
|
||||
sent_at: nil
|
||||
)
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
class AddAdminNotificationTranslations < ActiveRecord::Migration
|
||||
|
||||
def self.up
|
||||
AdminNotification.create_translation_table!(
|
||||
title: :string,
|
||||
body: :text
|
||||
)
|
||||
end
|
||||
|
||||
def self.down
|
||||
AdminNotification.drop_translation_table!
|
||||
end
|
||||
end
|
||||
|
||||
12
db/schema.rb
12
db/schema.rb
@@ -30,6 +30,18 @@ ActiveRecord::Schema.define(version: 20180813141443) do
|
||||
add_index "activities", ["actionable_id", "actionable_type"], name: "index_activities_on_actionable_id_and_actionable_type", using: :btree
|
||||
add_index "activities", ["user_id"], name: "index_activities_on_user_id", using: :btree
|
||||
|
||||
create_table "admin_notification_translations", force: :cascade do |t|
|
||||
t.integer "admin_notification_id", null: false
|
||||
t.string "locale", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "title"
|
||||
t.text "body"
|
||||
end
|
||||
|
||||
add_index "admin_notification_translations", ["admin_notification_id"], name: "index_admin_notification_translations_on_admin_notification_id", using: :btree
|
||||
add_index "admin_notification_translations", ["locale"], name: "index_admin_notification_translations_on_locale", using: :btree
|
||||
|
||||
create_table "admin_notifications", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.text "body"
|
||||
|
||||
@@ -8,6 +8,11 @@ feature "Admin Notifications" do
|
||||
create(:budget)
|
||||
end
|
||||
|
||||
it_behaves_like "translatable",
|
||||
"admin_notification",
|
||||
"edit_admin_admin_notification_path",
|
||||
%w[title body]
|
||||
|
||||
context "Show" do
|
||||
scenario "Valid Admin Notification" do
|
||||
notification = create(:admin_notification, title: 'Notification title',
|
||||
@@ -75,7 +80,7 @@ feature "Admin Notifications" do
|
||||
body: 'This is a body',
|
||||
link: 'http://www.dummylink.dev')
|
||||
|
||||
click_button "Create Admin notification"
|
||||
click_button "Create notification"
|
||||
|
||||
expect(page).to have_content "Notification created successfully"
|
||||
expect(page).to have_content "Proposal authors"
|
||||
@@ -99,7 +104,7 @@ feature "Admin Notifications" do
|
||||
body: 'Other body',
|
||||
link: '')
|
||||
|
||||
click_button "Update Admin notification"
|
||||
click_button "Update notification"
|
||||
|
||||
expect(page).to have_content "Notification updated successfully"
|
||||
expect(page).to have_content "All users"
|
||||
@@ -171,7 +176,7 @@ feature "Admin Notifications" do
|
||||
scenario 'Errors on create' do
|
||||
visit new_admin_admin_notification_path
|
||||
|
||||
click_button "Create Admin notification"
|
||||
click_button "Create notification"
|
||||
|
||||
expect(page).to have_content error_message
|
||||
end
|
||||
@@ -180,8 +185,8 @@ feature "Admin Notifications" do
|
||||
notification = create(:admin_notification)
|
||||
visit edit_admin_admin_notification_path(notification)
|
||||
|
||||
fill_in :admin_notification_title, with: ''
|
||||
click_button "Update Admin notification"
|
||||
fill_in :admin_notification_title_en, with: ''
|
||||
click_button "Update notification"
|
||||
|
||||
expect(page).to have_content error_message
|
||||
end
|
||||
@@ -228,7 +233,7 @@ feature "Admin Notifications" do
|
||||
visit new_admin_admin_notification_path
|
||||
|
||||
fill_in_admin_notification_form(segment_recipient: segment_recipient)
|
||||
click_button "Create Admin notification"
|
||||
click_button "Create notification"
|
||||
|
||||
expect(page).to have_content(I18n.t("admin.segment_recipient.#{user_segment}"))
|
||||
end
|
||||
|
||||
@@ -186,6 +186,8 @@ def update_button_text
|
||||
case translatable_class.name
|
||||
when "Budget::Investment::Milestone"
|
||||
"Update milestone"
|
||||
when "AdminNotification"
|
||||
"Update notification"
|
||||
else
|
||||
"Save changes"
|
||||
end
|
||||
|
||||
@@ -43,8 +43,8 @@ module Notifications
|
||||
|
||||
def fill_in_admin_notification_form(options = {})
|
||||
select (options[:segment_recipient] || 'All users'), from: :admin_notification_segment_recipient
|
||||
fill_in :admin_notification_title, with: (options[:title] || 'This is the notification title')
|
||||
fill_in :admin_notification_body, with: (options[:body] || 'This is the notification body')
|
||||
fill_in :admin_notification_title_en, with: (options[:title] || 'This is the notification title')
|
||||
fill_in :admin_notification_body_en, with: (options[:body] || 'This is the notification body')
|
||||
fill_in :admin_notification_link, with: (options[:link] || 'https://www.decide.madrid.es/vota')
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user