Diff for /loncom/interface/lonprintout.pm between versions 1.188 and 1.194

version 1.188, 2003/06/18 18:11:16 version 1.194, 2003/06/24 14:07:27
Line 328  sub page_format { Line 328  sub page_format {
     if ($papersize eq '0') {      if ($papersize eq '0') {
  if ($layout eq 'book') {   if ($layout eq 'book') {
     if ($numberofcolumns == 1) {      if ($numberofcolumns == 1) {
  $textwidth = '18 cm';   $textwidth = '7.1 in';      #'18 cm';
  $textheight = '25.9 cm';   $textheight = '10.2 in';    #'25.9 cm';
  $oddoffset = '-0.57 in';   $oddoffset = '-0.57 in';
  $evenoffset = '-0.57 in';   $evenoffset = '-0.57 in';
     } elsif ($numberofcolumns == 2) {      } elsif ($numberofcolumns == 2) {
  $textwidth = '93 mm';   $textwidth = '3.66 in';     #'93 mm';
  $textheight = '25.9 cm';   $textheight = '10.2 in';    #'25.9 cm';
  $oddoffset = '-0.57 in';   $oddoffset = '-0.57 in';
  $evenoffset = '-0.57 in';   $evenoffset = '-0.57 in';
     }      }
Line 419  sub page_format_transformation { Line 419  sub page_format_transformation {
     $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$name}} \\hfill  $courseidinfo} \\vskip 5 mm /;      $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$name}} \\hfill  $courseidinfo} \\vskip 5 mm /;
     } elsif ($layout eq 'book') {      } elsif ($layout eq 'book') {
  if ($choice ne 'All class print') {    if ($choice ne 'All class print') { 
  $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$name} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;      $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$name} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
  } else {   } else {
     $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1}  \\vskip 5 mm /;      $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1}  \\vskip 5 mm /;
   
  }   }
     }      }
     return $text;      return $text;
Line 525  ENDPART Line 524  ENDPART
     my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns);      my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns);
     my $assignment =  $ENV{'form.assignment'};      my $assignment =  $ENV{'form.assignment'};
     my $LaTeXwidth;       my $LaTeXwidth; 
     if ($textwidth=~/(\d+)\s*cm/) {      if ($textwidth=~/(\d+\.?\d*)\s*cm/) {
  $LaTeXwidth = $1*10;   $LaTeXwidth = $1*10;
     } elsif ($textwidth=~/(\d+)\s*mm/) {      } elsif ($textwidth=~/(\d+\.?\d*)\s*mm/) {
  $LaTeXwidth = $1;   $LaTeXwidth = $1;
     } elsif ($textwidth=~/(\d+)\s*in/) {      } elsif ($textwidth=~/(\d+\.?\d*)\s*in/) {
  $LaTeXwidth = $1*25.4;   $LaTeXwidth = $1*25.4;
     }      }
     $LaTeXwidth.=' mm';      $LaTeXwidth.=' mm';
Line 584  ENDPART Line 583  ENDPART
              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or               ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')) {                ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')) { 
         #-- produce an output string          #-- produce an output string
    my %form=();   
    $form{'grade_target'}='tex';
    $form{'textwidth'}=$LaTeXwidth;
    $form{'problem_split'}=$parmhash{'problem_stream_switch'};
  my $flag_latex_header_remove = 'NO';   my $flag_latex_header_remove = 'NO';
  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='';
  for (my $i=0;$i<=$#master_seq;$i++) {   for (my $i=0;$i<=$#master_seq;$i++) {
     $master_seq[$i]=~/___\d+___(.*)$/;      $master_seq[$i]=~/___\d+___(.*)$/;
     my $urlp='/res/'.$1;      my $urlp='/res/'.$1;
Line 597  ENDPART Line 601  ENDPART
     } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') {      } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') {
  $selectionmade = 4;   $selectionmade = 4;
     }      }
     my %form;     
     $form{'grade_target'}='tex';  
     $form{'textwidth'}=$LaTeXwidth;  
     $form{'symb'}=$master_seq[$i];      $form{'symb'}=$master_seq[$i];
             $form{'problem_split'}=$parmhash{'problem_stream_switch'};      $master_seq[$i]=~/\/([^\/]+)\.sequence_/;
       my $assignment=' '.$1.' ';
     #&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]");      #&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]");
     my $texversion=&Apache::lonnet::ssi($urlp,%form);      my $texversion=&Apache::lonnet::ssi($urlp,%form);
     if ($urlp=~/\.page$/) {      if ($urlp=~/\.page$/) {
Line 622  ENDPART Line 624  ENDPART
  my $answer=&Apache::lonnet::ssi($urlp,%form);   my $answer=&Apache::lonnet::ssi($urlp,%form);
  $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;   $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
     }      }
     $result .= $texversion;           #    $result .= $texversion;
       if (($selectionmade == 4) and ($assignment ne $prevassignment) and ($i>1)) {
    my $name = &get_name();
    if ($name =~ /^\s*$/) {
       $name=&Apache::lonxml::latex_special_symbols($ENV{'user.name'},undef,
    undef,'header');
    }
    my $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'','','header');
    $prevassignment=$assignment;
    $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm ';
       }
       $result .= $texversion;
     $flag_latex_header_remove = 'YES';         $flag_latex_header_remove = 'YES';   
  }   }
  &Apache::lonnet::delenv('form.counter');   &Apache::lonnet::delenv('form.counter');
Line 659  ENDPART Line 672  ENDPART
  if($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {   if($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
     my %form;      my %form;
     $form{'answer_output_mode'}='tex';      $form{'answer_output_mode'}='tex';
     my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,      my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$ENV{'request.course.id'},%form);
       $ENV{'request.course.id'},%form);  
     $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/;      $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/;
  }   }
  $current_output .= $rendered;   $current_output .= $rendered;
Line 748  ENDPART Line 760  ENDPART
 #-------------------------------------------------------- corrections for the different page formats  #-------------------------------------------------------- corrections for the different page formats
     $result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'});      $result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'});
     $result = &latex_corrections($number_of_columns,$result);      $result = &latex_corrections($number_of_columns,$result);
 #    #changes page's parameters for the one column output       #changes page's parameters for the one column output 
 #    if ($ENV{'form.numberofcolumns'} == 1) {  #    if ($numberofcolumns == 1) {
 # $result =~ s/\\textwidth= 9cm/\\textwidth= $ENV{'form.width'}/;  # $result =~ s/\\textwidth= 9cm/\\textwidth= $ENV{'form.width'}/;
 # $result =~ s/\\textheight 25\.9cm/\\textheight $ENV{'form.height'}/;  # $result =~ s/\\textheight 25\.9cm/\\textheight $ENV{'form.height'}/;
 # $result =~ s/\\evensidemargin = -0\.57in/\\evensidemargin= $ENV{'form.leftmargin'}/;  # $result =~ s/\\evensidemargin = -0\.57in/\\evensidemargin= $ENV{'form.leftmargin'}/;
Line 799  sub handler { Line 811  sub handler {
 # return OK;  # return OK;
   
     my %parmhash=&Apache::lonnet::coursedescription($ENV{'request.course.id'});      my %parmhash=&Apache::lonnet::coursedescription($ENV{'request.course.id'});
 #    $r->print('<br /> START '.$ENV{'request.course.fn'}.' FINISH <br />');  
 #    my $key;   
 #    foreach $key (keys %parmhash) {  
 # $r->print(' '.$key.'->'.$parmhash{$key}.'<-<br />');  
 #    }  
 #    return OK;  
           
   
     &output_data($r,$helper,\%parmhash);      &output_data($r,$helper,\%parmhash);
Line 906  sub printHelper { Line 912  sub printHelper {
         $subdir = &Apache::lonnet::filelocation("", $url);          $subdir = &Apache::lonnet::filelocation("", $url);
     }      }
   
       my $userCanSeeHidden = Apache::lonnavmaps::advancedUser();
   
     Apache::lonhelper::registerHelperTags();      Apache::lonhelper::registerHelperTags();
   
     # "Delete everything after the last slash."      # "Delete everything after the last slash."
Line 913  sub printHelper { Line 921  sub printHelper {
     if (not $helper->{VARS}->{'construction'}) {      if (not $helper->{VARS}->{'construction'}) {
  $subdir='/home/httpd/html/res/'.$subdir;   $subdir='/home/httpd/html/res/'.$subdir;
     }      }
       # "Remove all duplicate slashes."
       $subdir =~ s|/+|/|g;
   
     # What can be printed is a very dynamic decision based on      # What can be printed is a very dynamic decision based on
     # lots of factors. So we need to dynamically build this list.      # lots of factors. So we need to dynamically build this list.
Line 941  sub printHelper { Line 951  sub printHelper {
         # Allow all resources from sequence          # Allow all resources from sequence
         push @{$printChoices}, ["Everything (problem(s), page(s), html/xml file(s)) from <b>$sequenceTitle</b>", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];          push @{$printChoices}, ["Everything (problem(s), page(s), html/xml file(s)) from <b>$sequenceTitle</b>", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
   
         my $isProblem = '$res->is_problem();';          my $isProblem = '$res->is_problem()';
    $isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden;
         my $isProblemOrMap = '$res->is_problem() || $res->is_map()';          my $isProblemOrMap = '$res->is_problem() || $res->is_map()';
         my $isNotMap = '!$res->is_map();';          my $isNotMap = '!$res->is_map()';
         my $symb = '$res->symb();';   $isNotMap .= ' && !$res->randomout()' if !$userCanSeeHidden;
           my $symb = '$res->symb()';
         my $helperFragment = <<HELPERFRAGMENT;          my $helperFragment = <<HELPERFRAGMENT;
   <state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print">    <state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print">
     <message>(mark them then click "next" button) <br /></message>      <message>(mark them then click "next" button) <br /></message>
     <resource variable="RESOURCES" multichoice="1" toponly='1'>      <resource variable="RESOURCES" multichoice="1" toponly='1'>
       <nextstate>PAGESIZE</nextstate>        <nextstate>PAGESIZE</nextstate>
       <filterfunc>return $isProblem</filterfunc>        <filterfunc>return $isProblem;</filterfunc>
       <mapurl>$map</mapurl>        <mapurl>$map</mapurl>
       <valuefunc>return $symb</valuefunc>        <valuefunc>return $symb;</valuefunc>
       </resource>        </resource>
     </state>      </state>
   
Line 962  sub printHelper { Line 974  sub printHelper {
       <nextstate>PAGESIZE</nextstate>        <nextstate>PAGESIZE</nextstate>
       <filterfunc>return $isNotMap;</filterfunc>        <filterfunc>return $isNotMap;</filterfunc>
       <mapurl>$map</mapurl>        <mapurl>$map</mapurl>
       <valuefunc>return $symb</valuefunc>        <valuefunc>return $symb;</valuefunc>
       </resource>        </resource>
     </state>      </state>
 HELPERFRAGMENT  HELPERFRAGMENT
Line 976  HELPERFRAGMENT Line 988  HELPERFRAGMENT
         push @{$printChoices}, ['<b>Problems</b> in this course', 'all_problems', 'ALL_PROBLEMS'];          push @{$printChoices}, ['<b>Problems</b> in this course', 'all_problems', 'ALL_PROBLEMS'];
         push @{$printChoices}, ["Problems from <b>$sequenceTitle</b> for selected students", 'problems_for_students', 'CHOOSE_STUDENTS'];          push @{$printChoices}, ["Problems from <b>$sequenceTitle</b> for selected students", 'problems_for_students', 'CHOOSE_STUDENTS'];
   
         my $isProblem = '$res->is_problem();';          my $isProblem = '$res->is_problem()';
         my $isProblemOrMap = '$res->is_problem() || $res->is_map()';   $isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden;
         my $symb = '$res->symb();';          my $isProblemOrMap = '($res->is_problem() || $res->is_map())';
    $isProblemOrMap .= ' && !$res->randomout()' if !$userCanSeeHidden;
           my $symb = '$res->symb()';
         &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS);          &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS);
   <state name="ALL_PROBLEMS" title="Select Problem(s) to print">    <state name="ALL_PROBLEMS" title="Select Problem(s) to print">
     <message>(mark them then click "next" button) <br /></message>      <message>(mark them then click "next" button) <br /></message>
     <resource variable="RESOURCES" multichoice="1" suppressEmptySequences='1'>      <resource variable="RESOURCES" multichoice="1" suppressEmptySequences='1'>
       <nextstate>PAGESIZE</nextstate>        <nextstate>PAGESIZE</nextstate>
       <filterfunc>return $isProblemOrMap</filterfunc>        <filterfunc>return $isProblemOrMap;</filterfunc>
       <choicefunc>return $isProblem</choicefunc>        <choicefunc>return $isProblem;</choicefunc>
       <valuefunc>return $symb</valuefunc>        <valuefunc>return $symb;</valuefunc>
       </resource>        </resource>
     </state>      </state>
   
   <state name="CHOOSE_STUDENTS" title="Choose Students whose assignments you want to print">    <state name="CHOOSE_STUDENTS" title="Choose Students whose assignments you want to print">
     <message>(do not forget to select assignment itself - make another selection below) <br /></message>  
     <student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" />      <student multichoice='1' variable="STUDENTS" nextstate="PAGESIZE" />
     <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">      <resource variable="RESOURCES" multichoice="1">
Line 1001  HELPERFRAGMENT Line 1014  HELPERFRAGMENT
       </resource>        </resource>
     <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 (add a pagefeed after each assignment)</choice>        <choice computer='0'>Start each student\'s assignment on a new page (add a pagefeed after each assignment)</choice>
       <choice computer='1'>Add one empty page after each student's assignment</choice>        <choice computer='1'>Add one empty page after each student\'s assignment</choice>
       <choice computer='2'>Add two empty pages after each student's assignment</choice>        <choice computer='2'>Add two empty pages after each student\'s assignment</choice>
       </choices>        </choices>
     </state>      </state>
 CHOOSE_STUDENTS  CHOOSE_STUDENTS
     }      }
   
     # 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'}) {          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'}) {    
         push @{$printChoices}, ["Problems from current subdirectory <b>$subdir</b>", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];          push @{$printChoices}, ["Problems from current subdirectory <b>$subdir</b>", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];
                   
         my $f = '$filename';          my $f = '$filename';

Removed from v.1.188  
changed lines
  Added in v.1.194


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