Diff for /loncom/interface/lonprintout.pm between versions 1.385 and 1.403

version 1.385, 2005/08/16 10:11:24 version 1.403, 2005/12/06 16:23:26
Line 1 Line 1
 #  The LearningOnline Network  # The LearningOnline Network
 # Printout  # Printout
 #  #
 # $Id$  # $Id$
Line 42  use Apache::lonratedt; Line 42  use Apache::lonratedt;
 use POSIX qw(strftime);  use POSIX qw(strftime);
 use Apache::lonlocal;  use Apache::lonlocal;
   
 my $resources_printed = '';  my %perm;
   
 #  #
 #   Convert a numeric code to letters  #   Convert a numeric code to letters
Line 87  sub letters_to_num { Line 87  sub letters_to_num {
 sub is_valid_numeric_code {  sub is_valid_numeric_code {
     my ($value, $num_digits) = @_;      my ($value, $num_digits) = @_;
     #   Remove leading/trailing whitespace;      #   Remove leading/trailing whitespace;
     $value =~ s/^\s*//;      $value =~ s/^\s*//g;
     $value =~ s/\s*$//;      $value =~ s/\s*$//g;
           
     #  All digits?      #  All digits?
     if ($value =~ /^[0-9]+$/) {      if ($value !~ /^[0-9]+$/) {
  return "Numeric code $value has invalid characters - must only be digits";   return "Numeric code $value has invalid characters - must only be digits";
     }      }
     if (length($value) != $num_digits) {      if (length($value) != $num_digits) {
Line 433  sub character_chart { Line 433  sub character_chart {
     $result =~ s/&(\#252|uuml);/\\\"{u}/g;      $result =~ s/&(\#252|uuml);/\\\"{u}/g;
     $result =~ s/&(\#253|yacute);/\\\'{y}/g;      $result =~ s/&(\#253|yacute);/\\\'{y}/g;
     $result =~ s/&(\#255|yuml);/\\\"{y}/g;      $result =~ s/&(\#255|yuml);/\\\"{y}/g;
       $result =~ s/&\#295;/\\ensuremath\{\\hbar\}/g;
     $result =~ s/&\#952;/\\ensuremath\{\\theta\}/g;      $result =~ s/&\#952;/\\ensuremath\{\\theta\}/g;
 #Greek Alphabet  #Greek Alphabet
     $result =~ s/&(alpha|\#945);/\\ensuremath\{\\alpha\}/g;      $result =~ s/&(alpha|\#945);/\\ensuremath\{\\alpha\}/g;
Line 508  sub character_chart { Line 509  sub character_chart {
     $result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g;      $result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g;
     $result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g;      $result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g;
     $result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g;      $result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g;
       $result =~ s/–/\\ensuremath\{-\}/g;
     $result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g;      $result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g;
     $result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g;      $result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g;
     $result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g;      $result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g;
Line 816  sub IndexCreation { Line 818  sub IndexCreation {
 sub print_latex_header {  sub print_latex_header {
     my $mode=shift;      my $mode=shift;
     my $output='\documentclass[letterpaper]{article}';      my $output='\documentclass[letterpaper]{article}';
     if (($mode eq 'batchmode') || (!$env{'request.role.adv'})) {      if (($mode eq 'batchmode') || (!$perm{'pav'})) {
  $output.='\batchmode';   $output.='\batchmode';
     }      }
     $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n".      $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n".
      '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n".       '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n".
      '\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n".       '\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n".
        '\usepackage{wrapfig}'.
      '\usepackage{picins}\usepackage{calc}'."\n".       '\usepackage{picins}\usepackage{calc}'."\n".
      '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n".       '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n".
      '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n".       '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n".
Line 903  sub unsupported { Line 906  sub unsupported {
   
   
 #  #
   # List of recently generated print files
   #
   sub recently_generated {
       my $r=shift;
       my $prtspool=$r->dir_config('lonPrtDir');
       my $zip_result;
       my $pdf_result;
       opendir(DIR,$prtspool);
   
       my @files = 
    grep(/^$env{'user.name'}_$env{'user.domain'}_printout_(\d+)_.*\.(pdf|zip)$/,readdir(DIR));
       closedir(DIR);
   
       @files = sort {
    my ($actime) = (stat($prtspool.'/'.$a))[10];
    my ($bctime) = (stat($prtspool.'/'.$b))[10];
    return $bctime <=> $actime;
       } (@files);
   
       foreach my $filename (@files) {
    my ($ext) = ($filename =~ m/(pdf|zip)$/);
    my ($cdev,$cino,$cmode,$cnlink,
       $cuid,$cgid,$crdev,$csize,
       $catime,$cmtime,$cctime,
       $cblksize,$cblocks)=stat($prtspool.'/'.$filename);
    my $result="<a href='/prtspool/$filename'>".
       &mt('Generated [_1] ([_2] bytes)',
    &Apache::lonlocal::locallocaltime($cctime),$csize).
    '</a><br />';
    if ($ext eq 'pdf') { $pdf_result .= $result; }
    if ($ext eq 'zip') { $zip_result .= $result; }
       }
       if ($zip_result) {
    $r->print('<h4>'.&mt('Recently generated printout zip files')."</h4>\n"
     .$zip_result);
       }
       if ($pdf_result) {
    $r->print('<h4>'.&mt('Recently generated printouts')."</h4>\n"
     .$pdf_result);
       }
   }
   
   #
 #   Retrieve the hash of page breaks.  #   Retrieve the hash of page breaks.
 #  #
 #  Inputs:  #  Inputs:
Line 926  sub get_page_breaks  { Line 972  sub get_page_breaks  {
 sub output_data {  sub output_data {
     my ($r,$helper,$rparmhash) = @_;      my ($r,$helper,$rparmhash) = @_;
     my %parmhash = %$rparmhash;      my %parmhash = %$rparmhash;
       my $resources_printed = '';
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
     my $bodytag=&Apache::loncommon::bodytag('Preparing Printout');      my $bodytag=&Apache::loncommon::bodytag('Preparing Printout');
     $r->print(<<ENDPART);      $r->print(<<ENDPART);
Line 958  $html Line 1005  $html
 <title>LON-CAPA output for printing</title>  <title>LON-CAPA output for printing</title>
 </head>  </head>
 $bodytag  $bodytag
   <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 ...
   </p>
 ENDPART  ENDPART
   
   
Line 1051  ENDPART Line 1100  ENDPART
  &Apache::lonnet::appenv(%moreenv);   &Apache::lonnet::appenv(%moreenv);
  &Apache::lonnet::delenv('form.counter');   &Apache::lonnet::delenv('form.counter');
  &Apache::lonxml::init_counter();   &Apache::lonxml::init_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::lonnet::delenv('form.counter');
Line 1062  ENDPART Line 1112  ENDPART
  $form{'grade_target'}='answer';   $form{'grade_target'}='answer';
  $form{'answer_output_mode'}='tex';   $form{'answer_output_mode'}='tex';
  $form{'rndseed'}=$rndseed;   $form{'rndseed'}=$rndseed;
                   if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {
       $form{'problemtype'}='exam';
    }
  $resources_printed .= $currentURL.':';   $resources_printed .= $currentURL.':';
  my $answer=&Apache::lonnet::ssi($currentURL,%form);   my $answer=&Apache::lonnet::ssi($currentURL,%form);
  if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {   if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
Line 1190  ENDPART Line 1243  ENDPART
  my $prevassignment='';   my $prevassignment='';
  &Apache::lonnet::delenv('form.counter');   &Apache::lonnet::delenv('form.counter');
  &Apache::lonxml::init_counter();   &Apache::lonxml::init_counter();
    &Apache::lonxml::store_counter();
  for (my $i=0;$i<=$#master_seq;$i++) {   for (my $i=0;$i<=$#master_seq;$i++) {
   
     # Note due to document structure, not allowed to put \newpage      # Note due to document structure, not allowed to put \newpage
Line 1210  ENDPART Line 1264  ENDPART
     my $texversion='';      my $texversion='';
     if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {      if ($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'};
  $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 1217  ENDPART Line 1272  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 $lonidsdir=$r->dir_config('lonIDsDir');   my ($envfile) = ($env{'user.environment'} =~m|/([^/]+)\.id$| );
  my $envfile=$env{'user.environment'};   &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),
  $envfile=~/\/([^\/]+)\.id$/;   $envfile);
  $envfile=$1;  
  &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile);  
  my $current_counter=$env{'form.counter'};   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')) {
Line 1230  ENDPART Line 1283  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));
     my $answer=&Apache::lonnet::ssi($urlp,%answerform);      my $answer=&Apache::lonnet::ssi($urlp,%answerform);
     &Apache::lonnet::appenv(('form.counter' => $current_counter));      &Apache::lonnet::appenv(('form.counter' => $current_counter));
     if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {      if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
Line 1363  ENDPART Line 1417  ENDPART
  my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'};   my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'};
  my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'};   my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'};
  my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'};   my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'};
    my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'};
   
  my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};   my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};
  open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');   open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');
  my ($code_type,$code_length)=('letter',6);   my ($code_type,$code_length)=('letter',6);
Line 1384  ENDPART Line 1440  ENDPART
      $code_type=$result{"type\0$old_name"};       $code_type=$result{"type\0$old_name"};
      @allcodes=split(',',$result{$old_name});       @allcodes=split(',',$result{$old_name});
      $num_todo=scalar(@allcodes);       $num_todo=scalar(@allcodes);
    } elsif ($selected_code) { # Selection value is always numeric.
        $num_todo = 1;
        @allcodes = ($selected_code);
  } elsif ($single_code) {   } elsif ($single_code) {
   
        $num_todo    = 1; # Unconditionally one code to do.
      # If an alpha code have to convert to numbers so it can be       # If an alpha code have to convert to numbers so it can be
      # converted back to letters again :-)       # converted back to letters again :-)
      #       #
      if ($code_type ne 'number') {       if ($code_type ne 'number') {
  $single_code = &letters_to_num($single_code);   $single_code = &letters_to_num($single_code);
  $num_todo    = 1;  
      }       }
      @allcodes = ($single_code);       @allcodes = ($single_code);
  } else {   } else {
Line 1600  ENDPART Line 1659  ENDPART
                             'cgi.'.$identifier.'.selection' => $selectionmade,                              'cgi.'.$identifier.'.selection' => $selectionmade,
     'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},      'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},
     'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},      'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},
     'cgi.'.$identifier.'.role' => $env{'request.role.adv'},      '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' => $URLback,);
Line 1625  sub get_CODE { Line 1684  sub get_CODE {
     my $max='1'.'0'x$size;      my $max='1'.'0'x$size;
     my $newcode;      my $newcode;
     while(1) {      while(1) {
  $newcode=sprintf("%06d",int(rand($max)));   $newcode=sprintf("%0".$size."d",int(rand($max)));
  if (!exists($$all_codes{$newcode})) {   if (!exists($$all_codes{$newcode})) {
     $$all_codes{$newcode}=1;      $$all_codes{$newcode}=1;
     if ($type eq 'number' ) {      if ($type eq 'number' ) {
Line 1654  sub print_resources { Line 1713  sub print_resources {
     #current student, and produces output         #current student, and produces output   
     &Apache::lonnet::delenv('form.counter');      &Apache::lonnet::delenv('form.counter');
     &Apache::lonxml::init_counter();      &Apache::lonxml::init_counter();
       &Apache::lonxml::store_counter();
     my %page_breaks  = &get_page_breaks($helper);      my %page_breaks  = &get_page_breaks($helper);
   
     foreach my $curresline (@{$master_seq})  {      foreach my $curresline (@{$master_seq})  {
Line 1670  sub print_resources { Line 1729  sub print_resources {
     if (&Apache::lonnet::allowed('bre',$res_url)) {      if (&Apache::lonnet::allowed('bre',$res_url)) {
  if ($res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {   if ($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'};
     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 $lonidsdir=$r->dir_config('lonIDsDir');      my ($envfile) =
     my $envfile=$env{'user.environment'};   ( $env{'user.environment'} =~ m|/([^/]+)\.id$| );
     $envfile=~/\/([^\/]+)\.id$/;      &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),
     $envfile=$1;       $envfile);
     &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile);  
     my $current_counter=$env{'form.counter'};      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')) {
Line 1683  sub print_resources { Line 1742  sub print_resources {
  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));
  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));   &Apache::lonnet::appenv(('form.counter' => $current_counter));
  if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {   if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
Line 1703  sub print_resources { Line 1763  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 $lonidsdir=$r->dir_config('lonIDsDir');      my ($envfile) = 
     my $envfile=$env{'user.environment'};   ( $env{'user.environment'} = ~m|/([^/]+)\.id$| );
     $envfile=~/\/([^\/]+)\.id$/;      &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),
     $envfile=$1;       $envfile);
     &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile);  
     my $current_counter=$env{'form.counter'};      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);
Line 1747  sub print_resources { Line 1806  sub print_resources {
 sub handler {  sub handler {
   
     my $r = shift;      my $r = shift;
     my $helper;      
       &init_perm();
   
 #    my $loaderror=&Apache::lonnet::overloaderror($r);  #    my $loaderror=&Apache::lonnet::overloaderror($r);
 #    if ($loaderror) { return $loaderror; }  #    if ($loaderror) { return $loaderror; }
Line 1756  sub handler { Line 1816  sub handler {
 #         $env{'course.'.$env{'request.course.id'}.'.home'});  #         $env{'course.'.$env{'request.course.id'}.'.home'});
 #    if ($loaderror) { return $loaderror; }  #    if ($loaderror) { return $loaderror; }
   
     my $result = printHelper($r);      my $helper = printHelper($r);
     if (!ref($result)) {      if (!ref($helper)) {
  return $result;   return $helper;
     }      }
     $helper = $result;  
         
 # my $key;   # my $key; 
 # foreach $key (keys %{$helper->{'VARS'}}) {  # foreach $key (keys %{$helper->{'VARS'}}) {
Line 1803  sub addMessage { Line 1862  sub addMessage {
   
 use Data::Dumper;  use Data::Dumper;
   
   sub init_perm {
       undef(%perm);
       $perm{'pav'}=&Apache::lonnet::allowed('pav',$env{'request.course.id'});
       if (!$perm{'pav'}) {
    $perm{'pav'}=&Apache::lonnet::allowed('pav',
     $env{'request.course.id'}.'/'.$env{'request.course.sec'});
       }
       $perm{'pfo'}=&Apache::lonnet::allowed('pav',$env{'request.course.id'});
       if (!$perm{'pfo'}) {
    $perm{'pfo'}=&Apache::lonnet::allowed('pfo',
     $env{'request.course.id'}.'/'.$env{'request.course.sec'});
       }
   }
   
 sub printHelper {  sub printHelper {
     my $r = shift;      my $r = shift;
   
Line 1846  sub printHelper { Line 1919  sub printHelper {
     $helper->declareVar("showallfoils");      $helper->declareVar("showallfoils");
   
     #  The page breaks can get loaded initially from the course environment:      #  The page breaks can get loaded initially from the course environment:
       # But we only do this in the initial state so that they are allowed to change.
       #
   
     if((!defined($env{"form.CURRENT_STATE"}))  ||      $helper->{VARS}->{FINISHPAGE} = '';
        ($env{'form.CURRENT_STATE'} == "START")) {  
  $helper->{VARS}->{FINISHPAGE} = ""; # In case they did a back e.g.  
     }  
   
   
           
     &Apache::loncommon::restore_course_settings('print',      &Apache::loncommon::restore_course_settings('print',
  {'pagebreaks'  => 'scalar',   {'pagebreaks'  => 'scalar',
          'lastprinttype' => 'scalar'});           'lastprinttype' => 'scalar'});
   
           
     if("$helper->{VARS}->{PRINT_TYPE}" eq "$env{'form.lastprinttype'}") {      
  $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};      if($helper->{VARS}->{PRINT_TYPE} eq $env{'form.lastprinttype'}) {
    if (!defined ($env{"form.CURRENT_STATE"})) {
       
       $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
    } else {
       my $state = $env{"form.CURRENT_STATE"};
       if ($state eq "START") {
    $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
       }
    }
   
     }      }
           
           
Line 1925  sub printHelper { Line 2004  sub printHelper {
     }      }
   
     my $userCanSeeHidden = Apache::lonnavmaps::advancedUser();      my $userCanSeeHidden = Apache::lonnavmaps::advancedUser();
     my $userPriviledged = ($env{'request.role'}=~m/^cc\./ or  
    $env{'request.role'}=~m/^in\./ or  
    $env{'request.role'}=~m/^ta\./);  
   
     Apache::lonhelper::registerHelperTags();      Apache::lonhelper::registerHelperTags();
   
Line 1970  sub printHelper { Line 2046  sub printHelper {
     $helper->declareVar('SEQUENCE');      $helper->declareVar('SEQUENCE');
   
     # Useful for debugging: Dump the help vars      # Useful for debugging: Dump the help vars
 #    $r->print(Dumper($helper->{VARS}));  #     $r->print(Dumper($helper->{VARS}));
 #    $r->print($map);  #    $r->print($map);
   
     # If we're in a sequence...      # If we're in a sequence...
Line 2012  HELPERFRAGMENT Line 2088  HELPERFRAGMENT
  &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);   &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
     }      }
   
     # If the user is privileged, allow them to print all       # If the user has pfo (print for otheres) allow them to print all 
     # problems and resources  in the entier course, optionally for selected students      # problems and resources  in the entier course, optionally for selected students
     if ($userPriviledged &&       if ($perm{'pfo'} && 
         ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {           ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { 
   
         push @{$printChoices}, ['<b>Problems</b> from <b>entire course</b>', 'all_problems', 'ALL_PROBLEMS'];          push @{$printChoices}, ['<b>Problems</b> from <b>entire course</b>', 'all_problems', 'ALL_PROBLEMS'];
Line 2088  CHOOSE_STUDENTS Line 2164  CHOOSE_STUDENTS
     if ($name =~ /^type\0/) { next; }      if ($name =~ /^type\0/) { next; }
     $namechoice.='<choice computer="'.$name.'">'.$name.'</choice>';      $namechoice.='<choice computer="'.$name.'">'.$name.'</choice>';
  }   }
   
   
           my %all_codes = &Apache::lonnet::get('CODEs',
        \@names, $cdom,$cnum);
    my %code_values;
    my @all_code_array;
    foreach my $key (keys %all_codes) {
       %code_values = &Apache::grades::get_codes($key, $cdom, $cnum);
       foreach my $key (keys %code_values) {
    push (@all_code_array, "$key");
       }
    }
   
    my $code_selection = "<choice></choice>\n";
    foreach my $code (sort {uc($a) cmp uc($b)} @all_code_array) {
       my $choice  = $code;
       if ($code =~ /^[A-Z]+$/) { # Alpha code
    $choice = &letters_to_num($code);
       }
       $code_selection .= '   <choice computer="'.$choice.'">'.$code."</choice>\n";
    }
  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 2110  CHOOSE_STUDENTS Line 2207  CHOOSE_STUDENTS
        <validator>         <validator>
  if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&   if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&
     !\$helper->{'VARS'}{'REUSE_OLD_CODES'}                &&      !\$helper->{'VARS'}{'REUSE_OLD_CODES'}                &&
             !\$helper->{'VARS'}{'SINGLE_CODE'}) {              !\$helper->{'VARS'}{'SINGLE_CODE'}                    &&
       !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
     return "You need to specify the number of assignments to print";      return "You need to specify the number of assignments to print";
  }   }
  return undef;   return undef;
Line 2121  CHOOSE_STUDENTS Line 2219  CHOOSE_STUDENTS
     <string variable="SINGLE_CODE" size="10" defaultvalue="zzzz">      <string variable="SINGLE_CODE" size="10" defaultvalue="zzzz">
         <validator>          <validator>
    if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}           &&     if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}           &&
       !\$helper->{'VARS'}{'REUSE_OLD_CODES'}) {        !\$helper->{'VARS'}{'REUSE_OLD_CODES'}                 &&
         !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
       return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},        return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},
       \$helper->{'VARS'}{'CODE_OPTION'});        \$helper->{'VARS'}{'CODE_OPTION'});
    } else {     } else {
Line 2130  CHOOSE_STUDENTS Line 2229  CHOOSE_STUDENTS
         </validator>          </validator>
     </string>      </string>
     <message></td></tr><tr><td></message>      <message></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></message>
     <message><b>Names to store the CODEs under for later:</b></message>      <message><b>Names to store the CODEs under for later:</b></message>
     <message></td><td></message>      <message></td><td></message>
     <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />      <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />
Line 2196  CHOOSE_STUDENTS1 Line 2301  CHOOSE_STUDENTS1
     <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">      <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">
        <validator>         <validator>
  if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&   if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&
     !\$helper->{'VARS'}{'REUSE_OLD_CODES'}) {      !\$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 "You need to specify the number of assignments to print";
  }   }
  return undef;   return undef;
        </validator>         </validator>
     </string>      </string>
     <message></td></tr><tr><td></message>      <message></td></tr><tr><td></message>
       <message><b>Value of CODE to print?</b></td><td></message>
       <string variable="SINGLE_CODE" size="10" defaultvalue="zzzz">
           <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>
       <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></message>
     <message><b>Names to store the CODEs under for later:</b></message>      <message><b>Names to store the CODEs under for later:</b></message>
     <message></td><td></message>      <message></td><td></message>
     <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />      <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />
Line 2225  CHOOSE_ANON2 Line 2352  CHOOSE_ANON2
     }      }
   
     # FIXME: That RE should come from a library somewhere.      # FIXME: That RE should come from a library somewhere.
     if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $env{'request.role.adv'} and $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/') {          if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $perm{'pav'} and $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/') {    
         push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from current subdirectory')." <b><i>$subdir</i></b>", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];          push @{$printChoices}, ["<b>".&mt('Problems')."</b> ".&mt('from current subdirectory')." <b><i>$subdir</i></b>", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];
   
         my $f = '$filename';          my $f = '$filename';
Line 2265  CHOOSE_FROM_SUBDIR Line 2392  CHOOSE_FROM_SUBDIR
       <nextstate>CHOOSE_FROM_ANY_SEQUENCE</nextstate>        <nextstate>CHOOSE_FROM_ANY_SEQUENCE</nextstate>
       <filterfunc>return \$res->is_sequence;</filterfunc>        <filterfunc>return \$res->is_sequence;</filterfunc>
       <valuefunc>return $urlValue;</valuefunc>        <valuefunc>return $urlValue;</valuefunc>
         <choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
    </choicefunc>
       <option text='Newpage' variable='FINISHPAGE' />        <option text='Newpage' variable='FINISHPAGE' />
       </resource>        </resource>
     </state>      </state>
Line 2295  CHOOSE_FROM_ANY_SEQUENCE Line 2424  CHOOSE_FROM_ANY_SEQUENCE
     my $startedTable = 0; # have we started an HTML table yet? (need      my $startedTable = 0; # have we started an HTML table yet? (need
                           # to close it later)                            # to close it later)
   
     if (($env{'request.role.adv'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or       if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or 
  ($helper->{VARS}->{'construction'} eq '1')) {   ($helper->{VARS}->{'construction'} eq '1')) {
  addMessage("<hr width='33%' /><table><tr><td align='right'>Print: </td><td>");   addMessage("<hr width='33%' /><table><tr><td align='right'>Print: </td><td>");
         $paramHash = Apache::lonhelper::getParamHash();          $paramHash = Apache::lonhelper::getParamHash();
Line 2311  CHOOSE_FROM_ANY_SEQUENCE Line 2440  CHOOSE_FROM_ANY_SEQUENCE
  $startedTable = 1;   $startedTable = 1;
     }      }
   
     if ($env{'request.role.adv'}) {      if ($perm{'pav'}) {
  if (!$startedTable) {   if (!$startedTable) {
     addMessage("<hr width='33%' /><table><tr><td align='right'>LaTeX mode: </td><td>");      addMessage("<hr width='33%' /><table><tr><td align='right'>LaTeX mode: </td><td>");
     $startedTable = 1;      $startedTable = 1;
Line 2362  CHOOSE_FROM_ANY_SEQUENCE Line 2491  CHOOSE_FROM_ANY_SEQUENCE
     Apache::lonhelper::dropdown->new();      Apache::lonhelper::dropdown->new();
     addMessage("</td></tr>");      addMessage("</td></tr>");
   
             #  If advanced roles, then allow to show all foils.      addMessage("<tr><td align = 'right'>  </td><td>");
       $paramHash = Apache::lonhelper::getParamHash();
             if ($env{'request.role.adv'}) {      $paramHash->{'multichoice'} = "true";
  addMessage("<tr><td align = 'right'>  </td><td>");      $paramHash->{'allowempty'}  = "true";
  $paramHash = Apache::lonhelper::getParamHash();      $paramHash->{'variable'}   = "showallfoils";
  $paramHash->{'multichoice'} = "true";      $paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ];
  $paramHash->{'allowempty'}  = "true";      Apache::lonhelper::choices->new();
  $paramHash->{'variable'}   = "showallfoils";      addMessage("</td></tr>");
  $paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ];  
  Apache::lonhelper::choices->new();  
  addMessage("</td></tr>");  
             }  
   
  }   }
   
  if ($helper->{'VARS'}->{'construction'}) {    if ($helper->{'VARS'}->{'construction'}) { 
Line 2397  RNDSEED Line 2521  RNDSEED
     $helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'};      $helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'};
           
  }    } 
   
     }      }
   
   
Line 2424  RNDSEED Line 2547  RNDSEED
     }          }    
   
     $r->print($helper->display());      $r->print($helper->display());
       if ($helper->{STATE} eq 'START') {
    &recently_generated($r);
       }
     &Apache::lonhelper::unregisterHelperTags();      &Apache::lonhelper::unregisterHelperTags();
   
     return OK;      return OK;
Line 2529  STATEHTML Line 2654  STATEHTML
     $result .= "<select name='${var}.paper'>\n";      $result .= "<select name='${var}.paper'>\n";
   
     my %parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'});      my %parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'});
     my $DefaultPaperSize=$parmhash{'default_paper_size'};      my $DefaultPaperSize=lc($parmhash{'default_paper_size'});
       $DefaultPaperSize=~s/\s//g;
     if ($DefaultPaperSize eq '') {$DefaultPaperSize='letter';}      if ($DefaultPaperSize eq '') {$DefaultPaperSize='letter';}
     $i = 0;      $i = 0;
     foreach (@paperSize) {      foreach (@paperSize) {

Removed from v.1.385  
changed lines
  Added in v.1.403


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