Mails de refus d'évt envoyés au soumetteur et aux modérateurs

recurrent
echarp 9 years ago
parent 026aa24e8f
commit dbf2362399
  1. 8
      app/assets/javascripts/moderations.js.coffee
  2. 2
      app/assets/stylesheets/events.css.sass
  3. 8
      app/controllers/moderations_controller.rb
  4. 14
      app/mailers/event_mailer.rb
  5. 3
      app/mailers/moderation_mailer.rb
  6. 2
      app/mailers/note_mailer.rb
  7. 23
      app/views/event_mailer/destroy.text.haml
  8. 2
      app/views/moderation_mailer/destroy.text.haml
  9. 33
      app/views/moderations/refuse.html.haml
  10. 2
      config/application.rb
  11. 29
      config/locales/fr.yml
  12. 2
      test/controllers/moderations_controller_test.rb
  13. 11
      test/mailers/event_mailer_test.rb
  14. 6
      test/mailers/previews/event_mailer_preview.rb
  15. 3
      test/mailers/previews/moderation_mailer_preview.rb

@ -1,3 +1,5 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/
$(document).ready ->
$('body.moderations .field.closer input[type=radio]').click ->
$('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
width: 15em
border: 1px solid #96CFFF
margin: 5em 1.2em 0px
margin: 0 1.2em
padding: 5px
font-size: 0.7em
background-color: #D6ECFF

@ -57,7 +57,13 @@ class ModerationsController < ApplicationController
def destroy
if @moderation.destroy
# 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
end
respond_to do |format|

@ -1,6 +1,4 @@
class EventMailer < ActionMailer::Base
default from: 'moderateurs@agendadulibre.org'
def create(event)
@event = event
@ -13,8 +11,18 @@ class EventMailer < ActionMailer::Base
@event = event
@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,
subject: t('event_mailer.accept.subject', subject: event.title)
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

@ -1,7 +1,4 @@
class ModerationMailer < ActionMailer::Base
default from: 'moderateurs@agendadulibre.org'
default to: 'moderateurs@agendadulibre.org'
def create(event)
@event = event

@ -1,6 +1,4 @@
class NoteMailer < ActionMailer::Base
default from: 'moderateurs@agendadulibre.org'
def create(note)
@note = note

@ -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 '.body', author: @current_user
=t '.body', subject: @event.title, author: @current_user
\
= @reason
\

@ -6,21 +6,28 @@
.box
%h2=t '.question'
= form_for @moderation, method: :delete do |f|
.field
= radio_button_tag :event, :contents_1, {}, value: t('.contents_1_long')
= label_tag :event_contents_1, t('.contents_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')
= form_tag moderation_path(@moderation), method: :delete do |f|
.field.closer(title="#{t '.reason_r_1_long'}")
= radio_button_tag :reason, :r_1, params[:event] == 'reason_r_1'
= label_tag :reason_r_1, t('.reason_r_1')
.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
= radio_button_tag :event, :contents_4, {}, value: t('.contents_4_long')
= label_tag :event_contents_4, t('.contents_4')
= label_tag :reason_text, t('.reason_text')
= text_area_tag :reason_text, nil, cols: 40, rows: 5
= f.submit t('.ok')
= submit_tag t '.ok'
= link_to t('.ko'), moderations_url, class: :button
.box= render file: '/events/show'

@ -24,6 +24,8 @@ module AgendaDuLibreRails
I18n.config.enforce_available_locales = true
config.action_mailer.default_options = {from: 'moderateurs@agendadulibre.org', to: 'moderateurs@agendadulibre.org'}
#config.quiet_assets = false
end
end

@ -208,14 +208,14 @@ fr:
question: Quel motif souhaitez-vous associer au rejet de cet évènement?
ok: Rejeter
ko: Annuler
contents_1: Hors sujet
contents_2: Pas assez d'informations
contents_3: Évènement déjà enregistré
contents_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.
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.
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.
contents_4_long: Toutefois, votre évènement n'a pour le moment pas retenu l'attention des modérateurs, pour la raison suivante
reason_r_1: Hors sujet
reason_r_2: Pas assez d'informations
reason_r_3: Évènement déjà enregistré
reason_r_4: Raison spécifique (précisez)
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.
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.
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.
reason: Votre raison
destroy:
ok: Évènement rejeté
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:"
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"
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:
create:
subject: "[Agenda du Libre] Nouvel évènement à modérer: '%{subject}'"
@ -281,9 +288,9 @@ fr:
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:"
signature: "Avec tous nos remerciements pour votre contribution,\n\n-- \nL'équipe de modération"
body: "L'évènement '%{subject}' a été rejeté par %{author} pour la raison suivante:\n\n"
reminder: "Pour rappel, l'évènement:"
signature: "-- \nL'équipe des modérateurs de l'Agenda du Libre"
note_mailer:
create:
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
put :accept, id: @moderation
assert assigns(:moderation).is_moderated?
assert assigns(:moderation).moderated?
assert_empty assigns(:moderation).errors
assert_redirected_to moderations_path
end

@ -14,8 +14,15 @@ class EventMailerTest < ActionMailer::TestCase
end
test 'accept' do
mail = EventMailer.accept Event.last
assert_match(/\[Agenda du Libre\] Évènement: .* modéré/, mail.subject)
mail = EventMailer.accept Event.last, User.last
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 ['moderateurs@agendadulibre.org'], mail.from
end

@ -12,4 +12,10 @@ class EventMailerPreview < ActionMailer::Preview
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
EventMailer.accept Event.last, User.last
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

@ -26,7 +26,6 @@ hello world'
# Preview this email at http://localhost:3000/rails/mailers/moderation_mailer/destroy
def destroy
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
@reason = 'pas cool'
ModerationMailer.destroy Event.last, User.last, @reason
ModerationMailer.destroy Event.last, User.last, 'hello world'
end
end

Loading…
Cancel
Save