#! /usr/bin/env perl use v5.10.1; use strict; use warnings; use Carp; use Pod::Usage; use Text::ParseWords; use lib "../../"; use ACU::Defense; use ACU::Grading; use ACU::Log; use ACU::LDAP; use ACU::Process; use ACU::Trace; our $basedir = "/intradata"; sub process { my $given_args = shift; my @args = shellwords(${ shift() }); my $project_id = shift @args; my $year = shift @args // LDAP::get_year; # Project existing? if (! -d "$basedir/$year/$project_id") { log ERROR, "Unable to find $project_id in $year"; return "Unable to find $project_id in $year"; } my $grade = Grading->new(); my @defenses; # Create defenses groups opendir(my $dh, "$basedir/$year/$project_id/defenses/") or croak "can't opendir $basedir/$year/$project_id/defenses/: $!"; for my $sout (grep { ( ! /^\./ ) && -f "$basedir/$year/$project_id/defenses/$_" } readdir($dh)) { push @defenses, $sout; open my $xml, "<", "$basedir/$year/$project_id/defenses/$sout" or die $!; binmode $xml; my $str; $str .= $_ while (<$xml>); my $defense = Defense->new($str); my $ids = $defense->getIds(); $ids->{'def_end_$LOGIN'} = undef; $ids->{'def_end_group'} = undef; $grade->create_from_ids($sout, $ids); } closedir $dh; # Create traces groups opendir($dh, "$basedir/$year/$project_id/traces/") or croak "can't opendir $basedir/$year/$project_id/traces/: $!"; for my $dir (grep { ( ! /^\./ ) && -d "$basedir/$year/$project_id/traces/$_" } readdir($dh)) { next if (! grep { $dir eq "defense_$_" } @defenses); my $ids = {}; opendir(my $dhm, "$basedir/$year/$project_id/traces/$dir") or croak "can't opendir $basedir/$year/$project_id/traces/$dir: $!"; for my $login (grep { ( ! /^\./ ) && -f "$basedir/$year/$project_id/traces/$dir/$_" } readdir($dhm)) { open my $xml, "<", "$basedir/$year/$project_id/traces/$dir/$login" or die $!; binmode $xml; my $trace = Trace->new($xml); my %tids = %{ $trace->getIds() }; for my $kid (keys %tids) { $ids->{ $kid } = $tids{ $kid }; } } $grade->create_from_ids($dir, $ids); } closedir $dh; return $grade->toString; } Process::register_no_parse("gen_grading", \&process);