2019-07-04 16:23:43 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
# Controlador de Usuaries
|
|
|
|
class UsuariesController < ApplicationController
|
|
|
|
include Pundit
|
|
|
|
before_action :authenticate_usuarie!
|
|
|
|
|
|
|
|
# Mostrar todes les usuaries e invitades de un sitio
|
|
|
|
def index
|
|
|
|
@site = find_site
|
|
|
|
site_usuarie = SiteUsuarie.new(@site, current_usuarie)
|
|
|
|
authorize site_usuarie
|
|
|
|
|
|
|
|
@policy = policy(site_usuarie)
|
|
|
|
end
|
|
|
|
|
|
|
|
# Desasociar une usuarie de un sitio
|
|
|
|
def destroy
|
|
|
|
@site = find_site
|
|
|
|
authorize SiteUsuarie.new(@site, current_usuarie)
|
|
|
|
|
|
|
|
@usuarie = Usuarie.find(params[:id])
|
|
|
|
|
|
|
|
@usuarie.sites.delete(@site)
|
|
|
|
|
|
|
|
redirect_to site_usuaries_path
|
|
|
|
end
|
|
|
|
|
|
|
|
# Convertir une usuarie en invitade
|
|
|
|
def demote
|
|
|
|
@site = find_site
|
|
|
|
authorize SiteUsuarie.new(@site, current_usuarie)
|
|
|
|
|
|
|
|
@usuarie = Usuarie.find(params[:usuarie_id])
|
|
|
|
|
|
|
|
@usuarie.sites.delete(@site)
|
|
|
|
@site.invitades << @usuarie
|
|
|
|
|
|
|
|
redirect_to site_usuaries_path
|
|
|
|
end
|
|
|
|
|
|
|
|
# Convertir invitade en usuarie
|
|
|
|
def promote
|
|
|
|
@site = find_site
|
|
|
|
authorize SiteUsuarie.new(@site, current_usuarie)
|
|
|
|
|
|
|
|
@usuarie = Usuarie.find(params[:usuarie_id])
|
|
|
|
|
|
|
|
@usuarie.sites_as_invitade.delete(@site)
|
|
|
|
@site.usuaries << @usuarie
|
|
|
|
|
|
|
|
redirect_to site_usuaries_path
|
|
|
|
end
|
2019-07-05 23:55:59 +00:00
|
|
|
|
|
|
|
# Poder invitar
|
|
|
|
def invite
|
|
|
|
@site = find_site
|
|
|
|
site_usuarie = SiteUsuarie.new(@site, current_usuarie)
|
|
|
|
authorize site_usuarie
|
|
|
|
|
|
|
|
@policy = policy(site_usuarie)
|
|
|
|
end
|
|
|
|
|
|
|
|
# Envía las invitaciones
|
|
|
|
def send_invitations
|
|
|
|
@site = find_site
|
|
|
|
authorize SiteUsuarie.new(@site, current_usuarie)
|
|
|
|
|
|
|
|
# Enviar la invitación si es necesario y agregar al sitio
|
|
|
|
#
|
|
|
|
# TODO: Pedir consentimiento para agregar a un sitio!
|
|
|
|
invitaciones.each do |invitacion|
|
|
|
|
# Si la cuenta no existe, envía una invitación por correo
|
|
|
|
usuarie = Usuarie.invite! email: invitacion.address
|
|
|
|
|
|
|
|
# No invitar al sitio si ya estaba en la lista!
|
|
|
|
unless @site.invitade?(usuarie) || @site.usuarie?(usuarie)
|
|
|
|
@site.send(invited_as) << usuarie
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
redirect_to site_usuaries_path(@site)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
# Traer todas las invitaciones que al menos tengan usuarie y dominio
|
|
|
|
def invitaciones
|
|
|
|
# XXX: Podríamos usar EmailAddress pero hace chequeos más lentos
|
|
|
|
i = params[:invitaciones].split("\n").map do |m|
|
|
|
|
Mail::Address.new m
|
|
|
|
rescue Mail::Field::IncompleteParseError
|
|
|
|
nil
|
|
|
|
end.compact
|
|
|
|
|
|
|
|
i.select do |m|
|
|
|
|
m.local && m.domain
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# El tipo de invitación que tenemos que enviar, si alguien mandó
|
|
|
|
# cualquier cosa, usamos el privilegio menor.
|
|
|
|
def invited_as
|
|
|
|
invited_as = params[:invited_as].try(:to_sym)
|
|
|
|
invited_as = :invitades unless %i[usuaries invitades].include?(invited_as)
|
|
|
|
|
|
|
|
invited_as
|
|
|
|
end
|
2019-07-04 16:23:43 +00:00
|
|
|
end
|