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: diff --git a/decidim-core/app/cells/decidim/upload_modal/files.erb b/decidim-core/app/cells/decidim/upload_modal/files.erb index 5f88e09a1390c..d56cabe7df66b 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) %> + <%= title_for(attachment) %> <% else %> - <%= link_to truncated_file_name_for(attachment), file_attachment_path(attachment) %> + <%= 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..6f743d00ae465 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(determine_filename(attachment))) + end end def truncated_file_name_for(attachment, max_length = 31) 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/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}
@@ -189,11 +188,11 @@ export default class UploadModal {
- ${escapeHtml(truncateFilename(file.name))} + ${escapeHtml(file.name)}
- +
` diff --git a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss index 7f407f3e338e5..e60887cb602dd 100644 --- a/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss +++ b/decidim-core/app/packs/stylesheets/decidim/_modal_update.scss @@ -128,8 +128,12 @@ } 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; + } } 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..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)} (#{filename})") + 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)} (#{filename1})") + expect(details).to have_content(decidim_sanitize_translated(attachments[0].title).to_s) end end 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/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 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.