Diff for /loncom/interface/lonprintout.pm between versions 1.560.2.7 and 1.561

version 1.560.2.7, 2009/10/26 09:55:32 version 1.561, 2009/09/22 14:28:50
Line 1 Line 1
 #  
 # The LearningOnline Network  # The LearningOnline Network
 # Printout  # Printout
 #  #
Line 27 Line 26
 #  #
 #  #
 package Apache::lonprintout;  package Apache::lonprintout;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonxml;  use Apache::lonxml;
Line 74  my $ssi_retry_count = 5; # Some arbitrar Line 74  my $ssi_retry_count = 5; # Some arbitrar
   
 my $font_size = 'normalsize'; # Default is normalsize...  my $font_size = 'normalsize'; # Default is normalsize...
   
 #----------------------------  Helper helpers. -------------------------  
   
 #  Returns the text needd for a student chooser.  
 #  that text must still be parsed by the helper xml parser.  
 # Parameters:  
 #   this_state   - State name of the chooser.  
 #   sort_choice  - variable to hold the sorting choice.  
 #   variable     - Name of variable to hold students.  
 #   next_state   - State after chooser.  
   
   
 sub generate_student_chooser {  
     my ($this_state,   
  $sort_choice,   
  $variable,   
  $next_state) = @_;  
     my $result = <<CHOOSE_STUDENTS;  
   <state name="$this_state" title="Select Students and Resources">  
       <message><b>Select sorting order of printout</b> </message>  
   
     <choices variable="$sort_choice">  
       <choice computer='0'>Sort by section then student</choice>  
       <choice computer='1'>Sort by students across sections.</choice>  
     </choices>  
   
       <message><br /><hr /><br /> </message>  
       <student multichoice='1'   
                variable="$variable"   
                nextstate="$next_state"   
                coursepersonnel="1" />  
   </state>  
   
 CHOOSE_STUDENTS  
   
   return $result;  
 }  
   
 # Generate the text needed for a resource chooser given the top level of  
 # the sequence/page  
 #  
 # Parameters:  
 #     this_state    - State name of the chooser.  
 #     prompt_text   - Text to use to prompt user.  
 #     resource_options - Resource tag options e.g.  
 #                        "multichoice='1', toponly='1', addstatus='1'"  
 #                     that control the selection and appearance of the  
 #                     resource selector.  
 #     variable      - Name of the variable to hold the choice  
 #     next_state    - Name of the next state the helper should transition  
 #                     to  
 #     top_url       - Top level URL within which to make the selector.  
 #                     If empty the top level sequence is shown.  
 #     filter        - How to filter the resources.  
 #     value_func    - <valuefunc> function.  
 #     choice_func   - If not empty generates a <choicefunc> with this function.  
 #     start_new_option   
 #                   - Fragment appended after valuefunc.  
 #  
 #  
 sub generate_resource_chooser {  
     my ($this_state,  
  $prompt_text,  
  $resource_options,  
  $variable,  
  $next_state,  
  $top_url,  
  $filter,  
  $choice_func,  
  $value_func,  
  $start_new_option)  = @_;  
   
     my $result = <<CHOOSE_RESOURCES;  
 <state name="$this_state" title="$prompt_text">  
     <resource variable="$variable" $resource_options  
               closeallpages="1">  
       <nextstate>$next_state</nextstate>  
       <filterfunc>return $filter;</filterfunc>  
 CHOOSE_RESOURCES  
     if ($choice_func ne '') {  
  $result .= "<choicefunc>return $choice_func;</choicefunc>";  
     }  
     if ($top_url ne '') {  
  $result .=  "<mapurl>$top_url</mapurl>";  
     }  
     $result .= <<CHOOSE_RESOURCES;  
       <valuefunc>return $value_func;</valuefunc>  
       $start_new_option  
       </resource>  
     </state>  
 CHOOSE_RESOURCES  
   
     return $result;  
 }  
 #  
 #   Generate the helper XML for a code choice helper dialog:  
 #  
 # Paramters:  
 #   $helper       - Reference to the helper.  
 #   $state        - Name of the state for the chooser.  
 #   $next_state   - Name fo the state to follow the chooser.  
 #   $bubble_types - Populates the bubble sheet type dropt down.  
 #   $code_selections - Provides set of code choices that have been used  
 #   $saved_codes  - Provides the list of saved codes.  
 #  
 # Returns;  
 #   The Xml of the code chooser.  
 #  
 sub generate_code_selector {  
     my ($helper,  
  $state,  
  $next_state,  
  $bubble_types,  
  $code_selections,  
  $saved_codes) = @_; # Unpack the parameters.  
   
     my $result = <<CHOOSE_ANON1;  
   <state name="$state" title="Specify CODEd Assignments">  
     <nextstate>$next_state</nextstate>  
     <message><h4>Fill out one of the forms below</h4></message>  
     <message><br /><hr /> <br /></message>  
     <message><h3>Generate new CODEd Assignments</h3></message>  
     <message><table><tr><td><b>Number of CODEd assignments to print:</b></td><td></message>  
     <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">  
        <validator>  
  if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&  
     !\$helper->{'VARS'}{'REUSE_OLD_CODES'}                &&  
             !\$helper->{'VARS'}{'SINGLE_CODE'}                    &&  
     !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {  
     return "You need to specify the number of assignments to print";  
  }  
  return undef;  
        </validator>  
     </string>  
     <message></td></tr><tr><td></message>  
     <message><b>Names to save the CODEs under for later:</b></message>  
     <message></td><td></message>  
     <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />  
     <message></td></tr><tr><td></message>  
     <message><b>Bubble sheet type:</b></message>  
     <message></td><td></message>  
     <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">  
     $bubble_types  
     </dropdown>  
     <message></td></tr><tr><td colspan="2"></td></tr><tr><td></message>  
     <message></td></tr><tr><td></table></message>  
     <message><br /><hr /><h3>Print a Specific CODE </h3><br /><table></message>  
     <message><tr><td><b>Enter a CODE to print:</b></td><td></message>  
     <string variable="SINGLE_CODE" size="10">  
         <validator>  
    if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}           &&  
       !\$helper->{'VARS'}{'REUSE_OLD_CODES'}                 &&  
       !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {  
       return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},  
       \$helper->{'VARS'}{'CODE_OPTION'});  
    } else {  
        return undef; # Other forces control us.  
    }  
         </validator>  
     </string>  
     <message></td></tr><tr><td></message>  
         $code_selections  
     <message></td></tr></table></message>  
     <message><hr /><h3>Reprint a Set of Saved CODEs</h3><table><tr><td></message>  
     <message><b>Select saved CODEs:</b></message>  
     <message></td><td></message>  
     <dropdown variable="REUSE_OLD_CODES">  
         $saved_codes  
     </dropdown>  
     <message></td></tr></table></message>  
   </state>  
 CHOOSE_ANON1  
   
    return $result;  
 }  
   
 #-----------------------------------------------------------------------  
   
   
 # Fetch the contents of a resource, uninterpreted.  # Fetch the contents of a resource, uninterpreted.
 # This is used here to fetch a latex file to be included  # This is used here to fetch a latex file to be included
Line 1263  sub page_format_transformation { Line 1086  sub page_format_transformation {
   
     if ($selectionmade eq '4') {      if ($selectionmade eq '4') {
  if ($choice eq 'all_problems') {   if ($choice eq 'all_problems') {
     $assignment='Problems from the Whole Course';              $assignment=&mt('Problems from the Whole Course');
  } else {   } else {
     $assignment='Resources from the Whole Course';              $assignment=&mt('Resources from the Whole Course');
  }   }
     } else {      } else {
  $assignment=&Apache::lonxml::latex_special_symbols($assignment,'header');   $assignment=&Apache::lonxml::latex_special_symbols($assignment,'header');
Line 1520  sub print_page_in_course { Line 1343  sub print_page_in_course {
   
   
     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 ($currentURL=~m|^(/adm/wrapper/)?ext/|) {
  $currentURL=~s|^(/adm/wrapper/)?ext/|http://|;   $currentURL=~s|^(/adm/wrapper/)?ext/|http://|;
  my $title=&Apache::lonnet::gettitle($symb);   my $title=&Apache::lonnet::gettitle($symb);
Line 1590  sub print_page_in_course { Line 1413  sub print_page_in_course {
   
     my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form);      my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form);
   
       # There seems to be an extraneous \vskip 1mm \\\\ :
   
       $texversion =~ s/^\\vskip 1mm \\\\\\\\//;
   
     # current document with answers.. no need to encap in minipage      # current document with answers.. no need to encap in minipage
     #  since there's only one answer.      #  since there's only one answer.
Line 1612  sub print_page_in_course { Line 1438  sub print_page_in_course {
  if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {   if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
     $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;      $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
  } else {   } else {
     $texversion= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});      $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
     if ($helper->{'VARS'}->{'construction'} ne '1') {      if ($helper->{'VARS'}->{'construction'} ne '1') {
  my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'});   my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'});
  $title = &Apache::lonxml::latex_special_symbols($title);   $title = &Apache::lonxml::latex_special_symbols($title);
Line 1647  sub print_page_in_course { Line 1473  sub print_page_in_course {
  $texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$currentURL| \\strut\\\\\\strut /;   $texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$currentURL| \\strut\\\\\\strut /;
   
     }      }
     $texversion = &latex_header_footer_remove($texversion);  
   
     # the first remaining line is a comment from londefdef the second  
     # line  seems to be an extraneous \vskip 1mm \\\\ :  
             # (imperfect removal from header_footer_remove?  
   
     $texversion =~ s/\\vskip 1mm \\\\\\\\//;  
   
     $result .= $texversion;      $result .= $texversion;
     if ($currentURL=~m/\.page\s*$/) {      if ($currentURL=~m/\.page\s*$/) {
  ($result,$numberofcolumns) = &page_cleanup($result);   ($result,$numberofcolumns) = &page_cleanup($result);
Line 1742  sub recently_generated { Line 1560  sub recently_generated {
 #    A reference to a page break hash.  #    A reference to a page break hash.
 #  #
 #  #
 # use Data::Dumper;  #use Data::Dumper;
 #sub dump_helper_vars {  #sub dump_helper_vars {
 #    my ($helper) = @_;  #    my ($helper) = @_;
 #    my $helpervars = Dumper($helper->{'VARS'});  #    my $helpervars = Dumper($helper->{'VARS'});
Line 2144  ENDPART Line 1962  ENDPART
   $helper->{'VARS'}->{'symb'});    $helper->{'VARS'}->{'symb'});
  }   }
     } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems')       or      } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems')       or
      ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') or  
      ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page') or  
              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or               ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')       or               ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')       or
      ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources')      or # BUGBUG       ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources')      or # BUGBUG
Line 2154  ENDPART Line 1970  ENDPART
   
   
         #-- produce an output string          #-- produce an output string
  if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems')  or   if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') {
     ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') ) {  
     $selectionmade = 2;      $selectionmade = 2;
  } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or   } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') {
  ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page'))  
  {  
     $selectionmade = 3;      $selectionmade = 3;
  } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')    } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') 
  ) {   ) {
Line 2199  ENDPART Line 2012  ENDPART
     $result.="\\newpage\n";      $result.="\\newpage\n";
  }   }
     }      }
     my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);      my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
     $urlp=&Apache::lonnet::clutter($urlp);      $urlp=&Apache::lonnet::clutter($urlp);
     $form{'symb'}=$master_seq[$i];      $form{'symb'}=$master_seq[$i];
   
   
     my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #title of the assignment which contains this problem      my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #title of the assignment which contains this problem
   
     if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}      if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}
Line 2212  ENDPART Line 2026  ENDPART
  && $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {   && $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
  $resources_printed .= $urlp.':';   $resources_printed .= $urlp.':';
  &Apache::lonxml::remember_problem_counter();   &Apache::lonxml::remember_problem_counter();
   
  $texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);   $texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);
  if ($urlp=~/\.page$/) {   if ($urlp=~/\.page$/) {
   
     ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);      ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
     if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}       if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} 
     $texversion =~ s/\\end{document}\d*/\\end{document}/;      $texversion =~ s/\\end{document}\d*/\\end{document}/;
Line 2337  ENDPART Line 2151  ENDPART
  }   }
  $result .= '\end{document}';   $result .= '\end{document}';
      } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||       } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||
       ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students_from_page') ||  
       ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ||        ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ||
       ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){        ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){
   
Line 2345  ENDPART Line 2158  ENDPART
      #-- prints assignments for whole class or for selected students         #-- prints assignments for whole class or for selected students  
  my $type;   my $type;
  if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||   if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||
      ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students_from_page') ||  
      ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ) {       ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ) {
      $selectionmade=5;       $selectionmade=5;
      $type='problems';       $type='problems';
Line 2385  ENDPART Line 2197  ENDPART
  my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};   my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
   
  #loop over students   #loop over students
    my $flag_latex_header_remove = 'NO';
   my $flag_latex_header_remove = 'NO';  
  my %moreenv;   my %moreenv;
          $moreenv{'instructor_comments'}='hide';           $moreenv{'instructor_comments'}='hide';
  $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);   $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
Line 2434  ENDPART Line 2245  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 (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon')     ||       } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon')     ||
       ($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')  ) { 
  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'};
Line 2791  sub print_resources { Line 2601  sub print_resources {
     #   postscript.  Each ENDOFSTUDENTSTAMP will go on a line by itself.      #   postscript.  Each ENDOFSTUDENTSTAMP will go on a line by itself.
     #      #
   
   
     foreach my $curresline (@{$master_seq})  {      foreach my $curresline (@{$master_seq})  {
  if (defined $page_breaks{$curresline}) {   if (defined $page_breaks{$curresline}) {
     if($i != 0) {      if($i != 0) {
Line 2809  sub print_resources { Line 2620  sub print_resources {
     &Apache::lonxml::remember_problem_counter();          &Apache::lonxml::remember_problem_counter();    
   
     my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);      my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
   
     if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||      if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
        ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {         ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
  #   Use a copy of the hash so we don't pervert it on future loop passes.   #   Use a copy of the hash so we don't pervert it on future loop passes.
Line 2836  sub print_resources { Line 2648  sub print_resources {
     $rendered = $header.$body;      $rendered = $header.$body;
  }   }
     }      }
   
     if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {      if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
  my $url = &Apache::lonnet::clutter($res_url);   my $url = &Apache::lonnet::clutter($res_url);
  my $annotation = &annotate($url);   my $annotation = &annotate($url);
  $rendered =~  s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/;   $rendered =~  s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/;
     }      }
     my $junk;  
     if ($remove_latex_header eq 'YES') {      if ($remove_latex_header eq 'YES') {
  $rendered = &latex_header_footer_remove($rendered);   $rendered = &latex_header_footer_remove($rendered);
     } else {      } else {
Line 3115  sub printHelper { Line 2927  sub printHelper {
         $subdir = substr($helper->{VARS}->{'filename'},          $subdir = substr($helper->{VARS}->{'filename'},
                          0, rindex($helper->{VARS}->{'filename'}, '/') + 1);                           0, rindex($helper->{VARS}->{'filename'}, '/') + 1);
     } else {      } else {
  # From course space:  
   
  if ($symb ne '') {   if ($symb ne '') {
     ($map, $id, $url) = &Apache::lonnet::decode_symb($symb);      ($map, $id, $url) = &Apache::lonnet::decode_symb($symb);
     $helper->{VARS}->{'postdata'} =       $helper->{VARS}->{'postdata'} = 
Line 3126  sub printHelper { Line 2936  sub printHelper {
     $is_published=1; # From resource space.      $is_published=1; # From resource space.
  }   }
  $url = &Apache::lonnet::clutter($url);   $url = &Apache::lonnet::clutter($url);
   
         if (!$resourceTitle) { # if the resource doesn't have a title, use the filename          if (!$resourceTitle) { # if the resource doesn't have a title, use the filename
             my $postdata = $helper->{VARS}->{'postdata'};              my $postdata = $helper->{VARS}->{'postdata'};
             $resourceTitle = substr($postdata, rindex($postdata, '/') + 1);              $resourceTitle = substr($postdata, rindex($postdata, '/') + 1);
Line 3185  sub printHelper { Line 2996  sub printHelper {
     "' variable='FINISHPAGE' />";      "' variable='FINISHPAGE' />";
     }      }
   
     # If not construction space user can print the components of a page:      if (($helper->{'VARS'}->{'construction'} ne '1' ) &&
   
     my $page_ispage;  
     my $page_title;  
     if (!$helper->{VARS}->{'construction'}) {  
  my $varspostdata = $helper->{VARS}->{'postdata'};  
  my $varsassignment = $helper->{VARS}->{'assignment'};  
  my $page_navmap         = Apache::lonnavmaps::navmap->new();  
  my @page_resources      = $page_navmap->retrieveResources($url);  
  if(defined($page_resources[0])) {  
  $page_ispage       = $page_resources[0]->is_page();  
  $page_title     = $page_resources[0]->title();  
  my $resourcesymb   = $page_resources[0]->symb();  
  my ($pagemap, $pageid, $pageurl) = &Apache::lonnet::decode_symb($symb);  
  if ($page_ispage) {  
     push @{$printChoices},   
     [&mt('Selected [_1]Problems[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'),   
      'map_problems_in_page',   
      'CHOOSE_PROBLEMS_PAGE'];  
     push @{$printChoices},   
          [&mt('Selected [_1]Resources[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'),   
   'map_resources_in_page',   
   'CHOOSE_RESOURCES_PAGE'];  
  }  
         my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE',  
  'Select Problem(s) to print',  
  "multichoice='1' toponly='1' addstatus='1' closeallpages='1'",  
  'RESOURCES',  
  'PAGESIZE',  
  $url,  
  $isProblem, '',  $symbFilter,  
  $start_new_option);  
   
   
       $helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE',  
     'Select Resource(s) to print',  
     'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',  
     'RESOURCES',  
     'PAGESIZE',  
     $url,  
     $isNotMap, '', $symbFilter,  
     $start_new_option);  
   
       
   
   
   
  &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);  
   
     }  
     }  
   
     if (($helper->{'VAR'}->{'construction'} ne '1' ) &&  
  $helper->{VARS}->{'postdata'} &&   $helper->{VARS}->{'postdata'} &&
  $helper->{VARS}->{'assignment'}) {   $helper->{VARS}->{'assignment'}) {
         # Allow problems from sequence          # Allow problems from sequence
         push @{$printChoices},           push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems', 'CHOOSE_PROBLEMS'];
     [&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'),   
      'map_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>'),           push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
  'map_problems_pages',   
  'CHOOSE_PROBLEMS_HTML'];          my $helperFragment = <<HELPERFRAGMENT;
         my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS',    <state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print">
  'Select Problem(s) to print',      <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"
  'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',                closeallpages="1">
  'RESOURCES',        <nextstate>PAGESIZE</nextstate>
  'PAGESIZE',        <filterfunc>return $isProblem;</filterfunc>
  $map,        <mapurl>$map</mapurl>
  $isProblem, '',        <valuefunc>return $symbFilter;</valuefunc>
  $symbFilter,        $start_new_option
  $start_new_option);        </resource>
  $helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML',      </state>
       'Select Resource(s) to print',  
        'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',    <state name="CHOOSE_PROBLEMS_HTML" title="Select Resource(s) to print">
       'RESOURCES',      <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"
       'PAGESIZE',                closeallpages="1">
       $map,        <nextstate>PAGESIZE</nextstate>
       $isNotMap, '',        <filterfunc>return $isNotMap;</filterfunc>
       $symbFilter,        <mapurl>$map</mapurl>
       $start_new_option);        <valuefunc>return $symbFilter;</valuefunc>
         $start_new_option
         </resource>
       </state>
   HELPERFRAGMENT
   
  &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);   &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
     }      }
   
     # If the user has pfo (print for others) allow them to print all       # If the user has pfo (print for others) allow them to print all 
     # problems and resources  in the entire course, optionally for selected students      # problems and resources  in the entire course, optionally for selected students
     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)$/)) {           ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { 
   
         push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b>'), 'all_problems', 'ALL_PROBLEMS'];          push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b>'), 'all_problems', 'ALL_PROBLEMS'];
  push @{$printChoices}, [&mtn('Selected <b>Resources</b> from <b>entire course</b>'), 'all_resources', 'ALL_RESOURCES'];   push @{$printChoices}, [&mtn('Selected <b>Resources</b> from <b>entire course</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}, [&mtn('Selected <b>Problems</b> from <b>entire course</b> for <b>selected people</b>'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS'];
 my $suffixXml = <<ALL_PROBLEMS;           &Apache::lonxml::xmlparse($r, 'helper', <<ALL_PROBLEMS);
     <state name="ALL_PROBLEMS" title="Select Problem(s) to print">
       <resource variable="RESOURCES" toponly='0' multichoice="1"
    suppressEmptySequences='0' addstatus="1" closeallpages="1">
         <nextstate>PAGESIZE</nextstate>
         <filterfunc>return $isProblemOrMap;</filterfunc>
         <choicefunc>return $isNotMap;</choicefunc>
         <valuefunc>return $symbFilter;</valuefunc>
         $start_new_option
       </resource>
     </state>
     <state name="ALL_RESOURCES" title="Select Resource(s) to print">
       <resource variable="RESOURCES" toponly='0' multichoice='1'
                 suppressEmptySequences='0' addstatus='1' closeallpages='1'>
         <nextstate>PAGESIZE</nextstate>
         <filterfunc>return $isNotMap; </filterfunc>
         <valuefunc>return $symbFilter;</valuefunc>
         $start_new_option
       </resource>
     </state>
     <state name="ALL_PROBLEMS_STUDENTS" title="Select Problem(s) to print">
       <resource variable="RESOURCES" toponly='0' multichoice="1"
    suppressEmptySequences='0' addstatus="1" closeallpages="1">
         <nextstate>STUDENTS1</nextstate>
         <filterfunc>return $isProblemOrMap;</filterfunc>
         <choicefunc>return $isNotMap;</choicefunc>
         <valuefunc>return $symbFilter;</valuefunc>
         $start_new_option
       </resource>
     </state>
   <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>
     <choices variable='student_sort'>      <choices variable='student_sort'>
Line 3290  my $suffixXml = <<ALL_PROBLEMS; Line 3078  my $suffixXml = <<ALL_PROBLEMS;
       <message><br /><hr /><br /> </message>        <message><br /><hr /><br /> </message>
       <student multichoice='1' variable="STUDENTS" nextstate="PRINT_FORMATTING" coursepersonnel="1"/>        <student multichoice='1' variable="STUDENTS" nextstate="PRINT_FORMATTING" coursepersonnel="1"/>
   </state>    </state>
   
 ALL_PROBLEMS  ALL_PROBLEMS
          &Apache::lonxml::xmlparse($r, 'helper',   
    &generate_resource_chooser('ALL_PROBLEMS',  
       'SelectProblem(s) to print',  
       'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',  
       'RESOURCES',  
       'PAGESIZE',  
       '',  
       $isProblemOrMap, $isNotMap,  
       $symbFilter,  
       $start_new_option) .  
    &generate_resource_chooser('ALL_RESOURCES',  
       'Select Resource(s) to print',  
       " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1'",  
       'RESOURCES',  
       'PAGESIZE',  
       '',  
       $isNotMap,'',$symbFilter,  
       $start_new_option) .  
    &generate_resource_chooser('ALL_PROBLEMS_STUDENTS',  
       'Select Problem(s) to print',  
       'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',  
       'RESOURCES',  
       'STUDENTS1',  
       '',  
       $isProblemOrMap,'' , $symbFilter,  
       $start_new_option) .  
      $suffixXml  
    );  
   
  if ($helper->{VARS}->{'assignment'}) {   if ($helper->{VARS}->{'assignment'}) {
       push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_students', 'CHOOSE_STUDENTS'];
     # If we were looking at a page, allow a selection of problems from the page      push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_anon', 'CHOOSE_ANON1'];
     # either for selected students or for coded assignments.  
   
     if ($page_ispage) {  
  push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]selected people[_5]',  
     '<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'),  
  'problems_for_students_from_page', 'CHOOSE_TGT_STUDENTS_PAGE'];  
  push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]CODEd assignments[_5]',  
     '<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'),  
  'problems_for_anon_page', 'CHOOSE_ANON1_PAGE'];  
     }  
     push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]',  
  '<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'),   
     'problems_for_students', 'CHOOSE_STUDENTS'];  
     push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]',  
  '<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'),   
     'problems_for_anon', 'CHOOSE_ANON1'];  
  }   }
   
  my $randomly_ordered_warning =    my $randomly_ordered_warning = 
Line 3353  ALL_PROBLEMS Line 3098  ALL_PROBLEMS
  #    with one state, and use REGEXPs at inclusion time to set state names   #    with one state, and use REGEXPs at inclusion time to set state names
  #    and next states for better mix and match capability   #    and next states for better mix and match capability
  #   #
  my $resource_selector= &generate_resource_chooser('SELECT_PROBLEMS',   my $resource_selector=<<RESOURCE_SELECTOR;
   'Select resources to print',      <state name="SELECT_PROBLEMS" title="Select resources to print">
   'multichoice="1" addstatus="1" closeallpages="1"',      $randomly_ordered_warning
   'RESOURCES',   
   'PRINT_FORMATTING',     <nextstate>PRINT_FORMATTING</nextstate> 
   '',     <message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message>
   $isProblem, '', $symbFilter,      <resource variable="RESOURCES" multichoice="1" addstatus="1" 
   $start_new_option);                closeallpages="1">
  $resource_selector .=  <<RESOURCE_SELECTOR;        <filterfunc>return $isProblem;</filterfunc>
         <mapurl>$map</mapurl>
         <valuefunc>return $symbFilter;</valuefunc>
         $start_new_option
         </resource>
       </state>
     <state name="PRINT_FORMATTING" title="How should results be printed?">      <state name="PRINT_FORMATTING" title="How should results be printed?">
     <message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message>      <message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message>
     <choices variable="EMPTY_PAGES">      <choices variable="EMPTY_PAGES">
Line 3381  ALL_PROBLEMS Line 3131  ALL_PROBLEMS
     </choices>      </choices>
     </state>      </state>
 RESOURCE_SELECTOR  RESOURCE_SELECTOR
         $resource_selector .= &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', <<CHOOSE_STUDENTS);
         &Apache::lonxml::xmlparse($r, 'helper',    <state name="CHOOSE_STUDENTS" title="Select Students and Resources">
   &generate_student_chooser('CHOOSE_TGT_STUDENTS_PAGE',        <message><b>Select sorting order of printout</b> </message>
     'student_sort',      <choices variable='student_sort'>
     'STUDENTS',        <choice computer='0'>Sort by section then student</choice>
     'CHOOSE_STUDENTS_PAGE'));        <choice computer='1'>Sort by students across sections.</choice>
  &Apache::lonxml::xmlparse($r, 'helper',       </choices>
   &generate_student_chooser('CHOOSE_STUDENTS',        <message><br /><hr /><br /> </message>
     'student_sort',        <student multichoice='1' variable="STUDENTS" nextstate="SELECT_PROBLEMS" coursepersonnel="1"/>
     'STUDENTS',    </state>
     'SELECT_PROBLEMS'));      $resource_selector
  &Apache::lonxml::xmlparse($r, 'helper', $resource_selector);  CHOOSE_STUDENTS
   
  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'};
Line 3463  RESOURCE_SELECTOR Line 3201  RESOURCE_SELECTOR
  if ($codechoice eq '') {   if ($codechoice eq '') {
     $codechoice='<choice computer="default">Default</choice>';      $codechoice='<choice computer="default">Default</choice>';
  }   }
  my $anon1 = &generate_code_selector($helper,           &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1);
     'CHOOSE_ANON1',    <state name="CHOOSE_ANON1" title="Specify CODEd Assignments">
     'SELECT_PROBLEMS',      <nextstate>SELECT_PROBLEMS</nextstate>
     $codechoice,      <message><h4>Fill out one of the forms below</h4></message>
     $code_selection,      <message><br /><hr /> <br /></message>
     $namechoice) . $resource_selector;      <message><h3>Generate new CODEd Assignments</h3></message>
           <message><table><tr><td><b>Number of CODEd assignments to print:</b></td><td></message>
           <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">
         &Apache::lonxml::xmlparse($r, 'helper',$anon1);         <validator>
    if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&
  my $anon_page = &generate_code_selector($helper,      !\$helper->{'VARS'}{'REUSE_OLD_CODES'}                &&
  'CHOOSE_ANON1_PAGE',              !\$helper->{'VARS'}{'SINGLE_CODE'}                    &&
  'SELECT_PROBLEMS_PAGE',      !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
  $codechoice,      return "You need to specify the number of assignments to print";
  $code_selection,   }
  $namechoice) .   return undef;
  &generate_resource_chooser('SELECT_PROBLEMS_PAGE',         </validator>
    'Select Problem(s) to print',      </string>
    "multichoice='1' addstatus='1' closeallpages ='1'",      <message></td></tr><tr><td></message>
    'RESOURCES',      <message><b>Names to save the CODEs under for later:</b></message>
    'PRINT_FORMATTING',      <message></td><td></message>
    $url,      <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />
    $isProblem, '',  $symbFilter,      <message></td></tr><tr><td></message>
    $start_new_option);      <message><b>Bubble sheet type:</b></message>
  &Apache::lonxml::xmlparse($r, 'helper', $anon_page);      <message></td><td></message>
       <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">
       $codechoice
       </dropdown>
       <message></td></tr><tr><td colspan="2"></td></tr><tr><td></message>
       <message></td></tr><tr><td></table></message>
       <message><br /><hr /><h3>Print a Specific CODE </h3><br /><table></message>
       <message><tr><td><b>Enter a CODE to print:</b></td><td></message>
       <string variable="SINGLE_CODE" size="10">
           <validator>
      if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}           &&
         !\$helper->{'VARS'}{'REUSE_OLD_CODES'}                 &&
         !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
         return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},
         \$helper->{'VARS'}{'CODE_OPTION'});
      } else {
          return undef; # Other forces control us.
      }
           </validator>
       </string>
       <message></td></tr><tr><td></message>
           $code_selection
       <message></td></tr></table></message>
       <message><hr /><h3>Reprint a Set of Saved CODEs</h3><table><tr><td></message>
       <message><b>Select saved CODEs:</b></message>
       <message></td><td></message>
       <dropdown variable="REUSE_OLD_CODES">
           $namechoice
       </dropdown>
       <message></td></tr></table></message>
     </state>
     $resource_selector
   CHOOSE_ANON1
   
   
  if ($helper->{VARS}->{'assignment'}) {   if ($helper->{VARS}->{'assignment'}) {
Line 3499  RESOURCE_SELECTOR Line 3269  RESOURCE_SELECTOR
  $resource_selector=<<RESOURCE_SELECTOR;   $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" 
Line 3509  RESOURCE_SELECTOR Line 3280  RESOURCE_SELECTOR
       $start_new_option        $start_new_option
       </resource>        </resource>
     </state>      </state>
   
     <state name="PRINT_FORMATTING" title="Format of the print job">      <state name="PRINT_FORMATTING" title="Format of the print job">
     <nextstate>NUMBER_PER_PDF</nextstate>      <nextstate>NUMBER_PER_PDF</nextstate>
     <message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message>      <message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message>

Removed from v.1.560.2.7  
changed lines
  Added in v.1.561


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