#!/usr/bin/perl -w

use utf8;
use strict;
use warnings;

BEGIN {
    unshift @INC, ( $ENV{'POPHOME'} || '@POPHOME@' ) . '/lib'
		unless $ENV{'KUNDE_NO_PERLPATH'};
}

use Cf qw($TICKET_DOMAIN);
use Dbase::Getopt;
use Dbase::Globals qw(flag_names get_gruppen sendmail bignum);
use Dbase::Help qw(Do DoSelect DoTrans);
use Loader qw(log_update);

my @Args = GetOptions(
    'flags=s' => \( my $Flag = 'www,!ok-no-domains' ),
    'from=s'  => \( my $From = '250438@' . $TICKET_DOMAIN ),
    'set-flags=s' => \( my $SetFlags ),
    'verbose!'    => \( my $Verbose = -t STDOUT ),
);

my ( $flagmask_grs, $flagmask_grc ) = get_gruppen( pwdomain => $Flag,     1 );
my ( $set_flags,    $delete_flags ) = get_gruppen( pwdomain => $SetFlags, 1 )
  if defined $SetFlags;

$set_flags = bignum($set_flags) unless ref $set_flags;
$delete_flags = bignum($delete_flags) unless ref $delete_flags;

my $done = 0;
DoSelect {
    my ( $kunde_name, $username, $person_id, $flagmask ) = @_;
	$flagmask = bignum($flagmask);
    if ($Verbose) {
        print "Kunde\tUsername\tFlags\n" unless $done++;
        print "$kunde_name\t$username\t"
          . flag_names( $flagmask, 'pwdomain' ) . "\n";
    }
    sendmail( <<_, $From, @Args ) if @Args;
X-noris-Ticket-Kunde: $kunde_name
From: $From
To: ${\ join ', ', @Args }
Subject: Web-Space $username bei Kunde $kunde_name hat keine aktiven Domains.

Falls Dir unklar ist, was das soll, s. RT#250438 oder frag Achim!
_
    DoTrans {
		my $sfl = $set_flags & ~$flagmask;
		my $dfl = $delete_flags & $flagmask;
		my $nfl = $flagmask & ~$delete_flags | $set_flags;

		Do "insert into pwhist set person=$person_id, flag=1+$sfl" if $sfl; # setzen
		Do "insert into pwhist set person=$person_id, flag=$dfl" if $dfl; # löschen

		log_update(person => id => $person_id, undef, "pwuse",undef,
		                scalar flag_names($nfl,"pwdomain", $flagmask));

        Do(<<_);
	UPDATE person
	   SET pwuse = pwuse & ~$delete_flags | $set_flags
	WHERE  id = $person_id AND pwuse = $flagmask
_
      }
      if defined $set_flags;
  }
  <<_;
	SELECT    kunde.name, person.user, person.id, person.pwuse,
	          COUNT(domainkunde.id) AS Domains
	FROM      ( kunde, person )
	LEFT JOIN domainkunde ON domainkunde.person=person.id
	WHERE     ( kunde.ende IS NULL OR 
	            kunde.ende >= UNIX_TIMESTAMP(NOW())  )
	      AND kunde.id = person.kunde
	      AND ( person.pwuse & $flagmask_grs ) = $flagmask_grs
	      AND ( person.pwuse & $flagmask_grc ) = 0
	      AND person.user IS NOT NULL
	      AND ( domainkunde.ende IS NULL OR 
	            domainkunde.ende >= UNIX_TIMESTAMP(NOW())        )
	GROUP BY person.id
	HAVING   Domains = 0
	ORDER BY kunde.name, person.user
_

__END__

=head1 NAME

domainlose_webspaces - informiere über Web-Spaces ohne Domains

=head1 SYNOPSE

  domainlose_webspaces --flag 'www,!ok-no-domains' \
                       --set-flag   ok-no-domains  \
                       vertrieb@noris.net

schickt an E<lt>vertrieb@noris.netE<gt> -- wobei beliebig viele Ziel-Adressen
auf der Kommandozeile angegeben werden könn(t)en -- für jede Person eine E-Mail,
auf die kumulativ folgende Voraussetzungen zutreffen:

=over 4

=item *

Der beim Personenobjekt eingetragene primäre Kunde ist aktiv.

=item *

Die Person hat ein C<www>-Flag.

=item *

Die Person hat kein C<ok-no-domains>-Flag.

=item *

Der Person sind keine aktiven Domains zugeordnet.

=back

Außerdem wird bei diesen Personen jeweils ein C<ok-no-domains>-Flag gesetzt.

=head1 OPTIONEN

=over 4

=item -flags Flag-Spezifikation

Komma-getrennte Liste von Personen-Flag-Namen zur Selektion der Personen.
Flags, die I<nicht> gesetzt sein dürfen, muss ein C<!> vorangestellt werden.
Default: C<www,!ok-no-domains>

=item -from E-Mail-Adresse

Absender-Adresse für die zu versendenden E-Mails.
Default: C<250438@rt.noris.net>

=item -set-flags Flag-Spezifikation

Liste von Flags, die bei den gefundenen Personen gesetzt oder (bei
vorangestelltem C<!>) gelöscht werden sollen.
Default: I<keine>

=item -verbose

=item -noverbose

legt fest, ob auf der Standardausgabe ausgegeben werden soll, welche
Personenobjekte gefunden wurden.
Ist per Default an, falls die Standardausgabe auf ein Terminal zeigt.

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=back

=head1 AUTOR

 Martin H. Sluka <fany@noris.net>
 für die noris network AG
 RT#250438

=cut

