Diff for /loncom/interface/lonprintout.pm between versions 1.592 and 1.614

version 1.592, 2011/06/16 11:59:16 version 1.614, 2012/04/04 21:04:56
Line 1 Line 1
   
 # The LearningOnline Network  # The LearningOnline Network
 # Printout  # Printout
 #  #
Line 41  use Apache::admannotations; Line 40  use Apache::admannotations;
 use Apache::lonenc;  use Apache::lonenc;
 use Apache::entities;  use Apache::entities;
 use Apache::londefdef;  use Apache::londefdef;
   # use Apache::structurelags; # for language management.
   
 use File::Basename;  use File::Basename;
   
Line 123  sub create_incomplete_folder_selstud_hel Line 123  sub create_incomplete_folder_selstud_hel
   
     my $format_chooser = &generate_format_selector($helper,      my $format_chooser = &generate_format_selector($helper,
  'Format of the print job',   'Format of the print job',
  '','CHOOSE_STUDENTS_INCOMPLETE_FORMAT'); # end state.   'CHOOSE_STUDENTS_INCOMPLETE_FORMAT'); # end state.
   
     return $resource_chooser . $student_chooser . $format_chooser;      return $resource_chooser . $student_chooser . $format_chooser;
 }    }  
Line 172  sub create_incomplete_course_helper { Line 172  sub create_incomplete_course_helper {
   
     my $format = &generate_format_selector($helper,      my $format = &generate_format_selector($helper,
    'Format of the print job',     'Format of the print job',
    '',  
    'INCOMPLETE_PROBLEMS_COURSE_FORMAT'); # end state.     'INCOMPLETE_PROBLEMS_COURSE_FORMAT'); # end state.
   
     return $resource_chooser . $people_chooser . $format;      return $resource_chooser . $people_chooser . $format;
Line 303  CHOOSE_RESOURCES Line 302  CHOOSE_RESOURCES
       </resource>        </resource>
     </state>      </state>
 CHOOSE_RESOURCES  CHOOSE_RESOURCES
   
     return $result;      return $result;
 }  }
 #  #
Line 356  sub generate_code_selector { Line 354  sub generate_code_selector {
     <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" />
     <message></td></tr><tr><td></message>      <message></td></tr><tr><td></message>
     <message><b>Bubble sheet type:</b></message>      <message><b>Bubblesheet type:</b></message>
     <message></td><td></message>      <message></td><td></message>
     <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">      <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">
     $bubble_types      $bubble_types
Line 395  CHOOSE_ANON1 Line 393  CHOOSE_ANON1
    return $result;     return $result;
 }  }
   
   #  Returns the XML for choosing how assignments are to be formatted 
   #  that text must still be parsed by the helper xml parser.
   # Parameters: 3 (required)
   
   #   helper       - The helper; $helper->{'VARS'}->{'PRINT_TYPE'} used
   #                  to check if splitting PDFs by section can be offered.
   #   title        - Title for the current state. 
   #   this_state   - State name of the chooser.
   
 sub generate_format_selector {  sub generate_format_selector {
     my ($helper,$title,$nextstate, $thisstate) = @_;      my ($helper,$title,$this_state) = @_;
     my $secpdfoption;      my $secpdfoption;
     my $state = 'PRINT_FORMATTING';  
     if ($thisstate) {  
  $state = $thisstate;  
     }  
     unless (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon')     ||      unless (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon')     ||
             ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') ||              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') ||
             ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon')  ) {              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon')  ) {
         $secpdfoption =  '<choice computer="sections">Each PDF contains exactly one section</choice>';          $secpdfoption =  '<choice computer="sections">Each PDF contains exactly one section</choice>';
     }      }
     return <<RESOURCE_SELECTOR;      return <<RESOURCE_SELECTOR;
     <state name="$state" title="$title">      <state name="$this_state" title="$title">
     $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 444  RESOURCE_SELECTOR Line 446  RESOURCE_SELECTOR
 sub incomplete {  sub incomplete {
     my ($username, $domain, $map) = @_;      my ($username, $domain, $map) = @_;
   
     # Manipulate the env so the navmap is made  
     # in the context of the appropriate user:  
   
     my $me         = $env{'user.name'};  
     my $my_domain  = $env{'user.domain'};  
   
     $env{'user.name'} = $username;      my $navmap = Apache::lonnavmaps::navmap->new($username, $domain);
     $env{'user.domain'} = $domain;  
   
     my $navmap = Apache::lonnavmaps::navmap->new();  
           
     $env{'user.name'}   = $me; # Restore user/domain context.  
     $env{'user.domain'} = $my_domain;  
   
     if (defined($navmap)) {      if (defined($navmap)) {
  my $res = $navmap->getResourceByUrl($map);   my $res = $navmap->getResourceByUrl($map);
Line 466  sub incomplete { Line 458  sub incomplete {
  return 1;   return 1;
     }      }
 }  }
   #
   #  When printing for students, the resoures and order of the
   #  resources may need to be altered if there are folders with
   #  random selectiopn or random ordering (or both) enabled.
   #  This sub computes the set of resources to print for a student
   #  modified both by random ordering and selection and filtered
   #  to only those that are in the original set selcted to be printed.
   #
   # Parameters:
   #   $helper - The helper we need $helper->{'VARS'}->{'symb'}
   #            to construct the navmap and the iteration.
   #   $seq   - The original set of resources to print 
   #            (really an array of resource names (array of symb's).
   #   $who   - Student/domain for whome the sequence will be generated.
   #
   # Implicit inputs:
   #   $
   # Returns:
   #   reference to an array of resources that can be passed to
   #   print_resources.
   # 
   sub master_seq_to_person_seq {
       my ($helper, $seq, $who) = @_;
   
   
       my ($username, $userdomain, $usersection) = split(/:/, $who);
   
   
       # Toss the sequence up into a hash so that we have O(1) lookup time.
       # on the items that come out of the user's list of resources.
       #
       
       my %seq_hash = map {$_  => 1} @$seq;
       my @output_seq;
       
       my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});
       my $navmap           = Apache::lonnavmaps::navmap->new($username, $userdomain);
       my $iterator         = $navmap->getIterator($navmap->firstResource(),
    $navmap->finishResource(),
    {}, 1);
       my %nonResourceItems = (
    $iterator->BEGIN_MAP    => 1,
    $iterator->BEGIN_BRANCH => 1,
    $iterator->END_BRANCH   => 1,
    $iterator->END_MAP      => 1,
    $iterator->FORWARD      => 1,
    $iterator->BACKWARD     => 1
   
       ); # These items are not resources but appear in the midst of iteration.
   
       #  Iterate on the resource..select the items that are randomly selected
       #  and that are in the seq_has.  Presumably the iterator will take care
       # of the random ordering part of the deal.
       #
       my $curres;
       while ($curres = $iterator->next()) {
    #
    #  Only process resources..that are not removed by randomout...
    #  and are selected for printint as well.
    #
        
    if (! exists $nonResourceItems{$curres} && ! $curres->randomout()) {
       my $symb = $curres->symb();
       if (exists $seq_hash{$symb}) {
    push(@output_seq, $symb);
       }
    }
       }
      
   
       return \@output_seq; # for now.
       
   }
   
   
 # 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 568  sub include_pdf { Line 634  sub include_pdf {
     # (unlikely).  If it did exist, add the pdf to the set of files/images that      # (unlikely).  If it did exist, add the pdf to the set of files/images that
     # need tob e converted for this print job:      # need tob e converted for this print job:
   
     $file =~ s|(.*)/res/|/home/httpd/html/res/|;      my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
       $file =~ s{(.*)/res/}{$londocroot/res/};
   
     open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat");      open(FILE,">>$Apache::lonnet::perlvar{'lonPrtDir'}/$env{'user.name'}_$env{'user.domain'}_printout.dat");
     print FILE ("$file\n");      print FILE ("$file\n");
     close (FILE);      close (FILE);
   
Line 593  sub include_pdf { Line 660  sub include_pdf {
   
   
 }  }
   ##
   #  Collect the various \select_language{language_name}
   #  latex tags to build a \usepackage[lang-list]{babel} which will
   #  appear just prior to the \begin{document} at the front of the concatenated
   #  set of resources:
   # @param doc - The string of latex to search/replace.
   # @return string
   # @retval - the modified document stringt.
   #
   sub collect_languages {
       my $doc = shift;
       my %languages;
       while ($doc =~ /\\selectlanguage{(\w+)}/mg) {
    $languages{$1} = 1; # allows us to request each language exactly once.
       }
       my @lang_list = (keys(%languages)); # List of unique languages
       if (scalar @lang_list) {
    my $babel_header = '\usepackage[' . join(',', @lang_list) .']{babel}'. "\n";
    $doc =~ s/\\begin{document}/$babel_header\\begin{document}/;
       }
       return $doc;
   }
   #-------------------------------------------------------------------
   
 #  #
 #   ssi_with_retries- Does the server side include of a resource.  #   ssi_with_retries- Does the server side include of a resource.
Line 640  sub ssi_with_retries { Line 729  sub ssi_with_retries {
  $ssi_last_error_resource = $resource;   $ssi_last_error_resource = $resource;
  $ssi_last_error          = $response->code . " " . $response->message;   $ssi_last_error          = $response->code . " " . $response->message;
         $content='\section*{!!! An error occurred !!!}';          $content='\section*{!!! An error occurred !!!}';
  &Apache::lonnet::logthis("Error in SSI resource: $resource Error: $ssi_last_error");  
     }      }
   
     return $content;      return $content;
Line 656  sub get_student_view_with_retries { Line 744  sub get_student_view_with_retries {
         $ssi_last_error_resource = $curresline.' for user '.$username.':'.$userdomain;          $ssi_last_error_resource = $curresline.' for user '.$username.':'.$userdomain;
         $ssi_last_error          = $response->code . " " . $response->message;          $ssi_last_error          = $response->code . " " . $response->message;
         $content='\section*{!!! An error occurred !!!}';          $content='\section*{!!! An error occurred !!!}';
         &Apache::lonnet::logthis("Error in SSI (student view) resource: $curresline Error: $ssi_last_error User: $username:$userdomain");  
     }      }
     return $content;      return $content;
   
Line 1744  sub map_laystyle { Line 1831  sub map_laystyle {
   
 sub print_page_in_course {  sub print_page_in_course {
     my ($helper, $rparmhash, $currentURL, $resources) = @_;      my ($helper, $rparmhash, $currentURL, $resources) = @_;
   
     my %parmhash       = %$rparmhash;      my %parmhash       = %$rparmhash;
     my @page_resources = @$resources;      my @page_resources = @$resources;
     my $mode = $helper->{'VARS'}->{'LATEX_TYPE'};      my $mode = $helper->{'VARS'}->{'LATEX_TYPE'};
Line 1800  sub print_page_in_course { Line 1888  sub print_page_in_course {
  }   }
  # these resources go through the XML transformer:   # these resources go through the XML transformer:
   
  elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/)  {   elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/)  {
   
     my $urlp = &Apache::lonnet::clutter($resource_src);      my $urlp = &Apache::lonnet::clutter($resource_src);
   
     my %form;      my %form;
     my %moreenv;      my %moreenv;
   
Line 1863  sub print_page_in_course { Line 1953  sub print_page_in_course {
  $texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';   $texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
  $texversion.=&path_to_problem($urlp,$LaTeXwidth);   $texversion.=&path_to_problem($urlp,$LaTeXwidth);
     } else {      } else {
  $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm ';   $texversion.='\vskip 0 mm \noindent\textbf{'.
  my $URLpath=$urlp;                          &mt("Printing from Construction Space: No Title").'}\vskip 0 mm ';
  $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/;   $texversion.=&path_to_problem($urlp,$LaTeXwidth);
  $texversion.=&path_to_problem($URLpath,$LaTeXwidth);  
     }      }
     $texversion.='\vskip 1 mm '.$answer.'\end{document}';      $texversion.='\vskip 1 mm '.$answer.'\end{document}';
  }   }
Line 2134  sub set_form_extraspace { Line 2223  sub set_form_extraspace {
 sub print_construction_sequence {  sub print_construction_sequence {
     my ($currentURL, $helper, %form, $LaTeXwidth) = @_;      my ($currentURL, $helper, %form, $LaTeXwidth) = @_;
   
   
     my $result;      my $result;
     my $rndseed=time;      my $rndseed=time;
     if ($helper->{'VARS'}->{'curseed'}) {      if ($helper->{'VARS'}->{'curseed'}) {
  $rndseed=$helper->{'VARS'}->{'curseed'};   $rndseed=$helper->{'VARS'}->{'curseed'};
     }      }
     my $errtext=&LONCAPA::map::mapread($currentURL);      my $errtext=&LONCAPA::map::mapread(&Apache::lonnet::filelocation('',$currentURL));
   
     #       # 
     #  These make this all support recursing for subsequences.      #  These make this all support recursing for subsequences.
     #      #
     my @order    = @LONCAPA::map::order;      my @order    = @LONCAPA::map::order;
     my @resources = @LONCAPA::map::resources;       my @resources = @LONCAPA::map::resources; 
   
     for (my $member=0;$member<=$#order;$member++) {      for (my $member=0;$member<=$#order;$member++) {
  $resources[$order[$member]]=~/^([^:]*):([^:]*):/;   $resources[$order[$member]]=~/^([^:]*):([^:]*):/;
  my $urlp=$2;   my $urlp=$2;
Line 2161  sub print_construction_sequence { Line 2251  sub print_construction_sequence {
     }      }
     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')) && 
        ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) {         ($urlp=~/$LONCAPA::assess_page_re/)) {
  #  Don't permanently modify %$form...   #  Don't permanently modify %$form...
  my %answerform = %form;   my %answerform = %form;
  $answerform{'grade_target'}='answer';   $answerform{'grade_target'}='answer';
Line 2205  sub print_construction_sequence { Line 2295  sub print_construction_sequence {
     # IF sequence, recurse:      # IF sequence, recurse:
           
     if ($urlp =~ /\.sequence$/) {      if ($urlp =~ /\.sequence$/) {
  my $sequence_url = $urlp;   $result .= &print_construction_sequence($urlp, 
  my $domain       = $env{'user.domain'}; # Constr. space only on local  
  my $user         = $env{'user.name'};  
   
  $sequence_url    =~ s/^\/res\/$domain/\/home/;  
  $sequence_url    =~ s/^(\/home\/$user)/$1\/public_html/;  
 # $sequence_url    =~ s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;  
  $result .= &print_construction_sequence($sequence_url,   
  $helper, %form,    $helper, %form, 
  $LaTeXwidth);   $LaTeXwidth);
     }      }
Line 2384  ENDPART Line 2467  ENDPART
  } else {   } else {
   
             #prints resource from the construction space              #prints resource from the construction space
     $currentURL='/'.$helper->{'VARS'}->{'filename'};      $currentURL=$helper->{'VARS'}->{'filename'};
     if ($currentURL=~/([^?]+)/) {$currentURL=$1;}  
     $cleanURL=$currentURL;      $cleanURL=$currentURL;
  }   }
  $selectionmade = 1;   $selectionmade = 1;
         
  if ($cleanURL!~m|^/adm/|   if ($cleanURL!~m|^/adm/|
     && $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) {      && $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) {
     my $rndseed=time;      my $rndseed=time;
Line 2428  ENDPART Line 2511  ENDPART
   
     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')) {
   
  $form{'problem_split'}=$parmhash{'problem_stream_switch'};   $form{'problem_split'}=$parmhash{'problem_stream_switch'};
  $form{'grade_target'}='answer';   $form{'grade_target'}='answer';
  $form{'answer_output_mode'}='tex';   $form{'answer_output_mode'}='tex';
Line 2449  ENDPART Line 2533  ENDPART
  $texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';   $texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
  $texversion.=&path_to_problem($cleanURL,$LaTeXwidth);   $texversion.=&path_to_problem($cleanURL,$LaTeXwidth);
     } else {      } else {
  $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm ';   $texversion.='\vskip 0 mm \noindent\textbf{'.
  my $URLpath=$cleanURL;                          &mt("Printing from Construction Space: No Title").'}\vskip 0 mm ';
  $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/;  
  $texversion.=&path_to_problem($URLpath,$LaTeXwidth);   $texversion.=&path_to_problem($cleanURL,$LaTeXwidth);
     }      }
     $texversion.='\vskip 1 mm '.$answer.'\end{document}';      $texversion.='\vskip 1 mm '.$answer.'\end{document}';
  }   }
Line 2484  ENDPART Line 2568  ENDPART
     }      }
         } elsif ($cleanURL!~m|^/adm/|          } elsif ($cleanURL!~m|^/adm/|
  && $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') {   && $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') {
             #printing content of sequence from the construction space  
   
   
     $currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;  
     $result .= &print_construction_sequence($currentURL, $helper, %form,      $result .= &print_construction_sequence($currentURL, $helper, %form,
     $LaTeXwidth);      $LaTeXwidth);
     $result .= '\end{document}';        $result .= '\end{document}';  
Line 2649  ENDPART Line 2729  ENDPART
                             $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;                              $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
                         }                          }
     } else {      } else {
  if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/) {   if ($urlp=~/$LONCAPA::assess_page_re/) {
     $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});      $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
 #    $texversion =~ s/\\begin{document}//; # FIXME  #    $texversion =~ s/\\begin{document}//; # FIXME
     my $title = &Apache::lonnet::gettitle($master_seq[$i]);      my $title = &Apache::lonnet::gettitle($master_seq[$i]);
Line 2820  ENDPART Line 2900  ENDPART
      ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) {       ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) {
      $moreenv{'problem_split'}='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,$#students+1);
  my $student_counter=-1;   my $student_counter=-1;
  my $i = 0;   my $i = 0;
  my $last_section = (split(/:/,$students[0]))[2];   my $last_section = (split(/:/,$students[0]))[2];
Line 2840  ENDPART Line 2920  ENDPART
      } else {       } else {
  $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'});   $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'});
      }       }
        my $actual_seq = master_seq_to_person_seq($helper, \@master_seq, $person);
      my ($output,$fullname, $printed)=&print_resources($r,$helper,       my ($output,$fullname, $printed)=&print_resources($r,$helper,
      $person,$type,       $person,$type,
      \%moreenv,\@master_seq,       \%moreenv,  $actual_seq,
      $flag_latex_header_remove,       $flag_latex_header_remove,
      $LaTeXwidth);       $LaTeXwidth);
      $resources_printed .= ":";       $resources_printed .= ":";
Line 2868  ENDPART Line 2949  ENDPART
   
  my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};   my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};
          my @lines = &Apache::grades::get_scantronformat_file();           my @lines = &Apache::grades::get_scantronformat_file();
  my ($code_type,$code_length)=('letter',6);   my ($code_type,$code_length,$bubbles_per_row)=('letter',6,10);
  foreach my $line (@lines) {   foreach my $line (@lines) {
      my ($name,$type,$length) = (split(/:/,$line))[0,2,4];               chomp($line);
        my ($name,$type,$length,$bubbles_per_item) = 
                    (split(/:/,$line))[0,2,4,17];
      if ($name eq $code_option) {       if ($name eq $code_option) {
  $code_length=$length;   $code_length=$length;
  if ($type eq 'number') { $code_type = 'number'; }   if ($type eq 'number') { $code_type = 'number'; }
                    chomp($bubbles_per_item); 
                    if (($bubbles_per_item ne '') && ($bubbles_per_item > 0)) {
                        $bubbles_per_row = $bubbles_per_item; 
                    }
      }       }
  }   }
  my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));   my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
  $moreenv{'problem_split'}    = $parmhash{'problem_stream_switch'};   $moreenv{'problem_split'}    = $parmhash{'problem_stream_switch'};
          $moreenv{'instructor_comments'}='hide';           $moreenv{'instructor_comments'}='hide';
            $moreenv{'bubbles_per_row'} = $bubbles_per_row;
  my $seed=time+($$<<16)+($$);   my $seed=time+($$<<16)+($$);
  my @allcodes;   my @allcodes;
  if ($old_name) {   if ($old_name) {
Line 2927  ENDPART Line 3015  ENDPART
      $number_per_page=$num_todo > 0 ? $num_todo : 1;       $number_per_page=$num_todo > 0 ? $num_todo : 1;
  }   }
  my $flag_latex_header_remove = 'NO';    my $flag_latex_header_remove = 'NO'; 
  my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');   my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$num_todo);
  my $count=0;   my $count=0;
  foreach my $code (sort(@allcodes)) {   foreach my $code (sort(@allcodes)) {
      my $file_num=int($count/$number_per_page);       my $file_num=int($count/$number_per_page);
Line 2969  ENDPART Line 3057  ENDPART
     if ($urlp=~/\//) {      if ($urlp=~/\//) {
  $form{'problem_split'}=$parmhash{'problem_stream_switch'};   $form{'problem_split'}=$parmhash{'problem_stream_switch'};
  $form{'rndseed'}=$rndseed;   $form{'rndseed'}=$rndseed;
  if ($urlp =~ m|/home/([^/]+)/public_html|) {   $urlp =~ s|^$Apache::lonnet::perlvar{'lonDocRoot'}||;
     $urlp =~ s|/home/([^/]*)/public_html|/~$1|;  
  } else {  
     $urlp =~ s|^$Apache::lonnet::perlvar{'lonDocRoot'}||;  
  }  
  $resources_printed .= $urlp.':';   $resources_printed .= $urlp.':';
  my $texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form);   my $texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form);
  if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||   if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
Line 2994  ENDPART Line 3078  ENDPART
     $texversion.='\vskip 0 mm \noindent ';      $texversion.='\vskip 0 mm \noindent ';
     $texversion.=&path_to_problem ($urlp,$LaTeXwidth);      $texversion.=&path_to_problem ($urlp,$LaTeXwidth);
  } else {   } else {
     $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm ';      $texversion.='\vskip 0 mm \noindent\textbf{'.
     my $URLpath=$urlp;                                           &mt("Printing from Construction Space: No Title").'}\vskip 0 mm ';
     $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/;      $texversion.=&path_to_problem ($urlp,$LaTeXwidth);
     $texversion.=&path_to_problem ($URLpath,$LaTeXwidth);  
  }   }
  $texversion.='\vskip 1 mm '.$answer.'\end{document}';   $texversion.='\vskip 1 mm '.$answer.'\end{document}';
     }      }
  }   }
                 #this chunk is responsible for printing the path to problem                  #this chunk is responsible for printing the path to problem
   
  my $newurlp=$urlp;   my $newurlp=&path_to_problem($urlp,$LaTeXwidth);
  if ($newurlp=~/~/) {$newurlp=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;}  
  $newurlp=&path_to_problem($newurlp,$LaTeXwidth);  
  $texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 $newurlp/;   $texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 $newurlp/;
  if ($flag_latex_header_remove ne 'NO') {   if ($flag_latex_header_remove ne 'NO') {
     $texversion = &latex_header_footer_remove($texversion);      $texversion = &latex_header_footer_remove($texversion);
Line 3055  ENDPART Line 3136  ENDPART
   
     my $URLback=''; #link to original document      my $URLback=''; #link to original document
     if ($helper->{'VARS'}->{'construction'} eq '1') {      if ($helper->{'VARS'}->{'construction'} eq '1') {
  #prints resource from the construction space   $URLback=$helper->{'VARS'}->{'filename'};
  $URLback='/'.$helper->{'VARS'}->{'filename'};  
  if ($URLback=~/([^?]+)/) {  
     $URLback=$1;  
     $URLback=~s|^/~|/priv/|;  
  }  
     }      }
     #      #
     # Final adjustment of the font size:      # Final adjustment of the font size:
Line 3068  ENDPART Line 3144  ENDPART
   
     $result = set_font_size($result);      $result = set_font_size($result);
   
       # Insert any babel headers required.
   
       $result       = &collect_languages($result);
   
   
 #-- writing .tex file in prtspool   #-- writing .tex file in prtspool 
     my $temp_file;      my $temp_file;
     my $identifier = &Apache::loncommon::get_cgi_id();      my $identifier = &Apache::loncommon::get_cgi_id();
Line 3195  sub print_resources { Line 3276  sub print_resources {
     my ($username,$userdomain,$usersection) = split /:/,$person;      my ($username,$userdomain,$usersection) = split /:/,$person;
     my $fullname = &get_name($username,$userdomain);      my $fullname = &get_name($username,$userdomain);
     my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace.      my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace.
   
     #      #
     # Figure out if we need to filter the output by      # Figure out if we need to filter the output by
     # the incomplete problems for that person      # the incomplete problems for that person
Line 3205  sub print_resources { Line 3287  sub print_resources {
  ($print_type eq 'incomplete_problems_selpeople_course')) {   ($print_type eq 'incomplete_problems_selpeople_course')) {
  $print_incomplete = 1;   $print_incomplete = 1;
     }      }
     if ($person =~ 'anon') {      if ($person eq 'anonymous') {
  $namepostfix .="Name: ";   $namepostfix .=&mt('Name:')." ";
  $fullname = "CODE - ".$moreenv->{'CODE'};   $fullname = "CODE - ".$moreenv->{'CODE'};
     }      }
   
Line 3242  sub print_resources { Line 3324  sub print_resources {
  $current_output .= &get_extra_vspaces($helper, $curresline);   $current_output .= &get_extra_vspaces($helper, $curresline);
  $i++;   $i++;
  if ( !($type eq 'problems' &&    if ( !($type eq 'problems' && 
        ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) ) {         ($curresline!~ m/$LONCAPA::assess_page_re/)) ) {
     my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline);      my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline);
     if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) {      if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) {
  next;   next;
Line 3354  sub print_resources { Line 3436  sub print_resources {
     # that so we're going to generate a stub that says there are no      # that so we're going to generate a stub that says there are no
     # incomplete resources for the person.      # incomplete resources for the person.
     #      #
     if ($actually_printed == 0) {  
   
       if ($actually_printed == 0) {
  $current_output  = &encapsulate_minipage("\\vskip -10mm \nNo incomplete resources\n \\vskip 100 mm { }\n");   $current_output  = &encapsulate_minipage("\\vskip -10mm \nNo incomplete resources\n \\vskip 100 mm { }\n");
  $current_output = &print_latex_header() . $current_output;   if ($remove_latex_header eq "NO") {
       $current_output = &print_latex_header() . $current_output;
    } else {
       $current_output = &latex_header_footer_remove($current_output);
    }
     }      }
   
     if ($syllabus_first) {      if ($syllabus_first) {
Line 3390  sub print_resources { Line 3475  sub print_resources {
   
 }  }
   
   sub printing_blocked {
       my ($r,$blocktext) = @_;
       my $title = &mt('Preparing Printout');
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/printout',
                                               text=> $title});
       my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs($title);
       &Apache::loncommon::content_type($r,'text/html');
       &Apache::loncommon::no_cache($r);
       $r->send_http_header;
       $r->print(&Apache::loncommon::start_page('Preparing Printout').
                 $breadcrumbs.
                 $blocktext.
                 &Apache::loncommon::end_page());
       return;
   }
   
 sub handler {  sub handler {
   
     my $r = shift;      my $r = shift;
   
       if ($env{'request.course.id'}) {
           my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
           my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           my ($blocked,$blocktext) = 
               &Apache::loncommon::blocking_status('printout',$cnum,$cdom);
           if ($blocked) {
               my $checkrole = "cm./$cdom/$cnum";
               if ($env{'request.course.sec'} ne '') {
                   $checkrole .= "/$env{'request.course.sec'}";
               }
               unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && 
                       ($env{'request.role'} !~ m{^st\./$cdom/$cnum})) {
                   &printing_blocked($r,$blocktext);
                   return OK;
               }
           }
       }
           
     &init_perm();      &init_perm();
   
   
   
     my $helper = printHelper($r);      my $helper = printHelper($r);
     if (!ref($helper)) {      if (!ref($helper)) {
  return $helper;   return $helper;
Line 3421  sub handler { Line 3539  sub handler {
   
     &output_data($r,$helper,\%parmhash);      &output_data($r,$helper,\%parmhash);
     return OK;      return OK;
 }   }
   
 use Apache::lonhelper;  use Apache::lonhelper;
   
Line 3466  sub get_randomly_ordered_warning { Line 3584  sub get_randomly_ordered_warning {
     my $func =       my $func = 
         sub { return ($_[0]->is_map() && $_[0]->randomorder); };          sub { return ($_[0]->is_map() && $_[0]->randomorder); };
     my @matches = $navmap->retrieveResources($res, $func,1,1,1);      my @matches = $navmap->retrieveResources($res, $func,1,1,1);
     if (@matches) {  
         $message = "Some of the items below are in folders set to be randomly ordered. However, when printing the contents of these folders, they will be printed in the original order for all students, not the randomized order.";  
     }  
         }  
         if ($message) {  
     return '<message type="warning">'.$message.'</message>';  
         }          }
     } else {      } else {
         $message = "Retrieval of information about ordering of resources failed.";           $message = "Retrieval of information about ordering of resources failed."; 
Line 3561  sub printHelper { Line 3674  sub printHelper {
     }      }
   
     # Detect whether we're coming from construction space      # Detect whether we're coming from construction space
     if ($env{'form.postdata'}=~/^(?:http:\/\/[^\/]+\/|\/|)\~([^\/]+)\/(.*)$/) {      if ($env{'form.postdata'}=~m{^/priv}) {
         $helper->{VARS}->{'filename'} = "~$1/$2";          $helper->{VARS}->{'filename'} = $env{'form.postdata'};
         $helper->{VARS}->{'construction'} = 1;          $helper->{VARS}->{'construction'} = 1;
     } else {      } else {
         if ($env{'form.postdata'}) {          if ($env{'form.postdata'}) {
Line 3784  sub printHelper { Line 3897  sub printHelper {
  }   }
   
  push(@{$printChoices},   push(@{$printChoices},
      [&mt('Selected Incomplete  [_1]Problems[_2] from folder [_3]' . $textSuffix,       [&mt('Selected  [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix,
   '<b>', '</b>',    '<b>', '</b>',
   '<b><i>'. $sequenceTitle . '</b></i>'),    '<b><i>'. $sequenceTitle . '</b></i>'),
       $printSelector,        $printSelector,
Line 3831  sub printHelper { Line 3944  sub printHelper {
  # BZ 5209 - incomplete problems from entire course:   # BZ 5209 - incomplete problems from entire course:
   
  push(@{$printChoices},   push(@{$printChoices},
      [&mtn('Selected incomplete <b>Problems</b> from <b>entire course</b> for selected people'),       [&mtn('Selected <b>Incomplete Problems</b> from <b>entire course</b> for selected people'),
       'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']);        'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']);
  my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states.   my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states.
   
Line 3923  ALL_PROBLEMS Line 4036  ALL_PROBLEMS
   $map,    $map,
   $isProblem, '', $symbFilter,    $isProblem, '', $symbFilter,
   $start_new_option);    $start_new_option);
         my $secpdfoption;  
         unless (($helper->{'VARS'} eq 'problems_for_anon')     ||  
                 ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') ||  
                 ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon')  ) {  
             $secpdfoption =  '<choice computer="sections">Each PDF contains exactly one section</choice>';  
         }  
  $resource_selector .=  &generate_format_selector($helper,   $resource_selector .=  &generate_format_selector($helper,
                                                          'How should results be printed?').                                                           'How should results be printed?',
                                                            'PRINT_FORMATTING').
                                &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',                                 &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
  'Select Problem(s) to print',   'Select Problem(s) to print',
  "multichoice='1' addstatus='1' closeallpages ='1'",   "multichoice='1' addstatus='1' closeallpages ='1'",
Line 4064  ALL_PROBLEMS Line 4172  ALL_PROBLEMS
     </state>      </state>
 RESOURCE_SELECTOR  RESOURCE_SELECTOR
   
         my $nextstate = '<nextstate>NUMBER_PER_PDF</nextstate>';   
         $resource_selector .= &generate_format_selector($helper,          $resource_selector .= &generate_format_selector($helper,
                                                         'Format of the print job',                                                          'Format of the print job',
                                                         $nextstate);                                                          'PRINT_FORMATTING');
  &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">
     <choices variable='student_sort'>      <choices variable='student_sort'>
Line 4108  CHOOSE_STUDENTS1 Line 4215  CHOOSE_STUDENTS1
     <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" />
     <message></td></tr><tr><td></message>      <message></td></tr><tr><td></message>
     <message><b>Bubble sheet type:</b></message>      <message><b>Bubblesheet type:</b></message>
     <message></td><td></message>      <message></td><td></message>
     <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">      <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">
     $codechoice      $codechoice
Line 4856  sub postprocess { Line 4963  sub postprocess {
     }      }
 }  }
   
   
   
 __END__  __END__
   

Removed from v.1.592  
changed lines
  Added in v.1.614


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