version 1.524, 2008/03/28 14:52:52
|
version 1.558, 2009/07/03 16:13:13
|
Line 39 use Apache::File();
|
Line 39 use Apache::File();
|
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use Apache::admannotations; |
use Apache::admannotations; |
use Apache::lonenc; |
use Apache::lonenc; |
|
use Apache::entities; |
|
use Apache::londefdef; |
|
|
|
use File::Basename; |
|
|
use HTTP::Response; |
use HTTP::Response; |
|
|
use LONCAPA::map(); |
use LONCAPA::map(); |
Line 65 my $ssi_last_error; # The error text fr
|
Line 70 my $ssi_last_error; # The error text fr
|
my $ssi_retry_count = 5; # Some arbitrary value. |
my $ssi_retry_count = 5; # Some arbitrary value. |
|
|
|
|
|
# Font size: |
|
|
|
my $font_size = 'normalsize'; # Default is normalsize... |
|
|
|
|
# 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 |
Line 109 sub annotate {
|
Line 118 sub annotate {
|
return $result; |
return $result; |
} |
} |
|
|
|
# |
|
# Set a global document font size: |
|
# This is done by replacing \begin{document} |
|
# with \begin{document}{\some-font-directive |
|
# and \end{document} with |
|
# }\end{document |
|
# |
|
sub set_font_size { |
|
|
|
my ($text) = @_; |
|
|
|
$text =~ s/\\begin{document}/\\begin{document}{\\$font_size/; |
|
$text =~ s/\\end{document}/}\\end{document}/; |
|
return $text; |
|
|
|
|
|
} |
|
|
|
# include_pdf - PDF files are included into the |
|
# output as follows: |
|
# - The PDF, if necessary, is replicated. |
|
# - The PDF is added to the list of files to convert to postscript (along with the images). |
|
# - The LaTeX is added to include the final converted postscript in the file as an included |
|
# job. The assumption is that the includedpsheader.ps header will be included. |
|
# |
|
# Parameters: |
|
# pdf_uri - URI of the PDF file to include. |
|
# |
|
# Returns: |
|
# The LaTeX to include. |
|
# |
|
# Assumptions: |
|
# The uri is actually a PDF file |
|
# The postscript will have the includepsheader.ps included. |
|
# |
|
# |
|
sub include_pdf { |
|
my ($pdf_uri) = @_; |
|
|
|
# Where is the file? If not local we'll need to repcopy it:' |
|
|
|
my $file = &Apache::lonnet::filelocation('', $pdf_uri); |
|
if (! -e $file) { |
|
&Apache::lonnet::repcopy($file); |
|
$file = &Apache::lonnet::filelocation('',$pdf_uri); |
|
} |
|
|
|
# The file isn ow replicated locally.. or it did not exist in the first place |
|
# (unlikely). If it did exist, add the pdf to the set of files/images that |
|
# need tob e converted for this print job: |
|
|
|
$file =~ s|(.*)/res/|/home/httpd/html/res/|; |
|
|
|
open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat"); |
|
print FILE ("$file\n"); |
|
close (FILE); |
|
|
|
# Construct the special to put out. To do this we need to get the |
|
# resulting filename after conversion. The file will have the same name |
|
# but will be in the user's spool directory with converted images. |
|
|
|
my $dirname = "/home/httpd/prtspool/$env{'user.name'}/"; |
|
my ( $base, $path, $ext) = &fileparse($file, '.pdf'); |
|
# my $destname = $dirname.'/'.$base.'.eps'; # Not really an eps but easier in printout.pl |
|
$base =~ s/ /\_/g; |
|
|
|
|
|
my $output = &print_latex_header(); |
|
$output .= '\special{ps: _begin_job_ (' |
|
.$base.'.pdf.eps'. |
|
')run _end_job_}'; |
|
|
|
return $output; |
|
|
|
|
|
} |
|
|
|
|
# |
# |
# ssi_with_retries - Does the server side include of a resource. |
# ssi_with_retries - Does the server side include of a resource. |
Line 150 sub ssi_with_retries {
|
Line 236 sub ssi_with_retries {
|
$ssi_error = 1; |
$ssi_error = 1; |
$ssi_last_error_resource = $resource; |
$ssi_last_error_resource = $resource; |
$ssi_last_error = $response->code . " " . $response->message; |
$ssi_last_error = $response->code . " " . $response->message; |
|
$content='\section*{!!! An error occurred !!!}'; |
&Apache::lonnet::logthis("Error in SSI resource: $resource Error: $ssi_last_error"); |
&Apache::lonnet::logthis("Error in SSI resource: $resource Error: $ssi_last_error"); |
} |
} |
|
|
Line 164 sub get_student_view_with_retries {
|
Line 250 sub get_student_view_with_retries {
|
my ($content, $response) = &Apache::loncommon::get_student_view_with_retries($curresline,$retries,$username,$userdomain,$courseid,$target,$moreenv); |
my ($content, $response) = &Apache::loncommon::get_student_view_with_retries($curresline,$retries,$username,$userdomain,$courseid,$target,$moreenv); |
if (!$response->is_success) { |
if (!$response->is_success) { |
$ssi_error = 1; |
$ssi_error = 1; |
$ssi_last_error_resource = $curresline; |
$ssi_last_error_resource = $curresline.' for user '.$username.':'.$userdomain; |
$ssi_last_error = $response->code . " " . $response->message; |
$ssi_last_error = $response->code . " " . $response->message; |
|
$content='\section*{!!! An error occurred !!!}'; |
&Apache::lonnet::logthis("Error in SSI (student view) resource: $curresline Error: $ssi_last_error"); |
&Apache::lonnet::logthis("Error in SSI (student view) resource: $curresline Error: $ssi_last_error User: $username:$userdomain"); |
} |
} |
|
|
return $content; |
return $content; |
|
|
} |
} |
Line 228 sub printf_style_subst {
|
Line 313 sub printf_style_subst {
|
# %a - Assignment name. |
# %a - Assignment name. |
# %c - Course name. |
# %c - Course name. |
# %n - Student name. |
# %n - Student name. |
|
# %s - The section if it is supplied. |
# |
# |
sub format_page_header { |
sub format_page_header { |
my ($width, $format, $assignment, $course, $student) = @_; |
my ($width, $format, $assignment, $course, $student, $section) = @_; |
|
|
|
|
$width = &recalcto_mm($width); # Get width in mm. |
$width = &recalcto_mm($width); # Get width in mm. |
# Default format? |
# Default format? |
Line 247 sub format_page_header {
|
Line 334 sub format_page_header {
|
# - Allow the assignment to be 2 lines (wrapped). |
# - Allow the assignment to be 2 lines (wrapped). |
# |
# |
my $chars_per_line = $width/2; # Character/textline. |
my $chars_per_line = $width/2; # Character/textline. |
|
|
|
|
|
|
my $firstline = "$student $course"; |
my $name_length = int($chars_per_line *3 /4); |
if (length($firstline) > $chars_per_line) { |
my $sec_length = int($chars_per_line / 5); |
my $lastchar = $chars_per_line - length($student) - 1; |
|
if ($lastchar > 0) { |
$format = "%$name_length".'n'; |
$course = substr($course, 0, $lastchar); |
|
} else { # Nothing left of course: |
if ($section) { |
$course = ''; |
$format .= ' - Sec: '."%$sec_length".'s'; |
} |
|
} |
|
if (length($assignment) > $chars_per_line) { |
|
$assignment = substr($assignment, 0, $chars_per_line); |
|
} |
} |
|
|
$format = "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}"; |
|
|
|
} else { |
|
# An open question is how to handle long user formatted page headers... |
|
# A possible future is to support e.g. %na so that the user can control |
|
# the truncation of the elements that can appear in the header. |
|
# |
|
$format = &printf_style_subst("a", $format, $assignment); |
|
$format = &printf_style_subst("c", $format, $course); |
|
$format = &printf_style_subst("n", $format, $student); |
|
|
|
# If the user put %'s in the format string, they must be escaped |
|
# to \% else LaTeX will think they are comments and terminate |
|
# the line.. which is bad!!! |
|
|
|
|
$format .= '\\\\%c \\\\ %a'; |
|
|
|
|
} |
} |
|
# An open question is how to handle long user formatted page headers... |
|
# A possible future is to support e.g. %na so that the user can control |
|
# the truncation of the elements that can appear in the header. |
|
# |
|
$format = &printf_style_subst("a", $format, $assignment); |
|
$format = &printf_style_subst("c", $format, $course); |
|
$format = &printf_style_subst("n", $format, $student); |
|
$format = &printf_style_subst("s", $format, $section); |
|
|
|
|
|
# If the user put %'s in the format string, they must be escaped |
|
# to \% else LaTeX will think they are comments and terminate |
|
# the line.. which is bad!!! |
|
|
|
# If the user has role author, $course and $assignment are empty so |
|
# there is '\\ \\ ' in the page header. That's cause a error in LaTeX |
|
if($format =~ /\\\\\s\\\\\s/) { |
|
#TODO find sensible caption for page header |
|
my $testPrintout = '\\\\'.&mt('Construction Space').' \\\\'.&mt('Test-Printout '); |
|
$format =~ s/\\\\\s\\\\\s/$testPrintout/; |
|
} |
|
|
|
|
return $format; |
return $format; |
Line 384 sub is_valid_alpha_code {
|
Line 476 sub is_valid_alpha_code {
|
sub is_code_valid { |
sub is_code_valid { |
my ($code_value, $code_option) = @_; |
my ($code_value, $code_option) = @_; |
my ($code_type, $code_length) = ('letter', 6); # defaults. |
my ($code_type, $code_length) = ('letter', 6); # defaults. |
open(FG, $Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
my @lines = &Apache::grades::get_scantronformat_file(); |
foreach my $line (<FG>) { |
foreach my $line (@lines) { |
my ($name, $type, $length) = (split(/:/, $line))[0,2,4]; |
my ($name, $type, $length) = (split(/:/, $line))[0,2,4]; |
if($name eq $code_option) { |
if($name eq $code_option) { |
$code_length = $length; |
$code_length = $length; |
Line 503 sub adjust_number_to_print {
|
Line 595 sub adjust_number_to_print {
|
# Unmodified. |
# Unmodified. |
} else { |
} else { |
# Error!!!! |
# Error!!!! |
|
|
croak "bad SPLIT_PDFS: $split_pdf in lonprintout::adjust_number_to_print"; |
croak "bad SPLIT_PDFS: $split_pdf in lonprintout::adjust_number_to_print"; |
|
|
} |
} |
} |
} |
|
|
|
|
sub character_chart { |
sub character_chart { |
|
my $result = shift; |
|
return &Apache::entities::replace_entities($result); |
|
} |
|
|
|
sub old_character_chart { |
my $result = shift; |
my $result = shift; |
$result =~ s/&\#0?0?(7|9);//g; |
$result =~ s/&\#0?0?(7|9);//g; |
$result =~ s/&\#0?(10|13);//g; |
$result =~ s/&\#0?(10|13);//g; |
Line 630 sub character_chart {
|
Line 729 sub character_chart {
|
$result =~ s/&(\#165|yen);/\\textyen /g; |
$result =~ s/&(\#165|yen);/\\textyen /g; |
$result =~ s/&(\#166|brvbar);/\\textbrokenbar /g; |
$result =~ s/&(\#166|brvbar);/\\textbrokenbar /g; |
$result =~ s/&(\#167|sect);/\\textsection /g; |
$result =~ s/&(\#167|sect);/\\textsection /g; |
$result =~ s/&(\#168|uml);/\\texthighdieresis /g; |
$result =~ s/&(\#168|uml);/\\"\{\} /g; |
$result =~ s/&(\#169|copy);/\\copyright /g; |
$result =~ s/&(\#169|copy);/\\copyright /g; |
$result =~ s/&(\#170|ordf);/\\textordfeminine /g; |
$result =~ s/&(\#170|ordf);/\\textordfeminine /g; |
$result =~ s/&(\#172|not);/\\ensuremath\{\\neg\}/g; |
$result =~ s/&(\#172|not);/\\ensuremath\{\\neg\}/g; |
Line 641 sub character_chart {
|
Line 740 sub character_chart {
|
$result =~ s/&(\#177|plusmn);/\\ensuremath\{\\pm\}/g; |
$result =~ s/&(\#177|plusmn);/\\ensuremath\{\\pm\}/g; |
$result =~ s/&(\#178|sup2);/\\ensuremath\{^2\}/g; |
$result =~ s/&(\#178|sup2);/\\ensuremath\{^2\}/g; |
$result =~ s/&(\#179|sup3);/\\ensuremath\{^3\}/g; |
$result =~ s/&(\#179|sup3);/\\ensuremath\{^3\}/g; |
$result =~ s/&(\#180|acute);/\\textacute /g; |
$result =~ s/&(\#180|acute);/\\'\{\} /g; |
$result =~ s/&(\#181|micro);/\\ensuremath\{\\mu\}/g; |
$result =~ s/&(\#181|micro);/\\ensuremath\{\\mu\}/g; |
$result =~ s/&(\#182|para);/\\P/g; |
$result =~ s/&(\#182|para);/\\P/g; |
$result =~ s/&(\#183|middot);/\\ensuremath\{\\cdot\}/g; |
$result =~ s/&(\#183|middot);/\\ensuremath\{\\cdot\}/g; |
Line 970 sub get_course {
|
Line 1069 sub get_course {
|
my $courseidinfo; |
my $courseidinfo; |
if (defined($env{'request.course.id'})) { |
if (defined($env{'request.course.id'})) { |
$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); |
$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); |
|
my $sec = $env{'request.course.sec'}; |
|
|
} |
} |
return $courseidinfo; |
return $courseidinfo; |
} |
} |
Line 992 sub page_format_transformation {
|
Line 1093 sub page_format_transformation {
|
|
|
my $name = &get_name(); |
my $name = &get_name(); |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
|
my $header_text = $parmhash{'print_header_format'}; |
my $header_text = $parmhash{'print_header_format'}; |
$header_text = &format_page_header($textwidth, $header_text, $assignment, |
$header_text = &format_page_header($textwidth, $header_text, $assignment, |
$courseidinfo, $name); |
$courseidinfo, $name); |
Line 1005 sub page_format_transformation {
|
Line 1105 sub page_format_transformation {
|
$fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}"; |
$fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}"; |
} |
} |
if ($layout eq 'album') { |
if ($layout eq 'album') { |
$text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; |
$text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; |
} elsif ($layout eq 'book') { |
} elsif ($layout eq 'book') { |
if ($choice ne 'All class print') { |
if ($choice ne 'All class print') { |
$text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/; |
$text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/; |
} else { |
} else { |
$text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /; |
$text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /; |
} |
} |
if ($papersize eq 'a4') { |
if ($papersize eq 'a4') { |
$text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/; |
$text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/; |
Line 1133 sub IndexCreation {
|
Line 1233 sub IndexCreation {
|
|
|
sub print_latex_header { |
sub print_latex_header { |
my $mode=shift; |
my $mode=shift; |
my $output='\documentclass[letterpaper,twoside]{article}\raggedbottom'; |
|
if (($mode eq 'batchmode') || (!$perm{'pav'})) { |
return &Apache::londefdef::latex_header($mode); |
$output.='\batchmode'; |
|
} |
|
$output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n". |
|
'\usepackage{multirow}'."\n". |
|
'\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n". |
|
'\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n". |
|
'\usepackage{wrapfig}'. |
|
'\usepackage{picins}\usepackage{calc}'."\n". |
|
'\usepackage[utf8]{inputenc}'."\n". |
|
'\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n". |
|
'\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n". |
|
'\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'."\n". |
|
'\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}'."\n". |
|
'\setlength{\abovedisplayshortskip}{-0.04in}'."\n". |
|
'\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'."\n". |
|
'\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large'."\n". |
|
'\textbf{Index}} \newline \setlength{\rightmargin}{0in}'."\n". |
|
'\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}'."\n". |
|
'\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}'."\n". |
|
'\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}'."\n". |
|
'\setlength{\abovedisplayshortskip}{-0.04in}'."\n". |
|
'\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}\begin{document}'."\n"; |
|
return $output; |
|
} |
} |
|
|
sub path_to_problem { |
sub path_to_problem { |
Line 1255 sub recently_generated {
|
Line 1332 sub recently_generated {
|
$cuid,$cgid,$crdev,$csize, |
$cuid,$cgid,$crdev,$csize, |
$catime,$cmtime,$cctime, |
$catime,$cmtime,$cctime, |
$cblksize,$cblocks)=stat($prtspool.'/'.$filename); |
$cblksize,$cblocks)=stat($prtspool.'/'.$filename); |
my $result="<a href='/prtspool/$filename'>". |
my $ext_text = 'pdf' ? &mt('PDF File'):&mt('Zip File'); |
&mt('Generated [_1] ([_2] bytes)', |
my $result=&Apache::loncommon::start_data_table_row() |
&Apache::lonlocal::locallocaltime($cctime),$csize). |
.'<td>' |
'</a><br />'; |
.'<a href="/prtspool/'.$filename.'">'.$ext_text.'</a>' |
|
.'</td>' |
|
.'<td>'.&Apache::lonlocal::locallocaltime($cctime).'</td>' |
|
.'<td align="right">'.$csize.'</td>' |
|
.&Apache::loncommon::end_data_table_row(); |
if ($ext eq 'pdf') { $pdf_result .= $result; } |
if ($ext eq 'pdf') { $pdf_result .= $result; } |
if ($ext eq 'zip') { $zip_result .= $result; } |
if ($ext eq 'zip') { $zip_result .= $result; } |
} |
} |
|
if ($zip_result || $pdf_result) { |
|
$r->print('<hr />'); |
|
} |
if ($zip_result) { |
if ($zip_result) { |
$r->print('<h4>'.&mt('Recently generated printout zip files')."</h4>\n" |
$r->print('<h3>'.&mt('Recently generated printout zip files')."</h3>\n" |
.$zip_result); |
.&Apache::loncommon::start_data_table() |
|
.&Apache::loncommon::start_data_table_header_row() |
|
.'<th>'.&mt('Download').'</th>' |
|
.'<th>'.&mt('Creation Date').'</th>' |
|
.'<th>'.&mt('File Size (Bytes)').'</th>' |
|
.&Apache::loncommon::end_data_table_header_row() |
|
.$zip_result |
|
.&Apache::loncommon::end_data_table() |
|
); |
} |
} |
if ($pdf_result) { |
if ($pdf_result) { |
$r->print('<h4>'.&mt('Recently generated printouts')."</h4>\n" |
$r->print('<h3>'.&mt('Recently generated printouts')."</h3>\n" |
.$pdf_result); |
.&Apache::loncommon::start_data_table() |
|
.&Apache::loncommon::start_data_table_header_row() |
|
.'<th>'.&mt('Download').'</th>' |
|
.'<th>'.&mt('Creation Date').'</th>' |
|
.'<th>'.&mt('File Size (Bytes)').'</th>' |
|
.&Apache::loncommon::end_data_table_header_row() |
|
.$pdf_result |
|
.&Apache::loncommon::end_data_table() |
|
); |
} |
} |
} |
} |
|
|
Line 1375 sub print_construction_sequence {
|
Line 1475 sub print_construction_sequence {
|
$result.=$texversion; |
$result.=$texversion; |
|
|
} elsif ($urlp=~/\.(sequence|page)$/) { |
} elsif ($urlp=~/\.(sequence|page)$/) { |
|
|
# header: |
# header: |
|
|
$result.='\strut\newline\noindent Sequence/page '.$urlp.'\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent '; |
$result.='\strut\newline\noindent Sequence/page '.$urlp.'\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent '; |
Line 1394 sub print_construction_sequence {
|
Line 1494 sub print_construction_sequence {
|
$helper, %form, |
$helper, %form, |
$LaTeXwidth); |
$LaTeXwidth); |
} |
} |
} |
} |
|
elsif ($urlp =~ /\.pdf$/i) { |
|
my $texversion; |
|
if ($member != 0) { |
|
$texversion .= '\cleardoublepage'; |
|
} |
|
|
|
$texversion .= &include_pdf($urlp); |
|
$texversion = &latex_header_footer_remove($texversion); |
|
if ($member != $#order) { |
|
$texversion .= '\\ \cleardoublepage'; |
|
} |
|
|
|
$result .= $texversion; |
|
} |
} |
} |
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} |
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} |
return $result; |
return $result; |
Line 1405 sub output_data {
|
Line 1519 sub output_data {
|
my %parmhash = %$rparmhash; |
my %parmhash = %$rparmhash; |
$ssi_error = 0; # This will be set nonzero by failing ssi's. |
$ssi_error = 0; # This will be set nonzero by failing ssi's. |
$resources_printed = ''; |
$resources_printed = ''; |
|
$font_size = $helper->{'VARS'}->{'fontsize'}; |
my $do_postprocessing = 1; |
my $do_postprocessing = 1; |
my $js = <<ENDPART; |
my $js = <<ENDPART; |
<script type="text/javascript"> |
<script type="text/javascript"> |
Line 1434 sub output_data {
|
Line 1549 sub output_data {
|
ENDPART |
ENDPART |
|
|
|
|
|
# Breadcrumbs |
my $start_page = &Apache::loncommon::start_page('Preparing Printout',$js); |
#FIXME: Choose better/different breadcrumbs?!? Links? |
|
my $brcrum = [{'href' => '', |
|
'text' => 'Helper'}, #FIXME: Different origin possible than print out helper? |
|
{'href' => '', |
|
'text' => 'Preparing Printout'}]; |
|
|
|
my $start_page = &Apache::loncommon::start_page('Preparing Printout', |
|
$js, |
|
{'bread_crumbs' => $brcrum,}); |
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 ...'); |
|
|
$r->print($start_page."\n<p>\n$msg\n</p>\n"); |
$r->print($start_page."\n<p>\n$msg\n</p>\n"); |
Line 1456 ENDPART
|
Line 1579 ENDPART
|
my ($result,$selectionmade) = ('',''); |
my ($result,$selectionmade) = ('',''); |
my $number_of_columns = 1; #used only for pages to determine the width of the cell |
my $number_of_columns = 1; #used only for pages to determine the width of the cell |
my @temporary_array=split /\|/,$format_from_helper; |
my @temporary_array=split /\|/,$format_from_helper; |
my ($laystyle,$numberofcolumns,$papersize)=@temporary_array; |
my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array; |
if ($laystyle eq 'L') { |
if ($laystyle eq 'L') { |
$laystyle='album'; |
$laystyle='album'; |
} else { |
} else { |
Line 1477 ENDPART
|
Line 1600 ENDPART
|
my %form; |
my %form; |
$form{'grade_target'} = 'tex'; |
$form{'grade_target'} = 'tex'; |
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); |
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); |
|
$form{'pdfFormFields'} = $pdfFormFields; |
|
|
# If form.showallfoils is set, then request all foils be shown: |
# If form.showallfoils is set, then request all foils be shown: |
# privilege will be enforced both by not allowing the |
# privilege will be enforced both by not allowing the |
Line 1493 ENDPART
|
Line 1617 ENDPART
|
&Apache::lonnet::appenv({'construct.style' => |
&Apache::lonnet::appenv({'construct.style' => |
$helper->{'VARS'}->{'style_file'}}); |
$helper->{'VARS'}->{'style_file'}}); |
} elsif ($env{'construct.style'}) { |
} elsif ($env{'construct.style'}) { |
&Apache::lonnet::delenv('construct\\.style'); |
&Apache::lonnet::delenv('construct.style'); |
} |
} |
|
|
|
|
Line 1514 ENDPART
|
Line 1638 ENDPART
|
} |
} |
$selectionmade = 1; |
$selectionmade = 1; |
if ($cleanURL!~m|^/adm/| |
if ($cleanURL!~m|^/adm/| |
&& $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
&& $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) { |
my $rndseed=time; |
my $rndseed=time; |
my $texversion=''; |
my $texversion=''; |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
Line 1584 ENDPART
|
Line 1708 ENDPART
|
|
|
|
|
|
|
|
|
} |
} |
# Print annotations. |
# Print annotations. |
|
|
Line 1606 ENDPART
|
Line 1731 ENDPART
|
($result,$number_of_columns) = &page_cleanup($result); |
($result,$number_of_columns) = &page_cleanup($result); |
} |
} |
} elsif ($cleanURL!~m|^/adm/| |
} elsif ($cleanURL!~m|^/adm/| |
&& $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') { |
&& $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') { |
#printing content of sequence from the construction space |
#printing content of sequence from the construction space |
$currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; |
$currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; |
$result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
# $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$result .= &print_construction_sequence($currentURL, $helper, %form, |
$result .= &print_construction_sequence($currentURL, $helper, %form, |
$LaTeXwidth); |
$LaTeXwidth); |
$result .= '\end{document}'; |
$result .= '\end{document}'; |
Line 1627 ENDPART
|
Line 1752 ENDPART
|
$texversion =~ s/(\\end{document})/$annotation$1/; |
$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, |
# We can just print the LaTeX file as it is uninterpreted in any way: |
# We can just print the LaTeX file as it is uninterpreted in any way: |
# |
# |
Line 1640 ENDPART
|
Line 1765 ENDPART
|
|
|
$do_postprocessing = 0; # Don't massage the result. |
$do_postprocessing = 0; # Don't massage the result. |
|
|
|
} elsif ($cleanURL =~ /\.pdf$/i) { |
|
$result .= &include_pdf($cleanURL); |
|
$result .= '\end{document}'; |
} else { |
} else { |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$helper->{'VARS'}->{'symb'}); |
$helper->{'VARS'}->{'symb'}); |
Line 1648 ENDPART
|
Line 1776 ENDPART
|
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or |
($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 |
Line 1656 ENDPART
|
Line 1785 ENDPART
|
$selectionmade = 2; |
$selectionmade = 2; |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') { |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') { |
$selectionmade = 3; |
$selectionmade = 3; |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') { |
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') |
|
) { |
$selectionmade = 4; |
$selectionmade = 4; |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') { #BUGBUG |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') { #BUGBUG |
$selectionmade = 4; |
$selectionmade = 4; |
Line 1731 ENDPART
|
Line 1861 ENDPART
|
} else { |
} else { |
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) { |
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) { |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
|
$texversion =~ s/\\begin{document}//; |
my $title = &Apache::lonnet::gettitle($master_seq[$i]); |
my $title = &Apache::lonnet::gettitle($master_seq[$i]); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
Line 1760 ENDPART
|
Line 1891 ENDPART
|
if (($selectionmade == 4) and ($assignment ne $prevassignment)) { |
if (($selectionmade == 4) and ($assignment ne $prevassignment)) { |
my $name = &get_name(); |
my $name = &get_name(); |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
|
$prevassignment=$assignment; |
$prevassignment=$assignment; |
my $header_text = $parmhash{'print_header_format'}; |
my $header_text = $parmhash{'print_header_format'}; |
$header_text = &format_page_header($textwidth, $header_text, |
$header_text = &format_page_header($textwidth, $header_text, |
$assignment, |
$assignment, |
$courseidinfo, |
$courseidinfo, |
$name); |
$name); |
|
|
if ($numberofcolumns eq '1') { |
if ($numberofcolumns eq '1') { |
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; |
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; |
} else { |
} else { |
Line 1787 ENDPART
|
Line 1918 ENDPART
|
|
|
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 { |
$texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/; |
$texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/; |
} |
} |
$result .= $texversion; |
$result .= $texversion; |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
|
} elsif ($urlp=~ /\.pdf$/i) { |
|
if ($i > 0) { |
|
$result .= '\cleardoublepage'; |
|
} |
|
$result .= &include_pdf($urlp); |
|
if ($i != $#master_seq) { |
|
if ($numberofcolumns eq '1') { |
|
$result .= '\newpage'; |
|
} else { |
|
# the \\'s seem to be needed to let LaTeX know there's something |
|
# on the page since LaTeX seems to not like to clear an empty page. |
|
# |
|
$result .= '\\ \cleardoublepage'; |
|
} |
|
} |
|
$flag_latex_header_remove = 'YES'; |
|
|
} else { |
} else { |
$texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$master_seq[$i]); |
$master_seq[$i]); |
Line 1803 ENDPART
|
Line 1951 ENDPART
|
$result .= $texversion; |
$result .= $texversion; |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
} |
} |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { |
|
last; |
|
} |
} |
} |
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
if ($flag_page_in_sequence eq 'YES') { |
if ($flag_page_in_sequence eq 'YES') { |
Line 1811 ENDPART
|
Line 1961 ENDPART
|
} |
} |
$result .= '\end{document}'; |
$result .= '\end{document}'; |
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') || |
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') || |
|
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') || |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){ |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){ |
|
|
|
|
#-- prints assignments for whole class or for selected students |
#-- prints assignments for whole class or for selected students |
my $type; |
my $type; |
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') { |
if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') || |
|
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ) { |
$selectionmade=5; |
$selectionmade=5; |
$type='problems'; |
$type='problems'; |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students') { |
} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students') { |
Line 1855 ENDPART
|
Line 2007 ENDPART
|
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
|
|
#loop over students |
#loop over students |
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
my %moreenv; |
my %moreenv; |
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); |
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); |
Line 1913 ENDPART
|
Line 2065 ENDPART
|
my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'}; |
my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'}; |
|
|
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; |
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; |
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
my @lines = &Apache::grades::get_scantronformat_file(); |
my ($code_type,$code_length)=('letter',6); |
my ($code_type,$code_length)=('letter',6); |
foreach my $line (<FH>) { |
foreach my $line (@lines) { |
my ($name,$type,$length) = (split(/:/,$line))[0,2,4]; |
my ($name,$type,$length) = (split(/:/,$line))[0,2,4]; |
if ($name eq $code_option) { |
if ($name eq $code_option) { |
$code_length=$length; |
$code_length=$length; |
Line 2101 ENDPART
|
Line 2253 ENDPART
|
$URLback=~s|^/~|/priv/|; |
$URLback=~s|^/~|/priv/|; |
} |
} |
} |
} |
|
# |
|
# Final adjustment of the font size: |
# If there's been an unrecoverable SSI error, report it to the user |
|
# otherwise, we can write the tex file. |
|
# |
# |
|
|
if ($ssi_error) { |
$result = set_font_size($result); |
|
|
my $helpurl = &Apache::loncommon::top_nav_help('Helpdesk'); |
|
my $end_page = &Apache::loncommon::end_page(); |
|
$r->print(' |
|
<br /> |
|
<h2>'.&mt('An unrecoverable network error occurred:').'</h2> |
|
<p> |
|
'.&mt('One of the resources ([_1]) you chose to print could not be rendered due to an unrecoverable error when communicating with a server:',$ssi_last_error_resource).' |
|
<br /> |
|
'.$ssi_last_error.' |
|
</p> |
|
<p>'. |
|
&mt('It is recommended that you try printing again later, as this error may mean the server was just temporarily unavailable, or is down for maintenance.').'<br />'. |
|
&mt('If the error persists, please contact the [_1] for assistance.',$helpurl). |
|
'</p><p>'. |
|
&mt('We apologize for the inconvenience.'). |
|
'</p>'. |
|
$end_page); |
|
} else { |
|
|
|
#-- writing .tex file in prtspool |
#-- writing .tex file in prtspool |
my $temp_file; |
my $temp_file; |
my $identifier = &Apache::loncommon::get_cgi_id(); |
my $identifier = &Apache::loncommon::get_cgi_id(); |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex"; |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex"; |
if (!($#print_array>0)) { |
if (!($#print_array>0)) { |
unless ($temp_file = Apache::File->new('>'.$filename)) { |
unless ($temp_file = Apache::File->new('>'.$filename)) { |
$r->log_error("Couldn't open $filename for output $!"); |
$r->log_error("Couldn't open $filename for output $!"); |
return SERVER_ERROR; |
return SERVER_ERROR; |
} |
} |
print $temp_file $result; |
print $temp_file $result; |
my $begin=index($result,'\begin{document}',0); |
my $begin=index($result,'\begin{document}',0); |
my $inc=substr($result,0,$begin+16); |
my $inc=substr($result,0,$begin+16); |
} else { |
} else { |
my $begin=index($result,'\begin{document}',0); |
my $begin=index($result,'\begin{document}',0); |
my $inc=substr($result,0,$begin+16); |
my $inc=substr($result,0,$begin+16); |
for (my $i=0;$i<=$#print_array;$i++) { |
for (my $i=0;$i<=$#print_array;$i++) { |
if ($i==0) { |
if ($i==0) { |
$print_array[$i]=$result; |
$print_array[$i]=$result; |
} else { |
} else { |
$print_array[$i].='\end{document}'; |
$print_array[$i].='\end{document}'; |
$print_array[$i] = |
$print_array[$i] = |
&latex_corrections($number_of_columns,$print_array[$i], |
&latex_corrections($number_of_columns,$print_array[$i], |
$selectionmade, |
$selectionmade, |
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
$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 $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_'; |
} |
} |
my $student_names=''; |
} else { |
if ($#print_array>0) { |
if ($#student_names>-1) { |
for (my $i=0;$i<=$#print_array;$i++) { |
$student_names=$student_names[0].'_ENDPERSON_'; |
$student_names.=$student_names[$i].'_ENDPERSON_'; |
|
} |
|
} else { |
} else { |
if ($#student_names>-1) { |
my $fullname = &get_name($env{'user.name'},$env{'user.domain'}); |
$student_names=$student_names[0].'_ENDPERSON_'; |
$student_names=join(':',$env{'user.name'},$env{'user.domain'}, |
} 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). |
$env{'request.course.sec'},$fullname). |
'_ENDPERSON_'.'_END_'; |
'_ENDPERSON_'.'_END_'; |
} |
|
} |
} |
|
} |
|
|
# logic for now is too complex to trace if this has been defined |
# logic for now is too complex to trace if this has been defined |
# yet. |
# yet. |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
&Apache::lonnet::appenv({'cgi.'.$identifier.'.file' => $filename, |
&Apache::lonnet::appenv({'cgi.'.$identifier.'.file' => $filename, |
'cgi.'.$identifier.'.layout' => $laystyle, |
'cgi.'.$identifier.'.layout' => $laystyle, |
'cgi.'.$identifier.'.numcol' => $numberofcolumns, |
'cgi.'.$identifier.'.numcol' => $numberofcolumns, |
'cgi.'.$identifier.'.paper' => $papersize, |
'cgi.'.$identifier.'.paper' => $papersize, |
Line 2201 $end_page);
|
Line 2331 $end_page);
|
'cgi.'.$identifier.'.numberoffiles' => $#print_array, |
'cgi.'.$identifier.'.numberoffiles' => $#print_array, |
'cgi.'.$identifier.'.studentnames' => $student_names, |
'cgi.'.$identifier.'.studentnames' => $student_names, |
'cgi.'.$identifier.'.backref' => $URLback,}); |
'cgi.'.$identifier.'.backref' => $URLback,}); |
&Apache::lonnet::appenv({"cgi.$identifier.user" => $env{'user.name'}, |
&Apache::lonnet::appenv({"cgi.$identifier.user" => $env{'user.name'}, |
"cgi.$identifier.domain" => $env{'user.domain'}, |
"cgi.$identifier.domain" => $env{'user.domain'}, |
"cgi.$identifier.courseid" => $cnum, |
"cgi.$identifier.courseid" => $cnum, |
"cgi.$identifier.coursedom" => $cdom, |
"cgi.$identifier.coursedom" => $cdom, |
"cgi.$identifier.resources" => $resources_printed}); |
"cgi.$identifier.resources" => $resources_printed}); |
|
|
my $end_page = &Apache::loncommon::end_page(); |
my $end_page = &Apache::loncommon::end_page(); |
|
my $continue_text = &mt('Continue'); |
|
# If there's been an unrecoverable SSI error, report it to the user |
|
if ($ssi_error) { |
|
my $helpurl = &Apache::loncommon::top_nav_help('Helpdesk'); |
|
$r->print('<br /><p class="LC_error">'.&mt('An unrecoverable network error occurred:').'</p><p>'. |
|
&mt('At least one of the resources you chose to print could not be rendered due to an unrecoverable error when communicating with a server:'). |
|
'<br />'.$ssi_last_error_resource.'<br />'.$ssi_last_error. |
|
'</p><p>'.&mt('You can continue using the link provided below, but make sure to carefully inspect your output file! The errors will be marked in the file.').'<br />'. |
|
&mt('You may be able to reprint the individual resources for which this error occurred, as the issue may be temporary.'). |
|
'<br />'.&mt('If the error persists, please contact the [_1] for assistance.',$helpurl).'</p><p>'. |
|
&mt('We apologize for the inconvenience.').'</p>'. |
|
'<a href="/cgi-bin/printout.pl?'.$identifier.'">'.$continue_text.'</a>'.$end_page); |
|
} else { |
$r->print(<<FINALEND); |
$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_text</a> |
$end_page |
$end_page |
FINALEND |
FINALEND |
} # endif ssi errors. |
} # endif ssi errors. |
} |
} |
|
|
|
|
Line 2287 sub print_resources {
|
Line 2430 sub print_resources {
|
|
|
&Apache::lonxml::remember_problem_counter(); |
&Apache::lonxml::remember_problem_counter(); |
|
|
my $rendered = &Apache::loncommon::get_student_view_with_retries($curresline,3,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
|
|
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 2306 sub print_resources {
|
Line 2449 sub print_resources {
|
|
|
|
|
my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
|
$header =~ s/\\begin{document}//; #<<<<< |
my $title = &Apache::lonnet::gettitle($curresline); |
my $title = &Apache::lonnet::gettitle($curresline); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
Line 2329 sub print_resources {
|
Line 2473 sub print_resources {
|
$current_output .= $rendered; |
$current_output .= $rendered; |
} 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 = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $url = &Apache::lonnet::clutter($res_url); |
my $url = &Apache::lonnet::clutter($res_url); |
my $annotation = &annotate($url); |
my $annotation = &annotate($url); |
Line 2341 sub print_resources {
|
Line 2485 sub print_resources {
|
$rendered =~ s/\\end{document}//; |
$rendered =~ s/\\end{document}//; |
} |
} |
$current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut '; |
$current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut '; |
|
} elsif($res_url = ~/\.pdf$/) { |
|
my $url = &Apache::lonnet::clutter($res_url); |
|
my $rendered = &include_pdf($url); |
|
if ($remove_latex_header ne 'NO') { |
|
$rendered = &latex_header_footer_remove($rendered); |
|
} |
|
$current_output .= $rendered; |
} else { |
} else { |
my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline); |
my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline); |
if ($remove_latex_header ne 'NO') { |
if ($remove_latex_header ne 'NO') { |
Line 2353 sub print_resources {
|
Line 2503 sub print_resources {
|
} |
} |
} |
} |
$remove_latex_header = 'YES'; |
$remove_latex_header = 'YES'; |
} |
} |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
|
|
|
|
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
|
if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection} |
|
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
my $header_line = |
my $header_line = |
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
$currentassignment, $courseidinfo, $fullname); |
$currentassignment, $courseidinfo, $fullname, $usersection); |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
: '\fancyhead[LO]'; |
: '\fancyhead[LO]'; |
$header_line = $header_start.'{'.$header_line.'}'; |
$header_line = $header_start.'{'.$header_line.'}'; |
|
|
if ($current_output=~/\\documentclass/) { |
if ($current_output=~/\\documentclass/) { |
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /; |
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /; |
} else { |
} else { |
Line 2450 sub get_randomly_ordered_warning {
|
Line 2599 sub get_randomly_ordered_warning {
|
|
|
my $postdata = $env{'form.postdata'} || $helper->{VARS}{'postdata'}; |
my $postdata = $env{'form.postdata'} || $helper->{VARS}{'postdata'}; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $res = $navmap->getResourceByUrl($map); |
if (defined($navmap)) { |
if ($res) { |
my $res = $navmap->getResourceByUrl($map); |
my $func = |
if ($res) { |
sub { return ($_[0]->is_map() && $_[0]->randomorder); }; |
my $func = |
my @matches = $navmap->retrieveResources($res, $func,1,1,1); |
sub { return ($_[0]->is_map() && $_[0]->randomorder); }; |
if (@matches) { |
my @matches = $navmap->retrieveResources($res, $func,1,1,1); |
$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 (@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>'; |
if ($message) { |
|
return '<message type="warning">'.$message.'</message>'; |
|
} |
|
} else { |
|
$message = "Retrieval of information about ordering of resources failed."; |
|
return '<message type="warning">'.$message.'</message>'; |
} |
} |
return; |
return; |
} |
} |
Line 2538 sub printHelper {
|
Line 2692 sub printHelper {
|
|
|
} |
} |
|
|
|
|
# Detect whether we're coming from construction space |
# Detect whether we're coming from construction space |
if ($env{'form.postdata'}=~/^(?:http:\/\/[^\/]+\/|\/|)\~([^\/]+)\/(.*)$/) { |
if ($env{'form.postdata'}=~/^(?:http:\/\/[^\/]+\/|\/|)\~([^\/]+)\/(.*)$/) { |
$helper->{VARS}->{'filename'} = "~$1/$2"; |
$helper->{VARS}->{'filename'} = "~$1/$2"; |
Line 2634 sub printHelper {
|
Line 2787 sub printHelper {
|
} |
} |
|
|
# Useful filter strings |
# Useful filter strings |
my $isProblem = '($res->is_problem()||$res->contains_problem) '; |
my $isProblem = '($res->is_problem()||$res->contains_problem||$res->is_practice()) '; |
$isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden; |
$isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden; |
my $isProblemOrMap = '$res->is_problem() || $res->contains_problem() || $res->is_sequence()'; |
my $isProblemOrMap = '$res->is_problem() || $res->contains_problem() || $res->is_sequence() || $res->is_practice()'; |
my $isNotMap = '!$res->is_sequence()'; |
my $isNotMap = '!$res->is_sequence()'; |
$isNotMap .= ' && !$res->randomout()' if !$userCanSeeHidden; |
$isNotMap .= ' && !$res->randomout()' if !$userCanSeeHidden; |
my $isMap = '$res->is_map()'; |
my $isMap = '$res->is_map()'; |
Line 2655 sub printHelper {
|
Line 2808 sub printHelper {
|
} |
} |
|
|
if (($helper->{'VARS'}->{'construction'} ne '1' ) && |
if (($helper->{'VARS'}->{'construction'} ne '1' ) && |
|
|
$helper->{VARS}->{'postdata'} && |
$helper->{VARS}->{'postdata'} && |
$helper->{VARS}->{'assignment'}) { |
$helper->{VARS}->{'assignment'}) { |
# Allow problems from sequence |
# Allow problems from sequence |
push @{$printChoices}, [&mt('Selected <b>Problems</b> in folder <b><i>[_1]</i></b>',$sequenceTitle), 'map_problems', 'CHOOSE_PROBLEMS']; |
push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems', 'CHOOSE_PROBLEMS']; |
# Allow all resources from sequence |
# Allow all resources from sequence |
push @{$printChoices}, [&mt('Selected <b>Resources</b> in folder <b><i>[_1]</i></b>',$sequenceTitle), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; |
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; |
|
|
my $helperFragment = <<HELPERFRAGMENT; |
my $helperFragment = <<HELPERFRAGMENT; |
<state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print"> |
<state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print"> |
Line 2690 HELPERFRAGMENT
|
Line 2842 HELPERFRAGMENT
|
&Apache::lonxml::xmlparse($r, 'helper', $helperFragment); |
&Apache::lonxml::xmlparse($r, 'helper', $helperFragment); |
} |
} |
|
|
# If the user has pfo (print for otheres) allow them to print all |
# If the user has pfo (print for others) allow them to print all |
# problems and resources in the entier course, optionally for selected students |
# problems and resources in the entire course, optionally for selected students |
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}, [&mtn('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}, [&mtn('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']; |
|
push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b> for <b>selected people</b>'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS']; |
&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 2717 HELPERFRAGMENT
|
Line 2870 HELPERFRAGMENT
|
$start_new_option |
$start_new_option |
</resource> |
</resource> |
</state> |
</state> |
|
<state name="ALL_PROBLEMS_STUDENTS" title="Select Problem(s) to print"> |
|
<resource variable="RESOURCES" toponly='0' multichoice="1" |
|
suppressEmptySequences='0' addstatus="1" closeallpages="1"> |
|
<nextstate>STUDENTS1</nextstate> |
|
<filterfunc>return $isProblemOrMap;</filterfunc> |
|
<choicefunc>return $isNotMap;</choicefunc> |
|
<valuefunc>return $symbFilter;</valuefunc> |
|
$start_new_option |
|
</resource> |
|
</state> |
|
<state name="STUDENTS1" title="Select People"> |
|
<message><b>Select sorting order of printout</b> </message> |
|
<choices variable='student_sort'> |
|
<choice computer='0'>Sort by section then student</choice> |
|
<choice computer='1'>Sort by students across sections.</choice> |
|
</choices> |
|
<message><br /><hr /><br /> </message> |
|
<student multichoice='1' variable="STUDENTS" nextstate="PRINT_FORMATTING" coursepersonnel="1"/> |
|
</state> |
|
|
ALL_PROBLEMS |
ALL_PROBLEMS |
|
|
if ($helper->{VARS}->{'assignment'}) { |
if ($helper->{VARS}->{'assignment'}) { |
push @{$printChoices}, [&mt("Selected <b>Problems</b> from folder <b><i>[_1]</i></b> for <b>selected people</b>",$sequenceTitle), 'problems_for_students', 'CHOOSE_STUDENTS']; |
push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_students', 'CHOOSE_STUDENTS']; |
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 [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_anon', 'CHOOSE_ANON1']; |
} |
} |
|
|
my $randomly_ordered_warning = |
my $randomly_ordered_warning = |
Line 2826 CHOOSE_STUDENTS
|
Line 2999 CHOOSE_STUDENTS
|
|
|
} |
} |
|
|
|
my @lines = &Apache::grades::get_scantronformat_file(); |
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
|
my $codechoice=''; |
my $codechoice=''; |
foreach my $line (<FH>) { |
foreach my $line (@lines) { |
my ($name,$description,$code_type,$code_length)= |
my ($name,$description,$code_type,$code_length)= |
(split(/:/,$line))[0,1,2,4]; |
(split(/:/,$line))[0,1,2,4]; |
if ($code_length > 0 && |
if ($code_length > 0 && |
Line 2900 CHOOSE_ANON1
|
Line 3072 CHOOSE_ANON1
|
|
|
|
|
if ($helper->{VARS}->{'assignment'}) { |
if ($helper->{VARS}->{'assignment'}) { |
push @{$printChoices}, [&mt("Selected <b>Resources</b> from folder <b><i>[_1]</i></b> for <b>selected people</b>",$sequenceTitle), 'resources_for_students', 'CHOOSE_STUDENTS1']; |
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_students', 'CHOOSE_STUDENTS1']; |
push @{$printChoices}, [&mt("Selected <b>Resources</b> from folder <b><i>[_1]</i></b> for <b>CODEd assignments</b>",$sequenceTitle), 'resources_for_anon', 'CHOOSE_ANON2']; |
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_anon', 'CHOOSE_ANON2']; |
} |
} |
|
|
|
|
Line 3024 CHOOSE_ANON2
|
Line 3196 CHOOSE_ANON2
|
) { |
) { |
|
|
my $pretty_dir = &Apache::lonnet::hreflocation($subdir); |
my $pretty_dir = &Apache::lonnet::hreflocation($subdir); |
push @{$printChoices}, [&mt("Selected <b>Problems</b> from current subdirectory <b><i>[_1]</i></b>",$pretty_dir), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; |
push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','<b>','</b>','<b><i>'.$pretty_dir.'</i></b>','<b>','</b>'), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; |
my $xmlfrag = <<CHOOSE_FROM_SUBDIR; |
my $xmlfrag = <<CHOOSE_FROM_SUBDIR; |
<state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$pretty_dir</small></b> to print"> |
<state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$pretty_dir</small></b> to print"> |
|
|
Line 3094 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3266 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'>". |
&addMessage('<br />' |
'<label for="ANSWER_TYPE_forminput">'. |
.'<h3>'.&mt('Print Options').'</h3>' |
&mt('Print'). |
.&Apache::lonhtmlcommon::start_pick_box() |
"</label>: </td><td>"); |
.&Apache::lonhtmlcommon::row_title( |
|
'<label for="ANSWER_TYPE_forminput">' |
|
.&mt('Print Answers') |
|
.'</label>' |
|
) |
|
); |
$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 3107 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3284 CHOOSE_FROM_ANY_SEQUENCE
|
['Only Answers', 'only'] |
['Only Answers', 'only'] |
]; |
]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
&addMessage(&Apache::lonhtmlcommon::row_closure()); |
$startedTable = 1; |
$startedTable = 1; |
|
|
|
# |
|
# Select font size. |
|
# |
|
|
|
$helper->declareVar('fontsize'); |
|
&addMessage(&Apache::lonhtmlcommon::row_title(&mt('Font Size'))); |
|
my $xmlfrag = << "FONT_SELECTION"; |
|
|
|
|
|
<dropdown variable='fontsize' multichoice='0', allowempty='0'> |
|
<defaultvalue> |
|
return 'normalsize'; |
|
</defaultvalue> |
|
<choice computer='tiny'>Tiny</choice> |
|
<choice computer='sub/superscriptsize'>Script Size</choice> |
|
<choice computer='footnotesize'>Footnote Size</choice> |
|
<choice computer='small'>Small</choice> |
|
<choice computer='normalsize'>Normal (default)</choice> |
|
<choice computer='large'>larger than normal</choice> |
|
<choice computer='Large'>Even larger than normal</choice> |
|
<choice computer='LARGE'>Still larger than normal</choice> |
|
<choice computer='huge'>huge font size</choice> |
|
<choice computer='Huge'>Largest possible size</choice> |
|
</dropdown> |
|
FONT_SELECTION |
|
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
|
&addMessage(&Apache::lonhtmlcommon::row_closure(1)); |
} |
} |
|
|
if ($perm{'pav'}) { |
if ($perm{'pav'}) { |
Line 3119 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3324 CHOOSE_FROM_ANY_SEQUENCE
|
"</label>: </td><td>"); |
"</label>: </td><td>"); |
$startedTable = 1; |
$startedTable = 1; |
} else { |
} else { |
addMessage("<tr><td align='right'>". |
&addMessage(&Apache::lonhtmlcommon::row_title( |
'<label for="LATEX_TYPE_forminput">'. |
'<label for="LATEX_TYPE_forminput">' |
&mt('LaTeX mode'). |
.&mt('LaTeX mode') |
"</label>: </td><td>"); |
.'</label>' |
|
) |
|
); |
} |
} |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
Line 3138 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3345 CHOOSE_FROM_ANY_SEQUENCE
|
} |
} |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
|
|
addMessage("</td></tr><tr><td align='right'>". |
&addMessage(&Apache::lonhtmlcommon::row_closure() |
'<label for="TABLE_CONTENTS_forminput">'. |
.&Apache::lonhtmlcommon::row_title( |
&mt('Print Table of Contents'). |
'<label for="TABLE_CONTENTS_forminput">' |
"</label>: </td><td>"); |
.&mt('Print Table of Contents') |
|
.'</label>' |
|
) |
|
); |
$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 3149 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3359 CHOOSE_FROM_ANY_SEQUENCE
|
['No', 'no'], |
['No', 'no'], |
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
&addMessage(&Apache::lonhtmlcommon::row_closure()); |
|
|
if (not $helper->{VARS}->{'construction'}) { |
if (not $helper->{VARS}->{'construction'}) { |
addMessage("<tr><td align='right'>". |
&addMessage(&Apache::lonhtmlcommon::row_title( |
'<label for="TABLE_INDEX_forminput">'. |
'<label for="TABLE_INDEX_forminput">' |
&mt('Print Index'). |
.&mt('Print Index') |
"</label>: </td><td>"); |
.'</label>' |
|
) |
|
); |
$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 3163 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3375 CHOOSE_FROM_ANY_SEQUENCE
|
['No', 'no'], |
['No', 'no'], |
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
&addMessage(&Apache::lonhtmlcommon::row_closure()); |
addMessage("<tr><td align='right'>". |
&addMessage(&Apache::lonhtmlcommon::row_title( |
'<label for="PRINT_DISCUSSIONS_forminput">'. |
'<label for="PRINT_DISCUSSIONS_forminput">' |
&mt('Print Discussions'). |
.&mt('Print Discussions') |
"</label>: </td><td>"); |
.'</label>' |
|
) |
|
); |
$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 3175 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3389 CHOOSE_FROM_ANY_SEQUENCE
|
['No', 'no'], |
['No', 'no'], |
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
&addMessage(&Apache::lonhtmlcommon::row_closure()); |
|
|
# Prompt for printing annotations too. |
# Prompt for printing annotations too. |
|
|
addMessage("<tr><td align='right'>". |
&addMessage(&Apache::lonhtmlcommon::row_title( |
'<label for="PRINT_ANNOTATIONS_forminput">'. |
'<label for="PRINT_ANNOTATIONS_forminput">' |
&mt('Print Annotations'). |
.&mt('Print Annotations') |
"</label>:</td><td>"); |
.'</label>' |
|
) |
|
); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = "PRINT_ANNOTATIONS"; |
$paramHash->{'variable'} = "PRINT_ANNOTATIONS"; |
$helper->declareVar("PRINT_ANNOTATIONS"); |
$helper->declareVar("PRINT_ANNOTATIONS"); |
Line 3190 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3406 CHOOSE_FROM_ANY_SEQUENCE
|
['No', 'no'], |
['No', 'no'], |
['Yes', 'yes']]; |
['Yes', 'yes']]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
&addMessage(&Apache::lonhtmlcommon::row_closure()); |
|
|
addMessage("<tr><td align = 'right'> </td><td>"); |
&addMessage(&Apache::lonhtmlcommon::row_title(&mt('Foils'))); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'multichoice'} = "true"; |
$paramHash->{'multichoice'} = "true"; |
$paramHash->{'allowempty'} = "true"; |
$paramHash->{'allowempty'} = "true"; |
$paramHash->{'variable'} = "showallfoils"; |
$paramHash->{'variable'} = "showallfoils"; |
$paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ]; |
$paramHash->{'CHOICES'} = [ [&mt('Show All Foils'), "1"] ]; |
Apache::lonhelper::choices->new(); |
Apache::lonhelper::choices->new(); |
addMessage("</td></tr>"); |
&addMessage(&Apache::lonhtmlcommon::row_closure(1)); |
} |
} |
|
|
if ($helper->{'VARS'}->{'construction'}) { |
if ($helper->{'VARS'}->{'construction'}) { |
Line 3208 CHOOSE_FROM_ANY_SEQUENCE
|
Line 3424 CHOOSE_FROM_ANY_SEQUENCE
|
my $stylefiletext=&mt("Use style file"); |
my $stylefiletext=&mt("Use style file"); |
my $selectfiletext=&mt("Select style file"); |
my $selectfiletext=&mt("Select style file"); |
|
|
my $xmlfrag .= <<"RNDSEED"; |
my $xmlfrag .= '<message>' |
<message><tr><td align='right'> |
.&Apache::lonhtmlcommon::row_title('<label for="curseed_forminput">' |
<label for="curseed_forminput">$randseedtext</label>: |
.$randseedtext |
</td><td></message> |
.'</label>' |
<string variable="curseed" size="15" maxlength="15"> |
) |
<defaultvalue> |
.'</message> |
return $helper->{VARS}->{'curseed'}; |
<string variable="curseed" size="15" maxlength="15"> |
</defaultvalue> |
<defaultvalue> |
</string> |
return '.$helper->{VARS}->{'curseed'}.'; |
<message></td></tr><tr><td align="right"> |
</defaultvalue>' |
<label for="style_file">$stylefiletext</label>: |
.'</string>' |
</td><td></message> |
.'<message>' |
|
.&Apache::lonhtmlcommon::row_closure() |
|
.&Apache::lonhtmlcommon::row_title('<label for="style_file">' |
|
.$stylefiletext |
|
.'</label>' |
|
) |
|
.'</message> |
<string variable="style_file" size="40"> |
<string variable="style_file" size="40"> |
<defaultvalue> |
<defaultvalue> |
return $stylevalue; |
return '.$stylevalue.'; |
</defaultvalue> |
</defaultvalue> |
</string><message> <a href="javascript:openbrowser('helpform','style_file_forminput','sty')">$selectfiletext</a> </td></tr><tr><td></td><td align="left"></message> |
</string><message> ' |
|
.qq|<a href="javascript:openbrowser('helpform','style_file_forminput','sty')">| |
|
.$selectfiletext.'</a>' |
|
.&Apache::lonhtmlcommon::row_closure() |
|
.&Apache::lonhtmlcommon::row_title(&mt('Show All Foils')) |
|
.'</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"> </choice> |
</choices> |
</choices>' |
<message></td></tr></message> |
.'<message>' |
RNDSEED |
.&Apache::lonhtmlcommon::row_closure() |
|
.'</message>'; |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
|
|
|
|
addMessage("<tr><td>Problem Type:</td><td>"); |
&addMessage(&Apache::lonhtmlcommon::row_title(&mt('Problem Type'))); |
# |
# |
# Initial value from construction space: |
# Initial value from construction space: |
# |
# |
Line 3251 RNDSEED
|
Line 3479 RNDSEED
|
</dropdown> |
</dropdown> |
PROBTYPE |
PROBTYPE |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
|
&addMessage(&Apache::lonhtmlcommon::row_closure(1)); |
addMessage("</td></tr>"); |
|
|
|
} |
|
|
|
|
} |
} |
} |
|
|
|
|
|
|
|
|
if ($startedTable) { |
if ($startedTable) { |
addMessage("</table>"); |
&addMessage(&Apache::lonhtmlcommon::end_pick_box()); |
} |
} |
|
|
Apache::lonprintout::page_format_state->new("FORMAT"); |
Apache::lonprintout::page_format_state->new("FORMAT"); |
Line 3360 sub render {
|
Line 3589 sub render {
|
my $PaperType=&mt('Paper type'); |
my $PaperType=&mt('Paper type'); |
my $landscape=&mt('Landscape'); |
my $landscape=&mt('Landscape'); |
my $portrait=&mt('Portrait'); |
my $portrait=&mt('Portrait'); |
$result .= <<STATEHTML; |
my $pdfFormLabel=&mt('PDF-Formfields'); |
|
my $with=&mt('with Formfields'); |
|
my $without=&mt('without Formfields'); |
|
|
|
|
<hr width="33%" /> |
$result.='<h3>'.&mt('Layout Options').'</h3>' |
<table cellpadding="3"> |
.&Apache::loncommon::start_data_table() |
<tr> |
.&Apache::loncommon::start_data_table_header_row() |
<td align="center"><b>$PageLayout</b></td> |
.'<th>'.$PageLayout.'</th>' |
<td align="center"><b>$NumberOfColumns</b></td> |
.'<th>'.$NumberOfColumns.'</th>' |
<td align="center"><b>$PaperType</b></td> |
.'<th>'.$PaperType.'</th>' |
</tr> |
.'<th>'.$pdfFormLabel.'</th>' |
<tr> |
.&Apache::loncommon::end_data_table_header_row() |
<td> |
.&Apache::loncommon::start_data_table_row() |
<label><input type="radio" name="${var}.layout" value="L" /> $landscape </label><br /> |
.'<td>' |
<label><input type="radio" name="${var}.layout" value="P" checked='1' /> $portrait </label> |
.'<label><input type="radio" name="'.${var}.'.layout" value="L" />'.$landscape.'</label><br />' |
</td> |
.'<label><input type="radio" name="'.${var}.'.layout" value="P" checked="checked" />'.$portrait.'</label>' |
<td align="center"> |
.'</td>'; |
<select name="${var}.cols"> |
|
STATEHTML |
$result.='<td align="center">' |
|
.'<select name="'.${var}.'.cols">'; |
|
|
my $i; |
my $i; |
for ($i = 1; $i <= $maxColumns; $i++) { |
for ($i = 1; $i <= $maxColumns; $i++) { |
if ($i == 2) { |
if ($i == 2) { |
$result .= "<option value='$i' selected>$i</option>\n"; |
$result .= '<option value="'.$i.'" selected="selected">'.$i.'</option>'."\n"; |
} else { |
} else { |
$result .= "<option value='$i'>$i</option>\n"; |
$result .= '<option value="'.$i.'">'.$i.'</option>'."\n"; |
} |
} |
} |
} |
|
|
Line 3399 STATEHTML
|
Line 3632 STATEHTML
|
$_=~/(\w+)/; |
$_=~/(\w+)/; |
my $papersize=$1; |
my $papersize=$1; |
if ($paperSize[$i]=~/$DefaultPaperSize/) { |
if ($paperSize[$i]=~/$DefaultPaperSize/) { |
$result .= "<option selected value='$papersize'>" . $paperSize[$i] . "</option>\n"; |
$result .= '<option selected="selected" value="'.$papersize.'">'.$paperSize[$i].'</option>'."\n"; |
} else { |
} else { |
$result .= "<option value='$papersize'>" . $paperSize[$i] . "</option>\n"; |
$result .= '<option value="'.$papersize.'">'.$paperSize[$i].'</option>'."\n"; |
} |
} |
$i++; |
$i++; |
} |
} |
$result .= "</select></td></tr></table>"; |
$result .= <<HTML; |
|
</select> |
|
</td> |
|
<td align='center'> |
|
<select name='${var}.pdfFormFields'> |
|
<option selected="selected" value="no">$without</option> |
|
<option value="yes">$with</option> |
|
</select> |
|
</td> |
|
HTML |
|
$result.=&Apache::loncommon::end_data_table_row() |
|
.&Apache::loncommon::end_data_table(); |
|
|
return $result; |
return $result; |
} |
} |
|
|
Line 3416 sub postprocess {
|
Line 3661 sub postprocess {
|
my $helper = Apache::lonhelper->getHelper(); |
my $helper = Apache::lonhelper->getHelper(); |
$helper->{VARS}->{$var} = |
$helper->{VARS}->{$var} = |
$env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' . |
$env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' . |
$env{"form.$var.paper"}; |
$env{"form.$var.paper"} . '|' . $env{"form.$var.pdfFormFields"}; |
return 1; |
return 1; |
} |
} |
|
|
Line 3528 sub render {
|
Line 3773 sub render {
|
} else { |
} else { |
$size{'margin'} += 2.54; |
$size{'margin'} += 2.54; |
} |
} |
my %text = ('format' => 'How should each column be formatted?', |
my %lt = &Apache::lonlocal::texthash( |
'width' => 'Width:', |
'format' => 'How should each column be formatted?', |
'height' => 'Height:', |
'width' => 'Width', |
'margin' => 'Left Margin:',); |
'height' => 'Height', |
%text = &Apache::lonlocal::texthash(%text); |
'margin' => 'Left Margin' |
|
); |
$result .= <<ELEMENTHTML; |
|
|
$result .= '<p>'.$lt{'format'}.'</p>' |
<p>$text{'format'}</p> |
.&Apache::lonhtmlcommon::start_pick_box() |
|
.&Apache::lonhtmlcommon::row_title($lt{'width'}) |
<table cellpadding='3'> |
.'<input type="text" name="'.$var.'.width" value="'.$size{'width'}.'" size="4" />' |
<tr> |
.'<select name="'.$var.'.widthunit">' |
<td align='right'><b>$text{'width'}</b></td> |
.$size{'width_options'} |
<td align='left'><input type='text' name='$var.width' value="$size{'width'}" size='4' /></td> |
.'</select>' |
<td align='left'> |
.&Apache::lonhtmlcommon::row_closure() |
<select name='$var.widthunit'> |
.&Apache::lonhtmlcommon::row_title($lt{'height'}) |
$size{'width_options'} |
.'<input type="text" name="'.$var.'.height" value="'.$size{'height'}.'" size="4" />' |
</select> |
.'<select name="'.$var.'.heightunit">' |
</td> |
.$size{'height_options'} |
</tr> |
.'</select>' |
<tr> |
.&Apache::lonhtmlcommon::row_closure() |
<td align='right'><b>$text{'height'}</b></td> |
.&Apache::lonhtmlcommon::row_title($lt{'margin'}) |
<td align='left'><input type='text' name="$var.height" value="$size{'height'}" size='4' /></td> |
.'<input type="text" name="'.$var.'.lmargin" value="'.$size{'margin'}.'" size="4" />' |
<td align='left'> |
.'<select name="'.$var.'.lmarginunit">' |
<select name='$var.heightunit'> |
.$size{'margin_options'} |
$size{'height_options'} |
.'</select>' |
</select> |
.&Apache::lonhtmlcommon::row_closure(1) |
</td> |
.&Apache::lonhtmlcommon::end_pick_box(); |
</tr> |
# <p>Hint: Some instructors like to leave scratch space for the student by |
<tr> |
# making the width much smaller than the width of the page.</p> |
<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'> |
|
<select name='$var.lmarginunit'> |
|
$size{'margin_options'} |
|
</select> |
|
</td> |
|
</tr> |
|
</table> |
|
|
|
<!--<p>Hint: Some instructors like to leave scratch space for the student by |
|
making the width much smaller than the width of the page.</p>--> |
|
|
|
ELEMENTHTML |
|
|
|
return $result; |
return $result; |
} |
} |