Diff for /loncom/interface/lonprintout.pm between versions 1.423 and 1.432

version 1.423, 2006/02/24 22:37:45 version 1.432, 2006/03/21 18:43:49
Line 41  use Apache::lonnavmaps; Line 41  use Apache::lonnavmaps;
 use Apache::lonratedt;  use Apache::lonratedt;
 use POSIX qw(strftime);  use POSIX qw(strftime);
 use Apache::lonlocal;  use Apache::lonlocal;
   use Carp;
   
 my %perm;  my %perm;
   
Line 233  sub latex_header_footer_remove { Line 234  sub latex_header_footer_remove {
 #  #
 sub encapsulate_minipage {  sub encapsulate_minipage {
     my ($text) = @_;      my ($text) = @_;
     if (!(env{'form.problem.split'} =~ /yes/i)) {      if (!($env{'form.problem.split'} =~ /yes/i)) {
  $text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}';   $text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}';
     }      }
     return $text;      return $text;
 }  }
   #
   #  The NUMBER_TO_PRINT and SPLIT_PDFS
   #  variables interact, this sub looks at these two parameters
   #  and comes up with a final value for NUMBER_TO_PRINT which can be:
   #     all     - if SPLIT_PDFS eq 'all'.
   #     1       - if SPLIT_PDFS eq 'oneper'
   #     section - if SPLIT_PDFS eq 'sections'
   #     <unchanged> - if SPLIT_PDFS eq 'usenumber'
   #
   sub adjust_number_to_print {
       my $helper = shift;
   
       my $split_pdf = $helper->{'VARS'}->{'SPLIT_PDFS'};
       
       if ($split_pdf eq 'all') {
    $helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'all';
       } elsif ($split_pdf eq 'oneper') {
    $helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 1;
       } elsif ($split_pdf eq 'sections') {
    $helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'section';
       } elsif ($split_pdf eq 'usenumber') {
    #  Unmodified.
       } else {
    # Error!!!!
   
    croak "bad SPLIT_PDFS: $split_pdf in lonprintout::adjust_number_to_print";
       }
   }
   
 sub character_chart {  sub character_chart {
     my $result = shift;      my $result = shift;
Line 995  sub output_data { Line 1023  sub output_data {
     my %parmhash = %$rparmhash;      my %parmhash = %$rparmhash;
     my $resources_printed = '';      my $resources_printed = '';
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
     my $bodytag=&Apache::loncommon::bodytag('Preparing Printout');      my $headtag     = &Apache::loncommon::headtag('Preparing Printout');
       my $end_headtag = &Apache::loncommon::endheadtag();
       my $bodytag     = &Apache::loncommon::bodytag('Preparing Printout');
     $r->print(<<ENDPART);      $r->print(<<ENDPART);
 $html  $html
 <head>  $headtag
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
     var editbrowser;      var editbrowser;
     function openbrowser(formname,elementname,only,omit) {      function openbrowser(formname,elementname,only,omit) {
Line 1023  $html Line 1053  $html
         editbrowser.focus();          editbrowser.focus();
     }      }
 </script>  </script>
 <title>LON-CAPA output for printing</title>  $end_headtag
 </head>  
 $bodytag  $bodytag
 <p>  <p>
 Please stand by while processing your print request, this may take some time ...  Please stand by while processing your print request, this may take some time ...
Line 1120  ENDPART Line 1149  ENDPART
  }   }
  $form{'rndseed'}=$rndseed;   $form{'rndseed'}=$rndseed;
  &Apache::lonnet::appenv(%moreenv);   &Apache::lonnet::appenv(%moreenv);
  &Apache::lonnet::delenv('form.counter');  
  &Apache::lonxml::init_counter();   &Apache::lonxml::clear_problem_counter();
  &Apache::lonxml::store_counter();  
  $resources_printed .= $currentURL.':';   $resources_printed .= $currentURL.':';
  $texversion.=&Apache::lonnet::ssi($currentURL,%form);   $texversion.=&Apache::lonnet::ssi($currentURL,%form);
  &Apache::lonnet::delenv('form.counter');  
    &Apache::lonxml::clear_problem_counter();
   
  &Apache::lonnet::delenv('request.filename');   &Apache::lonnet::delenv('request.filename');
     }      }
     # current document with answers.. no need to encap in minipage      # current document with answers.. no need to encap in minipage
Line 1272  ENDPART Line 1303  ENDPART
  my $flag_page_in_sequence = 'NO';   my $flag_page_in_sequence = 'NO';
  my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};   my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
  my $prevassignment='';   my $prevassignment='';
  &Apache::lonnet::delenv('form.counter');  
  &Apache::lonxml::init_counter();   &Apache::lonxml::clear_problem_counter();
  &Apache::lonxml::store_counter();  
  my $pbreakresources = keys %page_breaks;   my $pbreakresources = keys %page_breaks;
  for (my $i=0;$i<=$#master_seq;$i++) {   for (my $i=0;$i<=$#master_seq;$i++) {
   
Line 1297  ENDPART Line 1328  ENDPART
     if ($urlp!~m|^/adm/|      if ($urlp!~m|^/adm/|
  && $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.':';
  my $pre_counter=$env{'form.counter'};  
    &Apache::lonxml::remember_problem_counter();
   
  $texversion.=&Apache::lonnet::ssi($urlp,%form);   $texversion.=&Apache::lonnet::ssi($urlp,%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);
Line 1305  ENDPART Line 1338  ENDPART
     $texversion =~ s/\\end{document}\d*/\\end{document}/;      $texversion =~ s/\\end{document}\d*/\\end{document}/;
     $flag_page_in_sequence = 'YES';      $flag_page_in_sequence = 'YES';
  }    } 
  my ($envfile) = ($env{'user.environment'} =~m|/([^/]+)\.id$| );  
  &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),  
  $envfile);  
  my $current_counter=$env{'form.counter'};  
  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')) {
     #  Don't permanently pervert the %form hash      #  Don't permanently pervert the %form hash
Line 1316  ENDPART Line 1346  ENDPART
     $answerform{'grade_target'}='answer';      $answerform{'grade_target'}='answer';
     $answerform{'answer_output_mode'}='tex';      $answerform{'answer_output_mode'}='tex';
     $resources_printed .= $urlp.':';      $resources_printed .= $urlp.':';
     &Apache::lonnet::appenv(('form.counter' => $pre_counter));  
       &Apache::lonxml::restore_problem_counter();
     my $answer=&Apache::lonnet::ssi($urlp,%answerform);      my $answer=&Apache::lonnet::ssi($urlp,%answerform);
     &Apache::lonnet::appenv(('form.counter' => $current_counter));  
     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 {
Line 1380  ENDPART Line 1411  ENDPART
     }          }    
     if (&Apache::loncommon::connection_aborted($r)) { last; }      if (&Apache::loncommon::connection_aborted($r)) { last; }
  }   }
  &Apache::lonnet::delenv('form.counter');   &Apache::lonxml::clear_problem_counter();
  if ($flag_page_in_sequence eq 'YES') {   if ($flag_page_in_sequence eq 'YES') {
     $result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;      $result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;
  }   }
Line 1405  ENDPART Line 1436  ENDPART
  #    Each element of the students array is of the form:   #    Each element of the students array is of the form:
  #       username:domain:section:last, first:status   #       username:domain:section:last, first:status
  #       #    
    #  Note that student sort is not compatible with printing 
    #  1 section per pdf...so that setting overrides.
  #      #   
  if ($helper->{'VARS'}->{'student_sort'}    eq 1) {   if (($helper->{'VARS'}->{'student_sort'}    eq 1)  && 
        ($helper->{'VARS'}->{'SPLIT_PDFS'} ne "sections")) {
      @students = sort compare_names  @students;       @students = sort compare_names  @students;
  }   }
    &adjust_number_to_print($helper);
   
          if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' ||           if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' ||
      $helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) {       $helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) {
      $helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1;       $helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1;
  }   }
    # If we are splitting on section boundaries, we need 
    # to remember that in split_on_sections and 
    # print all of the students in the list.
    #
    my $split_on_sections = 0;
    if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'section') {
        $split_on_sections = 1;
        $helper->{'VARS'}->{'NUMBER_TO_PRINT'} = $#students+1;
    }
  my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};   my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
   
  #loop over students   #loop over students
Line 1426  ENDPART Line 1471  ENDPART
  if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';}   if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';}
  my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75');   my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75');
  my $student_counter=-1;   my $student_counter=-1;
    my $i = 0;
    my $last_section = (split(/:/,$students[0]))[2];
  foreach my $person (@students) {   foreach my $person (@students) {
   
              my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due";               my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due";
Line 1434  ENDPART Line 1481  ENDPART
  print $temp_file "1969\n";   print $temp_file "1969\n";
      }       }
      $student_counter++;       $student_counter++;
      my $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'});       if ($split_on_sections) {
    my $this_section = (split(/:/,$person))[2];
    if ($this_section ne $last_section) {
        $i++;
        $last_section = $this_section;
    }
        } else {
    $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'});
        }
      my ($output,$fullname, $printed)=&print_resources($r,$helper,       my ($output,$fullname, $printed)=&print_resources($r,$helper,
      $person,$type,       $person,$type,
      \%moreenv,\@master_seq,       \%moreenv,\@master_seq,
Line 1716  ENDPART Line 1771  ENDPART
     "cgi.$identifier.coursedom" => $cdom,       "cgi.$identifier.coursedom" => $cdom, 
     "cgi.$identifier.resources" => $resources_printed);      "cgi.$identifier.resources" => $resources_printed);
   
 $r->print(<<FINALEND);      my $end_page = &Apache::loncommon::end_page();
       $r->print(<<FINALEND);
 <br />  <br />
 <meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier" />  <meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier" />
 <a href="/cgi-bin/printout.pl?$identifier">Continue</a>  <a href="/cgi-bin/printout.pl?$identifier">Continue</a>
 </body>  $end_page
 </html>  
 FINALEND  FINALEND
 }  }
   
Line 1758  sub print_resources { Line 1813  sub print_resources {
     my $i           = 0;      my $i           = 0;
     #goes through all resources, checks if they are available for       #goes through all resources, checks if they are available for 
     #current student, and produces output         #current student, and produces output   
     &Apache::lonnet::delenv('form.counter');  
     &Apache::lonxml::init_counter();      &Apache::lonxml::clear_problem_counter();
     &Apache::lonxml::store_counter();  
     my %page_breaks  = &get_page_breaks($helper);      my %page_breaks  = &get_page_breaks($helper);
     my @format_array = split(/\|/,$helper->{'VARS'}->{'FORMAT'});      my @format_array = split(/\|/,$helper->{'VARS'}->{'FORMAT'});
     my $columns_in_format = $format_array[1];      my $columns_in_format = $format_array[1];
Line 1779  sub print_resources { Line 1833  sub print_resources {
  if ($res_url!~m|^ext/|   if ($res_url!~m|^ext/|
     && $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {      && $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
     $printed .= $curresline.':';      $printed .= $curresline.':';
     my $pre_counter=$env{'form.counter'};  
       &Apache::lonxml::remember_problem_counter();    
   
     my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);      my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
     my ($envfile) =  
  ( $env{'user.environment'} =~ m|/([^/]+)\.id$| );  
     &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),  
      $envfile);  
     my $current_counter=$env{'form.counter'};  
     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.
  my %answerenv = %{$moreenv};   my %answerenv = %{$moreenv};
  $answerenv{'answer_output_mode'}='tex';   $answerenv{'answer_output_mode'}='tex';
  $answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};   $answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
  &Apache::lonnet::appenv(('form.counter' => $pre_counter));  
    &Apache::lonxml::restore_problem_counter();
   
  my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv);   my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv);
  &Apache::lonnet::appenv(('form.counter' => $current_counter));  
  if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {   if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
     $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/;      $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/;
  } else {   } else {
Line 1817  sub print_resources { Line 1871  sub print_resources {
  } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {   } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
     $printed .= $curresline.':';      $printed .= $curresline.':';
     my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);      my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
     my ($envfile) =   
  ( $env{'user.environment'} =~ m|/([^/]+)\.id$| );  
     &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),  
      $envfile);  
     my $current_counter=$env{'form.counter'};  
     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 2169  ALL_PROBLEMS Line 2219  ALL_PROBLEMS
     push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('selected students')."</b>", 'problems_for_students', 'CHOOSE_STUDENTS'];      push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('selected students')."</b>", 'problems_for_students', 'CHOOSE_STUDENTS'];
     push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('anonymous students')."</b>", 'problems_for_anon', 'CHOOSE_ANON1'];      push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from')." <b><i>$sequenceTitle</i></b> ".&mt('for')." <b>".&mt('anonymous students')."</b>", 'problems_for_anon', 'CHOOSE_ANON1'];
  }   }
   
    # 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;   my $resource_selector=<<RESOURCE_SELECTOR;
       <state name="SELECT_PROBLEMS" title="Select resources to print">
      <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">
Line 2178  ALL_PROBLEMS Line 2240  ALL_PROBLEMS
       <valuefunc>return $symbFilter;</valuefunc>        <valuefunc>return $symbFilter;</valuefunc>
       <option text='New Page' variable='FINISHPAGE' />        <option text='New Page' variable='FINISHPAGE' />
       </resource>        </resource>
       </state>
       <state name="PRINT_FORMATTING" title="How should results be printed?">
       <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>
     <choices variable="EMPTY_PAGES">      <choices variable="EMPTY_PAGES">
       <choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice>        <choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice>
Line 2185  ALL_PROBLEMS Line 2250  ALL_PROBLEMS
       <choice computer='2'>Add two empty pages/column after each student\'s assignment</choice>        <choice computer='2'>Add two empty pages/column after each student\'s assignment</choice>
       <choice computer='3'>Add three empty pages/column after each student\'s assignment</choice>        <choice computer='3'>Add three empty pages/column after each student\'s assignment</choice>
     </choices>      </choices>
     <message><hr width='33%' /><b>Number of assignments printed at the same time: </b></message>      </state>
       <state name="NUMBER_PER_PDF" title="Number printed at once">
       <nextstate>PAGESIZE</nextstate>
       <message><hr width='33%' /><b>How do you want assignments split into PDF files? </b></message>
       <choices variable="SPLIT_PDFS">
          <choice computer="all">All assignments in a single PDF file</choice>
          <choice computer="sections">Each PDF contains exactly one section</choice>
          <choice computer="oneper">Each PDF contains exactly one assignment</choice>
          <choice computer="usenumber">Specify Number:</choice>
       </choices>
     <string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string>      <string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string>
       </state>
 RESOURCE_SELECTOR  RESOURCE_SELECTOR
   
         &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS);          &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS);
   <state name="CHOOSE_STUDENTS" title="Select Students and Resources">    <state name="CHOOSE_STUDENTS" title="Select Students and Resources">
       <student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" coursepersonnel="1"/>  
       <message><b>Select sort order</b> </message>        <message><b>Select sort order</b> </message>
     <choices variable='student_sort'>      <choices variable='student_sort'>
       <choice computer='0'>Sort by section then student</choice>        <choice computer='0'>Sort by section then student</choice>
       <choice computer='1'>Sort by students across sections.</choice>        <choice computer='1'>Sort by students across sections.</choice>
     </choices>      </choices>
     $resource_selector        <student multichoice='1' variable="STUDENTS" nextstate="SELECT_PROBLEMS" coursepersonnel="1"/>
   </state>    </state>
       $resource_selector
 CHOOSE_STUDENTS  CHOOSE_STUDENTS
   
  my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};   my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
Line 2227  CHOOSE_STUDENTS Line 2302  CHOOSE_STUDENTS
     if ($code =~ /^[A-Z]+$/) { # Alpha code      if ($code =~ /^[A-Z]+$/) { # Alpha code
  $choice = &letters_to_num($code);   $choice = &letters_to_num($code);
     }      }
     $code_selection .= '   <choice computer="'.$choice.'">'.$code."</choice>\n";      push(@{$helper->{DATA}{ALL_CODE_CHOICES}},[$code,$choice]);
  }   }
    $code_selection .=
   '   
         <exec>
           push(@{$state->{CHOICES}},@{$helper->{DATA}{ALL_CODE_CHOICES}});
         </exec>
       '.$/;
   
   
  open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');   open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');
  my $codechoice='';   my $codechoice='';
  foreach my $line (<FH>) {   foreach my $line (<FH>) {
Line 2244  CHOOSE_STUDENTS Line 2327  CHOOSE_STUDENTS
  }   }
         &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1);          &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1);
   <state name="CHOOSE_ANON1" title="Select Students and Resources">    <state name="CHOOSE_ANON1" title="Select Students and Resources">
     <nextstate>PAGESIZE</nextstate>      <nextstate>SELECT_PROBLEMS</nextstate>
     <message><table><tr><td><b>Number of anonymous assignments to print:</b></td><td></message>      <message><table><tr><td><b>Number of anonymous assignments to print:</b></td><td></message>
     <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">      <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">
        <validator>         <validator>
Line 2283  CHOOSE_STUDENTS Line 2366  CHOOSE_STUDENTS
         </validator>          </validator>
     </string>      </string>
     <message></td></tr><tr><td colspan="2"><hr width='33%' /></td></tr><tr><td></message>      <message></td></tr><tr><td colspan="2"><hr width='33%' /></td></tr><tr><td></message>
       <message><b>Choose single code from list</b></message>
       <message></td><td></message>
       <choices variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0">
           $code_selection
       </choices>
       <message></td></tr><tr><td colspan="2"><hr width='33%' /></td></tr><tr><td></message>
     <message><b>Reprint a set of saved CODEs:</b></message>      <message><b>Reprint a set of saved CODEs:</b></message>
     <message></td><td></message>      <message></td><td></message>
     <dropdown variable="REUSE_OLD_CODES">      <dropdown variable="REUSE_OLD_CODES">
Line 2290  CHOOSE_STUDENTS Line 2379  CHOOSE_STUDENTS
     </dropdown>      </dropdown>
     <message></td></tr></table></message>      <message></td></tr></table></message>
     <message><hr width='33%' /></message>      <message><hr width='33%' /></message>
     $resource_selector  
   </state>    </state>
     $resource_selector
 CHOOSE_ANON1  CHOOSE_ANON1
   
   
Line 2302  CHOOSE_ANON1 Line 2391  CHOOSE_ANON1
           
   
  $resource_selector=<<RESOURCE_SELECTOR;   $resource_selector=<<RESOURCE_SELECTOR;
       <state name="SELECT_RESOURCES" title="Select Resources">
       <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">
Line 2310  CHOOSE_ANON1 Line 2401  CHOOSE_ANON1
       <valuefunc>return $symbFilter;</valuefunc>        <valuefunc>return $symbFilter;</valuefunc>
       <option text='Newpage' variable='FINISHPAGE' />        <option text='Newpage' variable='FINISHPAGE' />
       </resource>        </resource>
       </state>
       <state name="PRINT_FORMATTING" title="Format of the print job">
       <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>
     <choices variable="EMPTY_PAGES">      <choices variable="EMPTY_PAGES">
       <choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice>        <choice computer='0'>Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)</choice>
Line 2317  CHOOSE_ANON1 Line 2411  CHOOSE_ANON1
       <choice computer='2'>Add two empty pages/column after each student\'s assignment</choice>        <choice computer='2'>Add two empty pages/column after each student\'s assignment</choice>
       <choice computer='3'>Add three empty pages/column after each student\'s assignment</choice>        <choice computer='3'>Add three empty pages/column after each student\'s assignment</choice>
     </choices>      </choices>
     <message><hr width='33%' /><b>Number of assignments printed at the same time: </b></message>      </state>
       <state name="NUMBER_PER_PDF" title="Number assignments per pdf">
       <nextstate>PAGESIZE</nextstate>
       <message><hr width='33%' /><b>How do you want assignments split into PDF files? </b></message>
       <choices variable="SPLIT_PDFS">
          <choice computer="all">All assignments in a single PDF file</choice>
          <choice computer="sections">Each PDF contains exactly one section</choice>
          <choice computer="oneper">Each PDF contains exactly one assignment</choice>
          <choice computer="usenumber">Specify Number:</choice>
       </choices>
     <string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string>      <string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string>
       </state>
 RESOURCE_SELECTOR  RESOURCE_SELECTOR
   
  &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1);   &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1);
   <state name="CHOOSE_STUDENTS1" title="Select Students and Resources">    <state name="CHOOSE_STUDENTS1" title="Select Students and Resources">
     <student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" coursepersonnel="1" />  
     <choices variable='student_sort'>      <choices variable='student_sort'>
       <choice computer='0'>Sort by section then student</choice>        <choice computer='0'>Sort by section then student</choice>
       <choice computer='1'>Sort by students across sections.</choice>        <choice computer='1'>Sort by students across sections.</choice>
     </choices>      </choices>
       <student multichoice='1' variable="STUDENTS" nextstate="SELECT_RESOURCES" coursepersonnel="1" />
   
     $resource_selector  
     </state>      </state>
       $resource_selector
 CHOOSE_STUDENTS1  CHOOSE_STUDENTS1
   
  &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON2);   &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON2);
   <state name="CHOOSE_ANON2" title="Select Students and Resources">    <state name="CHOOSE_ANON2" title="Select Students and Resources">
     <nextstate>PAGESIZE</nextstate>      <nextstate>SELECT_RESOURCES</nextstate>
     <message><table><tr><td><b>Number of anonymous assignments to print:</b></td><td></message>      <message><table><tr><td><b>Number of anonymous assignments to print:</b></td><td></message>
     <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">      <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">
        <validator>         <validator>
Line 2374  CHOOSE_STUDENTS1 Line 2478  CHOOSE_STUDENTS1
         </validator>          </validator>
     </string>      </string>
     <message></td></tr><tr><td colspan="2"><hr width='33%' /></td></tr><tr><td></message>      <message></td></tr><tr><td colspan="2"><hr width='33%' /></td></tr><tr><td></message>
       <message><b>Choose single code from list</b></message>
       <message></td><td></message>
       <dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0">
           $code_selection
       </dropdown>
       <message></td></tr><tr><td colspan="2"><hr width='33%' /></td></tr><tr><td></message>
     <message><b>Reprint a set of saved CODEs:</b></message>      <message><b>Reprint a set of saved CODEs:</b></message>
     <message></td><td></message>      <message></td><td></message>
     <dropdown variable="REUSE_OLD_CODES">      <dropdown variable="REUSE_OLD_CODES">
Line 2381  CHOOSE_STUDENTS1 Line 2491  CHOOSE_STUDENTS1
     </dropdown>      </dropdown>
     <message></td></tr></table></message>      <message></td></tr></table></message>
     <message><hr width='33%' /></message>      <message><hr width='33%' /></message>
     $resource_selector  
   </state>    </state>
       $resource_selector
 CHOOSE_ANON2  CHOOSE_ANON2
     }      }
   

Removed from v.1.423  
changed lines
  Added in v.1.432


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