--- loncom/interface/lonprintout.pm 2003/03/03 21:53:15 1.127
+++ loncom/interface/lonprintout.pm 2003/04/30 19:18:37 1.135
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.127 2003/03/03 21:53:15 albertel Exp $
+# $Id: lonprintout.pm,v 1.135 2003/04/30 19:18:37 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -605,7 +605,7 @@ ENDPART
my %moreenv;
$moreenv{'form.textwidth'}=$LaTeXwidth;
&Apache::lonnet::appenv(%moreenv);
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin2($r,'Print Status','Class Print Status',$#students+1);
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1);
foreach my $person (@students) {
my $current_output = '';
my ($usersection,$username,$userdomain) = split /:/,$person;
@@ -639,10 +639,10 @@ ENDPART
$result .= $current_output;
&Apache::lonnet::delenv('form.counter');
&Apache::lonxml::init_counter();
- &Apache::lonhtmlcommon::Increment_PrgWin2($r,\%prog_state,
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
'last student '.$fullname);
}
- &Apache::lonhtmlcommon::Close_PrgWin2($r,\%prog_state);
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= '\end{document}';
&Apache::lonnet::delenv('form.textwidth');
} elsif ($choice eq 'Subdirectory print') {
@@ -1221,11 +1221,15 @@ sub latex_corrections {
sub handler {
my $r = shift;
+ my $helper;
# A hook for me to work without disturbing Alex.
- if ($ENV{'form.jeremy'}) {
- printWizard($r);
- return OK;
+ if (!$ENV{'form.jeremy'}) {
+ my $result = printHelper($r);
+ if (!ref($result)) {
+ return $result;
+ }
+ $helper = $result;
}
my $loaderror=&Apache::lonnet::overloaderror($r);
@@ -1281,9 +1285,9 @@ sub handler {
}
-use Apache::lonwizard;
+use Apache::lonhelper;
-sub printWizard {
+sub printHelper {
my $r = shift;
if ($ENV{'request.course.id'}) {
@@ -1311,69 +1315,163 @@ sub printWizard {
$r->send_http_header;
$r->rflush();
+ # Unfortunately, this helper is so complicated we have to
+ # write it by hand
+
+ Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING});
+
+ my $helper = Apache::lonhelper::helper->new("Printing Wizard");
+
+ # This will persistently load in the data we want from the
+ # very first screen.
+ if (defined($ENV{'form.symb'})) {
+ $helper->{VARS}->{'symb'} = $ENV{'form.symb'};
+ }
+ if (defined($ENV{'form.postdata'})) {
+ $helper->{VARS}->{'postdata'} = $ENV{'form.postdata'};
+ }
+ if (defined($ENV{'form.url'})) {
+ $helper->{VARS}->{'url'} = $ENV{'form.url'};
+ }
+
my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu;
+ if (!$resourceTitle) { # if the resource doesn't have a title, use the filename
+ my $url = $helper->{VARS}->{'postdata'};
+ $resourceTitle = substr($url, rindex($url, '/') + 1);
+ }
- 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', 'FORMAT', 'postdata', 'url',
- 'symb', 'RESOURCES', 'FILES', 'STUDENTS']);
+ Apache::lonhelper::registerHelperTags();
# Extract map
- my $symb = $wizard->{VARS}->{'symb'};
+ my $symb = $helper->{VARS}->{'symb'};
my ($map, $id, $url) = split(/__/, $symb);
- my $subdir = &Apache::lonnet::filelocation("", $ENV{'form.url'});
+ my $subdir = &Apache::lonnet::filelocation("", $helper->{VARS}->{'postdata'});
# "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
+ # if they can be reached, which ensures manipulating the form input
# won't allow anyone to reach states they shouldn't have permission
# to reach.
- my $printChoices = [];
+
+ # printChoices is tracking the kind of printing the user can
+ # do, and will be used in a choices construction later.
+ # In the meantime we will be adding states and elements to
+ # the helper by hand.
+ my $printChoices = [];
+ my $paramHash;
# 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);
+ push @{$printChoices}, ["$resourceTitle (exactly what was on the screen)", 'current_document', 'FINAL'];
+ # If we're in a sequence...
+ if ($helper->{VARS}->{'postdata'} =~ /\/res\//) {
+ # Allow problems from sequence
+ push @{$printChoices}, ["Problems from $sequenceTitle", 'map_problems', 'CHOOSE_PROBLEMS'];
# 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);
+ push @{$printChoices}, ["Problems and pages from $sequenceTitle", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
+
+ my $isProblem = '$res->is_problem();';
+ my $isProblemOrMap = '$res->is_problem() || $res->is_map()';
+ my $isNotMap = '!$res->is_map();';
+ my $symb = '$res->symb();';
+ my $helperFragment = <