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}
${errors.map((error) => `- ${error}
`).join("\n")}
@@ -189,11 +188,11 @@ export default class UploadModal {
`
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.