#!/usr/bin/perl
use strict;
use CGI qw(:standard);
use XML::Simple;
BEGIN {
chdir("/home/devi/cvs/lilalo");
require l3config;
};
my @filter;
for my $i (qw(host)) {
my $value = param("$i");
if ($value) {
push @filter, "$i=$value";
}
}
my %Trainings;
my $XMLTraining;
my %Machines;
sub load_training
{
my $classfile =
$_[0]||
$l3config::Config{"classfile"} ||
$l3config::Config{"path_classes"}."/".$l3config::Config{"class"}.$l3config::Config{"class_suffix"};
my $XMLTraining = XMLin($classfile , ForceArray => [ 'student' ] )
or die "Can't open file of the training ",$classfile,"\n";
for my $student (@{$XMLTraining->{"student"}}) {
$XMLTraining->{host}->{$student->{"host"}}=$student;
}
return $XMLTraining;
}
print header(
-charset => "utf-8",
);
if ($ENV{PATH_INFO} eq "/index") {
# Показываем индекс курсов
my @training_files = glob($l3config::Config{"path_classes"}."/*".$l3config::Config{"class_suffix"});
if (@training_files) {
for my $training_file (@training_files) {
my $training = load_training($training_file);
$Trainings{$training->{"date"}}=$training;
}
print "
\n";
for my $tdate (reverse sort keys %Trainings) {
my $t = $Trainings{$tdate};
print "";
print "".$t->{date}." | ";
print "".$t->{course}." | ";
print "
\n";
print "";
print " | ";
print "";
for my $host (sort keys %{$t->{host}}) {
my $h = $t->{host}->{$host};
print "$host";
print " ".$h->{firstname}." ".$h->{surname}." ";
print "root ";
print "".$h->{user}." ";
print "\n";
}
print " | ";
print " |
\n";
}
print "
\n";
}
else {
print "No training-files found
\n";
print "Template to load files: ".$l3config::Config{"path_classes"}."*".$l3config::Config{"class_suffix"}."\n"
}
}
elsif ($ENV{PATH_INFO} eq "/current/index" || $ENV{PATH_INFO} eq "") {
my $t = load_training();
for my $host (sort keys %{$t->{host}}) {
my $h = $t->{host}->{$host};
print "$host";
print " ".$h->{firstname}." ".$h->{surname}." ";
print "root ";
print "".$h->{user}." ";
print "
\n";
}
}
elsif ($ENV{PATH_INFO} eq "/current") {
open (FRONTEND, "./l3-frontend --output - --show_comments no |");
while () {
print;
}
close(FRONTEND);
}
else {
# Вызов производится по URL
my ($skip, $course, $host, $user) = split /\//,$ENV{PATH_INFO},4;
$l3config::Config{"class"}=$course if $course ne 'current';
$XMLTraining = load_training;
my @args=(
"--output" => "-",
"--show_comments" => "no",
"--course-center" => $XMLTraining->{center},
"--course-trainer" => $XMLTraining->{instructor}->{firstname}." ".$XMLTraining->{instructor}->{surname},
"--course-student" => $XMLTraining->{host}->{$host}->{firstname}." ".$XMLTraining->{host}->{$host}->{surname},
"--course-code" => $XMLTraining->{course},
"--course-date" => $XMLTraining->{date},
"--encoding" => $XMLTraining->{host}->{$host}->{charset},
);
if ($course ne 'current') {
push @args, ("--backend_datafile" => "/var/lilalo/lablogs-xml/$course/$host/$user.xml");
} else {
push @args, ("--filter" => "hostname=".$host."&user=".$user);
}
open (FRONTEND, "./l3-frontend ".join(" ",map("\"$_\"",@args))." |");
while () {
print;
}
close(FRONTEND);
}