#! /usr/bin/perl

=head1 NAME

repair_permissions - repair permissions of selected directories

=head1 SYNOPSIS

 https://server/schulkonsole/repair_permissions

=head1 DESCRIPTION

C<repair_permissions> lets you repair selected directory rights.
The HTML template is repair_permissions.tt.

=head2 Template variables

Additionally to the variables of Schulkonsole::Session C<repair_permissions>
provides the following variables:

=over

=cut

use strict;
use utf8;
use lib '/usr/share/schulkonsole';
use Schulkonsole::Config;
use Schulkonsole::Repair;
use Schulkonsole::Session;
use Proc::ProcessTable;

my $this_file = 'repair_permissions';

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 $id = $sk_session->userdata('id');
my $password = $sk_session->get_password();



my $process_table = new Proc::ProcessTable;
my $app_repair = $Schulkonsole::Config::_cmd_sophomorix_repair;
$app_repair =~ s:.*/::;
my %running;
foreach my $process (@{ $process_table->table }) {
	if ($process->fname =~ /^soph/ and $process->cmndline =~ /$app_repair/) {
			$running{repair} = $process->pid;
	}
}

if ($q->param('accept')) {
	COMMAND: {
		my @nums;
		foreach my $param ($q->param) {
			my ($num) = $param =~ /^(\d+);repair$/;
			next unless $num;
			push @nums, $num;
		}
		if( not @nums ){
			$sk_session->set_status( $sk_session->d()->get('Es wurden keine Einträge zur Reparatur gewählt.'), 1);
			last COMMAND;
		}
		eval {
			Schulkonsole::Repair::repair_permissions($id, $password, @nums);
		};
		if($@){
			$sk_session->standard_error_handling($this_file, $@);
		}
		$sk_session->set_status( $sk_session->d()->get('Reparatur gestartet.'), 0);
		
		$running{repair} = 1;
	};
}

if($q->param('logrepair') or $running{repair}) {
	eval {
		my $logrepair =
			Schulkonsole::Repair::read_repair_log_file($id, $password);

=item C<logrepair>

Output of C<sophomorix-repair ...>

=cut

		splice @$logrepair, 0, -30;
		$sk_session->set_var('logrepair', join("", @$logrepair));
	};
	if ($@) {
		$sk_session->set_status(
			$sk_session->d()->get('Kann Logdatei nicht öffnen'), 1);
	}
	
}

# pre-set values for <form>
my $directories = Schulkonsole::Repair::repair_get_info($id, $password);
foreach my $dir (@$directories){
	$$dir{repair} = 1 if $q->param($$dir{nr} . ';repair');
}

=item C<directories>

An array with the directories

=cut

$sk_session->set_var('directories', $directories);

=item C<isbusy>

True if C<sophomorix-repair> is running

=cut

$sk_session->set_var('isbusy', ($running{repair}? 1 : 0));


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




=back

=head2 Form fields

=over

=item C<accept>

Execute the selected commands

=cut



=back
