\n";
+ $Str .= &Apache::loncommon::end_data_table().&Apache::loncommon::end_scrollbox()."\n";
return $Str;
}
@@ -222,7 +240,7 @@ and their contents. A checkbox is provi
####################################################
####################################################
sub MultipleProblemSelector {
- my ($navmap,$inputname,$formname)=@_;
+ my ($navmap,$inputname,$formname,$anoncounter)=@_;
my $cid = $env{'request.course.id'};
my $Str;
# Massage the input as needed.
@@ -238,7 +256,7 @@ sub MultipleProblemSelector {
my $selected = {map { ($_,1) } (&get_selected_symbs($inputname))};
# Header
$Str .= <<"END";
-
END
- $Str .=
+ my $checkanonjs = <<"END";
+
+
+
+END
+ if (ref($anoncounter) eq 'HASH') {
+ if (keys(%{$anoncounter}) > 0) {
+ my $anonwarning = &mt('Your selection includes both problems with and without anonymous submissions.').'\n'.&mt('You must select either only anonymous or only named problems.').'\n\n'.&mt('If a selection contains both anonymous and named parts, [_1]use the Anoymous/Named buttons to ensure selections will be either all anonymous [_1]or all named.','\n');
+ $checkanonjs = <<"END";
+
+
+
+END
+ }
+ }
+ $Str .= $checkanonjs.
''.&mt('Select All').''.
(' 'x4).
''.&mt('Unselect All').'';
@@ -288,9 +363,27 @@ END
$seq_id++,
$inputname));
} elsif ($curRes->is_problem) {
+ my $anonpart = 0;
+ my $namedpart = 0;
+ my @parts = @{$curRes->parts()};
+ if (ref($anoncounter) eq 'HASH') {
+ if (keys(%{$anoncounter}) > 0) {
+ my @parts = @{$curRes->parts()};
+ my $symb = $curRes->symb();
+ foreach my $part (@parts) {
+ if ((exists($anoncounter->{$symb."\0".$part})) ||
+ $curRes->is_anonsurvey($part)) {
+ $anonpart ++;
+ } else {
+ $namedpart ++
+ }
+ }
+ }
+ }
if (@Accumulator && $Accumulator[-1] ne '') {
&{$Accumulator[-1]}($curRes,
- exists($selected->{$curRes->symb}));
+ exists($selected->{$curRes->symb}),
+ $anonpart,$namedpart);
}
}
}
@@ -318,20 +411,45 @@ sub new_accumulator {
return
sub {
if (@_) {
- my ($res,$checked) = @_;
+ my ($res,$checked,$anonpart,$namedpart) = @_;
$target.='