--- loncom/interface/lonprintout.pm 2009/07/03 16:13:13 1.558
+++ loncom/interface/lonprintout.pm 2009/08/17 10:48:28 1.560.2.1
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.558 2009/07/03 16:13:13 bisitz Exp $
+# $Id: lonprintout.pm,v 1.560.2.1 2009/08/17 10:48:28 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -104,7 +104,7 @@ sub fetch_raw_resource {
sub annotate {
my ($symb) = @_;
- my $annotation_text = &Apache::admannotations::get_annotation($symb, 1);
+ my $annotation_text = &Apache::loncommon::get_annotation($symb, 1);
my $result = "";
@@ -197,7 +197,7 @@ sub include_pdf {
#
-# ssi_with_retries - Does the server side include of a resource.
+# ssi_with_retries- Does the server side include of a resource.
# if the ssi call returns an error we'll retry it up to
# the number of times requested by the caller.
# If we still have a proble, no text is appended to the
@@ -230,6 +230,10 @@ sub include_pdf {
sub ssi_with_retries {
my ($resource, $retries, %form) = @_;
+ my $target = $form{'grade_target'};
+ my $aom = $form{'answer_output_mode'};
+
+
my ($content, $response) = &Apache::loncommon::ssi_with_retries($resource, $retries, %form);
if (!$response->is_success) {
@@ -944,6 +948,7 @@ sub old_character_chart {
$result =~ s/&(rdquo|#8221);/\'\'/g;
+
return $result;
}
@@ -1305,6 +1310,180 @@ sub unsupported {
return $result;
}
+#
+# Map from helper layout style to the book/album:
+#
+sub map_laystyle {
+ my ($laystyle) = @_;
+ if ($laystyle eq 'L') {
+ $laystyle='album';
+ } else {
+ $laystyle='book';
+ }
+ return $laystyle;
+}
+
+sub print_page_in_course {
+ my ($helper, $rparmhash, $currentURL, $resources) = @_;
+ my %parmhash = %$rparmhash;
+ my @page_resources = @$resources;
+ my $mode = $helper->{'VARS'}->{'LATEX_TYPE'};
+ my $symb = $helper->{'VARS'}->{'symb'};
+
+
+ my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
+
+
+ my @temporary_array=split /\|/,$format_from_helper;
+ my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array;
+ $laystyle = &map_laystyle($laystyle);
+ my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,
+ $numberofcolumns);
+ my $LaTeXwidth=&recalcto_mm($textwidth);
+
+
+ if ($mode ne '') {$mode='\\'.$mode}
+ my $result.= &print_latex_header($mode);
+ if ($currentURL=~m|^(/adm/wrapper/)?ext/|) {
+ $currentURL=~s|^(/adm/wrapper/)?ext/|http://|;
+ my $title=&Apache::lonnet::gettitle($symb);
+ $title = &Apache::lonxml::latex_special_symbols($title);
+ } else {
+ $result.=$currentURL;
+ }
+ $result .= '\\\\';
+
+ if ($helper->{'VARS'}->{'style_file'}=~/\w/) {
+ &Apache::lonnet::appenv({'construct.style' =>
+ $helper->{'VARS'}->{'style_file'}});
+ } elsif ($env{'construct.style'}) {
+ &Apache::lonnet::delenv('construct.style');
+ }
+
+ # First is the overall page description. This is then followed by the
+ # components of the page. Each of which must be printed independently.
+
+ my $the_page = shift(@page_resources);
+
+ foreach my $resource (@page_resources) {
+ my $resource_src = $resource->src(); # Essentially the URL of the resource.
+ $result .= $resource->title() . '\\\\';
+
+ # Recurse if a .page:
+
+ if ($resource_src =~ /.page$/i) {
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my @page_resources = $navmap->retrieveResources($resource_src);
+ $result .= &print_page_in_course($helper, $rparmhash,
+ $resource_src, \@page_resources);
+ }
+ # these resources go through the XML transformer:
+
+ elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm\xhtml|xhtm)$/) {
+ my $urlp = &Apache::lonnet::clutter($resource_src);
+ my %form;
+ my %moreenv;
+
+ &Apache::lonxml::remember_problem_counter();
+ $moreenv{'request.filename'}=$urlp;
+ if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {$form{'problemtype'}='exam';}
+
+ $form{'grade_target'} = 'tex';
+ $form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
+ $form{'pdfFormFiels'} = $pdfFormFields; #
+ $form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'};
+
+ $form{'problem_split'}=$parmhash{'problem_stream_switch'};
+ $form{'suppress_tries'}=$parmhash{'suppress_tries'};
+ $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+ $form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'};
+ $form{'print_annotations'}=$helper->{'VARS'}->{'PRINT_ANNOTATIONS'};
+ if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') ||
+ ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) {
+ $form{'problem_split'}='yes';
+ }
+ my $rndseed = time;
+ if ($helper->{'VARS'}->{'curseed'}) {
+ $rndseed=$helper->{'VARS'}->{'curseed'};
+ }
+ $form{'rndseed'}=$rndseed;
+ &Apache::lonnet::appenv(\%moreenv);
+
+ &Apache::lonxml::clear_problem_counter();
+
+ my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form);
+
+ # There seems to be an extraneous \vskip 1mm \\\\ :
+
+ $texversion =~ s/^\\vskip 1mm \\\\\\\\//;
+
+ # current document with answers.. no need to encap in minipage
+ # since there's only one answer.
+
+ if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
+ ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
+ my %answerform = %form;
+
+
+ $answerform{'problem_split'}=$parmhash{'problem_stream_switch'};
+ $answerform{'grade_target'}='answer';
+ $answerform{'answer_output_mode'}='tex';
+ $answerform{'rndseed'}=$rndseed;
+ if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {
+ $answerform{'problemtype'}='exam';
+ }
+ $resources_printed .= $urlp.':';
+ my $answer=&ssi_with_retries($urlp,$ssi_retry_count, %answerform);
+
+ if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
+ $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
+ } else {
+ $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+ if ($helper->{'VARS'}->{'construction'} ne '1') {
+ my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'});
+ $title = &Apache::lonxml::latex_special_symbols($title);
+ $texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
+ $texversion.=&path_to_problem($urlp,$LaTeXwidth);
+ } else {
+ $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm ';
+ my $URLpath=$urlp;
+ $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/;
+ $texversion.=&path_to_problem($URLpath,$LaTeXwidth);
+ }
+ $texversion.='\vskip 1 mm '.$answer.'\end{document}';
+ }
+
+
+
+
+
+ }
+ # Print annotations.
+
+
+ if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
+ my $annotation .= &annotate($currentURL);
+ $texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$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,$numberofcolumns) = &page_cleanup($result);
+ }
+ }
+ }
+
+ $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}';
+ return $result;
+}
+
#
# List of recently generated print files
@@ -1580,11 +1759,8 @@ ENDPART
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,$pdfFormFields)=@temporary_array;
- if ($laystyle eq 'L') {
- $laystyle='album';
- } else {
- $laystyle='book';
- }
+
+ $laystyle = &map_laystyle($laystyle);
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns);
my $assignment = $env{'form.assignment'};
my $LaTeXwidth=&recalcto_mm($textwidth);
@@ -1733,6 +1909,8 @@ ENDPART
} elsif ($cleanURL!~m|^/adm/|
&& $currentURL=~/\.(sequence|page)$/ && $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_construction_sequence($currentURL, $helper, %form,
@@ -1768,11 +1946,24 @@ ENDPART
} elsif ($cleanURL =~ /\.pdf$/i) {
$result .= &include_pdf($cleanURL);
$result .= '\end{document}';
+ } elsif ($cleanURL =~ /\.page$/i) { # Print page in non construction space contexts.
+
+ # Determine the set of resources in the map of the page:
+
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my @page_resources = $navmap->retrieveResources($cleanURL);
+ $result .= &print_page_in_course($helper, $rparmhash,
+ $cleanURL, \@page_resources);
+
+
} else {
+ &Apache::lonnet::logthis("Unsupported type handler");
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'},
$helper->{'VARS'}->{'symb'});
}
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') or
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') or # BUGBUG
@@ -1781,9 +1972,13 @@ ENDPART
#-- produce an output string
- if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') {
+ if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') ) {
$selectionmade = 2;
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') {
+ } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page'))
+ {
+ &Apache::lonnet::logthis("Selectionmade => 3");
$selectionmade = 3;
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')
) {
@@ -1827,7 +2022,7 @@ ENDPART
$urlp=&Apache::lonnet::clutter($urlp);
$form{'symb'}=$master_seq[$i];
-
+ &Apache::lonnet::logthis("Element $i Sequence $sequence Middle $middle_thingy URLP $urlp");
my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #title of the assignment which contains this problem
if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}
@@ -1835,10 +2030,13 @@ ENDPART
my $texversion='';
if ($urlp!~m|^/adm/|
&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+ &Apache::lonnet::logthis("Problem");
$resources_printed .= $urlp.':';
&Apache::lonxml::remember_problem_counter();
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);
+ &Apache::lonnet::logthis("texversion so far: $texversion");
if ($urlp=~/\.page$/) {
+ &Apache::lonnet::("Special page actions");
($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
$texversion =~ s/\\end{document}\d*/\\end{document}/;
@@ -1860,6 +2058,7 @@ ENDPART
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
} else {
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
+ &Apache::lonnet::logthis("problem printing");
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
$texversion =~ s/\\begin{document}//;
my $title = &Apache::lonnet::gettitle($master_seq[$i]);
@@ -1905,6 +2104,7 @@ ENDPART
}
}
$result .= $texversion;
+ &Apache::lonnet::logthis("About to set rem header true with $result");
$flag_latex_header_remove = 'YES';
} elsif ($urlp=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
@@ -2427,7 +2627,6 @@ sub print_resources {
if ($res_url!~m|^ext/|
&& $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
$printed .= $curresline.':';
-
&Apache::lonxml::remember_problem_counter();
my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
@@ -2738,6 +2937,8 @@ sub printHelper {
$subdir = substr($helper->{VARS}->{'filename'},
0, rindex($helper->{VARS}->{'filename'}, '/') + 1);
} else {
+ # From course space:
+
if ($symb ne '') {
($map, $id, $url) = &Apache::lonnet::decode_symb($symb);
$helper->{VARS}->{'postdata'} =
@@ -2745,9 +2946,9 @@ sub printHelper {
} else {
$url = $helper->{VARS}->{'postdata'};
$is_published=1; # From resource space.
+ &Apache::lonnet::logthis("Resource url $url");
}
$url = &Apache::lonnet::clutter($url);
-
if (!$resourceTitle) { # if the resource doesn't have a title, use the filename
my $postdata = $helper->{VARS}->{'postdata'};
$resourceTitle = substr($postdata, rindex($postdata, '/') + 1);
@@ -2806,15 +3007,73 @@ sub printHelper {
"before selected').
"' variable='FINISHPAGE' />";
}
+ # some debugging:
+ {
+ my $varspostdata = $helper->{VARS}->{'postdata'};
+ my $varsassignment = $helper->{VARS}->{'assignment'};
+ my $debugnavmap = Apache::lonnavmaps::navmap->new();
+ my @dbgresources = $debugnavmap->retrieveResources($url);
+ if(defined($dbgresources[0])) {
+ my $debugispage = $dbgresources[0]->is_page();
+ my $debugtitle = $dbgresources[0]->title();
+ my $resourcesymb = $dbgresources[0]->symb();
+ my ($pagemap, $pageid, $pageurl) = &Apache::lonnet::decode_symb($symb);
+ &Apache::lonnet::logthis("post: $varspostdata ass: $varsassignment is page: $debugispage");
+ if ($debugispage) {
+ push @{$printChoices},
+ [&mt('Selected [_1]Problems[_2] from page [_3]', '', '', ''.$debugtitle.''),
+ 'map_problems_in_page',
+ 'CHOOSE_PROBLEMS_PAGE'];
+ push @{$printChoices},
+ [&mt('Selected [_1]Resources[_2] from page [_3]', '', '', ''.$debugtitle.''),
+ 'map_resources_in_page',
+ 'CHOOSE_RESOURCES_PAGE'];
+ }
+ &Apache::lonnet::logthis("Pushing problems/resources from folder. $debugtitle");
+ &Apache::lonnet::logthis("Map url: $url");
+ &Apache::lonnet::logthis("Decoded symb: pagemap $pagemap id: $pageid url: $pageurl");
+ my $helperFragment = <
+
+ PAGESIZE
+ return $isProblem;
+ $pagemap
+ return $symbFilter;
+ $start_new_option
+
+
+
+
+
+ PAGESIZE
+ return $isNotMap;
+ $url
+ return $symbFilter;
+ $start_new_option
+
+
+HELPERFRAGMENT
+
+ &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
+
+ }
+ }
if (($helper->{'VARS'}->{'construction'} ne '1' ) &&
$helper->{VARS}->{'postdata'} &&
$helper->{VARS}->{'assignment'}) {
# Allow problems from sequence
- push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.''), 'map_problems', 'CHOOSE_PROBLEMS'];
+ push @{$printChoices},
+ [&mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.''),
+ 'map_problems',
+ 'CHOOSE_PROBLEMS'];
# Allow all resources from sequence
- push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','','',''.$sequenceTitle.''), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
-
+ push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','','',''.$sequenceTitle.''),
+ 'map_problems_pages',
+ 'CHOOSE_PROBLEMS_HTML'];
+ &Apache::lonnet::logthis("Map url : $map");
my $helperFragment = <
Select sorting order of printout
+
+
Sort by section then student
Sort by students across sections.
@@ -3194,7 +3455,6 @@ CHOOSE_ANON2
))
&& $helper->{VARS}->{'assignment'} eq ""
) {
-
my $pretty_dir = &Apache::lonnet::hreflocation($subdir);
push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','','',''.$pretty_dir.'','',''), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];
my $xmlfrag = <