version 1.270.2.2, 2004/03/15 20:27:57
|
version 1.273, 2004/02/03 21:57:48
|
Line 647 sub path_to_problem {
|
Line 647 sub path_to_problem {
|
return '{\small\noindent\verb|'.$newurlp.'|\vskip 0 mm}'; |
return '{\small\noindent\verb|'.$newurlp.'|\vskip 0 mm}'; |
} |
} |
|
|
sub recalcto_mm { |
|
my $textwidth=shift; |
|
my $LaTeXwidth; |
|
if ($textwidth=~/(\d+\.?\d*)\s*cm/) { |
|
$LaTeXwidth = $1*10; |
|
} elsif ($textwidth=~/(\d+\.?\d*)\s*mm/) { |
|
$LaTeXwidth = $1; |
|
} elsif ($textwidth=~/(\d+\.?\d*)\s*in/) { |
|
$LaTeXwidth = $1*25.4; |
|
} |
|
$LaTeXwidth.=' mm'; |
|
return $LaTeXwidth; |
|
} |
|
|
|
sub output_data { |
sub output_data { |
my ($r,$helper,$rparmhash) = @_; |
my ($r,$helper,$rparmhash) = @_; |
my %parmhash = %$rparmhash; |
my %parmhash = %$rparmhash; |
Line 710 ENDPART
|
Line 696 ENDPART
|
} |
} |
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns); |
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns); |
my $assignment = $ENV{'form.assignment'}; |
my $assignment = $ENV{'form.assignment'}; |
my $LaTeXwidth=&recalcto_mm($textwidth); |
my $LaTeXwidth; |
|
if ($textwidth=~/(\d+\.?\d*)\s*cm/) { |
|
$LaTeXwidth = $1*10; |
|
} elsif ($textwidth=~/(\d+\.?\d*)\s*mm/) { |
|
$LaTeXwidth = $1; |
|
} elsif ($textwidth=~/(\d+\.?\d*)\s*in/) { |
|
$LaTeXwidth = $1*25.4; |
|
} |
|
$LaTeXwidth.=' mm'; |
|
my @print_array=(); |
|
|
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') { |
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') { |
#-- single document - problem, page, html, xml, ... |
#-- single document - problem, page, html, xml, ... |
my $currentURL; |
my $currentURL; |
Line 737 ENDPART
|
Line 733 ENDPART
|
} |
} |
my %form; |
my %form; |
$form{'grade_target'}='tex'; |
$form{'grade_target'}='tex'; |
if ($helper->{'VARS'}->{'pagesize.width'}=~/\d+/ && |
$form{'textwidth'}=$LaTeXwidth; |
$helper->{'VARS'}->{'pagesize.widthunit'}=~/\w+/) { |
|
$form{'textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); |
|
} else { |
|
$form{'textwidth'}=$LaTeXwidth; |
|
} |
|
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
if ($helper->{'VARS'}->{'curseed'}) { |
if ($helper->{'VARS'}->{'curseed'}) { |
Line 752 ENDPART
|
Line 743 ENDPART
|
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonxml::init_counter(); |
&Apache::lonxml::init_counter(); |
$texversion.=&Apache::lonnet::ssi($currentURL,%form); |
$texversion=&Apache::lonnet::ssi($currentURL,%form); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('request.filename'); |
&Apache::lonnet::delenv('request.filename'); |
} |
} |
Line 807 ENDPART
|
Line 798 ENDPART
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
my %form; |
my %form; |
$form{'grade_target'}='tex'; |
$form{'grade_target'}='tex'; |
if ($helper->{'VARS'}->{'pagesize.width'}=~/\d+/ && |
$form{'textwidth'}=$LaTeXwidth; |
$helper->{'VARS'}->{'pagesize.widthunit'}=~/\w+/) { |
|
$form{'textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); |
|
} else { |
|
$form{'textwidth'}=$LaTeXwidth; |
|
} |
|
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'rndseed'}=$rndseed; |
$form{'rndseed'}=$rndseed; |
Line 858 ENDPART
|
Line 844 ENDPART
|
} elsif ($currentURL=~/\/smppg$/) { |
} elsif ($currentURL=~/\/smppg$/) { |
my %form; |
my %form; |
$form{'grade_target'}='tex'; |
$form{'grade_target'}='tex'; |
if ($helper->{'VARS'}->{'pagesize.width'}=~/\d+/ && |
$form{'textwidth'}=$LaTeXwidth; |
$helper->{'VARS'}->{'pagesize.widthunit'}=~/\w+/) { |
|
$form{'textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); |
|
} else { |
|
$form{'textwidth'}=$LaTeXwidth; |
|
} |
|
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
my $texversion=&Apache::lonnet::ssi($currentURL,%form); |
my $texversion=&Apache::lonnet::ssi($currentURL,%form); |
$result .= $texversion; |
$result .= $texversion; |
Line 885 ENDPART
|
Line 866 ENDPART
|
#-- produce an output string |
#-- produce an output string |
my %form=(); |
my %form=(); |
$form{'grade_target'}='tex'; |
$form{'grade_target'}='tex'; |
if ($helper->{'VARS'}->{'pagesize.width'}=~/\d+/ && |
$form{'textwidth'}=$LaTeXwidth; |
$helper->{'VARS'}->{'pagesize.widthunit'}=~/\w+/) { |
|
$form{'textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); |
|
} else { |
|
$form{'textwidth'}=$LaTeXwidth; |
|
} |
|
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
Line 979 ENDPART
|
Line 955 ENDPART
|
$selectionmade=8; |
$selectionmade=8; |
} |
} |
my @students=split /\|\|\|/, $helper->{'VARS'}->{'STUDENTS'}; |
my @students=split /\|\|\|/, $helper->{'VARS'}->{'STUDENTS'}; |
|
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0') {$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1;} |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
#loop over students |
#loop over students |
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
my %moreenv; |
my %moreenv; |
if ($helper->{'VARS'}->{'pagesize.width'}=~/\d+/ && |
$moreenv{'form.textwidth'}=$LaTeXwidth; |
$helper->{'VARS'}->{'pagesize.widthunit'}=~/\w+/) { |
|
$moreenv{'form.textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); |
|
} else { |
|
$moreenv{'form.textwidth'}=$LaTeXwidth; |
|
} |
|
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::appenv(%moreenv); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1); |
|
my $student_counter=-1; |
foreach my $person (@students) { |
foreach my $person (@students) { |
|
$student_counter++; |
my $current_output = ''; |
my $current_output = ''; |
# my ($usersection,$username,$userdomain) = split /:/,$person; |
my ($username,$userdomain,$usersection) = split /:/,$person; |
my ($username,$userdomain) = split /:/,$person; |
|
my $fullname = &get_name($username,$userdomain); |
my $fullname = &get_name($username,$userdomain); |
|
|
if ($parmhash{'anonymous_quiz'}=~/yes/) {$fullname=' ';} #put here something reasonable for anonymous exams or quiz |
if ($parmhash{'anonymous_quiz'}=~/yes/) {$fullname=' ';} #put here something reasonable for anonymous exams or quiz |
Line 1041 ENDPART
|
Line 1014 ENDPART
|
} |
} |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
|
if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection} |
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
if ($current_output=~/\\documentclass/) { |
if ($current_output=~/\\documentclass/) { |
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}}$courseidinfo \\hfill \\thepage \\\\ \\textit{$currentassignment}}\\vskip 3 mm /; |
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}}$courseidinfo \\hfill \\thepage \\\\ \\textit{$currentassignment}}\\vskip 3 mm /; |
Line 1049 ENDPART
|
Line 1023 ENDPART
|
for (my $j=0;$j<$helper->{'VARS'}->{'EMPTY_PAGES'};$j++) {$blanspages.='\clearpage\strut\clearpage';} |
for (my $j=0;$j<$helper->{'VARS'}->{'EMPTY_PAGES'};$j++) {$blanspages.='\clearpage\strut\clearpage';} |
$current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage '.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$currentassignment.'}}} \vskip -5 mm '.$current_output; |
$current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage '.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$currentassignment.'}}} \vskip -5 mm '.$current_output; |
} |
} |
$result .= $current_output; |
$print_array[int($student_counter/$helper->{'VARS'}->{'NUMBER_TO_PRINT'})].=$current_output; |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonxml::init_counter(); |
&Apache::lonxml::init_counter(); |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&mt('last student').' '.$fullname); |
&mt('last student').' '.$fullname); |
} |
} |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
$result .= '\end{document}'; |
$result .= $print_array[0].' \end{document}'; |
&Apache::lonnet::delenv('form.textwidth'); |
&Apache::lonnet::delenv('form.textwidth'); |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_from_directory') { |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_from_directory') { |
#prints selected problems from the subdirectory |
#prints selected problems from the subdirectory |
Line 1074 ENDPART
|
Line 1048 ENDPART
|
if ($urlp=~/\//) { |
if ($urlp=~/\//) { |
my %form; |
my %form; |
$form{'grade_target'}='tex'; |
$form{'grade_target'}='tex'; |
if ($helper->{'VARS'}->{'pagesize.width'}=~/\d+/ && |
$form{'textwidth'}=$LaTeXwidth; |
$helper->{'VARS'}->{'pagesize.widthunit'}=~/\w+/) { |
|
$form{'textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); |
|
} else { |
|
$form{'textwidth'}=$LaTeXwidth; |
|
} |
|
$form{'rndseed'}=$rndseed; |
$form{'rndseed'}=$rndseed; |
if ($urlp =~ m|/home/([^/]+)/public_html|) { |
if ($urlp =~ m|/home/([^/]+)/public_html|) { |
$urlp =~ s|/home/([^/]*)/public_html|/~$1|; |
$urlp =~ s|/home/([^/]*)/public_html|/~$1|; |
Line 1138 ENDPART
|
Line 1107 ENDPART
|
#-------------------------------------------------------- corrections for the different page formats |
#-------------------------------------------------------- corrections for the different page formats |
$result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'}); |
$result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'}); |
$result = &latex_corrections($number_of_columns,$result); |
$result = &latex_corrections($number_of_columns,$result); |
|
for (my $i=1;$i<=$#print_array;$i++) {$print_array[$i] = &latex_corrections($number_of_columns,$print_array[$i]);} |
#changes page's parameters for the one column output |
#changes page's parameters for the one column output |
if ($numberofcolumns == 1) { |
if ($numberofcolumns == 1) { |
$result =~ s/\\textwidth\s*=\s*\d*\.?\d*\s*(cm|mm|in)/\\textwidth= $helper->{'VARS'}->{'pagesize.width'} $helper->{'VARS'}->{'pagesize.widthunit'} /; |
$result =~ s/\\textwidth\s*=\s*\d*\.?\d*\s*(cm|mm|in)/\\textwidth= $helper->{'VARS'}->{'pagesize.width'} $helper->{'VARS'}->{'pagesize.widthunit'} /; |
Line 1152 ENDPART
|
Line 1122 ENDPART
|
$r->log_error("Couldn't open $filename for output $!"); |
$r->log_error("Couldn't open $filename for output $!"); |
return SERVER_ERROR; |
return SERVER_ERROR; |
} |
} |
|
print $temp_file $result; |
|
my $begin=index($result,'\begin{document}',0); |
|
my $inc=substr($result,0,$begin+16); |
|
if ($#print_array>0) { |
|
for (my $i=1;$i<=$#print_array;$i++) { |
|
my $anobegin=index($print_array[$i],'\setcounter{page}',0); |
|
substr($print_array[$i],0,$anobegin)=''; |
|
$print_array[$i]=$inc.$print_array[$i].'\end{document}'; |
|
my $temp_file; |
|
my $newfilename=$filename; |
|
$newfilename =~s/\.tex$/_add$i\.tex/; |
|
unless ($temp_file = Apache::File->new('>'.$newfilename)) { |
|
$r->log_error("Couldn't open $newfilename for output $!"); |
|
return SERVER_ERROR; |
|
} |
|
print $temp_file $print_array[$i]; |
|
} |
|
|
|
} |
|
|
my $identifier = time.'_'.int(rand(1000)); |
my $identifier = time.'_'.int(rand(1000)); |
&Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename, |
&Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename, |
Line 1160 ENDPART
|
Line 1149 ENDPART
|
'cgi.'.$identifier.'.selection' => $selectionmade, |
'cgi.'.$identifier.'.selection' => $selectionmade, |
'cgi.'.$identifier.'tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'}, |
'cgi.'.$identifier.'tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'}, |
'cgi.'.$identifier.'tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'}, |
'cgi.'.$identifier.'tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'}, |
'cgi.'.$identifier.'role' => $ENV{'request.role.adv'}); |
'cgi.'.$identifier.'role' => $ENV{'request.role.adv'}, |
|
'cgi.'.$identifier.'numberoffiles' => $#print_array); |
|
|
print $temp_file $result; |
|
|
|
$r->print(<<FINALEND); |
$r->print(<<FINALEND); |
<meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier"> |
<meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier"> |
Line 1412 HELPERFRAGMENT
|
Line 1401 HELPERFRAGMENT
|
if ($helper->{VARS}->{'assignment'}) { |
if ($helper->{VARS}->{'assignment'}) { |
push @{$printChoices}, ["<b>Problems</b> from <b><i>$sequenceTitle</i></b> for <b>selected students</b>", 'problems_for_students', 'CHOOSE_STUDENTS']; |
push @{$printChoices}, ["<b>Problems</b> from <b><i>$sequenceTitle</i></b> for <b>selected students</b>", 'problems_for_students', 'CHOOSE_STUDENTS']; |
} |
} |
|
|
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS); |
<state name="ALL_PROBLEMS" title="Select Problem(s) to print"> |
<state name="ALL_PROBLEMS" title="Select Problem(s) to print"> |
<message>(mark them then click "next" button) <br /></message> |
<message>(mark them then click "next" button) <br /></message> |
Line 1443 HELPERFRAGMENT
|
Line 1431 HELPERFRAGMENT
|
</state> |
</state> |
CHOOSE_STUDENTS |
CHOOSE_STUDENTS |
|
|
|
addMessage("<hr width='33%' /><b>Number of assignments printed at the same time: </b>"); |
|
$paramHash = Apache::lonhelper::getParamHash(); |
|
$paramHash->{'variable'} = 'NUMBER_TO_PRINT'; |
|
$helper->declareVar('NUMBER_TO_PRINT'); |
|
addMessage("<input type='text' name='NUMBER_TO_PRINT.forminput' size='3' value='0' /><hr width='33%' />"); |
|
|
if ($helper->{VARS}->{'assignment'}) { |
if ($helper->{VARS}->{'assignment'}) { |
push @{$printChoices}, ["<b>Resources</b> from <b><i>$sequenceTitle</i></b> for <b>selected students</b>", 'resources_for_students', 'CHOOSE_STUDENTS1']; |
push @{$printChoices}, ["<b>Resources</b> from <b><i>$sequenceTitle</i></b> for <b>selected students</b>", 'resources_for_students', 'CHOOSE_STUDENTS1']; |
} |
} |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1); |
<state name="CHOOSE_STUDENTS1" title="Select Students and Resources"> |
<state name="CHOOSE_STUDENTS1" title="Select Students and Resources"> |
<student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" /> |
<student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" /> |
<message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message> |
<message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message> |
Line 1465 CHOOSE_STUDENTS
|
Line 1459 CHOOSE_STUDENTS
|
</state> |
</state> |
CHOOSE_STUDENTS1 |
CHOOSE_STUDENTS1 |
|
|
|
addMessage("<hr width='33%' /><b>Number of assignments printed at the same time: </b>"); |
|
$paramHash = Apache::lonhelper::getParamHash(); |
|
$paramHash->{'variable'} = 'NUMBER_TO_PRINT'; |
|
$helper->declareVar('NUMBER_TO_PRINT'); |
|
addMessage("<input type='text' name='NUMBER_TO_PRINT.forminput' size='3' value='0' /><hr width='33%' />"); |
} |
} |
|
|
# FIXME: That RE should come from a library somewhere. |
# FIXME: That RE should come from a library somewhere. |