intradata can get bonus/malus point
This commit is contained in:
parent
88eaf60cc5
commit
de06d5fd0d
2 changed files with 128 additions and 18 deletions
46
ACU/Trace.pm
46
ACU/Trace.pm
|
@ -11,7 +11,7 @@ use open qw(:encoding(UTF-8) :std);
|
||||||
use XML::LibXML;
|
use XML::LibXML;
|
||||||
use XML::SAX::ParserFactory;
|
use XML::SAX::ParserFactory;
|
||||||
|
|
||||||
sub new ($$)
|
sub new
|
||||||
{
|
{
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
my $self = {
|
my $self = {
|
||||||
|
@ -22,7 +22,9 @@ sub new ($$)
|
||||||
};
|
};
|
||||||
|
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
$self->_initialize(@_);
|
if ($#_ >= 0) {
|
||||||
|
$self->_initialize(@_);
|
||||||
|
}
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
@ -104,6 +106,44 @@ sub getIds ($)
|
||||||
return %{ $self->{ids} };
|
return %{ $self->{ids} };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub addId($$;$)
|
||||||
|
{
|
||||||
|
my $self = shift;
|
||||||
|
my $key = shift;
|
||||||
|
my $value = shift // 1;
|
||||||
|
|
||||||
|
$self->{ids}{$key} = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub toString ($;$)
|
||||||
|
{
|
||||||
|
my $self = shift;
|
||||||
|
my $main_grp = shift // "bonus_malus";
|
||||||
|
|
||||||
|
my $doc = XML::LibXML::Document->new('1.0');
|
||||||
|
|
||||||
|
my $root = $doc->createElement("trace");
|
||||||
|
|
||||||
|
my $group = $doc->createElement("group");
|
||||||
|
$group->addChild( $doc->createAttribute("id", $main_grp) );
|
||||||
|
|
||||||
|
for my $k (keys %{ $self->{ids} }) {
|
||||||
|
my $e = $doc->createElement("eval");
|
||||||
|
my $v = $doc->createElement("value");
|
||||||
|
|
||||||
|
$e->addChild( $doc->createAttribute("id", $k) );
|
||||||
|
$v->appendText( $self->{ids}{$k} );
|
||||||
|
|
||||||
|
$e->appendChild( $v );
|
||||||
|
$group->appendChild( $e );
|
||||||
|
}
|
||||||
|
|
||||||
|
$root->appendChild( $group );
|
||||||
|
$doc->setDocumentElement( $root );
|
||||||
|
|
||||||
|
return $doc->toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
package TraceHandler;
|
package TraceHandler;
|
||||||
|
|
||||||
|
@ -162,7 +202,7 @@ sub start_element
|
||||||
} else {
|
} else {
|
||||||
$self->{inValue} = NO_ID_VALUE;
|
$self->{inValue} = NO_ID_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->{values} = "";
|
$self->{values} = "";
|
||||||
}
|
}
|
||||||
elsif ($element->{Name} ne "group" && $element->{Name} ne "name" && $element->{Name} ne "statut" && $element->{Name} ne "status" && $element->{Name} ne "log") {
|
elsif ($element->{Name} ne "group" && $element->{Name} ne "name" && $element->{Name} ne "statut" && $element->{Name} ne "status" && $element->{Name} ne "log") {
|
||||||
|
|
|
@ -14,13 +14,16 @@ use ACU::Process;
|
||||||
our $basedir = "/intradata";
|
our $basedir = "/intradata";
|
||||||
|
|
||||||
my %actions = (
|
my %actions = (
|
||||||
|
"defense" => {
|
||||||
|
"update" => \&update_defense,
|
||||||
|
},
|
||||||
|
"grades" => {
|
||||||
|
"new_bonus" => \&grades_new_bonus,
|
||||||
|
},
|
||||||
"project" => {
|
"project" => {
|
||||||
"create" => \&update_project,
|
"create" => \&update_project,
|
||||||
"update" => \&update_project,
|
"update" => \&update_project,
|
||||||
"delete" => \&delete_project,
|
"delete" => \&delete_project,
|
||||||
},
|
|
||||||
"defense" => {
|
|
||||||
"update" => \&update_defense,
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -42,7 +45,7 @@ sub create_tree($$)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub update_project
|
sub grades_new_bonus
|
||||||
{
|
{
|
||||||
my $args = shift;
|
my $args = shift;
|
||||||
|
|
||||||
|
@ -54,22 +57,57 @@ sub update_project
|
||||||
return "No project_id given";
|
return "No project_id given";
|
||||||
}
|
}
|
||||||
|
|
||||||
my $butler;
|
if (! -e "$basedir/$year/$project_id/traces/") {
|
||||||
if (exists $args->{files}{"butler.xml"}) {
|
mkdir "$basedir/$year/$project_id/traces/";
|
||||||
$butler = $args->{files}{"butler.xml"};
|
|
||||||
}
|
}
|
||||||
if (! $butler) {
|
if (! -e "$basedir/$year/$project_id/traces/bonus/") {
|
||||||
log ERROR, "Invalid butler.xml received!";
|
mkdir "$basedir/$year/$project_id/traces/bonus/";
|
||||||
return "Invalid butler.xml received!";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log INFO, "Update $year/$project_id/butler.xml";
|
for my $kfile (keys %{ $args->{files} })
|
||||||
|
{
|
||||||
|
my $kbonus = $kfile;
|
||||||
|
$kbonus =~ s/[^a-zA-Z0-9_-]/_/g;
|
||||||
|
|
||||||
return $_ if (create_tree($year, $project_id));
|
my @lines = ($args->{files}{$kfile} =~ tr/\n//);
|
||||||
|
|
||||||
open my $out, ">", "$basedir/$year/$project_id/butler.xml";
|
my $value = 1;
|
||||||
print $out $butler;
|
# Looking for a global value
|
||||||
close $out;
|
if ($lines[0] =~ /^\d+$/) {
|
||||||
|
$value = $1;
|
||||||
|
log INFO, "Setting global value to $value";
|
||||||
|
shift @lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $line (@lines)
|
||||||
|
{
|
||||||
|
if ($line =~ /^([a-z0-9_-]+)(?:\s*:\s*(\d+))?$/)
|
||||||
|
{
|
||||||
|
my $login = $1;
|
||||||
|
my $tvalue = $2 // $value;
|
||||||
|
my $trace;
|
||||||
|
|
||||||
|
if (-e "$basedir/$year/$project_id/traces/bonus/$login.xml") {
|
||||||
|
open my $xml, "<", "$basedir/$year/$project_id/traces/bonus/$login.xml" or croak $!;
|
||||||
|
binmode $xml;
|
||||||
|
$trace = Trace->new($xml);
|
||||||
|
close $xml;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$trace = Trace->new();
|
||||||
|
}
|
||||||
|
|
||||||
|
$trace->addId($kbonus, $tvalue);
|
||||||
|
|
||||||
|
open my $xml, ">", "$basedir/$year/$project_id/traces/bonus/$login.xml" or croak $!;
|
||||||
|
print $xml $trace->toString();
|
||||||
|
close $xml
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log WARN, "Invalid login $line, line skiped";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return "Ok";
|
return "Ok";
|
||||||
}
|
}
|
||||||
|
@ -124,6 +162,38 @@ sub update_defense
|
||||||
return "Ok";
|
return "Ok";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub update_project
|
||||||
|
{
|
||||||
|
my $args = shift;
|
||||||
|
|
||||||
|
my $project_id = $args->{param}{id};
|
||||||
|
my $year = $args->{param}{year} // LDAP::get_year;
|
||||||
|
|
||||||
|
if (! $project_id) {
|
||||||
|
log ERROR, "No project_id given.";
|
||||||
|
return "No project_id given";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $butler;
|
||||||
|
if (exists $args->{files}{"butler.xml"}) {
|
||||||
|
$butler = $args->{files}{"butler.xml"};
|
||||||
|
}
|
||||||
|
if (! $butler) {
|
||||||
|
log ERROR, "Invalid butler.xml received!";
|
||||||
|
return "Invalid butler.xml received!";
|
||||||
|
}
|
||||||
|
|
||||||
|
log INFO, "Update $year/$project_id/butler.xml";
|
||||||
|
|
||||||
|
return $_ if (create_tree($year, $project_id));
|
||||||
|
|
||||||
|
open my $out, ">", "$basedir/$year/$project_id/butler.xml";
|
||||||
|
print $out $butler;
|
||||||
|
close $out;
|
||||||
|
|
||||||
|
return "Ok";
|
||||||
|
}
|
||||||
|
|
||||||
sub delete_project
|
sub delete_project
|
||||||
{
|
{
|
||||||
log WARN, "delete_project: not implemented."
|
log WARN, "delete_project: not implemented."
|
||||||
|
|
Reference in a new issue