--- loncom/interface/lonprintout.pm 2010/04/01 23:38:26 1.568.2.4
+++ loncom/interface/lonprintout.pm 2010/12/05 17:25:10 1.568.4.3
@@ -2,7 +2,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.568.2.4 2010/04/01 23:38:26 raeburn Exp $
+# $Id: lonprintout.pm,v 1.568.4.3 2010/12/05 17:25:10 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -494,12 +494,15 @@ sub printf_style_subst {
# %a - Assignment name.
# %c - Course name.
# %n - Student name.
+# %s - The section if it is supplied.
#
sub format_page_header {
- my ($width, $format, $assignment, $course, $student) = @_;
+ my ($width, $format, $assignment, $course, $student, $section) = @_;
+
+
$width = &recalcto_mm($width); # Get width in mm.
- my $chars_per_line = int($width/2); # Character/textline.
+ my $chars_per_line = int($width/1.6); # Character/textline.
# Default format?
@@ -515,36 +518,58 @@ sub format_page_header {
# - Allow the assignment to be 2 lines (wrapped).
#
- my $firstline = "$student $course";
- if (length($firstline) > $chars_per_line) {
- my $lastchar = $chars_per_line - length($student) - 1;
- if ($lastchar > 0) {
- $course = substr($course, 0, $lastchar);
- } else { # Nothing left of course:
- $course = '';
- }
- }
- if (length($assignment) > $chars_per_line) {
- $assignment = substr($assignment, 0, $chars_per_line);
- }
+
- $format = "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}";
+ my $name_length = int($chars_per_line *3 /4);
+ my $sec_length = int($chars_per_line / 5);
+
+ $format = "%$name_length".'n';
+
+ if ($section) {
+ $format .= ' - Sec: '."%$sec_length".'s';
+ }
+
+ $format .= '\\\\%c \\\\ %a';
+
- } else {
- # An open question is how to handle long user formatted page headers...
- # A possible future is to support e.g. %na so that the user can control
- # the truncation of the elements that can appear in the header.
- #
- $format = &printf_style_subst("a", $format, $assignment);
- $format = &printf_style_subst("c", $format, $course);
- $format = &printf_style_subst("n", $format, $student);
-
- # If the user put %'s in the format string, they must be escaped
- # to \% else LaTeX will think they are comments and terminate
- # the line.. which is bad!!!
}
+ # An open question is how to handle long user formatted page headers...
+ # A possible future is to support e.g. %na so that the user can control
+ # the truncation of the elements that can appear in the header.
+ #
+ $format = &printf_style_subst("a", $format, $assignment);
+ $format = &printf_style_subst("c", $format, $course);
+ $format = &printf_style_subst("n", $format, $student);
+ $format = &printf_style_subst("s", $format, $section);
+
+ # If the user put %'s in the format string, they must be escaped
+ # 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/;
+ }
+ #
+ # We're going to trust LaTeX to break lines appropriately, but
+ # we'll truncate anything that's more than 3 lines worth of
+ # text. This is also assuming (which will probably end badly)
+ # nobody's going to embed LaTeX control sequences in the title
+ # header or rather that those control sequences won't get broken
+ # by the stuff below.
+ #
+ my $total_length = 3*$chars_per_line;
+ if (length($format) > $total_length) {
+ $format = substr($format, 0, $total_length);
+ }
+
+
return $format;
+
}
#
@@ -1240,6 +1265,8 @@ sub get_course {
my $courseidinfo;
if (defined($env{'request.course.id'})) {
$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header');
+ my $sec = $env{'request.course.sec'};
+
}
return $courseidinfo;
}
@@ -1262,7 +1289,6 @@ sub page_format_transformation {
my $name = &get_name();
my $courseidinfo = &get_course();
- if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
my $header_text = $parmhash{'print_header_format'};
$header_text = &format_page_header($textwidth, $header_text, $assignment,
$courseidinfo, $name);
@@ -1283,7 +1309,7 @@ sub page_format_transformation {
$text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /;
}
if ($papersize eq 'a4') {
- $text =~ s/(\\begin{document})/$1\\\\special\{papersize=210mm,297mm\}/;
+ $text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/;
}
}
if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;}
@@ -1555,7 +1581,7 @@ sub print_page_in_course {
$form{'grade_target'} = 'tex';
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
- $form{'pdfFormFields'} = 'no';
+ $form{'pdfFormFiels'} = $pdfFormFields; #
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'};
$form{'problem_split'}=$parmhash{'problem_stream_switch'};
@@ -1864,7 +1890,7 @@ sub print_construction_sequence {
}
sub output_data {
- my ($r,$helper,$rparmhash) = @_;
+ my ($r,$helper,$rparmhash,$is_custom) = @_;
my %parmhash = %$rparmhash;
$ssi_error = 0; # This will be set nonzero by failing ssi's.
$resources_printed = '';
@@ -1905,6 +1931,11 @@ ENDPART
{'href' => '',
'text' => 'Preparing Printout'}];
+ if ($is_custom) {
+ $brcrum = [{'href' => '',
+ 'text' => 'Preparing Printout'}];
+ }
+
my $start_page = &Apache::loncommon::start_page('Preparing Printout',
$js,
{'bread_crumbs' => $brcrum,});
@@ -1946,7 +1977,7 @@ ENDPART
my %form;
$form{'grade_target'} = 'tex';
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
- $form{'pdfFormFields'} = 'no';
+ $form{'pdfFormFields'} = $pdfFormFields;
# If form.showallfoils is set, then request all foils be shown:
# privilege will be enforced both by not allowing the
@@ -1966,7 +1997,6 @@ ENDPART
&Apache::lonnet::delenv('construct.style');
}
-
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {
#-- single document - problem, page, html, xml, ...
my ($currentURL,$cleanURL);
@@ -2256,7 +2286,6 @@ ENDPART
if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
my $name = &get_name();
my $courseidinfo = &get_course();
- if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
$prevassignment=$assignment;
my $header_text = $parmhash{'print_header_format'};
$header_text = &format_page_header($textwidth, $header_text,
@@ -2879,12 +2908,10 @@ sub print_resources {
my $courseidinfo = &get_course();
- if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
- if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection}
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
my $header_line =
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'},
- $currentassignment, $courseidinfo, $fullname);
+ $currentassignment, $courseidinfo, $fullname, $usersection);
my $header_start = ($columns_in_format == 1) ? '\lhead'
: '\fancyhead[LO]';
$header_line = $header_start.'{'.$header_line.'}';
@@ -2915,17 +2942,112 @@ sub handler {
&init_perm();
+ my ($helper,$is_custom);
+ if ((&Apache::loncommon::needs_gci_custom()) &&
+ ($env{'request.role.domain'} =~ /^\w+citest$/)) {
+ if ($r->header_only) {
+ if ($env{'browser.mathml'}) {
+ &Apache::loncommon::content_type($r,'text/xml');
+ } else {
+ &Apache::loncommon::content_type($r,'text/html');
+ }
+ $r->send_http_header;
+ return OK;
+ }
+ # Send header, nocache
+ if ($env{'browser.mathml'}) {
+ &Apache::loncommon::content_type($r,'text/xml');
+ } else {
+ &Apache::loncommon::content_type($r,'text/html');
+ }
+ &Apache::loncommon::no_cache($r);
+ $r->send_http_header;
+ $r->rflush();
-
- my $helper = printHelper($r);
- if (!ref($helper)) {
- return $helper;
+ my ($navmap_error,$resources,@master_seq);
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ if (!defined($navmap)) {
+ my $brcrum = [{'href' => '',
+ 'text' => 'Preparing Printout'}];
+
+ my $start_page =
+ &Apache::loncommon::start_page('Preparing Printout','',
+ {'bread_crumbs' => $brcrum,});
+ my $endpage = &Apache::loncommon::end_page();
+
+ my $navmap_error = ''.&mt('An error occurred retrieving information about the course.').'
'.&mt('It is recommended that you re-select the concept test by clicking on the "Review Questions" tab and then clicking on the "Manage Tests" tab again.').'';
+ $r->print($start_page.$navmap_error.$endpage);
+ return OK;
+ } else {
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $sequence = &Apache::loncommon::get_citest_map($cdom);
+ my @allres;
+ if ($sequence) {
+ @allres=$navmap->retrieveResources('/uploaded/'.$cdom.'/'.$cnum.'/'.$sequence);
+ foreach my $resource (@allres) {
+ next if ($resource->is_map());
+ my $symb = $resource->symb();
+ push(@master_seq,$symb);
+ }
+ $resources = join('|||',@master_seq);
+ my ($sequence,$middle_thingy,$urlp) =
+ &Apache::lonnet::decode_symb($master_seq[0]);
+
+ my $assignment = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header');
+
+ $helper = {
+ VARS => {
+ ANON_CODE_STORAGE_NAME => '',
+ ANSWER_TYPE => 'yes',
+ CODE_OPTION => '',
+ EMPTY_PAGES => '',
+ FINISHPAGE => '',
+ FORMAT => 'P|1|letter|no',
+ LATEX_TYPE => 'batchmode',
+ NUMBER_TO_PRINT_TOTAL => '',
+ PRINT_ANNOTATIONS => 'no',
+ PRINT_DISCUSSIONS => 'no',
+ PRINT_TYPE => 'map_problems',
+ RESOURCES => $resources,
+ REUSE_OLD_CODES => '',
+ SEQUENCE => '',
+ SINGLE_CODE => '',
+ SPLIT_PDFS => '',
+ STUDENTS => '',
+ TABLE_CONTENTS => 'no',
+ TABLE_INDEX => 'no',
+ assignment => $assignment,
+ construction => '',
+ curseed => '',
+ filename => '',
+ fontsize => 'normalsize',
+ pagesize => '',
+ 'pagesize.height' => '9.8',
+ 'pagesize.heightunit' => 'in',
+ 'pagesize.lmargin' => '-0.57',
+ 'pagesize.lmarginunit' => 'in',
+ 'pagesize.width' => '7.1',
+ 'pagesize.widthunit' => 'in',
+ postdata => $urlp,
+ probstatus => '',
+ showallfoils => '',
+ student_sort => '',
+ style_file => '',
+ symb => $master_seq[0],
+ }
+ };
+ $env{'form.assignment'} = $assignment;
+ $is_custom = 1;
+ }
+ } else {
+ $helper = printHelper($r);
+ if (!ref($helper)) {
+ return $helper;
+ }
}
-
%parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'});
-
-
# If a figure conversion queue file exists for this user.domain
@@ -2934,13 +3056,13 @@ sub handler {
my $conversion_queuefile = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat";
if(-e $conversion_queuefile) {
- unlink $conversion_queuefile;
+ unlink $conversion_queuefile;
}
-
- &output_data($r,$helper,\%parmhash);
+
+ &output_data($r,$helper,\%parmhash,$is_custom);
return OK;
-}
+}
use Apache::lonhelper;
@@ -4007,6 +4129,9 @@ sub render {
my $PaperType=&mt('Paper type');
my $landscape=&mt('Landscape');
my $portrait=&mt('Portrait');
+ my $pdfFormLabel=&mt('PDF-Formfields');
+ my $with=&mt('with Formfields');
+ my $without=&mt('without Formfields');
$result.='