Diff for /loncom/interface/lonprintout.pm between versions 1.627.2.32.2.6 and 1.627.2.32.2.7

version 1.627.2.32.2.6, 2023/03/10 16:05:01 version 1.627.2.32.2.7, 2023/04/18 18:48:14
Line 453  sub generate_common_choosers { Line 453  sub generate_common_choosers {
         &get_randomly_ordered_warning($helper, $map);          &get_randomly_ordered_warning($helper, $map);
   
     # code for a few states used for printout launched from both      # code for a few states used for printout launched from both
     # /adm/navmpas and from a resource by a privileged user:      # /adm/navmaps and from a resource by a privileged user:
     #   - To allow resources to be selected for printing.      #   - To allow resources to be selected for printing.
     #   - To determine pagination between assignments.      #   - To determine pagination between assignments.
     #   - To determine how many assignments should be bundled into a single PDF.      #   - To determine how many assignments should be bundled into a single PDF.
Line 756  sub get_print_dates { Line 756  sub get_print_dates {
 # get_print_dates but namvaps::course_print_dates are gotten...and not converted  # get_print_dates but namvaps::course_print_dates are gotten...and not converted
 # to times either.  # to times either.
 #  #
 # @param $res - Reference to a resource has from lonnvampas::resource.  # @param $res - Reference to a resource hash from lonnavmaps::resource.
 #  #
 # @return (opendate, closedate)  # @return (opendate, closedate)
 #  #
Line 770  sub course_print_dates { Line 770  sub course_print_dates {
     my @close_dates;      my @close_dates;
     my $navmap = $res->{NAV_MAP}; # Slightly OO dirty.      my $navmap = $res->{NAV_MAP}; # Slightly OO dirty.
   
     # Don't bother looping over undefined or empty parts arraY;      # Don't bother looping over undefined or empty parts array;
   
     if (@parts) {      if (@parts) {
  foreach my $part (@parts) {   foreach my $part (@parts) {
Line 796  sub map_print_dates { Line 796  sub map_print_dates {
     my $navmap = $res->{NAV_MAP}; # slightly OO dirty.      my $navmap = $res->{NAV_MAP}; # slightly OO dirty.
   
   
     # Don't bother looping over undefined or empty parts arraY;      # Don't bother looping over undefined or empty parts array;
   
     if (@parts) {      if (@parts) {
  foreach my $part (@parts) {   foreach my $part (@parts) {
Line 897  sub master_seq_to_person_seq { Line 897  sub master_seq_to_person_seq {
     my $iterator         = $navmap->getIterator($start,$finish,{},1);      my $iterator         = $navmap->getIterator($start,$finish,{},1);
   
     #  Iterate on the resource..select the items that are randomly selected      #  Iterate on the resource..select the items that are randomly selected
     #  and that are in the seq_has.  Presumably the iterator will take care      #  and that are in the seq_hash.  Presumably the iterator will take care
     # of the random ordering part of the deal.      #  of the random ordering part of the deal.
     my $curres;      my $curres;
     while ($curres = $iterator->next()) {      while ($curres = $iterator->next()) {
  #   #
Line 974  sub set_font_size { Line 974  sub set_font_size {
     my ($text) = @_;      my ($text) = @_;
   
     # There appear to be cases where the font directive is empty.. in which      # There appear to be cases where the font directive is empty.. in which
     # case the first substituion would  insert a spurious \ oh happy day.      # case the first substitution would insert a spurious \ oh happy day.
     # as this has been the cause of much mystery and hair pulling _sigh_      # as this has been the cause of much mystery and hair pulling _sigh_
   
     if ($font_size ne '') {      if ($font_size ne '') {
Line 992  sub set_font_size { Line 992  sub set_font_size {
 #  - The PDF, if necessary, is replicated.  #  - The PDF, if necessary, is replicated.
 #  - The PDF is added to the list of files to convert to postscript (along with the images).  #  - The PDF is added to the list of files to convert to postscript (along with the images).
 #  - The LaTeX is added to include the final converted postscript in the file as an included  #  - The LaTeX is added to include the final converted postscript in the file as an included
 #    job.  The assumption is that the includedpsheader.ps header will be included.  #    job.  The assumption is that the includepsheader.ps header will be included.
 #  #
 # Parameters:  # Parameters:
 #   pdf_uri   - URI of the PDF file to include.  #   pdf_uri   - URI of the PDF file to include.
Line 1016  sub include_pdf { Line 1016  sub include_pdf {
  $file = &Apache::lonnet::filelocation('',$pdf_uri);   $file = &Apache::lonnet::filelocation('',$pdf_uri);
     }      }
   
     #  The file isn ow replicated locally.. or it did not exist in the first place      #  The file is now replicated locally ... or it did not exist in the first place
     # (unlikely).  If it did exist, add the pdf to the set of files/images that      # (unlikely).  If it did exist, add the pdf to the set of files/images that
     # need tob e converted for this print job:      # need to be converted for this print job:
   
     my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};      my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
     $file =~ s{(.*)/res/}{$londocroot/res/};      $file =~ s{(.*)/res/}{$londocroot/res/};
Line 1155  sub printf_style_subst { Line 1155  sub printf_style_subst {
  if ($size ne "") {   if ($size ne "") {
     $subst = substr($subst, 0, $size);      $subst = substr($subst, 0, $size);
           
     #  Here's a nice edge case.. supose the end of the      #  Here's a nice edge case ... suppose the end of the
     #  substring is a \.  In that case may have  just      #  substring is a \.  In that case may have just
     #  chopped off a TeX escape... in that case, we append      #  chopped off a TeX escape... in that case, we append
     #   " " for the trailing character, and let the field       #   " " for the trailing character, and let the field 
     #  spill over a bit (sigh).      #  spill over a bit (sigh).
Line 1444  sub compare_names { Line 1444  sub compare_names {
     }      }
   
     # Break the tie on the first name, but there are leading (possibly trailing      # Break the tie on the first name, but there are leading (possibly trailing
     # whitespaces to get rid of first       # whitespaces to get rid of first)
     #      #
     $f1 =~ s/^\s+//; # Remove leading...      $f1 =~ s/^\s+//; # Remove leading...
     $f1 =~ s/\s+$//; # Trailing spaces from first 1...      $f1 =~ s/\s+$//; # Trailing spaces from first 1...
Line 2535  sub load_skips { Line 2535  sub load_skips {
   
     my ($helper)  = @_;      my ($helper)  = @_;
   
     #  If this is the first time, unrap the resources and extra spaces:      # If this is the first time, unwrap the resources and extra spaces:
   
     if (!$skips_loaded) {      if (!$skips_loaded) {
  @extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'}));   @extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'}));
Line 2842  ENDPART Line 2842  ENDPART
     my @student_names=();      my @student_names=();
   
             
     #  Common settings for the %form has:      #  Common settings for the %form hash:
     # In some cases these settings get overriddent by specific cases, but the      # In some cases these settings get overridden by specific cases, but the
     # settings are common enough to make it worthwhile factoring them out      # settings are common enough to make it worthwhile factoring them out
     # here.      # here.
     #      #
Line 3312  ENDPART Line 3312  ENDPART
                  ($map, my $id, my $resource) =                   ($map, my $id, my $resource) =
                      &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});                       &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});
              }               }
            } elsif (($helper->{'VARS'}->{'postdata'} eq '/adm/navmaps') && ($perm{'pfo'})) {
                $map = $helper->{'VARS'}->{'SEQUENCE'};
          }           }
   
  #loop over students   #loop over students
Line 3401  ENDPART Line 3403  ENDPART
          if ($helper->{VARS}{'symb'}) {           if ($helper->{VARS}{'symb'}) {
              ($map, my $id, my $resource) =               ($map, my $id, my $resource) =
                  &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});                   &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
            } elsif (($helper->{'VARS'}->{'postdata'} eq '/adm/navmaps') && ($perm{'pfo'})) {
                $map = $helper->{'VARS'}->{'SEQUENCE'};
          }           }
  my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));   my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
  $moreenv{'problem_split'}    = $parmhash{'problem_stream_switch'};   $moreenv{'problem_split'}    = $parmhash{'problem_stream_switch'};
Line 3799  sub print_resources { Line 3803  sub print_resources {
     #   nice to put the special in as a postscript comment      #   nice to put the special in as a postscript comment
     #   e.g. \special{ps:\ENDOFSTUDENTSTAMP}  unfortunately,      #   e.g. \special{ps:\ENDOFSTUDENTSTAMP}  unfortunately,
     #   The special gets passed the \ and dvips puts it in the output file      #   The special gets passed the \ and dvips puts it in the output file
     #   so we will just rely on prntout.pl to strip  ENDOFSTUDENTSTAMP from the      #   so we will just rely on printout.pl to strip ENDOFSTUDENTSTAMP from the
     #   postscript.  Each ENDOFSTUDENTSTAMP will go on a line by itself.      #   postscript.  Each ENDOFSTUDENTSTAMP will go on a line by itself.
     #      #
   
Line 3910  sub print_resources { Line 3914  sub print_resources {
  $rendered =~ s/\\end\{document}//;   $rendered =~ s/\\end\{document}//;
     }      }
     $current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut ';      $current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut ';
  } elsif($res_url = ~/\.pdf$/) {   } elsif($res_url =~ /\.pdf$/) {
     my $url = &Apache::lonnet::clutter($res_url);      my $url = &Apache::lonnet::clutter($res_url);
     my $rendered  = &include_pdf($url);      my $rendered  = &include_pdf($url);
     if ($remove_latex_header ne 'NO') {      if ($remove_latex_header ne 'NO') {
Line 4824  CHOOSE_FROM_SUBDIR Line 4828  CHOOSE_FROM_SUBDIR
                          '<b>','</b>','<b>','</b>','<b>','</b>'),                           '<b>','</b>','<b>','</b>','<b>','</b>'),
                          'select_sequences_resources_for_anon','CHOOSE_SEQUENCE_ANON2']);                           'select_sequences_resources_for_anon','CHOOSE_SEQUENCE_ANON2']);
                 if ($escapedSequenceName) {                  if ($escapedSequenceName) {
                     &generate_common_choosers($r,$helper,$escapedSequenceName,$escapedSequenceName,$isProblem,$symbFilter,$start_new_option);                      my ($randomly_ordered_warning,$codechoice,$code_selection,$namechoice) =
                           &generate_common_choosers($r,$helper,$escapedSequenceName,$escapedSequenceName,
                                                     $isProblem,$symbFilter,$start_new_option);
   
                       my $resource_selector = <<RESOURCE_SELECTOR;
     <state name="CHOOSE_STUDENTS2" title="Select Students and Resources">
       <choices variable='student_sort'>
         <choice computer='0'>Sort by section then student</choice>
         <choice computer='1'>Sort by students across sections.</choice>
       </choices>
       <message><br /><hr /><br /></message>
       <student multichoice='1' variable="STUDENTS" nextstate="SELECT_RESOURCES" coursepersonnel="1" />
   
       </state>
       <state name="SELECT_RESOURCES" title="Select Resources">
       $randomly_ordered_warning
       <nextstate>PRINT_FORMATTING</nextstate>
       <message>(mark desired resources then click "next" button) <br /></message>
       <resource variable="RESOURCES" multichoice="1" addstatus="1"
                 closeallpages="1" modallink="1" suppressNavmap="1" $nocurrloc>
         <filterfunc>return $isNotMap;</filterfunc>
         <mapurl>$escapedSequenceName</mapurl>
         <valuefunc>return $symbFilter;</valuefunc>
         $start_new_option
         </resource>
       </state>
   RESOURCE_SELECTOR
   
                       my $anon3 = &generate_code_selector($helper,
                                                           'CHOOSE_ANON3',
                                                           'SELECT_RESOURCES',
                                                           $codechoice,
                                                           $code_selection,
                                                           $namechoice) . $resource_selector;
   
                       &Apache::lonxml::xmlparse($r, 'helper',$anon3);
                 }                  }
             }              }
         }          }
         if (($subdir eq '') && ($url eq '/adm/navmaps') && ($perm{'pfo'})) {          if (($subdir eq '') && ($url eq '/adm/navmaps') && ($perm{'pfo'})) {
            &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_FROM_ANY_SEQUENCE);              &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_FROM_ANY_SEQUENCE);
   <state name="CHOOSE_SEQUENCE" title="Select Sequence To Print From">    <state name="CHOOSE_SEQUENCE" title="Select Sequence To Print From">
     <message>Select the sequence to print resources from:</message>      <message>Select the sequence to print resources from:</message>
     <resource variable="SEQUENCE">      <resource variable="SEQUENCE">
Line 4863  CHOOSE_FROM_SUBDIR Line 4902  CHOOSE_FROM_SUBDIR
   <state name="CHOOSE_SEQUENCE_STUDENTS1" title="Select Sequence To Print From">    <state name="CHOOSE_SEQUENCE_STUDENTS1" title="Select Sequence To Print From">
     <message>Select the sequence to print resources from:</message>      <message>Select the sequence to print resources from:</message>
     <resource variable="SEQUENCE">      <resource variable="SEQUENCE">
       <nextstate>CHOOSE_STUDENTS</nextstate>        <nextstate>CHOOSE_STUDENTS2</nextstate>
       <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>        <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>
       <valuefunc>return $urlValue;</valuefunc>        <valuefunc>return $urlValue;</valuefunc>
       <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);        <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
Line 4873  CHOOSE_FROM_SUBDIR Line 4912  CHOOSE_FROM_SUBDIR
   <state name="CHOOSE_SEQUENCE_ANON2" title="Select Sequence To Print From">    <state name="CHOOSE_SEQUENCE_ANON2" title="Select Sequence To Print From">
     <message>Select the sequence to print resources from:</message>      <message>Select the sequence to print resources from:</message>
     <resource variable="SEQUENCE">      <resource variable="SEQUENCE">
       <nextstate>CHOOSE_ANON1</nextstate>        <nextstate>CHOOSE_ANON3</nextstate>
       <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>        <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>
       <valuefunc>return $urlValue;</valuefunc>        <valuefunc>return $urlValue;</valuefunc>
       <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);        <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);

Removed from v.1.627.2.32.2.6  
changed lines
  Added in v.1.627.2.32.2.7


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