diff --git a/process/projects/gen_grading.pl b/process/projects/gen_grading.pl index 6c04c57..877bb8d 100644 --- a/process/projects/gen_grading.pl +++ b/process/projects/gen_grading.pl @@ -35,62 +35,68 @@ sub process 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)) - { - my $sid; - ($sid = $sout) =~ s/\.xml$//; - push @defenses, $sid; - - 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(); - - my @keys = keys %$ids; - my $def_i = $keys[0]; - $def_i =~ s/^(.+)g.*$/$1/; - - $ids->{$def_i.'_end_$LOGIN'} = undef; - $ids->{$def_i.'_end_group'} = undef; - - $grade->create_from_ids($sid, $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)) + if (-d "$basedir/$year/$project_id/defenses/") { - next if (grep { $dir eq "defense_$_" } @defenses); + 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)) + { + my $sid; + ($sid = $sout) =~ s/\.xml$//; + push @defenses, $sid; - 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 $!; + open my $xml, "<", "$basedir/$year/$project_id/defenses/$sout" or die $!; binmode $xml; - my $trace = Trace->new($xml); + my $str; + $str .= $_ while (<$xml>); - my %tids = %{ $trace->getIds() }; - for my $kid (keys %tids) - { - $ids->{ $kid } = $tids{ $kid }; - } + my $defense = Defense->new($str); + + my $ids = $defense->getIds(); + + my @keys = keys %$ids; + my $def_i = $keys[0]; + $def_i =~ s/^(.+)g.*$/$1/; + + $ids->{$def_i.'_end_$LOGIN'} = undef; + $ids->{$def_i.'_end_group'} = undef; + + $grade->create_from_ids($sid, $ids); } - - $grade->create_from_ids($dir, $ids); + closedir $dh; + } + + if (-d "$basedir/$year/$project_id/traces/") + { + # 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; } - closedir $dh; return $grade->toString; }