Archived
1
0
Fork 0

Interact with new intranet group API

This commit is contained in:
Mercier Pierre-Olivier 2013-10-30 02:38:50 +01:00
parent 27f7b7c9ce
commit 1f61b7a144
3 changed files with 135 additions and 0 deletions

View file

@ -46,6 +46,7 @@ sub parse($$)
$sax_handler = ProjectHandler->new($parsed);
}
$sax_handler = ProjectMemberHandler->new($parsed) if ($mod eq "ProjectMemberHandler");
$sax_handler = ProjectGroupHandler->new($parsed) if ($mod eq "ProjectGroupHandler");
my $parser = XML::SAX::ParserFactory->parser( Handler => $sax_handler );
@ -234,4 +235,81 @@ sub end_element
}
}
package ProjectGroupHandler;
use v5.10.1;
use strict;
use warnings;
sub new ($$)
{
my $class = shift;
my $self = {
parsed => shift,
inStd => 0,
inResult => 0,
lastGroup => {},
values => ""
};
bless $self, $class;
return $self;
}
sub start_element
{
my ($self, $element) = @_;
if ($element->{Name} eq "result") {
$self->{parsed}{result} = $self->{values};
$self->{inResult} = 0;
$self->{values} = "";
}
elsif ($element->{Name} eq "student")
{
$self->{inStd} = 1;
push @{ $self->{lastGroup}{stds} }, {
id => $element->{Attributes}{"{}id"}{Value},
chief => $element->{Attributes}{"{}chief"}{Value},
login => "",
};
}
elsif ($element->{Name} eq "group")
{
$self->{lastGroup}{id} = $element->{Attributes}{"{}id"}{Value};
$self->{lastGroup}{stds} = [];
}
}
sub characters
{
my ($self, $characters) = @_;
if ($self->{inStd}) {
$self->{values} .= $characters->{Data};
}
}
sub end_element
{
my ($self, $element) = @_;
if ($element->{Name} eq "group")
{
push @{ $self->{parsed}{groups} }, $self->{lastGroup};
$self->{lastGroup} = {};
$self->{inStd} = 0;
$self->{values} = "";
}
elsif ($element->{Name} eq "student")
{
my $size = @{ $self->{lastGroup}{stds} };
(@{ $self->{lastGroup}{stds} })[$size - 1]{login} = $self->{values};
$self->{values} = "";
}
}
1;

View file

@ -76,6 +76,28 @@ sub get_users($;$)
return $res;
}
sub get_groups($;$)
{
my $project_name = shift;
my $year = shift;
my $url;
if ($year) {
$url = "projects/groups/groups/$project_name/$year.xml";
} else {
$url = "projects/groups/groups/$project_name.xml";
}
my $res = API::Base::get('ProjectGroupHandler', $url);
#TODO: uncomment-me
#if ($res->{result} ne '0') {
# croak "Erreur durant la récupération : " . $res->{message};
#}
return $res;
}
sub add_grades($;$)
{
my %data = (

View file

@ -0,0 +1,35 @@
#!/usr/bin/env perl
use strict;
use warnings;
use v5.10;
use Data::Dumper;
use ACU::API::Projects;
my $projid = $ARGV[0];
my $year = $ARGV[1] // LDAP::get_year;
my $res = API::Projects::get_groups($projid, $year);
my $tag = "rendu-1";
map {
my $chief;
# First, found the chief
for my $member (@{ $_->{stds} })
{
if ($member->{chief} eq "true" or $member->{chief} eq "1" or $member->{chief} eq "chief")
{
$chief = $member;
last;
}
}
say "repo $year/$projid/$chief->{login}";
print ' RW+ = @admins';
for my $member (@{ $_->{stds} }) {
print ' '.$member->{login};
}
say "\n R = \@chefs \@resp-$year-$projid";
} @{ $res->{groups} };