--- loncom/interface/lonprintout.pm 2007/08/29 00:55:37 1.507 +++ loncom/interface/lonprintout.pm 2008/01/14 10:43:12 1.511 @@ -2,7 +2,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.507 2007/08/29 00:55:37 albertel Exp $ +# $Id: lonprintout.pm,v 1.511 2008/01/14 10:43:12 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,6 +38,8 @@ use Apache::grades; use Apache::edit; use Apache::File(); use Apache::lonnavmaps; +use Apache::admannotations; + use LONCAPA::map(); use POSIX qw(strftime); use Apache::lonlocal; @@ -70,6 +72,27 @@ sub fetch_raw_resource { } +# Fetch the annotations associated with a URL and +# put a centered 'annotations:' title. +# This is all suppressed if the annotations are empty. +# +sub annotate { + my ($symb) = @_; + + my $annotation_text = &Apache::admannotations::get_annotation($symb, 1); + + + my $result = ""; + + if (length($annotation_text) > 0) { + $result .= '\\hspace*{\\fill} \\\\[\\baselineskip] \textbf{Annotations:} \\\\ '; + $result .= "\n"; + $result .= &Apache::lonxml::latex_special_symbols($annotation_text,""); # Escape latex. + $result .= "\n\n"; + } + return $result; +} + # # printf_style_subst item format_string repl # @@ -1407,7 +1430,11 @@ ENDPART $form{'suppress_tries'}=$parmhash{'suppress_tries'}; $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; $form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; - if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$form{'problem_split'}='yes';} + $form{'print_annotations'}=$helper->{'VARS'}->{'PRINT_ANNOTATIONS'}; + if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') || + ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) { + $form{'problem_split'}='yes'; + } if ($helper->{'VARS'}->{'curseed'}) { $rndseed=$helper->{'VARS'}->{'curseed'}; } @@ -1419,6 +1446,8 @@ ENDPART $resources_printed .= $currentURL.':'; $texversion.=&Apache::lonnet::ssi($currentURL,%form); + # Add annotations if required: + &Apache::lonxml::clear_problem_counter(); &Apache::lonnet::delenv('request.filename'); @@ -1437,6 +1466,8 @@ ENDPART } $resources_printed .= $currentURL.':'; my $answer=&Apache::lonnet::ssi($currentURL,%form); + + if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } else { @@ -1454,7 +1485,20 @@ ENDPART } $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); } @@ -1483,6 +1527,10 @@ ENDPART if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;} $resources_printed .= $currentURL.':'; my $texversion=&Apache::lonnet::ssi($currentURL,%form); + if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { + my $annotation = &annotate($currentURL); + $texversion =~ s/(\\end{document})/$annotation$1/; + } $result .= $texversion; } elsif ($cleanURL =~/.tex$/) { # For this sort of print of a single LaTeX file, @@ -1490,6 +1538,11 @@ ENDPART # $result = &fetch_raw_resource($currentURL); + if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { + my $annotation = &annotate($currentURL); + $result =~ s/(\\end{document})/$annotation$1/; + } + $do_postprocessing = 0; # Don't massage the result. } else { @@ -1501,6 +1554,8 @@ 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') { $selectionmade = 2; @@ -1517,7 +1572,11 @@ ENDPART $form{'suppress_tries'}=$parmhash{'suppress_tries'}; $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; $form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; - if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$form{'problem_split'}='yes';} + $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 $flag_latex_header_remove = 'NO'; my $flag_page_in_sequence = 'NO'; my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; @@ -1547,7 +1606,6 @@ ENDPART if ($urlp!~m|^/adm/| && $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { $resources_printed .= $urlp.':'; - &Apache::lonxml::remember_problem_counter(); $texversion.=&Apache::lonnet::ssi($urlp,%form); if ($urlp=~/\.page$/) { @@ -1584,7 +1642,13 @@ ENDPART $texversion=''; } } + + } + if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { + my $annotation .= &annotate($urlp); + $texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; } + if ($flag_latex_header_remove ne 'NO') { $texversion = &latex_header_footer_remove($texversion); } else { @@ -1616,6 +1680,11 @@ ENDPART if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;} $resources_printed .= $urlp.':'; my $texversion=&Apache::lonnet::ssi($urlp,%form); + if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { + my $annotation = &annotate($urlp); + $texversion =~ s/(\\end{document)/$annotation$1/; + } + if ($flag_latex_header_remove ne 'NO') { $texversion = &latex_header_footer_remove($texversion); } else { @@ -1691,9 +1760,13 @@ ENDPART $moreenv{'instructor_comments'}='hide'; $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); $moreenv{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; + $moreenv{'print_annotations'} = $helper->{'VARS'}->{'PRINT_ANNOTATIONS'}; $moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; $moreenv{'suppress_tries'} = $parmhash{'suppress_tries'}; - if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';} + if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') || + ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) { + $moreenv{'problem_split'}='yes'; + } my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75'); my $student_counter=-1; my $i = 0; @@ -1969,10 +2042,7 @@ ENDPART } my $URLback=''; #link to original document - if ($helper->{'VARS'}->{'construction'} ne '1') { - #prints published resource - $URLback=&escape('/adm/flip?postdata=return:'); - } else { + if ($helper->{'VARS'}->{'construction'} eq '1') { #prints resource from the construction space $URLback='/'.$helper->{'VARS'}->{'filename'}; if ($URLback=~/([^?]+)/) { @@ -2061,6 +2131,7 @@ sub print_resources { # postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself. # + foreach my $curresline (@{$master_seq}) { if (defined $page_breaks{$curresline}) { if($i != 0) { @@ -2068,6 +2139,7 @@ sub print_resources { } } $i++; + if ( !($type eq 'problems' && ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library)$/)) ) { my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline); @@ -2106,6 +2178,12 @@ sub print_resources { $rendered = $header.$body; } } + + if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { + my $url = &Apache::lonnet::clutter($res_url); + my $annotation = &annotate($url); + $rendered =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; + } if ($remove_latex_header eq 'YES') { $rendered = &latex_header_footer_remove($rendered); } else { @@ -2115,7 +2193,11 @@ sub print_resources { } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { $printed .= $curresline.':'; my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); - + if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { + my $url = &Apache::lonnet::clutter($res_url); + my $annotation = &annotate($url); + $annotation =~ s/(\\end{document})/$annotation$1/; + } if ($remove_latex_header eq 'YES') { $rendered = &latex_header_footer_remove($rendered); } else { @@ -2235,7 +2317,7 @@ sub get_randomly_ordered_warning { sub { return ($_[0]->is_map() && $_[0]->randomorder); }; my @matches = $navmap->retrieveResources($res, $func,1,1,1); if (@matches) { - $message = "Some folders are set to be randomly ordered. When printing the contents of these folders will be printed in the original order for all students."; + $message = "Some of the items below are in folders set to be randomly ordered. However, when printing the contents of these folders, they will be printed in the original order for all students, not the randomized order."; } } if ($message) { @@ -2470,8 +2552,8 @@ HELPERFRAGMENT if ($perm{'pfo'} && !$is_published && ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { - push @{$printChoices}, ['Selected Problems from entire course', 'all_problems', 'ALL_PROBLEMS']; - push @{$printChoices}, ['Selected Resources from entire course', 'all_resources', 'ALL_RESOURCES']; + push @{$printChoices}, [&mtn('Selected Problems from entire course'), 'all_problems', 'ALL_PROBLEMS']; + push @{$printChoices}, [&mtn('Selected Resources from entire course'), 'all_resources', 'ALL_RESOURCES']; &Apache::lonxml::xmlparse($r, 'helper', < {VARS}->{'construction'} && !$is_published) { - push @$printChoices, ["Selected Resources from selected folder in course", + push @$printChoices, [&mtn("Selected Resources from selected folder in course"), 'select_sequences', 'CHOOSE_SEQUENCE']; my $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'}; #Escape apostrophes and backslashes for Perl @@ -2952,6 +3034,21 @@ CHOOSE_FROM_ANY_SEQUENCE Apache::lonhelper::dropdown->new(); addMessage(""); + # Prompt for printing annotations too. + + addMessage("". + ':"); + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{'variable'} = "PRINT_ANNOTATIONS"; + $helper->declareVar("PRINT_ANNOTATIONS"); + $paramHash->{CHOICES} = [ + ['No', 'no'], + ['Yes', 'yes']]; + Apache::lonhelper::dropdown->new(); + addMessage(""); + addMessage(" "); $paramHash = Apache::lonhelper::getParamHash(); $paramHash->{'multichoice'} = "true";