Diff for /loncom/interface/lonprintout.pm between versions 1.627.2.19 and 1.627.2.32.2.5

version 1.627.2.19, 2016/12/06 03:46:09 version 1.627.2.32.2.5, 2023/02/03 01:20:30
Line 143  sub printable_sequence { Line 143  sub printable_sequence {
 # Parameters:  # Parameters:
 #    helper - the helper which already contains info about the current folder we can  #    helper - the helper which already contains info about the current folder we can
 #             purloin.  #             purloin.
 #    url    - Top url of the sequence  #    map    - the map for which incomplete problems are to be printed
   #    nocurrloc - True if printout called from icon/link in Tools in /adm/navmaps
 # Return:  # Return:
 #     XML that can be parsed by the helper to drive the state machine.  #     XML that can be parsed by the helper to drive the state machine.
 #  #
 sub create_incomplete_folder_selstud_helper {  sub create_incomplete_folder_selstud_helper {
     my ($helper, $map)  = @_;      my ($helper, $map, $nocurrloc)  = @_;
   
   
     my $symbFilter = '$res->shown_symb()';      my $symbFilter = '$res->shown_symb()';
Line 157  sub create_incomplete_folder_selstud_hel Line 158  sub create_incomplete_folder_selstud_hel
   
     my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_PEOPLE_SEQ',      my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_PEOPLE_SEQ',
       'Select problem(s) to print',        'Select problem(s) to print',
       'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',        'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'"',
       'RESOURCES',        'RESOURCES',
       'CHOOSE_STUDENTS_INCOMPLETE',        'CHOOSE_STUDENTS_INCOMPLETE',
       $map,        $map,
Line 206  sub create_incomplete_course_helper { Line 207  sub create_incomplete_course_helper {
           
     my $resource_chooser = &generate_resource_chooser('INCOMPLETE_PROBLEMS_COURSE_RESOURCES',      my $resource_chooser = &generate_resource_chooser('INCOMPLETE_PROBLEMS_COURSE_RESOURCES',
       'Select problem(s) to print',        'Select problem(s) to print',
       'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1"',        'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1" modallink="1"',
       'RESOURCES',        'RESOURCES',
       'INCOMPLETE_PROBLEMS_COURSE_STUDENTS',        'INCOMPLETE_PROBLEMS_COURSE_STUDENTS',
       '',        '',
Line 235  sub create_incomplete_course_helper { Line 236  sub create_incomplete_course_helper {
 # Parameters:  # Parameters:
 #   $helper - helper we are generating states for.  #   $helper - helper we are generating states for.
 #   $map    - The map for which the student wants incomplete problems.  #   $map    - The map for which the student wants incomplete problems.
   #   $nocurrloc - True if printout called from icon/link in Tools in /adm/navmaps
 # Returns:  # Returns:
 #   XML that defines the helper states being created.  #   XML that defines the helper states being created.
 #  #
Line 242  sub create_incomplete_course_helper { Line 244  sub create_incomplete_course_helper {
 #   CHOOSE_INCOMPLETE_SEQ  - Resource selector.  #   CHOOSE_INCOMPLETE_SEQ  - Resource selector.
 #  #
 sub create_incomplete_folder_helper {  sub create_incomplete_folder_helper {
     my ($helper, $map) = @_;      my ($helper, $map, $nocurrloc) = @_;
   
     my $filter    = '$res->is_problem()';      my $filter    = '$res->is_problem()';
     $filter      .= ' && $res->resprintable() ';      $filter      .= ' && $res->resprintable() ';
Line 252  sub create_incomplete_folder_helper { Line 254  sub create_incomplete_folder_helper {
   
     my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_SEQ',      my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_SEQ',
       'Select problem(s) to print',        'Select problem(s) to print',
       'multichoice="1", toponly ="1", addstatus="1", closeallpages="1"',        'multichoice="1", toponly ="1", addstatus="1", closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'"',
       'RESOURCES',        'RESOURCES',
       'PAGESIZE',        'PAGESIZE',
       $map,        $map,
Line 306  CHOOSE_STUDENTS Line 308  CHOOSE_STUDENTS
 #     this_state    - State name of the chooser.  #     this_state    - State name of the chooser.
 #     prompt_text   - Text to use to prompt user.  #     prompt_text   - Text to use to prompt user.
 #     resource_options - Resource tag options e.g.  #     resource_options - Resource tag options e.g.
 #                        "multichoice='1', toponly='1', addstatus='1'"  #                        "multichoice='1', toponly='1', addstatus='1',
   #                         modallink='1'"
 #                     that control the selection and appearance of the  #                     that control the selection and appearance of the
 #                     resource selector.  #                     resource selector.
 #     variable      - Name of the variable to hold the choice  #     variable      - Name of the variable to hold the choice
Line 443  CHOOSE_ANON1 Line 446  CHOOSE_ANON1
    return $result;     return $result;
 }  }
   
   sub generate_common_choosers {
       my ($r,$helper,$map,$url,$isProblem,$symbFilter,$start_new_option) = @_;
   
       my $randomly_ordered_warning =
           &get_randomly_ordered_warning($helper, $map);
   
       # code for a few states used for printout launched from both
       # /adm/navmpas and from a resource by a privileged user:
       #   - To allow resources to be selected for printing.
       #   - To determine pagination between assignments.
       #   - To determine how many assignments should be bundled into a single PDF.
   
       my $resource_selector= &generate_resource_chooser('SELECT_PROBLEMS',
                                                         'Select resources to print',
                                                         'multichoice="1" addstatus="1" closeallpages="1" modallink="1" suppressNavmap="1"',
                                                         'RESOURCES',
                                                         'PRINT_FORMATTING',
                                                         $map,
                                                         $isProblem, '', $symbFilter,
                                                         $start_new_option);
       $resource_selector .=  &generate_format_selector($helper,
                                                        'How should results be printed?',
                                                        'PRINT_FORMATTING').
                              &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
                                                         'Select Problem(s) to print',
                                                         "multichoice='1' addstatus='1' closeallpages ='1' modallink='1'",
                                                         'RESOURCES',
                                                         'PRINT_FORMATTING',
                                                         $url,
                                                         $isProblem, '',  $symbFilter,
                                                         $start_new_option);
   
   # Generate student choosers.
   
       &Apache::lonxml::xmlparse($r, 'helper',
                                 &generate_student_chooser('CHOOSE_TGT_STUDENTS_PAGE',
                                                           'student_sort',
                                                           'STUDENTS',
                                                           'CHOOSE_STUDENTS_PAGE'));
       &Apache::lonxml::xmlparse($r, 'helper',
                                 &generate_student_chooser('CHOOSE_STUDENTS',
                                                           'student_sort',
                                                           'STUDENTS',
                                                           'SELECT_PROBLEMS'));
       &Apache::lonxml::xmlparse($r, 'helper', $resource_selector);
   
       my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
       my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum);
       my $namechoice='<choice></choice>';
       foreach my $name (sort {uc($a) cmp uc($b)} @names) {
           if ($name =~ /^error: 2 /) { next; }
           if ($name =~ /^type\0/) { next; }
           $namechoice.='<choice computer="'.$name.'">'.$name.'</choice>';
       }
   
       my %code_values;
       my %codes_to_print;
       foreach my $key (@names) {
           %code_values = &Apache::grades::get_codes($key, $cdom, $cnum);
           foreach my $key (keys(%code_values)) {
               $codes_to_print{$key} = 1;
           }
       }
   
       my $code_selection;
       foreach my $code (sort {uc($a) cmp uc($b)} (keys(%codes_to_print))) {
           my $choice  = $code;
           if ($code =~ /^[A-Z]+$/) { # Alpha code
               $choice = &letters_to_num($code);
           }
           push(@{$helper->{DATA}{ALL_CODE_CHOICES}},[$code,$choice]);
       }
       if (%codes_to_print) {
           $code_selection .='
           <message><b>Choose single CODE from list:</b></message>
           <message></td><td></message>
               <dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0">
                 <choice></choice>
                 <exec>
                    push(@{$state->{CHOICES}},@{$helper->{DATA}{ALL_CODE_CHOICES}});
                 </exec>
               </dropdown>
           <message></td></tr><tr><td></message>
           '.$/;
       }
   
       my @lines = &Apache::lonnet::get_scantronformat_file();
       my $codechoice='';
       foreach my $line (@lines) {
           next if (($line =~ /^\#/) || ($line eq ''));
           my ($name,$description,$code_type,$code_length)=
               (split(/:/,$line))[0,1,2,4];
           if ($code_length > 0 &&
               $code_type =~/^(letter|number|-1)/) {
               $codechoice.='<choice computer="'.$name.'">'.$description.'</choice>';
           }
       }
       if ($codechoice eq '') {
           $codechoice='<choice computer="default">Default</choice>';
       }
       my $anon1 = &generate_code_selector($helper,
                                           'CHOOSE_ANON1',
                                           'SELECT_PROBLEMS',
                                           $codechoice,
                                           $code_selection,
                                           $namechoice) . $resource_selector;
   
       &Apache::lonxml::xmlparse($r, 'helper',$anon1);
   
       my $anon_page = &generate_code_selector($helper,
                                               'CHOOSE_ANON1_PAGE',
                                               'SELECT_PROBLEMS_PAGE',
                                               $codechoice,
                                               $code_selection,
                                               $namechoice) .
                       &generate_resource_chooser('SELECT_PROBLEMS_PAGE',
                                                  'Select Problem(s) to print',
                                                  "multichoice='1' addstatus='1' closeallpages ='1' modallink='1'",
                                                  'RESOURCES',
                                                  'PRINT_FORMATTING',
                                                  $url,
                                                  $isProblem, '',  $symbFilter,
                                                  $start_new_option);
       &Apache::lonxml::xmlparse($r, 'helper', $anon_page);
       return ($randomly_ordered_warning,$codechoice,$code_selection,$namechoice);
   }
   
 #  Returns the XML for choosing how assignments are to be formatted   #  Returns the XML for choosing how assignments are to be formatted 
 #  that text must still be parsed by the helper xml parser.  #  that text must still be parsed by the helper xml parser.
 # Parameters: 3 (required)  # Parameters: 3 (required)
Line 457  sub generate_format_selector { Line 588  sub generate_format_selector {
     my $secpdfoption;      my $secpdfoption;
     unless (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon')     ||      unless (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon')     ||
             ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') ||              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') ||
             ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon')  ) {              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon') ||
               ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences_problems_for_anon') ||
               ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences_resources_for_anon')) {
         $secpdfoption =  '<choice computer="sections">Each PDF contains exactly one section</choice>';          $secpdfoption =  '<choice computer="sections">Each PDF contains exactly one section</choice>';
     }      }
     return <<RESOURCE_SELECTOR;      return <<RESOURCE_SELECTOR;
Line 847  sub set_font_size { Line 980  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 890  sub include_pdf { Line 1023  sub include_pdf {
     my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};      my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
     $file =~ s{(.*)/res/}{$londocroot/res/};      $file =~ s{(.*)/res/}{$londocroot/res/};
   
     open(FILE,">>$Apache::lonnet::perlvar{'lonPrtDir'}/$env{'user.name'}_$env{'user.domain'}_printout.dat");      open(FILE,">>","$Apache::lonnet::perlvar{'lonPrtDir'}/$env{'user.name'}_$env{'user.domain'}_printout.dat");
     print FILE ("$file\n");      print FILE ("$file\n");
     close (FILE);      close (FILE);
   
Line 1237  sub is_valid_alpha_code { Line 1370  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) {
         next if (($line =~ /^\#/) || ($line eq ''));          next if (($line =~ /^\#/) || ($line eq ''));
  my ($name, $type, $length) = (split(/:/, $line))[0,2,4];   my ($name, $type, $length) = (split(/:/, $line))[0,2,4];
Line 1343  sub latex_header_footer_remove { Line 1476  sub latex_header_footer_remove {
 #  necessity is determined by the problem_split param.  #  necessity is determined by the problem_split param.
 #  #
 sub encapsulate_minipage {  sub encapsulate_minipage {
     my ($text) = @_;      my ($text,$problem_split) = @_;
     if (!($env{'form.problem.split'} =~ /yes/i)) {      if (!($problem_split =~ /yes/i)) {
  $text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}';   $text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}';
     }      }
     return $text;      return $text;
Line 1961  sub latex_corrections { Line 2094  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 2075  sub get_textwidth { Line 2208  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 2122  sub print_page_in_course { Line 2267  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 2150  sub print_page_in_course { Line 2288  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 2160  sub print_page_in_course { Line 2298  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 2548  sub print_construction_sequence { Line 2685  sub print_construction_sequence {
     my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';      my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
     $body.=&path_to_problem($urlp,$LaTeXwidth);      $body.=&path_to_problem($urlp,$LaTeXwidth);
     $body.='\vskip 1 mm '.$answer.'\end{document}';      $body.='\vskip 1 mm '.$answer.'\end{document}';
     $body = &encapsulate_minipage($body);      $body = &encapsulate_minipage($body,$answerform{'problem_split'});
     $texversion.=$body;      $texversion.=$body;
  }   }
     }      }
Line 2940  ENDPART Line 3077  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 3013  ENDPART Line 3149  ENDPART
     my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';      my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
     $body   .= &path_to_problem ($urlp,$LaTeXwidth);      $body   .= &path_to_problem ($urlp,$LaTeXwidth);
     $body   .='\vskip 1 mm '.$answer;      $body   .='\vskip 1 mm '.$answer;
     $body    = &encapsulate_minipage($body);      $body    = &encapsulate_minipage($body,$answerform{'problem_split'});
     $texversion .= $body;      $texversion .= $body;
  } else {   } else {
     $texversion='';      $texversion='';
Line 3115  ENDPART Line 3251  ENDPART
       ($print_type eq 'all_problems_students')           ||        ($print_type eq 'all_problems_students')           ||
       ($print_type eq 'resources_for_students')          ||        ($print_type eq 'resources_for_students')          ||
       ($print_type eq 'incomplete_problems_selpeople_course') ||        ($print_type eq 'incomplete_problems_selpeople_course') ||
       ($print_type eq 'map_incomplete_problems_people_seq')){        ($print_type eq 'map_incomplete_problems_people_seq') ||
                 ($print_type eq 'select_sequences_problems_for_students') ||
                 ($print_type eq 'select_sequences_resources_for_students')) {
   
   
      #-- prints assignments for whole class or for selected students         #-- prints assignments for whole class or for selected students  
Line 3124  ENDPART Line 3262  ENDPART
      ($print_type eq 'problems_for_students_from_page') ||       ($print_type eq 'problems_for_students_from_page') ||
      ($print_type eq 'all_problems_students')           ||       ($print_type eq 'all_problems_students')           ||
      ($print_type eq 'incomplete_problems_selpeople_course') ||       ($print_type eq 'incomplete_problems_selpeople_course') ||
      ($print_type eq 'map_incomplete_problems_people_seq')) {       ($print_type eq 'map_incomplete_problems_people_seq') ||
                ($print_type eq 'select_sequences_problems_for_students')) {
      $selectionmade=5;       $selectionmade=5;
      $type='problems';       $type='problems';
  } elsif ($print_type eq 'resources_for_students') {   } elsif (($print_type eq 'resources_for_students') ||
                     ($print_type eq 'select_sequences_resources_for_students')) {
      $selectionmade=8;       $selectionmade=8;
      $type='resources';       $type='resources';
  }   }
Line 3227  ENDPART Line 3367  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')     ||
                 ($print_type eq 'select_sequences_problems_for_anon') ||
                 ($print_type eq 'select_sequences_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 3236  ENDPART Line 3378  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);               next if (($line =~ /^\#/) || ($line eq ''));
      my ($name,$type,$length,$bubbles_per_item) =        my ($name,$type,$length,$bubbles_per_item) = 
                  (split(/:/,$line))[0,2,4,17];                   (split(/:/,$line))[0,2,4,17];
      if ($name eq $code_option) {       if ($name eq $code_option) {
Line 3251  ENDPART Line 3393  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 3331  ENDPART Line 3465  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 3353  ENDPART Line 3484  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 3454  ENDPART Line 3585  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'});
         $URLback = &Apache::lonnet::clutter($url);          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);
           $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'}) {
               $url = &Apache::lonenc::encrypted($url);
           }
           if ($url ne '') {
               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);
               }
           }
       } elsif (($helper->{VARS}->{'postdata'} eq '/adm/navmaps') &&
                ($env{'request.course.id'})) {
           $URLback=$helper->{VARS}->{'postdata'};
     }      }
     #      #
     # Final adjustment of the font size:      # Final adjustment of the font size:
Line 3538  ENDPART Line 3704  ENDPART
  'cgi.'.$identifier.'.role' => $perm{'pav'},   'cgi.'.$identifier.'.role' => $perm{'pav'},
  'cgi.'.$identifier.'.numberoffiles' => $#print_array,   'cgi.'.$identifier.'.numberoffiles' => $#print_array,
  'cgi.'.$identifier.'.studentnames' => $student_names,   'cgi.'.$identifier.'.studentnames' => $student_names,
  'cgi.'.$identifier.'.backref' => $URLback,});   'cgi.'.$identifier.'.backref' => &escape($URLback),});
     &Apache::lonnet::appenv({"cgi.$identifier.user"    => $env{'user.name'},      &Apache::lonnet::appenv({"cgi.$identifier.user"    => $env{'user.name'},
  "cgi.$identifier.domain"  => $env{'user.domain'},   "cgi.$identifier.domain"  => $env{'user.domain'},
  "cgi.$identifier.courseid" => $cnum,    "cgi.$identifier.courseid" => $cnum, 
Line 3707  sub print_resources { Line 3873  sub print_resources {
     my $body   ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';      my $body   ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
     $body     .=&path_to_problem($res_url,$LaTeXwidth);      $body     .=&path_to_problem($res_url,$LaTeXwidth);
     $body     .='\vskip 1 mm '.$ansrendered;      $body     .='\vskip 1 mm '.$ansrendered;
     $body     = &encapsulate_minipage($body);      $body     = &encapsulate_minipage($body,$answerenv{'problem_split'});
     $rendered = $header.$body;      $rendered = $header.$body;
  }   }
     }      }
Line 3797  sub print_resources { Line 3963  sub print_resources {
             $message = &mt('No incomplete resources');              $message = &mt('No incomplete resources');
         }          }
         if ($message) {          if ($message) {
             $current_output  = &encapsulate_minipage("\\vskip -10mm \n$message\n \\vskip 100 mm { }\n");              $current_output  = &encapsulate_minipage("\\vskip -10mm \n$message\n \\vskip 100 mm { }\n",$moreenv->{'problem_split'});
         }          }
  if ($remove_latex_header eq "NO") {   if ($remove_latex_header eq "NO") {
     $current_output = &print_latex_header() . $current_output;      $current_output = &print_latex_header() . $current_output;
Line 3858  sub handler { Line 4024  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 4037  sub printHelper { Line 4204  sub printHelper {
         $helper->{VARS}->{'construction'} = 1;          $helper->{VARS}->{'construction'} = 1;
     } else {      } else {
         if ($env{'form.postdata'}) {          if ($env{'form.postdata'}) {
             $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($env{'form.postdata'});              unless ($env{'form.postdata'} eq '/adm/navmaps') {
                   $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($env{'form.postdata'});
               }
     if ( $helper->{VARS}->{'symb'} eq '') {      if ( $helper->{VARS}->{'symb'} eq '') {
  $helper->{VARS}->{'postdata'} = $env{'form.postdata'};   $helper->{VARS}->{'postdata'} = $env{'form.postdata'};
     }      }
Line 4046  sub printHelper { Line 4215  sub printHelper {
             $helper->{VARS}->{'symb'} = $env{'form.symb'};              $helper->{VARS}->{'symb'} = $env{'form.symb'};
         }          }
         if ($env{'form.url'}) {          if ($env{'form.url'}) {
             $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});              unless ($env{'form.url'} eq '/adm/navmaps') {
                   $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
               }
         }          }
   
     }  
   
     if ($env{'form.symb'}) {  
         $helper->{VARS}->{'symb'} = $env{'form.symb'};  
     }      }
     if ($env{'form.url'}) {  
         $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});  
   
       if ($helper->{VARS}->{'symb'} ne '') {
           $helper->{VARS}->{'symb'}=
       &Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});
       }
       my ($resourceTitle,$sequenceTitle,$mapTitle,$cdom,$cnum);
       if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
           $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
           $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
               "uploaded/$cdom/$cnum/default.sequence") {
               my $navmap = Apache::lonnavmaps::navmap->new();
               if (ref($navmap)) {
                   my @toplevelres = $navmap->retrieveResources('',sub { !(($_[0]->is_map()) || ($_[0]->src =~ /^\/adm\/navmaps/)) },0,0);
                   if (@toplevelres) {
                       my @printable;
                       if ($perm{'pav'} || $perm{'pfo'}) {
                           @printable = @toplevelres;
                       } else {
                           @printable = $navmap->retrieveResources(undef,sub { $_[0]->resprintable() },0,1);
                       }
                       if (@printable) {
                           $sequenceTitle = 'Main Content';
                           $mapTitle = $sequenceTitle;
                       }
                   }
               }
           }
       } else {
           ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);
     }      }
     $helper->{VARS}->{'symb'}=  
  &Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});  
     my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);  
     if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;}      if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;}
   
           
Line 4070  sub printHelper { Line 4260  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 4091  sub printHelper { Line 4282  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();          } elsif (($helper->{VARS}->{'postdata'} eq '/adm/navmaps') &&
     my $res   = $navmap->getBySymb($symb);                  ($env{'request.course.id'} ne '')) {
     $res_printable  = $res->resprintable() || $userCanPrint; #printability in course context              if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
     ($res_printstartdate, $res_printenddate) = &get_print_dates($res);                  "uploaded/$cdom/$cnum/default.sequence") {
     ($course_open, $course_close) = &course_print_dates($res);                  $map = $env{'course.'.$env{'request.course.id'}.'.url'};
     ($map_open, $map_close)       = &map_print_dates($res);                  $url = $helper->{VARS}->{'postdata'};
               }
           }
           if (($symb ne '') || ($map ne '')) {
               if (!$userCanPrint) {
           my $navmap = Apache::lonnavmaps::navmap->new();
                   if (ref($navmap)) {
                       my $res;
                       if ($symb ne '') {
                           $res = $navmap->getBySymb($symb);
                       } elsif ($map ne '') {
                           $res = $navmap->getResourceByUrl($map);
                       }
                       if (ref($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 4109  sub printHelper { Line 4323  sub printHelper {
             my $postdata = $helper->{VARS}->{'postdata'};              my $postdata = $helper->{VARS}->{'postdata'};
             $resourceTitle = substr($postdata, rindex($postdata, '/') + 1);              $resourceTitle = substr($postdata, rindex($postdata, '/') + 1);
         }          }
         $subdir = &Apache::lonnet::filelocation("", $url);          if (($url eq '/adm/navmaps') && ($map eq $env{'course.'.$env{'request.course.id'}.'.url'})) {
               $res_printable=0;
           } else {
               $subdir = &Apache::lonnet::filelocation("", $url);
           }
   
   
     }      }
Line 4213  sub printHelper { Line 4431  sub printHelper {
  }   }
         my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE',          my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE',
  'Select Problem(s) to print',   'Select Problem(s) to print',
  "multichoice='1' toponly='1' addstatus='1' closeallpages='1'",   "multichoice='1' toponly='1' addstatus='1' closeallpages='1' modallink='1'",
  'RESOURCES',   'RESOURCES',
  'PAGESIZE',   'PAGESIZE',
  $url,   $url,
Line 4223  sub printHelper { Line 4441  sub printHelper {
   
       $helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE',        $helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE',
     'Select Resource(s) to print',      'Select Resource(s) to print',
     'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',      'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" suppressNavmap="1"',
     'RESOURCES',      'RESOURCES',
     'PAGESIZE',      'PAGESIZE',
     $url,      $url,
     $isNotMap, '', $symbFilter,      $isNotMap, '', $symbFilter,
     $start_new_option);      $start_new_option);
   
       
   
   
   
Line 4248  sub printHelper { Line 4466  sub printHelper {
  # the exact form of this depends on whether or not we are privileged or a mere   # the exact form of this depends on whether or not we are privileged or a mere
  # plebe of s student:   # plebe of s student:
   
           my $optionText    = '';
  my $printSelector = 'map_incomplete_problems_seq';   my $printSelector = 'map_incomplete_problems_seq';
  my $nextState     = 'CHOOSE_INCOMPLETE_SEQ';   my $nextState     = 'CHOOSE_INCOMPLETE_SEQ';
  my $textSuffix    = '';   my $textSuffix    = '';
           my $nocurrloc = '';
           if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
               $nocurrloc = 1;
           }
   
  if ($userCanPrint)  {   if ($userCanPrint)  {
     $printSelector = 'map_incomplete_problems_people_seq';      $printSelector = 'map_incomplete_problems_people_seq';
     $nextState     = 'CHOOSE_INCOMPLETE_PEOPLE_SEQ';      $nextState     = 'CHOOSE_INCOMPLETE_PEOPLE_SEQ';
     $textSuffix    = ' for selected students';      $textSuffix    = ' for selected students';
     my $helperStates =      my $helperStates =
  &create_incomplete_folder_selstud_helper($helper, $map);    &create_incomplete_folder_selstud_helper($helper, $map, $nocurrloc); 
     &Apache::lonxml::xmlparse($r, 'helper', $helperStates);      &Apache::lonxml::xmlparse($r, 'helper', $helperStates);
  } else {   } else {
     if (&printable($map_open, $map_close)) {      if (&printable($map_open, $map_close)) {
  my $helperStates = &create_incomplete_folder_helper($helper, $map); # Create needed states for student.   my $helperStates = &create_incomplete_folder_helper($helper, $map, $nocurrloc); # Create needed states for student.
  &Apache::lonxml::xmlparse($r, 'helper', $helperStates);   &Apache::lonxml::xmlparse($r, 'helper', $helperStates);
     } else {      } else {
  # TODO: Figure out how to break the news...this folder is not printable.   # TODO: Figure out how to break the news...this folder is not printable.
Line 4269  sub printHelper { Line 4492  sub printHelper {
  }   }
   
  if ($userCanPrint || &printable($map_open, $map_close)) {   if ($userCanPrint || &printable($map_open, $map_close)) {
               if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
                   $optionText = &mt('Selected [_1]Incomplete Problems[_2] [_3]not in a folder[_4]' . $textSuffix,
                                     '<b>','</b>','<i>','</i>');
               } else {
                   $optionText = &mt('Selected [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix,
                                     '<b>','</b>','<b><i>'.$sequenceTitle.'</b></i>');
               }
     push(@{$printChoices},      push(@{$printChoices},
  [&mt('Selected  [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix,   [$optionText,
       '<b>', '</b>',  
       '<b><i>'. $sequenceTitle . '</b></i>'),  
   $printSelector,    $printSelector,
   $nextState]);    $nextState]);
  }   }
         # Allow problems from sequence          # Allow problems from sequence
  if ($userCanPrint || &printable($map_open, $map_close)) {   if ($userCanPrint || &printable($map_open, $map_close)) {
               if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
                   $optionText = &mt('Selected [_1]Problems[_2] [_3]not in a folder[_4]','<b>','</b>','<i>','</i>');
               } else {
                   $optionText = &mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>');
               }
     push @{$printChoices},       push @{$printChoices}, 
     [&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'),       [$optionText, 
      'map_problems',        'map_problems', 
      'CHOOSE_PROBLEMS'];       'CHOOSE_PROBLEMS'];
     # Allow all resources from sequence      # Allow all resources from sequence
     push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'),               if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
                   $optionText = &mt('Selected [_1]Resources[_2] [_3]not in a folder[_4]','<b>','</b>','<i>','</i>');
               } else {
                   $optionText = &mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>');
               }
       push @{$printChoices}, [$optionText, 
     'map_problems_pages',       'map_problems_pages', 
     'CHOOSE_PROBLEMS_HTML'];      'CHOOSE_PROBLEMS_HTML'];
     my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS',      my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS',
     'Select Problem(s) to print',      'Select Problem(s) to print',
     'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',      'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'"',
     'RESOURCES',      'RESOURCES',
     'PAGESIZE',      'PAGESIZE',
     $map,      $map,
Line 4297  sub printHelper { Line 4535  sub printHelper {
     $start_new_option);      $start_new_option);
     $helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML',      $helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML',
   'Select Resource(s) to print',    'Select Resource(s) to print',
   'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',    'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'" suppressNavmap="1"',
   'RESOURCES',    'RESOURCES',
   'PAGESIZE',    'PAGESIZE',
   $map,    $map,
Line 4315  sub printHelper { Line 4553  sub printHelper {
  my $post_data = $helper->{VARS}->{'postdata'};   my $post_data = $helper->{VARS}->{'postdata'};
           
     if ($perm{'pfo'} &&  !$is_published  &&      if ($perm{'pfo'} &&  !$is_published  &&
         ($post_data=~/\/res\// || $post_data =~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {           ($post_data=~/\/res\// || $post_data =~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {
   
  # BZ 5209 - incomplete problems from entire course:   # BZ 5209 - incomplete problems from entire course:
   
  push(@{$printChoices},   push(@{$printChoices},
      [&mtn('Selected <b>Incomplete Problems</b> from <b>entire course</b> for selected people'),       [&mt('Selected [_1]Incomplete Problems[_2] from [_3]entire course[_4] for [_5]selected people[_6]',
                 '<b>','</b>','<b>','</b>','<b>','</b>'),
       'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']);        'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']);
  my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states.   my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states.
   
Line 4328  sub printHelper { Line 4567  sub printHelper {
   
  #  Selected problems/resources from entire course:   #  Selected problems/resources from entire course:
   
         push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b>'), 'all_problems', 'ALL_PROBLEMS'];          push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from [_3]entire course[_4]','<b>','</b>','<b>','</b>'), 'all_problems', 'ALL_PROBLEMS'];
  push @{$printChoices}, [&mtn('Selected <b>Resources</b> from <b>entire course</b>'), 'all_resources', 'ALL_RESOURCES'];   push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from [_3]entire course[_4]','<b>','</b>','<b>','</b>'), 'all_resources', 'ALL_RESOURCES'];
  push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b> for <b>selected people</b>'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS'];   push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from [_3]entire course[_4] for [_5]selected people[_6]','<b>','</b>','<b>','</b>','<b>','</b>'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS'];
 my $suffixXml = <<ALL_PROBLEMS;  my $suffixXml = <<ALL_PROBLEMS;
   <state name="STUDENTS1" title="Select People">    <state name="STUDENTS1" title="Select People">
       <message><b>Select sorting order of printout</b> </message>        <message><b>Select sorting order of printout</b> </message>
Line 4345  ALL_PROBLEMS Line 4584  ALL_PROBLEMS
          &Apache::lonxml::xmlparse($r, 'helper',            &Apache::lonxml::xmlparse($r, 'helper', 
    &generate_resource_chooser('ALL_PROBLEMS',     &generate_resource_chooser('ALL_PROBLEMS',
       'Select Problem(s) to print',        'Select Problem(s) to print',
       'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',        'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1" modallink="1"',
       'RESOURCES',        'RESOURCES',
       'PAGESIZE',        'PAGESIZE',
       '',        '',
Line 4354  ALL_PROBLEMS Line 4593  ALL_PROBLEMS
       $start_new_option) .        $start_new_option) .
    &generate_resource_chooser('ALL_RESOURCES',     &generate_resource_chooser('ALL_RESOURCES',
       'Select Resource(s) to print',        'Select Resource(s) to print',
       " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1'",        'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1" modallink="1" suppressNavmap="1"',
       'RESOURCES',        'RESOURCES',
       'PAGESIZE',        'PAGESIZE',
       '',        '',
Line 4362  ALL_PROBLEMS Line 4601  ALL_PROBLEMS
       $start_new_option) .        $start_new_option) .
    &generate_resource_chooser('ALL_PROBLEMS_STUDENTS',     &generate_resource_chooser('ALL_PROBLEMS_STUDENTS',
       'Select Problem(s) to print',        'Select Problem(s) to print',
       'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',        'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1" modallink="1"',
       'RESOURCES',        'RESOURCES',
       'STUDENTS1',        'STUDENTS1',
       '',        '',
Line 4392  ALL_PROBLEMS Line 4631  ALL_PROBLEMS
     'problems_for_anon', 'CHOOSE_ANON1'];      'problems_for_anon', 'CHOOSE_ANON1'];
  }   }
   
  my $randomly_ordered_warning =           my ($randomly_ordered_warning,$codechoice,$code_selection,$namechoice) =
             &get_randomly_ordered_warning($helper, $map);              &generate_common_choosers($r,$helper,$map,$url,$isProblem,$symbFilter,$start_new_option);
   
  # resource_selector will hold a few states that:  
  #   - Allow resources to be selected for printing.  
  #   - Determine pagination between assignments.  
  #   - Determine how many assignments should be bundled into a single PDF.  
         # TODO:  
  #    Probably good to do things like separate this up into several vars, each  
  #    with one state, and use REGEXPs at inclusion time to set state names  
  #    and next states for better mix and match capability  
  #  
  my $resource_selector= &generate_resource_chooser('SELECT_PROBLEMS',  
   'Select resources to print',  
   'multichoice="1" addstatus="1" closeallpages="1"',  
   'RESOURCES',   
   'PRINT_FORMATTING',  
   $map,  
   $isProblem, '', $symbFilter,  
   $start_new_option);  
  $resource_selector .=  &generate_format_selector($helper,  
                                                          'How should results be printed?',  
                                                          'PRINT_FORMATTING').  
                                &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',  
  'Select Problem(s) to print',  
  "multichoice='1' addstatus='1' closeallpages ='1'",  
  'RESOURCES',  
  'PRINT_FORMATTING',  
  $url,  
  $isProblem, '',  $symbFilter,  
  $start_new_option);  
   
   
 # Generate student choosers.  
   
   
   
         &Apache::lonxml::xmlparse($r, 'helper',  
   &generate_student_chooser('CHOOSE_TGT_STUDENTS_PAGE',  
     'student_sort',  
     'STUDENTS',  
     'CHOOSE_STUDENTS_PAGE'));  
  &Apache::lonxml::xmlparse($r, 'helper',   
   &generate_student_chooser('CHOOSE_STUDENTS',  
     'student_sort',  
     'STUDENTS',  
     'SELECT_PROBLEMS'));  
  &Apache::lonxml::xmlparse($r, 'helper', $resource_selector);  
   
  my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
  my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
         my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum);  
  my $namechoice='<choice></choice>';  
  foreach my $name (sort {uc($a) cmp uc($b)} @names) {  
     if ($name =~ /^error: 2 /) { next; }  
     if ($name =~ /^type\0/) { next; }  
     $namechoice.='<choice computer="'.$name.'">'.$name.'</choice>';  
  }  
   
   
  my %code_values;  
  my %codes_to_print;  
  foreach my $key (@names) {  
     %code_values = &Apache::grades::get_codes($key, $cdom, $cnum);  
     foreach my $key (keys(%code_values)) {  
  $codes_to_print{$key} = 1;  
     }  
  }  
   
  my $code_selection;  
  foreach my $code (sort {uc($a) cmp uc($b)} (keys(%codes_to_print))) {  
     my $choice  = $code;  
     if ($code =~ /^[A-Z]+$/) { # Alpha code  
  $choice = &letters_to_num($code);  
     }  
     push(@{$helper->{DATA}{ALL_CODE_CHOICES}},[$code,$choice]);  
  }  
  if (%codes_to_print) {  
     $code_selection .='     
     <message><b>Choose single CODE from list:</b></message>  
  <message></td><td></message>  
  <dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0">  
                   <choice></choice>  
                   <exec>  
                      push(@{$state->{CHOICES}},@{$helper->{DATA}{ALL_CODE_CHOICES}});  
                   </exec>  
  </dropdown>  
     <message></td></tr><tr><td></message>  
             '.$/;  
   
  }  
   
         my @lines = &Apache::grades::get_scantronformat_file();  
  my $codechoice='';  
  foreach my $line (@lines) {  
     my ($name,$description,$code_type,$code_length)=  
  (split(/:/,$line))[0,1,2,4];  
     if ($code_length > 0 &&   
  $code_type =~/^(letter|number|-1)/) {  
  $codechoice.='<choice computer="'.$name.'">'.$description.'</choice>';  
     }  
  }  
  if ($codechoice eq '') {  
     $codechoice='<choice computer="default">Default</choice>';  
  }  
  my $anon1 = &generate_code_selector($helper,   
     'CHOOSE_ANON1',  
     'SELECT_PROBLEMS',  
     $codechoice,  
     $code_selection,  
     $namechoice) . $resource_selector;  
       
       
         &Apache::lonxml::xmlparse($r, 'helper',$anon1);  
   
  my $anon_page = &generate_code_selector($helper,  
  'CHOOSE_ANON1_PAGE',  
  'SELECT_PROBLEMS_PAGE',  
  $codechoice,  
  $code_selection,  
  $namechoice) .  
  &generate_resource_chooser('SELECT_PROBLEMS_PAGE',  
    'Select Problem(s) to print',  
    "multichoice='1' addstatus='1' closeallpages ='1'",  
    'RESOURCES',  
    'PRINT_FORMATTING',  
    $url,  
    $isProblem, '',  $symbFilter,  
    $start_new_option);  
  &Apache::lonxml::xmlparse($r, 'helper', $anon_page);  
   
   
  if ($helper->{VARS}->{'assignment'}) {   if ($helper->{VARS}->{'assignment'}) {
   
Line 4531  ALL_PROBLEMS Line 4641  ALL_PROBLEMS
     push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_students', 'CHOOSE_STUDENTS1'];      push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_students', 'CHOOSE_STUDENTS1'];
     push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_anon', 'CHOOSE_ANON2'];      push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_anon', 'CHOOSE_ANON2'];
  }   }
       
   
  $resource_selector=<<RESOURCE_SELECTOR;          # resource_selector will hold a few states that:
           #   - Allow resources to be selected for printing.
           #   - Determine pagination between assignments.
           #   - Determine how many assignments should be bundled into a single PDF.
           # TODO:
           #    Probably good to do things like separate this up into several vars, each
           #    with one state, and use REGEXPs at inclusion time to set state names
           #    and next states for better mix and match capability
           #
       
    my $resource_selector=<<RESOURCE_SELECTOR;
     <state name="SELECT_RESOURCES" title="Select Resources">      <state name="SELECT_RESOURCES" title="Select Resources">
     $randomly_ordered_warning      $randomly_ordered_warning
     <nextstate>PRINT_FORMATTING</nextstate>      <nextstate>PRINT_FORMATTING</nextstate>
     <message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message>      <message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message>
     <resource variable="RESOURCES" multichoice="1" addstatus="1"       <resource variable="RESOURCES" multichoice="1" addstatus="1" 
               closeallpages="1">                closeallpages="1" modallink="1">
       <filterfunc>return $isNotMap;</filterfunc>        <filterfunc>return $isNotMap;</filterfunc>
       <mapurl>$map</mapurl>        <mapurl>$map</mapurl>
       <valuefunc>return $symbFilter;</valuefunc>        <valuefunc>return $symbFilter;</valuefunc>
Line 4630  CHOOSE_ANON2 Line 4749  CHOOSE_ANON2
   
     # FIXME: That RE should come from a library somewhere.      # FIXME: That RE should come from a library somewhere.
     if (($perm{'pav'}       if (($perm{'pav'} 
           && ($subdir ne '')
  && $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'   && $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'
  && (defined($helper->{'VARS'}->{'construction'})   && (defined($helper->{'VARS'}->{'construction'})
     ||      ||
Line 4663  CHOOSE_FROM_SUBDIR Line 4783  CHOOSE_FROM_SUBDIR
   
     # Allow the user to select any sequence in the course, feed it to      # Allow the user to select any sequence in the course, feed it to
     # another resource selector for that sequence      # another resource selector for that sequence
     if (!$helper->{VARS}->{'construction'} && !$is_published) {      if ((!$helper->{VARS}->{'construction'}) &&
  push @$printChoices, [&mtn("Selected <b>Resources</b> from <b>selected folder</b> in course"),          (!$is_published || (($subdir eq '') && ($url eq '/adm/navmaps')))) {
       'select_sequences', 'CHOOSE_SEQUENCE'];          push(@$printChoices,[&mt('Selected [_1]Resources[_2] from [_3]selected folder[_4] in course',
  my $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'};                                   '<b>','</b>','<b>','</b>'),
  #Escape apostrophes and backslashes for Perl                               'select_sequences','CHOOSE_SEQUENCE']);
  $escapedSequenceName =~ s/\\/\\\\/g;          my $escapedSequenceName;
  $escapedSequenceName =~ s/'/\\'/g;          if ($helper->{VARS}->{'SEQUENCE'} ne '') {
  &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_FROM_ANY_SEQUENCE);              $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'};
           } elsif (($subdir eq '') && ($url eq '/adm/navmaps')) {
               my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
               my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
               if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
                   "uploaded/$cdom/$cnum/default.sequence") {
                   $escapedSequenceName = $env{'course.'.$env{'request.course.id'}.'.url'};
               }
           }
           #Escape apostrophes and backslashes for Perl
           $escapedSequenceName =~ s/\\/\\\\/g;
           $escapedSequenceName =~ s/'/\\'/g;
           my $nocurrloc;
           if (($subdir eq '') && ($url eq '/adm/navmaps')) {
               $nocurrloc = 'nocurrloc="1"';
               if ($perm{'pfo'}) {
                   push(@{$printChoices},
                       [&mt('Selected [_1]Problems[_2] from [_3]selected folder[_4] in course for [_5]selected people[_6]',
                            '<b>','</b>','<b>','</b>','<b>','</b>'),
                            'select_sequences_problems_for_students','CHOOSE_SEQUENCE_STUDENTS'],
                       [&mt('Selected [_1]Problems[_2] from [_3]selected folder[_4] in course  for [_5]CODEd assignments[_6]',
                            '<b>','</b>','<b>','</b>','<b>','</b>'),
                            'select_sequences_problems_for_anon','CHOOSE_SEQUENCE_ANON1'],
                       [&mt('Selected [_1]Resources[_2] from [_3]selected folder[_4] in course for [_5]selected people[_6]',
                            '<b>','</b>','<b>','</b>','<b>','</b>'),
                            'select_sequences_resources_for_students','CHOOSE_SEQUENCE_STUDENTS1'],
                       [&mt('Selected [_1]Resources[_2] from [_3]selected folder[_4] in course for [_5]CODEd assignments[_6]',
                            '<b>','</b>','<b>','</b>','<b>','</b>'),
                            'select_sequences_resources_for_anon','CHOOSE_SEQUENCE_ANON2']);
                   if ($escapedSequenceName) {
                       &generate_common_choosers($r,$helper,$escapedSequenceName,$escapedSequenceName,$isProblem,$symbFilter,$start_new_option);
                   }
               }
           }
           if (($subdir eq '') && ($url eq '/adm/navmaps') && ($perm{'pfo'})) {
              &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_FROM_ANY_SEQUENCE);
     <state name="CHOOSE_SEQUENCE" title="Select Sequence To Print From">
       <message>Select the sequence to print resources from:</message>
       <resource variable="SEQUENCE">
         <nextstate>CHOOSE_FROM_ANY_SEQUENCE</nextstate>
         <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>
         <valuefunc>return $urlValue;</valuefunc>
         <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
           </choicefunc>
         </resource>
       </state>
     <state name="CHOOSE_SEQUENCE_STUDENTS" title="Select Sequence To Print From">
       <message>Select the sequence to print resources from:</message>
       <resource variable="SEQUENCE">
         <nextstate>CHOOSE_STUDENTS</nextstate>
         <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>
         <valuefunc>return $urlValue;</valuefunc>
         <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
           </choicefunc>
         </resource>
       </state>
     <state name="CHOOSE_SEQUENCE_ANON1" title="Select Sequence To Print From">
       <message>Select the sequence to print resources from:</message>
       <resource variable="SEQUENCE">
         <nextstate>CHOOSE_ANON1</nextstate>
         <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>
         <valuefunc>return $urlValue;</valuefunc>
         <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
           </choicefunc>
         </resource>
       </state>
     <state name="CHOOSE_SEQUENCE_STUDENTS1" title="Select Sequence To Print From">
       <message>Select the sequence to print resources from:</message>
       <resource variable="SEQUENCE">
         <nextstate>CHOOSE_STUDENTS</nextstate>
         <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>
         <valuefunc>return $urlValue;</valuefunc>
         <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
           </choicefunc>
         </resource>
       </state>
     <state name="CHOOSE_SEQUENCE_ANON2" title="Select Sequence To Print From">
       <message>Select the sequence to print resources from:</message>
       <resource variable="SEQUENCE">
         <nextstate>CHOOSE_ANON1</nextstate>
         <filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc>
         <valuefunc>return $urlValue;</valuefunc>
         <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
           </choicefunc>
         </resource>
       </state>
     <state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print">
       <message>(mark desired resources then click "next" button) <br /></message>
       <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"
                 closeallpages="1" modallink="1" suppressNavmap="1" $nocurrloc>
         <nextstate>PAGESIZE</nextstate>
         <filterfunc>return $isNotMap</filterfunc>
         <mapurl evaluate='1'>return '$escapedSequenceName';</mapurl>
         <valuefunc>return $symbFilter;</valuefunc>
         $start_new_option
         </resource>
       </state>
   CHOOSE_FROM_ANY_SEQUENCE
           } else {
       &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 4684  CHOOSE_FROM_SUBDIR Line 4903  CHOOSE_FROM_SUBDIR
   <state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print">    <state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print">
     <message>(mark desired resources then click "next" button) <br /></message>      <message>(mark desired resources then click "next" button) <br /></message>
     <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"      <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"
               closeallpages="1">                closeallpages="1" modallink="1" suppressNavmap="1" $nocurrloc>
       <nextstate>PAGESIZE</nextstate>        <nextstate>PAGESIZE</nextstate>
       <filterfunc>return $isNotMap</filterfunc>        <filterfunc>return $isNotMap</filterfunc>
       <mapurl evaluate='1'>return '$escapedSequenceName';</mapurl>        <mapurl evaluate='1'>return '$escapedSequenceName';</mapurl>
Line 4693  CHOOSE_FROM_SUBDIR Line 4912  CHOOSE_FROM_SUBDIR
       </resource>        </resource>
     </state>      </state>
 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 4770  CHOOSE_FROM_ANY_SEQUENCE Line 5008  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.627.2.19  
changed lines
  Added in v.1.627.2.32.2.5


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