--- loncom/interface/lonprintout.pm 2011/06/06 10:53:09 1.590
+++ loncom/interface/lonprintout.pm 2011/06/19 13:38:44 1.594
@@ -2,7 +2,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.590 2011/06/06 10:53:09 foxr Exp $
+# $Id: lonprintout.pm,v 1.594 2011/06/19 13:38:44 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -432,6 +432,40 @@ RESOURCE_SELECTOR
#-----------------------------------------------------------------------
+# Determine if a resource is incomplete given the map:
+# Parameters:
+# $username - Name of user for whom we are checking.
+# $domain - Domain of user we are checking.
+# $map - map name.
+# Returns:
+# 0 - map is not incomplete.
+# 1 - map is incomplete.
+#
+sub incomplete {
+ my ($username, $domain, $map) = @_;
+
+ # Manipulate the env so the navmap is made
+ # in the context of the appropriate user:
+
+ my $me = $env{'user.name'};
+ my $my_domain = $env{'user.domain'};
+
+ $env{'user.name'} = $username;
+ $env{'user.domain'} = $domain;
+
+ my $navmap = Apache::lonnavmaps::navmap->new();
+
+ $env{'user.name'} = $me; # Restore user/domain context.
+ $env{'user.domain'} = $my_domain;
+
+ if (defined($navmap)) {
+ my $res = $navmap->getResourceByUrl($map);
+ my $result = $res->is_incomplete();
+ return $result;
+ } else {
+ return 1;
+ }
+}
# Fetch the contents of a resource, uninterpreted.
# This is used here to fetch a latex file to be included
@@ -2222,13 +2256,12 @@ sub print_construction_sequence {
#BZ 5209
# 2 map_incomplete_problems_seq Print incomplete problems from the current
# folder in student context.
-# 101 map_incomplete_problems_people_seq Print incomplete problems from the
+# 5 map_incomplete_problems_people_seq Print incomplete problems from the
# current folder in privileged context.
-# 102 incomplete_problems_selpeople_course Print incomplete problems for
+# 5 incomplete_problems_selpeople_course Print incomplete problems for
# selected people from the entire course.
#
# Item 101 has much the same processing as 8,
-# Item 102 has much the same processing as 8.
#
# Differences: Item 101, 102 require per-student filtering of the resource
# set so that only the incomplete resources are printed.
@@ -2724,14 +2757,18 @@ ENDPART
} elsif (($print_type eq 'problems_for_students') ||
($print_type eq 'problems_for_students_from_page') ||
($print_type eq 'all_problems_students') ||
- ($print_type eq 'resources_for_students')){
+ ($print_type eq 'resources_for_students') ||
+ ($print_type eq 'incomplete_problems_selpeople_course') ||
+ ($print_type eq 'map_incomplete_problems_people_seq')){
#-- prints assignments for whole class or for selected students
my $type;
if (($print_type eq 'problems_for_students') ||
($print_type eq 'problems_for_students_from_page') ||
- ($print_type eq 'all_problems_students') ) {
+ ($print_type eq 'all_problems_students') ||
+ ($print_type eq 'incomplete_problems_selpeople_course') ||
+ ($print_type eq 'map_incomplete_problems_people_seq')) {
$selectionmade=5;
$type='problems';
} elsif ($print_type eq 'resources_for_students') {
@@ -2788,7 +2825,6 @@ ENDPART
my $i = 0;
my $last_section = (split(/:/,$students[0]))[2];
foreach my $person (@students) {
-
my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due";
if (-e $duefile) {
my $temp_file = Apache::File->new('>>'.$duefile);
@@ -3159,6 +3195,16 @@ sub print_resources {
my ($username,$userdomain,$usersection) = split /:/,$person;
my $fullname = &get_name($username,$userdomain);
my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace.
+ #
+ # Figure out if we need to filter the output by
+ # the incomplete problems for that person
+ #
+ my $print_type = $helper->{'VARS'}->{'PRINT_TYPE'};
+ my $print_incomplete = 0;
+ if (($print_type eq 'map_incomplete_problems_people_seq') ||
+ ($print_type eq 'incomplete_problems_selpeople_course')) {
+ $print_incomplete = 1;
+ }
if ($person =~ 'anon') {
$namepostfix .="Name: ";
$fullname = "CODE - ".$moreenv->{'CODE'};
@@ -3168,6 +3214,7 @@ sub print_resources {
#
my $i = 0;
+ my $actually_printed = 0; # Count of resources printed.
#goes through all resources, checks if they are available for
#current student, and produces output
@@ -3184,6 +3231,7 @@ sub print_resources {
# so we will just rely on prntout.pl to strip ENDOFSTUDENTSTAMP from the
# postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself.
#
+
my $syllabus_first = 0;
foreach my $curresline (@{$master_seq}) {
if (defined $page_breaks{$curresline}) {
@@ -3196,6 +3244,10 @@ sub print_resources {
if ( !($type eq 'problems' &&
($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) ) {
my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline);
+ if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) {
+ next;
+ }
+ $actually_printed++; # we're going to print one.
if (&Apache::lonnet::allowed('bre',$res_url)) {
if ($res_url!~m|^ext/|
&& $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
@@ -3209,6 +3261,7 @@ sub print_resources {
$rendered = &print_latex_header().$rendered;
}
}
+;
if ($remove_latex_header eq 'YES') {
$rendered = &latex_header_footer_remove($rendered);
} else {
@@ -3220,6 +3273,8 @@ sub print_resources {
# Use a copy of the hash so we don't pervert it on future loop passes.
my %answerenv = %{$moreenv};
$answerenv{'answer_output_mode'}='tex';
+
+
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
&Apache::lonxml::restore_problem_counter();
@@ -3294,6 +3349,22 @@ sub print_resources {
}
if (&Apache::loncommon::connection_aborted($r)) { last; }
}
+ # If we are printing incomplete it's possible we don't have
+ # anything to print. The print subsystem is not so good at handling
+ # that so we're going to generate a stub that says there are no
+ # incomplete resources for the person.
+ #
+
+ &Apache::lonnet::logthis("Number printed: $actually_printed");
+ if ($actually_printed == 0) {
+ &Apache::lonnet::logthis("Remove? $remove_latex_header");
+ $current_output = &encapsulate_minipage("\\vskip -10mm \nNo incomplete resources\n \\vskip 100 mm { }\n");
+ if ($remove_latex_header eq "NO") {
+ $current_output = &print_latex_header() . $current_output;
+ } else {
+ $current_output = &latex_header_footer_remove($current_output);
+ }
+ }
if ($syllabus_first) {
$current_output =~ s/\\\\ Last updated:/Last updated:/
@@ -3718,7 +3789,7 @@ sub printHelper {
}
push(@{$printChoices},
- [&mt('Selected Incomplete [_1]Problems[_2] from folder [_3]' . $textSuffix,
+ [&mt('Selected [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix,
'', '',
''. $sequenceTitle . ''),
$printSelector,
@@ -3765,7 +3836,7 @@ sub printHelper {
# BZ 5209 - incomplete problems from entire course:
push(@{$printChoices},
- [&mtn('Selected incomplete Problems from entire course for selected people'),
+ [&mtn('Selected Incomplete Problems from entire course for selected people'),
'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']);
my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states.
@@ -3838,7 +3909,7 @@ ALL_PROBLEMS
}
my $randomly_ordered_warning =
- &get_randomly_ordered_warning($helper,$map);
+ &get_randomly_ordered_warning($helper, $map);
# resource_selector will hold a few states that:
# - Allow resources to be selected for printing.