--- loncom/interface/lonprintout.pm 2004/08/19 20:02:21 1.328
+++ loncom/interface/lonprintout.pm 2005/01/05 12:07:27 1.350
@@ -1,7 +1,7 @@
-# The LearningOnline Network
+# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.328 2004/08/19 20:02:21 albertel Exp $
+# $Id: lonprintout.pm,v 1.350 2005/01/05 12:07:27 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -41,13 +41,68 @@ use Apache::lonnavmaps;
use Apache::lonratedt;
use POSIX qw(strftime);
use Apache::lonlocal;
-use GDBM_File;
-
-my %hash;
my $LaTeXwidth = 0;
+# Compare two students by name. The students are in the form
+# returned by the helper:
+# user:domain:section:last, first:status
+# This is a helper function for the perl sort built-in therefore:
+# Implicit Inputs:
+# $a - The first element to compare (global)
+# $b - The second element to compare (global)
+# Returns:
+# -1 - $a < $b
+# 0 - $a == $b
+# +1 - $a > $b
+# Note that the initial comparison is done on the last names with the
+# first names only used to break the tie.
+#
+#
+sub compare_names {
+ # First split the names up into the primary fields.
+
+ my ($u1, $d1, $s1, $n1, $stat1) = split(/:/, $a);
+ my ($u2, $d2, $s2, $n2, $stat2) = split(/:/, $b);
+
+ # Now split the last name and first name of each n:
+ #
+
+ my ($l1,$f1) = split(/,/, $n1);
+ my ($l2,$f2) = split(/,/, $n2);
+
+ # We don't bother to remove the leading/trailing whitespace from the
+ # firstname, unless the last names compare identical.
+
+ if($l1 lt $l2) {
+ return -1;
+ }
+ if($l1 gt $l2) {
+ return 1;
+ }
+
+ # Break the tie on the first name, but there are leading (possibly trailing
+ # whitespaces to get rid of first
+ #
+ $f1 =~ s/^\s+//; # Remove leading...
+ $f1 =~ s/\s+$//; # Trailing spaces from first 1...
+
+ $f2 =~ s/^\s+//;
+ $f2 =~ s/\s+$//; # And the same for first 2...
+
+ if($f1 lt $f2) {
+ return -1;
+ }
+ if($f1 gt $f2) {
+ return 1;
+ }
+
+ # Must be the same name.
+
+ return 0;
+}
+
sub latex_header_footer_remove {
my $text = shift;
$text =~ s/\\end{document}//;
@@ -229,7 +284,7 @@ sub character_chart {
$result =~ s/&(\#219|Ucirc);/\\^{U}/g;
$result =~ s/&(\#220|Uuml);/\\\"{U}/g;
$result =~ s/&(\#221|Yacute);/\\\'{Y}/g;
- $result =~ s/&(\#223|szlig);/\\ss/g;
+ $result =~ s/&(\#223|szlig);/{\\ss}/g;
$result =~ s/&(\#224|agrave);/\\\`{a}/g;
$result =~ s/&(\#225|aacute);/\\\'{a}/g;
$result =~ s/&(\#226|acirc);/\\^{a}/g;
@@ -377,11 +432,11 @@ sub character_chart {
my %page_formats=
('letter' => {
'book' => {
- '1' => [ '7.1 in','10.2 in', '-0.57 in','-0.57 in','0 in'],
- '2' => ['3.66 in','10.2 in', '-0.57 in','-0.57 in','0 in']
+ '1' => [ '7.1 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.7 cm']
},
'album' => {
- '1' => [ '8.8 in', '6.8 in','-40 pt in', '-60 pt','0 in'],
+ '1' => [ '8.8 in', '6.8 in','-40 pt in', '-60 pt','1 cm'],
'2' => [ '4.4 in', '6.8 in','-0.5 in', '-1.5 in','3.5 in']
},
},
@@ -519,12 +574,12 @@ sub page_format_transformation {
$fancypagestatement="\\rhead{}\\chead{}\\lhead{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}";
}
if ($layout eq 'album') {
- $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1} /;
+ $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 /;
} elsif ($layout eq 'book') {
if ($choice ne 'All class print') {
- $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
+ $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/;
} else {
- $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1} \\vskip 5 mm /;
+ $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /;
}
if ($papersize eq 'a4') {
$text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/;
@@ -554,9 +609,11 @@ sub page_cleanup {
sub details_for_menu {
-
- my $name_of_resourse = &Apache::lonnet::gettitle($ENV{'form.postdata'});
- my $symbolic = &Apache::lonnet::symbread($ENV{'form.postdata'});
+ my ($helper)=@_;
+ my $postdata=$ENV{'form.postdata'};
+ if (!$postdata) { $postdata=$helper->{VARS}{'postdata'}; }
+ my $name_of_resource = &Apache::lonnet::gettitle($postdata);
+ my $symbolic = &Apache::lonnet::symbread($postdata);
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($symbolic);
$map=&Apache::lonnet::clutter($map);
my $name_of_sequence = &Apache::lonnet::gettitle($map);
@@ -569,8 +626,7 @@ sub details_for_menu {
$ENV{'request.course.uri'} =~ m|([^/]+)$|;
$name_of_map = $1;
}
- return ($name_of_resourse,$name_of_sequence,$name_of_map);
-
+ return ($name_of_resource,$name_of_sequence,$name_of_map);
}
@@ -645,22 +701,23 @@ sub print_latex_header {
if ($mode eq 'batchmode') {
$output.='\batchmode';
}
- $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'.
- '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'.
- '\usepackage[dvips]{graphicx}\usepackage{epsfig}\usepackage{calc}'.
- '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'.
- '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'.
- '\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'.
- '\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}'.
- '\setlength{\abovedisplayshortskip}{-0.04in}'.
- '\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'.
- '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large'.
- '\textbf{Index}} \newline \setlength{\rightmargin}{0in}'.
- '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}'.
- '\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}'.
- '\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}'.
- '\setlength{\abovedisplayshortskip}{-0.04in}'.
- '\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}\begin{document}';
+ $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n".
+ '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n".
+ '\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n".
+ '\usepackage{picins}\usepackage{calc}'."\n".
+ '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n".
+ '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n".
+ '\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'."\n".
+ '\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}'."\n".
+ '\setlength{\abovedisplayshortskip}{-0.04in}'."\n".
+ '\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'."\n".
+ '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large'."\n".
+ '\textbf{Index}} \newline \setlength{\rightmargin}{0in}'."\n".
+ '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}'."\n".
+ '\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}'."\n".
+ '\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}'."\n".
+ '\setlength{\abovedisplayshortskip}{-0.04in}'."\n".
+ '\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}\begin{document}'."\n";
return $output;
}
@@ -690,11 +747,11 @@ sub path_to_problem {
sub recalcto_mm {
my $textwidth=shift;
my $LaTeXwidth;
- if ($textwidth=~/(\d+\.?\d*)\s*cm/) {
+ if ($textwidth=~/(-?\d+\.?\d*)\s*cm/) {
$LaTeXwidth = $1*10;
- } elsif ($textwidth=~/(\d+\.?\d*)\s*mm/) {
+ } elsif ($textwidth=~/(-?\d+\.?\d*)\s*mm/) {
$LaTeXwidth = $1;
- } elsif ($textwidth=~/(\d+\.?\d*)\s*in/) {
+ } elsif ($textwidth=~/(-?\d+\.?\d*)\s*in/) {
$LaTeXwidth = $1*25.4;
}
$LaTeXwidth.=' mm';
@@ -782,22 +839,24 @@ ENDPART
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {
#-- single document - problem, page, html, xml, ...
- my $currentURL;
+ my ($currentURL,$cleanURL);
if ($helper->{'VARS'}->{'construction'} ne '1') {
#prints published resource
$currentURL=$helper->{'VARS'}->{'postdata'};
+ $cleanURL=&Apache::lonenc::check_decrypt($currentURL);
} else {
#prints resource from the construction space
$currentURL='/'.$helper->{'VARS'}->{'filename'};
if ($currentURL=~/([^?]+)/) {$currentURL=$1;}
+ $cleanURL=$currentURL;
}
$selectionmade = 1;
- if ($currentURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+ if ($cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
my $rndseed=time;
my $texversion='';
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') {
my %moreenv;
- $moreenv{'request.filename'}=$currentURL;
+ $moreenv{'request.filename'}=$cleanURL;
if ($helper->{'VARS'}->{'style_file'}=~/\w/) {
$moreenv{'construct.style'}=$helper->{'VARS'}->{'style_file'};
my $dom = $ENV{'user.domain'};
@@ -837,10 +896,10 @@ ENDPART
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
if ($helper->{'VARS'}->{'construction'} ne '1') {
$texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}).'}\vskip 0 mm ';
- $texversion.=&path_to_problem ($currentURL,$LaTeXwidth);
+ $texversion.=&path_to_problem($cleanURL,$LaTeXwidth);
} else {
$texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm ';
- my $URLpath=$currentURL;
+ my $URLpath=$cleanURL;
$URLpath=~s/~([^\/]+)/public_html\/$1\/$1/;
$texversion.=&path_to_problem ($URLpath,$LaTeXwidth);
}
@@ -919,7 +978,7 @@ ENDPART
}
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
$result .= '\end{document}';
- } elsif ($currentURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
+ } elsif ($cleanURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
my %form;
$form{'grade_target'}='tex';
$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
@@ -955,10 +1014,22 @@ ENDPART
my $flag_latex_header_remove = 'NO';
my $flag_page_in_sequence = 'NO';
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
+ my @page_breaks = split /\|\|\|/, $helper->{'VARS'}->{'FINISHPAGE'};
+ my $page_index = 0;
my $prevassignment='';
&Apache::lonnet::delenv('form.counter');
&Apache::lonxml::init_counter();
for (my $i=0;$i<=$#master_seq;$i++) {
+
+ # Note due to document structure, not allowed to put \newpage
+ # prior to the first resource
+
+ if (($master_seq[$i] eq $page_breaks[$page_index])) {
+ $page_index++;
+ if($i != 0) {
+ $result.="\\newpage\n";
+ }
+ }
my (undef,undef,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
$urlp=&Apache::lonnet::clutter($urlp);
$form{'symb'}=$master_seq[$i];
@@ -966,7 +1037,6 @@ ENDPART
my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #tittle of the assignment which contains this problem
if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}
if ($i==0) {$prevassignment=$assignment;}
- #&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]");
my $texversion='';
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
$texversion.=&Apache::lonnet::ssi($urlp,%form);
@@ -1015,7 +1085,7 @@ ENDPART
my $courseidinfo = &get_course();
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
$prevassignment=$assignment;
- $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm ';
+ $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip 5 mm ';
}
$result .= $texversion;
$flag_latex_header_remove = 'YES';
@@ -1043,9 +1113,12 @@ ENDPART
$result .= $texversion;
$flag_latex_header_remove = 'YES';
}
+ if (&Apache::loncommon::connection_aborted($r)) { last; }
}
&Apache::lonnet::delenv('form.counter');
- if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}
+ if ($flag_page_in_sequence eq 'YES') {
+ $result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;
+ }
$result .= '\end{document}';
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){
@@ -1059,20 +1132,33 @@ ENDPART
$type='resources';
}
my @students=split /\|\|\|/, $helper->{'VARS'}->{'STUDENTS'};
+ # The normal sort order is by section then by students within the
+ # section. If the helper var student_sort is 1, then the user has elected
+ # to override this and output the students by name.
+ # Each element of the students array is of the form:
+ # username:domain:section:last, first:status
+ #
+ #
+ if ($helper->{'VARS'}->{'student_sort'} eq 1) {
+ @students = sort compare_names @students;
+ }
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' ||
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) {
$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1;
}
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
+
#loop over students
my $flag_latex_header_remove = 'NO';
my %moreenv;
+ $moreenv{'instructor_comments'}='hide';
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
$moreenv{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'};
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 $student_counter=-1;
foreach my $person (@students) {
+
my $duefile="/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.due";
if (-e $duefile) {
my $temp_file = Apache::File->new('>>'.$duefile);
@@ -1085,6 +1171,7 @@ ENDPART
$student_names[$i].=$person.':'.$fullname.'_END_';
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname);
$flag_latex_header_remove = 'YES';
+ if (&Apache::loncommon::connection_aborted($r)) { last; }
}
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= $print_array[0].' \end{document}';
@@ -1095,20 +1182,13 @@ ENDPART
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'};
my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'};
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'};
- my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
- my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'});
- my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'};
- if ($number_per_page eq '0' || $number_per_page eq 'all') {
- $number_per_page=$num_todo;
- }
- my $flag_latex_header_remove = 'NO';
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');
my $seed=time+($$<<16)+($$);
my @allcodes;
if ($old_name) {
my %result=&Apache::lonnet::get('CODEs',[$old_name],$cdom,$cnum);
@allcodes=split(',',$result{$old_name});
+ $num_todo=scalar(@allcodes);
} else {
my %allcodes;
srand($seed);
@@ -1122,6 +1202,14 @@ ENDPART
}
@allcodes=keys(%allcodes);
}
+ my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
+ my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'});
+ my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'};
+ if ($number_per_page eq '0' || $number_per_page eq 'all') {
+ $number_per_page=$num_todo;
+ }
+ my $flag_latex_header_remove = 'NO';
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');
my $count=0;
foreach my $code (sort(@allcodes)) {
my $file_num=int($count/$number_per_page);
@@ -1134,6 +1222,7 @@ ENDPART
&mt('last assignment').' '.$fullname);
$flag_latex_header_remove = 'YES';
$count++;
+ if (&Apache::loncommon::connection_aborted($r)) { last; }
}
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= $print_array[0].' \end{document}';
@@ -1215,10 +1304,10 @@ ENDPART
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 ($numberofcolumns == 1) {
- $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/\\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/\\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/\\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'} /;
}
#-- writing .tex file in prtspool
my $temp_file;
@@ -1273,7 +1362,7 @@ ENDPART
my $URLback=''; #link to original document
if ($helper->{'VARS'}->{'construction'} ne '1') {
#prints published resource
- $URLback=$helper->{'VARS'}->{'postdata'};
+ $URLback=&Apache::lonnet::escape('/adm/flip?postdata=return:');
} else {
#prints resource from the construction space
$URLback='/'.$helper->{'VARS'}->{'filename'};
@@ -1336,11 +1425,25 @@ sub print_resources {
$namepostfix="\\\\Name: ";
$fullname = "CODE - ".$moreenv->{'CODE'};
}
+ my @page_breaks = split /\|\|\|/,$helper->{'VARS'}->{'FINISHPAGE'};
+ my $page_index = 0;
+ my $i = 0;
#goes through all resources, checks if they are available for
#current student, and produces output
&Apache::lonnet::delenv('form.counter');
&Apache::lonxml::init_counter();
foreach my $curresline (@{$master_seq}) {
+ if ($curresline eq $page_breaks[$page_index]) {
+ #
+ # Due to document structure, we cannot put a
+ # page break prior to the first document
+ #
+ if($i != 0) {
+ $current_output.= "\\newpage\n";
+ }
+ $page_index++;
+ }
+ $i++;
if ( !($type eq 'problems' &&
($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library)$/)) ) {
my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline);
@@ -1355,10 +1458,9 @@ sub print_resources {
my $current_counter=$ENV{'form.counter'};
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
- my %form;
- $form{'answer_output_mode'}='tex';
- $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
- my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$ENV{'request.course.id'},%form);
+ $moreenv->{'answer_output_mode'}='tex';
+ $moreenv->{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+ my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$ENV{'request.course.id'},%{$moreenv});
&Apache::lonnet::appenv(('form.counter' => $current_counter));
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
$rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/;
@@ -1401,17 +1503,18 @@ sub print_resources {
}
$remove_latex_header = 'YES';
}
+ if (&Apache::loncommon::connection_aborted($r)) { last; }
}
my $courseidinfo = &get_course();
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection}
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
if ($current_output=~/\\documentclass/) {
- $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}}$courseidinfo \\hfill \\thepage \\\\ \\textit{$currentassignment}$namepostfix}\\vskip 3 mm /;
+ $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 /;
} else {
my $blankpages = '';
for (my $j=0;$j<$helper->{'VARS'}->{'EMPTY_PAGES'};$j++) {$blankpages.='\clearpage\strut\clearpage';}
- $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\\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;
}
return ($current_output,$fullname);
@@ -1452,6 +1555,9 @@ sub handler {
# }
# return OK;
+
+
+
&output_data($r,$helper,\%parmhash);
return OK;
}
@@ -1470,11 +1576,6 @@ use Data::Dumper;
sub printHelper {
my $r = shift;
- if ($ENV{'request.course.id'}) {
- my $fn=$ENV{'request.course.fn'};
- tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640);
- }
-
if ($r->header_only) {
if ($ENV{'browser.mathml'}) {
&Apache::loncommon::content_type($r,'text/xml');
@@ -1509,6 +1610,7 @@ sub printHelper {
$helper->declareVar('construction');
$helper->declareVar('assignment');
$helper->declareVar('style_file');
+ $helper->declareVar('student_sort');
# This will persistently load in the data we want from the
# very first screen.
@@ -1535,8 +1637,9 @@ sub printHelper {
$helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
}
-
- my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu;
+ $helper->{VARS}->{'symb'}=
+ &Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});
+ my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);
if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;}
@@ -1553,7 +1656,8 @@ sub printHelper {
0, rindex($helper->{VARS}->{'filename'}, '/') + 1);
} else {
($map, $id, $url) = &Apache::lonnet::decode_symb($symb);
- $helper->{VARS}->{'postdata'} = Apache::lonnet::clutter($url);
+ $helper->{VARS}->{'postdata'} =
+ &Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url));
if (!$resourceTitle) { # if the resource doesn't have a title, use the filename
my $postdata = $helper->{VARS}->{'postdata'};
@@ -1608,8 +1712,8 @@ sub printHelper {
my $isNotMap = '!$res->is_sequence()';
$isNotMap .= ' && !$res->randomout()' if !$userCanSeeHidden;
my $isMap = '$res->is_map()';
- my $symbFilter = '$res->symb()';
- my $urlValue = '$res->src()';
+ my $symbFilter = '$res->shown_symb()';
+ my $urlValue = '$res->link()';
$helper->declareVar('SEQUENCE');
@@ -1619,6 +1723,7 @@ sub printHelper {
# If we're in a sequence...
if (($helper->{'VARS'}->{'construction'} ne '1') &&
+
$helper->{VARS}->{'postdata'} &&
$helper->{VARS}->{'assignment'}) {
# Allow problems from sequence
@@ -1635,6 +1740,7 @@ sub printHelper {
return $isProblem;
$map
return $symbFilter;
+
@@ -1646,6 +1752,7 @@ sub printHelper {
return $isNotMap;
$map
return $symbFilter;
+
HELPERFRAGMENT
@@ -1657,6 +1764,7 @@ HELPERFRAGMENT
# problems in the course, optionally for selected students
if ($userPriviledged &&
($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {
+
push @{$printChoices}, ['Problems from entire course', 'all_problems', 'ALL_PROBLEMS'];
&Apache::lonxml::xmlparse($r, 'helper', <
@@ -1667,6 +1775,7 @@ HELPERFRAGMENT
return $isProblemOrMap;
return $isNotMap;
return $symbFilter;
+
ALL_PROBLEMS
@@ -1682,6 +1791,7 @@ ALL_PROBLEMS
return $isProblem;
$map
return $symbFilter;
+
How should the results be printed?
@@ -1697,6 +1807,10 @@ RESOURCE_SELECTOR
&Apache::lonxml::xmlparse($r, 'helper', <
+
+ Sort by section then student
+ Sort by students across sections.
+
$resource_selector
CHOOSE_STUDENTS
@@ -1705,7 +1819,7 @@ CHOOSE_STUDENTS
my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum);
my $namechoice='';
- foreach my $name (@names) {
+ foreach my $name (sort {uc($a) cmp uc($b)} @names) {
if ($name =~ /^error: 2 /) { next; }
$namechoice.=''.$name.'';
}
@@ -1740,6 +1854,7 @@ CHOOSE_ANON1
return $isNotMap;
$map
return $symbFilter;
+
How should the results be printed?
@@ -1755,6 +1870,11 @@ RESOURCE_SELECTOR
&Apache::lonxml::xmlparse($r, 'helper', <
+
+ Sort by section then student
+ Sort by students across sections.
+
+
$resource_selector
CHOOSE_STUDENTS1
@@ -1818,6 +1938,7 @@ CHOOSE_FROM_SUBDIR
CHOOSE_FROM_ANY_SEQUENCE
return \$res->is_sequence;
return $urlValue;
+
@@ -1828,6 +1949,7 @@ CHOOSE_FROM_SUBDIR
return $isProblem
return '$escapedSequenceName';
return $symbFilter;
+
CHOOSE_FROM_ANY_SEQUENCE
@@ -1959,9 +2081,7 @@ RNDSEED
$r->print($helper->display());
- Apache::lonhelper::unregisterHelperTags();
-
- untie %hash;
+ &Apache::lonhelper::unregisterHelperTags();
return OK;
}