--- loncom/interface/lonprintout.pm 2003/08/02 13:57:05 1.208 +++ loncom/interface/lonprintout.pm 2003/08/20 18:34:14 1.221 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.208 2003/08/02 13:57:05 www Exp $ +# $Id: lonprintout.pm,v 1.221 2003/08/20 18:34:14 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -465,40 +465,49 @@ sub page_format { sub get_name { my ($uname,$udom)=@_; if (!defined($uname)) { $uname=$ENV{'user.name'}; } - if (!defined($udom)) { $uname=$ENV{'user.domain'}; } + if (!defined($udom)) { $udom=$ENV{'user.domain'}; } my $plainname=&Apache::loncommon::plainname($uname,$udom); - if ($plainname=~/^\s*$/) { $plainname=$uname; } - return &Apache::lonxml::latex_special_symbols($plainname,undef,undef, - 'header'); + if ($plainname=~/^\s*$/) { $plainname=$uname.'@'.$udom; } + $plainname=&Apache::lonxml::latex_special_symbols($plainname,'header'); + return $plainname; } +sub get_course { + my $courseidinfo; + if (defined($ENV{'request.course.id'})) { + $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'header'); + } + return $courseidinfo; +} sub page_format_transformation { - my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_; + my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents,$indexlist) = @_; my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin); - $assignment=~s/_/ /g; - if ($numberofcolumns != 1) { - ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin); - } else { - ($textwidth,$textheight,$oddoffset,$evenoffset) = ($ENV{'form.width'},$ENV{'form.height'},$ENV{'form.leftmargin'},$ENV{'form.leftmargin'}); - } - my $name = &get_name(); - if ($name =~ /^\s*$/) { - $name=&Apache::lonxml::latex_special_symbols($ENV{'user.name'},undef, - undef,'header'); + $assignment=~s/_/ /g; + if ($numberofcolumns != 1) { + ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin); + } else { + ($textwidth,$textheight,$oddoffset,$evenoffset) = ($ENV{'form.width'},$ENV{'form.height'},$ENV{'form.leftmargin'},$ENV{'form.leftmargin'}); } - my $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'','','header'); + my $name = &get_name(); + my $courseidinfo = &get_course(); + if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } if ($layout eq 'album') { my $topmargintoinsert = ''; if ($topmargin ne '0') {$topmargintoinsert='\setlength{\topmargin}{'.$topmargin.'}';} - $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\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}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}} \\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1} /; } elsif ($layout eq 'book') { 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 { $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 /; } } + if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;} + if ($indexlist eq 'yes') { + $text=~s/(\\begin{document})/\\makeindex $1/; + $text=~s/(\\end{document})/\\strut\\\\\\strut\\printindex $1/; + } return $text; } @@ -573,6 +582,35 @@ sub latex_corrections { } +sub index_table { + my $currentURL = shift; + my $insex_string=''; + $currentURL=~s/\.([^\/+])$/\.$1\.meta/; + $insex_string=&Apache::lonnet::metadata($currentURL,'keywords'); + return $insex_string; +} + + +sub IndexCreation { + my ($texversion,$currentURL)=@_; + my @key_words=split(/,/,&index_table($currentURL)); + my $chunk=''; + my $st=index $texversion,'\addcontentsline{toc}{subsection}{'; + if ($st>0) { + for (my $i=0;$i<3;$i++) {$st=(index $texversion,'}',$st+1);} + $chunk=substr($texversion,0,$st+1); + substr($texversion,0,$st+1)=' '; + } + foreach my $key_word (@key_words) { + if ($key_word=~/\S+/) { + $texversion=~s/\b($key_word)\b/$1 \\index{$key_word} /i; + } + } + if ($st>0) {substr($texversion,0,1)=$chunk;} + return $texversion; +} + + sub output_data { my ($r,$helper,$rparmhash) = @_; my %parmhash = %$rparmhash; @@ -646,6 +684,13 @@ ENDPART my $answer=&Apache::lonnet::ssi($currentURL,%form); $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } + if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { + $texversion=&IndexCreation($texversion,$currentURL); + } + if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URL'} eq 'yes') { + $texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$currentURL| \\strut\\\\\\strut /; + + } $result .= $texversion; if ($currentURL=~m/\.page\s*$/) { ($result,$number_of_columns) = &page_cleanup($result); @@ -709,16 +754,15 @@ ENDPART my $answer=&Apache::lonnet::ssi($urlp,%form); $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } -# $result .= $texversion; + if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { + $texversion=&IndexCreation($texversion,$urlp); + } 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'); + my ($name,$courseidinfo) = &get_name; + $courseidinfo = &get_course(); + if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } $prevassignment=$assignment; - $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm '; + $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'; @@ -770,13 +814,15 @@ ENDPART $flag_latex_header_remove = 'YES'; } } - my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; + my $courseidinfo = &get_course(); + if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } + my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); if ($current_output=~/\\documentclass/) { - $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$helper->{VARS}->{'assignment'}}}\\vskip 3 mm /; + $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}}$courseidinfo \\hfill \\thepage \\\\ \\textit{$currentassignment}}\\vskip 3 mm /; } else { my $blanspages = ''; for (my $j=0;$j<$helper->{'VARS'}->{'EMPTY_PAGES'};$j++) {$blanspages.='\clearpage\strut\clearpage';} - $current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage '.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$helper->{VARS}->{'assignment'}.'}}} \vskip -5 mm '.$current_output; + $current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage '.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$currentassignment.'}}} \vskip -5 mm '.$current_output; } $result .= $current_output; &Apache::lonnet::delenv('form.counter'); @@ -841,6 +887,13 @@ ENDPART } else { $texversion =~ s/\\end{document}//; } + if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { + $texversion=&IndexCreation($texversion,$urlp); + } + if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URL'} eq 'yes') { + $texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$urlp| \\strut\\\\\\strut /; + + } $result .= $texversion; } $flag_latex_header_remove = 'YES'; @@ -849,7 +902,7 @@ ENDPART $result .= '\end{document}'; } #-------------------------------------------------------- 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'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'}); $result = &latex_corrections($number_of_columns,$result); #changes page's parameters for the one column output if ($numberofcolumns == 1) { @@ -858,6 +911,10 @@ ENDPART $result =~ s/\\evensidemargin = -0\.57in/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; $result =~ s/\\oddsidemargin = -0\.57in/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; } + if ($helper->{'VARS'}->{'TABLE_CONTENTS'} eq 'yes') {$selectionmade*=10;} + if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { + if ($selectionmade<10) {$selectionmade*=100;} else {$selectionmade*=10;} + } #-- writing .tex file in prtspool my $temp_file; my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout_".time."_".rand(10000000).".tex"; @@ -867,7 +924,6 @@ ENDPART } print $temp_file $result; -# $r->print(< @@ -1155,7 +1211,7 @@ CHOOSE_FROM_SUBDIR if (($ENV{'request.role.adv'} and &Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) or ($helper->{VARS}->{'construction'} eq '1')) { $paramHash = Apache::lonhelper::getParamHash(); - $paramHash->{MESSAGE_TEXT} = "
Next option is available only for advanced users:
"; + $paramHash->{MESSAGE_TEXT} = "
Next four options are available only for advanced users: "; Apache::lonhelper::message->new(); $paramHash = Apache::lonhelper::getParamHash(); $paramHash->{'variable'} = 'ANSWER_TYPE'; @@ -1163,11 +1219,12 @@ CHOOSE_FROM_SUBDIR $paramHash->{CHOICES} = [ ['Print without answer', 'yes'], ['Print with answers', 'no'] ]; - Apache::lonhelper::choices->new(); + Apache::lonhelper::dropdown->new(); } + if ($ENV{'request.role.adv'}) { $paramHash = Apache::lonhelper::getParamHash(); - $paramHash->{MESSAGE_TEXT} = "
Another option available only for advanced users:
"; + $paramHash->{MESSAGE_TEXT} = "
 "; Apache::lonhelper::message->new(); $paramHash = Apache::lonhelper::getParamHash(); $paramHash->{'variable'} = 'LATEX_TYPE'; @@ -1181,8 +1238,49 @@ CHOOSE_FROM_SUBDIR ['Print in LaTeX batchmode', 'batchmode'], ['Print in standard LaTeX mode', 'standard'] ]; } - Apache::lonhelper::choices->new(); - } + Apache::lonhelper::dropdown->new(); + + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{MESSAGE_TEXT} = "
 "; + Apache::lonhelper::message->new(); + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{'variable'} = 'TABLE_CONTENTS'; + $helper->declareVar('TABLE_CONTENTS'); + $paramHash->{CHOICES} = [ + ['Print without Table of Contents', 'no'], + ['Print with Table of Contents', 'yes'] ]; + Apache::lonhelper::dropdown->new(); + + if (not $helper->{VARS}->{'construction'}) { + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{MESSAGE_TEXT} = "
 "; + Apache::lonhelper::message->new(); + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{'variable'} = 'TABLE_INDEX'; + $helper->declareVar('TABLE_INDEX'); + $paramHash->{CHOICES} = [ + ['Print without Index', 'no'], + ['Print with Index', 'yes'] ]; + Apache::lonhelper::dropdown->new(); + } + + if ($helper->{VARS}->{'construction'}) { + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{MESSAGE_TEXT} = "
 "; + Apache::lonhelper::message->new(); + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{'variable'} = 'CONSTR_RESOURSE_URL'; + $helper->declareVar('CONSTR_RESOURSE_URL'); + $paramHash->{CHOICES} = [ + ['Print without URL', 'no'], + ['Print with UTL', 'yes'] ]; + Apache::lonhelper::dropdown->new(); + } + + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{MESSAGE_TEXT} = "
"; + Apache::lonhelper::message->new(); + } Apache::lonprintout::page_format_state->new("FORMAT");