Diff for /loncom/interface/lonprintout.pm between versions 1.661 and 1.675

version 1.661, 2018/01/15 00:51:42 version 1.675, 2022/02/09 15:46:57
Line 847  sub set_font_size { Line 847  sub set_font_size {
     if ($font_size ne '') {      if ($font_size ne '') {
   
  $text =~ s/\\begin\{document}/\\begin{document}{\\$font_size/;   $text =~ s/\\begin\{document}/\\begin{document}{\\$font_size/;
           $text =~ s/\\end\{document}/}\\end{document}/;
   
     }      }
     $text =~ s/\\end\{document}/}\\end{document}/;  
     return $text;      return $text;
   
   
Line 1233  sub is_valid_alpha_code { Line 1234  sub is_valid_alpha_code {
 sub is_code_valid {  sub is_code_valid {
     my ($code_value, $code_option) = @_;      my ($code_value, $code_option) = @_;
     my ($code_type, $code_length) = ('letter', 6); # defaults.      my ($code_type, $code_length) = ('letter', 6); # defaults.
     my @lines = &Apache::grades::get_scantronformat_file();      my @lines = &Apache::lonnet::get_scantronformat_file();
     foreach my $line (@lines) {      foreach my $line (@lines) {
  my ($name, $type, $length) = (split(/:/, $line))[0,2,4];   my ($name, $type, $length) = (split(/:/, $line))[0,2,4];
  if($name eq $code_option) {   if($name eq $code_option) {
Line 1957  sub latex_corrections { Line 1958  sub latex_corrections {
  $result =~ s/(\\end\{document})/\\strut\\vspace\*{-4 mm}\\newline $copyright $end_of_student $1/;   $result =~ s/(\\end\{document})/\\strut\\vspace\*{-4 mm}\\newline $copyright $end_of_student $1/;
     }      }
     $result =~ s/\$number_of_columns/$number_of_columns/g;      $result =~ s/\$number_of_columns/$number_of_columns/g;
     $result =~ s/(\\end\{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill})/$2$1/g;      $result =~ s/(\\end\{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]\{\\hrulefill})/$2$1/g;
     $result =~ s/(\\end\{longtable}\s*)\\strut\\newline/$1/g;      $result =~ s/(\\end\{longtable}\s*)\\strut\\newline/$1/g;
 #-- LaTeX corrections       #-- LaTeX corrections     
     my $first_comment = index($result,'<!--',0);      my $first_comment = index($result,'<!--',0);
Line 2071  sub get_textwidth { Line 2072  sub get_textwidth {
   
 sub unsupported {  sub unsupported {
     my ($currentURL,$mode,$symb)=@_;      my ($currentURL,$mode,$symb)=@_;
       my $cleanURL=&Apache::lonenc::check_decrypt($currentURL);
       my $shown = $currentURL;
       if (($cleanURL ne $currentURL) || ($symb =~ m{/^enc/})) {
           $shown = &mt('URL not shown (encrypted)');
       }
     if ($mode ne '') {$mode='\\'.$mode}      if ($mode ne '') {$mode='\\'.$mode}
     my $result.= &print_latex_header($mode);      my $result = &print_latex_header($mode);
     if ($currentURL=~m|^(/adm/wrapper/)?ext/|) {      if ($cleanURL=~m|^(/adm/wrapper)?/ext/|) {
  $currentURL=~s|^(/adm/wrapper/)?ext/|http://|;          $cleanURL=~s|^(/adm/wrapper)?/ext/|http://|;
         $currentURL=~s|^http://https://|https://|;          $cleanURL=~s|^http://https://|https://|;
  my $title=&Apache::lonnet::gettitle($symb);          if ($shown eq $currentURL) {
  $title = &Apache::lonxml::latex_special_symbols($title);              $shown = &Apache::lonxml::latex_special_symbols($cleanURL);
  $result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' ';          }
           my $title=&Apache::lonnet::gettitle($symb);
           $title = &Apache::lonxml::latex_special_symbols($title);
           $result.=' \strut \\\\ \textit{'.$title.'} \strut \\\\ '.$shown.' ';
     } else {      } else {
  $result.=$currentURL;          if ($shown eq $currentURL) {
       $result.=&Apache::lonxml::latex_special_symbols($currentURL);
           } else {
               $result.=$shown;
           }
     }      }
     $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}';      $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}';
     return $result;      return $result;
Line 2118  sub print_page_in_course { Line 2131  sub print_page_in_course {
       $numberofcolumns);        $numberofcolumns);
     my $LaTeXwidth=&recalcto_mm($textwidth);       my $LaTeXwidth=&recalcto_mm($textwidth); 
   
   
     if ($mode ne '') {$mode='\\'.$mode}      if ($mode ne '') {$mode='\\'.$mode}
     my $result   =    &print_latex_header($mode);      my $result   =    &print_latex_header($mode);
     if ($currentURL=~m|^(/adm/wrapper/)?ext/|) {  
  $currentURL=~s|^(/adm/wrapper/)?ext/|http://|;      my $title=&Apache::lonnet::gettitle($currentURL);
  my $title=&Apache::lonnet::gettitle($symb);      $title = &Apache::lonxml::latex_special_symbols($title);
  $title = &Apache::lonxml::latex_special_symbols($title);      $result .= '\noindent\textit{'.$title.'}\\\\';
     } else {  
         my $esc_currentURL= $currentURL;  
         $esc_currentURL =~ s/_/\\_/g;  
  $result.=$esc_currentURL;  
     }  
     $result .= '\\\\';  
   
     if ($helper->{'VARS'}->{'style_file'}=~/\w/) {      if ($helper->{'VARS'}->{'style_file'}=~/\w/) {
  &Apache::lonnet::appenv({'construct.style' =>   &Apache::lonnet::appenv({'construct.style' =>
Line 2146  sub print_page_in_course { Line 2152  sub print_page_in_course {
   
     foreach my $resource (@page_resources) {      foreach my $resource (@page_resources) {
  my $resource_src   = $resource->src(); # Essentially the URL of the resource.   my $resource_src   = $resource->src(); # Essentially the URL of the resource.
  $result           .= $resource->title() . '\\\\';          my $current_url = $resource->link();
   
  # Recurse if a .page:   # Recurse if a .page:
   
Line 2156  sub print_page_in_course { Line 2162  sub print_page_in_course {
     $result           .= &print_page_in_course($helper, $rparmhash,       $result           .= &print_page_in_course($helper, $rparmhash, 
        $resource_src, \@page_resources);         $resource_src, \@page_resources);
         } elsif ($resource->ext()) {          } elsif ($resource->ext()) {
             $result .= &unsupported($currentURL,$mode,$symb);              $result.=&latex_header_footer_remove(&unsupported($current_url,$mode,$resource->symb));
  }   } elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/)  {
  # these resources go through the XML transformer:              # these resources go through the XML transformer:
               $result .= &Apache::lonxml::latex_special_symbols($resource->title()) . '\\\\';
  elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/)  {  
   
     my $urlp = &Apache::lonnet::clutter($resource_src);      my $urlp = &Apache::lonnet::clutter($resource_src);
   
Line 2937  ENDPART Line 2942  ENDPART
   
     &Apache::lonenc::reset_enc();      &Apache::lonenc::reset_enc();
   
   
     # Note due to document structure, not allowed to put \newpage      # Note due to document structure, not allowed to put \newpage
     # prior to the first resource      # prior to the first resource
   
Line 3224  ENDPART Line 3228  ENDPART
  $result .= $print_array[0].'  \end{document}';   $result .= $print_array[0].'  \end{document}';
      } elsif (($print_type eq 'problems_for_anon')      ||       } elsif (($print_type eq 'problems_for_anon')      ||
       ($print_type eq 'problems_for_anon_page') ||        ($print_type eq 'problems_for_anon_page') ||
       ($print_type eq 'resources_for_anon')  ) {         ($print_type eq 'resources_for_anon')  ) {
  my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};   my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
  my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};   my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
  my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'};   my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'};
Line 3233  ENDPART Line 3237  ENDPART
  my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'};   my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'};
  my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'};   my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'};
  my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};   my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};
          my @lines = &Apache::grades::get_scantronformat_file();           my @lines = &Apache::lonnet::get_scantronformat_file();
  my ($code_type,$code_length,$bubbles_per_row)=('letter',6,10);   my ($code_type,$code_length,$bubbles_per_row)=('letter',6,10);
  foreach my $line (@lines) {   foreach my $line (@lines) {
              chomp($line);               chomp($line);
Line 3248  ENDPART Line 3252  ENDPART
                  }                   }
      }       }
  }   }
          my ($randomorder,$randompick,$map);           my $map;
          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'});
              my $navmap = Apache::lonnavmaps::navmap->new();  
              if (defined($navmap)) {  
                  if ($map) {  
                      my $mapres = $navmap->getResourceByUrl($map);  
                      $randomorder = $mapres->randomorder();  
                      $randompick = $mapres->randompick();  
                  }  
              }  
          }           }
  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 3328  ENDPART Line 3324  ENDPART
      } else {       } else {
  $moreenv{'CODE'}=&num_to_letters($code);   $moreenv{'CODE'}=&num_to_letters($code);
      }       }
              my $actual_seq = \@master_seq;               $env{'form.CODE'} = $moreenv{'CODE'};
              if ($randomorder || $randompick) {               my $actual_seq = master_seq_to_person_seq($map, \@master_seq,
                  $env{'form.CODE'} = $moreenv{'CODE'};                                                         undef,
                  $actual_seq = master_seq_to_person_seq($map, \@master_seq,                                                         $moreenv{'CODE'}, $nohidemap);
                                                         undef,               delete($env{'form.CODE'});
                                                         $moreenv{'CODE'}, $nohidemap);  
                  delete($env{'form.CODE'});  
              }  
      my ($output,$fullname, $printed)=       my ($output,$fullname, $printed)=
  &print_resources($r,$helper,'anonymous',$type,\%moreenv,   &print_resources($r,$helper,'anonymous',$type,\%moreenv,
   $actual_seq,$flag_latex_header_remove,    $actual_seq,$flag_latex_header_remove,
Line 3350  ENDPART Line 3343  ENDPART
  }   }
  &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);   &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
  $result .= $print_array[0].'  \end{document}';   $result .= $print_array[0].'  \end{document}';
      } elsif ($print_type eq 'problems_from_directory') {             } elsif ($print_type eq 'problems_from_directory') {
     #prints selected problems from the subdirectory       #prints selected problems from the subdirectory 
  $selectionmade = 6;   $selectionmade = 6;
         my @list_of_files=split /\|\|\|/, $helper->{'VARS'}->{'FILES'};          my @list_of_files=split /\|\|\|/, $helper->{'VARS'}->{'FILES'};
Line 3451  ENDPART Line 3444  ENDPART
  $URLback=$helper->{'VARS'}->{'filename'};   $URLback=$helper->{'VARS'}->{'filename'};
     } elsif ($helper->{VARS}{'symb'}) {      } elsif ($helper->{VARS}{'symb'}) {
         my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});          my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
           my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
           my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
           my ($anchor,$usehttp,$plainurl);
         $url = &Apache::lonnet::clutter($url);          $url = &Apache::lonnet::clutter($url);
           $plainurl = $url;
           if (($ENV{'SERVER_PORT'} == 443) && ($env{'request.course.id'}) &&
               (($url =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) ||
                ($url =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}))) {
               unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl())) {
                   $usehttp = 1;
               }
           }
         if ($env{'request.enc'}) {          if ($env{'request.enc'}) {
             $url = &Apache::lonenc::encrypted($url);               $url = &Apache::lonenc::encrypted($url); 
         }          }
         if ($url ne '') {          if ($url ne '') {
             $URLback = $url.(($url =~ /\?/) ? '&amp;':'?').'symb='.$helper->{VARS}{'symb'};              my $symb = $helper->{VARS}{'symb'};
               if ($url =~ m{^\Q/adm/wrapper/ext/\E}) {
                   my $link = $url;
                   ($link,$anchor) = ($url =~ /^([^\#]+)(?:|(\#[^\#]+))$/);
                   if ($anchor) {
                       ($symb) = ($helper->{VARS}{'symb'} =~ /^([^\#]+)/);
                   }
                   $url = $link;
               }
               $URLback = $url;
               if ($usehttp) {
                   $URLback .= (($URLback =~ /\?/) ? '&amp;':'?').'usehttp=1';
               }
               unless ($plainurl =~ /\.page$/) {
                   $URLback .= (($URLback =~ /\?/) ? '&amp;':'?').'symb='.&escape($symb.$anchor);
               }
         }          }
     }      }
     #      #
Line 3860  sub handler { Line 3879  sub handler {
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};          my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};          my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           my $clientip = &Apache::lonnet::get_requestor_ip($r);
         my ($blocked,$blocktext) =           my ($blocked,$blocktext) = 
             &Apache::loncommon::blocking_status('printout',$cnum,$cdom);              &Apache::loncommon::blocking_status('printout',$clientip,$cnum,$cdom);
         if ($blocked) {          if ($blocked) {
             my $checkrole = "cm./$cdom/$cnum";              my $checkrole = "cm./$cdom/$cnum";
             if ($env{'request.course.sec'} ne '') {              if ($env{'request.course.sec'} ne '') {
Line 4058  sub printHelper { Line 4078  sub printHelper {
     }      }
     if ($env{'form.url'}) {      if ($env{'form.url'}) {
         $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});          $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
   
     }      }
     $helper->{VARS}->{'symb'}=      if ($helper->{VARS}->{'symb'} ne '') {
  &Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});          $helper->{VARS}->{'symb'}=
       &Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});
       }
     my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);      my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);
     if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;}      if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;}
   
Line 4072  sub printHelper { Line 4093  sub printHelper {
     my $subdir;      my $subdir;
     my $is_published=0; # True when printing from resource space.      my $is_published=0; # True when printing from resource space.
     my $res_printable = 1; # By default the current resource is printable.          my $res_printable = 1; # By default the current resource is printable.    
       my $res_error;
     my $userCanPrint = ($perm{'pav'} || $perm{'pfo'});      my $userCanPrint = ($perm{'pav'} || $perm{'pfo'});
     my $res_printstartdate;      my $res_printstartdate;
     my $res_printenddate;      my $res_printenddate;
Line 4093  sub printHelper { Line 4115  sub printHelper {
     ($map, $id, $url) = &Apache::lonnet::decode_symb($symb);      ($map, $id, $url) = &Apache::lonnet::decode_symb($symb);
     $helper->{VARS}->{'postdata'} =       $helper->{VARS}->{'postdata'} = 
  &Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url));   &Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url));
     my $navmap = Apache::lonnavmaps::navmap->new();              if (!$userCanPrint) {
     my $res   = $navmap->getBySymb($symb);          my $navmap = Apache::lonnavmaps::navmap->new();
     $res_printable  = $res->resprintable() || $userCanPrint; #printability in course context                  if (ref($navmap)) {
     ($res_printstartdate, $res_printenddate) = &get_print_dates($res);              my $res = $navmap->getBySymb($symb);
     ($course_open, $course_close) = &course_print_dates($res);                      if (ref($res)) {
     ($map_open, $map_close)       = &map_print_dates($res);                  $res_printable = $res->resprintable(); #printability in course context
                   ($res_printstartdate, $res_printenddate) = &get_print_dates($res);
                   ($course_open, $course_close) = &course_print_dates($res);
                   ($map_open, $map_close) = &map_print_dates($res);
                       } else {
                           $res_error = 1; 
                       }
                   } else {
                       $res_error = 1;
                   }
               }
  } else {   } else {
     # Resource space.      # Resource space.
   
Line 4486  ALL_PROBLEMS Line 4517  ALL_PROBLEMS
   
  }   }
   
         my @lines = &Apache::grades::get_scantronformat_file();          my @lines = &Apache::lonnet::get_scantronformat_file();
  my $codechoice='';   my $codechoice='';
  foreach my $line (@lines) {   foreach my $line (@lines) {
             next if (($line =~ /^\#/) || ($line eq ''));              next if (($line =~ /^\#/) || ($line eq ''));
Line 4698  CHOOSE_FROM_SUBDIR Line 4729  CHOOSE_FROM_SUBDIR
 CHOOSE_FROM_ANY_SEQUENCE  CHOOSE_FROM_ANY_SEQUENCE
 }  }
   
       my $numchoices = 0;
       if (ref($printChoices) eq 'ARRAY') {
           $numchoices = @{$printChoices};
       }
       # Early out if nothing to print
       if (!$numchoices) {
           $r->print(&Apache::loncommon::start_page('Printing Helper').
                     '<h2>'.&mt('Unable to determine print context').'</h2>'.
                     '<p>'.&mt('Please display a resource, and then click the "Print" button/icon').'</p>');
           my $prtspool=$r->dir_config('lonPrtDir');
           my $footer = &recently_generated($prtspool);
           $r->print($footer.&Apache::loncommon::end_page());
           return OK;
       }
   
     # Generate the first state, to select which resources get printed.      # Generate the first state, to select which resources get printed.
     Apache::lonhelper::state->new("START", "Select Printing Options:");      Apache::lonhelper::state->new("START", "Select Printing Options:");
     if (!$res_printable) {      if (!$res_printable) {
         my $now = time;  
         my $shownprintstart = &Apache::lonlocal::locallocaltime($res_printstartdate);  
         my $shownprintend = &Apache::lonlocal::locallocaltime($res_printenddate);  
         my $noprintmsg;          my $noprintmsg;
         if (($res_printenddate) && ($res_printenddate < $now)) {          if ($res_error) {
               $noprintmsg = &mt('Print availability for current resource could not be determined');
           } else {
               my $now = time;
               my $shownprintstart = &Apache::lonlocal::locallocaltime($res_printstartdate);
               my $shownprintend = &Apache::lonlocal::locallocaltime($res_printenddate);
               if (($res_printenddate) && ($res_printenddate < $now)) {
                 $noprintmsg = &mt('Printing for current resource no longer available (ended: [_1])',                  $noprintmsg = &mt('Printing for current resource no longer available (ended: [_1])',
                                   $shownprintend);                                    $shownprintend);
         } else {              } else {
             if (($res_printstartdate) && ($res_printstartdate > $now)) {                  if (($res_printstartdate) && ($res_printstartdate > $now)) {
                 if (($res_printenddate) && ($res_printenddate > $now) && ($res_printenddate > $res_printstartdate)) {                      if (($res_printenddate) && ($res_printenddate > $now) && ($res_printenddate > $res_printstartdate)) {
                     $noprintmsg = &mt('Printing for current resource is only possible between [_1] and [_2]',                          $noprintmsg = &mt('Printing for current resource is only possible between [_1] and [_2]',
                                   $shownprintstart,$shownprintend);                                            $shownprintstart,$shownprintend);
                 } elsif (!$res_printenddate) {                      } elsif (!$res_printenddate) {
                     $noprintmsg = &mt('Printing for current resource will only be possible starting [_1]',                          $noprintmsg = &mt('Printing for current resource will only be possible starting [_1]',
                                       $shownprintstart);                                            $shownprintstart);
                 } else {                      } else {
                     $noprintmsg = &mt('Printing for current resource is unavailable');                          $noprintmsg = &mt('Printing for current resource is unavailable');
                       }
                 }                  }
             }              }
         }          }
Line 4773  CHOOSE_FROM_ANY_SEQUENCE Line 4823  CHOOSE_FROM_ANY_SEQUENCE
             my $xmlfrag = << "FONT_SELECTION";              my $xmlfrag = << "FONT_SELECTION";
   
                       
             <dropdown variable='fontsize' multichoice='0', allowempty='0'>              <dropdown variable='fontsize' multichoice='0' allowempty='0'>
             <defaultvalue>              <defaultvalue>
   return 'normalsize';    return 'normalsize';
             </defaultvalue>              </defaultvalue>

Removed from v.1.661  
changed lines
  Added in v.1.675


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