version 1.499, 2007/04/20 20:33:35
|
version 1.517, 2008/03/10 08:54:19
|
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. |
# Fetch the contents of a resource, uninterpreted. |
# This is used here to fetch a latex file to be included |
# This is used here to fetch a latex file to be included |
# verbatim into the printout< |
# verbatim into the printout< |
Line 60 sub fetch_raw_resource {
|
Line 77 sub fetch_raw_resource {
|
my ($url) = @_; |
my ($url) = @_; |
|
|
my $filename = &Apache::lonnet::filelocation("", $url); |
my $filename = &Apache::lonnet::filelocation("", $url); |
# |
my $contents = &Apache::lonnet::getfile($filename); |
# fetch if needed: |
|
# |
|
if (! -e $filename) { |
|
my $repcopy_result = &Apache::lonnet::repcopy($filename); |
|
|
|
if ($repcopy_result ne 'ok') { |
if ($contents == -1) { |
return "File open failed for $filename"; # This will bomb the print. |
return "File open failed for $filename"; # This will bomb the print. |
} |
|
} |
} |
my $contents = &Apache::lonnet::readfile($filename); |
|
|
|
return $contents; |
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 ($content, $response) = &Apache::loncommon::ssi_with_retries($resource, $retries, %form); |
|
if (!$response->is_success) { |
|
$ssi_error = 1; |
|
$ssi_last_error_resource = $resource; |
|
$ssi_last_error = $response->code . " " . $response->message; |
|
} |
|
|
|
return $content; |
|
|
|
} |
|
|
# |
# |
# printf_style_subst item format_string repl |
# printf_style_subst item format_string repl |
# |
# |
Line 726 sub character_chart {
|
Line 805 sub character_chart {
|
$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). |
# Chemically useful 'things' contributed by Hon Kie (bug 4652). |
|
|
$result =~ s/&\#8636;/\\ensuremath\{\\leftharpoonup\}/g; |
$result =~ s/&\#8636;/\\ensuremath\{\\leftharpoonup\}/g; |
$result =~ s/&\#8637;/\\ensuremath\{\\leftharpoondown\}/g; |
$result =~ s/&\#8637;/\\ensuremath\{\\leftharpoondown\}/g; |
$result =~ s/&\#8640;/\\ensuremath\{\\rightharpoonup\}/g; |
$result =~ s/&\#8640;/\\ensuremath\{\\rightharpoonup\}/g; |
Line 739 sub character_chart {
|
Line 819 sub character_chart {
|
$result =~ s/&\#8600;/\\ensuremath\{\\searrow\}/g; |
$result =~ s/&\#8600;/\\ensuremath\{\\searrow\}/g; |
$result =~ s/&\#8601;/\\ensuremath\{\\swarrow\}/g; |
$result =~ s/&\#8601;/\\ensuremath\{\\swarrow\}/g; |
$result =~ s/&\#8598;/\\ensuremath\{\\nwarrow\}/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 758 my %page_formats=
|
Line 845 my %page_formats=
|
'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 873 sub page_format_transformation {
|
Line 960 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 1033 sub print_latex_header {
|
Line 1124 sub print_latex_header {
|
'\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n". |
'\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n". |
'\usepackage{wrapfig}'. |
'\usepackage{wrapfig}'. |
'\usepackage{picins}\usepackage{calc}'."\n". |
'\usepackage{picins}\usepackage{calc}'."\n". |
|
'\usepackage[utf8]{inputenc}'."\n". |
'\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n". |
'\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n". |
'\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n". |
'\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n". |
'\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'."\n". |
'\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'."\n". |
Line 1224 sub print_construction_sequence {
|
Line 1316 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 1237 sub print_construction_sequence {
|
Line 1329 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 1292 sub print_construction_sequence {
|
Line 1384 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 $do_postprocessing = 1; |
my $js = <<ENDPART; |
my $js = <<ENDPART; |
Line 1321 sub output_data {
|
Line 1414 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 1354 ENDPART
|
Line 1449 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 1373 ENDPART
|
Line 1469 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 1383 ENDPART
|
Line 1487 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 1396 ENDPART
|
Line 1501 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 1417 ENDPART
|
Line 1520 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 1436 ENDPART
|
Line 1541 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 1450 ENDPART
|
Line 1557 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 1482 ENDPART
|
Line 1602 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$/) { |
} elsif ($cleanURL =~/.tex$/) { |
# For this sort of print of a single LaTeX file, |
# For this sort of print of a single LaTeX file, |
Line 1490 ENDPART
|
Line 1614 ENDPART
|
# |
# |
|
|
$result = &fetch_raw_resource($currentURL); |
$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. |
$do_postprocessing = 0; # Don't massage the result. |
|
|
} else { |
} else { |
Line 1501 ENDPART
|
Line 1630 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 1517 ENDPART
|
Line 1648 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 1547 ENDPART
|
Line 1682 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 1566 ENDPART
|
Line 1700 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 1584 ENDPART
|
Line 1718 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 1615 ENDPART
|
Line 1755 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 1691 ENDPART
|
Line 1836 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 1844 ENDPART
|
Line 1993 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 1854 ENDPART
|
Line 2003 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 1871 ENDPART
|
Line 2020 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 1911 ENDPART
|
Line 2061 ENDPART
|
#} |
#} |
} |
} |
|
|
#-- writing .tex file in prtspool |
# Set URLback if this is a construction space print so we can provide |
my $temp_file; |
# a link to the resource being edited. |
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_'; |
|
} |
|
} |
|
|
|
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 1980 ENDPART
|
Line 2074 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 2061 sub print_resources {
|
Line 2244 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 2068 sub print_resources {
|
Line 2252 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 2106 sub print_resources {
|
Line 2291 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 2115 sub print_resources {
|
Line 2306 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 2193 sub handler {
|
Line 2388 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 2222 sub init_perm {
|
Line 2419 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 2358 sub printHelper {
|
Line 2577 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 2448 HELPERFRAGMENT
|
Line 2667 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 2477 ALL_PROBLEMS
|
Line 2696 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 2488 ALL_PROBLEMS
|
Line 2710 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 2607 CHOOSE_STUDENTS
|
Line 2831 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 2655 CHOOSE_ANON1
|
Line 2879 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 2718 CHOOSE_STUDENTS1
|
Line 2944 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 2794 CHOOSE_FROM_SUBDIR
|
Line 3020 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 2885 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3111 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 2923 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3149 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 2934 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3175 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 2948 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3190 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'}; |
|
|
|
|
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 3063 sub render {
|
Line 3325 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 3074 sub render {
|
Line 3338 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 3231 sub render {
|
Line 3495 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 3248 sub render {
|
Line 3516 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 3257 sub render {
|
Line 3525 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'> |