From 978b8f52345c754da40a0bb337ef69f6a4560a43 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Fri, 14 Feb 2025 14:37:34 +0100 Subject: [PATCH 1/4] feat: add new event in proposals --- .../author_confirmation_proposal_event.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 decidim-proposals/app/events/decidim/proposals/author_confirmation_proposal_event.rb diff --git a/decidim-proposals/app/events/decidim/proposals/author_confirmation_proposal_event.rb b/decidim-proposals/app/events/decidim/proposals/author_confirmation_proposal_event.rb new file mode 100644 index 0000000000000..d79f2ea713065 --- /dev/null +++ b/decidim-proposals/app/events/decidim/proposals/author_confirmation_proposal_event.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Decidim + module Proposals + class AuthorConfirmationProposalEvent < Decidim::Events::SimpleEvent + def self.model_name + ActiveModel::Name.new(self, nil, I18n.t("decidim.events.proposals.author_confirmation_proposal_event.email_subject")) + end + + def resource_title + decidim_sanitize_translated(resource.title) + end + end + end +end From e2bfa70244465cc29f198947448183db9a21bae0 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Fri, 14 Feb 2025 14:38:28 +0100 Subject: [PATCH 2/4] feat: add notification for author of published proposal --- .../commands/decidim/proposals/publish_proposal.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/decidim-proposals/app/commands/decidim/proposals/publish_proposal.rb b/decidim-proposals/app/commands/decidim/proposals/publish_proposal.rb index 14ceb0f259bea..62734765da8ad 100644 --- a/decidim-proposals/app/commands/decidim/proposals/publish_proposal.rb +++ b/decidim-proposals/app/commands/decidim/proposals/publish_proposal.rb @@ -27,6 +27,7 @@ def call increment_scores send_notification send_notification_to_participatory_space + send_publication_notification end broadcast(:ok, @proposal) @@ -87,6 +88,17 @@ def send_notification_to_participatory_space ) end + def send_publication_notification + Decidim::EventsManager.publish( + event: "decidim.events.proposals.author_confirmation_proposal_event", + event_class: Decidim::Proposals::AuthorConfirmationProposalEvent, + resource: @proposal, + affected_users: [@proposal.creator_identity], + extra: { force_email: true }, + force_send: true + ) + end + def coauthors_followers @coauthors_followers ||= @proposal.authors.flat_map(&:followers) end From d6eb4d5c9922cf7f3d0a0bc9ea9956968f1a6d83 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Fri, 14 Feb 2025 14:39:16 +0100 Subject: [PATCH 3/4] feat: add translations in en and fr --- decidim-proposals/config/locales/en.yml | 5 +++++ decidim-proposals/config/locales/fr.yml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/decidim-proposals/config/locales/en.yml b/decidim-proposals/config/locales/en.yml index d341325d17f7e..89c83e40cfab3 100644 --- a/decidim-proposals/config/locales/en.yml +++ b/decidim-proposals/config/locales/en.yml @@ -290,6 +290,11 @@ en: email_outro: You have received this notification because you are the author of the note. email_subject: "%{author_name} has replied your private note in %{resource_title}." notification_title: %{author_name} %{author_nickname} has replied your private note in %{resource_title}. Check it out at the admin panel. + author_confirmation_proposal_event: + email_intro: 'Your proposal " %{resource_title} " was successfully received and is now public. Thank you for participating ! You can view it here:' + email_outro: You received this notification because you are the author of the proposal. You can unfollow it by visiting the proposal page (" %{resource_title} ") and clicking on " Unfollow ". + email_subject: Your proposal has been published! + notification_title: Your proposal %{resource_title} is now live. coauthor_accepted_invite: notification_title: %{coauthor_name} has accepted your invitation to become a co-author of the proposal %{resource_title}. coauthor_invited: diff --git a/decidim-proposals/config/locales/fr.yml b/decidim-proposals/config/locales/fr.yml index ff9cb35abbe81..1201960391885 100644 --- a/decidim-proposals/config/locales/fr.yml +++ b/decidim-proposals/config/locales/fr.yml @@ -259,6 +259,11 @@ fr: email_outro: Vous avez reçu cette notification parce que vous êtes l'auteur/autrice de la note. email_subject: "%{author_name} a répondu à votre note privée dans %{resource_title}." notification_title: %{author_name} %{author_nickname} a répondu à votre note privée dans %{resource_title}. Consultez-la sur le panneau d'administration. + author_confirmation_proposal_event: + email_intro: 'Votre proposition « %{resource_title} » a été reçue avec succès et est maintenant publique. Merci pour votre participation ! Vous pouvez la consulter ici :' + email_outro: Vous recevez cette notification car vous êtes l’auteur de la proposition. Vous pouvez vous désabonner en visitant la page de la proposition (« %{resource_title} ») et en cliquant sur « Ne plus suivre ». + email_subject: Votre proposition a été publiée ! + notification_title: Votre proposition %{resource_title} est maintenant en ligne. coauthor_accepted_invite: notification_title: %{coauthor_name} a accepté votre invitation à devenir co-auteur de la proposition %{resource_title}. coauthor_invited: From 0096e952ad9223f1a0791c875801a238fc87d2a0 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Fri, 14 Feb 2025 14:40:06 +0100 Subject: [PATCH 4/4] tests: add tests for event and update test for command --- .../proposals/publish_proposal_spec.rb | 11 +++++++++ ...author_confirmation_proposal_event_spec.rb | 24 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 decidim-proposals/spec/events/decidim/proposals/author_confirmation_proposal_event_spec.rb diff --git a/decidim-proposals/spec/commands/decidim/proposals/publish_proposal_spec.rb b/decidim-proposals/spec/commands/decidim/proposals/publish_proposal_spec.rb index 8f0a42e008b39..1c50bc22771de 100644 --- a/decidim-proposals/spec/commands/decidim/proposals/publish_proposal_spec.rb +++ b/decidim-proposals/spec/commands/decidim/proposals/publish_proposal_spec.rb @@ -61,6 +61,17 @@ module Proposals } ) + expect(Decidim::EventsManager) + .to receive(:publish) + .with( + event: "decidim.events.proposals.author_confirmation_proposal_event", + event_class: Decidim::Proposals::AuthorConfirmationProposalEvent, + resource: kind_of(Decidim::Proposals::Proposal), + affected_users: [proposal_draft.creator_identity], + extra: { force_email: true }, + force_send: true + ) + subject.call end end diff --git a/decidim-proposals/spec/events/decidim/proposals/author_confirmation_proposal_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/author_confirmation_proposal_event_spec.rb new file mode 100644 index 0000000000000..25b2157600232 --- /dev/null +++ b/decidim-proposals/spec/events/decidim/proposals/author_confirmation_proposal_event_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim + module Proposals + describe AuthorConfirmationProposalEvent do + let(:resource) { create(:proposal) } + let(:participatory_process) { create(:participatory_process, organization:) } + let(:proposal_component) { create(:proposal_component, participatory_space: participatory_process) } + let(:event_name) { "decidim.events.proposals.author_confirmation_proposal_event" } + + include_context "when a simple event" + + it_behaves_like "a simple event" + + describe "resource_title" do + it "returns the proposal title" do + expect(subject.resource_title).to eq(decidim_sanitize_translated(resource.title)) + end + end + end + end +end