version 1.491, 2006/11/02 21:06:06
|
version 1.515, 2008/02/26 10:46:14
|
Line 1
|
Line 1
|
# |
|
# The LearningOnline Network |
# The LearningOnline Network |
# Printout |
# Printout |
# |
# |
Line 38 use Apache::grades;
|
Line 37 use Apache::grades;
|
use Apache::edit; |
use Apache::edit; |
use Apache::File(); |
use Apache::File(); |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
|
use Apache::admannotations; |
|
use HTTP::Response; |
|
|
use LONCAPA::map(); |
use LONCAPA::map(); |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
use Apache::lonlocal; |
use Apache::lonlocal; |
Line 48 my %perm;
|
Line 50 my %perm;
|
my %parmhash; |
my %parmhash; |
my $resources_printed; |
my $resources_printed; |
|
|
|
# Global variables that describe errors in ssi calls detected by ssi_with_retries. |
|
# |
|
|
|
my $ssi_error; # True if there was an ssi error. |
|
my $ssi_last_error_resource; # The resource URI that could not be fetched. |
|
my $ssi_last_error; # The error text from the server. (e.g. 500 Server timed out). |
|
|
|
# |
|
# Our ssi max retry count. |
|
# |
|
|
|
my $ssi_retry_count = 5; # Some arbitrary value. |
|
|
|
|
|
|
|
# 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; |
|
|
|
|
|
} |
|
|
|
# Fetch the annotations associated with a URL and |
|
# put a centered 'annotations:' title. |
|
# This is all suppressed if the annotations are empty. |
|
# |
|
sub annotate { |
|
my ($symb) = @_; |
|
|
|
my $annotation_text = &Apache::admannotations::get_annotation($symb, 1); |
|
|
|
|
|
my $result = ""; |
|
|
|
if (length($annotation_text) > 0) { |
|
$result .= '\\hspace*{\\fill} \\\\[\\baselineskip] \textbf{Annotations:} \\\\ '; |
|
$result .= "\n"; |
|
$result .= &Apache::lonxml::latex_special_symbols($annotation_text,""); # Escape latex. |
|
$result .= "\n\n"; |
|
} |
|
return $result; |
|
} |
|
|
|
|
|
# |
|
# ssi_with_retries - Does the server side include of a resource. |
|
# if the ssi call returns an error we'll retry it up to |
|
# the number of times requested by the caller. |
|
# If we still have a proble, no text is appended to the |
|
# output and we set some global variables. |
|
# to indicate to the caller an SSI error occured. |
|
# All of this is supposed to deal with the issues described |
|
# in LonCAPA BZ 5631 see: |
|
# http://bugs.lon-capa.org/show_bug.cgi?id=5631 |
|
# by informing the user that this happened. |
|
# |
|
# Parameters: |
|
# resource - The resource to include. This is passed directly, without |
|
# interpretation to lonnet::ssi. |
|
# form - The form hash parameters that guide the interpretation of the resource |
|
# |
|
# retries - Number of retries allowed before giving up completely. |
|
# Returns: |
|
# On success, returns the rendered resource identified by the resource parameter. |
|
# Side Effects: |
|
# The following global variables can be set: |
|
# ssi_error - If an unrecoverable error occured this becomes true. |
|
# It is up to the caller to initialize this to false |
|
# if desired. |
|
# ssi_last_error_resource - If an unrecoverable error occured, this is the value |
|
# of the resource that could not be rendered by the ssi |
|
# call. |
|
# ssi_last_error - The error string fetched from the ssi response |
|
# in the event of an error. |
|
# |
|
sub ssi_with_retries { |
|
my ($resource, $retries, %form) = @_; |
|
|
|
|
|
my $ok = 0; # True if we got a good response. |
|
my $content; |
|
my $response; |
|
|
|
# Try to get the ssi done. within the retries count: |
|
|
|
do { |
|
($content, $response) = &Apache::lonnet::ssi($resource, %form); |
|
$ok = $response->is_success; |
|
$retries--; |
|
} while (!$ok && ($retries > 0)); |
|
|
|
# Two cases: ok is true we have valid data, if not, retries have been exhausted |
|
# if ok is true, $response->content is what we want to return.. otherwise |
|
# set the error information: |
|
|
|
if ($ok) { |
|
return $content; |
|
} else { |
|
$ssi_error = 1; |
|
$ssi_last_error_resource = $resource; |
|
$ssi_last_error = $response->code." ". $response->message; |
|
return ''; # Nothing we can add to the printout that makes sense. |
|
} |
|
} |
|
|
# |
# |
# printf_style_subst item format_string repl |
# printf_style_subst item format_string repl |
# |
# |
Line 490 sub character_chart {
|
Line 612 sub character_chart {
|
$result =~ s/&\#147;/\`\`/g; |
$result =~ s/&\#147;/\`\`/g; |
$result =~ s/&\#148;/\'\'/g; |
$result =~ s/&\#148;/\'\'/g; |
$result =~ s/&\#149;/\\ensuremath\{\\bullet\}/g; |
$result =~ s/&\#149;/\\ensuremath\{\\bullet\}/g; |
$result =~ s/&\#150;/--/g; |
$result =~ s/&(\#150|\#8211);/--/g; |
$result =~ s/&\#151;/---/g; |
$result =~ s/&\#151;/---/g; |
$result =~ s/&\#152;/\\ensuremath\{\\sim\}/g; |
$result =~ s/&\#152;/\\ensuremath\{\\sim\}/g; |
$result =~ s/&\#153;/\\texttrademark /g; |
$result =~ s/&\#153;/\\texttrademark /g; |
Line 697 sub character_chart {
|
Line 819 sub character_chart {
|
$result =~ s/&(clubs|\#9827);/\\ensuremath\{\\clubsuit\}/g; |
$result =~ s/&(clubs|\#9827);/\\ensuremath\{\\clubsuit\}/g; |
$result =~ s/&(hearts|\#9829);/\\ensuremath\{\\heartsuit\}/g; |
$result =~ s/&(hearts|\#9829);/\\ensuremath\{\\heartsuit\}/g; |
$result =~ s/&(diams|\#9830);/\\ensuremath\{\\diamondsuit\}/g; |
$result =~ s/&(diams|\#9830);/\\ensuremath\{\\diamondsuit\}/g; |
|
# Chemically useful 'things' contributed by Hon Kie (bug 4652). |
|
|
|
$result =~ s/&\#8636;/\\ensuremath\{\\leftharpoonup\}/g; |
|
$result =~ s/&\#8637;/\\ensuremath\{\\leftharpoondown\}/g; |
|
$result =~ s/&\#8640;/\\ensuremath\{\\rightharpoonup\}/g; |
|
$result =~ s/&\#8641;/\\ensuremath\{\\rightharpoondown\}/g; |
|
$result =~ s/&\#8652;/\\ensuremath\{\\rightleftharpoons\}/g; |
|
$result =~ s/&\#8605;/\\ensuremath\{\\leadsto\}/g; |
|
$result =~ s/&\#8617;/\\ensuremath\{\\hookleftarrow\}/g; |
|
$result =~ s/&\#8618;/\\ensuremath\{\\hookrightarrow\}/g; |
|
$result =~ s/&\#8614;/\\ensuremath\{\\mapsto\}/g; |
|
$result =~ s/&\#8599;/\\ensuremath\{\\nearrow\}/g; |
|
$result =~ s/&\#8600;/\\ensuremath\{\\searrow\}/g; |
|
$result =~ s/&\#8601;/\\ensuremath\{\\swarrow\}/g; |
|
$result =~ s/&\#8598;/\\ensuremath\{\\nwarrow\}/g; |
|
|
|
# Left/right quotations: |
|
|
|
$result =~ s/&(ldquo|#8220);/\`\`/g; |
|
$result =~ s/&(rdquo|#8221);/\'\'/g; |
|
|
|
|
return $result; |
return $result; |
} |
} |
|
|
Line 705 sub character_chart {
|
Line 849 sub character_chart {
|
my %page_formats= |
my %page_formats= |
('letter' => { |
('letter' => { |
'book' => { |
'book' => { |
'1' => [ '7.1 in','9.8 in', '-0.57 in','-0.57 in','0.7 cm'], |
'1' => [ '7.1 in','9.8 in', '-0.57 in','-0.57 in','0.275 in'], |
'2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','0.7 cm'] |
'2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','0.275 in'] |
}, |
}, |
'album' => { |
'album' => { |
'1' => [ '8.8 in', '6.8 in','-0.55 in', '-0.55 in','1 cm'], |
'1' => [ '8.8 in', '6.8 in','-0.55 in', '-0.55 in','0.394 in'], |
'2' => [ '4.8 in', '6.8 in','-0.5 in', '-1.0 in','3.5 in'] |
'2' => [ '4.8 in', '6.8 in','-0.5 in', '-1.0 in','3.5 in'] |
}, |
}, |
}, |
}, |
'legal' => { |
'legal' => { |
'book' => { |
'book' => { |
'1' => ['7.1 in','13 in',,'-0.57 in','-0.57 in','-0.5 in'], |
'1' => ['7.1 in','13 in',,'-0.57 in','-0.57 in','-0.5 in'], |
'2' => ['3.16 in','13 in','-0.57 in','-0.57 in','-0.5 in'] |
'2' => ['3.66 in','13 in','-0.57 in','-0.57 in','-0.5 in'] |
}, |
}, |
'album' => { |
'album' => { |
'1' => ['12 in','7.1 in',,'-0.57 in','-0.57 in','-0.5 in'], |
'1' => ['12 in','7.1 in',,'-0.57 in','-0.57 in','-0.5 in'], |
Line 765 my %page_formats=
|
Line 909 my %page_formats=
|
}, |
}, |
'a4' => { |
'a4' => { |
'book' => { |
'book' => { |
'1' => ['17.6 cm','27.2 cm','-0.55 in','-0.83 in','-0.5 in'], |
'1' => ['17.6 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm'], |
'2' => [ '9.1 cm','27.2 cm','-0.55 in','-0.83 in','-0.5 in'] |
'2' => [ '9.1 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm'] |
}, |
}, |
'album' => { |
'album' => { |
'1' => ['8.5 in','7.7 in','-0.55 in','-0.83 in','0 in'], |
'1' => ['21.59 cm','19.558 cm','-1.397cm','-2.11 cm','0 cm'], |
'2' => ['3.9 in','7.7 in','-0.55 in','-0.83 in','0 in'] |
'2' => ['9.91 cm','19.558 cm','-1.397 cm','-2.11 cm','0 cm'] |
}, |
}, |
}, |
}, |
'a5' => { |
'a5' => { |
Line 831 sub page_format_transformation {
|
Line 975 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 1182 sub print_construction_sequence {
|
Line 1330 sub print_construction_sequence {
|
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'rndseed'}=$rndseed; |
$form{'rndseed'}=$rndseed; |
$resources_printed .=$urlp.':'; |
$resources_printed .=$urlp.':'; |
$texversion=&Apache::lonnet::ssi($urlp,%form); |
$texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
} |
} |
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
Line 1195 sub print_construction_sequence {
|
Line 1343 sub print_construction_sequence {
|
$answerform{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$answerform{'problem_split'}=$parmhash{'problem_stream_switch'}; |
if ($urlp=~/\/res\//) {$env{'request.state'}='published';} |
if ($urlp=~/\/res\//) {$env{'request.state'}='published';} |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
Line 1250 sub print_construction_sequence {
|
Line 1398 sub print_construction_sequence {
|
sub output_data { |
sub output_data { |
my ($r,$helper,$rparmhash) = @_; |
my ($r,$helper,$rparmhash) = @_; |
my %parmhash = %$rparmhash; |
my %parmhash = %$rparmhash; |
|
$ssi_error = 0; # This will be set nonzero by failing ssi's. |
$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 1278 sub output_data {
|
Line 1428 sub output_data {
|
</script> |
</script> |
ENDPART |
ENDPART |
|
|
|
|
|
|
my $start_page = &Apache::loncommon::start_page('Preparing Printout',$js); |
my $start_page = &Apache::loncommon::start_page('Preparing Printout',$js); |
my $msg = &mt('Please stand by while processing your print request, this may take some time ...'); |
my $msg = &mt('Please stand by while processing your print request, this may take some time ...'); |
|
|
Line 1311 ENDPART
|
Line 1463 ENDPART
|
my @print_array=(); |
my @print_array=(); |
my @student_names=(); |
my @student_names=(); |
|
|
|
|
# Common settings for the %form has: |
# Common settings for the %form has: |
# In some cases these settings get overriddent by specific cases, but the |
# In some cases these settings get overriddent by specific cases, but the |
# settings are common enough to make it worthwhile factoring them out |
# settings are common enough to make it worthwhile factoring them out |
Line 1330 ENDPART
|
Line 1483 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 1340 ENDPART
|
Line 1501 ENDPART
|
$currentURL=$helper->{'VARS'}->{'postdata'}; |
$currentURL=$helper->{'VARS'}->{'postdata'}; |
$cleanURL=&Apache::lonenc::check_decrypt($currentURL); |
$cleanURL=&Apache::lonenc::check_decrypt($currentURL); |
} else { |
} else { |
|
|
#prints resource from the construction space |
#prints resource from the construction space |
$currentURL='/'.$helper->{'VARS'}->{'filename'}; |
$currentURL='/'.$helper->{'VARS'}->{'filename'}; |
if ($currentURL=~/([^?]+)/) {$currentURL=$1;} |
if ($currentURL=~/([^?]+)/) {$currentURL=$1;} |
Line 1353 ENDPART
|
Line 1515 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'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; |
$form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; |
if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$form{'problem_split'}='yes';} |
$form{'print_annotations'}=$helper->{'VARS'}->{'PRINT_ANNOTATIONS'}; |
|
if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') || |
|
($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) { |
|
$form{'problem_split'}='yes'; |
|
} |
if ($helper->{'VARS'}->{'curseed'}) { |
if ($helper->{'VARS'}->{'curseed'}) { |
$rndseed=$helper->{'VARS'}->{'curseed'}; |
$rndseed=$helper->{'VARS'}->{'curseed'}; |
} |
} |
Line 1374 ENDPART
|
Line 1534 ENDPART
|
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
|
|
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
$texversion.=&Apache::lonnet::ssi($currentURL,%form); |
$texversion.=&ssi_with_retries($currentURL,$ssi_retry_count, %form); |
|
|
|
# Add annotations if required: |
|
|
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
|
|
&Apache::lonnet::delenv('request.filename'); |
&Apache::lonnet::delenv('request.filename'); |
Line 1393 ENDPART
|
Line 1555 ENDPART
|
$form{'problemtype'}='exam'; |
$form{'problemtype'}='exam'; |
} |
} |
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
my $answer=&Apache::lonnet::ssi($currentURL,%form); |
my $answer=&ssi_with_retries($currentURL,$ssi_retry_count, %form); |
|
|
|
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
Line 1407 ENDPART
|
Line 1571 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}'; |
} |
} |
|
|
|
|
|
|
|
|
} |
} |
|
# Print annotations. |
|
|
|
|
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
|
my $annotation .= &annotate($currentURL); |
|
$texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; |
|
} |
|
|
|
|
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
$texversion=&IndexCreation($texversion,$currentURL); |
$texversion=&IndexCreation($texversion,$currentURL); |
} |
} |
Line 1439 ENDPART
|
Line 1616 ENDPART
|
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;} |
if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;} |
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
my $texversion=&Apache::lonnet::ssi($currentURL,%form); |
my $texversion=&ssi_with_retries($currentURL, $ssi_retry_count, %form); |
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
|
my $annotation = &annotate($currentURL); |
|
$texversion =~ s/(\\end{document})/$annotation$1/; |
|
} |
$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); |
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
|
my $annotation = &annotate($currentURL); |
|
$result =~ s/(\\end{document})/$annotation$1/; |
|
} |
|
|
|
$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 1450 ENDPART
|
Line 1644 ENDPART
|
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') or # BUGBUG |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') or # BUGBUG |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences')) { |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences')) { |
|
|
|
|
#-- produce an output string |
#-- produce an output string |
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') { |
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') { |
$selectionmade = 2; |
$selectionmade = 2; |
Line 1466 ENDPART
|
Line 1662 ENDPART
|
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; |
$form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; |
if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$form{'problem_split'}='yes';} |
$form{'print_annotations'} = $helper->{'VARS'}->{'PRINT_ANNOTATIONS'}; |
|
if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') || |
|
($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') ) { |
|
$form{'problem_split'}='yes'; |
|
} |
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
my $flag_page_in_sequence = 'NO'; |
my $flag_page_in_sequence = 'NO'; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
Line 1496 ENDPART
|
Line 1696 ENDPART
|
if ($urlp!~m|^/adm/| |
if ($urlp!~m|^/adm/| |
&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
|
|
&Apache::lonxml::remember_problem_counter(); |
&Apache::lonxml::remember_problem_counter(); |
$texversion.=&Apache::lonnet::ssi($urlp,%form); |
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
if ($urlp=~/\.page$/) { |
if ($urlp=~/\.page$/) { |
($texversion,my $number_of_columns_page) = &page_cleanup($texversion); |
($texversion,my $number_of_columns_page) = &page_cleanup($texversion); |
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} |
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} |
Line 1515 ENDPART
|
Line 1714 ENDPART
|
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
|
|
&Apache::lonxml::restore_problem_counter(); |
&Apache::lonxml::restore_problem_counter(); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
|
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
Line 1533 ENDPART
|
Line 1732 ENDPART
|
$texversion=''; |
$texversion=''; |
} |
} |
} |
} |
|
|
|
} |
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
|
my $annotation .= &annotate($urlp); |
|
$texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; |
} |
} |
|
|
if ($flag_latex_header_remove ne 'NO') { |
if ($flag_latex_header_remove ne 'NO') { |
$texversion = &latex_header_footer_remove($texversion); |
$texversion = &latex_header_footer_remove($texversion); |
} else { |
} else { |
Line 1564 ENDPART
|
Line 1769 ENDPART
|
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;} |
if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;} |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $texversion=&Apache::lonnet::ssi($urlp,%form); |
my $texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
|
my $annotation = &annotate($urlp); |
|
$texversion =~ s/(\\end{document)/$annotation$1/; |
|
} |
|
|
if ($flag_latex_header_remove ne 'NO') { |
if ($flag_latex_header_remove ne 'NO') { |
$texversion = &latex_header_footer_remove($texversion); |
$texversion = &latex_header_footer_remove($texversion); |
} else { |
} else { |
Line 1640 ENDPART
|
Line 1850 ENDPART
|
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); |
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); |
$moreenv{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; |
$moreenv{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; |
|
$moreenv{'print_annotations'} = $helper->{'VARS'}->{'PRINT_ANNOTATIONS'}; |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'suppress_tries'} = $parmhash{'suppress_tries'}; |
$moreenv{'suppress_tries'} = $parmhash{'suppress_tries'}; |
if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';} |
if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') || |
|
($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) { |
|
$moreenv{'problem_split'}='yes'; |
|
} |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75'); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75'); |
my $student_counter=-1; |
my $student_counter=-1; |
my $i = 0; |
my $i = 0; |
Line 1793 ENDPART
|
Line 2007 ENDPART
|
$urlp =~ s|^$Apache::lonnet::perlvar{'lonDocRoot'}||; |
$urlp =~ s|^$Apache::lonnet::perlvar{'lonDocRoot'}||; |
} |
} |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $texversion=&Apache::lonnet::ssi($urlp,%form); |
my $texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
# Don't permanently pervert %form: |
# Don't permanently pervert %form: |
Line 1803 ENDPART
|
Line 2017 ENDPART
|
$answerform{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$answerform{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$answerform{'rndseed'}=$rndseed; |
$answerform{'rndseed'}=$rndseed; |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
Line 1820 ENDPART
|
Line 2034 ENDPART
|
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
} |
} |
} |
} |
#this chunck is responsible for printing the path to problem |
#this chunk is responsible for printing the path to problem |
|
|
my $newurlp=$urlp; |
my $newurlp=$urlp; |
if ($newurlp=~/~/) {$newurlp=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;} |
if ($newurlp=~/~/) {$newurlp=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;} |
$newurlp=&path_to_problem($newurlp,$LaTeXwidth); |
$newurlp=&path_to_problem($newurlp,$LaTeXwidth); |
Line 1845 ENDPART
|
Line 2060 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 |
|
my $temp_file; |
|
my $identifier = &Apache::loncommon::get_cgi_id(); |
|
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 $!"); |
|
return SERVER_ERROR; |
|
} |
|
print $temp_file $result; |
|
my $begin=index($result,'\begin{document}',0); |
|
my $inc=substr($result,0,$begin+16); |
|
} else { |
|
my $begin=index($result,'\begin{document}',0); |
|
my $inc=substr($result,0,$begin+16); |
|
for (my $i=0;$i<=$#print_array;$i++) { |
|
if ($i==0) { |
|
$print_array[$i]=$result; |
|
} else { |
|
$print_array[$i].='\end{document}'; |
|
$print_array[$i] = |
|
&latex_corrections($number_of_columns,$print_array[$i], |
|
$selectionmade, |
|
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
|
|
|
my $anobegin=index($print_array[$i],'\setcounter{page}',0); |
|
substr($print_array[$i],0,$anobegin)=''; |
|
$print_array[$i]=$inc.$print_array[$i]; |
|
} |
|
my $temp_file; |
|
my $newfilename=$filename; |
|
my $num=$i+1; |
|
$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; |
|
} |
|
print $temp_file $print_array[$i]; |
|
} |
|
} |
|
my $student_names=''; |
|
if ($#print_array>0) { |
|
for (my $i=0;$i<=$#print_array;$i++) { |
|
$student_names.=$student_names[$i].'_ENDPERSON_'; |
|
} |
|
} else { |
|
if ($#student_names>-1) { |
|
$student_names=$student_names[0].'_ENDPERSON_'; |
|
} else { |
|
my $fullname = &get_name($env{'user.name'},$env{'user.domain'}); |
|
$student_names=join(':',$env{'user.name'},$env{'user.domain'}, |
|
$env{'request.course.sec'},$fullname). |
|
'_ENDPERSON_'.'_END_'; |
|
} |
|
} |
} |
|
|
|
# Set URLback if this is a construction space print so we can provide |
|
# a link to the resource being edited. |
|
# |
|
|
my $URLback=''; #link to original document |
my $URLback=''; #link to original document |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
if ($helper->{'VARS'}->{'construction'} eq '1') { |
#prints published resource |
|
$URLback=&escape('/adm/flip?postdata=return:'); |
|
} else { |
|
#prints resource from the construction space |
#prints resource from the construction space |
$URLback='/'.$helper->{'VARS'}->{'filename'}; |
$URLback='/'.$helper->{'VARS'}->{'filename'}; |
if ($URLback=~/([^?]+)/) { |
if ($URLback=~/([^?]+)/) { |
Line 1924 ENDPART
|
Line 2088 ENDPART
|
$URLback=~s|^/~|/priv/|; |
$URLback=~s|^/~|/priv/|; |
} |
} |
} |
} |
# logic for now is too complex to trace if this has been defined |
|
# yet. |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
&Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename, |
|
'cgi.'.$identifier.'.layout' => $laystyle, |
|
'cgi.'.$identifier.'.numcol' => $numberofcolumns, |
|
'cgi.'.$identifier.'.paper' => $papersize, |
|
'cgi.'.$identifier.'.selection' => $selectionmade, |
|
'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'}, |
|
'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'}, |
|
'cgi.'.$identifier.'.role' => $perm{'pav'}, |
|
'cgi.'.$identifier.'.numberoffiles' => $#print_array, |
|
'cgi.'.$identifier.'.studentnames' => $student_names, |
|
'cgi.'.$identifier.'.backref' => $URLback,); |
|
&Apache::lonnet::appenv("cgi.$identifier.user" => $env{'user.name'}, |
|
"cgi.$identifier.domain" => $env{'user.domain'}, |
|
"cgi.$identifier.courseid" => $cnum, |
|
"cgi.$identifier.coursedom" => $cdom, |
|
"cgi.$identifier.resources" => $resources_printed); |
|
|
|
my $end_page = &Apache::loncommon::end_page(); |
|
$r->print(<<FINALEND); |
# If there's been an unrecoverable SSI error, report it to the user |
|
# otherwise, we can write the tex file. |
|
# |
|
|
|
if ($ssi_error) { |
|
my $end_page = &Apache::loncommon::end_page(); |
|
$r->print(<<ERROR_END); |
|
<br /> |
|
<h2>An unrecoverable error occured:</h2> |
|
<p> |
|
I was not able to render one of the print resources ($ssi_last_error_resource) |
|
due to an unrecoverable error communicating with a server: |
|
<br /> |
|
$ssi_last_error; |
|
<br /> |
|
</p> |
|
<p> |
|
I recommend that you try printing again later as this may mean the server was just |
|
temporarily unavailable, or is down for maintenance. If this error persists, then |
|
please contact your LonCAPA support folks for assistance and diagnosis. |
|
<br /> |
|
<br /> |
|
We apologize for the inconvenience. |
|
</p> |
|
$end_page |
|
ERROR_END |
|
} else { |
|
|
|
#-- 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"; |
|
if (!($#print_array>0)) { |
|
unless ($temp_file = Apache::File->new('>'.$filename)) { |
|
$r->log_error("Couldn't open $filename for output $!"); |
|
return SERVER_ERROR; |
|
} |
|
print $temp_file $result; |
|
my $begin=index($result,'\begin{document}',0); |
|
my $inc=substr($result,0,$begin+16); |
|
} else { |
|
my $begin=index($result,'\begin{document}',0); |
|
my $inc=substr($result,0,$begin+16); |
|
for (my $i=0;$i<=$#print_array;$i++) { |
|
if ($i==0) { |
|
$print_array[$i]=$result; |
|
} else { |
|
$print_array[$i].='\end{document}'; |
|
$print_array[$i] = |
|
&latex_corrections($number_of_columns,$print_array[$i], |
|
$selectionmade, |
|
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
|
|
|
my $anobegin=index($print_array[$i],'\setcounter{page}',0); |
|
substr($print_array[$i],0,$anobegin)=''; |
|
$print_array[$i]=$inc.$print_array[$i]; |
|
} |
|
my $temp_file; |
|
my $newfilename=$filename; |
|
my $num=$i+1; |
|
$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; |
|
} |
|
print $temp_file $print_array[$i]; |
|
} |
|
|
|
} |
|
my $student_names=''; |
|
if ($#print_array>0) { |
|
for (my $i=0;$i<=$#print_array;$i++) { |
|
$student_names.=$student_names[$i].'_ENDPERSON_'; |
|
} |
|
} else { |
|
if ($#student_names>-1) { |
|
$student_names=$student_names[0].'_ENDPERSON_'; |
|
} else { |
|
my $fullname = &get_name($env{'user.name'},$env{'user.domain'}); |
|
$student_names=join(':',$env{'user.name'},$env{'user.domain'}, |
|
$env{'request.course.sec'},$fullname). |
|
'_ENDPERSON_'.'_END_'; |
|
} |
|
} |
|
|
|
# logic for now is too complex to trace if this has been defined |
|
# yet. |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
&Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename, |
|
'cgi.'.$identifier.'.layout' => $laystyle, |
|
'cgi.'.$identifier.'.numcol' => $numberofcolumns, |
|
'cgi.'.$identifier.'.paper' => $papersize, |
|
'cgi.'.$identifier.'.selection' => $selectionmade, |
|
'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'}, |
|
'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'}, |
|
'cgi.'.$identifier.'.role' => $perm{'pav'}, |
|
'cgi.'.$identifier.'.numberoffiles' => $#print_array, |
|
'cgi.'.$identifier.'.studentnames' => $student_names, |
|
'cgi.'.$identifier.'.backref' => $URLback,); |
|
&Apache::lonnet::appenv("cgi.$identifier.user" => $env{'user.name'}, |
|
"cgi.$identifier.domain" => $env{'user.domain'}, |
|
"cgi.$identifier.courseid" => $cnum, |
|
"cgi.$identifier.coursedom" => $cdom, |
|
"cgi.$identifier.resources" => $resources_printed); |
|
|
|
my $end_page = &Apache::loncommon::end_page(); |
|
$r->print(<<FINALEND); |
<br /> |
<br /> |
<meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier" /> |
<meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier" /> |
<a href="/cgi-bin/printout.pl?$identifier">Continue</a> |
<a href="/cgi-bin/printout.pl?$identifier">Continue</a> |
$end_page |
$end_page |
FINALEND |
FINALEND |
|
} # endif ssi errors. |
} |
} |
|
|
|
|
Line 1979 sub print_resources {
|
Line 2232 sub print_resources {
|
my $printed = ''; |
my $printed = ''; |
my ($username,$userdomain,$usersection) = split /:/,$person; |
my ($username,$userdomain,$usersection) = split /:/,$person; |
my $fullname = &get_name($username,$userdomain); |
my $fullname = &get_name($username,$userdomain); |
my $namepostfix; |
my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace. |
if ($person =~ 'anon') { |
if ($person =~ 'anon') { |
$namepostfix="\\\\Name: "; |
$namepostfix .="Name: "; |
$fullname = "CODE - ".$moreenv->{'CODE'}; |
$fullname = "CODE - ".$moreenv->{'CODE'}; |
} |
} |
# Fullname may have special latex characters that need \ prefixing: |
# Fullname may have special latex characters that need \ prefixing: |
Line 2005 sub print_resources {
|
Line 2258 sub print_resources {
|
# postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself. |
# postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself. |
# |
# |
|
|
|
|
foreach my $curresline (@{$master_seq}) { |
foreach my $curresline (@{$master_seq}) { |
if (defined $page_breaks{$curresline}) { |
if (defined $page_breaks{$curresline}) { |
if($i != 0) { |
if($i != 0) { |
Line 2012 sub print_resources {
|
Line 2266 sub print_resources {
|
} |
} |
} |
} |
$i++; |
$i++; |
|
|
if ( !($type eq 'problems' && |
if ( !($type eq 'problems' && |
($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library)$/)) ) { |
($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library)$/)) ) { |
my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline); |
my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline); |
Line 2050 sub print_resources {
|
Line 2305 sub print_resources {
|
$rendered = $header.$body; |
$rendered = $header.$body; |
} |
} |
} |
} |
|
|
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
|
my $url = &Apache::lonnet::clutter($res_url); |
|
my $annotation = &annotate($url); |
|
$rendered =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; |
|
} |
if ($remove_latex_header eq 'YES') { |
if ($remove_latex_header eq 'YES') { |
$rendered = &latex_header_footer_remove($rendered); |
$rendered = &latex_header_footer_remove($rendered); |
} else { |
} else { |
Line 2059 sub print_resources {
|
Line 2320 sub print_resources {
|
} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { |
} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { |
$printed .= $curresline.':'; |
$printed .= $curresline.':'; |
my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
|
my $url = &Apache::lonnet::clutter($res_url); |
|
my $annotation = &annotate($url); |
|
$annotation =~ s/(\\end{document})/$annotation$1/; |
|
} |
if ($remove_latex_header eq 'YES') { |
if ($remove_latex_header eq 'YES') { |
$rendered = &latex_header_footer_remove($rendered); |
$rendered = &latex_header_footer_remove($rendered); |
} else { |
} else { |
Line 2137 sub handler {
|
Line 2402 sub handler {
|
if(-e $conversion_queuefile) { |
if(-e $conversion_queuefile) { |
unlink $conversion_queuefile; |
unlink $conversion_queuefile; |
} |
} |
|
|
|
|
&output_data($r,$helper,\%parmhash); |
&output_data($r,$helper,\%parmhash); |
return OK; |
return OK; |
} |
} |
Line 2166 sub init_perm {
|
Line 2433 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 of the items below are in folders set to be randomly ordered. However, when printing the contents of these folders, they will be printed in the original order for all students, not the randomized order."; |
|
} |
|
} |
|
if ($message) { |
|
return '<message type="warning">'.$message.'</message>'; |
|
} |
|
return; |
|
} |
|
|
sub printHelper { |
sub printHelper { |
my $r = shift; |
my $r = shift; |
|
|
Line 2302 sub printHelper {
|
Line 2591 sub printHelper {
|
$helper->{VARS}->{'curseed'}=$env{'form.curseed'}; |
$helper->{VARS}->{'curseed'}=$env{'form.curseed'}; |
} |
} |
if (!$helper->{VARS}->{'probstatus'} && $env{'form.problemtype'}) { |
if (!$helper->{VARS}->{'probstatus'} && $env{'form.problemtype'}) { |
$helper->{VARS}->{'probstatus'}=$env{'form.problemtype'}; |
$helper->{VARS}->{'probstatus'}=$env{'form.problemstatus'}; |
} |
} |
|
|
my $userCanSeeHidden = Apache::lonnavmaps::advancedUser(); |
my $userCanSeeHidden = Apache::lonnavmaps::advancedUser(); |
Line 2392 HELPERFRAGMENT
|
Line 2681 HELPERFRAGMENT
|
if ($perm{'pfo'} && !$is_published && |
if ($perm{'pfo'} && !$is_published && |
($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { |
($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { |
|
|
push @{$printChoices}, ['Selected <b>Problems</b> from <b>entire course</b>', 'all_problems', 'ALL_PROBLEMS']; |
push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b>'), 'all_problems', 'ALL_PROBLEMS']; |
push @{$printChoices}, ['Selected <b>Resources</b> from <b>entire course</b>', 'all_resources', 'ALL_RESOURCES']; |
push @{$printChoices}, [&mtn('Selected <b>Resources</b> from <b>entire course</b>'), 'all_resources', 'ALL_RESOURCES']; |
&Apache::lonxml::xmlparse($r, 'helper', <<ALL_PROBLEMS); |
&Apache::lonxml::xmlparse($r, 'helper', <<ALL_PROBLEMS); |
<state name="ALL_PROBLEMS" title="Select Problem(s) to print"> |
<state name="ALL_PROBLEMS" title="Select Problem(s) to print"> |
<resource variable="RESOURCES" toponly='0' multichoice="1" |
<resource variable="RESOURCES" toponly='0' multichoice="1" |
Line 2421 ALL_PROBLEMS
|
Line 2710 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 2432 ALL_PROBLEMS
|
Line 2724 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 2551 CHOOSE_STUDENTS
|
Line 2845 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 2599 CHOOSE_ANON1
|
Line 2893 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 2662 CHOOSE_STUDENTS1
|
Line 2958 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 2738 CHOOSE_FROM_SUBDIR
|
Line 3034 CHOOSE_FROM_SUBDIR
|
# Allow the user to select any sequence in the course, feed it to |
# Allow the user to select any sequence in the course, feed it to |
# another resource selector for that sequence |
# another resource selector for that sequence |
if (!$helper->{VARS}->{'construction'} && !$is_published) { |
if (!$helper->{VARS}->{'construction'} && !$is_published) { |
push @$printChoices, ["Selected <b>Resources</b> from <b>selected folder</b> in course", |
push @$printChoices, [&mtn("Selected <b>Resources</b> from <b>selected folder</b> in course"), |
'select_sequences', 'CHOOSE_SEQUENCE']; |
'select_sequences', 'CHOOSE_SEQUENCE']; |
my $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'}; |
my $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'}; |
#Escape apostrophes and backslashes for Perl |
#Escape apostrophes and backslashes for Perl |
Line 2784 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3080 CHOOSE_FROM_ANY_SEQUENCE
|
|
|
if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or |
if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or |
($helper->{VARS}->{'construction'} eq '1')) { |
($helper->{VARS}->{'construction'} eq '1')) { |
addMessage("<hr width='33%' /><table><tr><td align='right'>Print: </td><td>"); |
addMessage("<hr width='33%' /><table><tr><td align='right'>". |
|
'<label for="ANSWER_TYPE_forminput">'. |
|
&mt('Print'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'ANSWER_TYPE'; |
$paramHash->{'variable'} = 'ANSWER_TYPE'; |
$helper->declareVar('ANSWER_TYPE'); |
$helper->declareVar('ANSWER_TYPE'); |
Line 2800 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3099 CHOOSE_FROM_ANY_SEQUENCE
|
|
|
if ($perm{'pav'}) { |
if ($perm{'pav'}) { |
if (!$startedTable) { |
if (!$startedTable) { |
addMessage("<hr width='33%' /><table><tr><td align='right'>LaTeX mode: </td><td>"); |
addMessage("<hr width='33%' /><table><tr><td align='right'>". |
|
'<label for="LATEX_TYPE_forminput">'. |
|
&mt('LaTeX mode'). |
|
"</label>: </td><td>"); |
$startedTable = 1; |
$startedTable = 1; |
} else { |
} else { |
addMessage("<tr><td align='right'>LaTeX mode: </td><td>"); |
addMessage("<tr><td align='right'>". |
|
'<label for="LATEX_TYPE_forminput">'. |
|
&mt('LaTeX mode'). |
|
"</label>: </td><td>"); |
} |
} |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
Line 2819 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3124 CHOOSE_FROM_ANY_SEQUENCE
|
} |
} |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
|
|
addMessage("</td></tr><tr><td align='right'>Print Table of Contents: </td><td>"); |
addMessage("</td></tr><tr><td align='right'>". |
|
'<label for="TABLE_CONTENTS_forminput">'. |
|
&mt('Print Table of Contents'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'TABLE_CONTENTS'; |
$paramHash->{'variable'} = 'TABLE_CONTENTS'; |
$helper->declareVar('TABLE_CONTENTS'); |
$helper->declareVar('TABLE_CONTENTS'); |
Line 2830 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3138 CHOOSE_FROM_ANY_SEQUENCE
|
addMessage("</td></tr>"); |
addMessage("</td></tr>"); |
|
|
if (not $helper->{VARS}->{'construction'}) { |
if (not $helper->{VARS}->{'construction'}) { |
addMessage("<tr><td align='right'>Print Index: </td><td>"); |
addMessage("<tr><td align='right'>". |
|
'<label for="TABLE_INDEX_forminput">'. |
|
&mt('Print Index'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'TABLE_INDEX'; |
$paramHash->{'variable'} = 'TABLE_INDEX'; |
$helper->declareVar('TABLE_INDEX'); |
$helper->declareVar('TABLE_INDEX'); |
Line 2839 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3150 CHOOSE_FROM_ANY_SEQUENCE
|
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
addMessage("</td></tr>"); |
addMessage("<tr><td align='right'>Print Discussions: </td><td>"); |
addMessage("<tr><td align='right'>". |
|
'<label for="PRINT_DISCUSSIONS_forminput">'. |
|
&mt('Print Discussions'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS'; |
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS'; |
$helper->declareVar('PRINT_DISCUSSIONS'); |
$helper->declareVar('PRINT_DISCUSSIONS'); |
Line 2849 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3163 CHOOSE_FROM_ANY_SEQUENCE
|
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
addMessage("</td></tr>"); |
|
|
|
# Prompt for printing annotations too. |
|
|
|
addMessage("<tr><td align='right'>". |
|
'<label for="PRINT_ANNOTATIONS_forminput">'. |
|
&mt('Print Annotations'). |
|
"</label>:</td><td>"); |
|
$paramHash = Apache::lonhelper::getParamHash(); |
|
$paramHash->{'variable'} = "PRINT_ANNOTATIONS"; |
|
$helper->declareVar("PRINT_ANNOTATIONS"); |
|
$paramHash->{CHOICES} = [ |
|
['No', 'no'], |
|
['Yes', 'yes']]; |
|
Apache::lonhelper::dropdown->new(); |
|
addMessage("</td></tr>"); |
|
|
addMessage("<tr><td align = 'right'> </td><td>"); |
addMessage("<tr><td align = 'right'> </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'multichoice'} = "true"; |
$paramHash->{'multichoice'} = "true"; |
Line 2860 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3189 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 $stylefiletext=&mt("Use style file"); |
|
my $selectfiletext=&mt("Select style file"); |
|
|
my $xmlfrag .= <<"RNDSEED"; |
my $xmlfrag .= <<"RNDSEED"; |
<message><tr><td align='right'>Use random seed: </td><td></message> |
<message><tr><td align='right'> |
|
<label for="curseed_forminput">$randseedtext</label>: |
|
</td><td></message> |
<string variable="curseed" size="15" maxlength="15"> |
<string variable="curseed" size="15" maxlength="15"> |
<defaultvalue> |
<defaultvalue> |
return $helper->{VARS}->{'curseed'}; |
return $helper->{VARS}->{'curseed'}; |
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
<message></td></tr><tr><td align="right">Use style file:</td><td></message> |
<message></td></tr><tr><td align="right"> |
<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> |
<label for="style_file">$stylefiletext</label>: |
|
</td><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'}; |
|
|
|
|
addMessage("<tr><td>Problem Type:</td><td>"); |
|
$paramHash = &Apache::lonhelper::getParamHash(); |
|
$paramHash->{'variable'} = 'probstatus'; # Already declared: |
|
# |
|
# Initial value from construction space: |
|
# |
|
if (!$helper->{VARS}->{'probstatus'} && $env{'form.problemtype'}) { |
|
$helper->{VARS}->{'probstatus'} = $env{'form.problemtype'}; # initial value |
|
} |
|
$paramHash->{CHOICES} = [ |
|
['Homework problem', 'problem'], |
|
['Exam Problem', 'exam'], |
|
['Survey question', 'survey']]; |
|
Apache::lonhelper::dropdown->new(); |
|
addMessage("</td></tr>"); |
|
|
} |
} |
} |
} |
|
|
Line 2982 sub render {
|
Line 3339 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 2993 sub render {
|
Line 3352 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 3150 sub render {
|
Line 3509 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 3167 sub render {
|
Line 3530 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 3176 sub render {
|
Line 3539 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'> |