#! /usr/bin/perl

=head1 NAME

druckquotas_projects - druckquota settings for projects

=head1 SYNOPSIS

 https://server/schulkonsole/druckquotas_projects

=head1 DESCRIPTION

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

=over

=cut


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

my $this_file = 'druckquotas_projects';
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('resetprojects') 
or $q->param('deleteprojects')) and do {
	my @project_selects;
	my $projectss = Schulkonsole::DB::projects();
	foreach my $param ($q->param) {
		if (my ($project) = $param =~ /^(.+);select$/) {
			if ($$projectss{$project}) {
				push @project_selects, $project;
			} else {
				push @errors, sprintf($d->get('Projekt %s unbekannt'), $project);
			}
		}
	}
	my ($default_balance) = $q->param('defaultbalance') =~ /^\s*(.+?)\s*$/;
	if (($default_balance !~ /^\d*$/) and ($q->param('resetprojects'))) {
		push @errors, sprintf($d->get('%s: Neue Quota muss eine Zahl sein'), $default_balance);
	} else {
		foreach my $project (@project_selects) {
			my $project_userdatas = Schulkonsole::DB::project_user_members($$projectss{$project}{gidnumber});
			my @schueler = keys %$project_userdatas;
			$is_changed = $is_changed + @schueler;
			if ($q->param('resetprojects')) {
				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('acceptprojects') and do {
	my @processed_params;
	my $projectss = Schulkonsole::DB::projects();
	foreach my $param ($q->param) {
		if (my ($gid) = $param =~ /^(.+)_projectdruckquota$/) {
			if ($$projectss{$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'),
						$$projectss{$gid}{displayname});
				    } else {
					my $project_userdatas = Schulkonsole::DB::project_user_members($$projectss{$gid}{gidnumber});
					my @schueler = keys %$project_userdatas;
					Schulkonsole::Druckquotas::set_balance ($id, $password, $value, @schueler);
					$is_changed++;
					push @processed_params, $param;
					}
				}
			} else {
				push @errors, sprintf($d->get(
					'Projekt %s unbekannt'), $gid);
			}
		}
	}

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


	last COMMANDS;
};	# end acceptprojects

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

eval {
my $projects = Schulkonsole::DB::projects();
my @projects_array;
foreach my $project (sort { $$projects{$a}{displayname} cmp $$projects{$b}{displayname} }keys %$projects) {
	push @projects_array, {
			gid => $project,
			name => $$projects{$project}{displayname},
		};
}

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


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