From c15964e014668178060bf0c39a49fb26745e886e Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Wed, 11 Jun 2025 17:29:02 +0200 Subject: [PATCH 01/13] feat: remove truncated_file_name_for --- decidim-core/app/cells/decidim/upload_modal/files.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/decidim-core/app/cells/decidim/upload_modal/files.erb b/decidim-core/app/cells/decidim/upload_modal/files.erb index 5f88e09a1390c..804234b2bb7d6 100644 --- a/decidim-core/app/cells/decidim/upload_modal/files.erb +++ b/decidim-core/app/cells/decidim/upload_modal/files.erb @@ -31,13 +31,13 @@ <% end %> <% if has_title? %> - <%= title_for(attachment) %> (<%= truncated_file_name_for(attachment) %>) + <%= title_for(attachment) %> <%= form.hidden_field attribute, multiple: true, value: attachment.id, id: attachment.id %> <% else %> <% if blob(attachment).image? %> - <%= truncated_file_name_for(attachment, 15) %> + <%= attachment %> <% else %> - <%= link_to truncated_file_name_for(attachment), file_attachment_path(attachment) %> + <%= link_to attachment, file_attachment_path(attachment), class: "w-full break-all mb-2" %> <% end %> <% end %> From 619ec8f7c1e6721771a26e2294994a559fcc9e76 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Wed, 11 Jun 2025 17:31:12 +0200 Subject: [PATCH 02/13] feat: remove truncateFilename and add class in span --- .../app/packs/src/decidim/direct_uploads/upload_field.js | 5 ++--- .../app/packs/src/decidim/direct_uploads/upload_modal.js | 9 ++++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/decidim-core/app/packs/src/decidim/direct_uploads/upload_field.js b/decidim-core/app/packs/src/decidim/direct_uploads/upload_field.js index 151b2b19ad3ae..02027cac228b0 100644 --- a/decidim-core/app/packs/src/decidim/direct_uploads/upload_field.js +++ b/decidim-core/app/packs/src/decidim/direct_uploads/upload_field.js @@ -1,5 +1,4 @@ import UploadModal from "src/decidim/direct_uploads/upload_modal"; -import { truncateFilename } from "src/decidim/direct_uploads/upload_utility"; import { escapeHtml, escapeQuotes } from "src/decidim/utilities/text"; const updateModalTitle = (modal) => { @@ -30,7 +29,7 @@ const updateActiveUploads = (modal) => { const [removeFiles, addFiles] = [modal.items.filter(({ removable }) => removable), modal.items.filter(({ removable }) => !removable)] addFiles.forEach((file, ix) => { - let title = truncateFilename(file.name, 19) + let title = file.name let hidden = "" if (file.hiddenField) { @@ -80,7 +79,7 @@ const updateActiveUploads = (modal) => { const template = `
${(/image/).test(file.type) && "
" || ""} - ${escapeHtml(title)} (${escapeHtml(truncateFilename(file.name))}) + ${escapeHtml(title)} ${hidden}
` diff --git a/decidim-core/app/packs/src/decidim/direct_uploads/upload_modal.js b/decidim-core/app/packs/src/decidim/direct_uploads/upload_modal.js index 8281aa57d7afb..7a906fceda285 100644 --- a/decidim-core/app/packs/src/decidim/direct_uploads/upload_modal.js +++ b/decidim-core/app/packs/src/decidim/direct_uploads/upload_modal.js @@ -1,6 +1,5 @@ import { Uploader } from "src/decidim/direct_uploads/uploader"; import icon from "src/decidim/icon"; -import { truncateFilename } from "src/decidim/direct_uploads/upload_utility"; import { escapeHtml, escapeQuotes } from "src/decidim/utilities/text"; const STATUS = { @@ -172,13 +171,13 @@ export default class UploadModal { createUploadItem(file, errors, opts = {}) { const okTemplate = ` - ${escapeHtml(truncateFilename(file.name))} + ${escapeHtml(file.name)} ` const errorTemplate = `
${icon("error-warning-line")}
- ${escapeHtml(truncateFilename(file.name))} + ${escapeHtml(file.name)} ${this.locales.validation_error}
    ${errors.map((error) => `
  • ${error}
  • `).join("\n")}
@@ -189,11 +188,11 @@ export default class UploadModal {
- ${escapeHtml(truncateFilename(file.name))} + ${escapeHtml(file.name)}
- +
` From 1c766d0d8d6b9d9ff6aa7aea45ac12807016dbb2 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Wed, 11 Jun 2025 17:31:54 +0200 Subject: [PATCH 03/13] feat: update span css and add new class --- .../app/packs/stylesheets/decidim/_modal_update.scss | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss index 7f407f3e338e5..881be578492f4 100644 --- a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss +++ b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss @@ -128,8 +128,11 @@ } span { - @apply text-sm text-gray-2 mx-auto; + @apply text-sm text-gray-2 mx-auto w-full break-all mb-2; } } } + &__span { + @apply w-full break-all mb-2; + } } From 589c9ca67911778df2a3485d01d0e9fd9488b6ab Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Thu, 12 Jun 2025 09:16:24 +0200 Subject: [PATCH 04/13] style: add empty line before rule --- decidim-core/app/packs/stylesheets/decidim/_modal_update.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss index 881be578492f4..8a12f57481b40 100644 --- a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss +++ b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss @@ -132,6 +132,7 @@ } } } + &__span { @apply w-full break-all mb-2; } From bd31189125c59ee34ef5bef5a0927dbf62a06550 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Thu, 12 Jun 2025 09:19:53 +0200 Subject: [PATCH 05/13] style: remove space --- decidim-core/app/packs/stylesheets/decidim/_modal_update.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss index 8a12f57481b40..e60887cb602dd 100644 --- a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss +++ b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss @@ -132,7 +132,7 @@ } } } - + &__span { @apply w-full break-all mb-2; } From 3898bccf380f0a59af9738fabf65e9fb0b1507ec Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Thu, 12 Jun 2025 10:56:39 +0200 Subject: [PATCH 06/13] test: update upload modal cell test --- decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb b/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb index cefd0c05d0e3c..a789742687ba2 100644 --- a/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb +++ b/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb @@ -102,7 +102,7 @@ def model_name expect(subject).to have_css("[data-filename='#{filename}']") details = subject.find(".attachment-details") - expect(details).to have_content("#{decidim_sanitize_translated(attachments[0].title)} (#{filename})") + expect(details).to have_content("#{decidim_sanitize_translated(attachments[0].title)}") end end @@ -165,7 +165,7 @@ def model_name expect(subject).to have_css("[data-filename='#{filename1}']") details = subject.find(".attachment-details", match: :first) - expect(details).to have_content("#{decidim_sanitize_translated(attachments[0].title)} (#{filename1})") + expect(details).to have_content("#{decidim_sanitize_translated(attachments[0].title)}") end end From 3f05d30ab32fb4a0829eca0050066098075c3f0e Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Thu, 12 Jun 2025 11:07:56 +0200 Subject: [PATCH 07/13] test: refactor with rubocop --- decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb b/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb index a789742687ba2..45e2dd82d1295 100644 --- a/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb +++ b/decidim-core/spec/cells/decidim/upload_modal_cell_spec.rb @@ -102,7 +102,7 @@ def model_name expect(subject).to have_css("[data-filename='#{filename}']") details = subject.find(".attachment-details") - expect(details).to have_content("#{decidim_sanitize_translated(attachments[0].title)}") + expect(details).to have_content(decidim_sanitize_translated(attachments[0].title).to_s) end end @@ -165,7 +165,7 @@ def model_name expect(subject).to have_css("[data-filename='#{filename1}']") details = subject.find(".attachment-details", match: :first) - expect(details).to have_content("#{decidim_sanitize_translated(attachments[0].title)}") + expect(details).to have_content(decidim_sanitize_translated(attachments[0].title).to_s) end end From f0a8ea620cab5c13f119f8a2736fdb480e93f326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Verg=C3=A9s?= Date: Mon, 23 Jun 2025 11:28:34 +0200 Subject: [PATCH 08/13] Trigger login event on omniauth login (#14865) --- .../decidim/create_omniauth_registration.rb | 15 +++++---- .../create_omniauth_registration_spec.rb | 32 ++++++++++++++----- docs/modules/customize/pages/oauth.adoc | 12 +++++++ 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/decidim-core/app/commands/decidim/create_omniauth_registration.rb b/decidim-core/app/commands/decidim/create_omniauth_registration.rb index 188a4434f74a2..9faac6d775f85 100644 --- a/decidim-core/app/commands/decidim/create_omniauth_registration.rb +++ b/decidim-core/app/commands/decidim/create_omniauth_registration.rb @@ -21,11 +21,12 @@ def call verify_oauth_signature! begin - if existing_identity - user = existing_identity.user - verify_user_confirmed(user) + if (@identity = existing_identity) + @user = existing_identity.user + verify_user_confirmed(@user) - return broadcast(:ok, user) + trigger_omniauth_event("decidim.user.omniauth_login") + return broadcast(:ok, @user) end return broadcast(:invalid) if form.invalid? @@ -33,7 +34,7 @@ def call create_or_find_user @identity = create_identity end - trigger_omniauth_registration + trigger_omniauth_event broadcast(:ok, @user) rescue NeedTosAcceptance @@ -128,9 +129,9 @@ def signature_valid? form.oauth_signature == signature end - def trigger_omniauth_registration + def trigger_omniauth_event(event_name = "decidim.user.omniauth_registration") ActiveSupport::Notifications.publish( - "decidim.user.omniauth_registration", + event_name, user_id: @user.id, identity_id: @identity.id, provider: form.provider, diff --git a/decidim-core/spec/commands/decidim/create_omniauth_registration_spec.rb b/decidim-core/spec/commands/decidim/create_omniauth_registration_spec.rb index 396c3d4467f0b..ce77b11b49c15 100644 --- a/decidim-core/spec/commands/decidim/create_omniauth_registration_spec.rb +++ b/decidim-core/spec/commands/decidim/create_omniauth_registration_spec.rb @@ -284,21 +284,38 @@ module Comments end context "when a user exists with that identity" do - before do - user = create(:user, email:, organization:) - create(:identity, user:, provider:, uid:) - end + let!(:user) { create(:user, email:, organization:) } + let!(:identity) { create(:identity, user:, provider:, uid:) } it "broadcasts ok" do expect { command.call }.to broadcast(:ok) end + it "notifies about login with oauth data" do + allow(command).to receive(:create_identity).and_return(identity) + expect(ActiveSupport::Notifications) + .to receive(:publish) + .with("decidim.user.omniauth_login", + user_id: user.id, + identity_id: identity.id, + provider:, + uid:, + email:, + name: "Facebook User", + nickname: "facebook_user", + avatar_url: "http://www.example.com/foo.jpg", + raw_data: {}, + tos_agreement: true, + accepted_tos_version: user.accepted_tos_version, + newsletter_notifications_at: user.newsletter_notifications_at) + command.call + end + context "with the same email as reported by the identity" do it "confirms the user" do command.call - user = User.find_by(email:) - expect(user).to be_confirmed + expect(user.reload).to be_confirmed end end @@ -308,8 +325,7 @@ module Comments it "does not confirm the user" do command.call - user = User.find_by(email:) - expect(user).not_to be_confirmed + expect(user.reload).not_to be_confirmed end end end diff --git a/docs/modules/customize/pages/oauth.adoc b/docs/modules/customize/pages/oauth.adoc index 0e11436e54e99..94f0cdbbd2215 100644 --- a/docs/modules/customize/pages/oauth.adoc +++ b/docs/modules/customize/pages/oauth.adoc @@ -30,4 +30,16 @@ ActiveSupport::Notifications.subscribe "decidim.user.omniauth_registration" do | end ---- +Note that, if the user is already registered, the `CreateOmniauthRegistration` command will not trigger the "decidim.user.omniauth_registration" event by instead it will trigger the "decidim.user.omniauth_login" event, which has the same payload as the registration event. + +For instance, to retrigger the `IdCatMobilVerificationJob` after a user logs in via omniauth, you can subscribe to the "decidim.user.omniauth_login" event as follows: + +[source,ruby] +---- +ActiveSupport::Notifications.subscribe "decidim.user.omniauth_login" do |name, started, finished, unique_id, data| + puts "the data: #{data.inspect}" + IdCatMobilVerificationJob.perform_later(data[:raw_data]) +end +---- + It is a good practice to delegate the required implementation to a Job to bring a fastest response to the user, also it will avoid that crashes in this code to propagate to the registration process. From e3e3bedc4b408783e17bd7674432592f5971f992 Mon Sep 17 00:00:00 2001 From: Harrison Hassig Date: Mon, 23 Jun 2025 12:45:22 +0200 Subject: [PATCH 09/13] Fix grammar for in registration count info (#14891) --- decidim-conferences/config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decidim-conferences/config/locales/en.yml b/decidim-conferences/config/locales/en.yml index e5e40c45d68a5..690e5a831894e 100644 --- a/decidim-conferences/config/locales/en.yml +++ b/decidim-conferences/config/locales/en.yml @@ -394,7 +394,7 @@ en: no_taxonomy_filters_found: No taxonomy filters found. registrations_count: one: There has been 1 registration. - other: There has been %{count} registrations. + other: There have been %{count} registrations. slug_help_html: 'URL slugs are used to generate the URLs that point to this conference. Only accepts letters, numbers and dashes, and must start with a letter. Example: %{url}' taxonomies: Taxonomies content_blocks: From cf8bfe4442a13eff5f091675f5185948ec6af84e Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Tue, 24 Jun 2025 09:35:25 +0200 Subject: [PATCH 10/13] fix missing name of attachment --- decidim-core/app/cells/decidim/upload_modal/files.erb | 4 ++-- decidim-core/app/cells/decidim/upload_modal_cell.rb | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/decidim-core/app/cells/decidim/upload_modal/files.erb b/decidim-core/app/cells/decidim/upload_modal/files.erb index 804234b2bb7d6..d56cabe7df66b 100644 --- a/decidim-core/app/cells/decidim/upload_modal/files.erb +++ b/decidim-core/app/cells/decidim/upload_modal/files.erb @@ -35,9 +35,9 @@ <%= form.hidden_field attribute, multiple: true, value: attachment.id, id: attachment.id %> <% else %> <% if blob(attachment).image? %> - <%= attachment %> + <%= title_for(attachment) %> <% else %> - <%= link_to attachment, file_attachment_path(attachment), class: "w-full break-all mb-2" %> + <%= link_to title_for(attachment), file_attachment_path(attachment), class: "w-full break-all mb-2" %> <% end %> <% end %> diff --git a/decidim-core/app/cells/decidim/upload_modal_cell.rb b/decidim-core/app/cells/decidim/upload_modal_cell.rb index c34febf550c78..447bd78a0815c 100644 --- a/decidim-core/app/cells/decidim/upload_modal_cell.rb +++ b/decidim-core/app/cells/decidim/upload_modal_cell.rb @@ -132,9 +132,11 @@ def id_for(attachment) end def title_for(attachment) - return unless has_title? - - decidim_html_escape(decidim_sanitize(translated_attribute(attachment.title))) + if has_title? + decidim_html_escape(decidim_sanitize(translated_attribute(attachment.title))) + else + decidim_html_escape(decidim_sanitize(attachment.file.url.split("/").last)) + end end def truncated_file_name_for(attachment, max_length = 31) From b35e0a87126c84d5ef488499d689305bea9b0670 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Tue, 24 Jun 2025 10:54:31 +0200 Subject: [PATCH 11/13] fix: update title_for method --- decidim-core/app/cells/decidim/upload_modal_cell.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decidim-core/app/cells/decidim/upload_modal_cell.rb b/decidim-core/app/cells/decidim/upload_modal_cell.rb index 447bd78a0815c..c998cb880e5b7 100644 --- a/decidim-core/app/cells/decidim/upload_modal_cell.rb +++ b/decidim-core/app/cells/decidim/upload_modal_cell.rb @@ -135,7 +135,7 @@ def title_for(attachment) if has_title? decidim_html_escape(decidim_sanitize(translated_attribute(attachment.title))) else - decidim_html_escape(decidim_sanitize(attachment.file.url.split("/").last)) + decidim_html_escape(decidim_sanitize(attachment.url.split("/").last)) end end From 3122dfec1a2737a1de3b30de9387c78769558197 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Tue, 24 Jun 2025 14:26:06 +0200 Subject: [PATCH 12/13] fix: update title_for again --- decidim-core/app/cells/decidim/upload_modal_cell.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decidim-core/app/cells/decidim/upload_modal_cell.rb b/decidim-core/app/cells/decidim/upload_modal_cell.rb index c998cb880e5b7..6f743d00ae465 100644 --- a/decidim-core/app/cells/decidim/upload_modal_cell.rb +++ b/decidim-core/app/cells/decidim/upload_modal_cell.rb @@ -135,7 +135,7 @@ def title_for(attachment) if has_title? decidim_html_escape(decidim_sanitize(translated_attribute(attachment.title))) else - decidim_html_escape(decidim_sanitize(attachment.url.split("/").last)) + decidim_html_escape(decidim_sanitize(determine_filename(attachment))) end end From 8d2086eae40409de52fc6dd1bd662b7567ae3fda Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Wed, 25 Jun 2025 11:20:46 +0200 Subject: [PATCH 13/13] test: update form_builder test --- decidim-core/spec/lib/form_builder_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decidim-core/spec/lib/form_builder_spec.rb b/decidim-core/spec/lib/form_builder_spec.rb index df3273664e9e1..11612543ab2f6 100644 --- a/decidim-core/spec/lib/form_builder_spec.rb +++ b/decidim-core/spec/lib/form_builder_spec.rb @@ -715,7 +715,7 @@ def organization let(:present?) { true } it "renders the filename" do - expect(output).to include(%(#{filename})) + expect(output).to include(%(#{filename})) end it "does not render an image tag" do