version 1.398, 2005/11/05 18:42:11
|
version 1.509, 2007/09/08 23:41:49
|
Line 1
|
Line 1
|
|
# |
# The LearningOnline Network |
# The LearningOnline Network |
# Printout |
# Printout |
# |
# |
Line 22
|
Line 23
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
# |
# |
# /home/httpd/html/adm/gpl.txt |
# /home/httpd/html/adm/gpl.txt |
# |
|
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# |
# |
Line 38 use Apache::grades;
|
Line 38 use Apache::grades;
|
use Apache::edit; |
use Apache::edit; |
use Apache::File(); |
use Apache::File(); |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use Apache::lonratedt; |
use LONCAPA::map(); |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Carp; |
|
use LONCAPA; |
|
|
my %perm; |
my %perm; |
|
my %parmhash; |
|
my $resources_printed; |
|
|
|
# Fetch the contents of a resource, uninterpreted. |
|
# This is used here to fetch a latex file to be included |
|
# verbatim into the printout< |
|
# NOTE: Ask Guy if there is a lonnet function similar to this? |
|
# |
|
# Parameters: |
|
# URL of the file |
|
# |
|
sub fetch_raw_resource { |
|
my ($url) = @_; |
|
|
|
my $filename = &Apache::lonnet::filelocation("", $url); |
|
my $contents = &Apache::lonnet::getfile($filename); |
|
|
|
if ($contents == -1) { |
|
return "File open failed for $filename"; # This will bomb the print. |
|
} |
|
return $contents; |
|
|
|
|
|
} |
|
|
|
# |
|
# printf_style_subst item format_string repl |
|
# |
|
# Does printf style substitution for a format string that |
|
# can have %[n]item in it.. wherever, %[n]item occurs, |
|
# rep is substituted in format_string. Note that |
|
# [n] is an optional integer length. If provided, |
|
# repl is truncated to at most [n] characters prior to |
|
# substitution. |
|
# |
|
sub printf_style_subst { |
|
my ($item, $format_string, $repl) = @_; |
|
my $result = ""; |
|
while ($format_string =~ /(%)(\d*)\Q$item\E/g ) { |
|
my $fmt = $1; |
|
my $size = $2; |
|
my $subst = $repl; |
|
if ($size ne "") { |
|
$subst = substr($subst, 0, $size); |
|
|
|
# Here's a nice edge case.. supose the end of the |
|
# substring is a \. In that case may have just |
|
# chopped off a TeX escape... in that case, we append |
|
# " " for the trailing character, and let the field |
|
# spill over a bit (sigh). |
|
# We don't just chop off the last character in order to deal |
|
# with one last pathology, and that would be if substr had |
|
# trimmed us to e.g. \\\ |
|
|
|
|
|
if ($subst =~ /\\$/) { |
|
$subst .= " "; |
|
} |
|
} |
|
my $item_pos = pos($format_string); |
|
$result .= substr($format_string, 0, $item_pos - length($size) -2) . $subst; |
|
$format_string = substr($format_string, pos($format_string)); |
|
} |
|
|
|
# Put the residual format string into the result: |
|
|
|
$result .= $format_string; |
|
|
|
return $result; |
|
} |
|
|
|
|
|
# Format a header according to a format. |
|
# |
|
|
|
# Substitutions: |
|
# %a - Assignment name. |
|
# %c - Course name. |
|
# %n - Student name. |
|
# |
|
sub format_page_header { |
|
my ($width, $format, $assignment, $course, $student) = @_; |
|
|
|
$width = &recalcto_mm($width); # Get width in mm. |
|
# Default format? |
|
|
|
if ($format eq '') { |
|
# For the default format, we may need to truncate |
|
# elements.. To do this we need to get the page width. |
|
# we assume that each character is about 2mm in width. |
|
# (correct for the header text size??). We ignore |
|
# any formatting (e.g. boldfacing in this). |
|
# |
|
# - Allow the student/course to be one line. |
|
# but only truncate the course. |
|
# - Allow the assignment to be 2 lines (wrapped). |
|
# |
|
my $chars_per_line = $width/2; # Character/textline. |
|
|
|
|
|
my $firstline = "$student $course"; |
|
if (length($firstline) > $chars_per_line) { |
|
my $lastchar = $chars_per_line - length($student) - 1; |
|
if ($lastchar > 0) { |
|
$course = substr($course, 0, $lastchar); |
|
} else { # Nothing left of course: |
|
$course = ''; |
|
} |
|
} |
|
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!!! |
|
|
|
|
|
} |
|
|
|
|
|
return $format; |
|
|
|
} |
|
|
# |
# |
# Convert a numeric code to letters |
# Convert a numeric code to letters |
Line 60 sub num_to_letters {
|
Line 197 sub num_to_letters {
|
sub letters_to_num { |
sub letters_to_num { |
my ($letters) = @_; |
my ($letters) = @_; |
my @letters = split('', uc($letters)); |
my @letters = split('', uc($letters)); |
my %substitution; |
my %substitution; |
my $digit = 0; |
my $digit = 0; |
foreach my $letter ('A'..'J') { |
foreach my $letter ('A'..'J') { |
$substitution{$letter} = $digit; |
$substitution{$letter} = $digit; |
Line 226 sub latex_header_footer_remove {
|
Line 363 sub latex_header_footer_remove {
|
$text =~ s/\\documentclass([^&]*)\\begin{document}//; |
$text =~ s/\\documentclass([^&]*)\\begin{document}//; |
return $text; |
return $text; |
} |
} |
|
# |
|
# If necessary, encapsulate text inside |
|
# a minipage env. |
|
# necessity is determined by the problem_split param. |
|
# |
|
sub encapsulate_minipage { |
|
my ($text) = @_; |
|
if (!($env{'form.problem.split'} =~ /yes/i)) { |
|
$text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}'; |
|
} |
|
return $text; |
|
} |
|
# |
|
# The NUMBER_TO_PRINT and SPLIT_PDFS |
|
# variables interact, this sub looks at these two parameters |
|
# and comes up with a final value for NUMBER_TO_PRINT which can be: |
|
# all - if SPLIT_PDFS eq 'all'. |
|
# 1 - if SPLIT_PDFS eq 'oneper' |
|
# section - if SPLIT_PDFS eq 'sections' |
|
# <unchanged> - if SPLIT_PDFS eq 'usenumber' |
|
# |
|
sub adjust_number_to_print { |
|
my $helper = shift; |
|
|
|
my $split_pdf = $helper->{'VARS'}->{'SPLIT_PDFS'}; |
|
|
|
if ($split_pdf eq 'all') { |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'all'; |
|
} elsif ($split_pdf eq 'oneper') { |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 1; |
|
} elsif ($split_pdf eq 'sections') { |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'section'; |
|
} elsif ($split_pdf eq 'usenumber') { |
|
# Unmodified. |
|
} else { |
|
# Error!!!! |
|
|
|
croak "bad SPLIT_PDFS: $split_pdf in lonprintout::adjust_number_to_print"; |
|
} |
|
} |
|
|
sub character_chart { |
sub character_chart { |
my $result = shift; |
my $result = shift; |
Line 336 sub character_chart {
|
Line 512 sub character_chart {
|
$result =~ s/&\#147;/\`\`/g; |
$result =~ s/&\#147;/\`\`/g; |
$result =~ s/&\#148;/\'\'/g; |
$result =~ s/&\#148;/\'\'/g; |
$result =~ s/&\#149;/\\ensuremath\{\\bullet\}/g; |
$result =~ s/&\#149;/\\ensuremath\{\\bullet\}/g; |
$result =~ s/&\#150;/--/g; |
$result =~ s/&(\#150|\#8211);/--/g; |
$result =~ s/&\#151;/---/g; |
$result =~ s/&\#151;/---/g; |
$result =~ s/&\#152;/\\ensuremath\{\\sim\}/g; |
$result =~ s/&\#152;/\\ensuremath\{\\sim\}/g; |
$result =~ s/&\#153;/\\texttrademark /g; |
$result =~ s/&\#153;/\\texttrademark /g; |
Line 433 sub character_chart {
|
Line 609 sub character_chart {
|
$result =~ s/&(\#252|uuml);/\\\"{u}/g; |
$result =~ s/&(\#252|uuml);/\\\"{u}/g; |
$result =~ s/&(\#253|yacute);/\\\'{y}/g; |
$result =~ s/&(\#253|yacute);/\\\'{y}/g; |
$result =~ s/&(\#255|yuml);/\\\"{y}/g; |
$result =~ s/&(\#255|yuml);/\\\"{y}/g; |
|
$result =~ s/&\#295;/\\ensuremath\{\\hbar\}/g; |
$result =~ s/&\#952;/\\ensuremath\{\\theta\}/g; |
$result =~ s/&\#952;/\\ensuremath\{\\theta\}/g; |
#Greek Alphabet |
#Greek Alphabet |
$result =~ s/&(alpha|\#945);/\\ensuremath\{\\alpha\}/g; |
$result =~ s/&(alpha|\#945);/\\ensuremath\{\\alpha\}/g; |
Line 542 sub character_chart {
|
Line 719 sub character_chart {
|
$result =~ s/&(clubs|\#9827);/\\ensuremath\{\\clubsuit\}/g; |
$result =~ s/&(clubs|\#9827);/\\ensuremath\{\\clubsuit\}/g; |
$result =~ s/&(hearts|\#9829);/\\ensuremath\{\\heartsuit\}/g; |
$result =~ s/&(hearts|\#9829);/\\ensuremath\{\\heartsuit\}/g; |
$result =~ s/&(diams|\#9830);/\\ensuremath\{\\diamondsuit\}/g; |
$result =~ s/&(diams|\#9830);/\\ensuremath\{\\diamondsuit\}/g; |
|
# Chemically useful 'things' contributed by Hon Kie (bug 4652). |
|
$result =~ s/&\#8636;/\\ensuremath\{\\leftharpoonup\}/g; |
|
$result =~ s/&\#8637;/\\ensuremath\{\\leftharpoondown\}/g; |
|
$result =~ s/&\#8640;/\\ensuremath\{\\rightharpoonup\}/g; |
|
$result =~ s/&\#8641;/\\ensuremath\{\\rightharpoondown\}/g; |
|
$result =~ s/&\#8652;/\\ensuremath\{\\rightleftharpoons\}/g; |
|
$result =~ s/&\#8605;/\\ensuremath\{\\leadsto\}/g; |
|
$result =~ s/&\#8617;/\\ensuremath\{\\hookleftarrow\}/g; |
|
$result =~ s/&\#8618;/\\ensuremath\{\\hookrightarrow\}/g; |
|
$result =~ s/&\#8614;/\\ensuremath\{\\mapsto\}/g; |
|
$result =~ s/&\#8599;/\\ensuremath\{\\nearrow\}/g; |
|
$result =~ s/&\#8600;/\\ensuremath\{\\searrow\}/g; |
|
$result =~ s/&\#8601;/\\ensuremath\{\\swarrow\}/g; |
|
$result =~ s/&\#8598;/\\ensuremath\{\\nwarrow\}/g; |
return $result; |
return $result; |
} |
} |
|
|
Line 550 sub character_chart {
|
Line 741 sub character_chart {
|
my %page_formats= |
my %page_formats= |
('letter' => { |
('letter' => { |
'book' => { |
'book' => { |
'1' => [ '7.1 in','9.8 in', '-0.57 in','-0.57 in','0.7 cm'], |
'1' => [ '7.1 in','9.8 in', '-0.57 in','-0.57 in','0.275 in'], |
'2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','0.7 cm'] |
'2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','0.275 in'] |
}, |
}, |
'album' => { |
'album' => { |
'1' => [ '8.8 in', '6.8 in','-40 pt in', '-60 pt','1 cm'], |
'1' => [ '8.8 in', '6.8 in','-0.55 in', '-0.55 in','0.394 in'], |
'2' => [ '4.4 in', '6.8 in','-0.5 in', '-1.5 in','3.5 in'] |
'2' => [ '4.8 in', '6.8 in','-0.5 in', '-1.0 in','3.5 in'] |
}, |
}, |
}, |
}, |
'legal' => { |
'legal' => { |
Line 610 my %page_formats=
|
Line 801 my %page_formats=
|
}, |
}, |
'a4' => { |
'a4' => { |
'book' => { |
'book' => { |
'1' => ['176 mm','272 mm','-40 pt in','-60 pt','-0.5 in'], |
'1' => ['17.6 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm'], |
'2' => [ '91 mm','272 mm','-40 pt in','-60 pt','-0.5 in'] |
'2' => [ '9.1 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm'] |
}, |
}, |
'album' => { |
'album' => { |
'1' => ['8.5 in','7.7 in','-40 pt in','-60 pt','0 in'], |
'1' => ['21.59 cm','19.558 cm','-1.397cm','-2.11 cm','0 cm'], |
'2' => ['3.9 in','7.7 in','-40 pt in','-60 pt','0 in'] |
'2' => ['9.91 cm','19.558 cm','-1.397 cm','-2.11 cm','0 cm'] |
}, |
}, |
}, |
}, |
'a5' => { |
'a5' => { |
Line 659 sub get_name {
|
Line 850 sub get_name {
|
if (!defined($udom)) { $udom=$env{'user.domain'}; } |
if (!defined($udom)) { $udom=$env{'user.domain'}; } |
my $plainname=&Apache::loncommon::plainname($uname,$udom); |
my $plainname=&Apache::loncommon::plainname($uname,$udom); |
if ($plainname=~/^\s*$/) { $plainname=$uname.'@'.$udom; } |
if ($plainname=~/^\s*$/) { $plainname=$uname.'@'.$udom; } |
$plainname=&Apache::lonxml::latex_special_symbols($plainname,'header'); |
$plainname=&Apache::lonxml::latex_special_symbols($plainname,'header'); |
return $plainname; |
return $plainname; |
} |
} |
|
|
sub get_course { |
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(&Apache::lonnet::unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); |
$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); |
} |
} |
return $courseidinfo; |
return $courseidinfo; |
} |
} |
Line 674 sub get_course {
|
Line 865 sub get_course {
|
sub page_format_transformation { |
sub page_format_transformation { |
my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents,$indexlist,$selectionmade) = @_; |
my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents,$indexlist,$selectionmade) = @_; |
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'); |
} |
} |
($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin); |
($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin); |
|
|
|
|
my $name = &get_name(); |
my $name = &get_name(); |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
|
my $header_text = $parmhash{'print_header_format'}; |
|
$header_text = &format_page_header($textwidth, $header_text, $assignment, |
|
$courseidinfo, $name); |
my $topmargintoinsert = ''; |
my $topmargintoinsert = ''; |
if ($topmargin ne '0') {$topmargintoinsert='\setlength{\topmargin}{'.$topmargin.'}';} |
if ($topmargin ne '0') {$topmargintoinsert='\setlength{\topmargin}{'.$topmargin.'}';} |
my $fancypagestatement=''; |
my $fancypagestatement=''; |
if ($numberofcolumns eq '2') { |
if ($numberofcolumns eq '2') { |
$fancypagestatement="\\fancyhead{}\\fancyhead[LO]{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}"; |
$fancypagestatement="\\fancyhead{}\\fancyhead[LO]{$header_text}"; |
} else { |
} else { |
$fancypagestatement="\\rhead{}\\chead{}\\lhead{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}"; |
$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\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; |
Line 732 sub details_for_menu {
|
Line 933 sub details_for_menu {
|
if (!$postdata) { $postdata=$helper->{VARS}{'postdata'}; } |
if (!$postdata) { $postdata=$helper->{VARS}{'postdata'}; } |
my $name_of_resource = &Apache::lonnet::gettitle($postdata); |
my $name_of_resource = &Apache::lonnet::gettitle($postdata); |
my $symbolic = &Apache::lonnet::symbread($postdata); |
my $symbolic = &Apache::lonnet::symbread($postdata); |
|
return if ( $symbolic eq ''); |
|
|
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($symbolic); |
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($symbolic); |
$map=&Apache::lonnet::clutter($map); |
$map=&Apache::lonnet::clutter($map); |
my $name_of_sequence = &Apache::lonnet::gettitle($map); |
my $name_of_sequence = &Apache::lonnet::gettitle($map); |
Line 747 sub details_for_menu {
|
Line 950 sub details_for_menu {
|
return ($name_of_resource,$name_of_sequence,$name_of_map); |
return ($name_of_resource,$name_of_sequence,$name_of_map); |
} |
} |
|
|
|
sub copyright_line { |
|
return '\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\vspace*{-2 mm}\newline\noindent{\tiny Printed from LON-CAPA\copyright MSU{\hfill} Licensed under GNU General Public License } '; |
|
} |
|
my $end_of_student = "\n".'\special{ps:ENDOFSTUDENTSTAMP}'."\n"; |
|
|
sub latex_corrections { |
sub latex_corrections { |
|
my ($number_of_columns,$result,$selectionmade,$answer_mode) = @_; |
my ($number_of_columns,$result,$selectionmade) = @_; |
|
|
|
# $result =~ s/\\includegraphics{/\\includegraphics\[width=\\minipagewidth\]{/g; |
# $result =~ s/\\includegraphics{/\\includegraphics\[width=\\minipagewidth\]{/g; |
$result =~ s/\$number_of_columns/$number_of_columns/g; |
my $copyright = ©right_line(); |
if ($selectionmade ne '1') { |
if ($selectionmade eq '1' || $answer_mode eq 'only') { |
$result =~ s/(\\end{document})/\\strut\\vspace\*{-4 mm}\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill}\\newline\\noindent\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License $1/; |
$result =~ s/(\\end{document})/\\strut\\vskip 0 mm $copyright $end_of_student $1/; |
} else { |
} else { |
$result =~ s/(\\end{document})/\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill}\\newline\\noindent\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License $1/; |
$result =~ s/(\\end{document})/\\strut\\vspace\*{-4 mm}\\newline $copyright $end_of_student $1/; |
} |
} |
|
$result =~ s/\$number_of_columns/$number_of_columns/g; |
$result =~ s/(\\end{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill})/$2$1/g; |
$result =~ s/(\\end{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill})/$2$1/g; |
$result =~ s/(\\end{longtable}\s*)\\strut\\newline/$1/g; |
$result =~ s/(\\end{longtable}\s*)\\strut\\newline/$1/g; |
#-- LaTeX corrections |
#-- LaTeX corrections |
Line 781 sub latex_corrections {
|
Line 987 sub latex_corrections {
|
} |
} |
$result =~ s/(\\end{tabular})\s*\\vskip 0 mm/$1/g; |
$result =~ s/(\\end{tabular})\s*\\vskip 0 mm/$1/g; |
$result =~ s/(\\begin{enumerate})\s*\\noindent/$1/g; |
$result =~ s/(\\begin{enumerate})\s*\\noindent/$1/g; |
|
|
return $result; |
return $result; |
} |
} |
|
|
Line 816 sub IndexCreation {
|
Line 1021 sub IndexCreation {
|
|
|
sub print_latex_header { |
sub print_latex_header { |
my $mode=shift; |
my $mode=shift; |
my $output='\documentclass[letterpaper]{article}'; |
my $output='\documentclass[letterpaper,twoside]{article}\raggedbottom'; |
if (($mode eq 'batchmode') || (!$perm{'pav'})) { |
if (($mode eq 'batchmode') || (!$perm{'pav'})) { |
$output.='\batchmode'; |
$output.='\batchmode'; |
} |
} |
$output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n". |
$output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n". |
|
'\usepackage{multirow}'."\n". |
'\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n". |
'\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n". |
'\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n". |
'\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n". |
'\usepackage{wrapfig}'. |
'\usepackage{wrapfig}'. |
Line 843 sub print_latex_header {
|
Line 1049 sub print_latex_header {
|
|
|
sub path_to_problem { |
sub path_to_problem { |
my ($urlp,$colwidth)=@_; |
my ($urlp,$colwidth)=@_; |
|
$urlp=&Apache::lonnet::clutter($urlp); |
|
|
my $newurlp = ''; |
my $newurlp = ''; |
$colwidth=~s/\s*mm\s*$//; |
$colwidth=~s/\s*mm\s*$//; |
#characters average about 2 mm in width |
#characters average about 2 mm in width |
if (length($urlp)*2 > $colwidth) { |
if (length($urlp)*2 > $colwidth) { |
my @elements = split '/',$urlp; |
my @elements = split('/',$urlp); |
my $curlength=0; |
my $curlength=0; |
foreach my $element (@elements) { |
foreach my $element (@elements) { |
|
if ($element eq '') { next; } |
if ($curlength+(length($element)*2) > $colwidth) { |
if ($curlength+(length($element)*2) > $colwidth) { |
$newurlp .= '|\vskip -1 mm \noindent \verb|'; |
$newurlp .= '|\vskip -1 mm \verb|'; |
$curlength=0; |
$curlength=length($element)*2; |
} else { |
} else { |
$curlength+=length($element)*2; |
$curlength+=length($element)*2; |
} |
} |
Line 891 sub get_textwidth {
|
Line 1100 sub get_textwidth {
|
|
|
|
|
sub unsupported { |
sub unsupported { |
my ($currentURL,$mode)=@_; |
my ($currentURL,$mode,$symb)=@_; |
if ($mode ne '') {$mode='\\'.$mode} |
if ($mode ne '') {$mode='\\'.$mode} |
my $result.= &print_latex_header($mode); |
my $result.= &print_latex_header($mode); |
if ($currentURL=~/\/ext\//) { |
if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { |
$result.=' \strut \\\\ THIS IS EXTERNAL RESOURCE WITH URL \strut \\\\ '.$currentURL.' '; |
$currentURL=~s|^(/adm/wrapper/)?ext/|http://|; |
|
my $title=&Apache::lonnet::gettitle($symb); |
|
$title = &Apache::lonxml::latex_special_symbols($title); |
|
$result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' '; |
} else { |
} else { |
$result.=$currentURL; |
$result.=$currentURL; |
} |
} |
Line 907 sub unsupported {
|
Line 1119 sub unsupported {
|
# |
# |
# List of recently generated print files |
# List of recently generated print files |
# |
# |
|
|
sub recently_generated { |
sub recently_generated { |
my $r=shift; |
my $r=shift; |
my $prtspool=$r->dir_config('lonPrtDir'); |
my $prtspool=$r->dir_config('lonPrtDir'); |
my $result; |
my $zip_result; |
|
my $pdf_result; |
opendir(DIR,$prtspool); |
opendir(DIR,$prtspool); |
while (my $filename=readdir(DIR)) { |
|
if ($filename=~/^$env{'user.name'}\_$env{'user.domain'}\_printout\_(\d+)\_.*.pdf$/) { |
my @files = |
my ($cdev,$cino,$cmode,$cnlink, |
grep(/^$env{'user.name'}_$env{'user.domain'}_printout_(\d+)_.*\.(pdf|zip)$/,readdir(DIR)); |
$cuid,$cgid,$crdev,$csize, |
|
$catime,$cmtime,$cctime, |
|
$cblksize,$cblocks)=stat($prtspool.'/'.$filename); |
|
$result.="<a href='/prtspool/$filename'>". |
|
&mt('Generated [_1] ([_2] bytes)', |
|
&Apache::lonlocal::locallocaltime($cctime),$csize). |
|
'</a><br />'; |
|
} |
|
} |
|
closedir(DIR); |
closedir(DIR); |
if ($result) { |
|
$r->print('<h4>'.&mt('Recently generated printouts').'</h4>'."\n". |
@files = sort { |
$result); |
my ($actime) = (stat($prtspool.'/'.$a))[10]; |
|
my ($bctime) = (stat($prtspool.'/'.$b))[10]; |
|
return $bctime <=> $actime; |
|
} (@files); |
|
|
|
foreach my $filename (@files) { |
|
my ($ext) = ($filename =~ m/(pdf|zip)$/); |
|
my ($cdev,$cino,$cmode,$cnlink, |
|
$cuid,$cgid,$crdev,$csize, |
|
$catime,$cmtime,$cctime, |
|
$cblksize,$cblocks)=stat($prtspool.'/'.$filename); |
|
my $result="<a href='/prtspool/$filename'>". |
|
&mt('Generated [_1] ([_2] bytes)', |
|
&Apache::lonlocal::locallocaltime($cctime),$csize). |
|
'</a><br />'; |
|
if ($ext eq 'pdf') { $pdf_result .= $result; } |
|
if ($ext eq 'zip') { $zip_result .= $result; } |
|
} |
|
if ($zip_result) { |
|
$r->print('<h4>'.&mt('Recently generated printout zip files')."</h4>\n" |
|
.$zip_result); |
|
} |
|
if ($pdf_result) { |
|
$r->print('<h4>'.&mt('Recently generated printouts')."</h4>\n" |
|
.$pdf_result); |
} |
} |
} |
} |
|
|
Line 941 sub recently_generated {
|
Line 1168 sub recently_generated {
|
# A reference to a page break hash. |
# A reference to a page break hash. |
# |
# |
# |
# |
|
#use Data::Dumper; |
|
#sub dump_helper_vars { |
|
# my ($helper) = @_; |
|
# my $helpervars = Dumper($helper->{'VARS'}); |
|
# &Apache::lonnet::logthis("Dump of helper vars:\n $helpervars"); |
|
#} |
|
|
sub get_page_breaks { |
sub get_page_breaks { |
my ($helper) = @_; |
my ($helper) = @_; |
my %page_breaks; |
my %page_breaks; |
|
|
foreach my $break (split /\|\|\|/, $helper->{'VARS'}->{'FINISHPAGE'}) { |
foreach my $break (split /\|\|\|/, $helper->{'VARS'}->{'FINISHPAGE'}) { |
$page_breaks{$break} = 1; |
$page_breaks{$break} = 1; |
} |
} |
|
|
return %page_breaks; |
return %page_breaks; |
} |
} |
|
|
|
# Output a sequence (recursively if neeed) |
|
# from construction space. |
|
# Parameters: |
|
# url = URL of the sequence to print. |
|
# helper - Reference to the helper hash. |
|
# form - Copy of the format hash. |
|
# LaTeXWidth |
|
# Returns: |
|
# Text to add to the printout. |
|
# NOTE if the first element of the outermost sequence |
|
# is itself a sequence, the outermost caller may need to |
|
# prefix the latex with the page headers stuff. |
|
# |
|
sub print_construction_sequence { |
|
my ($currentURL, $helper, %form, $LaTeXwidth) = @_; |
|
my $result; |
|
my $rndseed=time; |
|
if ($helper->{'VARS'}->{'curseed'}) { |
|
$rndseed=$helper->{'VARS'}->{'curseed'}; |
|
} |
|
my $errtext=&LONCAPA::map::mapread($currentURL); |
|
# |
|
# These make this all support recursing for subsequences. |
|
# |
|
my @order = @LONCAPA::map::order; |
|
my @resources = @LONCAPA::map::resources; |
|
for (my $member=0;$member<=$#order;$member++) { |
|
$resources[$order[$member]]=~/^([^:]*):([^:]*):/; |
|
my $urlp=$2; |
|
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) { |
|
my $texversion=''; |
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
|
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
|
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
|
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
|
$form{'rndseed'}=$rndseed; |
|
$resources_printed .=$urlp.':'; |
|
$texversion=&Apache::lonnet::ssi($urlp,%form); |
|
} |
|
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
|
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
|
($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) { |
|
# Don't permanently modify %$form... |
|
my %answerform = %form; |
|
$answerform{'grade_target'}='answer'; |
|
$answerform{'answer_output_mode'}='tex'; |
|
$answerform{'rndseed'}=$rndseed; |
|
$answerform{'problem_split'}=$parmhash{'problem_stream_switch'}; |
|
if ($urlp=~/\/res\//) {$env{'request.state'}='published';} |
|
$resources_printed .= $urlp.':'; |
|
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
|
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
|
} else { |
|
# If necessary, encapsulate answer in minipage: |
|
|
|
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
|
my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}); |
|
$title = &Apache::lonxml::latex_special_symbols($title); |
|
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
|
$body.=&path_to_problem($urlp,$LaTeXwidth); |
|
$body.='\vskip 1 mm '.$answer.'\end{document}'; |
|
$body = &encapsulate_minipage($body); |
|
$texversion.=$body; |
|
} |
|
} |
|
$texversion = &latex_header_footer_remove($texversion); |
|
|
|
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
|
$texversion=&IndexCreation($texversion,$urlp); |
|
} |
|
if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URL'} eq 'yes') { |
|
$texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$urlp| \\strut\\\\\\strut /; |
|
} |
|
$result.=$texversion; |
|
|
|
} elsif ($urlp=~/\.(sequence|page)$/) { |
|
|
|
# header: |
|
|
|
$result.='\strut\newline\noindent Sequence/page '.$urlp.'\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent '; |
|
|
|
# IF sequence, recurse: |
|
|
|
if ($urlp =~ /\.sequence$/) { |
|
my $sequence_url = $urlp; |
|
my $domain = $env{'user.domain'}; # Constr. space only on local |
|
my $user = $env{'user.name'}; |
|
|
|
$sequence_url =~ s/^\/res\/$domain/\/home/; |
|
$sequence_url =~ s/^(\/home\/$user)/$1\/public_html/; |
|
# $sequence_url =~ s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; |
|
$result .= &print_construction_sequence($sequence_url, |
|
$helper, %form, |
|
$LaTeXwidth); |
|
} |
|
} |
|
} |
|
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} |
|
return $result; |
|
} |
|
|
sub output_data { |
sub output_data { |
my ($r,$helper,$rparmhash) = @_; |
my ($r,$helper,$rparmhash) = @_; |
my %parmhash = %$rparmhash; |
my %parmhash = %$rparmhash; |
my $resources_printed = ''; |
$resources_printed = ''; |
my $html=&Apache::lonxml::xmlbegin(); |
my $do_postprocessing = 1; |
my $bodytag=&Apache::loncommon::bodytag('Preparing Printout'); |
my $js = <<ENDPART; |
$r->print(<<ENDPART); |
<script type="text/javascript"> |
$html |
|
<head> |
|
<script type="text/javascript" language="Javascript"> |
|
var editbrowser; |
var editbrowser; |
function openbrowser(formname,elementname,only,omit) { |
function openbrowser(formname,elementname,only,omit) { |
var url = '/res/?'; |
var url = '/res/?'; |
Line 986 $html
|
Line 1317 $html
|
editbrowser.focus(); |
editbrowser.focus(); |
} |
} |
</script> |
</script> |
<title>LON-CAPA output for printing</title> |
|
</head> |
|
$bodytag |
|
Please stand by while processing your print request, this may take some time ... |
|
ENDPART |
ENDPART |
|
|
|
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 ...'); |
|
|
|
$r->print($start_page."\n<p>\n$msg\n</p>\n"); |
|
|
# fetch the pagebreaks and store them in the course environment |
# fetch the pagebreaks and store them in the course environment |
# The page breaks will be pulled into the hash %page_breaks which is |
# The page breaks will be pulled into the hash %page_breaks which is |
Line 1041 ENDPART
|
Line 1371 ENDPART
|
if ($helper->{'VARS'}->{'showallfoils'} eq "1") { |
if ($helper->{'VARS'}->{'showallfoils'} eq "1") { |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
} |
} |
|
|
|
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
|
&Apache::lonnet::appenv('construct.style' => |
|
$helper->{'VARS'}->{'style_file'}); |
|
} elsif ($env{'construct.style'}) { |
|
&Apache::lonnet::delenv('construct\\.style'); |
|
} |
|
|
|
|
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') { |
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') { |
#-- single document - problem, page, html, xml, ... |
#-- single document - problem, page, html, xml, ... |
Line 1057 ENDPART
|
Line 1395 ENDPART
|
$cleanURL=$currentURL; |
$cleanURL=$currentURL; |
} |
} |
$selectionmade = 1; |
$selectionmade = 1; |
if ($cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
if ($cleanURL!~m|^/adm/| |
|
&& $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|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') { |
my %moreenv; |
my %moreenv; |
$moreenv{'request.filename'}=$cleanURL; |
$moreenv{'request.filename'}=$cleanURL; |
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
|
$moreenv{'construct.style'}=$helper->{'VARS'}->{'style_file'}; |
|
my $dom = $env{'user.domain'}; |
|
my $user = $env{'user.name'}; |
|
my $put_result = &Apache::lonnet::put('environment',{'construct.style'=>$helper->{'VARS'}->{'style_file'}},$dom,$user); |
|
} |
|
if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {$form{'problemtype'}='exam';} |
if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {$form{'problemtype'}='exam';} |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
Line 1080 ENDPART
|
Line 1413 ENDPART
|
} |
} |
$form{'rndseed'}=$rndseed; |
$form{'rndseed'}=$rndseed; |
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::delenv('form.counter'); |
|
&Apache::lonxml::init_counter(); |
&Apache::lonxml::clear_problem_counter(); |
|
|
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
$texversion.=&Apache::lonnet::ssi($currentURL,%form); |
$texversion.=&Apache::lonnet::ssi($currentURL,%form); |
&Apache::lonnet::delenv('form.counter'); |
|
|
&Apache::lonxml::clear_problem_counter(); |
|
|
&Apache::lonnet::delenv('request.filename'); |
&Apache::lonnet::delenv('request.filename'); |
} |
} |
|
# current document with answers.. no need to encap in minipage |
|
# since there's only one answer. |
|
|
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')) { |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'grade_target'}='answer'; |
$form{'grade_target'}='answer'; |
$form{'answer_output_mode'}='tex'; |
$form{'answer_output_mode'}='tex'; |
$form{'rndseed'}=$rndseed; |
$form{'rndseed'}=$rndseed; |
|
if ($helper->{'VARS'}->{'probstatus'} eq 'exam') { |
|
$form{'problemtype'}='exam'; |
|
} |
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
my $answer=&Apache::lonnet::ssi($currentURL,%form); |
my $answer=&Apache::lonnet::ssi($currentURL,%form); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
Line 1100 ENDPART
|
Line 1442 ENDPART
|
} else { |
} else { |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
$texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}).'}\vskip 0 mm '; |
my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}); |
|
$title = &Apache::lonxml::latex_special_symbols($title); |
|
$texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
$texversion.=&path_to_problem($cleanURL,$LaTeXwidth); |
$texversion.=&path_to_problem($cleanURL,$LaTeXwidth); |
} else { |
} else { |
$texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm '; |
$texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm '; |
my $URLpath=$cleanURL; |
my $URLpath=$cleanURL; |
$URLpath=~s/~([^\/]+)/public_html\/$1\/$1/; |
$URLpath=~s/~([^\/]+)/public_html\/$1\/$1/; |
$texversion.=&path_to_problem ($URLpath,$LaTeXwidth); |
$texversion.=&path_to_problem($URLpath,$LaTeXwidth); |
} |
} |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
} |
} |
Line 1122 ENDPART
|
Line 1466 ENDPART
|
if ($currentURL=~m/\.page\s*$/) { |
if ($currentURL=~m/\.page\s*$/) { |
($result,$number_of_columns) = &page_cleanup($result); |
($result,$number_of_columns) = &page_cleanup($result); |
} |
} |
} elsif ($currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') { |
} elsif ($cleanURL!~m|^/adm/| |
|
&& $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') { |
#printing content of sequence from the construction space |
#printing content of sequence from the construction space |
my $flag_latex_header_remove = 'NO'; |
|
my $rndseed=time; |
|
if ($helper->{'VARS'}->{'curseed'}) { |
|
$rndseed=$helper->{'VARS'}->{'curseed'}; |
|
} |
|
$currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; |
$currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; |
my $errtext=&Apache::lonratedt::mapread($currentURL); |
$result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
for (my $member=0;$member<=$#Apache::lonratedt::order;$member++) { |
$result .= &print_construction_sequence($currentURL, $helper, %form, |
$Apache::lonratedt::resources[$Apache::lonratedt::order[$member]]=~/^([^:]*):([^:]*):/; |
$LaTeXwidth); |
my $urlp=$2; |
$result .= '\end{document}'; |
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) { |
if (!($result =~ /\\begin\{document\}/)) { |
my $texversion=''; |
$result = &print_latex_header() . $result; |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { |
|
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
|
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
|
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
|
$form{'rndseed'}=$rndseed; |
|
$resources_printed .=$urlp.':'; |
|
$texversion=&Apache::lonnet::ssi($urlp,%form); |
|
} |
|
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
|
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
|
($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) { |
|
# Don't permanently modify %$form... |
|
my %answerform = %form; |
|
$answerform{'grade_target'}='answer'; |
|
$answerform{'answer_output_mode'}='tex'; |
|
$answerform{'rndseed'}=$rndseed; |
|
$answerform{'problem_split'}=$parmhash{'problem_stream_switch'}; |
|
if ($urlp=~/\/res\//) {$env{'request.state'}='published';} |
|
$resources_printed .= $urlp.':'; |
|
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
|
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
|
} else { |
|
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
|
$texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}).'}\vskip 0 mm '; |
|
$texversion.=&path_to_problem ($currentURL,$LaTeXwidth); |
|
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
|
} |
|
} |
|
if ($flag_latex_header_remove ne 'NO') { |
|
$texversion = &latex_header_footer_remove($texversion); |
|
} else { |
|
$texversion =~ s/\\end{document}//; |
|
} |
|
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
|
$texversion=&IndexCreation($texversion,$urlp); |
|
} |
|
if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URpL'} eq 'yes') { |
|
$texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$urlp| \\strut\\\\\\strut /; |
|
} |
|
$result.=$texversion; |
|
$flag_latex_header_remove = 'YES'; |
|
} elsif ($urlp=~/\.(sequence|page)$/) { |
|
$result.='\strut\newline\noindent Sequence/page '.$urlp.'\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent '; |
|
} |
|
} |
} |
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} |
# End construction space sequence. |
$result .= '\end{document}'; |
|
} elsif ($cleanURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { |
} elsif ($cleanURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { |
$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=&Apache::lonnet::ssi($currentURL,%form); |
$result .= $texversion; |
$result .= $texversion; |
|
} elsif ($cleanURL =~/.tex$/) { |
|
# For this sort of print of a single LaTeX file, |
|
# We can just print the LaTeX file as it is uninterpreted in any way: |
|
# |
|
|
|
$result = &fetch_raw_resource($currentURL); |
|
$do_postprocessing = 0; # Don't massage the result. |
|
|
} else { |
} else { |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}); |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, |
|
$helper->{'VARS'}->{'symb'}); |
} |
} |
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or |
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or |
Line 1219 ENDPART
|
Line 1522 ENDPART
|
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'}; |
my $prevassignment=''; |
my $prevassignment=''; |
&Apache::lonnet::delenv('form.counter'); |
|
&Apache::lonxml::init_counter(); |
&Apache::lonxml::clear_problem_counter(); |
|
|
|
my $pbreakresources = keys %page_breaks; |
for (my $i=0;$i<=$#master_seq;$i++) { |
for (my $i=0;$i<=$#master_seq;$i++) { |
|
|
# Note due to document structure, not allowed to put \newpage |
# Note due to document structure, not allowed to put \newpage |
Line 1231 ENDPART
|
Line 1536 ENDPART
|
$result.="\\newpage\n"; |
$result.="\\newpage\n"; |
} |
} |
} |
} |
my (undef,undef,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]); |
my ($sequence,undef,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]); |
$urlp=&Apache::lonnet::clutter($urlp); |
$urlp=&Apache::lonnet::clutter($urlp); |
$form{'symb'}=$master_seq[$i]; |
$form{'symb'}=$master_seq[$i]; |
my ($sequence)=&Apache::lonnet::decode_symb($master_seq[$i]); |
|
my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #tittle of the assignment which contains this problem |
my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #title of the assignment which contains this problem |
if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;} |
if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;} |
if ($i==0) {$prevassignment=$assignment;} |
if ($i==0) {$prevassignment=$assignment;} |
my $texversion=''; |
my $texversion=''; |
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
if ($urlp!~m|^/adm/| |
|
&& $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(); |
$texversion.=&Apache::lonnet::ssi($urlp,%form); |
$texversion.=&Apache::lonnet::ssi($urlp,%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); |
Line 1248 ENDPART
|
Line 1556 ENDPART
|
$texversion =~ s/\\end{document}\d*/\\end{document}/; |
$texversion =~ s/\\end{document}\d*/\\end{document}/; |
$flag_page_in_sequence = 'YES'; |
$flag_page_in_sequence = 'YES'; |
} |
} |
my $lonidsdir=$r->dir_config('lonIDsDir'); |
|
my $envfile=$env{'user.environment'}; |
|
$envfile=~/\/([^\/]+)\.id$/; |
|
$envfile=$1; |
|
&Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile); |
|
my $current_counter=$env{'form.counter'}; |
|
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 the %form hash |
# Don't permanently pervert the %form hash |
Line 1261 ENDPART
|
Line 1564 ENDPART
|
$answerform{'grade_target'}='answer'; |
$answerform{'grade_target'}='answer'; |
$answerform{'answer_output_mode'}='tex'; |
$answerform{'answer_output_mode'}='tex'; |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
|
|
|
&Apache::lonxml::restore_problem_counter(); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
|
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 { |
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.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($urlp).'}\vskip 0 mm '; |
my $title = &Apache::lonnet::gettitle($master_seq[$i]); |
$texversion.=&path_to_problem ($urlp,$LaTeXwidth); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$texversion.='\vskip 1 mm '.$answer; |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
|
$body .= &path_to_problem ($urlp,$LaTeXwidth); |
|
$body .='\vskip 1 mm '.$answer; |
|
$body = &encapsulate_minipage($body); |
|
$texversion .= $body; |
} else { |
} else { |
$texversion=''; |
$texversion=''; |
} |
} |
Line 1289 ENDPART
|
Line 1598 ENDPART
|
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
$prevassignment=$assignment; |
$prevassignment=$assignment; |
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip 5 mm '; |
my $header_text = $parmhash{'print_header_format'}; |
|
$header_text = &format_page_header($textwidth, $header_text, |
|
$assignment, |
|
$courseidinfo, |
|
$name); |
|
if ($numberofcolumns eq '1') { |
|
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; |
|
} else { |
|
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\fancyhead[LO]{'.$header_text.'}} \vskip 5 mm '; |
|
} |
} |
} |
$result .= $texversion; |
$result .= $texversion; |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
Line 1306 ENDPART
|
Line 1624 ENDPART
|
$result .= $texversion; |
$result .= $texversion; |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
} else { |
} else { |
$texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'}, |
|
$master_seq[$i]); |
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 1317 ENDPART
|
Line 1636 ENDPART
|
} |
} |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonxml::clear_problem_counter(); |
if ($flag_page_in_sequence eq 'YES') { |
if ($flag_page_in_sequence eq 'YES') { |
$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/; |
$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/; |
} |
} |
Line 1342 ENDPART
|
Line 1661 ENDPART
|
# Each element of the students array is of the form: |
# Each element of the students array is of the form: |
# username:domain:section:last, first:status |
# username:domain:section:last, first:status |
# |
# |
|
# Note that student sort is not compatible with printing |
|
# 1 section per pdf...so that setting overrides. |
# |
# |
if ($helper->{'VARS'}->{'student_sort'} eq 1) { |
if (($helper->{'VARS'}->{'student_sort'} eq 1) && |
|
($helper->{'VARS'}->{'SPLIT_PDFS'} ne "sections")) { |
@students = sort compare_names @students; |
@students = sort compare_names @students; |
} |
} |
|
&adjust_number_to_print($helper); |
|
|
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' || |
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' || |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) { |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) { |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1; |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1; |
} |
} |
|
# If we are splitting on section boundaries, we need |
|
# to remember that in split_on_sections and |
|
# print all of the students in the list. |
|
# |
|
my $split_on_sections = 0; |
|
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'section') { |
|
$split_on_sections = 1; |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = $#students+1; |
|
} |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
|
|
#loop over students |
#loop over students |
Line 1363 ENDPART
|
Line 1696 ENDPART
|
if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';} |
if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} 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 $last_section = (split(/:/,$students[0]))[2]; |
foreach my $person (@students) { |
foreach my $person (@students) { |
|
|
my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due"; |
my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due"; |
Line 1371 ENDPART
|
Line 1706 ENDPART
|
print $temp_file "1969\n"; |
print $temp_file "1969\n"; |
} |
} |
$student_counter++; |
$student_counter++; |
my $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
if ($split_on_sections) { |
|
my $this_section = (split(/:/,$person))[2]; |
|
if ($this_section ne $last_section) { |
|
$i++; |
|
$last_section = $this_section; |
|
} |
|
} else { |
|
$i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
|
} |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
$person,$type, |
$person,$type, |
\%moreenv,\@master_seq, |
\%moreenv,\@master_seq, |
Line 1408 ENDPART
|
Line 1751 ENDPART
|
} |
} |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
|
$moreenv{'instructor_comments'}='hide'; |
my $seed=time+($$<<16)+($$); |
my $seed=time+($$<<16)+($$); |
my @allcodes; |
my @allcodes; |
if ($old_name) { |
if ($old_name) { |
Line 1449 ENDPART
|
Line 1793 ENDPART
|
} |
} |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'}); |
my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'}); |
|
&adjust_number_to_print($helper); |
my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'}; |
my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'}; |
if ($number_per_page eq '0' || $number_per_page eq 'all') { |
if ($number_per_page eq '0' || $number_per_page eq 'all') { |
$number_per_page=$num_todo; |
$number_per_page=$num_todo; |
Line 1551 ENDPART
|
Line 1896 ENDPART
|
$result .= '\end{document}'; |
$result .= '\end{document}'; |
} |
} |
#-------------------------------------------------------- corrections for the different page formats |
#-------------------------------------------------------- corrections for the different page formats |
$result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'},$selectionmade); |
|
$result = &latex_corrections($number_of_columns,$result,$selectionmade); |
# Only post process if that has not been turned off e.g. by a raw latex resource. |
for (my $i=1;$i<=$#print_array;$i++) {$print_array[$i] = &latex_corrections($number_of_columns,$print_array[$i],$selectionmade);} |
|
#changes page's parameters for the one column output |
if ($do_postprocessing) { |
if ($numberofcolumns == 1) { |
$result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'},$selectionmade); |
|
$result = &latex_corrections($number_of_columns,$result,$selectionmade, |
|
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
|
#if ($numberofcolumns == 1) { |
$result =~ s/\\textwidth\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textwidth= $helper->{'VARS'}->{'pagesize.width'} $helper->{'VARS'}->{'pagesize.widthunit'} /; |
$result =~ s/\\textwidth\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textwidth= $helper->{'VARS'}->{'pagesize.width'} $helper->{'VARS'}->{'pagesize.widthunit'} /; |
$result =~ s/\\textheight\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textheight $helper->{'VARS'}->{'pagesize.height'} $helper->{'VARS'}->{'pagesize.heightunit'} /; |
$result =~ s/\\textheight\s*=?\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textheight $helper->{'VARS'}->{'pagesize.height'} $helper->{'VARS'}->{'pagesize.heightunit'} /; |
$result =~ s/\\evensidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
$result =~ s/\\evensidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
$result =~ s/\\oddsidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
$result =~ s/\\oddsidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; |
|
#} |
} |
} |
|
|
#-- writing .tex file in prtspool |
#-- writing .tex file in prtspool |
Line 1581 ENDPART
|
Line 1930 ENDPART
|
if ($i==0) { |
if ($i==0) { |
$print_array[$i]=$result; |
$print_array[$i]=$result; |
} else { |
} 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); |
my $anobegin=index($print_array[$i],'\setcounter{page}',0); |
substr($print_array[$i],0,$anobegin)=''; |
substr($print_array[$i],0,$anobegin)=''; |
$print_array[$i]=$inc.$print_array[$i].'\end{document}'; |
$print_array[$i]=$inc.$print_array[$i]; |
} |
} |
my $temp_file; |
my $temp_file; |
my $newfilename=$filename; |
my $newfilename=$filename; |
Line 1616 ENDPART
|
Line 1971 ENDPART
|
my $URLback=''; #link to original document |
my $URLback=''; #link to original document |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
#prints published resource |
#prints published resource |
$URLback=&Apache::lonnet::escape('/adm/flip?postdata=return:'); |
$URLback=&escape('/adm/flip?postdata=return:'); |
} else { |
} else { |
#prints resource from the construction space |
#prints resource from the construction space |
$URLback='/'.$helper->{'VARS'}->{'filename'}; |
$URLback='/'.$helper->{'VARS'}->{'filename'}; |
Line 1646 ENDPART
|
Line 2001 ENDPART
|
"cgi.$identifier.coursedom" => $cdom, |
"cgi.$identifier.coursedom" => $cdom, |
"cgi.$identifier.resources" => $resources_printed); |
"cgi.$identifier.resources" => $resources_printed); |
|
|
$r->print(<<FINALEND); |
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> |
</body> |
$end_page |
</html> |
|
FINALEND |
FINALEND |
} |
} |
|
|
Line 1680 sub print_resources {
|
Line 2035 sub print_resources {
|
my $printed = ''; |
my $printed = ''; |
my ($username,$userdomain,$usersection) = split /:/,$person; |
my ($username,$userdomain,$usersection) = split /:/,$person; |
my $fullname = &get_name($username,$userdomain); |
my $fullname = &get_name($username,$userdomain); |
my $namepostfix; |
my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace. |
if ($person =~ 'anon') { |
if ($person =~ 'anon') { |
$namepostfix="\\\\Name: "; |
$namepostfix .="Name: "; |
$fullname = "CODE - ".$moreenv->{'CODE'}; |
$fullname = "CODE - ".$moreenv->{'CODE'}; |
} |
} |
|
# Fullname may have special latex characters that need \ prefixing: |
|
# |
|
|
my $i = 0; |
my $i = 0; |
#goes through all resources, checks if they are available for |
#goes through all resources, checks if they are available for |
#current student, and produces output |
#current student, and produces output |
&Apache::lonnet::delenv('form.counter'); |
|
&Apache::lonxml::init_counter(); |
|
|
|
|
&Apache::lonxml::clear_problem_counter(); |
my %page_breaks = &get_page_breaks($helper); |
my %page_breaks = &get_page_breaks($helper); |
|
my $columns_in_format = (split(/\|/,$helper->{'VARS'}->{'FORMAT'}))[1]; |
|
# |
|
# end each student with a |
|
# Special that allows the post processor to even out the page |
|
# counts later. Nasty problem this... it would be really |
|
# nice to put the special in as a postscript comment |
|
# e.g. \special{ps:\ENDOFSTUDENTSTAMP} unfortunately, |
|
# The special gets passed the \ and dvips puts it in the output file |
|
# so we will just rely on prntout.pl to strip ENDOFSTUDENTSTAMP from the |
|
# 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}) { |
Line 1704 sub print_resources {
|
Line 2072 sub print_resources {
|
($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); |
if (&Apache::lonnet::allowed('bre',$res_url)) { |
if (&Apache::lonnet::allowed('bre',$res_url)) { |
if ($res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
if ($res_url!~m|^ext/| |
|
&& $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
$printed .= $curresline.':'; |
$printed .= $curresline.':'; |
|
|
|
&Apache::lonxml::remember_problem_counter(); |
|
|
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); |
my $lonidsdir=$r->dir_config('lonIDsDir'); |
|
my $envfile=$env{'user.environment'}; |
|
$envfile=~/\/([^\/]+)\.id$/; |
|
$envfile=$1; |
|
&Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile); |
|
my $current_counter=$env{'form.counter'}; |
|
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')) { |
# Use a copy of the hash so we don't pervert it on future loop passes. |
# Use a copy of the hash so we don't pervert it on future loop passes. |
my %answerenv = %{$moreenv}; |
my %answerenv = %{$moreenv}; |
$answerenv{'answer_output_mode'}='tex'; |
$answerenv{'answer_output_mode'}='tex'; |
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
|
|
|
&Apache::lonxml::restore_problem_counter(); |
|
|
my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv); |
my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; |
$rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; |
} else { |
} else { |
$rendered=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
|
$rendered.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($curresline).'}\vskip 0 mm '; |
|
$rendered.=&path_to_problem ($curresline,$LaTeXwidth); |
my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$rendered.='\vskip 1 mm '.$ansrendered; |
my $title = &Apache::lonnet::gettitle($curresline); |
|
$title = &Apache::lonxml::latex_special_symbols($title); |
|
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
|
$body .=&path_to_problem($res_url,$LaTeXwidth); |
|
$body .='\vskip 1 mm '.$ansrendered; |
|
$body = &encapsulate_minipage($body); |
|
$rendered = $header.$body; |
} |
} |
} |
} |
if ($remove_latex_header eq 'YES') { |
if ($remove_latex_header eq 'YES') { |
Line 1739 sub print_resources {
|
Line 2115 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); |
my $lonidsdir=$r->dir_config('lonIDsDir'); |
|
my $envfile=$env{'user.environment'}; |
|
$envfile=~/\/([^\/]+)\.id$/; |
|
$envfile=$1; |
|
&Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile); |
|
my $current_counter=$env{'form.counter'}; |
|
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 { |
$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 '; |
|
|
} else { |
} else { |
my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'}); |
my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline); |
if ($remove_latex_header ne 'NO') { |
if ($remove_latex_header ne 'NO') { |
$rendered = &latex_header_footer_remove($rendered); |
$rendered = &latex_header_footer_remove($rendered); |
} else { |
} else { |
Line 1769 sub print_resources {
|
Line 2141 sub print_resources {
|
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection} |
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 = |
|
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
|
$currentassignment, $courseidinfo, $fullname); |
|
my $header_start = ($columns_in_format == 1) ? '\lhead' |
|
: '\fancyhead[LO]'; |
|
$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\\lhead{\\textit{\\textbf{$fullname}}$courseidinfo \\hfill \\thepage \\\\ \\textit{$currentassignment}$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 { |
my $blankpages = ''; |
my $blankpages = |
for (my $j=0;$j<$helper->{'VARS'}->{'EMPTY_PAGES'};$j++) {$blankpages.='\clearpage\strut\clearpage';} |
'\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'}; |
$current_output = '\strut\vspace*{-6 mm}\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\vspace*{-2 mm}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage '.$blankpages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$currentassignment.'}'.$namepostfix.'}} \vskip 5 mm '.$current_output; |
|
|
$current_output = '\strut\vspace*{-6 mm}\\newline'. |
|
©right_line().' \newpage '.$blankpages.$end_of_student. |
|
'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent'. |
|
$header_line.$namepostfix.'} \vskip 5 mm '.$current_output; |
} |
} |
|
# |
|
# Close the student bracketing. |
|
# |
return ($current_output,$fullname, $printed); |
return ($current_output,$fullname, $printed); |
|
|
} |
} |
Line 1786 sub handler {
|
Line 2172 sub handler {
|
|
|
&init_perm(); |
&init_perm(); |
|
|
# my $loaderror=&Apache::lonnet::overloaderror($r); |
|
# if ($loaderror) { return $loaderror; } |
|
# $loaderror= |
|
# &Apache::lonnet::overloaderror($r, |
|
# $env{'course.'.$env{'request.course.id'}.'.home'}); |
|
# if ($loaderror) { return $loaderror; } |
|
|
|
my $helper = printHelper($r); |
my $helper = printHelper($r); |
if (!ref($helper)) { |
if (!ref($helper)) { |
return $helper; |
return $helper; |
} |
} |
|
|
# my $key; |
|
# foreach $key (keys %{$helper->{'VARS'}}) { |
|
# $r->print(' '.$key.'->'.$helper->{'VARS'}->{$key}.'<-<br />'); |
|
# } |
|
# foreach $key (keys %env) { |
|
# $r->print(' '.$key.'->'.$env{$key}.'<-<br />'); |
|
# } |
|
# return OK; |
|
|
|
my %parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'}); |
%parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
|
# my $key; |
|
# foreach $key (keys %parmhash) { |
|
# $r->print(' '.$key.'->'.$parmhash{$key}.'<-<br />'); |
|
# } |
|
# |
|
|
|
|
|
# If a figure conversion queue file exists for this user.domain |
# If a figure conversion queue file exists for this user.domain |
Line 1837 sub addMessage {
|
Line 2206 sub addMessage {
|
Apache::lonhelper::message->new(); |
Apache::lonhelper::message->new(); |
} |
} |
|
|
use Data::Dumper; |
|
|
|
sub init_perm { |
sub init_perm { |
undef(%perm); |
undef(%perm); |
Line 1846 sub init_perm {
|
Line 2215 sub init_perm {
|
$perm{'pav'}=&Apache::lonnet::allowed('pav', |
$perm{'pav'}=&Apache::lonnet::allowed('pav', |
$env{'request.course.id'}.'/'.$env{'request.course.sec'}); |
$env{'request.course.id'}.'/'.$env{'request.course.sec'}); |
} |
} |
$perm{'pfo'}=&Apache::lonnet::allowed('pav',$env{'request.course.id'}); |
$perm{'pfo'}=&Apache::lonnet::allowed('pfo',$env{'request.course.id'}); |
if (!$perm{'pfo'}) { |
if (!$perm{'pfo'}) { |
$perm{'pfo'}=&Apache::lonnet::allowed('pfo', |
$perm{'pfo'}=&Apache::lonnet::allowed('pfo', |
$env{'request.course.id'}.'/'.$env{'request.course.sec'}); |
$env{'request.course.id'}.'/'.$env{'request.course.sec'}); |
} |
} |
} |
} |
|
|
|
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 1894 sub printHelper {
|
Line 2285 sub printHelper {
|
$helper->declareVar('FINISHPAGE'); |
$helper->declareVar('FINISHPAGE'); |
$helper->declareVar('PRINT_TYPE'); |
$helper->declareVar('PRINT_TYPE'); |
$helper->declareVar("showallfoils"); |
$helper->declareVar("showallfoils"); |
|
$helper->declareVar("STUDENTS"); |
|
|
# The page breaks can get loaded initially from the course environment: |
# The page breaks can get loaded initially from the course environment: |
# But we only do this in the initial state so that they are allowed to change. |
# But we only do this in the initial state so that they are allowed to change. |
# |
# |
|
|
$helper->{VARS}->{FINISHPAGE} = ''; |
# $helper->{VARS}->{FINISHPAGE} = ''; |
|
|
&Apache::loncommon::restore_course_settings('print', |
&Apache::loncommon::restore_course_settings('print', |
{'pagebreaks' => 'scalar', |
{'pagebreaks' => 'scalar', |
'lastprinttype' => 'scalar'}); |
'lastprinttype' => 'scalar'}); |
|
|
|
# This will persistently load in the data we want from the |
|
# very first screen. |
|
|
if($helper->{VARS}->{PRINT_TYPE} eq $env{'form.lastprinttype'}) { |
if($helper->{VARS}->{PRINT_TYPE} eq $env{'form.lastprinttype'}) { |
if (!defined ($env{"form.CURRENT_STATE"})) { |
if (!defined ($env{"form.CURRENT_STATE"})) { |
Line 1918 sub printHelper {
|
Line 2312 sub printHelper {
|
} |
} |
|
|
} |
} |
|
|
|
|
# This will persistently load in the data we want from the |
|
# very first screen. |
|
# 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 1929 sub printHelper {
|
Line 2321 sub printHelper {
|
} else { |
} else { |
if ($env{'form.postdata'}) { |
if ($env{'form.postdata'}) { |
$helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($env{'form.postdata'}); |
$helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($env{'form.postdata'}); |
|
if ( $helper->{VARS}->{'symb'} eq '') { |
|
$helper->{VARS}->{'postdata'} = $env{'form.postdata'}; |
|
} |
} |
} |
if ($env{'form.symb'}) { |
if ($env{'form.symb'}) { |
$helper->{VARS}->{'symb'} = $env{'form.symb'}; |
$helper->{VARS}->{'symb'} = $env{'form.symb'}; |
Line 1936 sub printHelper {
|
Line 2331 sub printHelper {
|
if ($env{'form.url'}) { |
if ($env{'form.url'}) { |
$helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'}); |
$helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'}); |
} |
} |
|
|
} |
} |
|
|
if ($env{'form.symb'}) { |
if ($env{'form.symb'}) { |
Line 1955 sub printHelper {
|
Line 2351 sub printHelper {
|
my $symb = $helper->{VARS}->{'symb'}; |
my $symb = $helper->{VARS}->{'symb'}; |
my ($map, $id, $url); |
my ($map, $id, $url); |
my $subdir; |
my $subdir; |
|
my $is_published=0; # True when printing from resource space. |
|
|
# Get the resource name from construction space |
# Get the resource name from construction space |
if ($helper->{VARS}->{'construction'}) { |
if ($helper->{VARS}->{'construction'}) { |
Line 1963 sub printHelper {
|
Line 2360 sub printHelper {
|
$subdir = substr($helper->{VARS}->{'filename'}, |
$subdir = substr($helper->{VARS}->{'filename'}, |
0, rindex($helper->{VARS}->{'filename'}, '/') + 1); |
0, rindex($helper->{VARS}->{'filename'}, '/') + 1); |
} else { |
} else { |
($map, $id, $url) = &Apache::lonnet::decode_symb($symb); |
if ($symb ne '') { |
$helper->{VARS}->{'postdata'} = |
($map, $id, $url) = &Apache::lonnet::decode_symb($symb); |
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url)); |
$helper->{VARS}->{'postdata'} = |
|
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url)); |
|
} else { |
|
$url = $helper->{VARS}->{'postdata'}; |
|
$is_published=1; # From resource space. |
|
} |
|
$url = &Apache::lonnet::clutter($url); |
|
|
if (!$resourceTitle) { # if the resource doesn't have a title, use the filename |
if (!$resourceTitle) { # if the resource doesn't have a title, use the filename |
my $postdata = $helper->{VARS}->{'postdata'}; |
my $postdata = $helper->{VARS}->{'postdata'}; |
Line 1986 sub printHelper {
|
Line 2389 sub printHelper {
|
|
|
# "Delete everything after the last slash." |
# "Delete everything after the last slash." |
$subdir =~ s|/[^/]+$||; |
$subdir =~ s|/[^/]+$||; |
if (not $helper->{VARS}->{'construction'}) { |
|
$subdir=$Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'.$subdir; |
|
} |
|
# "Remove all duplicate slashes." |
|
$subdir =~ s|/+|/|g; |
|
|
|
# What can be printed is a very dynamic decision based on |
# What can be printed is a very dynamic decision based on |
# lots of factors. So we need to dynamically build this list. |
# lots of factors. So we need to dynamically build this list. |
Line 2007 sub printHelper {
|
Line 2405 sub printHelper {
|
my $paramHash; |
my $paramHash; |
|
|
if ($resourceTitle) { |
if ($resourceTitle) { |
push @{$printChoices}, ["<b><i>$resourceTitle</i></b> (".&mt('what you just saw on the screen').")", 'current_document', 'PAGESIZE']; |
push @{$printChoices}, ["<b><i>$resourceTitle</i></b> (".&mt('the resource you just saw on the screen').")", 'current_document', 'PAGESIZE']; |
} |
} |
|
|
# Useful filter strings |
# Useful filter strings |
Line 2022 sub printHelper {
|
Line 2420 sub printHelper {
|
|
|
$helper->declareVar('SEQUENCE'); |
$helper->declareVar('SEQUENCE'); |
|
|
# Useful for debugging: Dump the help vars |
|
# $r->print(Dumper($helper->{VARS})); |
|
# $r->print($map); |
|
|
|
# If we're in a sequence... |
# If we're in a sequence... |
if (($helper->{'VARS'}->{'construction'} ne '1') && |
|
|
my $start_new_option; |
|
if ($perm{'pav'}) { |
|
$start_new_option = |
|
"<option text='".&mt('Start new page<br />before selected'). |
|
"' variable='FINISHPAGE' />"; |
|
} |
|
|
|
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}, ["<b>".&mt('Problems')."</b> ".&mt('in')." <b><i>$sequenceTitle</i></b>", 'map_problems', 'CHOOSE_PROBLEMS']; |
push @{$printChoices}, [&mt('Selected <b>Problems</b> in folder <b><i>[_1]</i></b>',$sequenceTitle), 'map_problems', 'CHOOSE_PROBLEMS']; |
# Allow all resources from sequence |
# Allow all resources from sequence |
push @{$printChoices}, ["<b>".&mt('Resources')."</b> ".&mt('in')." <b><i>$sequenceTitle</i></b>", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; |
push @{$printChoices}, [&mt('Selected <b>Resources</b> in folder <b><i>[_1]</i></b>',$sequenceTitle), '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"> |
<message>(mark them then click "next" button) <br /></message> |
|
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
closeallpages="1"> |
closeallpages="1"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filterfunc>return $isProblem;</filterfunc> |
<filterfunc>return $isProblem;</filterfunc> |
<mapurl>$map</mapurl> |
<mapurl>$map</mapurl> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<option text='Newpage' variable='FINISHPAGE' /> |
$start_new_option |
</resource> |
</resource> |
</state> |
</state> |
|
|
<state name="CHOOSE_PROBLEMS_HTML" title="Select Resource(s) to print"> |
<state name="CHOOSE_PROBLEMS_HTML" title="Select Resource(s) to print"> |
<message>(mark them then click "next" button) <br /></message> |
|
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
closeallpages="1"> |
closeallpages="1"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filterfunc>return $isNotMap;</filterfunc> |
<filterfunc>return $isNotMap;</filterfunc> |
<mapurl>$map</mapurl> |
<mapurl>$map</mapurl> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<option text='Newpage' variable='FINISHPAGE' /> |
$start_new_option |
</resource> |
</resource> |
</state> |
</state> |
HELPERFRAGMENT |
HELPERFRAGMENT |
Line 2067 HELPERFRAGMENT
|
Line 2467 HELPERFRAGMENT
|
|
|
# If the user has pfo (print for otheres) allow them to print all |
# If the user has pfo (print for otheres) allow them to print all |
# problems and resources in the entier course, optionally for selected students |
# problems and resources in the entier course, optionally for selected students |
if ($perm{'pfo'} && |
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}, ['<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}, ['<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"> |
<message>(mark them then click "next" button) <br /></message> |
|
<resource variable="RESOURCES" toponly='0' multichoice="1" |
<resource variable="RESOURCES" toponly='0' multichoice="1" |
suppressEmptySequences='0' addstatus="1" closeallpages="1"> |
suppressEmptySequences='0' addstatus="1" closeallpages="1"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filterfunc>return $isProblemOrMap;</filterfunc> |
<filterfunc>return $isProblemOrMap;</filterfunc> |
<choicefunc>return $isNotMap;</choicefunc> |
<choicefunc>return $isNotMap;</choicefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<option text='Newpage' variable='FINISHPAGE' /> |
$start_new_option |
</resource> |
</resource> |
</state> |
</state> |
<state name="ALL_RESOURCES" title="Select Resource(s) to print"> |
<state name="ALL_RESOURCES" title="Select Resource(s) to print"> |
<message>(Mark them then click "next" button) <br /> </message> |
|
<resource variable="RESOURCES" toponly='0' multichoice='1' |
<resource variable="RESOURCES" toponly='0' multichoice='1' |
suppressEmptySequences='0' addstatus='1' closeallpages='1'> |
suppressEmptySequences='0' addstatus='1' closeallpages='1'> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filterfunc>return $isNotMap; </filterfunc> |
<filterfunc>return $isNotMap; </filterfunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<option text='NewPage' variable='FINISHPAGE' /> |
$start_new_option |
</resource> |
</resource> |
</state> |
</state> |
ALL_PROBLEMS |
ALL_PROBLEMS |
|
|
if ($helper->{VARS}->{'assignment'}) { |
if ($helper->{VARS}->{'assignment'}) { |
push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('selected students')."</b>", 'problems_for_students', 'CHOOSE_STUDENTS']; |
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}, ["<b>".&mt('Problems')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('anonymous students')."</b>", '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: |
|
# - Allow resources to be selected for printing. |
|
# - Determine pagination between assignments. |
|
# - Determine how many assignments should be bundled into a single PDF. |
|
# TODO: |
|
# Probably good to do things like separate this up into several vars, each |
|
# with one state, and use REGEXPs at inclusion time to set state names |
|
# and next states for better mix and match capability |
|
# |
my $resource_selector=<<RESOURCE_SELECTOR; |
my $resource_selector=<<RESOURCE_SELECTOR; |
|
<state name="SELECT_PROBLEMS" title="Select resources to print"> |
|
$randomly_ordered_warning |
|
|
|
<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" |
closeallpages="1"> |
closeallpages="1"> |
<filterfunc>return $isProblem;</filterfunc> |
<filterfunc>return $isProblem;</filterfunc> |
<mapurl>$map</mapurl> |
<mapurl>$map</mapurl> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<option text='New Page' variable='FINISHPAGE' /> |
$start_new_option |
</resource> |
</resource> |
|
</state> |
|
<state name="PRINT_FORMATTING" title="How should results be printed?"> |
<message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message> |
<message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message> |
<choices variable="EMPTY_PAGES"> |
<choices variable="EMPTY_PAGES"> |
<choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice> |
<choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice> |
Line 2116 ALL_PROBLEMS
|
Line 2533 ALL_PROBLEMS
|
<choice computer='2'>Add two empty pages/column after each student\'s assignment</choice> |
<choice computer='2'>Add two empty pages/column after each student\'s assignment</choice> |
<choice computer='3'>Add three empty pages/column after each student\'s assignment</choice> |
<choice computer='3'>Add three empty pages/column after each student\'s assignment</choice> |
</choices> |
</choices> |
<message><hr width='33%' /><b>Number of assignments printed at the same time: </b></message> |
<nextstate>PAGESIZE</nextstate> |
<string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string> |
<message><hr width='33%' /><b>How do you want assignments split into PDF files? </b></message> |
|
<choices variable="SPLIT_PDFS"> |
|
<choice computer="all">All assignments in a single PDF file</choice> |
|
<choice computer="sections">Each PDF contains exactly one section</choice> |
|
<choice computer="oneper">Each PDF contains exactly one assignment</choice> |
|
<choice computer="usenumber" relatedvalue="NUMBER_TO_PRINT"> |
|
Specify the number of assignments per PDF:</choice> |
|
</choices> |
|
</state> |
RESOURCE_SELECTOR |
RESOURCE_SELECTOR |
|
|
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS); |
<state name="CHOOSE_STUDENTS" title="Select Students and Resources"> |
<state name="CHOOSE_STUDENTS" title="Select Students and Resources"> |
<student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" coursepersonnel="1"/> |
<message><b>Select sorting order of printout</b> </message> |
<message><b>Select sort order</b> </message> |
|
<choices variable='student_sort'> |
<choices variable='student_sort'> |
<choice computer='0'>Sort by section then student</choice> |
<choice computer='0'>Sort by section then student</choice> |
<choice computer='1'>Sort by students across sections.</choice> |
<choice computer='1'>Sort by students across sections.</choice> |
</choices> |
</choices> |
$resource_selector |
<message><br /><hr /><br /> </message> |
|
<student multichoice='1' variable="STUDENTS" nextstate="SELECT_PROBLEMS" coursepersonnel="1"/> |
</state> |
</state> |
|
$resource_selector |
CHOOSE_STUDENTS |
CHOOSE_STUDENTS |
|
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
Line 2143 CHOOSE_STUDENTS
|
Line 2569 CHOOSE_STUDENTS
|
} |
} |
|
|
|
|
my %all_codes = &Apache::lonnet::get('CODEs', |
|
\@names, $cdom,$cnum); |
|
my %code_values; |
my %code_values; |
my @all_code_array; |
my %codes_to_print; |
foreach my $key (keys %all_codes) { |
foreach my $key (@names) { |
%code_values = &Apache::grades::get_codes($key, $cdom, $cnum); |
%code_values = &Apache::grades::get_codes($key, $cdom, $cnum); |
foreach my $key (keys %code_values) { |
foreach my $key (keys(%code_values)) { |
push (@all_code_array, "$key"); |
$codes_to_print{$key} = 1; |
} |
} |
} |
} |
|
|
my $code_selection = "<choice></choice>\n"; |
my $code_selection; |
foreach my $code (sort {uc($a) cmp uc($b)} @all_code_array) { |
foreach my $code (sort {uc($a) cmp uc($b)} (keys(%codes_to_print))) { |
my $choice = $code; |
my $choice = $code; |
if ($code =~ /^[A-Z]+$/) { # Alpha code |
if ($code =~ /^[A-Z]+$/) { # Alpha code |
$choice = &letters_to_num($code); |
$choice = &letters_to_num($code); |
} |
} |
$code_selection .= ' <choice computer="'.$choice.'">'.$code."</choice>\n"; |
push(@{$helper->{DATA}{ALL_CODE_CHOICES}},[$code,$choice]); |
|
} |
|
if (%codes_to_print) { |
|
$code_selection .=' |
|
<message><b>Choose single CODE from list:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0"> |
|
<choice></choice> |
|
<exec> |
|
push(@{$state->{CHOICES}},@{$helper->{DATA}{ALL_CODE_CHOICES}}); |
|
</exec> |
|
</dropdown> |
|
<message></td></tr><tr><td></message> |
|
'.$/; |
|
|
} |
} |
|
|
|
|
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
my $codechoice=''; |
my $codechoice=''; |
foreach my $line (<FH>) { |
foreach my $line (<FH>) { |
Line 2176 CHOOSE_STUDENTS
|
Line 2616 CHOOSE_STUDENTS
|
$codechoice='<choice computer="default">Default</choice>'; |
$codechoice='<choice computer="default">Default</choice>'; |
} |
} |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1); |
<state name="CHOOSE_ANON1" title="Select Students and Resources"> |
<state name="CHOOSE_ANON1" title="Specify CODEd Assignments"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>SELECT_PROBLEMS</nextstate> |
<message><hr width='33%' /></message> |
<message><h4>Fill out one of the forms below</h4></message> |
<message><table><tr><td><b>Number of anonymous assignments to print?</b></td><td></message> |
<message><br /><hr /> <br /></message> |
|
<message><h3>Generate new CODEd Assignments</h3></message> |
|
<message><table><tr><td><b>Number of CODEd assignments to print:</b></td><td></message> |
<string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5"> |
<string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5"> |
<validator> |
<validator> |
if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) && |
if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) && |
Line 2192 CHOOSE_STUDENTS
|
Line 2634 CHOOSE_STUDENTS
|
</validator> |
</validator> |
</string> |
</string> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
<message><b>Value of CODE to print?</b></td><td></message> |
<message><b>Names to save the CODEs under for later:</b></message> |
<string variable="SINGLE_CODE" size="10" defaultvalue="zzzz"> |
<message></td><td></message> |
|
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Bubble sheet type:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_OPTION" multichoice="0" allowempty="0"> |
|
$codechoice |
|
</dropdown> |
|
<message></td></tr><tr><td colspan="2"></td></tr><tr><td></message> |
|
<message></td></tr><tr><td></table></message> |
|
<message><br /><hr /><h3>Print a Specific CODE </h3><br /><table></message> |
|
<message><tr><td><b>Enter a CODE to print:</b></td><td></message> |
|
<string variable="SINGLE_CODE" size="10"> |
<validator> |
<validator> |
if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} && |
if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} && |
!\$helper->{'VARS'}{'REUSE_OLD_CODES'} && |
!\$helper->{'VARS'}{'REUSE_OLD_CODES'} && |
Line 2206 CHOOSE_STUDENTS
|
Line 2660 CHOOSE_STUDENTS
|
</validator> |
</validator> |
</string> |
</string> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
<message><b>Choose single code from list</b></message> |
$code_selection |
<message></td><td></message> |
|
<dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0"> |
|
$code_selection |
|
</dropdown> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Names to store the CODEs under for later:</b></message> |
|
<message></td><td></message> |
|
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Bubble sheet type:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_OPTION" multichoice="0" allowempty="0"> |
|
$codechoice |
|
</dropdown> |
|
<message></td></tr></table></message> |
<message></td></tr></table></message> |
<message><hr width='33%' /></message> |
<message><hr /><h3>Reprint a Set of Saved CODEs</h3><table><tr><td></message> |
<message><b>Reprint a set of saved CODEs:</b></message> |
<message><b>Select saved CODEs:</b></message> |
|
<message></td><td></message> |
<dropdown variable="REUSE_OLD_CODES"> |
<dropdown variable="REUSE_OLD_CODES"> |
$namechoice |
$namechoice |
</dropdown> |
</dropdown> |
<message><hr width='33%' /></message> |
<message></td></tr></table></message> |
$resource_selector |
|
</state> |
</state> |
|
$resource_selector |
CHOOSE_ANON1 |
CHOOSE_ANON1 |
|
|
|
|
if ($helper->{VARS}->{'assignment'}) { |
if ($helper->{VARS}->{'assignment'}) { |
push @{$printChoices}, ["<b>".&mt('Resources')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('selected students')."</b>", 'resources_for_students', 'CHOOSE_STUDENTS1']; |
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}, ["<b>".&mt('Resources')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('anonymous students')."</b>", 'resources_for_anon', 'CHOOSE_ANON2']; |
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']; |
} |
} |
|
|
|
|
$resource_selector=<<RESOURCE_SELECTOR; |
$resource_selector=<<RESOURCE_SELECTOR; |
|
<state name="SELECT_RESOURCES" title="Select Resources"> |
|
$randomly_ordered_warning |
|
|
|
<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" |
closeallpages="1"> |
closeallpages="1"> |
<filterfunc>return $isNotMap;</filterfunc> |
<filterfunc>return $isNotMap;</filterfunc> |
<mapurl>$map</mapurl> |
<mapurl>$map</mapurl> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<option text='Newpage' variable='FINISHPAGE' /> |
$start_new_option |
</resource> |
</resource> |
|
</state> |
|
<state name="PRINT_FORMATTING" title="Format of the print job"> |
|
<nextstate>NUMBER_PER_PDF</nextstate> |
<message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message> |
<message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message> |
<choices variable="EMPTY_PAGES"> |
<choices variable="EMPTY_PAGES"> |
<choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice> |
<choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice> |
Line 2255 CHOOSE_ANON1
|
Line 2703 CHOOSE_ANON1
|
<choice computer='2'>Add two empty pages/column after each student\'s assignment</choice> |
<choice computer='2'>Add two empty pages/column after each student\'s assignment</choice> |
<choice computer='3'>Add three empty pages/column after each student\'s assignment</choice> |
<choice computer='3'>Add three empty pages/column after each student\'s assignment</choice> |
</choices> |
</choices> |
<message><hr width='33%' /><b>Number of assignments printed at the same time: </b></message> |
<nextstate>PAGESIZE</nextstate> |
<string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string> |
<message><hr width='33%' /><b>How do you want assignments split into PDF files? </b></message> |
|
<choices variable="SPLIT_PDFS"> |
|
<choice computer="all">All assignments in a single PDF file</choice> |
|
<choice computer="sections">Each PDF contains exactly one section</choice> |
|
<choice computer="oneper">Each PDF contains exactly one assignment</choice> |
|
<choice computer="usenumber" relatedvalue="NUMBER_TO_PRINT"> |
|
Specify the number of assignments per PDF:</choice> |
|
</choices> |
|
</state> |
RESOURCE_SELECTOR |
RESOURCE_SELECTOR |
|
|
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1); |
<state name="CHOOSE_STUDENTS1" title="Select Students and Resources"> |
<state name="CHOOSE_STUDENTS1" title="Select Students and Resources"> |
<student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" coursepersonnel="1" /> |
|
<choices variable='student_sort'> |
<choices variable='student_sort'> |
<choice computer='0'>Sort by section then student</choice> |
<choice computer='0'>Sort by section then student</choice> |
<choice computer='1'>Sort by students across sections.</choice> |
<choice computer='1'>Sort by students across sections.</choice> |
</choices> |
</choices> |
|
<message><br /><hr /><br /></message> |
|
<student multichoice='1' variable="STUDENTS" nextstate="SELECT_RESOURCES" coursepersonnel="1" /> |
|
|
$resource_selector |
|
</state> |
</state> |
|
$resource_selector |
CHOOSE_STUDENTS1 |
CHOOSE_STUDENTS1 |
|
|
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON2); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON2); |
<state name="CHOOSE_ANON2" title="Select Students and Resources"> |
<state name="CHOOSE_ANON2" title="Select CODEd Assignments"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>SELECT_RESOURCES</nextstate> |
<message><table><tr><td><b>Number of anonymous assignments to print?</b></td><td></message> |
<message><h4>Fill out one of the forms below</h4></message> |
|
<message><br /><hr /> <br /></message> |
|
<message><h3>Generate new CODEd Assignments</h3></message> |
|
<message><table><tr><td><b>Number of CODEd assignments to print:</b></td><td></message> |
<string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5"> |
<string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5"> |
<validator> |
<validator> |
if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) && |
if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) && |
Line 2287 CHOOSE_STUDENTS1
|
Line 2747 CHOOSE_STUDENTS1
|
</validator> |
</validator> |
</string> |
</string> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
<message><b>Value of CODE to print?</b></td><td></message> |
<message><b>Names to save the CODEs under for later:</b></message> |
<string variable="SINGLE_CODE" size="10" defaultvalue="zzzz"> |
<message></td><td></message> |
|
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Bubble sheet type:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_OPTION" multichoice="0" allowempty="0"> |
|
$codechoice |
|
</dropdown> |
|
<message></td></tr><tr><td></table></message> |
|
<message><br /><hr /><h3>Print a Specific CODE </h3><br /><table></message> |
|
<message><tr><td><b>Enter a CODE to print:</b></td><td></message> |
|
<string variable="SINGLE_CODE" size="10"> |
<validator> |
<validator> |
if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} && |
if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} && |
!\$helper->{'VARS'}{'REUSE_OLD_CODES'} && |
!\$helper->{'VARS'}{'REUSE_OLD_CODES'} && |
Line 2301 CHOOSE_STUDENTS1
|
Line 2772 CHOOSE_STUDENTS1
|
</validator> |
</validator> |
</string> |
</string> |
<message></td></tr><tr><td></message> |
<message></td></tr><tr><td></message> |
<message><b>Choose single code from list</b></message> |
$code_selection |
<message></td><td></message> |
|
<dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0"> |
|
$code_selection |
|
</dropdown> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Names to store the CODEs under for later:</b></message> |
|
<message></td><td></message> |
|
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Bubble sheet type:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_OPTION" multichoice="0" allowempty="0"> |
|
$codechoice |
|
</dropdown> |
|
<message></td></tr></table></message> |
<message></td></tr></table></message> |
<message><hr width='33%' /></message> |
<message><hr /><h3>Reprint a Set of Saved CODEs</h3><table><tr><td></message> |
<message><b>Reprint a set of saved CODEs:</b></message> |
<message><b>Select saved CODEs:</b></message> |
|
<message></td><td></message> |
<dropdown variable="REUSE_OLD_CODES"> |
<dropdown variable="REUSE_OLD_CODES"> |
$namechoice |
$namechoice |
</dropdown> |
</dropdown> |
<message><hr width='33%' /></message> |
<message></td></tr></table></message> |
$resource_selector |
|
</state> |
</state> |
|
$resource_selector |
CHOOSE_ANON2 |
CHOOSE_ANON2 |
} |
} |
|
|
# FIXME: That RE should come from a library somewhere. |
# FIXME: That RE should come from a library somewhere. |
if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $perm{'pav'} and $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/') { |
if (($perm{'pav'} |
push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from current subdirectory')." <b><i>$subdir</i></b>", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; |
&& $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/' |
|
&& (defined($helper->{'VARS'}->{'construction'}) |
|
|| |
|
(&Apache::lonnet::allowed('bre',$subdir) eq 'F' |
|
&& |
|
$helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/) |
|
)) |
|
&& $helper->{VARS}->{'assignment'} eq "" |
|
) { |
|
|
my $f = '$filename'; |
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']; |
my $xmlfrag = <<CHOOSE_FROM_SUBDIR; |
my $xmlfrag = <<CHOOSE_FROM_SUBDIR; |
<state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$subdir</small></b> to print"> |
<state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$pretty_dir</small></b> to print"> |
<message>(mark them then click "next" button) <br /></message> |
|
<files variable="FILES" multichoice='1'> |
<files variable="FILES" multichoice='1'> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filechoice>return '$subdir';</filechoice> |
<filechoice>return '$subdir';</filechoice> |
Line 2355 CHOOSE_FROM_SUBDIR
|
Line 2822 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'}) { |
if (!$helper->{VARS}->{'construction'} && !$is_published) { |
push @$printChoices, ["<b>Resources</b> from <b>selected sequence</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 2371 CHOOSE_FROM_SUBDIR
|
Line 2838 CHOOSE_FROM_SUBDIR
|
<valuefunc>return $urlValue;</valuefunc> |
<valuefunc>return $urlValue;</valuefunc> |
<choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0); |
<choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0); |
</choicefunc> |
</choicefunc> |
<option text='Newpage' variable='FINISHPAGE' /> |
|
</resource> |
</resource> |
</state> |
</state> |
<state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print"> |
<state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print"> |
Line 2379 CHOOSE_FROM_SUBDIR
|
Line 2845 CHOOSE_FROM_SUBDIR
|
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
closeallpages="1"> |
closeallpages="1"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filterfunc>return $isProblem</filterfunc> |
<filterfunc>return $isNotMap</filterfunc> |
<mapurl evaluate='1'>return '$escapedSequenceName';</mapurl> |
<mapurl evaluate='1'>return '$escapedSequenceName';</mapurl> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
<option text='Newpage' variable='FINISHPAGE' /> |
$start_new_option |
</resource> |
</resource> |
</state> |
</state> |
CHOOSE_FROM_ANY_SEQUENCE |
CHOOSE_FROM_ANY_SEQUENCE |
Line 2403 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2869 CHOOSE_FROM_ANY_SEQUENCE
|
|
|
if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or |
if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or |
($helper->{VARS}->{'construction'} eq '1')) { |
($helper->{VARS}->{'construction'} eq '1')) { |
addMessage("<hr width='33%' /><table><tr><td align='right'>Print: </td><td>"); |
addMessage("<hr width='33%' /><table><tr><td align='right'>". |
|
'<label for="ANSWER_TYPE_forminput">'. |
|
&mt('Print'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'ANSWER_TYPE'; |
$paramHash->{'variable'} = 'ANSWER_TYPE'; |
$helper->declareVar('ANSWER_TYPE'); |
$helper->declareVar('ANSWER_TYPE'); |
Line 2419 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2888 CHOOSE_FROM_ANY_SEQUENCE
|
|
|
if ($perm{'pav'}) { |
if ($perm{'pav'}) { |
if (!$startedTable) { |
if (!$startedTable) { |
addMessage("<hr width='33%' /><table><tr><td align='right'>LaTeX mode: </td><td>"); |
addMessage("<hr width='33%' /><table><tr><td align='right'>". |
|
'<label for="LATEX_TYPE_forminput">'. |
|
&mt('LaTeX mode'). |
|
"</label>: </td><td>"); |
$startedTable = 1; |
$startedTable = 1; |
} else { |
} else { |
addMessage("<tr><td align='right'>LaTeX mode: </td><td>"); |
addMessage("<tr><td align='right'>". |
|
'<label for="LATEX_TYPE_forminput">'. |
|
&mt('LaTeX mode'). |
|
"</label>: </td><td>"); |
} |
} |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
Line 2438 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2913 CHOOSE_FROM_ANY_SEQUENCE
|
} |
} |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
|
|
addMessage("</td></tr><tr><td align='right'>Print Table of Contents: </td><td>"); |
addMessage("</td></tr><tr><td align='right'>". |
|
'<label for="TABLE_CONTENTS_forminput">'. |
|
&mt('Print Table of Contents'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'TABLE_CONTENTS'; |
$paramHash->{'variable'} = 'TABLE_CONTENTS'; |
$helper->declareVar('TABLE_CONTENTS'); |
$helper->declareVar('TABLE_CONTENTS'); |
Line 2449 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2927 CHOOSE_FROM_ANY_SEQUENCE
|
addMessage("</td></tr>"); |
addMessage("</td></tr>"); |
|
|
if (not $helper->{VARS}->{'construction'}) { |
if (not $helper->{VARS}->{'construction'}) { |
addMessage("<tr><td align='right'>Print Index: </td><td>"); |
addMessage("<tr><td align='right'>". |
|
'<label for="TABLE_INDEX_forminput">'. |
|
&mt('Print Index'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'TABLE_INDEX'; |
$paramHash->{'variable'} = 'TABLE_INDEX'; |
$helper->declareVar('TABLE_INDEX'); |
$helper->declareVar('TABLE_INDEX'); |
Line 2458 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2939 CHOOSE_FROM_ANY_SEQUENCE
|
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
addMessage("</td></tr>"); |
addMessage("</td></tr>"); |
addMessage("<tr><td align='right'>Print Discussions: </td><td>"); |
addMessage("<tr><td align='right'>". |
|
'<label for="PRINT_DISCUSSIONS_forminput">'. |
|
&mt('Print Discussions'). |
|
"</label>: </td><td>"); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS'; |
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS'; |
$helper->declareVar('PRINT_DISCUSSIONS'); |
$helper->declareVar('PRINT_DISCUSSIONS'); |
Line 2479 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2963 CHOOSE_FROM_ANY_SEQUENCE
|
} |
} |
|
|
if ($helper->{'VARS'}->{'construction'}) { |
if ($helper->{'VARS'}->{'construction'}) { |
my $stylevalue=$env{'construct.style'}; |
my $stylevalue='$Apache::lonnet::env{"construct.style"}'; |
|
my $randseedtext=&mt("Use random seed"); |
|
my $stylefiletext=&mt("Use style file"); |
|
my $selectfiletext=&mt("Select style file"); |
|
|
my $xmlfrag .= <<"RNDSEED"; |
my $xmlfrag .= <<"RNDSEED"; |
<message><tr><td align='right'>Use random seed: </td><td></message> |
<message><tr><td align='right'> |
|
<label for="curseed_forminput">$randseedtext</label>: |
|
</td><td></message> |
<string variable="curseed" size="15" maxlength="15"> |
<string variable="curseed" size="15" maxlength="15"> |
<defaultvalue> |
<defaultvalue> |
return $helper->{VARS}->{'curseed'}; |
return $helper->{VARS}->{'curseed'}; |
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
<message></td></tr><tr><td align="right">Use style file:</td><td></message> |
<message></td></tr><tr><td align="right"> |
<message><input type="text" size="40" name="style_file_value" value="$stylevalue" /> <a href="javascript:openbrowser('helpform','style_file','sty')">Select style file</a> </td><tr><td></message> |
<label for="style_file">$stylefiletext</label>: |
|
</td><td></message> |
|
<string variable="style_file" size="40"> |
|
<defaultvalue> |
|
return $stylevalue; |
|
</defaultvalue> |
|
</string><message> <a href="javascript:openbrowser('helpform','style_file_forminput','sty')">$selectfiletext</a> </td></tr><tr><td></td><td align="left"></message> |
<choices allowempty="1" multichoice="true" variable="showallfoils"> |
<choices allowempty="1" multichoice="true" variable="showallfoils"> |
<choice computer="1">Show all foils?</choice> |
<choice computer="1">Show all foils</choice> |
</choices> |
</choices> |
<message></td></tr></message> |
<message></td></tr></message> |
RNDSEED |
RNDSEED |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
$helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'}; |
|
|
|
} |
} |
} |
} |
|
|
Line 2517 RNDSEED
|
Line 3011 RNDSEED
|
|
|
$helper->process(); |
$helper->process(); |
|
|
|
|
# MANUAL BAILOUT CONDITION: |
# MANUAL BAILOUT CONDITION: |
# If we're in the "final" state, bailout and return to handler |
# If we're in the "final" state, bailout and return to handler |
if ($helper->{STATE} eq 'FINAL') { |
if ($helper->{STATE} eq 'FINAL') { |
Line 2600 sub render {
|
Line 3095 sub render {
|
my $PageLayout=&mt('Page layout'); |
my $PageLayout=&mt('Page layout'); |
my $NumberOfColumns=&mt('Number of columns'); |
my $NumberOfColumns=&mt('Number of columns'); |
my $PaperType=&mt('Paper type'); |
my $PaperType=&mt('Paper type'); |
|
my $landscape=&mt('Landscape'); |
|
my $portrait=&mt('Portrait'); |
$result .= <<STATEHTML; |
$result .= <<STATEHTML; |
|
|
<hr width="33%" /> |
<hr width="33%" /> |
Line 2611 sub render {
|
Line 3108 sub render {
|
</tr> |
</tr> |
<tr> |
<tr> |
<td> |
<td> |
<label><input type="radio" name="${var}.layout" value="L" /> Landscape </label><br /> |
<label><input type="radio" name="${var}.layout" value="L" /> $landscape </label><br /> |
<label><input type="radio" name="${var}.layout" value="P" checked='1' /> Portrait </label> |
<label><input type="radio" name="${var}.layout" value="P" checked='1' /> $portrait </label> |
</td> |
</td> |
<td align="center"> |
<td align="center"> |
<select name="${var}.cols"> |
<select name="${var}.cols"> |
Line 2707 sub new {
|
Line 3204 sub new {
|
# $helper->{VARS} to figure out whether the columns are one or two |
# $helper->{VARS} to figure out whether the columns are one or two |
$self->{'formatvar'} = shift; |
$self->{'formatvar'} = shift; |
|
|
# The state to transition to after selection, or after discovering |
|
# the cols are not set to 1 |
|
$self->{NEXTSTATE} = shift; |
$self->{NEXTSTATE} = shift; |
bless($self); |
bless($self); |
|
|
return $self; |
return $self; |
} |
} |
|
|
Line 2720 sub render {
|
Line 3217 sub render {
|
my $result = ''; |
my $result = ''; |
my $var = $self->{'variable'}; |
my $var = $self->{'variable'}; |
|
|
|
|
|
|
if (defined $self->{ERROR_MSG}) { |
if (defined $self->{ERROR_MSG}) { |
$result .= '<br /><font color="#FF0000">' . $self->{ERROR_MSG} . '</font><br />'; |
$result .= '<br /><span class="LC_error">' . $self->{ERROR_MSG} . '</span><br />'; |
} |
} |
|
|
|
my $format = $helper->{VARS}->{$self->{'formatvar'}}; |
|
|
|
# Use format to get sensible defaults for the margins: |
|
|
|
|
|
my ($laystyle, $cols, $papersize) = split(/\|/, $format); |
|
($papersize) = split(/ /, $papersize); |
|
|
|
|
|
if ($laystyle eq 'L') { |
|
$laystyle = 'album'; |
|
} else { |
|
$laystyle = 'book'; |
|
} |
|
|
|
|
|
my %size; |
|
($size{'width_and_units'}, |
|
$size{'height_and_units'}, |
|
$size{'margin_and_units'})= |
|
&Apache::lonprintout::page_format($papersize, $laystyle, $cols); |
|
|
|
foreach my $dimension ('width','height','margin') { |
|
($size{$dimension},$size{$dimension.'_unit'}) = |
|
split(/ +/, $size{$dimension.'_and_units'},2); |
|
|
|
foreach my $unit ('cm','in') { |
|
$size{$dimension.'_options'} .= '<option '; |
|
if ($size{$dimension.'_unit'} eq $unit) { |
|
$size{$dimension.'_options'} .= 'selected="selected" '; |
|
} |
|
$size{$dimension.'_options'} .= '>'.$unit.'</option>'; |
|
} |
|
} |
|
|
|
# Adjust margin for LaTeX margin: .. requires units == cm or in. |
|
|
|
if ($size{'margin_unit'} eq 'in') { |
|
$size{'margin'} += 1; |
|
} else { |
|
$size{'margin'} += 2.54; |
|
} |
|
my %text = ('format' => 'How should each column be formatted?', |
|
'width' => 'Width:', |
|
'height' => 'Height:', |
|
'margin' => 'Left Margin:',); |
|
%text = &Apache::lonlocal::texthash(%text); |
|
|
$result .= <<ELEMENTHTML; |
$result .= <<ELEMENTHTML; |
|
|
<p>How should the 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='18' 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'> |
<option>cm</option><option>in</option> |
$size{'width_options'} |
</select> |
</select> |
</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="25.9" 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'> |
<option>cm</option><option>in</option> |
$size{'height_options'} |
</select> |
</select> |
</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='-1.5' 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'> |
<option>cm</option><option>in</option> |
$size{'margin_options'} |
</select> |
</select> |
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
|
|
<p>Hint: Some instructors like to leave scratch space for the student by |
<!--<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> |
making the width much smaller than the width of the page.</p>--> |
|
|
ELEMENTHTML |
ELEMENTHTML |
|
|
return $result; |
return $result; |
} |
} |
|
|
# If the user didn't select 1 column, skip this state. |
|
sub preprocess { |
sub preprocess { |
my $self = shift; |
my $self = shift; |
my $helper = Apache::lonhelper::getHelper(); |
my $helper = Apache::lonhelper::getHelper(); |
|
|
my $format = $helper->{VARS}->{$self->{'formatvar'}}; |
my $format = $helper->{VARS}->{$self->{'formatvar'}}; |
if (substr($format, 2, 1) ne '1') { |
|
$helper->changeState($self->{NEXTSTATE}); |
# If the user does not have 'pav' privilege, set default widths and |
|
# on to the next state right away. |
|
# |
|
if (!$perm{'pav'}) { |
|
my $var = $self->{'variable'}; |
|
my $format = $helper->{VARS}->{$self->{'formatvar'}}; |
|
|
|
my ($laystyle, $cols, $papersize) = split(/\|/, $format); |
|
($papersize) = split(/ /, $papersize); |
|
|
|
|
|
if ($laystyle eq 'L') { |
|
$laystyle = 'album'; |
|
} else { |
|
$laystyle = 'book'; |
|
} |
|
# Figure out some good defaults for the print out and set them: |
|
|
|
my %size; |
|
($size{'width'}, |
|
$size{'height'}, |
|
$size{'lmargin'})= |
|
&Apache::lonprintout::page_format($papersize, $laystyle, $cols); |
|
|
|
foreach my $dim ('width', 'height', 'lmargin') { |
|
my ($value, $units) = split(/ /, $size{$dim}); |
|
|
|
$helper->{VARS}->{"$var.".$dim} = $value; |
|
$helper->{VARS}->{"$var.".$dim.'unit'} = $units; |
|
|
|
} |
|
|
|
|
|
# Transition to the next state |
|
|
|
$helper->changeState($self->{NEXTSTATE}); |
} |
} |
|
|
return 1; |
return 1; |
Line 2796 sub postprocess {
|
Line 3378 sub postprocess {
|
# /^-?[0-9]+(\.[0-9]*)?$/ -> optional minus, at least on digit, followed |
# /^-?[0-9]+(\.[0-9]*)?$/ -> optional minus, at least on digit, followed |
# by an optional period, followed by digits, ending the string |
# by an optional period, followed by digits, ending the string |
|
|
if ($width !~ /^-?[0-9]+(\.[0-9]*)?$/) { |
if ($width !~ /^-?[0-9]*(\.[0-9]*)?$/) { |
$error .= "Invalid width; please type only a number.<br />\n"; |
$error .= "Invalid width; please type only a number.<br />\n"; |
} |
} |
if ($height !~ /^-?[0-9]+(\.[0-9]*)?$/) { |
if ($height !~ /^-?[0-9]*(\.[0-9]*)?$/) { |
$error .= "Invalid height; please type only a number.<br />\n"; |
$error .= "Invalid height; please type only a number.<br />\n"; |
} |
} |
if ($lmargin !~ /^-?[0-9]+(\.[0-9]*)?$/) { |
if ($lmargin !~ /^-?[0-9]*(\.[0-9]*)?$/) { |
$error .= "Invalid left margin; please type only a number.<br />\n"; |
$error .= "Invalid left margin; please type only a number.<br />\n"; |
|
} else { |
|
# Adjust for LaTeX 1.0 inch margin: |
|
|
|
if ($env{"form.${var}.lmarginunit"} eq "in") { |
|
$helper->{VARS}->{$var.'.lmargin'} = $lmargin - 1; |
|
} else { |
|
$helper->{VARS}->{$var.'.lmargin'} = $lmargin - 2.54; |
|
} |
} |
} |
|
|
if (!$error) { |
if (!$error) { |