[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm lonprintout.pm
foxr
foxr@source.lon-capa.org
Mon, 26 Oct 2009 10:16:57 -0000
This is a MIME encoded message
--foxr1256552217
Content-Type: text/plain
foxr Mon Oct 26 10:16:57 2009 EDT
Modified files:
/loncom/interface lonnavmaps.pm lonprintout.pm
Log:
Merge in branch that fixes BZ 2851
--foxr1256552217
Content-Type: text/plain
Content-Disposition: attachment; filename="foxr-20091026101657.txt"
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.436 loncom/interface/lonnavmaps.pm:1.437
--- loncom/interface/lonnavmaps.pm:1.436 Thu Oct 22 03:04:21 2009
+++ loncom/interface/lonnavmaps.pm Mon Oct 26 10:16:56 2009
@@ -1,7 +1,8 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.436 2009/10/22 03:04:21 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.437 2009/10/26 10:16:56 foxr Exp $
+
#
# Copyright Michigan State University Board of Trustees
#
@@ -48,7 +49,7 @@
=head1 OVERVIEW
-X<lonnavmaps, overview> When a user enters a course, LON-CAPA examines the
+X<lonnavmaps, overview When a user enters a course, LON-CAPA examines the
course structure and caches it in what is often referred to as the
"big hash" X<big hash>. You can see it if you are logged into
LON-CAPA, in a course, by going to /adm/test. (You may need to
@@ -597,7 +598,7 @@
my ($map,$id,$src)=&Apache::lonnet::decode_symb($res->symb());
if ($map=~/\.page$/) {
my $url=&Apache::lonnet::clutter($map);
- $anchor=&escape($src->shown_symb());
+ $anchor=&escape($res->shown_symb());
return ($url,$res->shown_symb(),$anchor);
}
}
Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.561 loncom/interface/lonprintout.pm:1.562
--- loncom/interface/lonprintout.pm:1.561 Tue Sep 22 14:28:50 2009
+++ loncom/interface/lonprintout.pm Mon Oct 26 10:16:56 2009
@@ -1,7 +1,8 @@
+#
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.561 2009/09/22 14:28:50 bisitz Exp $
+# $Id: lonprintout.pm,v 1.562 2009/10/26 10:16:56 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,7 +27,6 @@
#
#
package Apache::lonprintout;
-
use strict;
use Apache::Constants qw(:common :http);
use Apache::lonxml;
@@ -74,6 +74,183 @@
my $font_size = 'normalsize'; # Default is normalsize...
+#---------------------------- Helper helpers. -------------------------
+
+# Returns the text needd for a student chooser.
+# that text must still be parsed by the helper xml parser.
+# Parameters:
+# this_state - State name of the chooser.
+# sort_choice - variable to hold the sorting choice.
+# variable - Name of variable to hold students.
+# next_state - State after chooser.
+
+
+sub generate_student_chooser {
+ my ($this_state,
+ $sort_choice,
+ $variable,
+ $next_state) = @_;
+ my $result = <<CHOOSE_STUDENTS;
+ <state name="$this_state" title="Select Students and Resources">
+ <message><b>Select sorting order of printout</b> </message>
+
+ <choices variable="$sort_choice">
+ <choice computer='0'>Sort by section then student</choice>
+ <choice computer='1'>Sort by students across sections.</choice>
+ </choices>
+
+ <message><br /><hr /><br /> </message>
+ <student multichoice='1'
+ variable="$variable"
+ nextstate="$next_state"
+ coursepersonnel="1" />
+ </state>
+
+CHOOSE_STUDENTS
+
+ return $result;
+}
+
+# Generate the text needed for a resource chooser given the top level of
+# the sequence/page
+#
+# Parameters:
+# this_state - State name of the chooser.
+# prompt_text - Text to use to prompt user.
+# resource_options - Resource tag options e.g.
+# "multichoice='1', toponly='1', addstatus='1'"
+# that control the selection and appearance of the
+# resource selector.
+# variable - Name of the variable to hold the choice
+# next_state - Name of the next state the helper should transition
+# to
+# top_url - Top level URL within which to make the selector.
+# If empty the top level sequence is shown.
+# filter - How to filter the resources.
+# value_func - <valuefunc> function.
+# choice_func - If not empty generates a <choicefunc> with this function.
+# start_new_option
+# - Fragment appended after valuefunc.
+#
+#
+sub generate_resource_chooser {
+ my ($this_state,
+ $prompt_text,
+ $resource_options,
+ $variable,
+ $next_state,
+ $top_url,
+ $filter,
+ $choice_func,
+ $value_func,
+ $start_new_option) = @_;
+
+ my $result = <<CHOOSE_RESOURCES;
+<state name="$this_state" title="$prompt_text">
+ <resource variable="$variable" $resource_options
+ closeallpages="1">
+ <nextstate>$next_state</nextstate>
+ <filterfunc>return $filter;</filterfunc>
+CHOOSE_RESOURCES
+ if ($choice_func ne '') {
+ $result .= "<choicefunc>return $choice_func;</choicefunc>";
+ }
+ if ($top_url ne '') {
+ $result .= "<mapurl>$top_url</mapurl>";
+ }
+ $result .= <<CHOOSE_RESOURCES;
+ <valuefunc>return $value_func;</valuefunc>
+ $start_new_option
+ </resource>
+ </state>
+CHOOSE_RESOURCES
+
+ return $result;
+}
+#
+# Generate the helper XML for a code choice helper dialog:
+#
+# Paramters:
+# $helper - Reference to the helper.
+# $state - Name of the state for the chooser.
+# $next_state - Name fo the state to follow the chooser.
+# $bubble_types - Populates the bubble sheet type dropt down.
+# $code_selections - Provides set of code choices that have been used
+# $saved_codes - Provides the list of saved codes.
+#
+# Returns;
+# The Xml of the code chooser.
+#
+sub generate_code_selector {
+ my ($helper,
+ $state,
+ $next_state,
+ $bubble_types,
+ $code_selections,
+ $saved_codes) = @_; # Unpack the parameters.
+
+ my $result = <<CHOOSE_ANON1;
+ <state name="$state" title="Specify CODEd Assignments">
+ <nextstate>$next_state</nextstate>
+ <message><h4>Fill out one of the forms below</h4></message>
+ <message><br /><hr /> <br /></message>
+ <message><h3>Generate new CODEd Assignments</h3></message>
+ <message><table><tr><td><b>Number of CODEd assignments to print:</b></td><td></message>
+ <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">
+ <validator>
+ if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&
+ !\$helper->{'VARS'}{'REUSE_OLD_CODES'} &&
+ !\$helper->{'VARS'}{'SINGLE_CODE'} &&
+ !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
+ return "You need to specify the number of assignments to print";
+ }
+ return undef;
+ </validator>
+ </string>
+ <message></td></tr><tr><td></message>
+ <message><b>Names to save the CODEs under for later:</b></message>
+ <message></td><td></message>
+ <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />
+ <message></td></tr><tr><td></message>
+ <message><b>Bubble sheet type:</b></message>
+ <message></td><td></message>
+ <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">
+ $bubble_types
+ </dropdown>
+ <message></td></tr><tr><td colspan="2"></td></tr><tr><td></message>
+ <message></td></tr><tr><td></table></message>
+ <message><br /><hr /><h3>Print a Specific CODE </h3><br /><table></message>
+ <message><tr><td><b>Enter a CODE to print:</b></td><td></message>
+ <string variable="SINGLE_CODE" size="10">
+ <validator>
+ if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} &&
+ !\$helper->{'VARS'}{'REUSE_OLD_CODES'} &&
+ !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
+ return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},
+ \$helper->{'VARS'}{'CODE_OPTION'});
+ } else {
+ return undef; # Other forces control us.
+ }
+ </validator>
+ </string>
+ <message></td></tr><tr><td></message>
+ $code_selections
+ <message></td></tr></table></message>
+ <message><hr /><h3>Reprint a Set of Saved CODEs</h3><table><tr><td></message>
+ <message><b>Select saved CODEs:</b></message>
+ <message></td><td></message>
+ <dropdown variable="REUSE_OLD_CODES">
+ $saved_codes
+ </dropdown>
+ <message></td></tr></table></message>
+ </state>
+CHOOSE_ANON1
+
+ return $result;
+}
+
+#-----------------------------------------------------------------------
+
# Fetch the contents of a resource, uninterpreted.
# This is used here to fetch a latex file to be included
@@ -1343,7 +1520,7 @@
if ($mode ne '') {$mode='\\'.$mode}
- my $result.= &print_latex_header($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);
@@ -1413,9 +1590,6 @@
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.
@@ -1438,7 +1612,7 @@
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
} else {
- $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+ $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);
@@ -1473,6 +1647,14 @@
$texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$currentURL| \\strut\\\\\\strut /;
}
+ $texversion = &latex_header_footer_remove($texversion);
+
+ # the first remaining line is a comment from londefdef the second
+ # line seems to be an extraneous \vskip 1mm \\\\ :
+ # (imperfect removal from header_footer_remove?
+
+ $texversion =~ s/\\vskip 1mm \\\\\\\\//;
+
$result .= $texversion;
if ($currentURL=~m/\.page\s*$/) {
($result,$numberofcolumns) = &page_cleanup($result);
@@ -1560,7 +1742,7 @@
# A reference to a page break hash.
#
#
-#use Data::Dumper;
+# use Data::Dumper;
#sub dump_helper_vars {
# my ($helper) = @_;
# my $helpervars = Dumper($helper->{'VARS'});
@@ -1962,6 +2144,8 @@
$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
@@ -1970,9 +2154,12 @@
#-- 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'))
+ {
$selectionmade = 3;
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')
) {
@@ -2012,11 +2199,10 @@
$result.="\\newpage\n";
}
}
- my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($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];
-
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;}
@@ -2026,9 +2212,9 @@
&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
$resources_printed .= $urlp.':';
&Apache::lonxml::remember_problem_counter();
+
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);
if ($urlp=~/\.page$/) {
-
($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}/;
@@ -2151,6 +2337,7 @@
}
$result .= '\end{document}';
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students_from_page') ||
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ||
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){
@@ -2158,6 +2345,7 @@
#-- prints assignments for whole class or for selected students
my $type;
if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students_from_page') ||
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ) {
$selectionmade=5;
$type='problems';
@@ -2197,7 +2385,8 @@
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
#loop over students
- my $flag_latex_header_remove = 'NO';
+
+ my $flag_latex_header_remove = 'NO';
my %moreenv;
$moreenv{'instructor_comments'}='hide';
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
@@ -2245,6 +2434,7 @@
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= $print_array[0].' \end{document}';
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') ||
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon') ) {
my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
@@ -2601,7 +2791,6 @@
# postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself.
#
-
foreach my $curresline (@{$master_seq}) {
if (defined $page_breaks{$curresline}) {
if($i != 0) {
@@ -2620,7 +2809,6 @@
&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(($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.
@@ -2648,12 +2836,12 @@
$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/;
}
+ my $junk;
if ($remove_latex_header eq 'YES') {
$rendered = &latex_header_footer_remove($rendered);
} else {
@@ -2927,6 +3115,8 @@
$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'} =
@@ -2936,7 +3126,6 @@
$is_published=1; # From resource space.
}
$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);
@@ -2996,79 +3185,102 @@
"' variable='FINISHPAGE' />";
}
- if (($helper->{'VARS'}->{'construction'} ne '1' ) &&
+ # If not construction space user can print the components of a page:
+
+ my $page_ispage;
+ my $page_title;
+ if (!$helper->{VARS}->{'construction'}) {
+ my $varspostdata = $helper->{VARS}->{'postdata'};
+ my $varsassignment = $helper->{VARS}->{'assignment'};
+ my $page_navmap = Apache::lonnavmaps::navmap->new();
+ my @page_resources = $page_navmap->retrieveResources($url);
+ if(defined($page_resources[0])) {
+ $page_ispage = $page_resources[0]->is_page();
+ $page_title = $page_resources[0]->title();
+ my $resourcesymb = $page_resources[0]->symb();
+ my ($pagemap, $pageid, $pageurl) = &Apache::lonnet::decode_symb($symb);
+ if ($page_ispage) {
+ push @{$printChoices},
+ [&mt('Selected [_1]Problems[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'),
+ 'map_problems_in_page',
+ 'CHOOSE_PROBLEMS_PAGE'];
+ push @{$printChoices},
+ [&mt('Selected [_1]Resources[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'),
+ 'map_resources_in_page',
+ 'CHOOSE_RESOURCES_PAGE'];
+ }
+ my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE',
+ 'Select Problem(s) to print',
+ "multichoice='1' toponly='1' addstatus='1' closeallpages='1'",
+ 'RESOURCES',
+ 'PAGESIZE',
+ $url,
+ $isProblem, '', $symbFilter,
+ $start_new_option);
+
+
+ $helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE',
+ 'Select Resource(s) to print',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
+ 'RESOURCES',
+ 'PAGESIZE',
+ $url,
+ $isNotMap, '', $symbFilter,
+ $start_new_option);
+
+
+
+
+
+ &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
+
+ }
+ }
+
+ if (($helper->{'VAR'}->{'construction'} ne '1' ) &&
$helper->{VARS}->{'postdata'} &&
$helper->{VARS}->{'assignment'}) {
# Allow problems from sequence
- push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems', 'CHOOSE_PROBLEMS'];
+ push @{$printChoices},
+ [&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'),
+ 'map_problems',
+ 'CHOOSE_PROBLEMS'];
# Allow all resources from sequence
- push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
-
- my $helperFragment = <<HELPERFRAGMENT;
- <state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print">
- <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"
- closeallpages="1">
- <nextstate>PAGESIZE</nextstate>
- <filterfunc>return $isProblem;</filterfunc>
- <mapurl>$map</mapurl>
- <valuefunc>return $symbFilter;</valuefunc>
- $start_new_option
- </resource>
- </state>
-
- <state name="CHOOSE_PROBLEMS_HTML" title="Select Resource(s) to print">
- <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"
- closeallpages="1">
- <nextstate>PAGESIZE</nextstate>
- <filterfunc>return $isNotMap;</filterfunc>
- <mapurl>$map</mapurl>
- <valuefunc>return $symbFilter;</valuefunc>
- $start_new_option
- </resource>
- </state>
-HELPERFRAGMENT
+ push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'),
+ 'map_problems_pages',
+ 'CHOOSE_PROBLEMS_HTML'];
+ my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS',
+ 'Select Problem(s) to print',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
+ 'RESOURCES',
+ 'PAGESIZE',
+ $map,
+ $isProblem, '',
+ $symbFilter,
+ $start_new_option);
+ $helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML',
+ 'Select Resource(s) to print',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
+ 'RESOURCES',
+ 'PAGESIZE',
+ $map,
+ $isNotMap, '',
+ $symbFilter,
+ $start_new_option);
&Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
}
# If the user has pfo (print for others) allow them to print all
# problems and resources in the entire course, optionally for selected students
+ my $post_data = $helper->{VARS}->{'postdata'};
if ($perm{'pfo'} && !$is_published &&
- ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {
+ ($post_data=~/\/res\// || $post_data =~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {
push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b>'), 'all_problems', 'ALL_PROBLEMS'];
push @{$printChoices}, [&mtn('Selected <b>Resources</b> from <b>entire course</b>'), 'all_resources', 'ALL_RESOURCES'];
push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b> for <b>selected people</b>'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS'];
- &Apache::lonxml::xmlparse($r, 'helper', <<ALL_PROBLEMS);
- <state name="ALL_PROBLEMS" title="Select Problem(s) to print">
- <resource variable="RESOURCES" toponly='0' multichoice="1"
- suppressEmptySequences='0' addstatus="1" closeallpages="1">
- <nextstate>PAGESIZE</nextstate>
- <filterfunc>return $isProblemOrMap;</filterfunc>
- <choicefunc>return $isNotMap;</choicefunc>
- <valuefunc>return $symbFilter;</valuefunc>
- $start_new_option
- </resource>
- </state>
- <state name="ALL_RESOURCES" title="Select Resource(s) to print">
- <resource variable="RESOURCES" toponly='0' multichoice='1'
- suppressEmptySequences='0' addstatus='1' closeallpages='1'>
- <nextstate>PAGESIZE</nextstate>
- <filterfunc>return $isNotMap; </filterfunc>
- <valuefunc>return $symbFilter;</valuefunc>
- $start_new_option
- </resource>
- </state>
- <state name="ALL_PROBLEMS_STUDENTS" title="Select Problem(s) to print">
- <resource variable="RESOURCES" toponly='0' multichoice="1"
- suppressEmptySequences='0' addstatus="1" closeallpages="1">
- <nextstate>STUDENTS1</nextstate>
- <filterfunc>return $isProblemOrMap;</filterfunc>
- <choicefunc>return $isNotMap;</choicefunc>
- <valuefunc>return $symbFilter;</valuefunc>
- $start_new_option
- </resource>
- </state>
+my $suffixXml = <<ALL_PROBLEMS;
<state name="STUDENTS1" title="Select People">
<message><b>Select sorting order of printout</b> </message>
<choices variable='student_sort'>
@@ -3078,12 +3290,55 @@
<message><br /><hr /><br /> </message>
<student multichoice='1' variable="STUDENTS" nextstate="PRINT_FORMATTING" coursepersonnel="1"/>
</state>
-
ALL_PROBLEMS
+ &Apache::lonxml::xmlparse($r, 'helper',
+ &generate_resource_chooser('ALL_PROBLEMS',
+ 'SelectProblem(s) to print',
+ 'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',
+ 'RESOURCES',
+ 'PAGESIZE',
+ '',
+ $isProblemOrMap, $isNotMap,
+ $symbFilter,
+ $start_new_option) .
+ &generate_resource_chooser('ALL_RESOURCES',
+ 'Select Resource(s) to print',
+ " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1'",
+ 'RESOURCES',
+ 'PAGESIZE',
+ '',
+ $isNotMap,'',$symbFilter,
+ $start_new_option) .
+ &generate_resource_chooser('ALL_PROBLEMS_STUDENTS',
+ 'Select Problem(s) to print',
+ 'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',
+ 'RESOURCES',
+ 'STUDENTS1',
+ '',
+ $isProblemOrMap,'' , $symbFilter,
+ $start_new_option) .
+ $suffixXml
+ );
if ($helper->{VARS}->{'assignment'}) {
- push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_students', 'CHOOSE_STUDENTS'];
- push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_anon', 'CHOOSE_ANON1'];
+
+ # If we were looking at a page, allow a selection of problems from the page
+ # either for selected students or for coded assignments.
+
+ if ($page_ispage) {
+ push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]selected people[_5]',
+ '<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'),
+ 'problems_for_students_from_page', 'CHOOSE_TGT_STUDENTS_PAGE'];
+ push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]CODEd assignments[_5]',
+ '<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'),
+ 'problems_for_anon_page', 'CHOOSE_ANON1_PAGE'];
+ }
+ push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]',
+ '<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'),
+ 'problems_for_students', 'CHOOSE_STUDENTS'];
+ push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]',
+ '<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'),
+ 'problems_for_anon', 'CHOOSE_ANON1'];
}
my $randomly_ordered_warning =
@@ -3098,20 +3353,15 @@
# with one state, and use REGEXPs at inclusion time to set state names
# and next states for better mix and match capability
#
- my $resource_selector=<<RESOURCE_SELECTOR;
- <state name="SELECT_PROBLEMS" title="Select resources to print">
- $randomly_ordered_warning
-
- <nextstate>PRINT_FORMATTING</nextstate>
- <message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message>
- <resource variable="RESOURCES" multichoice="1" addstatus="1"
- closeallpages="1">
- <filterfunc>return $isProblem;</filterfunc>
- <mapurl>$map</mapurl>
- <valuefunc>return $symbFilter;</valuefunc>
- $start_new_option
- </resource>
- </state>
+ my $resource_selector= &generate_resource_chooser('SELECT_PROBLEMS',
+ 'Select resources to print',
+ 'multichoice="1" addstatus="1" closeallpages="1"',
+ 'RESOURCES',
+ 'PRINT_FORMATTING',
+ '',
+ $isProblem, '', $symbFilter,
+ $start_new_option);
+ $resource_selector .= <<RESOURCE_SELECTOR;
<state name="PRINT_FORMATTING" title="How should results be printed?">
<message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message>
<choices variable="EMPTY_PAGES">
@@ -3131,19 +3381,31 @@
</choices>
</state>
RESOURCE_SELECTOR
+ $resource_selector .= &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
+ 'Select Problem(s) to print',
+ "multichoice='1' addstatus='1' closeallpages ='1'",
+ 'RESOURCES',
+ 'PRINT_FORMATTING',
+ $url,
+ $isProblem, '', $symbFilter,
+ $start_new_option);
+
+
+# Generate student choosers.
- &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS);
- <state name="CHOOSE_STUDENTS" title="Select Students and Resources">
- <message><b>Select sorting order of printout</b> </message>
- <choices variable='student_sort'>
- <choice computer='0'>Sort by section then student</choice>
- <choice computer='1'>Sort by students across sections.</choice>
- </choices>
- <message><br /><hr /><br /> </message>
- <student multichoice='1' variable="STUDENTS" nextstate="SELECT_PROBLEMS" coursepersonnel="1"/>
- </state>
- $resource_selector
-CHOOSE_STUDENTS
+
+
+ &Apache::lonxml::xmlparse($r, 'helper',
+ &generate_student_chooser('CHOOSE_TGT_STUDENTS_PAGE',
+ 'student_sort',
+ 'STUDENTS',
+ 'CHOOSE_STUDENTS_PAGE'));
+ &Apache::lonxml::xmlparse($r, 'helper',
+ &generate_student_chooser('CHOOSE_STUDENTS',
+ 'student_sort',
+ 'STUDENTS',
+ 'SELECT_PROBLEMS'));
+ &Apache::lonxml::xmlparse($r, 'helper', $resource_selector);
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
@@ -3201,63 +3463,31 @@
if ($codechoice eq '') {
$codechoice='<choice computer="default">Default</choice>';
}
- &Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1);
- <state name="CHOOSE_ANON1" title="Specify CODEd Assignments">
- <nextstate>SELECT_PROBLEMS</nextstate>
- <message><h4>Fill out one of the forms below</h4></message>
- <message><br /><hr /> <br /></message>
- <message><h3>Generate new CODEd Assignments</h3></message>
- <message><table><tr><td><b>Number of CODEd assignments to print:</b></td><td></message>
- <string variable="NUMBER_TO_PRINT_TOTAL" maxlength="5" size="5">
- <validator>
- if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&
- !\$helper->{'VARS'}{'REUSE_OLD_CODES'} &&
- !\$helper->{'VARS'}{'SINGLE_CODE'} &&
- !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
- return "You need to specify the number of assignments to print";
- }
- return undef;
- </validator>
- </string>
- <message></td></tr><tr><td></message>
- <message><b>Names to save the CODEs under for later:</b></message>
- <message></td><td></message>
- <string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" />
- <message></td></tr><tr><td></message>
- <message><b>Bubble sheet type:</b></message>
- <message></td><td></message>
- <dropdown variable="CODE_OPTION" multichoice="0" allowempty="0">
- $codechoice
- </dropdown>
- <message></td></tr><tr><td colspan="2"></td></tr><tr><td></message>
- <message></td></tr><tr><td></table></message>
- <message><br /><hr /><h3>Print a Specific CODE </h3><br /><table></message>
- <message><tr><td><b>Enter a CODE to print:</b></td><td></message>
- <string variable="SINGLE_CODE" size="10">
- <validator>
- if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} &&
- !\$helper->{'VARS'}{'REUSE_OLD_CODES'} &&
- !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
- return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},
- \$helper->{'VARS'}{'CODE_OPTION'});
- } else {
- return undef; # Other forces control us.
- }
- </validator>
- </string>
- <message></td></tr><tr><td></message>
- $code_selection
- <message></td></tr></table></message>
- <message><hr /><h3>Reprint a Set of Saved CODEs</h3><table><tr><td></message>
- <message><b>Select saved CODEs:</b></message>
- <message></td><td></message>
- <dropdown variable="REUSE_OLD_CODES">
- $namechoice
- </dropdown>
- <message></td></tr></table></message>
- </state>
- $resource_selector
-CHOOSE_ANON1
+ my $anon1 = &generate_code_selector($helper,
+ 'CHOOSE_ANON1',
+ 'SELECT_PROBLEMS',
+ $codechoice,
+ $code_selection,
+ $namechoice) . $resource_selector;
+
+
+ &Apache::lonxml::xmlparse($r, 'helper',$anon1);
+
+ my $anon_page = &generate_code_selector($helper,
+ 'CHOOSE_ANON1_PAGE',
+ 'SELECT_PROBLEMS_PAGE',
+ $codechoice,
+ $code_selection,
+ $namechoice) .
+ &generate_resource_chooser('SELECT_PROBLEMS_PAGE',
+ 'Select Problem(s) to print',
+ "multichoice='1' addstatus='1' closeallpages ='1'",
+ 'RESOURCES',
+ 'PRINT_FORMATTING',
+ $url,
+ $isProblem, '', $symbFilter,
+ $start_new_option);
+ &Apache::lonxml::xmlparse($r, 'helper', $anon_page);
if ($helper->{VARS}->{'assignment'}) {
@@ -3269,7 +3499,6 @@
$resource_selector=<<RESOURCE_SELECTOR;
<state name="SELECT_RESOURCES" title="Select Resources">
$randomly_ordered_warning
-
<nextstate>PRINT_FORMATTING</nextstate>
<message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message>
<resource variable="RESOURCES" multichoice="1" addstatus="1"
@@ -3280,6 +3509,7 @@
$start_new_option
</resource>
</state>
+
<state name="PRINT_FORMATTING" title="Format of the print job">
<nextstate>NUMBER_PER_PDF</nextstate>
<message><br /><big><i><b>How should the results be printed?</b></i></big><br /></message>
--foxr1256552217--