';
}
return $result;
}
@@ -829,10 +906,12 @@ sub answer_footer {
my ($type) = @_;
my $result;
if ($env{'form.answer_output_mode'} eq 'tex') {
- my $columns = scalar(@answer_bits)-1;
- $result = ' \vskip 0 mm \noindent \begin{tabular}{|p{1.5cm}|'.'p{3cm}|'x$columns.'}\hline ';
- $result .= join(' & ',@answer_bits);
- $result .= ' \\\\ \\hline \end{tabular} \vskip 0 mm ';
+ $result = ' \vskip 0 mm \noindent \begin{tabular}{|p{1.5cm}|p{6.8cm}|}\hline ';
+ $result .= $answer_bits[0].'&\vspace*{-4mm}\begin{itemize}';
+ for (my $i=1;$i<=$#answer_bits;$i++) {
+ $result.='\item '.$answer_bits[$i].'\vspace*{-7mm}';
+ }
+ $result .= ' \end{itemize} \\\\ \hline \end{tabular} \vskip 0 mm ';
} else {
if (!$need_row_start) {
$result .= '
';
@@ -854,12 +933,16 @@ sub showallfoils {
}
}
if ($Apache::lonhomework::type eq 'survey') { return 1; }
+ if ($Apache::lonhomework::type eq 'surveycred') { return 1; }
+ if ($Apache::lonhomework::type eq 'anonsurvey') { return 1; }
+ if ($Apache::lonhomework::type eq 'anonsurveycred') { return 1; }
+
return 0;
}
=pod
-=item &getresponse($offset,$resulttype);
+=item &getresponse();
Retreives the current submitted response, helps out in the case of
scantron mode.
@@ -905,13 +988,17 @@ sub getresponse {
my $id = $Apache::inputtags::response[-1];
my $line;
+ my $startline = $env{'form.scantron_questnum_start.'.$part.'.'.$id};
+ if (!$startline) {
+ $startline = $Apache::lonxml::counter;
+ }
for ($line = 0; $line < $lines; $line++) {
- my $theline = $Apache::lonxml::counter+$offset-1+$line;
+ my $theline = $startline+$offset-1+$line;
$response = $env{"scantron.$theline.answer"};
if ((defined($response)) && ($response ne "") && ($response ne " ")) {
last;
}
-
+
}
# save bubbled letter for later
@@ -963,7 +1050,7 @@ sub repetition {
=pod
-=item &scored_response($part_id,$response_id);
+=item &scored_response();
Sets the results hash elements
@@ -1004,7 +1091,7 @@ sub scored_response {
}
sub whichorder {
- my ($max,$randomize,$showall,$hash)=@_;
+ my ($max,$randomize,$showall,$hash,$rndseed)=@_;
#&Apache::lonxml::debug("man $max randomize $randomize");
if (!defined(@{ $$hash{'names'} })) { return; }
my @names = @{ $$hash{'names'} };
@@ -1120,17 +1207,20 @@ sub pick_foil_for_concept {
$Apache::response::conceptgroup{'names'};
}
-#------------------------------------------------------------
-#
-# Get a parameter associated with a problem.
-# Parameters:
-# $id - the id of the paramater, either a part id,
-# or a partid and responspe id joined by _
-# $name - Name of the parameter to fetch
-# $default - Default value for the paramter.
-#
-#
-#
+
+=pod
+
+=item get_response_param()
+
+Get a parameter associated with a problem.
+Parameters:
+ $id - the id of the paramater, either a part id,
+ or a partid and responspe id joined by _
+ $name - Name of the parameter to fetch
+ $default - Default value for the paramter.
+
+=cut
+
sub get_response_param {
my ($id,$name,$default)=@_;
my $parameter;
@@ -1164,7 +1254,7 @@ sub submitted {
}
# Submit All button on a .page was pressed
if (defined($env{'form.all_submit'})) { return 1; }
- # otherwise no submission occured
+ # otherwise no submission occurred
return 0;
}
@@ -1191,14 +1281,21 @@ sub add_to_gradingqueue {
}
}
-# basically undef and 0 (both false) mean that they still have work to do
-# and all true values mean that they can't do any more work
-#
-# a return of undef means it is unattempted
-# a return of 0 means it is attmpted and wrong but still has tries
-# a return of 1 means it is marked correct
-# a return of 2 means they have exceed maximum number of tries
-# a return of 3 means it after the answer date
+=pod
+
+=item check_status()
+
+basically undef and 0 (both false) mean that they still have work to do
+and all true values mean that they can't do any more work
+
+ a return of undef means it is unattempted
+ a return of 0 means it is attmpted and wrong but still has tries
+ a return of 1 means it is marked correct
+ a return of 2 means they have exceed maximum number of tries
+ a return of 3 means it after the answer date
+
+=cut
+
sub check_status {
my ($id)=@_;
if (!defined($id)) { $id=$Apache::inputtags::part; }
@@ -1223,7 +1320,7 @@ sub check_status {
=pod
-=item setup_prior_tries_hash($func,$data)
+=item setup_prior_tries_hash()
Foreach each past .submission $func is called with 3 arguments
- the mode to set things up for (currently always 'grade')
@@ -1234,25 +1331,40 @@ sub check_status {
- scalars that are other elements of the history hash to pass to $func
- ref to data to be passed untouched to $func
+ $questiontype is the questiontype (currently only passed in if
+ randomizebytry.
+
=cut
sub setup_prior_tries_hash {
- my ($func,$data) = @_;
+ my ($func,$data,$questiontype) = @_;
my $part = $Apache::inputtags::part;
- my $id = $Apache::inputtags::response[-1];
+ my $id = $Apache::inputtags::response[-1];
foreach my $i (1..$Apache::lonhomework::history{'version'}) {
- my $sub_key = "$i:resource.$part.$id.submission";
+ my $partprefix = "$i:resource.$part";
+ my $sub_key = "$partprefix.$id.submission";
next if (!exists($Apache::lonhomework::history{$sub_key}));
+ my $type_key = "$partprefix.type";
+ my $type = $Apache::lonhomework::history{$type_key};
my @other_data;
- foreach my $datum (@{ $data }) {
- if (ref($datum)) {
- push(@other_data,$datum);
- } else {
- my $info_key = "$i:resource.$part.$id.$datum";
- push(@other_data,$Apache::lonhomework::history{$info_key});
+ if (ref($data) eq 'ARRAY') {
+ foreach my $datum (@{ $data }) {
+ if (ref($datum)) {
+ push(@other_data,$datum);
+ } else {
+ my $info_key = "$i:resource.$part.$id.$datum";
+ push(@other_data,$Apache::lonhomework::history{$info_key});
+ }
}
- }
-
+ }
+ if ($questiontype eq 'randomizetry') {
+ my $order_key = "$partprefix.$id.foilorder";
+ my @whichopts = &Apache::lonnet::str2array($Apache::lonhomework::history{$order_key});
+ if (@whichopts > 0) {
+ shift(@other_data);
+ unshift(@other_data,\@whichopts);
+ }
+ }
my $output =
&$func('grade',
$Apache::lonhomework::history{$sub_key},
@@ -1266,3 +1378,6 @@ sub setup_prior_tries_hash {
1;
__END__
+=pod
+
+=cut