#! /usr/bin/perl

=head1 NAME

druckquotas_classes - druckquota settings for classes

=head1 SYNOPSIS

 https://server/schulkonsole/druckquotas_classes

=head1 DESCRIPTION

C<druckquotas_classes> lets you edit the print-quotas of classes.
The HTML template is druckquotas_classes.tt.

=over

=cut

use strict;
use lib '/usr/share/schulkonsole';
use Schulkonsole::Session;
use Schulkonsole::Druckquotas;
use Schulkonsole::DB;


my $this_file = 'druckquotas_classes';
my $textdomain = 'linuxmuster-pk';

my $sk_session = new Schulkonsole::Session($this_file);
if (not $sk_session->get_password()) {
	my $q = new CGI;
	my $url = $q->url( -full => 1 );

	# we send cookies over secure connections only
	if ($url =~ s/^http:/https:/g) {
		$sk_session->redirect($url);
	} else {
		$sk_session->exit_with_login_page($this_file);
	}
}

my $q = $sk_session->query();
my $d = $sk_session->d($textdomain);

my $id = $sk_session->userdata('id');
my $password = $sk_session->get_password();

eval {
COMMANDS: {

my $is_changed = 0;
my @errors;

($q->param('resetclasses') 
or $q->param('deleteclasses')) and do {
	my @class_selects;
	my $classs = Schulkonsole::DB::classes();
	foreach my $param ($q->param) {
		if (my ($klasse) = $param =~ /^(.+);select$/) {
			if ($$classs{$klasse}) {
				push @class_selects, $klasse;
			} else {
				push @errors, sprintf($d->get('Klasse %s unbekannt'), $klasse);
			}
		}
	}
	my ($default_balance) = $q->param('defaultbalance') =~ /^\s*(.+?)\s*$/;
	if (($default_balance !~ /^\d*$/) and ($q->param('resetclasses'))) {
		push @errors, sprintf($d->get('%s: Neue Quota muss eine Zahl sein'), $default_balance);
	} else {
		foreach my $klasse (@class_selects) {
			my $class_userdatas = Schulkonsole::DB::get_class_userdatas($klasse);
			my @schueler = keys %$class_userdatas;
			$is_changed = $is_changed + @schueler;
			if ($q->param('resetclasses')) {
				Schulkonsole::Druckquotas::reset_balance ($id, $password, $default_balance, @schueler);
			} else {
				Schulkonsole::Druckquotas::delete_balance ($id, $password, @schueler);
			}
		}
	}
	if (@errors) {
		$sk_session->set_status(join(', ', @errors), 1);
	} elsif ($is_changed) {
		$sk_session->set_status(sprintf(
			$d->get("Druckquotas gesetzt: %s mal"), $is_changed), 0);
	} else {
		$sk_session->set_status($d->get('Keine Änderungen.'), 1);
	}
};

$q->param('acceptclasses') and do {
	my @processed_params;
	my $classs = Schulkonsole::DB::classes();
	foreach my $param ($q->param) {
		if (my ($gid) = $param =~ /^(.+)_classdruckquota$/) {
			if ($$classs{$gid}) {
				my ($value) = $q->param($param) =~ /^\s*(.+?)\s*$/;
				if ( $value =~ /\S/) {
				    if ($value !~ /^[\+\-]?\d*$/) {
					push @errors, sprintf($d->get(
							'%s: Neue Quota muss eine Zahl ggf. mit Vorzeichen sein'),
						$$classs{$gid}{displayname});
				    } else {
					my $class_userdatas = Schulkonsole::DB::get_class_userdatas($gid);
					my @schueler = keys %$class_userdatas;
					Schulkonsole::Druckquotas::set_balance ($id, $password, $value, @schueler);
					$is_changed = $is_changed + @schueler;
					push @processed_params, $param;
					}
				}
			} else {
				push @errors, sprintf($d->get(
					'Klasse %s unbekannt'), $gid);
			}
		}
	}

	if (@errors) {
		$sk_session->set_status(join(', ', @errors), 1);
	} elsif ($is_changed) {
		$sk_session->set_status(sprintf($d->get(
			"Änderungen übernommen: %s mal"), $is_changed), 0);
		$q->delete(@processed_params);
	} else {
		$sk_session->set_status($d->get('Keine Änderungen.'), 1);
	}


	last COMMANDS;
};	# end acceptclasses

} # end COMMANDS
};
if ($@) {
	$sk_session->standard_error_handling($this_file, $@);
}

eval {
my $classs = Schulkonsole::DB::classes();
my @classs_array;
foreach my $class (sort {
		$$classs{$a}{displayname} cmp $$classs{$b}{displayname} }
	keys %$classs) {
	
	push @classs_array, {
			gid => $class,
			name => $$classs{$class}{displayname},
		};
}

$sk_session->set_var('classes', \@classs_array);
};
if ($@) {
	$sk_session->standard_error_handling($this_file, $@);
}


$sk_session->print_page("$this_file.tt", $this_file);
