=head1 check_mailrules_auf_username

Überprüfe, ob Mail-Regeln auf den User-Namen einer bestimmten Person
zeigen.

=head2 Argumente

=over 4

=item $person_id

Die Datenbank-ID der Person, um deren Username es geht.

=back

=head2 Ergebnis

Die Quelladressen der fraglichen Regeln als Liste (ggf. mit Zusatz, bei welchem
Kunden die eingetragen sind, sofern abweichend vom primären Kunden der Person).

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(list_descr);
use Dbase::Help qw(DoSelect in_list);

# Bei der Suche nach MailRegeln, die auf eine bestimmte Person zeigen,
# sind nur Mailregeln interessant, bei denen rechts auch wirklich
# Personen stehen, vgl. Ticket 10131624. Da wir dafür keine eigene
# Gruppe haben, beziehen wir uns der Einfachheit halber erstmal auf
# die Gruppe "multiple_targets", die im Prinzip damit deckungsgleich
# sein sollte, abgesehen davon, dass bislang eh nur der Typ "virt"
# einschlägig ist, aber nur nach dem zu suchen, wäre zu einfach. :-)
my @mailrules_typen;
list_descr(
	mailrules => 0,
	'multiple_targets,!hide',
	sub {
		( undef, my $id, my $name, my $infotext ) = @_;
		push @mailrules_typen, $id;
	}
);

my $sql_mailrules_typen = in_list( 'mailrules.typ', '', @mailrules_typen );
sub check_mailrules_auf_username($) {
	my($pers) = @_;
	my @adr;
	DoSelect {
		my($kunde, $adr, $kunde_id, $kunde_name) = @_;
		push @adr, "<$adr>" . ($kunde_id != $kunde && " (bei Kunde #$kunde_id:$kunde_name)");
	} <<_;
	SELECT person.kunde, mailrules.quelle, kunde.id, kunde.name
	FROM   kunde, mailrules, person
	WHERE  person.id = $pers
	   AND ( mailrules.ziel = person.user                        OR
	         mailrules.ziel LIKE CONCAT(      person.user, ',%') OR
	         mailrules.ziel LIKE CONCAT('%,', person.user      ) OR
	         mailrules.ziel LIKE CONCAT('%,', person.user, ',%') )
	   AND mailrules.kunde = kunde.id
	   AND $sql_mailrules_typen
	   AND ( kunde.ende IS NULL                  OR
	         kunde.ende >= UNIX_TIMESTAMP(NOW()) )
_
	@adr;
}

1;
