5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-15 22:51:41 +00:00

Merge branch 'issue-2123' into 'rails'

fix: recuperar el comportamiento esperado #2123

See merge request sutty/sutty!124
This commit is contained in:
fauno 2023-04-10 15:51:48 +00:00
commit 1c3ad12db0
5 changed files with 46 additions and 36 deletions

View file

@ -83,27 +83,26 @@ class UsuariesController < ApplicationController
authorize SiteUsuarie.new(@site, current_usuarie) authorize SiteUsuarie.new(@site, current_usuarie)
# Enviar la invitación si es necesario y agregar al sitio # Enviar la invitación si es necesario y agregar al sitio
invitaciones.each do |invitacion| invitaciones.each do |address|
# Si la cuenta no existe, envía una invitación por correo, sino, next if Usuarie.where(id: @site.roles.pluck(:usuarie_id)).find_by_email(address)
# no se envía nada
#
# TODO: Enviar invitación igual! Podemos no usar el Mailer de
# DeviseInvitations y usar uno propio que contenga texto y se
# envíe de todas formas.
usuarie = Usuarie.invite! email: invitacion.address,
skip_invitation: true
# No invitar al sitio si ya estaba en la lista! Usuarie.transaction do
# usuarie = Usuarie.find_by_email(address)
# XXX: En este caso no estamos enviando ninguna invitación usuarie ||= Usuarie.invite!({ email: address, skip_invitation: true }).tap do |u|
next if usuarie.sites.exists? @site.id u.send :generate_invitation_token!
end
@site.roles << Rol.create(usuarie: usuarie, site: @site, role = @site.roles.create(usuarie: usuarie, temporal: true, rol: invited_as)
temporal: true, rol: invited_as)
# Invitamos después de crear el rol para que el correo de # XXX: La invitación tiene que ser enviada luego de crear el rol
# invitación pueda recibir el sitio. if role.persisted?
usuarie.deliver_invitation usuarie.deliver_invitation
else
raise ArgumentError, role.errors.full_messages
end
rescue ArgumentError => e
ExceptionNotifier.notify_exception(e, data: { site: @site.name, address: address })
end
end end
redirect_to site_usuaries_path(@site) redirect_to site_usuaries_path(@site)
@ -144,6 +143,8 @@ class UsuariesController < ApplicationController
private private
# Traer todas las invitaciones que al menos tengan usuarie y dominio # Traer todas las invitaciones que al menos tengan usuarie y dominio
#
# @return [Array]
def invitaciones def invitaciones
# XXX: Podríamos usar EmailAddress pero hace chequeos más lentos # XXX: Podríamos usar EmailAddress pero hace chequeos más lentos
params[:invitaciones]&.tr("\r", '')&.split("\n")&.map do |m| params[:invitaciones]&.tr("\r", '')&.split("\n")&.map do |m|
@ -152,7 +153,7 @@ class UsuariesController < ApplicationController
nil nil
end.compact.select do |m| end.compact.select do |m|
m.local && m.domain m.local && m.domain
end end.map(&:address)
end end
# El tipo de invitación que tenemos que enviar, si alguien mandó # El tipo de invitación que tenemos que enviar, si alguien mandó

View file

@ -1,4 +1,4 @@
- site = @resource.sites.last - site = @resource.roles.where(temporal: true).last&.site
%p= t('devise.mailer.invitation_instructions.hello', %p= t('devise.mailer.invitation_instructions.hello',
email: @resource.email) email: @resource.email)
@ -8,6 +8,7 @@
%h1= site.title %h1= site.title
%p= site.description %p= site.description
- if @resource.created_by_invite? && !@resource.invitation_accepted?
%p= link_to t('devise.mailer.invitation_instructions.accept'), %p= link_to t('devise.mailer.invitation_instructions.accept'),
accept_invitation_url(@resource, invitation_token: @token, change_locale_to: @resource.lang) accept_invitation_url(@resource, invitation_token: @token, change_locale_to: @resource.lang)
@ -17,3 +18,5 @@
format: :'devise.mailer.invitation_instructions.accept_until_format')) format: :'devise.mailer.invitation_instructions.accept_until_format'))
%p= t('devise.mailer.invitation_instructions.ignore') %p= t('devise.mailer.invitation_instructions.ignore')
- else
%p= link_to t('devise.mailer.invitation_instructions.sign_in'), root_url

View file

@ -1,4 +1,4 @@
- site = @resource.sites.last - site = @resource.roles.where(temporal: true).last&.site
= t('devise.mailer.invitation_instructions.hello', email: @resource.email) = t('devise.mailer.invitation_instructions.hello', email: @resource.email)
\ \
@ -9,6 +9,7 @@
\ \
= site.description = site.description
\ \
- if @resource.created_by_invite? && !@resource.invitation_accepted?
= accept_invitation_url(@resource, invitation_token: @token, change_locale_to: @resource.lang) = accept_invitation_url(@resource, invitation_token: @token, change_locale_to: @resource.lang)
\ \
- if @resource.invitation_due_at - if @resource.invitation_due_at
@ -17,3 +18,6 @@
format: :'devise.mailer.invitation_instructions.accept_until_format')) format: :'devise.mailer.invitation_instructions.accept_until_format'))
\ \
= t('devise.mailer.invitation_instructions.ignore') = t('devise.mailer.invitation_instructions.ignore')
- else
= root_url(change_locale_to: @resource.lang)
= t('devise.mailer.invitation_instructions.sign_in')

View file

@ -23,6 +23,7 @@ en:
accept: "Accept invitation" accept: "Accept invitation"
accept_until: "This invitation will be due in %{due_date}." accept_until: "This invitation will be due in %{due_date}."
ignore: "If you don't want to accept the invitation, please ignore this email. Your account won't be created until you access the link above and set your password." ignore: "If you don't want to accept the invitation, please ignore this email. Your account won't be created until you access the link above and set your password."
sign_in: "Sign in to your account to accept or decline the invitation."
time: time:
formats: formats:
devise: devise:

View file

@ -23,6 +23,7 @@ es:
accept: "Aceptar la invitación" accept: "Aceptar la invitación"
accept_until: "La invitación vencerá el %{due_date}." accept_until: "La invitación vencerá el %{due_date}."
ignore: "Si no querés aceptar la invitación, por favor ignora este correo. Tu cuenta no será creada hasta que aceptes la invitación y configures una contraseña." ignore: "Si no querés aceptar la invitación, por favor ignora este correo. Tu cuenta no será creada hasta que aceptes la invitación y configures una contraseña."
sign_in: "Iniciá sesión con tu cuenta para aceptar o rechazar la invitación."
time: time:
formats: formats:
devise: devise: