mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-15 22:21:43 +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:
commit
1c3ad12db0
5 changed files with 46 additions and 36 deletions
|
@ -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ó
|
||||||
|
|
|
@ -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,12 +8,15 @@
|
||||||
%h1= site.title
|
%h1= site.title
|
||||||
%p= site.description
|
%p= site.description
|
||||||
|
|
||||||
%p= link_to t('devise.mailer.invitation_instructions.accept'),
|
- if @resource.created_by_invite? && !@resource.invitation_accepted?
|
||||||
|
%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)
|
||||||
|
|
||||||
- if @resource.invitation_due_at
|
- if @resource.invitation_due_at
|
||||||
%p= t('devise.mailer.invitation_instructions.accept_until',
|
%p= t('devise.mailer.invitation_instructions.accept_until',
|
||||||
due_date: l(@resource.invitation_due_at,
|
due_date: l(@resource.invitation_due_at,
|
||||||
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
|
||||||
|
|
|
@ -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,11 +9,15 @@
|
||||||
\
|
\
|
||||||
= site.description
|
= site.description
|
||||||
\
|
\
|
||||||
= accept_invitation_url(@resource, invitation_token: @token, change_locale_to: @resource.lang)
|
- if @resource.created_by_invite? && !@resource.invitation_accepted?
|
||||||
\
|
= accept_invitation_url(@resource, invitation_token: @token, change_locale_to: @resource.lang)
|
||||||
- if @resource.invitation_due_at
|
\
|
||||||
|
- if @resource.invitation_due_at
|
||||||
= t('devise.mailer.invitation_instructions.accept_until',
|
= t('devise.mailer.invitation_instructions.accept_until',
|
||||||
due_date: l(@resource.invitation_due_at,
|
due_date: l(@resource.invitation_due_at,
|
||||||
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')
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue