+ '.$/;
+ }
+
+ my @lines = &Apache::lonnet::get_scantronformat_file();
+ my $codechoice='';
+ foreach my $line (@lines) {
+ next if (($line =~ /^\#/) || ($line eq ''));
+ my ($name,$description,$code_type,$code_length)=
+ (split(/:/,$line))[0,1,2,4];
+ if ($code_length > 0 &&
+ $code_type =~/^(letter|number|-1)/) {
+ $codechoice.=''.$description.'';
+ }
+ }
+ if ($codechoice eq '') {
+ $codechoice='Default';
+ }
+ 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' modallink='1'",
+ 'RESOURCES',
+ 'PRINT_FORMATTING',
+ $url,
+ $isProblem, '', $symbFilter,
+ $start_new_option);
+ &Apache::lonxml::xmlparse($r, 'helper', $anon_page);
+ return ($randomly_ordered_warning,$codechoice,$code_selection,$namechoice);
+}
+
# Returns the XML for choosing how assignments are to be formatted
# that text must still be parsed by the helper xml parser.
# Parameters: 3 (required)
@@ -458,7 +588,9 @@ sub generate_format_selector {
my $secpdfoption;
unless (($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') ) {
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences_problems_for_anon') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences_resources_for_anon')) {
$secpdfoption = 'Each PDF contains exactly one section';
}
return <new($username, $domain);
+ my $navmap = Apache::lonnavmaps::navmap->new($username, $domain, $section);
if (defined($navmap)) {
@@ -746,7 +879,7 @@ sub master_seq_to_person_seq {
}
my $navmap = Apache::lonnavmaps::navmap->new($username, $userdomain,
- $code, $unhidden);
+ $usersection, $code, $unhidden);
my ($start,$finish);
if ($map) {
@@ -847,7 +980,8 @@ sub set_font_size {
if ($font_size ne '') {
$text =~ s/\\begin\{document}/\\begin{document}{\\$font_size/;
- $text =~ s/\\end\{document}/}\\end{document}/;
+ $text =~ s/\\end\{document}/}\\end{document}/;
+
}
return $text;
@@ -1059,12 +1193,12 @@ sub printf_style_subst {
# %s - The section if it is supplied.
#
sub format_page_header {
- my ($width, $format, $assignment, $course, $student) = @_;
+ my ($width, $format, $assignment, $course, $student, $section) = @_;
$width = &recalcto_mm($width); # Get width in mm.
- my $chars_per_line = int($width/2); # Character/textline.
+ my $chars_per_line = int($width/1.6); # Character/textline.
# Default format?
@@ -1080,35 +1214,35 @@ sub format_page_header {
# - Allow the assignment to be 2 lines (wrapped).
#
- my $firstline = "$student $course";
- if (length($firstline) > $chars_per_line) {
- my $lastchar = $chars_per_line - length($student) - 1;
- if ($lastchar > 0) {
- $course = substr($course, 0, $lastchar);
- } else { # Nothing left of course:
- $course = '';
- }
- }
- if (length($assignment) > $chars_per_line) {
- $assignment = substr($assignment, 0, $chars_per_line);
- }
+
- $format = "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}";
+ my $name_length = int($chars_per_line *3 /4);
+ my $sec_length = int($chars_per_line / 5);
+
+ $format = "%$name_length".'n';
+
+ if ($section) {
+ $format .= ' - Sec: '."%$sec_length".'s';
+ }
+ $format .= '\\hfill\\thepage';
+
+ $format .= '\\\\%c \\\\ %a';
- } else {
- # An open question is how to handle long user formatted page headers...
- # A possible future is to support e.g. %na so that the user can control
- # the truncation of the elements that can appear in the header.
- #
- $format = &printf_style_subst("a", $format, $assignment);
- $format = &printf_style_subst("c", $format, $course);
- $format = &printf_style_subst("n", $format, $student);
-
- # If the user put %'s in the format string, they must be escaped
- # to \% else LaTeX will think they are comments and terminate
- # the line.. which is bad!!!
}
+ # An open question is how to handle long user formatted page headers...
+ # A possible future is to support e.g. %na so that the user can control
+ # the truncation of the elements that can appear in the header.
+ #
+ $format = &printf_style_subst("a", $format, $assignment);
+ $format = &printf_style_subst("c", $format, $course);
+ $format = &printf_style_subst("n", $format, $student);
+ $format = &printf_style_subst("s", $format, $section);
+
+
+ # If the user put %'s in the format string, they must be escaped
+ # to \% else LaTeX will think they are comments and terminate
+ # the line.. which is bad!!!
# If the user has role author, $course and $assignment are empty so
# there is '\\ \\ ' in the page header. That's cause a error in LaTeX
@@ -1117,9 +1251,6 @@ sub format_page_header {
my $testPrintout = '\\\\'.&mt('Authoring Space').' \\\\'.&mt('Test-Printout ');
$format =~ s/\\\\\s\\\\\s/$testPrintout/;
}
-
- return $format;
-
#
# We're going to trust LaTeX to break lines appropriately, but
# we'll truncate anything that's more than 3 lines worth of
@@ -1848,6 +1979,7 @@ sub get_course {
my $courseidinfo;
if (defined($env{'request.course.id'})) {
$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header');
+ my $sec = $env{'request.course.sec'};
}
return $courseidinfo;
@@ -1876,7 +2008,6 @@ sub page_format_transformation {
$name = &get_name();
}
my $courseidinfo = &get_course();
- if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
my $header_text = $parmhash{'print_header_format'};
$header_text = &format_page_header($textwidth, $header_text, $assignment,
$courseidinfo, $name);
@@ -2214,7 +2345,7 @@ sub print_page_in_course {
$form{'grade_target'} = 'tex';
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
- $form{'pdfFormFields'} = 'no'; #
+ $form{'pdfFormFields'} = $pdfFormFields; #
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'};
$form{'problem_split'}=$parmhash{'problem_stream_switch'};
@@ -2746,7 +2877,7 @@ ENDPART
my %form;
$form{'grade_target'} = 'tex';
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
- $form{'pdfFormFields'} = 'no';
+ $form{'pdfFormFields'} = $pdfFormFields;
# If form.showallfoils is set, then request all foils be shown:
# privilege will be enforced both by not allowing the
@@ -2885,9 +3016,10 @@ ENDPART
$result = &print_latex_header() . $result;
}
# End construction space sequence.
- } elsif ($cleanURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
+ } elsif ($cleanURL=~/\/(smppg|syllabus|aboutme|bulletinboard|ext\.tool)$/) {
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;}
+ if ($currentURL=~/\/ext\.tool$/) {$currentURL=~s/^\/adm\/wrapper//;}
$resources_printed .= $currentURL.':';
my $texversion = &ssi_with_retries($currentURL, $ssi_retry_count, %form);
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
@@ -3069,7 +3201,6 @@ ENDPART
if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
my $name = &get_name();
my $courseidinfo = &get_course();
- if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
$prevassignment=$assignment;
my $header_text = $parmhash{'print_header_format'};
$header_text = &format_page_header($textwidth, $header_text,
@@ -3084,9 +3215,10 @@ ENDPART
}
$result .= $texversion;
$flag_latex_header_remove = 'YES';
- } elsif ($urlp=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
+ } elsif ($urlp=~/\/(smppg|syllabus|aboutme|bulletinboard|ext\.tool)$/) {
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;}
+ if ($urlp=~/\/ext\.tool$/) {$urlp=~s/^\/adm\/wrapper//;}
$resources_printed .= $urlp.':';
my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form);
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
@@ -3147,7 +3279,9 @@ ENDPART
($print_type eq 'all_problems_students') ||
($print_type eq 'resources_for_students') ||
($print_type eq 'incomplete_problems_selpeople_course') ||
- ($print_type eq 'map_incomplete_problems_people_seq')){
+ ($print_type eq 'map_incomplete_problems_people_seq') ||
+ ($print_type eq 'select_sequences_problems_for_students') ||
+ ($print_type eq 'select_sequences_resources_for_students')) {
#-- prints assignments for whole class or for selected students
@@ -3156,10 +3290,12 @@ ENDPART
($print_type eq 'problems_for_students_from_page') ||
($print_type eq 'all_problems_students') ||
($print_type eq 'incomplete_problems_selpeople_course') ||
- ($print_type eq 'map_incomplete_problems_people_seq')) {
+ ($print_type eq 'map_incomplete_problems_people_seq') ||
+ ($print_type eq 'select_sequences_problems_for_students')) {
$selectionmade=5;
$type='problems';
- } elsif ($print_type eq 'resources_for_students') {
+ } elsif (($print_type eq 'resources_for_students') ||
+ ($print_type eq 'select_sequences_resources_for_students')) {
$selectionmade=8;
$type='resources';
}
@@ -3204,6 +3340,8 @@ ENDPART
($map, my $id, my $resource) =
&Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});
}
+ } elsif (($helper->{'VARS'}->{'postdata'} eq '/adm/navmaps') && ($perm{'pfo'})) {
+ $map = $helper->{'VARS'}->{'SEQUENCE'};
}
#loop over students
@@ -3266,7 +3404,9 @@ ENDPART
$result .= $print_array[0].' \end{document}';
} elsif (($print_type eq 'problems_for_anon') ||
($print_type eq 'problems_for_anon_page') ||
- ($print_type eq 'resources_for_anon') ) {
+ ($print_type eq 'resources_for_anon') ||
+ ($print_type eq 'select_sequences_problems_for_anon') ||
+ ($print_type eq 'select_sequences_resources_for_anon')) {
$selectionmade = 9;
my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
@@ -3295,6 +3435,8 @@ ENDPART
if ($helper->{VARS}{'symb'}) {
($map, my $id, my $resource) =
&Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
+ } elsif (($helper->{'VARS'}->{'postdata'} eq '/adm/navmaps') && ($perm{'pfo'})) {
+ $map = $helper->{'VARS'}->{'SEQUENCE'};
}
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'};
@@ -3525,6 +3667,9 @@ ENDPART
$URLback .= (($URLback =~ /\?/) ? '&':'?').'symb='.&escape($symb.$anchor);
}
}
+ } elsif (($helper->{VARS}->{'postdata'} eq '/adm/navmaps') &&
+ ($env{'request.course.id'})) {
+ $URLback=$helper->{VARS}->{'postdata'};
}
#
# Final adjustment of the font size:
@@ -3708,8 +3853,6 @@ sub print_resources {
my $assignment;
my $courseidinfo = &get_course();
my $possprint = scalar(@{$master_seq});
- if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
- if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection}
foreach my $curresline (@{$master_seq}) {
if (defined $page_breaks{$curresline}) {
@@ -3725,7 +3868,7 @@ sub print_resources {
if ( !($type eq 'problems' &&
($curresline!~ m/$LONCAPA::assess_page_re/)) ) {
- if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) {
+ if ($print_incomplete && !&incomplete($username, $userdomain, $usersection, $res_url)) {
next;
}
$actually_printed++; # we're going to print one.
@@ -3743,7 +3886,6 @@ sub print_resources {
$rendered = &print_latex_header().$rendered;
}
}
-;
if ($remove_latex_header eq 'YES') {
$rendered = &latex_header_footer_remove($rendered);
} else {
@@ -3758,7 +3900,7 @@ sub print_resources {
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
-
+
&Apache::lonxml::restore_problem_counter();
my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv);
@@ -3791,7 +3933,7 @@ sub print_resources {
$rendered =~ s/\\end\{document}//;
}
$current_output .= $rendered;
- } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
+ } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard|ext\.tool)$/) {
if ($i == 1) {
$syllabus_first = 1;
}
@@ -3832,7 +3974,7 @@ sub print_resources {
if (($assignment ne $current_assignment) && ($assignment ne "")) {
my $header_line = &format_page_header($LaTeXwidth, $parmhash{'print_header_format'},
$assignment, $courseidinfo,
- $fullname);
+ $fullname, $usersection);
my $header_start = ($columns_in_format == 1) ? '\lhead'
: '\fancyhead[LO]';
$header_line = $header_start.'{'.$header_line.'}';
@@ -3865,7 +4007,7 @@ sub print_resources {
$message = &mt('No incomplete resources');
}
if ($message) {
- $current_output = &encapsulate_minipage("\\vskip -10mm \n$message\n \\vskip 100 mm { }\n",$moreenv->{'problem_split'});
+ $current_output = &encapsulate_minipage("\\vskip -10mm \n$message\n \\vskip 100 mm { }\n",$moreenv->{'problem_split'});
}
if ($remove_latex_header eq "NO") {
$current_output = &print_latex_header() . $current_output;
@@ -3879,8 +4021,8 @@ sub print_resources {
}
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
my $header_line =
- &format_page_header($LaTeXwidth, $parmhash{'print_header_format'},
- $currentassignment, $courseidinfo, $fullname);
+ &format_page_header($LaTeXwidth, $parmhash{'print_header_format'},
+ $currentassignment, $courseidinfo, $fullname, $usersection);
my $header_start = ($columns_in_format == 1) ? '\lhead' : '\fancyhead[LO]';
my $newheader = $header_start.'{'.$header_line.'}';
if ($current_output=~/\\documentclass/) {
@@ -4102,7 +4244,9 @@ sub printHelper {
$helper->{VARS}->{'construction'} = 1;
} else {
if ($env{'form.postdata'}) {
- $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($env{'form.postdata'});
+ unless ($env{'form.postdata'} eq '/adm/navmaps') {
+ $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($env{'form.postdata'});
+ }
if ( $helper->{VARS}->{'symb'} eq '') {
$helper->{VARS}->{'postdata'} = $env{'form.postdata'};
}
@@ -4111,22 +4255,42 @@ sub printHelper {
$helper->{VARS}->{'symb'} = $env{'form.symb'};
}
if ($env{'form.url'}) {
- $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
+ unless ($env{'form.url'} eq '/adm/navmaps') {
+ $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
+ }
}
}
- if ($env{'form.symb'}) {
- $helper->{VARS}->{'symb'} = $env{'form.symb'};
- }
- if ($env{'form.url'}) {
- $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
-
- }
if ($helper->{VARS}->{'symb'} ne '') {
$helper->{VARS}->{'symb'}=
&Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});
}
- my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);
+ my ($resourceTitle,$sequenceTitle,$mapTitle,$cdom,$cnum);
+ if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
+ $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
+ "uploaded/$cdom/$cnum/default.sequence") {
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ if (ref($navmap)) {
+ my @toplevelres = $navmap->retrieveResources('',sub { !(($_[0]->is_map()) || ($_[0]->src =~ /^\/adm\/navmaps/)) },0,0);
+ if (@toplevelres) {
+ my @printable;
+ if ($perm{'pav'} || $perm{'pfo'}) {
+ @printable = @toplevelres;
+ } else {
+ @printable = $navmap->retrieveResources(undef,sub { $_[0]->resprintable() },0,1);
+ }
+ if (@printable) {
+ $sequenceTitle = 'Main Content';
+ $mapTitle = $sequenceTitle;
+ }
+ }
+ }
+ }
+ } else {
+ ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);
+ }
if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;}
# Extract map
@@ -4157,10 +4321,24 @@ sub printHelper {
($map, $id, $url) = &Apache::lonnet::decode_symb($symb);
$helper->{VARS}->{'postdata'} =
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url));
+ } elsif (($helper->{VARS}->{'postdata'} eq '/adm/navmaps') &&
+ ($env{'request.course.id'} ne '')) {
+ if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
+ "uploaded/$cdom/$cnum/default.sequence") {
+ $map = $env{'course.'.$env{'request.course.id'}.'.url'};
+ $url = $helper->{VARS}->{'postdata'};
+ }
+ }
+ if (($symb ne '') || ($map ne '')) {
if (!$userCanPrint) {
my $navmap = Apache::lonnavmaps::navmap->new();
if (ref($navmap)) {
- my $res = $navmap->getBySymb($symb);
+ my $res;
+ if ($symb ne '') {
+ $res = $navmap->getBySymb($symb);
+ } elsif ($map ne '') {
+ $res = $navmap->getResourceByUrl($map);
+ }
if (ref($res)) {
$res_printable = $res->resprintable(); #printability in course context
($res_printstartdate, $res_printenddate) = &get_print_dates($res);
@@ -4184,7 +4362,11 @@ sub printHelper {
my $postdata = $helper->{VARS}->{'postdata'};
$resourceTitle = substr($postdata, rindex($postdata, '/') + 1);
}
- $subdir = &Apache::lonnet::filelocation("", $url);
+ if (($url eq '/adm/navmaps') && ($map eq $env{'course.'.$env{'request.course.id'}.'.url'})) {
+ $res_printable=0;
+ } else {
+ $subdir = &Apache::lonnet::filelocation("", $url);
+ }
}
@@ -4221,7 +4403,7 @@ sub printHelper {
# Give that as a choice.
if ($resourceTitle && $res_printable) {
- push @{$printChoices}, ["$resourceTitle (".&mt('the resource you just saw on the screen').")", 'current_document', 'PAGESIZE'];
+ push(@{$printChoices}, ["$resourceTitle (".&mt('the resource you just saw on the screen').")", 'current_document', 'PAGESIZE']);
}
# Useful filter strings
@@ -4275,14 +4457,14 @@ sub printHelper {
my $resourcesymb = $page_resources[0]->symb();
my ($pagemap, $pageid, $pageurl) = &Apache::lonnet::decode_symb($symb);
if ($page_ispage) {
- push @{$printChoices},
+ push(@{$printChoices},
[&mt('Selected [_1]Problems[_2] from page [_3]', '', '', ''.$page_title.''),
'map_problems_in_page',
- 'CHOOSE_PROBLEMS_PAGE'];
- push @{$printChoices},
+ 'CHOOSE_PROBLEMS_PAGE']);
+ push(@{$printChoices},
[&mt('Selected [_1]Resources[_2] from page [_3]', '', '', ''.$page_title.''),
'map_resources_in_page',
- 'CHOOSE_RESOURCES_PAGE'];
+ 'CHOOSE_RESOURCES_PAGE']);
}
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE',
'Select Problem(s) to print',
@@ -4321,20 +4503,25 @@ sub printHelper {
# the exact form of this depends on whether or not we are privileged or a mere
# plebe of s student:
+ my $optionText = '';
my $printSelector = 'map_incomplete_problems_seq';
my $nextState = 'CHOOSE_INCOMPLETE_SEQ';
my $textSuffix = '';
+ my $nocurrloc = '';
+ if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
+ $nocurrloc = 1;
+ }
if ($userCanPrint) {
$printSelector = 'map_incomplete_problems_people_seq';
$nextState = 'CHOOSE_INCOMPLETE_PEOPLE_SEQ';
$textSuffix = ' for selected students';
my $helperStates =
- &create_incomplete_folder_selstud_helper($helper, $map);
+ &create_incomplete_folder_selstud_helper($helper, $map, $nocurrloc);
&Apache::lonxml::xmlparse($r, 'helper', $helperStates);
} else {
if (&printable($map_open, $map_close)) {
- my $helperStates = &create_incomplete_folder_helper($helper, $map); # Create needed states for student.
+ my $helperStates = &create_incomplete_folder_helper($helper, $map, $nocurrloc); # Create needed states for student.
&Apache::lonxml::xmlparse($r, 'helper', $helperStates);
} else {
# TODO: Figure out how to break the news...this folder is not printable.
@@ -4342,26 +4529,41 @@ sub printHelper {
}
if ($userCanPrint || &printable($map_open, $map_close)) {
+ if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
+ $optionText = &mt('Selected [_1]Incomplete Problems[_2] [_3]not in a folder[_4]' . $textSuffix,
+ '','','','');
+ } else {
+ $optionText = &mt('Selected [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix,
+ '','',''.$sequenceTitle.'');
+ }
push(@{$printChoices},
- [&mt('Selected [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix,
- '', '',
- ''. $sequenceTitle . ''),
+ [$optionText,
$printSelector,
$nextState]);
}
# Allow problems from sequence
if ($userCanPrint || &printable($map_open, $map_close)) {
- push @{$printChoices},
- [&mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.''),
+ if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
+ $optionText = &mt('Selected [_1]Problems[_2] [_3]not in a folder[_4]','','','','');
+ } else {
+ $optionText = &mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.'');
+ }
+ push(@{$printChoices},
+ [$optionText,
'map_problems',
- 'CHOOSE_PROBLEMS'];
+ 'CHOOSE_PROBLEMS']);
# Allow all resources from sequence
- push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','','',''.$sequenceTitle.''),
+ if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') {
+ $optionText = &mt('Selected [_1]Resources[_2] [_3]not in a folder[_4]','','','','');
+ } else {
+ $optionText = &mt('Selected [_1]Resources[_2] from folder [_3]','','',''.$sequenceTitle.'');
+ }
+ push(@{$printChoices}, [$optionText,
'map_problems_pages',
- 'CHOOSE_PROBLEMS_HTML'];
+ 'CHOOSE_PROBLEMS_HTML']);
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS',
'Select Problem(s) to print',
- 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'"',
'RESOURCES',
'PAGESIZE',
$map,
@@ -4370,7 +4572,7 @@ sub printHelper {
$start_new_option);
$helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML',
'Select Resource(s) to print',
- 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" suppressNavmap="1"',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'" suppressNavmap="1"',
'RESOURCES',
'PAGESIZE',
$map,
@@ -4393,7 +4595,8 @@ sub printHelper {
# BZ 5209 - incomplete problems from entire course:
push(@{$printChoices},
- [&mtn('Selected Incomplete Problems from entire course for selected people'),
+ [&mt('Selected [_1]Incomplete Problems[_2] from [_3]entire course[_4] for [_5]selected people[_6]',
+ '','','','','',''),
'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']);
my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states.
@@ -4401,9 +4604,9 @@ sub printHelper {
# Selected problems/resources from entire course:
- push @{$printChoices}, [&mtn('Selected Problems from entire course'), 'all_problems', 'ALL_PROBLEMS'];
- push @{$printChoices}, [&mtn('Selected Resources from entire course'), 'all_resources', 'ALL_RESOURCES'];
- push @{$printChoices}, [&mtn('Selected Problems from entire course for selected people'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS'];
+ push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from [_3]entire course[_4]','','','',''), 'all_problems', 'ALL_PROBLEMS']);
+ push(@{$printChoices}, [&mt('Selected [_1]Resources[_2] from [_3]entire course[_4]','','','',''), 'all_resources', 'ALL_RESOURCES']);
+ push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from [_3]entire course[_4] for [_5]selected people[_6]','','','','','',''), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS']);
my $suffixXml = <
Select sorting order of printout
@@ -4450,164 +4653,43 @@ ALL_PROBLEMS
# 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]',
+ push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]selected people[_5]',
'', '', ''.$page_title.'', '', ''),
- 'problems_for_students_from_page', 'CHOOSE_TGT_STUDENTS_PAGE'];
- push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]CODEd assignments[_5]',
+ 'problems_for_students_from_page', 'CHOOSE_TGT_STUDENTS_PAGE']);
+ push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]CODEd assignments[_5]',
'', '', ''.$page_title.'', '', ''),
- 'problems_for_anon_page', 'CHOOSE_ANON1_PAGE'];
+ 'problems_for_anon_page', 'CHOOSE_ANON1_PAGE']);
}
- push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]',
+ push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]',
'','',''.$sequenceTitle.'','',''),
- 'problems_for_students', 'CHOOSE_STUDENTS'];
- push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]',
+ 'problems_for_students', 'CHOOSE_STUDENTS']);
+ push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]',
'','',''.$sequenceTitle.'','',''),
- 'problems_for_anon', 'CHOOSE_ANON1'];
- }
-
- my $randomly_ordered_warning =
- &get_randomly_ordered_warning($helper, $map);
-
- # resource_selector will hold a few states that:
- # - Allow resources to be selected for printing.
- # - Determine pagination between assignments.
- # - Determine how many assignments should be bundled into a single PDF.
- # TODO:
- # Probably good to do things like separate this up into several vars, each
- # 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= &generate_resource_chooser('SELECT_PROBLEMS',
- 'Select resources to print',
- 'multichoice="1" addstatus="1" closeallpages="1" modallink="1" suppressNavmap="1"',
- 'RESOURCES',
- 'PRINT_FORMATTING',
- $map,
- $isProblem, '', $symbFilter,
- $start_new_option);
- $resource_selector .= &generate_format_selector($helper,
- 'How should results be printed?',
- 'PRINT_FORMATTING').
- &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
- 'Select Problem(s) to print',
- "multichoice='1' addstatus='1' closeallpages ='1' modallink='1'",
- 'RESOURCES',
- 'PRINT_FORMATTING',
- $url,
- $isProblem, '', $symbFilter,
- $start_new_option);
-
-
-# Generate student choosers.
-
-
-
- &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'};
- my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum);
- my $namechoice='';
- foreach my $name (sort {uc($a) cmp uc($b)} @names) {
- if ($name =~ /^error: 2 /) { next; }
- if ($name =~ /^type\0/) { next; }
- $namechoice.=''.$name.'';
- }
-
-
- my %code_values;
- my %codes_to_print;
- foreach my $key (@names) {
- %code_values = &Apache::grades::get_codes($key, $cdom, $cnum);
- foreach my $key (keys(%code_values)) {
- $codes_to_print{$key} = 1;
- }
- }
-
- my $code_selection;
- foreach my $code (sort {uc($a) cmp uc($b)} (keys(%codes_to_print))) {
- my $choice = $code;
- if ($code =~ /^[A-Z]+$/) { # Alpha code
- $choice = &letters_to_num($code);
- }
- push(@{$helper->{DATA}{ALL_CODE_CHOICES}},[$code,$choice]);
+ 'problems_for_anon', 'CHOOSE_ANON1']);
}
- if (%codes_to_print) {
- $code_selection .='
- Choose single CODE from list:
- |
-
-
-
- push(@{$state->{CHOICES}},@{$helper->{DATA}{ALL_CODE_CHOICES}});
-
-
- |
- '.$/;
-
- }
-
- my @lines = &Apache::lonnet::get_scantronformat_file();
- my $codechoice='';
- foreach my $line (@lines) {
- next if (($line =~ /^\#/) || ($line eq ''));
- my ($name,$description,$code_type,$code_length)=
- (split(/:/,$line))[0,1,2,4];
- if ($code_length > 0 &&
- $code_type =~/^(letter|number|-1)/) {
- $codechoice.=''.$description.'';
- }
- }
- if ($codechoice eq '') {
- $codechoice='Default';
- }
- 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' modallink='1'",
- 'RESOURCES',
- 'PRINT_FORMATTING',
- $url,
- $isProblem, '', $symbFilter,
- $start_new_option);
- &Apache::lonxml::xmlparse($r, 'helper', $anon_page);
+ my ($randomly_ordered_warning,$codechoice,$code_selection,$namechoice) =
+ &generate_common_choosers($r,$helper,$map,$url,$isProblem,$symbFilter,$start_new_option);
if ($helper->{VARS}->{'assignment'}) {
# Assignment printing:
- push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_students', 'CHOOSE_STUDENTS1'];
- push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_anon', 'CHOOSE_ANON2'];
+ push(@{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_students', 'CHOOSE_STUDENTS1']);
+ push(@{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_anon', 'CHOOSE_ANON2']);
}
+ # resource_selector will hold a few states that:
+ # - Allow resources to be selected for printing.
+ # - Determine pagination between assignments.
+ # - Determine how many assignments should be bundled into a single PDF.
+ # TODO:
+ # Probably good to do things like separate this up into several vars, each
+ # with one state, and use REGEXPs at inclusion time to set state names
+ # and next states for better mix and match capability
+ #
- $resource_selector=<
$randomly_ordered_warning
PRINT_FORMATTING
@@ -4703,18 +4785,19 @@ CHOOSE_ANON2
}
# FIXME: That RE should come from a library somewhere.
- if (($perm{'pav'}
+ if (($perm{'pav'}
+ && ($subdir ne '')
&& $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'
&& (defined($helper->{'VARS'}->{'construction'})
||
(&Apache::lonnet::allowed('bre',$subdir) eq 'F'
- &&
+ &&
$helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)
- ))
+ ))
&& $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'];
+ push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','','',''.$pretty_dir.'','',''), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']);
my $xmlfrag = <
@@ -4737,14 +4820,148 @@ CHOOSE_FROM_SUBDIR
# Allow the user to select any sequence in the course, feed it to
# another resource selector for that sequence
- if (!$helper->{VARS}->{'construction'} && !$is_published) {
- 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
- $escapedSequenceName =~ s/\\/\\\\/g;
- $escapedSequenceName =~ s/'/\\'/g;
- &Apache::lonxml::xmlparse($r, 'helper', <{VARS}->{'construction'}) &&
+ (!$is_published || (($subdir eq '') && ($url eq '/adm/navmaps')))) {
+ push(@$printChoices,[&mt('Selected [_1]Resources[_2] from [_3]selected folder[_4] in course',
+ '','','',''),
+ 'select_sequences','CHOOSE_SEQUENCE']);
+ my $escapedSequenceName;
+ if ($helper->{VARS}->{'SEQUENCE'} ne '') {
+ $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'};
+ } elsif (($subdir eq '') && ($url eq '/adm/navmaps')) {
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
+ "uploaded/$cdom/$cnum/default.sequence") {
+ $escapedSequenceName = $env{'course.'.$env{'request.course.id'}.'.url'};
+ }
+ }
+ #Escape apostrophes and backslashes for Perl
+ $escapedSequenceName =~ s/\\/\\\\/g;
+ $escapedSequenceName =~ s/'/\\'/g;
+ my $nocurrloc;
+ if (($subdir eq '') && ($url eq '/adm/navmaps')) {
+ $nocurrloc = 'nocurrloc="1"';
+ if ($perm{'pfo'}) {
+ push(@{$printChoices},
+ [&mt('Selected [_1]Problems[_2] from [_3]selected folder[_4] in course for [_5]selected people[_6]',
+ '','','','','',''),
+ 'select_sequences_problems_for_students','CHOOSE_SEQUENCE_STUDENTS'],
+ [&mt('Selected [_1]Problems[_2] from [_3]selected folder[_4] in course for [_5]CODEd assignments[_6]',
+ '','','','','',''),
+ 'select_sequences_problems_for_anon','CHOOSE_SEQUENCE_ANON1'],
+ [&mt('Selected [_1]Resources[_2] from [_3]selected folder[_4] in course for [_5]selected people[_6]',
+ '','','','','',''),
+ 'select_sequences_resources_for_students','CHOOSE_SEQUENCE_STUDENTS1'],
+ [&mt('Selected [_1]Resources[_2] from [_3]selected folder[_4] in course for [_5]CODEd assignments[_6]',
+ '','','','','',''),
+ 'select_sequences_resources_for_anon','CHOOSE_SEQUENCE_ANON2']);
+ if ($escapedSequenceName) {
+ my ($randomly_ordered_warning,$codechoice,$code_selection,$namechoice) =
+ &generate_common_choosers($r,$helper,$escapedSequenceName,$escapedSequenceName,
+ $isProblem,$symbFilter,$start_new_option);
+
+ my $resource_selector = <
+
+ Sort by section then student
+ Sort by students across sections.
+
+
+
+
+
+
+ $randomly_ordered_warning
+ PRINT_FORMATTING
+ (mark desired resources then click "next" button)
+
+ return $isNotMap;
+ $escapedSequenceName
+ return $symbFilter;
+ $start_new_option
+
+
+RESOURCE_SELECTOR
+
+ my $anon3 = &generate_code_selector($helper,
+ 'CHOOSE_ANON3',
+ 'SELECT_RESOURCES',
+ $codechoice,
+ $code_selection,
+ $namechoice) . $resource_selector;
+
+ &Apache::lonxml::xmlparse($r, 'helper',$anon3);
+ }
+ }
+ }
+ if (($subdir eq '') && ($url eq '/adm/navmaps') && ($perm{'pfo'})) {
+ &Apache::lonxml::xmlparse($r, 'helper', <
+ Select the sequence to print resources from:
+
+ CHOOSE_FROM_ANY_SEQUENCE
+ return &Apache::lonprintout::printable_sequence(\$res);
+ return $urlValue;
+ return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
+
+
+
+
+ Select the sequence to print resources from:
+
+ CHOOSE_STUDENTS
+ return &Apache::lonprintout::printable_sequence(\$res);
+ return $urlValue;
+ return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
+
+
+
+
+ Select the sequence to print resources from:
+
+ CHOOSE_ANON1
+ return &Apache::lonprintout::printable_sequence(\$res);
+ return $urlValue;
+ return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
+
+
+
+
+ Select the sequence to print resources from:
+
+ CHOOSE_STUDENTS2
+ return &Apache::lonprintout::printable_sequence(\$res);
+ return $urlValue;
+ return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
+
+
+
+
+ Select the sequence to print resources from:
+
+ CHOOSE_ANON3
+ return &Apache::lonprintout::printable_sequence(\$res);
+ return $urlValue;
+ return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
+
+
+
+
+ (mark desired resources then click "next" button)
+
+ PAGESIZE
+ return $isNotMap
+ return '$escapedSequenceName';
+ return $symbFilter;
+ $start_new_option
+
+
+CHOOSE_FROM_ANY_SEQUENCE
+ } else {
+ &Apache::lonxml::xmlparse($r, 'helper', <
Select the sequence to print resources from:
@@ -4758,7 +4975,7 @@ CHOOSE_FROM_SUBDIR
(mark desired resources then click "next" button)
+ closeallpages="1" modallink="1" suppressNavmap="1" $nocurrloc>
PAGESIZE
return $isNotMap
return '$escapedSequenceName';
@@ -4767,8 +4984,8 @@ CHOOSE_FROM_SUBDIR
CHOOSE_FROM_ANY_SEQUENCE
-}
-
+ }
+ }
my $numchoices = 0;
if (ref($printChoices) eq 'ARRAY') {
$numchoices = @{$printChoices};
@@ -4814,9 +5031,9 @@ CHOOSE_FROM_ANY_SEQUENCE
if ($noprintmsg) {
$paramHash = Apache::lonhelper::getParamHash();
- $paramHash->{MESSAGE_TEXT} =
+ $paramHash->{MESSAGE_TEXT} =
''.$noprintmsg.' ';
- Apache::lonhelper::message->new();
+ Apache::lonhelper::message->new();
}
}
$paramHash = Apache::lonhelper::getParamHash();
@@ -4831,7 +5048,7 @@ CHOOSE_FROM_ANY_SEQUENCE
my $startedTable = 0; # have we started an HTML table yet? (need
# to close it later)
- if (($perm{'pav'} and $perm{'vgr'}) or
+ if (($perm{'pav'} and $perm{'vgr'}) or
($helper->{VARS}->{'construction'} eq '1')) {
&addMessage(' '
.''.&mt('Print Options').''
@@ -5041,7 +5258,7 @@ FONT_SELECTION
return "$helper->{VARS}->{'probstatus'}";
Homework Problem
- Exam Problem
+ Bubblesheet Exam Problem
Survey question
,choice computer="anonsurvey"Anonymous survey question
@@ -5159,6 +5376,9 @@ sub render {
my $PaperType=&mt('Paper type');
my $landscape=&mt('Landscape');
my $portrait=&mt('Portrait');
+ my $pdfFormLabel=&mt('PDF Form Fields');
+ my $with=&mt('with Form Fields');
+ my $without=&mt('without Form Fields');
$result.=''.&mt('Layout Options').''
@@ -5167,6 +5387,7 @@ sub render {
.''.$PageLayout.' | '
.''.$NumberOfColumns.' | '
.''.$PaperType.' | '
+ .''.$pdfFormLabel.' | '
.&Apache::loncommon::end_data_table_header_row()
.&Apache::loncommon::start_data_table_row()
.''
@@ -5207,6 +5428,12 @@ sub render {
$result .= <
|
+
+
+ |
HTML
$result.=&Apache::loncommon::end_data_table_row()
.&Apache::loncommon::end_data_table();
|