diff --git a/process/files/intradata_get.pl b/process/files/intradata_get.pl index 7e1eae3..c1f58e0 100644 --- a/process/files/intradata_get.pl +++ b/process/files/intradata_get.pl @@ -42,7 +42,7 @@ sub create_tree($$) croak "No directory for year $year. Ask a root to create it." if (! -d "$basedir/$year/"); if (! -e "$basedir/$year/$project_id/") { - mkdir "$basedir/$year/$project_id/" or croak $!; + mkdir "$basedir/$year/$project_id/" or die $!; } } @@ -57,11 +57,14 @@ sub grades_generate croak "No project_id given." if (! $project_id); if (! -e "$basedir/$year/$project_id/grades/") { - mkdir "$basedir/$year/$project_id/grades/" or croak $!; + mkdir "$basedir/$year/$project_id/grades/" or die $!; } log DEBUG, "Generate list of students"; + # Get groups from the intranet + my $groups = API::Projects::get_groups($project_id, $year); + # Create list of students to generate my @logins; if ($args->{unamed}) @@ -72,22 +75,11 @@ sub grades_generate } else { - opendir(my $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)) - { - 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)) - { - $login =~ s/\.xml$//; - if (! grep { /^\Q$login\E$/ } @logins) { - push @logins, $login; - } + map { + for my $member (@{ $_->{stds} }) { + push @logins, $member->{login}; } - - closedir $dhm; - } - closedir $dh; + } @{ $groups->{groups} }; } log TRACE, @logins; @@ -110,18 +102,46 @@ sub grades_generate log DEBUG, "Generating grades for $login"; for my $dir (@trace_dirs) { - log DEBUG, "Generating grades from $dir"; - if (-f "$basedir/$year/$project_id/traces/$dir/$login.xml") + log DEBUG, "Fetching identifiers from $dir"; + + my $tr_file = "$year/$project_id/traces/$dir/$login.xml"; + + # Looking for a group traces? + if (! -f "$basedir/$tr_file") { - open my $xmltrace, "<", "$basedir/$year/$project_id/traces/$dir/$login.xml" or croak "traces/$dir/$login.xml: $!"; + for my $grp (@{ $groups->{groups} }) + { + my $this = 0; + my $chief; + for my $member (@{ $grp->{stds} }) + { + if ($member->{chief} eq "true" or $member->{chief} eq "1" or $member->{chief} eq "chief") + { + $chief = $member; + next; + } + $this = 1 if ($member->{login} eq $login); + } + if ($this && $chief) + { + $tr_file = "$year/$project_id/traces/$dir/".$chief->{login}.".xml"; + log DEBUG, "Using group trace: chief is ".$chief->{login}; + last; + } + } + } + + if (-f "$basedir/$tr_file") + { + open my $xmltrace, "<", "$basedir/$tr_file" or croak "$tr_file: $!"; binmode $xmltrace; my $trace = Trace->new($xmltrace); close $xmltrace; - log DEBUG, "Fill from file: traces/$dir/$login.xml"; + log DEBUG, "Fill from file: $tr_file"; log TRACE, $trace->getIds; - $grading->fill($trace->getIds); + $grading->fill($trace->getIds($login)); } } @@ -149,10 +169,10 @@ sub grades_new_bonus croak "No project_id given" if (! $project_id); if (! -e "$basedir/$year/$project_id/traces/") { - mkdir "$basedir/$year/$project_id/traces/" or croak $!; + mkdir "$basedir/$year/$project_id/traces/" or die $!; } if (! -e "$basedir/$year/$project_id/traces/bonus/") { - mkdir "$basedir/$year/$project_id/traces/bonus/" or croak $!; + mkdir "$basedir/$year/$project_id/traces/bonus/" or die $!; } for my $kfile (keys %{ $args->{files} }) @@ -192,7 +212,7 @@ sub grades_new_bonus } if (-e "$basedir/$year/$project_id/traces/bonus/$login.xml") { - open my $xml, "<", "$basedir/$year/$project_id/traces/bonus/$login.xml" or croak $!; + open my $xml, "<", "$basedir/$year/$project_id/traces/bonus/$login.xml" or die $!; binmode $xml; $trace = Trace->new($xml); close $xml; @@ -216,7 +236,7 @@ sub grades_new_bonus log DEBUG, "Updating $basedir/$year/$project_id/traces/bonus/$login.xml"; - open my $xml, ">", "$basedir/$year/$project_id/traces/bonus/$login.xml" or croak $!; + open my $xml, ">", "$basedir/$year/$project_id/traces/bonus/$login.xml" or die $!; print $xml $trace->toString(); close $xml; } @@ -251,19 +271,19 @@ sub update_defense log INFO, "Update $year/$project_id/defenses/$defense_id.xml"; if (! -e "$basedir/$year/$project_id/defenses/") { - mkdir "$basedir/$year/$project_id/defenses/" or croak $!; + mkdir "$basedir/$year/$project_id/defenses/" or die $!; } if (! -e "$basedir/$year/$project_id/traces/") { - mkdir "$basedir/$year/$project_id/traces/" or croak $!; + mkdir "$basedir/$year/$project_id/traces/" or die $!; } if (! -e "$basedir/$year/$project_id/traces/defense_$defense_id/") { - mkdir "$basedir/$year/$project_id/traces/defense_$defense_id/" or croak $!; + mkdir "$basedir/$year/$project_id/traces/defense_$defense_id/" or die $!; my ($login, $pass, $uid, $gid) = getpwnam("www-data"); - chown $uid, $gid, "$basedir/$year/$project_id/traces/defense_$defense_id/" or croak $!; - chmod 0775, "$basedir/$year/$project_id/traces/defense_$defense_id/" or croak $!; + chown $uid, $gid, "$basedir/$year/$project_id/traces/defense_$defense_id/" or die $!; + chmod 0775, "$basedir/$year/$project_id/traces/defense_$defense_id/" or die $!; } - open my $out, ">", "$basedir/$year/$project_id/defenses/$defense_id.xml" or croak $!; + open my $out, ">", "$basedir/$year/$project_id/defenses/$defense_id.xml" or die $!; print $out $defense; close $out; @@ -322,11 +342,11 @@ sub update_trace log INFO, "Update $year/$project_id/traces/$rendu_id/$login.xml"; if (! -e "$basedir/$year/$project_id/traces/") { - mkdir "$basedir/$year/$project_id/traces/" or croak $!; + mkdir "$basedir/$year/$project_id/traces/" or die $!; } if (! -e "$basedir/$year/$project_id/traces/$rendu_id/") { - mkdir "$basedir/$year/$project_id/traces/$rendu_id/" or croak $!; - chmod 0755, "$basedir/$year/$project_id/traces/$rendu_id/" or croak $!; + mkdir "$basedir/$year/$project_id/traces/$rendu_id/" or die $!; + chmod 0755, "$basedir/$year/$project_id/traces/$rendu_id/" or die $!; } open my $out, ">", "$basedir/$year/$project_id/traces/$rendu_id/$login.xml" or croak("Unable to write to $rendu_id/$login.xml");