--- loncom/interface/lonprintout.pm 2008/08/25 10:16:27 1.537
+++ loncom/interface/lonprintout.pm 2009/05/02 22:16:09 1.552
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.537 2008/08/25 10:16:27 foxr Exp $
+# $Id: lonprintout.pm,v 1.552 2009/05/02 22:16:09 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -40,6 +40,9 @@ use Apache::lonnavmaps;
use Apache::admannotations;
use Apache::lonenc;
use Apache::entities;
+use Apache::londefdef;
+
+use File::Basename;
use HTTP::Response;
@@ -111,6 +114,65 @@ sub annotate {
return $result;
}
+# include_pdf - PDF files are included into the
+# output as follows:
+# - The PDF, if necessary, is replicated.
+# - The PDF is added to the list of files to convert to postscript (along with the images).
+# - The LaTeX is added to include the final converted postscript in the file as an included
+# job. The assumption is that the includedpsheader.ps header will be included.
+#
+# Parameters:
+# pdf_uri - URI of the PDF file to include.
+#
+# Returns:
+# The LaTeX to include.
+#
+# Assumptions:
+# The uri is actually a PDF file
+# The postscript will have the includepsheader.ps included.
+#
+#
+sub include_pdf {
+ my ($pdf_uri) = @_;
+
+ # Where is the file? If not local we'll need to repcopy it:'
+
+ my $file = &Apache::lonnet::filelocation('', $pdf_uri);
+ if (! -e $file) {
+ &Apache::lonnet::repcopy($file);
+ $file = &Apache::lonnet::filelocation('',$pdf_uri);
+ }
+
+ # The file isn ow replicated locally.. or it did not exist in the first place
+ # (unlikely). If it did exist, add the pdf to the set of files/images that
+ # need tob e converted for this print job:
+
+ $file =~ s|(.*)/res/|/home/httpd/html/res/|;
+
+ open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat");
+ print FILE ("$file\n");
+ close (FILE);
+
+ # Construct the special to put out. To do this we need to get the
+ # resulting filename after conversion. The file will have the same name
+ # but will be in the user's spool directory with converted images.
+
+ my $dirname = "/home/httpd/prtspool/$env{'user.name'}/";
+ my ( $base, $path, $ext) = &fileparse($file, '.pdf');
+# my $destname = $dirname.'/'.$base.'.eps'; # Not really an eps but easier in printout.pl
+ $base =~ s/ /\_/g;
+
+
+ my $output = &print_latex_header();
+ $output .= '\special{ps: _begin_job_ ('
+ .$base.'.pdf.eps'.
+ ')run _end_job_}';
+
+ return $output;
+
+
+}
+
#
# ssi_with_retries - Does the server side include of a resource.
@@ -280,6 +342,13 @@ sub format_page_header {
# to \% else LaTeX will think they are comments and terminate
# the line.. which is bad!!!
+ # If the user has role author, $course and $assignment are empty so
+ # there is '\\ \\ ' in the page header. That's cause a error in LaTeX
+ if($format =~ /\\\\\s\\\\\s/) {
+ #TODO find sensible caption for page header
+ my $testPrintout = '\\\\'.&mt('Construction Space').' \\\\'.&mt('Test-Printout ');
+ $format =~ s/\\\\\s\\\\\s/$testPrintout/;
+ }
return $format;
@@ -385,8 +454,8 @@ sub is_valid_alpha_code {
sub is_code_valid {
my ($code_value, $code_option) = @_;
my ($code_type, $code_length) = ('letter', 6); # defaults.
- open(FG, $Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');
- foreach my $line (
';
+ my $ext_text = 'pdf' ? &mt('PDF File'):&mt('Zip File');
+ my $result=&Apache::loncommon::start_data_table_row()
+ .''
+ .''.$ext_text.''
+ .' '
+ .''.&Apache::lonlocal::locallocaltime($cctime).' '
+ .''.$csize.' '
+ .&Apache::loncommon::end_data_table_row();
if ($ext eq 'pdf') { $pdf_result .= $result; }
if ($ext eq 'zip') { $zip_result .= $result; }
}
+ if ($zip_result || $pdf_result) {
+ $r->print('
');
+ }
if ($zip_result) {
- $r->print(''.&mt('Recently generated printout zip files')."
\n"
- .$zip_result);
+ $r->print(''.&mt('Recently generated printout zip files')."
\n"
+ .&Apache::loncommon::start_data_table()
+ .&Apache::loncommon::start_data_table_header_row()
+ .''.&mt('Download').' '
+ .''.&mt('Creation Date').' '
+ .''.&mt('File Size (Bytes)').' '
+ .&Apache::loncommon::end_data_table_header_row()
+ .$zip_result
+ .&Apache::loncommon::end_data_table()
+ );
}
if ($pdf_result) {
- $r->print(''.&mt('Recently generated printouts')."
\n"
- .$pdf_result);
+ $r->print(''.&mt('Recently generated printouts')."
\n"
+ .&Apache::loncommon::start_data_table()
+ .&Apache::loncommon::start_data_table_header_row()
+ .''.&mt('Download').' '
+ .''.&mt('Creation Date').' '
+ .''.&mt('File Size (Bytes)').' '
+ .&Apache::loncommon::end_data_table_header_row()
+ .$pdf_result
+ .&Apache::loncommon::end_data_table()
+ );
}
}
@@ -1412,7 +1472,21 @@ sub print_construction_sequence {
$helper, %form,
$LaTeXwidth);
}
- }
+ }
+ elsif ($urlp =~ /\.pdf$/i) {
+ my $texversion;
+ if ($member != 0) {
+ $texversion .= '\cleardoublepage';
+ }
+
+ $texversion .= &include_pdf($urlp);
+ $texversion = &latex_header_footer_remove($texversion);
+ if ($member != $#order) {
+ $texversion .= '\\ \cleardoublepage';
+ }
+
+ $result .= $texversion;
+ }
}
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
return $result;
@@ -1474,7 +1548,7 @@ ENDPART
my ($result,$selectionmade) = ('','');
my $number_of_columns = 1; #used only for pages to determine the width of the cell
my @temporary_array=split /\|/,$format_from_helper;
- my ($laystyle,$numberofcolumns,$papersize)=@temporary_array;
+ my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array;
if ($laystyle eq 'L') {
$laystyle='album';
} else {
@@ -1495,6 +1569,7 @@ ENDPART
my %form;
$form{'grade_target'} = 'tex';
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
+ $form{'pdfFormFields'} = $pdfFormFields;
# If form.showallfoils is set, then request all foils be shown:
# privilege will be enforced both by not allowing the
@@ -1511,7 +1586,7 @@ ENDPART
&Apache::lonnet::appenv({'construct.style' =>
$helper->{'VARS'}->{'style_file'}});
} elsif ($env{'construct.style'}) {
- &Apache::lonnet::delenv('construct\\.style');
+ &Apache::lonnet::delenv('construct.style');
}
@@ -1602,6 +1677,7 @@ ENDPART
+
}
# Print annotations.
@@ -1627,7 +1703,7 @@ ENDPART
&& $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') {
#printing content of sequence from the construction space
$currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;
- $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+# $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
$result .= &print_construction_sequence($currentURL, $helper, %form,
$LaTeXwidth);
$result .= '\end{document}';
@@ -1645,7 +1721,7 @@ ENDPART
$texversion =~ s/(\\end{document})/$annotation$1/;
}
$result .= $texversion;
- } elsif ($cleanURL =~/.tex$/) {
+ } elsif ($cleanURL =~/\.tex$/) {
# For this sort of print of a single LaTeX file,
# We can just print the LaTeX file as it is uninterpreted in any way:
#
@@ -1658,6 +1734,9 @@ ENDPART
$do_postprocessing = 0; # Don't massage the result.
+ } elsif ($cleanURL =~ /\.pdf$/i) {
+ $result .= &include_pdf($cleanURL);
+ $result .= '\end{document}';
} else {
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'},
$helper->{'VARS'}->{'symb'});
@@ -1751,6 +1830,7 @@ ENDPART
} else {
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+ $texversion =~ s/\\begin{document}//;
my $title = &Apache::lonnet::gettitle($master_seq[$i]);
$title = &Apache::lonxml::latex_special_symbols($title);
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
@@ -1786,6 +1866,7 @@ ENDPART
$assignment,
$courseidinfo,
$name);
+
if ($numberofcolumns eq '1') {
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm ';
} else {
@@ -1806,11 +1887,28 @@ ENDPART
if ($flag_latex_header_remove ne 'NO') {
$texversion = &latex_header_footer_remove($texversion);
- } else {
+ } else {
$texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/;
}
$result .= $texversion;
$flag_latex_header_remove = 'YES';
+ } elsif ($urlp=~ /\.pdf$/i) {
+ if ($i > 0) {
+ $result .= '\cleardoublepage';
+ }
+ $result .= &include_pdf($urlp);
+ if ($i != $#master_seq) {
+ if ($numberofcolumns eq '1') {
+ $result .= '\newpage';
+ } else {
+ # the \\'s seem to be needed to let LaTeX know there's something
+ # on the page since LaTeX seems to not like to clear an empty page.
+ #
+ $result .= '\\ \cleardoublepage';
+ }
+ }
+ $flag_latex_header_remove = 'YES';
+
} else {
$texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'},
$master_seq[$i]);
@@ -1822,7 +1920,9 @@ ENDPART
$result .= $texversion;
$flag_latex_header_remove = 'YES';
}
- if (&Apache::loncommon::connection_aborted($r)) { last; }
+ if (&Apache::loncommon::connection_aborted($r)) {
+ last;
+ }
}
&Apache::lonxml::clear_problem_counter();
if ($flag_page_in_sequence eq 'YES') {
@@ -1876,7 +1976,7 @@ ENDPART
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
#loop over students
- my $flag_latex_header_remove = 'NO';
+ my $flag_latex_header_remove = 'NO';
my %moreenv;
$moreenv{'instructor_comments'}='hide';
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
@@ -1934,9 +2034,9 @@ ENDPART
my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'};
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};
- open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');
+ my @lines = &Apache::grades::get_scantronformat_file();
my ($code_type,$code_length)=('letter',6);
- foreach my $line (
");
+ &addMessage(&Apache::lonhtmlcommon::end_pick_box());
}
Apache::lonprintout::page_format_state->new("FORMAT");
@@ -3386,23 +3527,25 @@ sub render {
my $PaperType=&mt('Paper type');
my $landscape=&mt('Landscape');
my $portrait=&mt('Portrait');
- $result .= < ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
$startedTable = 1;
}
@@ -3145,10 +3263,12 @@ CHOOSE_FROM_ANY_SEQUENCE
": ".
- ': ");
+ &addMessage('
'
+ .''.&mt('Print Options').'
'
+ .&Apache::lonhtmlcommon::start_pick_box()
+# .&Apache::lonhtmlcommon::row_headline()
+# .''.&mt('Print Options').'
'
+# .&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'ANSWER_TYPE';
$helper->declareVar('ANSWER_TYPE');
@@ -3133,7 +3251,7 @@ CHOOSE_FROM_ANY_SEQUENCE
['Only Answers', 'only']
];
Apache::lonhelper::dropdown->new();
- addMessage("");
$startedTable = 1;
} else {
- addMessage(" ".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
}
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'LATEX_TYPE';
@@ -3164,10 +3284,13 @@ CHOOSE_FROM_ANY_SEQUENCE
}
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
if (not $helper->{VARS}->{'construction'}) {
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'TABLE_CONTENTS';
$helper->declareVar('TABLE_CONTENTS');
@@ -3175,13 +3298,15 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes'] ];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'TABLE_INDEX';
$helper->declareVar('TABLE_INDEX');
@@ -3189,11 +3314,13 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes'] ];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
# Prompt for printing annotations too.
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS';
$helper->declareVar('PRINT_DISCUSSIONS');
@@ -3201,14 +3328,16 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes'] ];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = "PRINT_ANNOTATIONS";
$helper->declareVar("PRINT_ANNOTATIONS");
@@ -3216,16 +3345,16 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes']];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure(1));
}
if ($helper->{'VARS'}->{'construction'}) {
@@ -3234,32 +3363,44 @@ CHOOSE_FROM_ANY_SEQUENCE
my $stylefiletext=&mt("Use style file");
my $selectfiletext=&mt("Select style file");
- my $xmlfrag .= <<"RNDSEED";
- ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(&mt('Foils')));
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'multichoice'} = "true";
$paramHash->{'allowempty'} = "true";
$paramHash->{'variable'} = "showallfoils";
$paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ];
Apache::lonhelper::choices->new();
- addMessage("
- :
-
-
- :
-
+ my $xmlfrag .= '
+ ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure(1));
- }
+ }
}
if ($startedTable) {
- addMessage("Problem Type: ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(&mt('Problem Type')));
#
# Initial value from construction space:
#
@@ -3278,16 +3419,16 @@ RNDSEED
PROBTYPE
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag);
- addMessage(" '.$PageLayout.' '
+ .''.$NumberOfColumns.' '
+ .''.$PaperType.' '
+ .''.$pdfFormLabel.' '
+ .&Apache::loncommon::end_data_table_header_row()
+ .&Apache::loncommon::start_data_table_row()
+ .''
+ .' ';
-
'
+ .''
+ .'
-
-
";
+ $result .= <
+
+
-
- $PageLayout
- $NumberOfColumns
- $PaperType
-
-
-
-
-
-
-
+
+HTML
+ $result.=&Apache::loncommon::end_data_table_row()
+ .&Apache::loncommon::end_data_table();
+
return $result;
}
@@ -3442,7 +3597,7 @@ sub postprocess {
my $helper = Apache::lonhelper->getHelper();
$helper->{VARS}->{$var} =
$env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' .
- $env{"form.$var.paper"};
+ $env{"form.$var.paper"} . '|' . $env{"form.$var.pdfFormFields"};
return 1;
}
@@ -3554,50 +3709,36 @@ sub render {
} else {
$size{'margin'} += 2.54;
}
- my %text = ('format' => 'How should each column be formatted?',
- 'width' => 'Width:',
- 'height' => 'Height:',
- 'margin' => 'Left Margin:',);
- %text = &Apache::lonlocal::texthash(%text);
-
- $result .= <
$text{'width'} | -- |
- |
-
$text{'height'} | -- |
- |
-
$text{'margin'} | -- |
- |
-
'.$lt{'format'}.'
' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'width'}) + .'' + .'Hint: Some instructors like to leave scratch space for the student by + # making the width much smaller than the width of the page.
return $result; }