--- loncom/interface/lonprintout.pm 2003/02/27 19:41:40 1.121
+++ 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.121 2003/02/27 19:41:40 bowersj2 Exp $
+# $Id: lonprintout.pm,v 1.135 2003/04/30 19:18:37 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -157,8 +157,7 @@ sub sequence_content_menu {
my $primary_sequence;
my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
my @sequence = split('___',$symbolic);
- if ($sequence[0]=~/^uploaded/) {$primary_sequence = '/'.$sequence[0];}
- else {$primary_sequence = '/res/'.$sequence[0];}
+ $primary_sequence=&Apache::lonnet::clutter($sequence[0]);
my @master_seq = &coming_from_hash($primary_sequence);
my @titles_master_seq = ();
for (my $i=0;$i<=$#master_seq;$i++) {
@@ -371,6 +370,7 @@ ENDDISHEADER
$sdom,$sname);
my $section=&Apache::lonnet::usection
($sdom,$sname,$ENV{'request.course.id'});
+ if ($section == -1) { $section = ''; }
$r->print(
'
'.
$reply{'firstname'}.' '.
@@ -550,12 +550,7 @@ ENDPART
} elsif ($choice eq 'Standard LaTeX output for the top level sequence') {
# where is the main sequence of the course?
$selectionmade = 4;
- my $main_seq;
- if ($ENV{'request.course.uri'}=~/\/?uploaded\//) {
- $main_seq = $ENV{'request.course.uri'};
- } else {
- $main_seq = '/res/'.$ENV{'request.course.uri'};
- }
+ my $main_seq=&Apache::lonnet::clutter($ENV{'request.course.uri'});
my @file_seq = &coming_from_hash($main_seq);
for (my $i=0;$i<=$#file_seq;$i++) {
my ($path,$title,$symb) = split /&&/,$file_seq[$i];
@@ -598,8 +593,8 @@ ENDPART
my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
my @sequence = split('___',$symbolic);
my $primary_sequence;
- if ($sequence[0]=~/^uploaded/) {$primary_sequence = '/'.$sequence[0];}
- else {$primary_sequence = '/res/'.$sequence[0];}
+
+ $primary_sequence=&Apache::lonnet::clutter($sequence[0]);
my @master_seq = &coming_from_hash($primary_sequence);
for (my $i=0;$i<=$#master_seq;$i++) {
my ($path,$title,$symb) = split /&&/,$master_seq[$i];
@@ -610,10 +605,11 @@ ENDPART
my %moreenv;
$moreenv{'form.textwidth'}=$LaTeXwidth;
&Apache::lonnet::appenv(%moreenv);
+ 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;
- my $fullname = &Apache::grades::get_fullname($username,$userdomain);
+ my $fullname = &get_name($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;
@@ -643,7 +639,10 @@ ENDPART
$result .= $current_output;
&Apache::lonnet::delenv('form.counter');
&Apache::lonxml::init_counter();
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+ 'last student '.$fullname);
}
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= '\end{document}';
&Apache::lonnet::delenv('form.textwidth');
} elsif ($choice eq 'Subdirectory print') {
@@ -742,9 +741,7 @@ sub coming_from_hash {
if ($hash{'src_'.$current_resource}=~/\.sequence$/) {
push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
} else {
- my $presymb;
- if ($mainsequence =~ /\/res\/(.*)$/) {$presymb = $1;}
- elsif ($mainsequence =~ /\/?(uploaded\/(.*))$/) {$presymb = $1;}
+ my $presymb=&Apache::lonnet::declutter($mainsequence);
my $rid = $current_resource;
if ($rid=~/,/) {
my @rid = split /,/, $rid;
@@ -758,8 +755,8 @@ sub coming_from_hash {
$rid =~ m/^$mapid\.(\d*)/;
$rid = $1;
}
- $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
- my $symb = $presymb.'___'.$rid.'___'.$1;
+ my $symb = $presymb.'___'.$rid.'___'.
+ &Apache::lonnet::declutter($hash{'src_'.$current_resource});
push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;
}
$current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};
@@ -768,9 +765,7 @@ sub coming_from_hash {
if ($hash{'src_'.$current_resource}=~/\.sequence$/) {
push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
} else {
- my $presymb;
- if ($mainsequence =~ /\/res\/(.*)$/) {$presymb = $1;}
- elsif ($mainsequence =~ /\/?(uploaded\/(.*))$/) {$presymb = $1;}
+ my $presymb=&Apache::lonnet::declutter($mainsequence);
my $rid = $current_resource;
if ($rid=~/,/) {
my @rid = split /,/, $rid;
@@ -784,8 +779,8 @@ sub coming_from_hash {
$rid =~ m/^$mapid\.(\d*)/;
$rid = $1;
}
- $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
- my $symb = $presymb.'___'.$rid.'___'.$1;
+ my $symb = $presymb.'___'.$rid.'___'.
+ &Apache::lonnet::declutter($hash{'src_'.$current_resource});
push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;
}
$current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};
@@ -1114,6 +1109,16 @@ sub character_chart {
}
+sub get_name {
+ my ($uname,$udom)=@_;
+ if (!defined($uname)) { $uname=$ENV{'user.name'}; }
+ if (!defined($udom)) { $uname=$ENV{'user.domain'}; }
+ my $plainname=&Apache::loncommon::plainname($uname,$udom);
+ if ($plainname=~/^\s*$/) { $plainname=$uname; }
+ return &Apache::lonxml::latex_special_symbols($plainname,undef,undef,
+ 'header');
+}
+
sub page_format_transformation {
my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_;
my ($textwidth,$textheight,$oddoffset,$evenoffset);
@@ -1123,14 +1128,17 @@ sub page_format_transformation {
} else {
($textwidth,$textheight,$oddoffset,$evenoffset) = ($ENV{'form.width'},$ENV{'form.height'},$ENV{'form.leftmargin'},$ENV{'form.leftmargin'});
}
- my $firstname = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'environment.firstname'}),'','','header');
- my $lastname = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'environment.lastname'}),'','','header');
+ my $name = &get_name();
+ if ($name =~ /^\s*$/) {
+ $name=&Apache::lonxml::latex_special_symbols($ENV{'user.name'},undef,
+ undef,'header');
+ }
my $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'','','header');
if ($layout eq 'CBI') {
- $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$firstname $lastname}} \\hfill $courseidinfo} \\vskip 5 mm /;
+ $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$name}} \\hfill $courseidinfo} \\vskip 5 mm /;
} elsif ($layout eq 'CAPA') {
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}/;
+ $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{$name} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
} else {
$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 /;
@@ -1159,21 +1167,18 @@ sub details_for_menu {
my $name_of_resourse = $hash{'title_'.$hash{'ids_'.$ENV{'form.postdata'}}};
my $symbolic = &Apache::lonnet::symbread($ENV{'form.postdata'});
my ($map,$id,$resource)=split(/___/,$symbolic);
+ $map=&Apache::lonnet::clutter($map);
my $name_of_sequence;
- if ($map=~/^uploaded/) {
- $name_of_sequence = $hash{'title_'.$hash{'ids_/'.$map}};
- } else {
- $name_of_sequence = $hash{'title_'.$hash{'ids_/res/'.$map}};
- }
+ $name_of_sequence = $hash{'title_'.$hash{'ids_'.$map}};
if ($name_of_sequence =~ /^\s*$/) {
- $map =~ m|([^/]+)$|;
- $name_of_sequence = $1;
+ $map =~ m|([^/]+)$|;
+ $name_of_sequence = $1;
}
- my $name_of_map = $hash{'title_'.$hash{'ids_/res/'.$ENV{'request.course.uri'}}};
+ my $name_of_map = $hash{'title_'.$hash{'ids_'.&Apache::lonnet::clutter($ENV{'request.course.uri'})}};
if ($name_of_map =~ /^\s*$/) {
- $ENV{'request.course.uri'} =~ m|([^/]+)$|;
- $name_of_map = $1;
- }
+ $ENV{'request.course.uri'} =~ m|([^/]+)$|;
+ $name_of_map = $1;
+ }
return ($name_of_resourse,$name_of_sequence,$name_of_map);
}
@@ -1216,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;
+ my $result = printHelper($r);
+ if (!ref($result)) {
+ return $result;
+ }
+ $helper = $result;
}
my $loaderror=&Apache::lonnet::overloaderror($r);
@@ -1276,9 +1285,9 @@ sub handler {
}
-use Apache::lonwizard;
+use Apache::lonhelper;
-sub printWizard {
+sub printHelper {
my $r = shift;
if ($ENV{'request.course.id'}) {
@@ -1306,74 +1315,167 @@ 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 = <