version 1.497, 2007/04/17 15:45:03
|
version 1.507, 2007/08/29 00:55:37
|
Line 48 my %perm;
|
Line 48 my %perm;
|
my %parmhash; |
my %parmhash; |
my $resources_printed; |
my $resources_printed; |
|
|
|
# Fetch the contents of a resource, uninterpreted. |
|
# This is used here to fetch a latex file to be included |
|
# verbatim into the printout< |
|
# NOTE: Ask Guy if there is a lonnet function similar to this? |
|
# |
|
# Parameters: |
|
# URL of the file |
|
# |
|
sub fetch_raw_resource { |
|
my ($url) = @_; |
|
|
|
my $filename = &Apache::lonnet::filelocation("", $url); |
|
my $contents = &Apache::lonnet::getfile($filename); |
|
|
|
if ($contents == -1) { |
|
return "File open failed for $filename"; # This will bomb the print. |
|
} |
|
return $contents; |
|
|
|
|
|
} |
|
|
# |
# |
# printf_style_subst item format_string repl |
# printf_style_subst item format_string repl |
# |
# |
Line 845 sub page_format_transformation {
|
Line 867 sub page_format_transformation {
|
my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin); |
my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin); |
|
|
if ($selectionmade eq '4') { |
if ($selectionmade eq '4') { |
$assignment='Problems from the Whole Course'; |
if ($choice eq 'all_problems') { |
|
$assignment='Problems from the Whole Course'; |
|
} else { |
|
$assignment='Resources from the Whole Course'; |
|
} |
} else { |
} else { |
$assignment=&Apache::lonxml::latex_special_symbols($assignment,'header'); |
$assignment=&Apache::lonxml::latex_special_symbols($assignment,'header'); |
} |
} |
Line 1265 sub output_data {
|
Line 1291 sub output_data {
|
my ($r,$helper,$rparmhash) = @_; |
my ($r,$helper,$rparmhash) = @_; |
my %parmhash = %$rparmhash; |
my %parmhash = %$rparmhash; |
$resources_printed = ''; |
$resources_printed = ''; |
|
my $do_postprocessing = 1; |
my $js = <<ENDPART; |
my $js = <<ENDPART; |
<script type="text/javascript"> |
<script type="text/javascript"> |
var editbrowser; |
var editbrowser; |
Line 1344 ENDPART
|
Line 1371 ENDPART
|
if ($helper->{'VARS'}->{'showallfoils'} eq "1") { |
if ($helper->{'VARS'}->{'showallfoils'} eq "1") { |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
} |
} |
|
|
|
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
|
&Apache::lonnet::appenv('construct.style' => |
|
$helper->{'VARS'}->{'style_file'}); |
|
} elsif ($env{'construct.style'}) { |
|
&Apache::lonnet::delenv('construct\\.style'); |
|
} |
|
|
|
|
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, ... |
Line 1367 ENDPART
|
Line 1402 ENDPART
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
my %moreenv; |
my %moreenv; |
$moreenv{'request.filename'}=$cleanURL; |
$moreenv{'request.filename'}=$cleanURL; |
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
|
$moreenv{'construct.style'}=$helper->{'VARS'}->{'style_file'}; |
|
my $dom = $env{'user.domain'}; |
|
my $user = $env{'user.name'}; |
|
my $put_result = &Apache::lonnet::put('environment',{'construct.style'=>$helper->{'VARS'}->{'style_file'}},$dom,$user); |
|
} |
|
if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {$form{'problemtype'}='exam';} |
if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {$form{'problemtype'}='exam';} |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
Line 1421 ENDPART
|
Line 1450 ENDPART
|
$texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm '; |
$texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm '; |
my $URLpath=$cleanURL; |
my $URLpath=$cleanURL; |
$URLpath=~s/~([^\/]+)/public_html\/$1\/$1/; |
$URLpath=~s/~([^\/]+)/public_html\/$1\/$1/; |
$texversion.=&path_to_problem ($URLpath,$LaTeXwidth); |
$texversion.=&path_to_problem($URLpath,$LaTeXwidth); |
} |
} |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
} |
} |
Line 1455 ENDPART
|
Line 1484 ENDPART
|
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
my $texversion=&Apache::lonnet::ssi($currentURL,%form); |
my $texversion=&Apache::lonnet::ssi($currentURL,%form); |
$result .= $texversion; |
$result .= $texversion; |
|
} elsif ($cleanURL =~/.tex$/) { |
|
# For this sort of print of a single LaTeX file, |
|
# We can just print the LaTeX file as it is uninterpreted in any way: |
|
# |
|
|
|
$result = &fetch_raw_resource($currentURL); |
|
$do_postprocessing = 0; # Don't massage the result. |
|
|
} else { |
} else { |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$helper->{'VARS'}->{'symb'}); |
$helper->{'VARS'}->{'symb'}); |
Line 1859 ENDPART
|
Line 1896 ENDPART
|
$result .= '\end{document}'; |
$result .= '\end{document}'; |
} |
} |
#-------------------------------------------------------- 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'},$selectionmade); |
|
$result = &latex_corrections($number_of_columns,$result,$selectionmade, |
# Only post process if that has not been turned off e.g. by a raw latex resource. |
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
|
#if ($numberofcolumns == 1) { |
if ($do_postprocessing) { |
|
$result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'},$selectionmade); |
|
$result = &latex_corrections($number_of_columns,$result,$selectionmade, |
|
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
|
#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'} /; |
$result =~ s/\\textheight\s*=?\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textheight $helper->{'VARS'}->{'pagesize.height'} $helper->{'VARS'}->{'pagesize.heightunit'} /; |
$result =~ s/\\textheight\s*=?\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textheight $helper->{'VARS'}->{'pagesize.height'} $helper->{'VARS'}->{'pagesize.heightunit'} /; |
$result =~ s/\\evensidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
$result =~ s/\\evensidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
$result =~ s/\\oddsidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
$result =~ s/\\oddsidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
#} |
#} |
|
} |
|
|
#-- writing .tex file in prtspool |
#-- writing .tex file in prtspool |
my $temp_file; |
my $temp_file; |
Line 2180 sub init_perm {
|
Line 2222 sub init_perm {
|
} |
} |
} |
} |
|
|
|
sub get_randomly_ordered_warning { |
|
my ($helper,$map) = @_; |
|
|
|
my $message; |
|
|
|
my $postdata = $env{'form.postdata'} || $helper->{VARS}{'postdata'}; |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
my $res = $navmap->getResourceByUrl($map); |
|
if ($res) { |
|
my $func = |
|
sub { return ($_[0]->is_map() && $_[0]->randomorder); }; |
|
my @matches = $navmap->retrieveResources($res, $func,1,1,1); |
|
if (@matches) { |
|
$message = "Some folders are set to be randomly ordered. When printing the contents of these folders will be printed in the original order for all students."; |
|
} |
|
} |
|
if ($message) { |
|
return '<message type="warning">'.$message.'</message>'; |
|
} |
|
return; |
|
} |
|
|
sub printHelper { |
sub printHelper { |
my $r = shift; |
my $r = shift; |
|
|
Line 2435 ALL_PROBLEMS
|
Line 2499 ALL_PROBLEMS
|
push @{$printChoices}, [&mt("Selected <b>Problems</b> from folder <b><i>[_1]</i></b> for <b>CODEd assignments</b>",$sequenceTitle), 'problems_for_anon', 'CHOOSE_ANON1']; |
push @{$printChoices}, [&mt("Selected <b>Problems</b> from folder <b><i>[_1]</i></b> for <b>CODEd assignments</b>",$sequenceTitle), 'problems_for_anon', 'CHOOSE_ANON1']; |
} |
} |
|
|
|
my $randomly_ordered_warning = |
|
&get_randomly_ordered_warning($helper,$map); |
|
|
# resource_selector will hold a few states that: |
# resource_selector will hold a few states that: |
# - Allow resources to be selected for printing. |
# - Allow resources to be selected for printing. |
# - Determine pagination between assignments. |
# - Determine pagination between assignments. |
Line 2446 ALL_PROBLEMS
|
Line 2513 ALL_PROBLEMS
|
# |
# |
my $resource_selector=<<RESOURCE_SELECTOR; |
my $resource_selector=<<RESOURCE_SELECTOR; |
<state name="SELECT_PROBLEMS" title="Select resources to print"> |
<state name="SELECT_PROBLEMS" title="Select resources to print"> |
|
$randomly_ordered_warning |
|
|
<nextstate>PRINT_FORMATTING</nextstate> |
<nextstate>PRINT_FORMATTING</nextstate> |
<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> |
<resource variable="RESOURCES" multichoice="1" addstatus="1" |
<resource variable="RESOURCES" multichoice="1" addstatus="1" |
Line 2565 CHOOSE_STUDENTS
|
Line 2634 CHOOSE_STUDENTS
|
</validator> |
</validator> |
</string> |
</string> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
<message><b>Names to store the CODEs under for later:</b></message> |
<message><b>Names to save the CODEs under for later:</b></message> |
<message></td><td></message> |
<message></td><td></message> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
Line 2613 CHOOSE_ANON1
|
Line 2682 CHOOSE_ANON1
|
|
|
$resource_selector=<<RESOURCE_SELECTOR; |
$resource_selector=<<RESOURCE_SELECTOR; |
<state name="SELECT_RESOURCES" title="Select Resources"> |
<state name="SELECT_RESOURCES" title="Select Resources"> |
|
$randomly_ordered_warning |
|
|
<nextstate>PRINT_FORMATTING</nextstate> |
<nextstate>PRINT_FORMATTING</nextstate> |
<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> |
<resource variable="RESOURCES" multichoice="1" addstatus="1" |
<resource variable="RESOURCES" multichoice="1" addstatus="1" |
Line 2676 CHOOSE_STUDENTS1
|
Line 2747 CHOOSE_STUDENTS1
|
</validator> |
</validator> |
</string> |
</string> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
<message><b>Names to store the CODEs under for later:</b></message> |
<message><b>Names to save the CODEs under for later:</b></message> |
<message></td><td></message> |
<message></td><td></message> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
Line 2843 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2914 CHOOSE_FROM_ANY_SEQUENCE
|
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
|
|
addMessage("</td></tr><tr><td align='right'>". |
addMessage("</td></tr><tr><td align='right'>". |
'<label="TABLE_CONTENTS_forminput">'. |
'<label for="TABLE_CONTENTS_forminput">'. |
&mt('Print Table of Contents'). |
&mt('Print Table of Contents'). |
"</label>: </td><td>"); |
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
Line 2892 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2963 CHOOSE_FROM_ANY_SEQUENCE
|
} |
} |
|
|
if ($helper->{'VARS'}->{'construction'}) { |
if ($helper->{'VARS'}->{'construction'}) { |
my $stylevalue=$env{'construct.style'}; |
my $stylevalue='$Apache::lonnet::env{"construct.style"}'; |
my $randseedtext=&mt("Use random seed"); |
my $randseedtext=&mt("Use random seed"); |
my $stylefiletext=&mt("Use style file"); |
my $stylefiletext=&mt("Use style file"); |
|
my $selectfiletext=&mt("Select style file"); |
|
|
my $xmlfrag .= <<"RNDSEED"; |
my $xmlfrag .= <<"RNDSEED"; |
<message><tr><td align='right'> |
<message><tr><td align='right'> |
Line 2906 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2978 CHOOSE_FROM_ANY_SEQUENCE
|
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
<message></td></tr><tr><td align="right"> |
<message></td></tr><tr><td align="right"> |
<label for="style_file_value">$stylefiletext</label>: |
<label for="style_file">$stylefiletext</label>: |
</td><td></message> |
</td><td></message> |
<message><input type="text" size="40" name="style_file_value" value="$stylevalue" /> <a href="javascript:openbrowser('helpform','style_file_value','sty')">Select style file</a> </td><tr><td></message> |
<string variable="style_file" size="40"> |
|
<defaultvalue> |
|
return $stylevalue; |
|
</defaultvalue> |
|
</string><message> <a href="javascript:openbrowser('helpform','style_file_forminput','sty')">$selectfiletext</a> </td></tr><tr><td></td><td align="left"></message> |
<choices allowempty="1" multichoice="true" variable="showallfoils"> |
<choices allowempty="1" multichoice="true" variable="showallfoils"> |
<choice computer="1">Show all foils?</choice> |
<choice computer="1">Show all foils</choice> |
</choices> |
</choices> |
<message></td></tr></message> |
<message></td></tr></message> |
RNDSEED |
RNDSEED |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
$helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'}; |
|
|
|
} |
} |
} |
} |
|
|
Line 3021 sub render {
|
Line 3095 sub render {
|
my $PageLayout=&mt('Page layout'); |
my $PageLayout=&mt('Page layout'); |
my $NumberOfColumns=&mt('Number of columns'); |
my $NumberOfColumns=&mt('Number of columns'); |
my $PaperType=&mt('Paper type'); |
my $PaperType=&mt('Paper type'); |
|
my $landscape=&mt('Landscape'); |
|
my $portrait=&mt('Portrait'); |
$result .= <<STATEHTML; |
$result .= <<STATEHTML; |
|
|
<hr width="33%" /> |
<hr width="33%" /> |
Line 3032 sub render {
|
Line 3108 sub render {
|
</tr> |
</tr> |
<tr> |
<tr> |
<td> |
<td> |
<label><input type="radio" name="${var}.layout" value="L" /> Landscape </label><br /> |
<label><input type="radio" name="${var}.layout" value="L" /> $landscape </label><br /> |
<label><input type="radio" name="${var}.layout" value="P" checked='1' /> Portrait </label> |
<label><input type="radio" name="${var}.layout" value="P" checked='1' /> $portrait </label> |
</td> |
</td> |
<td align="center"> |
<td align="center"> |
<select name="${var}.cols"> |
<select name="${var}.cols"> |
Line 3189 sub render {
|
Line 3265 sub render {
|
} else { |
} else { |
$size{'margin'} += 2.54; |
$size{'margin'} += 2.54; |
} |
} |
$result .= <<ELEMENTHTML; |
my %text = ('format' => 'How should each column be formatted?', |
|
'width' => 'Width:', |
|
'height' => 'Height:', |
|
'margin' => 'Left Margin:',); |
|
%text = &Apache::lonlocal::texthash(%text); |
|
|
|
$result .= <<ELEMENTHTML; |
|
|
<p>How should each column be formatted?</p> |
<p>$text{'format'}</p> |
|
|
<table cellpadding='3'> |
<table cellpadding='3'> |
<tr> |
<tr> |
<td align='right'><b>Width</b>:</td> |
<td align='right'><b>$text{'width'}</b></td> |
<td align='left'><input type='text' name='$var.width' value="$size{'width'}" size='4' /></td> |
<td align='left'><input type='text' name='$var.width' value="$size{'width'}" size='4' /></td> |
<td align='left'> |
<td align='left'> |
<select name='$var.widthunit'> |
<select name='$var.widthunit'> |
Line 3206 sub render {
|
Line 3286 sub render {
|
</td> |
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td align='right'><b>Height</b>:</td> |
<td align='right'><b>$text{'height'}</b></td> |
<td align='left'><input type='text' name="$var.height" value="$size{'height'}" size='4' /></td> |
<td align='left'><input type='text' name="$var.height" value="$size{'height'}" size='4' /></td> |
<td align='left'> |
<td align='left'> |
<select name='$var.heightunit'> |
<select name='$var.heightunit'> |
Line 3215 sub render {
|
Line 3295 sub render {
|
</td> |
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td align='right'><b>Left margin</b>:</td> |
<td align='right'><b>$text{'margin'}</b></td> |
<td align='left'><input type='text' name='$var.lmargin' value="$size{'margin'}" size='4' /></td> |
<td align='left'><input type='text' name='$var.lmargin' value="$size{'margin'}" size='4' /></td> |
<td align='left'> |
<td align='left'> |
<select name='$var.lmarginunit'> |
<select name='$var.lmarginunit'> |