Diff for /loncom/interface/lonprintout.pm between versions 1.121 and 1.137

version 1.121, 2003/02/27 19:41:40 version 1.137, 2003/04/30 20:03:14
Line 157  sub sequence_content_menu { Line 157  sub sequence_content_menu {
     my $primary_sequence;      my $primary_sequence;
     my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});      my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
     my @sequence = split('___',$symbolic);      my @sequence = split('___',$symbolic);
     if ($sequence[0]=~/^uploaded/) {$primary_sequence = '/'.$sequence[0];}       $primary_sequence=&Apache::lonnet::clutter($sequence[0]);
       else {$primary_sequence = '/res/'.$sequence[0];}   
     my @master_seq = &coming_from_hash($primary_sequence);      my @master_seq = &coming_from_hash($primary_sequence);
     my @titles_master_seq = ();       my @titles_master_seq = (); 
     for (my $i=0;$i<=$#master_seq;$i++) {      for (my $i=0;$i<=$#master_seq;$i++) {
Line 371  ENDDISHEADER Line 370  ENDDISHEADER
               $sdom,$sname);                $sdom,$sname);
            my $section=&Apache::lonnet::usection             my $section=&Apache::lonnet::usection
        ($sdom,$sname,$ENV{'request.course.id'});         ($sdom,$sname,$ENV{'request.course.id'});
      if ($section == -1) { $section = ''; }
            $r->print(             $r->print(
         '<br /><input type=checkbox name="whomtoprint'.$i.'" value="'.$section.':'.$_.'"> '.          '<br /><input type=checkbox name="whomtoprint'.$i.'" value="'.$section.':'.$_.'"> '.
       $reply{'firstname'}.' '.         $reply{'firstname'}.' '. 
Line 550  ENDPART Line 550  ENDPART
     }  elsif ($choice eq 'Standard LaTeX output for the top level sequence') {      }  elsif ($choice eq 'Standard LaTeX output for the top level sequence') {
         # where is the main sequence of the course?          # where is the main sequence of the course?
  $selectionmade = 4;   $selectionmade = 4;
  my $main_seq;   my $main_seq=&Apache::lonnet::clutter($ENV{'request.course.uri'});
  if ($ENV{'request.course.uri'}=~/\/?uploaded\//) {  
     $main_seq = $ENV{'request.course.uri'};  
  } else {  
     $main_seq = '/res/'.$ENV{'request.course.uri'};  
  }  
  my @file_seq = &coming_from_hash($main_seq);   my @file_seq = &coming_from_hash($main_seq);
  for (my $i=0;$i<=$#file_seq;$i++) {   for (my $i=0;$i<=$#file_seq;$i++) {
     my ($path,$title,$symb) = split /&&/,$file_seq[$i];      my ($path,$title,$symb) = split /&&/,$file_seq[$i];
Line 598  ENDPART Line 593  ENDPART
  my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});   my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
  my @sequence = split('___',$symbolic);   my @sequence = split('___',$symbolic);
  my $primary_sequence;   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);    my @master_seq = &coming_from_hash($primary_sequence); 
  for (my $i=0;$i<=$#master_seq;$i++) {   for (my $i=0;$i<=$#master_seq;$i++) {
     my ($path,$title,$symb) = split /&&/,$master_seq[$i];      my ($path,$title,$symb) = split /&&/,$master_seq[$i];
Line 610  ENDPART Line 605  ENDPART
  my %moreenv;   my %moreenv;
  $moreenv{'form.textwidth'}=$LaTeXwidth;   $moreenv{'form.textwidth'}=$LaTeXwidth;
  &Apache::lonnet::appenv(%moreenv);   &Apache::lonnet::appenv(%moreenv);
    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1);
  foreach my $person (@students) {   foreach my $person (@students) {
     my $current_output = '';       my $current_output = ''; 
     my ($usersection,$username,$userdomain) = split /:/,$person;      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                 #goes through all resources, checks if they are available for current student, and produces output   
     foreach my $curresline (@master_seq)  {      foreach my $curresline (@master_seq)  {
  my ($curres,$symb) = split /&&/, $curresline;   my ($curres,$symb) = split /&&/, $curresline;
Line 643  ENDPART Line 639  ENDPART
     $result .= $current_output;      $result .= $current_output;
     &Apache::lonnet::delenv('form.counter');          &Apache::lonnet::delenv('form.counter');    
     &Apache::lonxml::init_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}';   $result .= '\end{document}';
  &Apache::lonnet::delenv('form.textwidth');   &Apache::lonnet::delenv('form.textwidth');
     } elsif ($choice eq 'Subdirectory print') {            } elsif ($choice eq 'Subdirectory print') {      
Line 742  sub coming_from_hash { Line 741  sub coming_from_hash {
  if ($hash{'src_'.$current_resource}=~/\.sequence$/) {   if ($hash{'src_'.$current_resource}=~/\.sequence$/) {
     push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});      push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
  } else {   } else {
     my $presymb;       my $presymb=&Apache::lonnet::declutter($mainsequence);
     if ($mainsequence =~ /\/res\/(.*)$/) {$presymb = $1;}   
               elsif ($mainsequence =~ /\/?(uploaded\/(.*))$/) {$presymb = $1;}   
     my $rid = $current_resource;      my $rid = $current_resource;
     if ($rid=~/,/) {      if ($rid=~/,/) {
  my @rid = split /,/, $rid;   my @rid = split /,/, $rid;
Line 758  sub coming_from_hash { Line 755  sub coming_from_hash {
         $rid =~ m/^$mapid\.(\d*)/;          $rid =~ m/^$mapid\.(\d*)/;
                 $rid = $1;                    $rid = $1;  
     }      }
     $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;      my $symb = $presymb.'___'.$rid.'___'.
     my $symb = $presymb.'___'.$rid.'___'.$1;       &Apache::lonnet::declutter($hash{'src_'.$current_resource});
     push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;      push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;
  }   }
  $current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};   $current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};
Line 768  sub coming_from_hash { Line 765  sub coming_from_hash {
  if ($hash{'src_'.$current_resource}=~/\.sequence$/) {   if ($hash{'src_'.$current_resource}=~/\.sequence$/) {
     push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});      push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
  } else {   } else {
     my $presymb;       my $presymb=&Apache::lonnet::declutter($mainsequence);
     if ($mainsequence =~ /\/res\/(.*)$/) {$presymb = $1;}   
               elsif ($mainsequence =~ /\/?(uploaded\/(.*))$/) {$presymb = $1;}   
     my $rid = $current_resource;      my $rid = $current_resource;
     if ($rid=~/,/) {      if ($rid=~/,/) {
  my @rid = split /,/, $rid;   my @rid = split /,/, $rid;
Line 784  sub coming_from_hash { Line 779  sub coming_from_hash {
         $rid =~ m/^$mapid\.(\d*)/;          $rid =~ m/^$mapid\.(\d*)/;
                 $rid = $1;                    $rid = $1;  
     }      }
     $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;      my $symb = $presymb.'___'.$rid.'___'.
     my $symb = $presymb.'___'.$rid.'___'.$1;       &Apache::lonnet::declutter($hash{'src_'.$current_resource});
     push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;      push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;
  }   }
  $current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};   $current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};
Line 1114  sub character_chart { Line 1109  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 {  sub page_format_transformation {
     my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_;       my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_; 
     my ($textwidth,$textheight,$oddoffset,$evenoffset);      my ($textwidth,$textheight,$oddoffset,$evenoffset);
Line 1123  sub page_format_transformation { Line 1128  sub page_format_transformation {
  } else {   } else {
   ($textwidth,$textheight,$oddoffset,$evenoffset) = ($ENV{'form.width'},$ENV{'form.height'},$ENV{'form.leftmargin'},$ENV{'form.leftmargin'});    ($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 $name = &get_name();
     my $lastname = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'environment.lastname'}),'','','header');      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');      my $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'','','header');
     if ($layout eq 'CBI') {      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') {      } elsif ($layout eq 'CAPA') {
  if ($choice ne 'All class print') {    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 {   } 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 /;      $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 /;
   
Line 1159  sub details_for_menu { Line 1167  sub details_for_menu {
     my $name_of_resourse = $hash{'title_'.$hash{'ids_'.$ENV{'form.postdata'}}};      my $name_of_resourse = $hash{'title_'.$hash{'ids_'.$ENV{'form.postdata'}}};
     my $symbolic = &Apache::lonnet::symbread($ENV{'form.postdata'});      my $symbolic = &Apache::lonnet::symbread($ENV{'form.postdata'});
     my ($map,$id,$resource)=split(/___/,$symbolic);      my ($map,$id,$resource)=split(/___/,$symbolic);
       $map=&Apache::lonnet::clutter($map);
     my $name_of_sequence;      my $name_of_sequence;
     if ($map=~/^uploaded/) {      $name_of_sequence = $hash{'title_'.$hash{'ids_'.$map}};
  $name_of_sequence = $hash{'title_'.$hash{'ids_/'.$map}};  
     } else {  
  $name_of_sequence = $hash{'title_'.$hash{'ids_/res/'.$map}};  
     }  
     if ($name_of_sequence =~ /^\s*$/) {      if ($name_of_sequence =~ /^\s*$/) {
      $map =~ m|([^/]+)$|;   $map =~ m|([^/]+)$|;
       $name_of_sequence = $1;   $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*$/) {      if ($name_of_map =~ /^\s*$/) {
       $ENV{'request.course.uri'} =~ m|([^/]+)$|;   $ENV{'request.course.uri'} =~ m|([^/]+)$|;
       $name_of_map = $1;   $name_of_map = $1;
     }        }
     return ($name_of_resourse,$name_of_sequence,$name_of_map);      return ($name_of_resourse,$name_of_sequence,$name_of_map);
   
 }  }
Line 1216  sub latex_corrections { Line 1221  sub latex_corrections {
 sub handler {  sub handler {
   
     my $r = shift;      my $r = shift;
       my $helper;
   
     # A hook for me to work without disturbing Alex.      # A hook for me to work without disturbing Alex.
     if (!$ENV{'form.jeremy'}) {      if (!$ENV{'form.jeremy'}) {
         printWizard($r);          my $result = printHelper($r);
         return OK;          if (!ref($result)) {
               return $result;
           }
           $helper = $result;
     }      }
   
     my $loaderror=&Apache::lonnet::overloaderror($r);      my $loaderror=&Apache::lonnet::overloaderror($r);
Line 1276  sub handler { Line 1285  sub handler {
         
 }   } 
   
 use Apache::lonwizard;  use Apache::lonhelper;
   
 sub printWizard {  sub printHelper {
     my $r = shift;      my $r = shift;
   
     if ($ENV{'request.course.id'}) {      if ($ENV{'request.course.id'}) {
Line 1306  sub printWizard { Line 1315  sub printWizard {
     $r->send_http_header;      $r->send_http_header;
     $r->rflush();      $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;      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});      Apache::lonhelper::registerHelperTags();
     # PRINT_TYPE: What the user wants to print (current docs,  
     #  whole sequence, etc.  
     $wizard->declareVars(['PRINT_TYPE', 'FORMAT', 'postdata', 'url',  
                           'symb', 'RESOURCES', 'FILES', 'STUDENTS']);  
   
     # Extract map      # Extract map
     my $symb = $wizard->{VARS}->{'symb'};      my $symb = $helper->{VARS}->{'symb'};
     my ($map, $id, $url) = split(/__/, $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."      # "Delete everything after the last slash."
     $subdir =~ s|/[^/]+$||;      $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      # 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.
     # To prevent security leaks, states are only added to the wizard      # 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      # won't allow anyone to reach states they shouldn't have permission
     # to reach.      # 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.      # We can always print the current screen.
     push @{$printChoices}, ['current_document', "<b>$resourceTitle</b> (exactly what was on the screen)", 'CHOOSE_FORMAT'];  
   
     if ($ENV{'form.postdata'}=~ /\/res\//) {      push @{$printChoices}, ["<b>$resourceTitle</b> (exactly what was on the screen)", 'current_document', 'FINAL'];
         # Allow problems from sequence  
         push @{$printChoices}, ['map_problems', "Problems from <b>$sequenceTitle</b>", 'CHOOSE_PROBLEMS'];  
         Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS", 'Select Problems', "Select problems to print from <b>$sequenceTitle</b>:", '', 'CHOOSE_FORMAT', 'RESOURCES', sub {my $res = shift; return $res->is_problem()}, undef, $map);  
   
       # If we're in a sequence...
       if ($helper->{VARS}->{'postdata'} =~ /\/res\//) {
           # Allow problems from sequence
           push @{$printChoices}, ["Problems from <b>$sequenceTitle</b>", 'map_problems', 'CHOOSE_PROBLEMS'];
         # Allow all resources from sequence          # Allow all resources from sequence
         push @{$printChoices}, ['map_problems_pages', "Problems and pages from <b>$sequenceTitle</b>", 'CHOOSE_PROBLEMS_HTML'];          push @{$printChoices}, ["Problems and pages from <b>$sequenceTitle</b>", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
         Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS_HTML", 'Select Resources', "Select resources to print from <b>$sequenceTitle</b>:", '', "CHOOSE_FORMAT", 'RESOURCES', sub {my $res = shift; return !$res->is_map()}, undef, $map);  
           my $isProblem = '$res->is_problem();';
           my $isProblemOrMap = '$res->is_problem() || $res->is_map()';
           my $isNotMap = '!$res->is_map();';
           my $symb = '$res->symb();';
           my $helperFragment = <<HELPERFRAGMENT;
     <state name="CHOOSE_PROBLEMS" title="Select Problems">
       <message>Select problems to print:</message>
       <resource variable="RESOURCES" multichoice="1">
         <nextstate>FINAL</nextstate>
         <filterfunc>return $isProblemOrMap</filterfunc>
         <choicefunc>return $isProblem</choicefunc>
         <mapurl>$map</mapurl>
         <valuefunc>return $symb</valuefunc>
         </resource>
       </state>
   
     <state name="CHOOSE_PROBLEMS_HTML" title="Select Resources">
       <message>Select resources to print:</message>
       <resource variable="RESOURCES" multichoice="1">
         <nextstate>FINAL</nextstate>
         <choicefunc>return $isNotMap;</choicefunc>
         <mapurl>$map</mapurl>
         <valuefunc>return $symb</valuefunc>
         </resource>
       </state>
   HELPERFRAGMENT
   
           &Apache::lonxml::xmlparse($r, 'helper', $helperFragment); 
     }      }
   
     # If the user is priviledged, allow them to print all       # If the user is priviledged, allow them to print all 
     # problems in the course, optionally for selected students      # 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\//)) {       if (($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) and ($helper->{VARS}->{'postdata'}=~/\/res\//)) { 
         push @{$printChoices}, ['all_problems', '<b>All problems</b> in course (may take a lot of time)', 'CHOOSE_FORMAT'];          push @{$printChoices}, ['<b>All problems</b> in course (may take a lot of time)', 'all_problems', 'ALL_PROBLEMS'];
         push @{$printChoices}, ['problems_for_students', "Problems from <b>$sequenceTitle</b> for selected students", 'CHOOSE_STUDENTS'];          push @{$printChoices}, ["Problems from <b>$sequenceTitle</b> for selected students", 'problems_for_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);  
           my $isProblem = '$res->is_problem();';
           my $isProblemOrMap = '$res->is_problem() || $res->is_map()';
           my $symb = '$res->symb();';
           &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS);
     <state name="ALL_PROBLEMS" title="Select Problems">
       <message>Select problems to print:</message>
       <resource variable="RESOURCES" multichoice="1">
         <nextstate>FINAL</nextstate>
         <filterfunc>return $isProblemOrMap</filterfunc>
         <choicefunc>return $isProblem</choicefunc>
         <valuefunc>return $symb</valuefunc>
         </resource>
       </state>
   
     <state name="CHOOSE_STUDENTS" title="Choose Students">
       <message>Select the students you wish to print the problems for:</message>
       <student multichoice='1' variable="STUDENTS" nextstate="FINAL" />
       </state>
   CHOOSE_STUDENTS
     }      }
   
     # 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 ($ENV{'form.postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) {          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)/)) {    
         push @{$printChoices}, ['problems_from_directory', "Problems from <b>$subdir</b>", 'CHOOSE_FROM_SUBDIR'];          push @{$printChoices}, ["Problems from <b>$subdir</b>", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];
         Apache::lonwizard::choose_files->new($wizard, "CHOOSE_FROM_SUBDIR", "Select Files","Select problems you wish to print from <b>$subdir</b>:", '', 'CHOOSE_FORMAT', 'FILES', $subdir, $problemFilter);          
     }          my $f = '$filename';
           &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_FROM_SUBDIR);
     <state name="CHOOSE_FROM_SUBDIR" title="Select Files">
       <message>Select problems you wish to print from <b>$subdir</b></message>
       <files variable="FILES">
         <nextstate>FINAL</nextstate>
         <filechoice>$subdir</filechoice>
         <filefilter>return $f =~ 
              m/^[^\.]+\.(problem|exam|quiz|assess|survey|form|library)$/;
         </filefilter>
       </state>
   CHOOSE_FROM_SUBDIR
       }
   
       # Generate the first state, to select which resources get printed.
       Apache::lonhelper::state->new("START", "Selecting Resources to Print");
       $paramHash = Apache::lonhelper::getParamHash();
       $paramHash->{MESSAGE_TEXT} = "What do you want to print?";
       Apache::lonhelper::message->new();
       $paramHash = Apache::lonhelper::getParamHash();
       $paramHash->{'variable'} = 'PRINT_TYPE';
       $helper->declareVar('PRINT_TYPE');
       $paramHash->{CHOICES} = $printChoices;
       Apache::lonhelper::choices->new();
       Apache::lonprintout::page_format_state->new("FORMAT");
   
       $helper->process();
   
       # MANUAL BAILOUT CONDITION:
       # If we're in the "final" state, bailout and return to handler
       if ($helper->{STATE} eq 'FINAL') {
           return $helper;
       }    
   
     # Despite the appearance of states before here, this is the first state.      $r->print($helper->display());
     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");  
   
     $r->print($wizard->display());      Apache::lonhelper::unregisterHelperTags();
   
     untie %hash;      untie %hash;
   
     return OK;      return OK;
   
 }  }
   
   
Line 1383  package Apache::lonprintout::page_format Line 1486  package Apache::lonprintout::page_format
   
 =pod  =pod
   
 =head1 Wizard state: page_format_state  =head1 Helper element: page_format_state
   
   See lonhelper.pm documentation for discussion of the helper framework.
   
 See lonwizard.pm documentation for discussion of the wizard framework.  Apache::lonprintout::page_format_state is an element 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.
   
 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.  page_format_state is always directly invoked in lonprintout.pm, so there
   is no tag interface. You actually pass parameters to the constructor.
   
 =over 4  =over 4
   
 =item * B<new>(parentLonWizReference, stateName, stateTitle, varName, nextState): varName is where the print information will be stored in the format FIXME. nextState is the state that follows this one.  =item * B<new>(varName): varName is where the print information will be stored in the format FIXME.
   
 =back  =back
   
 =cut  =cut
   
 use Apache::lonwizard;  use Apache::lonhelper;
   
 no strict;  no strict;
 @ISA = ("Apache::lonwizard::state");  @ISA = ("Apache::lonhelper::element");
 use strict;  use strict;
   
 my $maxColumns = 2;  my $maxColumns = 2;
Line 1413  my @paperSize = ("Letter [8 1/2x11 in]", Line 1523  my @paperSize = ("Letter [8 1/2x11 in]",
 #                   Paper type  #                   Paper type
   
 sub new {   sub new { 
     my $proto = shift;      my $self = Apache::lonhelper::element->new();
     my $class = ref($proto) || $proto;  
     my $self = bless $proto->SUPER::new(shift, shift, shift);  
   
     $self->{VAR_NAME} = shift;  
     $self->{NEXT_STATE} = shift;  
     return $self;  
 }  
   
 sub postprocess {      shift;
     my $self = shift;  
     my $wizard = $self->{WIZARD};  
   
     # We have to manually collect the value and store it in the       $self->{'variable'} = shift;
     # wizard variable      my $helper = Apache::lonhelper::getHelper();
     my $result = $ENV{'form.' . $self->{VAR_NAME} . '.layout'} . '|';      $helper->declareVar($self->{'variable'});
     $result .= $ENV{'form.' . $self->{VAR_NAME} . '.cols'} . '|';      bless($self);
     $result .= $ENV{'form.' . $self->{VAR_NAME} . '.paper'};      return $self;
       
     $wizard->setVar($self->{VAR_NAME}, $result);  
     $wizard->changeState($self->{NEXT_STATE});  
 }  }
   
 sub render {  sub render {
     my $self = shift;      my $self = shift;
     my $wizard = $self->{WIZARD};      my $helper = Apache::lonhelper::getHelper();
     my $result = '';      my $result = '';
     my $var = $self->{VAR_NAME};      my $var = $self->{'variable'};
     my $curVal = $self->{WIZARD}->{VARS}->{$var};      my $curVal = $helper->{VARS}->{$var};
   
     my ($layout, $cols, $paper) = split(/\|/, $curVal);      my ($layout, $cols, $paper) = split(/\|/, $curVal);
   
     my $landscapeChecked = ($layout ne "L")? '' : 'checked ';  
     my $portraitChecked = $landscapeChecked ? '' : 'checked ';  
   
     $result .= <<STATEHTML;      $result .= <<STATEHTML;
   
 <p>How should the printing be formatted?</p>  <p>How should the printing be formatted?</p>
Line 1459  sub render { Line 1554  sub render {
   </tr>    </tr>
   <tr>    <tr>
     <td>      <td>
       <input type="radio" name="${var}.layout" value="L" $landscapeChecked> Landscape<br />        <input type="radio" name="${var}.layout" value="L" checked='1' /> Landscape<br />
       <input type="radio" name="${var}.layout" value="P" $portraitChecked> Portrait        <input type="radio" name="${var}.layout" value="P" /> Portrait
     </td>      </td>
     <td>      <td>
       <select name="${var}.cols">        <select name="${var}.cols">
Line 1489  STATEHTML Line 1584  STATEHTML
     }      }
   
     $result .= "</select></td></tr></table>";      $result .= "</select></td></tr></table>";
     $result .= '<input type="hidden" name="printWizDone" value="1" />';  
     return $result;      return $result;
 }  }
   
   sub postprocess {
       my $self = shift;
   
       my $var = $self->{'variable'};
       my $helper = Apache::lonhelper->getHelper();
       $helper->{VARS}->{$var} = 
           $ENV{"form.$var.layout"} . '|' . $ENV{"form.$var.cols"} . '|' .
           $ENV{"form.$var.paper"};
       return 1;
   }
   
 1;  1;
   
 __END__  __END__

Removed from v.1.121  
changed lines
  Added in v.1.137


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>