Mails de refus d'évt envoyés au soumetteur et aux modérateurs
This commit is contained in:
parent
026aa24e8f
commit
dbf2362399
@ -1,3 +1,5 @@
|
|||||||
# Place all the behaviors and hooks related to the matching controller here.
|
$(document).ready ->
|
||||||
# All this logic will automatically be available in application.js.
|
$('body.moderations .field.closer input[type=radio]').click ->
|
||||||
# You can use CoffeeScript in this file: http://coffeescript.org/
|
$('body.moderations #reason_text').parent().slideUp()
|
||||||
|
$('body.moderations .field.opener input[type=radio]').click ->
|
||||||
|
$('body.moderations #reason_text').parent().slideDown()
|
||||||
|
@ -115,7 +115,7 @@ body.events.index table
|
|||||||
float: right
|
float: right
|
||||||
width: 15em
|
width: 15em
|
||||||
border: 1px solid #96CFFF
|
border: 1px solid #96CFFF
|
||||||
margin: 5em 1.2em 0px
|
margin: 0 1.2em
|
||||||
padding: 5px
|
padding: 5px
|
||||||
font-size: 0.7em
|
font-size: 0.7em
|
||||||
background-color: #D6ECFF
|
background-color: #D6ECFF
|
||||||
|
@ -57,7 +57,13 @@ class ModerationsController < ApplicationController
|
|||||||
def destroy
|
def destroy
|
||||||
if @moderation.destroy
|
if @moderation.destroy
|
||||||
# Send a notification to its author
|
# Send a notification to its author
|
||||||
@reason = 'pas cool'
|
if params[:reason] == 'r_4'
|
||||||
|
@reason = params[:reason_text]
|
||||||
|
else
|
||||||
|
@reason = t("reason_#{params[:reason]}_long", scope: [:moderations, :refuse])
|
||||||
|
end
|
||||||
|
|
||||||
|
EventMailer.destroy(@moderation, current_user, @reason).deliver
|
||||||
ModerationMailer.destroy(@moderation, current_user, @reason).deliver
|
ModerationMailer.destroy(@moderation, current_user, @reason).deliver
|
||||||
end
|
end
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
class EventMailer < ActionMailer::Base
|
class EventMailer < ActionMailer::Base
|
||||||
default from: 'moderateurs@agendadulibre.org'
|
|
||||||
|
|
||||||
def create(event)
|
def create(event)
|
||||||
@event = event
|
@event = event
|
||||||
|
|
||||||
@ -13,8 +11,18 @@ class EventMailer < ActionMailer::Base
|
|||||||
@event = event
|
@event = event
|
||||||
@current_user = current_user
|
@current_user = current_user
|
||||||
|
|
||||||
mail 'Message-ID' => "<event-#{event.id}@#{ActionMailer::Base.default_url_options[:host]}>",
|
mail 'In-Reply-To' => "<event-#{event.id}@#{ActionMailer::Base.default_url_options[:host]}>",
|
||||||
to: event.contact,
|
to: event.contact,
|
||||||
subject: t('event_mailer.accept.subject', subject: event.title)
|
subject: t('event_mailer.accept.subject', subject: event.title)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def destroy(event, current_user, reason)
|
||||||
|
@event = event
|
||||||
|
@current_user = current_user
|
||||||
|
@reason = reason
|
||||||
|
|
||||||
|
mail 'In-Reply-To' => "<event-#{event.id}@#{ActionMailer::Base.default_url_options[:host]}>",
|
||||||
|
to: event.contact,
|
||||||
|
subject: t('event_mailer.destroy.subject', subject: event.title)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
class ModerationMailer < ActionMailer::Base
|
class ModerationMailer < ActionMailer::Base
|
||||||
default from: 'moderateurs@agendadulibre.org'
|
|
||||||
default to: 'moderateurs@agendadulibre.org'
|
|
||||||
|
|
||||||
def create(event)
|
def create(event)
|
||||||
@event = event
|
@event = event
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
class NoteMailer < ActionMailer::Base
|
class NoteMailer < ActionMailer::Base
|
||||||
default from: 'moderateurs@agendadulibre.org'
|
|
||||||
|
|
||||||
def create(note)
|
def create(note)
|
||||||
@note = note
|
@note = note
|
||||||
|
|
||||||
|
23
app/views/event_mailer/destroy.text.haml
Normal file
23
app/views/event_mailer/destroy.text.haml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
=t '.title'
|
||||||
|
\
|
||||||
|
=t '.body', author: @current_user
|
||||||
|
\
|
||||||
|
= @reason
|
||||||
|
\
|
||||||
|
=t '.reclamation'
|
||||||
|
\
|
||||||
|
=t '.reminder'
|
||||||
|
=====================================================
|
||||||
|
#{Event.human_attribute_name :title}: #{@event.title}
|
||||||
|
#{Event.human_attribute_name :start_time}: #{l @event.start_time, format: :at}
|
||||||
|
#{Event.human_attribute_name :end_time}: #{l @event.end_time, format: :at}
|
||||||
|
#{Event.human_attribute_name :region}: #{@event.region}
|
||||||
|
#{Event.human_attribute_name :city}: #{@event.city}
|
||||||
|
#{Event.human_attribute_name :url}: #{@event.url}
|
||||||
|
#{Event.human_attribute_name :contact}: #{@event.contact}
|
||||||
|
#{Event.human_attribute_name :submitter}: #{@event.submitter}
|
||||||
|
#{Event.human_attribute_name :tags}: #{@event.tags}
|
||||||
|
#{Event.human_attribute_name :description}: #{raw @event.description}
|
||||||
|
=====================================================
|
||||||
|
\
|
||||||
|
=t '.signature'
|
@ -1,6 +1,6 @@
|
|||||||
=t '.title'
|
=t '.title'
|
||||||
\
|
\
|
||||||
=t '.body', author: @current_user
|
=t '.body', subject: @event.title, author: @current_user
|
||||||
\
|
\
|
||||||
= @reason
|
= @reason
|
||||||
\
|
\
|
||||||
|
@ -6,21 +6,28 @@
|
|||||||
.box
|
.box
|
||||||
%h2=t '.question'
|
%h2=t '.question'
|
||||||
|
|
||||||
= form_for @moderation, method: :delete do |f|
|
= form_tag moderation_path(@moderation), method: :delete do |f|
|
||||||
.field
|
.field.closer(title="#{t '.reason_r_1_long'}")
|
||||||
= radio_button_tag :event, :contents_1, {}, value: t('.contents_1_long')
|
= radio_button_tag :reason, :r_1, params[:event] == 'reason_r_1'
|
||||||
= label_tag :event_contents_1, t('.contents_1')
|
= label_tag :reason_r_1, t('.reason_r_1')
|
||||||
.field
|
|
||||||
= radio_button_tag :event, :contents_2, {}, value: t('.contents_2_long')
|
|
||||||
= label_tag :event_contents_2, t('.contents_2')
|
|
||||||
.field
|
|
||||||
= radio_button_tag :event, :contents_3, {}, value: t('.contents_3_long')
|
|
||||||
= label_tag :event_contents_3, t('.contents_3')
|
|
||||||
.field
|
|
||||||
= radio_button_tag :event, :contents_4, {}, value: t('.contents_4_long')
|
|
||||||
= label_tag :event_contents_4, t('.contents_4')
|
|
||||||
|
|
||||||
= f.submit t('.ok')
|
.field.closer(title="#{t '.reason_r_2_long'}")
|
||||||
|
= radio_button_tag :reason, :r_2, params[:event] == 'reason_r_2'
|
||||||
|
= label_tag :reason_r_2, t('.reason_r_2')
|
||||||
|
|
||||||
|
.field.closer(title="#{t '.reason_r_3_long'}")
|
||||||
|
= radio_button_tag :reason, :r_3, params[:event] == 'reason_r_3'
|
||||||
|
= label_tag :reason_r_3, t('.reason_r_3')
|
||||||
|
|
||||||
|
.field.opener(title="#{t '.reason_r_4_long'}")
|
||||||
|
= radio_button_tag :reason, :r_4, params[:event] == 'reason_r_4' || !params[:event]
|
||||||
|
= label_tag :reason_r_4, t('.reason_r_4')
|
||||||
|
|
||||||
|
.field
|
||||||
|
= label_tag :reason_text, t('.reason_text')
|
||||||
|
= text_area_tag :reason_text, nil, cols: 40, rows: 5
|
||||||
|
|
||||||
|
= submit_tag t '.ok'
|
||||||
= link_to t('.ko'), moderations_url, class: :button
|
= link_to t('.ko'), moderations_url, class: :button
|
||||||
|
|
||||||
.box= render file: '/events/show'
|
.box= render file: '/events/show'
|
||||||
|
@ -24,6 +24,8 @@ module AgendaDuLibreRails
|
|||||||
|
|
||||||
I18n.config.enforce_available_locales = true
|
I18n.config.enforce_available_locales = true
|
||||||
|
|
||||||
|
config.action_mailer.default_options = {from: 'moderateurs@agendadulibre.org', to: 'moderateurs@agendadulibre.org'}
|
||||||
|
|
||||||
#config.quiet_assets = false
|
#config.quiet_assets = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -208,14 +208,14 @@ fr:
|
|||||||
question: Quel motif souhaitez-vous associer au rejet de cet évènement?
|
question: Quel motif souhaitez-vous associer au rejet de cet évènement?
|
||||||
ok: Rejeter
|
ok: Rejeter
|
||||||
ko: Annuler
|
ko: Annuler
|
||||||
contents_1: Hors sujet
|
reason_r_1: Hors sujet
|
||||||
contents_2: Pas assez d'informations
|
reason_r_2: Pas assez d'informations
|
||||||
contents_3: Évènement déjà enregistré
|
reason_r_3: Évènement déjà enregistré
|
||||||
contents_4: Raison spécifique (précisez)
|
reason_r_4: Raison spécifique (précisez)
|
||||||
contents_1_long: Toutefois, l'évènement proposé n'a pour l'instant pas retenu l'attention des modérateurs. En effet, l'évènement proposé ne concerne pas le Logiciel Libre, ou bien le lien avec le Logiciel Libre n'est pas évident dans la formulation actuelle, ou alors il s'agit d'un évènement ou d'une formation payante et coûteuse. Si l'évènement concerne vraiment le Logiciel Libre et qu'il ne s'agit pas d'une formation payante, n'hésitez pas à le soumettre à nouveau avec une description plus claire.
|
reason_r_1_long: Toutefois, l'évènement proposé n'a pour l'instant pas retenu l'attention des modérateurs. En effet, l'évènement proposé ne concerne pas le Logiciel Libre, ou bien le lien avec le Logiciel Libre n'est pas évident dans la formulation actuelle, ou alors il s'agit d'un évènement ou d'une formation payante et coûteuse. Si l'évènement concerne vraiment le Logiciel Libre et qu'il ne s'agit pas d'une formation payante, n'hésitez pas à le soumettre à nouveau avec une description plus claire.
|
||||||
contents_2_long: Votre évènement a tout à fait sa place dans l'Agenda du Libre, mais les modérateurs trouvent que la description de celui-ci n'est pas assez complète pour être validée.\n\nLa description doit être compréhensible par un nouveau venu dans le monde du Libre, et doit donc préciser le principe de la rencontre, le public visé, la rôle du ou des Logiciels Libres qui seront exposés, la date et le lieu précis de la rencontre. Même si il s'agit d'une rencontre régulière, n'hésitez pas à répéter à chaque fois ces informations, elles sont importantes.\n\nNous vous invitons donc vivement à soumettre à nouveau cet évènement avec une description plus complète.
|
reason_r_2_long: Votre évènement a tout à fait sa place dans l'Agenda du Libre, mais les modérateurs trouvent que la description de celui-ci n'est pas assez complète pour être validée.\n\nLa description doit être compréhensible par un nouveau venu dans le monde du Libre, et doit donc préciser le principe de la rencontre, le public visé, la rôle du ou des Logiciels Libres qui seront exposés, la date et le lieu précis de la rencontre. Même si il s'agit d'une rencontre régulière, n'hésitez pas à répéter à chaque fois ces informations, elles sont importantes.\n\nNous vous invitons donc vivement à soumettre à nouveau cet évènement avec une description plus complète.
|
||||||
contents_3_long: Votre évènement a tout à fait sa place dans l'Agenda du Libre, mais il est déjà enregistré dans celui-ci.
|
reason_r_3_long: Votre évènement a tout à fait sa place dans l'Agenda du Libre, mais il est déjà enregistré dans celui-ci.
|
||||||
contents_4_long: Toutefois, votre évènement n'a pour le moment pas retenu l'attention des modérateurs, pour la raison suivante
|
reason: Votre raison
|
||||||
destroy:
|
destroy:
|
||||||
ok: Évènement rejeté
|
ok: Évènement rejeté
|
||||||
notes:
|
notes:
|
||||||
@ -261,6 +261,13 @@ fr:
|
|||||||
edit_link: "Vous pouvez modifier cet évènement ultérieurement pour y ajouter des précisions en vous rendant à l'adresse:"
|
edit_link: "Vous pouvez modifier cet évènement ultérieurement pour y ajouter des précisions en vous rendant à l'adresse:"
|
||||||
delete_link: "Vous pouvez également l'annuler en vous rendant à l'adresse:"
|
delete_link: "Vous pouvez également l'annuler en vous rendant à l'adresse:"
|
||||||
signature: "Merci de votre contribution à l'Agenda du Libre et à bientôt!\n\n-- \nL'équipe de modération"
|
signature: "Merci de votre contribution à l'Agenda du Libre et à bientôt!\n\n-- \nL'équipe de modération"
|
||||||
|
destroy:
|
||||||
|
subject: "[Agenda du Libre] Évènement '%{subject}' refusé"
|
||||||
|
title: Bonjour,
|
||||||
|
body: Vous avez soumis l'évènement suivant dans l'Agenda du Libre, et nous vous remercions de cette contribution.
|
||||||
|
reminder: "Pour rappel, voici le contenu de votre évènement:"
|
||||||
|
reclamation: Pour toute réclamation, n'hésitez pas à contacter l'équipe de modérateurs.
|
||||||
|
signature: "Avec tous nos remerciements pour votre contribution,\n\n-- \nL'équipe de modération"
|
||||||
moderation_mailer:
|
moderation_mailer:
|
||||||
create:
|
create:
|
||||||
subject: "[Agenda du Libre] Nouvel évènement à modérer: '%{subject}'"
|
subject: "[Agenda du Libre] Nouvel évènement à modérer: '%{subject}'"
|
||||||
@ -281,9 +288,9 @@ fr:
|
|||||||
destroy:
|
destroy:
|
||||||
subject: "[Agenda du Libre] Évènement '%{subject}' refusé"
|
subject: "[Agenda du Libre] Évènement '%{subject}' refusé"
|
||||||
title: Bonjour,
|
title: Bonjour,
|
||||||
body: Vous avez soumis l'évènement suivant dans l'Agenda du Libre, et nous vous remercions de cette contribution.
|
body: "L'évènement '%{subject}' a été rejeté par %{author} pour la raison suivante:\n\n"
|
||||||
reminder: "Pour rappel, voici le contenu de votre évènement:"
|
reminder: "Pour rappel, l'évènement:"
|
||||||
signature: "Avec tous nos remerciements pour votre contribution,\n\n-- \nL'équipe de modération"
|
signature: "-- \nL'équipe des modérateurs de l'Agenda du Libre"
|
||||||
note_mailer:
|
note_mailer:
|
||||||
create:
|
create:
|
||||||
subject: "[Agenda du Libre] Demande d'informations sur l'évènement '%{subject}'"
|
subject: "[Agenda du Libre] Demande d'informations sur l'évènement '%{subject}'"
|
||||||
|
@ -20,7 +20,7 @@ class ModerationsControllerTest < ActionController::TestCase
|
|||||||
test 'should accept event' do
|
test 'should accept event' do
|
||||||
put :accept, id: @moderation
|
put :accept, id: @moderation
|
||||||
|
|
||||||
assert assigns(:moderation).is_moderated?
|
assert assigns(:moderation).moderated?
|
||||||
assert_empty assigns(:moderation).errors
|
assert_empty assigns(:moderation).errors
|
||||||
assert_redirected_to moderations_path
|
assert_redirected_to moderations_path
|
||||||
end
|
end
|
||||||
|
@ -14,8 +14,15 @@ class EventMailerTest < ActionMailer::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
test 'accept' do
|
test 'accept' do
|
||||||
mail = EventMailer.accept Event.last
|
mail = EventMailer.accept Event.last, User.last
|
||||||
assert_match(/\[Agenda du Libre\] Évènement: .* modéré/, mail.subject)
|
assert_match(/\[Agenda du Libre\] Évènement .* modéré/, mail.subject)
|
||||||
|
assert_equal [Event.last.contact], mail.to
|
||||||
|
assert_equal ['moderateurs@agendadulibre.org'], mail.from
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'destroy' do
|
||||||
|
mail = EventMailer.destroy Event.last, User.last, 'hello world'
|
||||||
|
assert_match(/\[Agenda du Libre\] Évènement .* refusé/, mail.subject)
|
||||||
assert_equal [Event.last.contact], mail.to
|
assert_equal [Event.last.contact], mail.to
|
||||||
assert_equal ['moderateurs@agendadulibre.org'], mail.from
|
assert_equal ['moderateurs@agendadulibre.org'], mail.from
|
||||||
end
|
end
|
||||||
|
@ -12,4 +12,10 @@ class EventMailerPreview < ActionMailer::Preview
|
|||||||
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
|
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
|
||||||
EventMailer.accept Event.last, User.last
|
EventMailer.accept Event.last, User.last
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Preview this email at http://localhost:3000/rails/mailers/event_mailer/destroy
|
||||||
|
def destroy
|
||||||
|
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
|
||||||
|
EventMailer.destroy Event.last, User.last, 'hello world'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -26,7 +26,6 @@ hello world'
|
|||||||
# Preview this email at http://localhost:3000/rails/mailers/moderation_mailer/destroy
|
# Preview this email at http://localhost:3000/rails/mailers/moderation_mailer/destroy
|
||||||
def destroy
|
def destroy
|
||||||
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
|
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
|
||||||
@reason = 'pas cool'
|
ModerationMailer.destroy Event.last, User.last, 'hello world'
|
||||||
ModerationMailer.destroy Event.last, User.last, @reason
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user