--- loncom/interface/lonprintout.pm 2005/07/05 18:15:25 1.377 +++ loncom/interface/lonprintout.pm 2005/09/16 20:39:56 1.381.2.2 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.377 2005/07/05 18:15:25 albertel Exp $ +# $Id: lonprintout.pm,v 1.381.2.2 2005/09/16 20:39:56 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,8 +42,6 @@ use Apache::lonratedt; use POSIX qw(strftime); use Apache::lonlocal; -my $resources_printed = ''; - # Compare two students by name. The students are in the form # returned by the helper: # user:domain:section:last, first:status @@ -390,6 +388,7 @@ sub character_chart { $result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g; $result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g; $result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g; + $result =~ s/–/\\ensuremath\{-\}/g; $result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g; $result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g; $result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g; @@ -808,6 +807,7 @@ sub get_page_breaks { sub output_data { my ($r,$helper,$rparmhash) = @_; my %parmhash = %$rparmhash; + my $resources_printed = ''; my $html=&Apache::lonxml::xmlbegin(); my $bodytag=&Apache::loncommon::bodytag('Preparing Printout'); $r->print(<{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) { - $form{'grade_target'}='answer'; - $form{'answer_output_mode'}='tex'; - $form{'rndseed'}=$rndseed; - $form{'problem_split'}=$parmhash{'problem_stream_switch'}; + # Don't permanently modify %$form... + my %answerform = %form; + $answerform{'grade_target'}='answer'; + $answerform{'answer_output_mode'}='tex'; + $answerform{'rndseed'}=$rndseed; + $answerform{'problem_split'}=$parmhash{'problem_stream_switch'}; if ($urlp=~/\/res\//) {$env{'request.state'}='published';} $resources_printed .= $urlp.':'; - my $answer=&Apache::lonnet::ssi($urlp,%form); + my $answer=&Apache::lonnet::ssi($urlp,%answerform); if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } else { @@ -1105,10 +1107,12 @@ ENDPART my $current_counter=$env{'form.counter'}; if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { - $form{'grade_target'}='answer'; - $form{'answer_output_mode'}='tex'; + # Don't permanently pervert the %form hash + my %answerform = %form; + $answerform{'grade_target'}='answer'; + $answerform{'answer_output_mode'}='tex'; $resources_printed .= $urlp.':'; - my $answer=&Apache::lonnet::ssi($urlp,%form); + my $answer=&Apache::lonnet::ssi($urlp,%answerform); &Apache::lonnet::appenv(('form.counter' => $current_counter)); if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; @@ -1240,23 +1244,41 @@ ENDPART my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'}; my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'}; my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'}; + + my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; + open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); + my ($code_type,$code_length)=('letter',6); + foreach my $line () { + my ($name,$type,$length) = (split(/:/,$line))[0,2,4]; + if ($name eq $code_option) { + $code_length=$length; + if ($type eq 'number') { $code_type = 'number'; } + } + } my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); $moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; my $seed=time+($$<<16)+($$); my @allcodes; if ($old_name) { - my %result=&Apache::lonnet::get('CODEs',[$old_name],$cdom,$cnum); + my %result=&Apache::lonnet::get('CODEs', + [$old_name,"type\0$old_name"], + $cdom,$cnum); + $code_type=$result{"type\0$old_name"}; @allcodes=split(',',$result{$old_name}); $num_todo=scalar(@allcodes); } else { my %allcodes; srand($seed); for (my $i=0;$i<$num_todo;$i++) { - $moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,'6'); + $moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,$code_length, + $code_type); } if ($code_name) { &Apache::lonnet::put('CODEs', - {$code_name =>join(',',keys(%allcodes))}, + { + $code_name =>join(',',keys(%allcodes)), + "type\0$code_name" => $code_type + }, $cdom,$cnum); } @allcodes=keys(%allcodes); @@ -1272,7 +1294,11 @@ ENDPART my $count=0; foreach my $code (sort(@allcodes)) { my $file_num=int($count/$number_per_page); - $moreenv{'CODE'}=&num_to_letters($code); + if ($code_type eq 'number') { + $moreenv{'CODE'}=$code; + } else { + $moreenv{'CODE'}=&num_to_letters($code); + } my ($output,$fullname, $printed)= &print_resources($r,$helper,'anonymous',$type,\%moreenv, \@master_seq,$flag_latex_header_remove, @@ -1312,12 +1338,14 @@ ENDPART my $texversion=&Apache::lonnet::ssi($urlp,%form); if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { - $form{'grade_target'}='answer'; - $form{'answer_output_mode'}='tex'; - $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; - $form{'rndseed'}=$rndseed; + # Don't permanently pervert %form: + my %answerform = %form; + $answerform{'grade_target'}='answer'; + $answerform{'answer_output_mode'}='tex'; + $answerform{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; + $answerform{'rndseed'}=$rndseed; $resources_printed .= $urlp.':'; - my $answer=&Apache::lonnet::ssi($urlp,%form); + my $answer=&Apache::lonnet::ssi($urlp,%answerform); if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } else { @@ -1373,7 +1401,7 @@ ENDPART #-- writing .tex file in prtspool my $temp_file; my $identifier = &Apache::loncommon::get_cgi_id(); - my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_".$identifier.".tex"; + my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex"; if (!($#print_array>0)) { unless ($temp_file = Apache::File->new('>'.$filename)) { $r->log_error("Couldn't open $filename for output $!"); @@ -1396,7 +1424,8 @@ ENDPART my $temp_file; my $newfilename=$filename; my $num=$i+1; - $newfilename =~s/\.tex$/_$num\.tex/; + $newfilename =~s/\.tex$//; + $newfilename=sprintf("%s_%03d.tex",$newfilename, $num); unless ($temp_file = Apache::File->new('>'.$newfilename)) { $r->log_error("Couldn't open $newfilename for output $!"); return SERVER_ERROR; @@ -1472,14 +1501,18 @@ sub num_to_letters { } sub get_CODE { - my ($all_codes,$num,$seed,$size)=@_; + my ($all_codes,$num,$seed,$size,$type)=@_; my $max='1'.'0'x$size; my $newcode; while(1) { $newcode=sprintf("%06d",int(rand($max))); if (!exists($$all_codes{$newcode})) { $$all_codes{$newcode}=1; - return &num_to_letters($newcode); + if ($type eq 'number' ) { + return $newcode; + } else { + return &num_to_letters($newcode); + } } } } @@ -1526,9 +1559,11 @@ sub print_resources { my $current_counter=$env{'form.counter'}; if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { - $moreenv->{'answer_output_mode'}='tex'; - $moreenv->{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; - my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%{$moreenv}); + # Use a copy of the hash so we don't pervert it on future loop passes. + my %answerenv = %{$moreenv}; + $answerenv{'answer_output_mode'}='tex'; + $answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; + my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv); &Apache::lonnet::appenv(('form.counter' => $current_counter)); if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; @@ -1930,8 +1965,22 @@ CHOOSE_STUDENTS my $namechoice=''; foreach my $name (sort {uc($a) cmp uc($b)} @names) { if ($name =~ /^error: 2 /) { next; } + if ($name =~ /^type\0/) { next; } $namechoice.=''.$name.''; } + open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); + my $codechoice=''; + foreach my $line () { + my ($name,$description,$code_type,$code_length)= + (split(/:/,$line))[0,1,2,4]; + if ($code_length > 0 && + $code_type =~/^(letter|number|-1)/) { + $codechoice.=''.$description.''; + } + } + if ($codechoice eq '') { + $codechoice='Default'; + } &Apache::lonxml::xmlparse($r, 'helper', < PAGESIZE @@ -1950,6 +1999,12 @@ CHOOSE_STUDENTS Names to store the CODEs under for later: + + Bubble sheet type: + + + $codechoice +
Reprint a set of saved CODEs: @@ -2017,6 +2072,12 @@ CHOOSE_STUDENTS1 Names to store the CODEs under for later: + + Bubble sheet type: + + + $codechoice +
Reprint a set of saved CODEs: @@ -2192,11 +2253,11 @@ CHOOSE_FROM_ANY_SEQUENCE
Use style file: -   Select style file - +   Select style file Show all foils? + RNDSEED &Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); $helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'};