--- loncom/interface/lonprintout.pm 2003/02/14 21:43:35 1.116
+++ loncom/interface/lonprintout.pm 2003/02/27 19:41:40 1.121
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.116 2003/02/14 21:43:35 sakharuk Exp $
+# $Id: lonprintout.pm,v 1.121 2003/02/27 19:41:40 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -202,7 +202,7 @@ sub sequence_content_menu {
}
}
-DDD=$#titles_master_seq $titles_master_seq[0]
+
@@ -238,6 +238,7 @@ sub problem_choice_menu {
$subdirtoprint =~ s/\/[^\/]+$//;
my @list_of_files = ();
my @content_directory = ();
+ $r->print("Subdir: " . $subdirtoprint . "
");
if ($subdirtoprint =~ m|/home/([^/]+)/public_html|) {
#localmachine CSTR space
my $user=$1;
@@ -381,11 +382,12 @@ ENDDISHEADER
}
}
$r->print(<
+Number of blank pages added to each student assignments to print these assignments on physically different sheets (requires manual addjustment):
@@ -611,7 +613,7 @@ ENDPART
foreach my $person (@students) {
my $current_output = '';
my ($usersection,$username,$userdomain) = split /:/,$person;
- my $fullname = &Apache::grades::get_fullname($username,$userdomain);
+ my $fullname = &Apache::grades::get_fullname($username,$userdomain);
#goes through all resources, checks if they are available for current student, and produces output
foreach my $curresline (@master_seq) {
my ($curres,$symb) = split /&&/, $curresline;
@@ -630,16 +632,17 @@ ENDPART
$flag_latex_header_remove = 'YES';
}
}
+ my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
if ($current_output=~/\\documentclass/) {
- my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{$courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}} \\begin{document}\\noindent\\textit{\\textbf{$fullname}}\\vskip 3 mm /;
+ $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\vskip 3 mm /;
} else {
my $blanspages = '';
for (my $j=0;$j<$ENV{'form.addedpages'};$j++) {$blanspages.='\clearpage\strut\clearpage';}
- $current_output = '\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 } \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\textit{\textbf{'.$fullname.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
+ $current_output = '\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 }\\newpage \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
}
$result .= $current_output;
- &Apache::lonnet::delenv('form.counter');
+ &Apache::lonnet::delenv('form.counter');
+ &Apache::lonxml::init_counter();
}
$result .= '\end{document}';
&Apache::lonnet::delenv('form.textwidth');
@@ -834,7 +837,6 @@ sub character_chart {
$result =~ s/&\#0?61;/\$=\$/g;
$result =~ s/&(\#0?62|gt|\#155);/\$>\$/g;
$result =~ s/&\#0?63;/\?/g;
-# $result =~ s/?64;//g;
$result =~ s/&\#0?65;/A/g;
$result =~ s/&\#0?66;/B/g;
$result =~ s/&\#0?67;/C/g;
@@ -924,8 +926,6 @@ sub character_chart {
$result =~ s/&(\#168|uml);/\\texthighdieresis /g;
$result =~ s/&(\#169|copy);/\\copyright /g;
$result =~ s/&(\#170|ordf);/\\textordfeminine /g;
-# $result =~ s/«//g;
-# $result =~ s/«//g;
$result =~ s/&(\#172|not);/\$\\neg\$/g;
$result =~ s/&(\#173|shy);/ - /g;
$result =~ s/&(\#174|reg);/\\textregistered /g;
@@ -941,8 +941,6 @@ sub character_chart {
$result =~ s/&(\#184|cedil);/\\c{\\strut}/g;
$result =~ s/&(\#185|sup1);/\$^1\$/g;
$result =~ s/&(\#186|ordm);/\\textordmasculine /g;
-# $result =~ s/»//g;
-# $result =~ s/»//g;
$result =~ s/&(\#188|frac14);/\\textonequarter /g;
$result =~ s/&(\#189|frac12);/\\textonehalf /g;
$result =~ s/&(\#190|frac34);/\\textthreequarters /g;
@@ -963,8 +961,6 @@ sub character_chart {
$result =~ s/&(\#205|Iacute);/\\\'{I}/g;
$result =~ s/&(\#206|Icirc);/\\^{I}/g;
$result =~ s/&(\#207|Iuml);/\\\"{I}/g;
-# $result =~ s/Ð//g;
-# $result =~ s/Ð//g;
$result =~ s/&(\#209|Ntilde);/\\~{N}/g;
$result =~ s/&(\#210|Ograve);/\\\`{O}/g;
$result =~ s/&(\#211|Oacute);/\\\'{O}/g;
@@ -978,8 +974,6 @@ sub character_chart {
$result =~ s/&(\#219|Ucirc);/\\^{U}/g;
$result =~ s/&(\#220|Uuml);/\\\"{U}/g;
$result =~ s/&(\#221|Yacute);/\\\'{Y}/g;
-# $result =~ s/Þ//g;
-# $result =~ s/Þ//g;
$result =~ s/&(\#223|szlig);/\\ss/g;
$result =~ s/&(\#224|agrave);/\\\`{a}/g;
$result =~ s/&(\#225|aacute);/\\\'{a}/g;
@@ -1011,10 +1005,44 @@ sub character_chart {
$result =~ s/&(\#251|ucirc);/\\^{u}/g;
$result =~ s/&(\#252|uuml);/\\\"{u}/g;
$result =~ s/&(\#253|yacute);/\\\'{y}/g;
-# $result =~ s/þ//g;
-# $result =~ s/þ//g;
$result =~ s/&(\#255|yuml);/\\\"{y}/g;
$result =~ s/&\#952;/\$\\theta\$/g;
+#Greek Alphabet
+ $result =~ s/&(alpha|\#945);/\$\\alpha \$/g;
+ $result =~ s/&(beta|\#946);/\$\\beta \$/g;
+ $result =~ s/&(gamma|\#947);/\$\\gamma \$/g;
+ $result =~ s/&(delta|\#948);/\$\\delta \$/g;
+ $result =~ s/&(epsilon|\#949);/\$\\epsilon \$/g;
+ $result =~ s/&(zeta|\#950);/\$\\zeta \$/g;
+ $result =~ s/&(eta|\#951);/\$\\eta \$/g;
+ $result =~ s/&(theta|\#952);/\$\\theta \$/g;
+ $result =~ s/&(iota|\#953);/\$\\iota \$/g;
+ $result =~ s/&(kappa|\#954);/\$\\kappa \$/g;
+ $result =~ s/&(lambda|\#955);/\$\\lambda \$/g;
+ $result =~ s/&(mu|\#956);/\$\\mu \$/g;
+ $result =~ s/&(nu|\#957);/\$\\nu \$/g;
+ $result =~ s/&(xi|\#958);/\$\\xi \$/g;
+ $result =~ s/&(pi|\#960);/\$\\pi \$/g;
+ $result =~ s/&(rho|\#961);/\$\\rho \$/g;
+ $result =~ s/&(sigma|\#963);/\$\\sigma \$/g;
+ $result =~ s/&(tau|\#964);/\$\\tau \$/g;
+ $result =~ s/&(upsilon|\#965);/\$\\upsilon \$/g;
+ $result =~ s/&(phi|\#966);/\$\\phi \$/g;
+ $result =~ s/&(chi|\#967);/\$\\chi \$/g;
+ $result =~ s/&(psi|\#968);/\$\\psi \$/g;
+ $result =~ s/&(omega|\#969);/\$\\omega \$/g;
+ $result =~ s/&(Gamma|\#915);/\$\\Gamma \$/g;
+ $result =~ s/&(Delta|\#916);/\$\\Delta \$/g;
+ $result =~ s/&(Theta|\#920);/\$\\Theta \$/g;
+ $result =~ s/&(Lambda|\#923);/\$\\Lambda \$/g;
+ $result =~ s/&(Xi|\#926);/\$\\Xi \$/g;
+ $result =~ s/&(Pi|\#928);/\$\\Pi \$/g;
+ $result =~ s/&(Sigma|\#931);/\$\\Sigma \$/g;
+ $result =~ s/&(Upsilon|\#933);/\$\\Upsilon \$/g;
+ $result =~ s/&(Phi|\#934);/\$\\Phi \$/g;
+ $result =~ s/&(Psi|\#936);/\$\\Psi \$/g;
+ $result =~ s/&(Omega|\#937);/\$\\Omega \$/g;
+
return $result;
}
@@ -1104,7 +1132,8 @@ sub page_format_transformation {
if ($choice ne 'All class print') {
$text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$firstname $lastname} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
} else {
- $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1} \\vskip 5 mm /;
+ $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\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 /;
+
}
}
return $text;
@@ -1188,11 +1217,8 @@ sub handler {
my $r = shift;
- # not sure where the form.* was getting processed.
- Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING});
-
# A hook for me to work without disturbing Alex.
- if ($ENV{'form.jeremy'}) {
+ if (!$ENV{'form.jeremy'}) {
printWizard($r);
return OK;
}
@@ -1282,29 +1308,66 @@ sub printWizard {
my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu;
- my $wizard = Apache::lonwizard->new("Printing Wizard");
+ my $wizard = Apache::lonwizard->new("Printing Wizard", $ENV{QUERY_STRING});
# PRINT_TYPE: What the user wants to print (current docs,
# whole sequence, etc.
- $wizard->declareVars(['PRINT_TYPE']);
+ $wizard->declareVars(['PRINT_TYPE', 'FORMAT', 'postdata', 'url',
+ 'symb', 'RESOURCES', 'FILES', 'STUDENTS']);
+
+ # Extract map
+ my $symb = $wizard->{VARS}->{'symb'};
+ my ($map, $id, $url) = split(/__/, $symb);
+
+ my $subdir = &Apache::lonnet::filelocation("", $ENV{'form.url'});
+
+ # "Delete everything after the last slash."
+ $subdir =~ s|/[^/]+$||;
+
+ # This really ought to be in some repository in loncommon or
+ # something where it can just be grabbed.
+ my $problemFilter = sub {
+ my $name = shift;
+ return $name =~ m/^[^\.]+\.(problem|exam|quiz|assess|survey|form|library)$/;
+ };
+
+ # What can be printed is a very dynamic decision based on
+ # lots of factors. So we need to dynamically build this list.
+ # To prevent security leaks, states are only added to the wizard
+ # if they can be reached, which ensures manipulating the querystring
+ # won't allow anyone to reach states they shouldn't have permission
+ # to reach.
+ my $printChoices = [];
+ # We can always print the current screen.
+ push @{$printChoices}, ['current_document', "$resourceTitle (exactly what was on the screen)", 'CHOOSE_FORMAT'];
+
+ if ($ENV{'form.postdata'}=~ /\/res\//) {
+ # Allow problems from sequence
+ push @{$printChoices}, ['map_problems', "Problems from $sequenceTitle", 'CHOOSE_PROBLEMS'];
+ Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS", 'Select Problems', "Select problems to print from $sequenceTitle:", '', 'CHOOSE_FORMAT', 'RESOURCES', sub {my $res = shift; return $res->is_problem()}, undef, $map);
+
+ # Allow all resources from sequence
+ push @{$printChoices}, ['map_problems_pages', "Problems and pages from $sequenceTitle", 'CHOOSE_PROBLEMS_HTML'];
+ Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS_HTML", 'Select Resources', "Select resources to print from $sequenceTitle:", '', "CHOOSE_FORMAT", 'RESOURCES', sub {my $res = shift; return !$res->is_map()}, undef, $map);
+ }
+
+ # If the user is priviledged, allow them to print all
+ # problems in the course, optionally for selected students
+ if (($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) and ($ENV{'form.postdata'}=~/\/res\//)) {
+ push @{$printChoices}, ['all_problems', 'All problems in course (may take a lot of time)', 'CHOOSE_FORMAT'];
+ push @{$printChoices}, ['problems_for_students', "Problems from $sequenceTitle for selected students", 'CHOOSE_STUDENTS'];
+ Apache::lonwizard::choose_student->new($wizard, "CHOOSE_STUDENTS", "Choose Students", "Select the students you wish to print the problems for:", '', 'CHOOSE_FORMAT', 'STUDENTS', 1);
+ }
+
+ # FIXME: That RE should come from a library somewhere.
+ if ((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($ENV{'form.postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) {
+ push @{$printChoices}, ['problems_from_directory', "Problems from $subdir", 'CHOOSE_FROM_SUBDIR'];
+ Apache::lonwizard::choose_files->new($wizard, "CHOOSE_FROM_SUBDIR", "Select Files","Select problems you wish to print from $subdir:", '', 'CHOOSE_FORMAT', 'FILES', $subdir, $problemFilter);
+ }
+
+ # Despite the appearance of states before here, this is the first state.
+ Apache::lonwizard::switch_state->new($wizard, "START", "Selecting Resources to Print", "PRINT_TYPE", $printChoices, "What do you want to print?");
+ Apache::lonprintout::page_format_state->new($wizard, "CHOOSE_FORMAT", "Page Format", "FORMAT");
- my $subdir = $ENV{'form.postdata'};
- $subdir =~ s|http://[^/]+||;
- $subdir =~ m/\/([^\/]+)$/;
- $subdir =~ s/\Q$1\E//;
-
- # This code also shows up above... which is prefered? Is one
- # right for this context?
- #my $subdir = &Apache::lonnet::filelocation("",$ENV{'form.url'});
- #$subdir =~ s/\/[^\/]+$//;
-
- Apache::lonwizard::switch_state->new($wizard, "START", "Selecting Resources to Print", "PRINT_TYPE", [
- ['current_document', "$resourceTitle (exactly what was on the screen)", 'CHOOSE_FORMAT'],
- ['map_problems', "Problems from $sequenceTitle", 'CHOOSE_FORMAT'],
- ['map_problems_pages', "All of $sequenceTitle", 'CHOOSE_FORMAT'],
- ['problems_for_students', "Problems from $sequenceTitle for selected students", 'CHOOSE_FORMAT'],
- ['problems_from_directory', "Problems from $subdir", 'CHOOSE_FORMAT'] ],
- "What do you want to print?");
-
$r->print($wizard->display());
untie %hash;
@@ -1315,5 +1378,122 @@ sub printWizard {
1;
+
+package Apache::lonprintout::page_format_state;
+
+=pod
+
+=head1 Wizard state: page_format_state
+
+See lonwizard.pm documentation for discussion of the wizard framework.
+
+Apache::lonprintout::page_format_state is a state that gives the user an opportunity to select the page layout they wish to print with: Number of columns, portrait/landscape, and paper size. If you want to change the paper size choices, change the @paperSize array contents in this package.
+
+=over 4
+
+=item * B
Layout | +Columns | +Paper type | +
+ Landscape + Portrait + |
+ + | \n"; + $result .= " |