#! /usr/bin/perl

=head1 NAME

druckquotas_teachers - druckquota settings for teachers

=head1 SYNOPSIS

 https://server/schulkonsole/druckquotas_teachers

=head1 DESCRIPTION

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

25.6.2012

=over

=cut


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

my $this_file = 'druckquotas_teachers';
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 $teachers = get_teachers();
my $is_changed = 0;
my @errors;
($q->param('resetteachers')
 or $q->param('deleteteachers')) and do {
	my @user_selects;
	foreach my $param ($q->param) {
		if (my ($user) = $param =~ /^(.+);select$/) {
			if ($$teachers{$user}) {
				push @user_selects, $user;
				$is_changed++;
			} else {
				push @errors, sprintf($d->get(
					'Lehrer %s unbekannt'), $user);
			}
		}
	}
	my ($default_balance) = $q->param('defaultbalance') =~ /^\s*(.+?)\s*$/;
	if (($default_balance !~ /^\d*$/) and ($q->param('resetteachers'))) {
					push @errors, sprintf($d->get(
						'%s: Neue Quota muss eine Zahl sein'));
				        } 
	else {
			if ($q->param('resetteachers')) {
				Schulkonsole::Druckquotas::reset_balance ($id, $password, $default_balance, @user_selects);
			} else {
				Schulkonsole::Druckquotas::delete_balance ($id, $password, @user_selects);
			}
	}
	if (@errors) {
		$sk_session->set_status(join(', ', @errors), 1);
	} elsif ($is_changed) {
		if($q->param('resetteachers')) {
			$sk_session->set_status(sprintf(
				$d->get("Druckquotas gesetzt: %s mal"), $is_changed), 0);
		} else {
			$sk_session->set_status(sprintf(
				$d->get("Druckquotas entfernt: %s mal"), $is_changed), 0);
		}
	} else {
		$sk_session->set_status($d->get('Keine Änderungen.'), 1);
	}
}; # end resetteachers
#############################################################
$q->param('acceptteachers') and do {
	my @processed_params;
	foreach my $param ($q->param) {
		if (my ($login) = $param =~ /^(.+)_teachernewbalance$/) {
			if ($$teachers{$login}) {
				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'), $login);
				        } else {
					push @processed_params, $param;
						Schulkonsole::Druckquotas::set_balance ($id, $password, $value, $login);
						$is_changed++;
					}
				}
			} else {
				push @errors, sprintf($d->get(
					'Lehrer %s unbekannt'), $login);
			}
		}
	}
	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 acceptteachers

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

my $teachers = get_teachers();
my @teachers_array;
my @userlist = Schulkonsole::Druckquotas::get_balancelist($id, $password, keys %$teachers);
	foreach my $zeile (@userlist) {
		(my $key, my $maxmb, my $mb) = split(/:/,$zeile);
		$$teachers{$key}{maxmb} = $maxmb;
		$$teachers{$key}{mb} = $mb;
	}
	foreach my $teacher (sort keys %$teachers) {
		push @teachers_array, {
			login => $$teachers{$teacher}{login},
			surname => $$teachers{$teacher}{surname},
			firstname => $$teachers{$teacher}{firstname},
			maxbalance => $$teachers{$teacher}{maxmb},
			balance => $$teachers{$teacher}{mb},
			newbalance => "",
		};
	}

$sk_session->set_var('teachers', \@teachers_array);

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

sub get_teachers {
	my %teachers;

	eval {
	my $teachers_lines
		= Schulkonsole::Sophomorix::read_teachers_file($id, $password);

	foreach my $line (@$teachers_lines) {
		next if $line =~ /^#/;

		my ($group, $surname, $firstname, $birthdate, $login,
		    $firstpassword, $short,
		    $diskquota, $mailquota) = split /\s*;/, $line;

		my ($key) = $login =~ /^\s*(.+?)\s*$/;

		if ($key) {
			$teachers{$key} = {
				group => $group,
				surname => $surname,
				firstname => $firstname,
				login => $login,
				short => $short,
			};
		}
	}
	};

	return \%teachers;
}

