Merge branch 'master' of ssh://cpp/liblerdorf
This commit is contained in:
commit
f26a78b252
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
93
process/projects/get_csv.pl
Normal file
93
process/projects/get_csv.pl
Normal 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);
|
Reference in New Issue
Block a user