#!/usr/bin/perl
use strict;
use CGI qw(:standard);
use XML::Simple;
use utf8;
BEGIN {
chdir("/home/devi/cvs/lilalo");
require l3config;
l3config::init_config();
};
my %filter;
for my $key (qw(login_from local_session_id action)) {
$filter{$key} = param($key) if param($key);
$filter{$key} = $ENV{$key} if defined $ENV{$key};
}
my %Trainings;
my $XMLTraining;
my %Machines;
my $print = "";
$l3config::Config{cgi2file} = $ENV{cgi2file} if defined($ENV{cgi2file});
$ENV{PATH_INFO} = $l3config::Config{cgi_path_info} if $l3config::Config{cgi_path_info};
my $is_not_cgi="";
$is_not_cgi = "1" if $l3config::Config{cgi2file};
# Пока что мы считаем, что вызов выполняется через CGI,
# если не установлена переменная cgi2file
# и не передан такой аргумент командной строки.
# Это неверно, но как временное решение - пойдёт
my $to_file = $l3config::Config{cgi2file};
$l3config::Config{frontend_css} =~ s@^/@@ if $is_not_cgi;
sub load_training
{
my $training_file;
$training_file = $_[0] || $l3config::Config{"classfile"} ||
$l3config::Config{"path_classes"}.$l3config::Config{"class"}.$l3config::Config{"class_suffix"};
my $XMLTraining = XMLin($training_file , ForceArray => [ 'student' ] )
or die "Can't open file of the training ",$training_file,"\n";
my $course_file = $l3config::Config{"courses_path"}.$XMLTraining->{"course"}.".xml";
my $XMLCourse;
if (eval{$XMLCourse = XMLin($course_file)}) {
$XMLTraining->{"course-name"} = $XMLCourse->{"fullname"};
}
for my $student (@{$XMLTraining->{"student"}}) {
$XMLTraining->{host}->{$student->{"host"}}=$student;
}
return $XMLTraining;
}
if ($ENV{PATH_INFO} eq "/index") {
# Показываем индекс курсов
my @training_files = glob($l3config::Config{"path_classes"}."/2*".$l3config::Config{"class_suffix"});
if (@training_files) {
for my $training_file (@training_files) {
$training_file =~ s@.*/@@;
$training_file =~ s@$l3config::Config{"class_suffix"}$@@;
my $training = load_training($training_file);
$Trainings{$training->{"date"}}=$training;
}
$print .= "\n";
$print .= "
\n";
if ($is_not_cgi) {
# Это грязный хак
# Если мы чувствуем, что нас вызывают для генерения индексного файла,
# нам нужно создать и файлы, на которые он указывает
# Лучше было бы это сделать хотя бы через вызов функций
# Такой же хак чуть ниже
mkdir("$path/$host");
system("$0 --cgi2file $path/$prefix$host/root$suffix ".
"--cgi_path_info ".$training."/".$host."/root ".
"--frontend_css ../$l3config::Config{frontend_css}");
system("$0 --cgi2file $path/$prefix$host/".$h->{user}."$suffix ".
"--cgi_path_info ".$training."/".$host."/".$h->{user}." ".
"--frontend_css ../$l3config::Config{frontend_css}");
# system("$0 --cgi2file $path/$prefix$host$suffix ".
# "--cgi_path_info ".$training."/".$host." ".
# "--frontend_css ../$l3config::Config{frontend_css}");
}
}
# Такой же хак был чуть выше
if ($is_not_cgi) {
# $print .= "