--- loncom/interface/lonprintout.pm 2003/09/22 20:00:08 1.237 +++ loncom/interface/lonprintout.pm 2003/09/25 18:16:04 1.238 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.237 2003/09/22 20:00:08 albertel Exp $ +# $Id: lonprintout.pm,v 1.238 2003/09/25 18:16:04 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1035,6 +1035,8 @@ sub addMessage { Apache::lonhelper::message->new(); } +use Data::Dumper; + sub printHelper { my $r = shift; @@ -1122,8 +1124,8 @@ sub printHelper { $helper->{VARS}->{'postdata'} = Apache::lonnet::clutter($url); if (!$resourceTitle) { # if the resource doesn't have a title, use the filename - my $url = $helper->{VARS}->{'postdata'}; - $resourceTitle = substr($url, rindex($url, '/') + 1); + my $postdata = $helper->{VARS}->{'postdata'}; + $resourceTitle = substr($postdata, rindex($postdata, '/') + 1); } $subdir = &Apache::lonnet::filelocation("", $url); } @@ -1146,6 +1148,9 @@ sub printHelper { # "Remove all duplicate slashes." $subdir =~ s|/+|/|g; + # If it's a ~ directory, convert back to /home/user/public_html + $subdir =~ s/^~(\w+)\//\/home\/$1\/public_html\//; + # What can be printed is a very dynamic decision based on # lots of factors. So we need to dynamically build this list. # To prevent security leaks, states are only added to the wizard @@ -1166,20 +1171,30 @@ sub printHelper { # $r->print($helper->{VARS}->{'postdata'}); + # Useful filter strings + my $isProblem = '$res->is_problem()'; + $isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden; + my $isProblemOrMap = '$res->is_problem() || $res->is_map()'; + my $isNotMap = '!$res->is_map()'; + $isNotMap .= ' && !$res->randomout()' if !$userCanSeeHidden; + my $isMap = '$res->is_map()'; + my $symbFilter = '$res->symb()'; + my $urlValue = '$res->src()'; + + $helper->declareVar('SEQUENCE'); + + # Useful for debugging: Dump the help vars + #$r->print(Dumper($helper->{VARS})); + #$r->print($map); + # If we're in a sequence... if (($helper->{'VARS'}->{'construction'} ne '1') && - $helper->{VARS}->{'postdata'}) { + $helper->{VARS}->{'postdata'} && $sequenceTitle) { # Allow problems from sequence - push @{$printChoices}, ["Selected problems in $sequenceTitle", 'map_problems', 'CHOOSE_PROBLEMS']; + push @{$printChoices}, ["Problems in $sequenceTitle", 'map_problems', 'CHOOSE_PROBLEMS']; # Allow all resources from sequence - push @{$printChoices}, ["Selected resources in $sequenceTitle", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; + push @{$printChoices}, ["Resources in $sequenceTitle", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; - my $isProblem = '$res->is_problem()'; - $isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden; - my $isProblemOrMap = '$res->is_problem() || $res->is_map()'; - my $isNotMap = '!$res->is_map()'; - $isNotMap .= ' && !$res->randomout()' if !$userCanSeeHidden; - my $symb = '$res->symb()'; my $helperFragment = < (mark them then click "next" button)
@@ -1187,7 +1202,7 @@ sub printHelper { PAGESIZE return $isProblem; $map - return $symb; + return $symbFilter; @@ -1197,7 +1212,7 @@ sub printHelper { PAGESIZE return $isNotMap; $map - return $symb; + return $symbFilter; HELPERFRAGMENT @@ -1208,14 +1223,11 @@ HELPERFRAGMENT # If the user is priviledged, allow them to print all # problems in the course, optionally for selected students if ($userPriviledged && ($helper->{VARS}->{'postdata'}=~/\/res\//)) { - push @{$printChoices}, ['Selected problems from entire course', 'all_problems', 'ALL_PROBLEMS']; - push @{$printChoices}, ["Selected problems from $sequenceTitle for selected students", 'problems_for_students', 'CHOOSE_STUDENTS']; + push @{$printChoices}, ['Problems from entire course', 'all_problems', 'ALL_PROBLEMS']; + if ($sequenceTitle) { + push @{$printChoices}, ["Problems from $sequenceTitle for selected students", 'problems_for_students', 'CHOOSE_STUDENTS']; + } - my $isProblem = '$res->is_problem()'; - $isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden; - my $isProblemOrMap = '($res->is_problem() || $res->is_map())'; - $isProblemOrMap .= ' && !$res->randomout()' if !$userCanSeeHidden; - my $symb = '$res->symb()'; &Apache::lonxml::xmlparse($r, 'helper', < (mark them then click "next" button)
@@ -1224,7 +1236,7 @@ HELPERFRAGMENT PAGESIZE return $isProblemOrMap; return $isProblem; - return $symb; + return $symbFilter; @@ -1234,7 +1246,7 @@ HELPERFRAGMENT return $isProblem $map - return $symb + return $symbFilter
How should the results be printed?
@@ -1248,9 +1260,9 @@ CHOOSE_STUDENTS } # FIXME: That RE should come from a library somewhere. - if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $ENV{'request.role.adv'}) { + if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $ENV{'request.role.adv'} and $subdir ne '/home/httpd/html/res/') { push @{$printChoices}, ["Problems from current subdirectory $subdir", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; - + my $f = '$filename'; my $xmlfrag = < @@ -1260,6 +1272,8 @@ CHOOSE_STUDENTS return '$subdir'; CHOOSE_FROM_SUBDIR + # this is broken up because I really want interpolation above, + # and I really DON'T want it below $xmlfrag .= <<'CHOOSE_FROM_SUBDIR'; return Apache::lonhelper::files::not_old_version($filename) && $filename =~ m/\.(problem|exam|quiz|assess|survey|form|library)$/; @@ -1270,6 +1284,30 @@ CHOOSE_FROM_SUBDIR &Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); } + # Allow the user to select any sequence in the course, feed it to + # another resource selector for that sequence + push @$printChoices, ["Resources from selected sequence in course", + 'map_problems_pages', 'CHOOSE_SEQUENCE']; + &Apache::lonxml::xmlparse($r, 'helper', < + Select the sequence to print resources from: + + CHOOSE_FROM_ANY_SEQUENCE + return \$res->is_sequence; + return $urlValue; + + + + (mark desired resources then click "next" button)
+ + PAGESIZE + return $isProblem + return $helper->{VARS}->{'SEQUENCE'}; + return $symbFilter; + +
+CHOOSE_FROM_ANY_SEQUENCE + # Generate the first state, to select which resources get printed. Apache::lonhelper::state->new("START", "Select Printing Options:"); $paramHash = Apache::lonhelper::getParamHash();