Archived
1
0

Merge branch 'master' of ssh://cpp/liblerdorf

This commit is contained in:
Root Cpp Charlie 2013-10-02 18:26:22 +02:00
commit f26a78b252
3 changed files with 95 additions and 1 deletions

View File

@ -79,6 +79,7 @@ then
noyce)
launch_screen "lerdorf_process_files_intradata_get" "while true; do $PERL ~/liblerdorf/process/files/intradata_get.pl; done"
launch_screen "lerdorf_process_projects_gen_grading" "while true; do $PERL ~/liblerdorf/process/projects/gen_grading.pl; done"
launch_screen "lerdorf_process_projects_get_csv" "while true; do $PERL ~/liblerdorf/process/projects/get_csv.pl; done"
;;
ksh)

View File

@ -30,7 +30,7 @@ sub process
if (! -d "$basedir/$year/$project_id")
{
log ERROR, "Unable to find $project_id in $year";
return "Unable to find $project_id in $year";
return "Unable to find $project_id in $year\n";
}
my $grade = Grading->new();

View File

@ -0,0 +1,93 @@
#! /usr/bin/env perl
use v5.10.1;
use strict;
use warnings;
use Carp;
use Pod::Usage;
use Text::ParseWords;
use XML::LibXML;
use ACU::Log;
use ACU::LDAP;
use ACU::Process;
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\n";
}
my %grades;
my @headers;
opendir(my $dh, "$basedir/$year/$project_id/grades/") or croak "can't opendir $basedir/$year/$project_id/grades/: $!";
for my $gfile (grep { ( ! /^\./ ) && -f "$basedir/$year/$project_id/grades/$_" } readdir($dh))
{
my $login;
($login = $gfile) =~ s/\.xml$//;
open my $xml, "<", "$basedir/$year/$project_id/grades/$gfile" or die $!;
binmode $xml;
my $dom = XML::LibXML->load_xml(IO => $xml);
close $xml;
my @ugrades = @headers;
for my $grade ($dom->documentElement()->getElementsByTagName("grade"))
{
my $i;
for ($i = 0; $i <= $#ugrades; $i++)
{
if ($ugrades[$i] == $grade->getAttribute("name"))
{
$ugrades[$i] = $grade->getAttribute("value");
last;
}
}
if ($i > $#ugrades)
{
push @headers, $grade->getAttribute("name");
push @ugrades, $grade->getAttribute("value");
}
}
$grades{$login} = \@ugrades;
}
closedir $dh;
# Print CSV
my $out = "login";
for my $header (@headers) {
$out .= ",$header";
}
$out .= "\n";
for my $login (keys %grades) {
$out .= "$login";
my @ugrades = \$grades{$login};
for my $header (@headers)
{
my $g = shift @ugrades;
$out .= $g if ($g && $g ne $header);
$out .= ",";
}
$out .= "\n";
}
return $out;
}
Process::register_no_parse("get_csv", \&process);