Number of CODEd assignments to print: |
- '); + $output =' '; } if ($zip_result) { - $r->print(' '.&mt('Recently generated printout zip files')."\n" + $output .=''.&mt('Recently generated printout zip files')."\n" .&Apache::loncommon::start_data_table() .&Apache::loncommon::start_data_table_header_row() .''.&mt('Download').' | '
@@ -1730,11 +1752,10 @@ sub recently_generated {
.''.&mt('File Size (Bytes)').' | '
.&Apache::loncommon::end_data_table_header_row()
.$zip_result
- .&Apache::loncommon::end_data_table()
- );
+ .&Apache::loncommon::end_data_table();
}
if ($pdf_result) {
- $r->print(''.&mt('Recently generated printouts')."\n" + $output .=''.&mt('Recently generated printouts')."\n" .&Apache::loncommon::start_data_table() .&Apache::loncommon::start_data_table_header_row() .''.&mt('Download').' | '
@@ -1742,9 +1763,9 @@ sub recently_generated {
.''.&mt('File Size (Bytes)').' | '
.&Apache::loncommon::end_data_table_header_row()
.$pdf_result
- .&Apache::loncommon::end_data_table()
- );
+ .&Apache::loncommon::end_data_table();
}
+ return $output;
}
#
@@ -1757,7 +1778,7 @@ sub recently_generated {
#
#
# use Data::Dumper;
-#sub dump_helper_vars {
+# sub dump_helper_vars {
# my ($helper) = @_;
# my $helpervars = Dumper($helper->{'VARS'});
# &Apache::lonnet::logthis("Dump of helper vars:\n $helpervars");
@@ -1772,6 +1793,122 @@ sub get_page_breaks {
}
return %page_breaks;
}
+#
+# Returns text to insert for any extra vskip prior to the resource.
+# Parameters:
+# helper - Reference to the helper object driving the printout.
+# resource - Identifies the resource about to be printed.
+#
+# This is done as follows:
+# POSSIBLE_RESOURCES has the list of possible resources.
+# EXTRASPACE has the list of extra space values.
+# EXTRASPACE_UNITS is the set of resources for which the units are
+# mm. All others are 'in'.
+#
+# The resource is found in the POSSIBLE_RESOURCES to get the index
+# of the EXTRASPACE value.
+#
+# In order to speed this up for lengthy printouts, the first time,
+# POSSIBLE_RESOURCES is turned into a look up hash and
+# EXTRASPACE is turned into an array.
+#
+
+
+my %possible_resources;
+my %extraspace_mm;
+my @extraspace;
+my $skips_loaded = 0;
+
+# Function to load the skips hash and array
+
+sub load_skips {
+
+ my ($helper) = @_;
+
+ # If this is the first time, unrap the resources and extra spaces:
+
+ if (!$skips_loaded) {
+ @extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'}));
+ my @resource_list = (split(/\|\|\|/, $helper->{'VARS'}->{'POSSIBLE_RESOURCES'}));
+ my $i = 0;
+ foreach my $resource (@resource_list) {
+ $possible_resources{$resource} = $i;
+ $i++;
+ }
+ foreach my $mm_resource (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE_UNITS'})) {
+ $extraspace_mm{$mm_resource} = 1;
+ }
+ $skips_loaded = 1;
+ }
+}
+
+sub get_extra_vspaces {
+ my ($helper, $resource) = @_;
+
+ &load_skips($helper);
+
+ # Lookup the resource in the possible resources hash.. that is the index
+ # into the extraspace array that gives us either an empty string or
+ # the number of mm to skip:
+
+ my $index = $possible_resources{$resource};
+ my $skip = $extraspace[$index];
+
+ my $result = '';
+ if ($skip ne '') {
+ my $units = 'in';
+ if (defined($extraspace_mm{$resource})) {
+ $units = 'mm';
+ }
+ $result = '\vskip '.$skip.' '.$units;
+ }
+
+
+ return $result;
+
+
+}
+
+#
+# The resource chooser part of the helper needs more than just
+# the value of the extraspaces var to recover the value into a text
+# field option. This sub produces the required format for the saved var:
+# specifically
+# ||| separated fields of the form resourcename=value
+#
+# Parameters:
+# $helper - Refers to the helper we are configuring
+# Implicit input:
+# $helper->{'VARS'}->{'EXTRASPACE'} - the spaces helper var has the text field
+# value.
+# $helper->{'VARS'}->{'EXTRASPACE_UNITS'} - units for the skips (checkboxes).
+# $helper->{'VARS'}->{'POSSIBLE_RESOURCES'} - has the list of resources. |||
+# separated of course.
+# Implicit outputs:
+# $env{'form.extraspace'}
+# $env{'form.extraspace_units'}
+#
+sub set_form_extraspace {
+ my ($helper) = @_;
+
+ # the most convenient way to do this is to drive from the skips arrays/hash.
+ # may not be the fastest, but this is once per print request so it's not so
+ # speed critical:
+
+ &load_skips($helper);
+
+ my $result = '';
+
+ foreach my $resource (keys(%possible_resources)) {
+ my $vskip = $extraspace[$possible_resources{$resource}];
+ $result .= $resource .'=' . $vskip . '|||';
+ }
+
+ $env{'form.extraspace'} = $result;
+ $env{'form.extraspace_units'} = $helper->{'VARS'}->{'EXTRASPACE_UNITS'};
+ return $result;
+
+}
# Output a sequence (recursively if neeed)
# from construction space.
@@ -1890,7 +2027,7 @@ sub print_construction_sequence {
}
sub output_data {
- my ($r,$helper,$rparmhash,$is_custom) = @_;
+ my ($r,$helper,$rparmhash) = @_;
my %parmhash = %$rparmhash;
$ssi_error = 0; # This will be set nonzero by failing ssi's.
$resources_printed = '';
@@ -1931,11 +2068,6 @@ 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,});
@@ -1948,11 +2080,13 @@ ENDPART
# indexed by symb and contains 1's for each break.
$env{'form.pagebreaks'} = $helper->{'VARS'}->{'FINISHPAGE'};
+ &set_form_extraspace($helper);
$env{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'};
&Apache::loncommon::store_course_settings('print',
{'pagebreaks' => 'scalar',
+ 'extraspace' => 'scalar',
+ 'extraspace_units' => 'scalar',
'lastprinttype' => 'scalar'});
-
my %page_breaks = &get_page_breaks($helper);
my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
@@ -2166,9 +2300,9 @@ ENDPART
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') or # BUGBUG
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences')
- ) {
-
+ ) {
+
#-- produce an output string
if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') ) {
@@ -2215,6 +2349,7 @@ ENDPART
$result.="\\newpage\n";
}
}
+ $result .= &get_extra_vspaces($helper, $master_seq[$i]);
my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
$urlp=&Apache::lonnet::clutter($urlp);
$form{'symb'}=$master_seq[$i];
@@ -2230,7 +2365,13 @@ ENDPART
&Apache::lonxml::remember_problem_counter();
if ($flag_latex_header_remove eq 'NO') {
$texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); # RF
- $flag_latex_header_remove = 'YES';
+ unless (($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') ||
+ (($i==0) &&
+ (($urlp=~/\.page$/) ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page')))) {
+ $flag_latex_header_remove = 'YES';
+ }
}
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);
if ($urlp=~/\.page$/) {
@@ -2238,7 +2379,7 @@ ENDPART
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
$texversion =~ s/\\end{document}\d*/\\end{document}/;
$flag_page_in_sequence = 'YES';
- }
+ }
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
@@ -2250,13 +2391,22 @@ ENDPART
&Apache::lonxml::restore_problem_counter();
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform);
-
+ if ($urlp =~ /\.page$/) {
+ $answer =~ s/\\end{document}(\d*)$//;
+ }
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
- $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
+ if ($urlp =~ /\.page$/) {
+ my @probs = split(/\\keephidden{ENDOFPROBLEM}/,$texversion);
+ my $lastprob = pop(@probs);
+ $texversion = join('\keephidden{ENDOFPROBLEM}',@probs).
+ $answer.'\keephidden{ENDOFPROBLEM}'.$lastprob;
+ } else {
+ $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
+ }
} else {
- if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
+ if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/) {
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
- $texversion =~ s/\\begin{document}//;
+# $texversion =~ s/\\begin{document}//; # FIXME
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 ';
@@ -2322,7 +2472,11 @@ ENDPART
if ($i > 0) {
$result .= '\cleardoublepage';
}
- $result .= &include_pdf($urlp);
+ my $texfrompdf = &include_pdf($urlp);
+ if ($flag_latex_header_remove ne 'NO') {
+ $texfrompdf = &latex_header_footer_remove($texfrompdf);
+ }
+ $result .= $texfrompdf;
if ($i != $#master_seq) {
if ($numberofcolumns eq '1') {
$result .= '\newpage';
@@ -2345,7 +2499,7 @@ ENDPART
}
$result .= $texversion;
$flag_latex_header_remove = 'YES';
- }
+ }
if (&Apache::loncommon::connection_aborted($r)) {
last;
}
@@ -2446,7 +2600,8 @@ ENDPART
$resources_printed .= ":";
$print_array[$i].=$output;
$student_names[$i].=$person.':'.$fullname.'_END_';
- &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname);
+# &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname);
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student');
$flag_latex_header_remove = 'YES';
if (&Apache::loncommon::connection_aborted($r)) { last; }
}
@@ -2816,10 +2971,11 @@ sub print_resources {
$current_output.= "\\newpage\n";
}
}
+ $current_output .= &get_extra_vspaces($helper, $curresline);
$i++;
if ( !($type eq 'problems' &&
- ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library)$/)) ) {
+ ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) ) {
my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline);
if (&Apache::lonnet::allowed('bre',$res_url)) {
if ($res_url!~m|^ext/|
@@ -2828,6 +2984,18 @@ sub print_resources {
&Apache::lonxml::remember_problem_counter();
my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
+ if ($res_url =~ /\.page$/) {
+ if ($remove_latex_header eq 'NO') {
+ if (!($rendered =~ /\\begin\{document\}/)) {
+ $rendered = &print_latex_header().$rendered;
+ }
+ }
+ if ($remove_latex_header eq 'YES') {
+ $rendered = &latex_header_footer_remove($rendered);
+ } else {
+ $rendered =~ s/\\end{document}\d*//;
+ }
+ }
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
# Use a copy of the hash so we don't pervert it on future loop passes.
@@ -2845,7 +3013,9 @@ sub print_resources {
my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
- $header =~ s/\\begin{document}//; #<<<<<
+ unless ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') {
+ $header =~ s/\\begin{document}//; #<<<<<
+ }
my $title = &Apache::lonnet::gettitle($curresline);
$title = &Apache::lonxml::latex_special_symbols($title);
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
@@ -2906,7 +3076,9 @@ sub print_resources {
if (&Apache::loncommon::connection_aborted($r)) { last; }
}
-
+ if ($syllabus_first) {
+ $current_output =~ s/\\\\ Last updated:/Last updated:/
+ }
my $courseidinfo = &get_course();
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
my $header_line =
@@ -2915,11 +3087,8 @@ sub print_resources {
my $header_start = ($columns_in_format == 1) ? '\lhead'
: '\fancyhead[LO]';
$header_line = $header_start.'{'.$header_line.'}';
- if ($current_output=~/\\documentclass/ && (!$syllabus_first)) {
+ if ($current_output=~/\\documentclass/) {
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /;
- } elsif ($syllabus_first) {
-
- $current_output =~ s/\\\\ Last updated:/Last updated:/
} else {
my $blankpages =
'\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'};
@@ -2942,112 +3111,17 @@ 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 ($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; - } + + my $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 @@ -3056,13 +3130,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,$is_custom); + &output_data($r,$helper,\%parmhash); return OK; -} +} use Apache::lonhelper; @@ -3087,6 +3161,11 @@ sub init_perm { $perm{'pfo'}=&Apache::lonnet::allowed('pfo', $env{'request.course.id'}.'/'.$env{'request.course.sec'}); } + $perm{'vgr'}=&Apache::lonnet::allowed('vgr',$env{'request.course.id'}); + if (!$perm{'vgr'}) { + $perm{'vgr'}=&Apache::lonnet::allowed('vgr', + $env{'request.course.id'}.'/'.$env{'request.course.sec'}); + } } sub get_randomly_ordered_warning { @@ -3158,19 +3237,21 @@ sub printHelper { $helper->declareVar('PRINT_TYPE'); $helper->declareVar("showallfoils"); $helper->declareVar("STUDENTS"); - + $helper->declareVar("EXTRASPACE"); - # The page breaks can get loaded initially from the course environment: + # The page breaks and extra spaces + # can get loaded initially from the course environment: # But we only do this in the initial state so that they are allowed to change. # - # $helper->{VARS}->{FINISHPAGE} = ''; &Apache::loncommon::restore_course_settings('print', {'pagebreaks' => 'scalar', + 'extraspace' => 'scalar', + 'extraspace_units' => 'scalar', 'lastprinttype' => 'scalar'}); # This will persistently load in the data we want from the @@ -3180,10 +3261,15 @@ sub printHelper { if (!defined ($env{"form.CURRENT_STATE"})) { $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'}; + $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'}; + $helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'}; } else { my $state = $env{"form.CURRENT_STATE"}; if ($state eq "START") { $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'}; + $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'}; + $helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'}; + } } @@ -3302,7 +3388,16 @@ sub printHelper { if ($perm{'pav'}) { $start_new_option = "before selected'). - "' variable='FINISHPAGE' />"; + "' variable='FINISHPAGE' />". + "before selected'). + "' variable='EXTRASPACE' type='text' />" . + "". + "check for mm'). + "' variable='EXTRASPACE_UNITS' type='checkbox' />" + ; + + } # If not construction space user can print the components of a page: @@ -3673,7 +3768,7 @@ CHOOSE_STUDENTS1 Generate new CODEd Assignments
|