--- loncom/interface/lonprintout.pm 2019/02/05 19:03:38 1.627.2.23.2.1
+++ loncom/interface/lonprintout.pm 2024/07/01 18:38:41 1.627.2.33
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.627.2.23.2.1 2019/02/05 19:03:38 raeburn Exp $
+# $Id: lonprintout.pm,v 1.627.2.33 2024/07/01 18:38:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -157,7 +157,7 @@ sub create_incomplete_folder_selstud_hel
my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_PEOPLE_SEQ',
'Select problem(s) to print',
- 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
'RESOURCES',
'CHOOSE_STUDENTS_INCOMPLETE',
$map,
@@ -206,7 +206,7 @@ sub create_incomplete_course_helper {
my $resource_chooser = &generate_resource_chooser('INCOMPLETE_PROBLEMS_COURSE_RESOURCES',
'Select problem(s) to print',
- 'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1"',
+ 'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1" modallink="1"',
'RESOURCES',
'INCOMPLETE_PROBLEMS_COURSE_STUDENTS',
'',
@@ -252,7 +252,7 @@ sub create_incomplete_folder_helper {
my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_SEQ',
'Select problem(s) to print',
- 'multichoice="1", toponly ="1", addstatus="1", closeallpages="1"',
+ 'multichoice="1", toponly ="1", addstatus="1", closeallpages="1" modallink="1"',
'RESOURCES',
'PAGESIZE',
$map,
@@ -306,7 +306,8 @@ CHOOSE_STUDENTS
# 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'"
+# "multichoice='1', toponly='1', addstatus='1',
+# modallink='1'"
# that control the selection and appearance of the
# resource selector.
# variable - Name of the variable to hold the choice
@@ -847,8 +848,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;
@@ -2075,16 +2076,28 @@ sub get_textwidth {
sub unsupported {
my ($currentURL,$mode,$symb)=@_;
+ my $cleanURL=&Apache::lonenc::check_decrypt($currentURL);
+ my $shown = $currentURL;
+ if (($cleanURL ne $currentURL) || ($symb =~ m{/^enc/})) {
+ $shown = &mt('URL not shown (encrypted)');
+ }
if ($mode ne '') {$mode='\\'.$mode}
- my $result.= &print_latex_header($mode);
- if ($currentURL=~m|^(/adm/wrapper/)?ext/|) {
- $currentURL=~s|^(/adm/wrapper/)?ext/|http://|;
- $currentURL=~s|^http://https://|https://|;
- my $title=&Apache::lonnet::gettitle($symb);
- $title = &Apache::lonxml::latex_special_symbols($title);
- $result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' ';
+ my $result = &print_latex_header($mode);
+ if ($cleanURL=~m|^(/adm/wrapper/)?ext/|) {
+ $cleanURL=~s|^(/adm/wrapper/)?ext/|http://|;
+ $cleanURL=~s|^http://https://|https://|;
+ if ($shown eq $currentURL) {
+ $shown = &Apache::lonxml::latex_special_symbols($cleanURL);
+ }
+ my $title=&Apache::lonnet::gettitle($symb);
+ $title = &Apache::lonxml::latex_special_symbols($title);
+ $result.=' \strut \\\\ \textit{'.$title.'} \strut \\\\ '.$shown.' ';
} else {
- $result.=$currentURL;
+ if ($shown eq $currentURL) {
+ $result.=&Apache::lonxml::latex_special_symbols($currentURL);
+ } else {
+ $result.=$shown;
+ }
}
$result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}';
return $result;
@@ -2122,19 +2135,12 @@ sub print_page_in_course {
$numberofcolumns);
my $LaTeXwidth=&recalcto_mm($textwidth);
-
if ($mode ne '') {$mode='\\'.$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);
- $title = &Apache::lonxml::latex_special_symbols($title);
- } else {
- my $esc_currentURL= $currentURL;
- $esc_currentURL =~ s/_/\\_/g;
- $result.=$esc_currentURL;
- }
- $result .= '\\\\';
+
+ my $title=&Apache::lonnet::gettitle($currentURL);
+ $title = &Apache::lonxml::latex_special_symbols($title);
+ $result .= '\noindent\textit{'.$title.'}\\\\';
if ($helper->{'VARS'}->{'style_file'}=~/\w/) {
&Apache::lonnet::appenv({'construct.style' =>
@@ -2150,7 +2156,7 @@ sub print_page_in_course {
foreach my $resource (@page_resources) {
my $resource_src = $resource->src(); # Essentially the URL of the resource.
- $result .= $resource->title() . '\\\\';
+ my $current_url = $resource->link();
# Recurse if a .page:
@@ -2160,11 +2166,10 @@ sub print_page_in_course {
$result .= &print_page_in_course($helper, $rparmhash,
$resource_src, \@page_resources);
} elsif ($resource->ext()) {
- $result .= &unsupported($currentURL,$mode,$symb);
- }
- # these resources go through the XML transformer:
-
- elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) {
+ $result.=&latex_header_footer_remove(&unsupported($current_url,$mode,$resource->symb));
+ } elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) {
+ # these resources go through the XML transformer:
+ $result .= &Apache::lonxml::latex_special_symbols($resource->title()) . '\\\\';
my $urlp = &Apache::lonnet::clutter($resource_src);
@@ -2940,7 +2945,6 @@ ENDPART
&Apache::lonenc::reset_enc();
-
# Note due to document structure, not allowed to put \newpage
# prior to the first resource
@@ -3166,8 +3170,12 @@ ENDPART
my $map;
if ($helper->{VARS}->{'symb'}) {
- ($map, my $id, my $resource) =
- &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});
+ unless ((($print_type eq 'all_problems_students') ||
+ ($print_type eq 'incomplete_problems_selpeople_course')) &&
+ $perm{'pfo'}) {
+ ($map, my $id, my $resource) =
+ &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});
+ }
}
#loop over students
@@ -3251,18 +3259,10 @@ ENDPART
}
}
}
- my ($randomorder,$randompick,$map);
+ my $map;
if ($helper->{VARS}{'symb'}) {
($map, my $id, my $resource) =
&Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (defined($navmap)) {
- if ($map) {
- my $mapres = $navmap->getResourceByUrl($map);
- $randomorder = $mapres->randomorder();
- $randompick = $mapres->randompick();
- }
- }
}
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'};
@@ -3331,14 +3331,11 @@ ENDPART
} else {
$moreenv{'CODE'}=&num_to_letters($code);
}
- my $actual_seq = \@master_seq;
- if ($randomorder || $randompick) {
- $env{'form.CODE'} = $moreenv{'CODE'};
- $actual_seq = master_seq_to_person_seq($map, \@master_seq,
- undef,
- $moreenv{'CODE'}, $nohidemap);
- delete($env{'form.CODE'});
- }
+ $env{'form.CODE'} = $moreenv{'CODE'};
+ my $actual_seq = master_seq_to_person_seq($map, \@master_seq,
+ undef,
+ $moreenv{'CODE'}, $nohidemap);
+ delete($env{'form.CODE'});
my ($output,$fullname, $printed)=
&print_resources($r,$helper,'anonymous',$type,\%moreenv,
$actual_seq,$flag_latex_header_remove,
@@ -3454,12 +3451,38 @@ ENDPART
$URLback=$helper->{'VARS'}->{'filename'};
} elsif ($helper->{VARS}{'symb'}) {
my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
+ my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
+ my ($anchor,$usehttp,$plainurl);
$url = &Apache::lonnet::clutter($url);
+ $plainurl = $url;
+ if (($ENV{'SERVER_PORT'} == 443) && ($env{'request.course.id'}) &&
+ (($url =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) ||
+ ($url =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}))) {
+ unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl())) {
+ $usehttp = 1;
+ }
+ }
if ($env{'request.enc'}) {
$url = &Apache::lonenc::encrypted($url);
}
if ($url ne '') {
- $URLback = $url.(($url =~ /\?/) ? '&':'?').'symb='.$helper->{VARS}{'symb'};
+ my $symb = $helper->{VARS}{'symb'};
+ if ($url =~ m{^\Q/adm/wrapper/ext/\E}) {
+ my $link = $url;
+ ($link,$anchor) = ($url =~ /^([^\#]+)(?:|(\#[^\#]+))$/);
+ if ($anchor) {
+ ($symb) = ($helper->{VARS}{'symb'} =~ /^([^\#]+)/);
+ }
+ $url = $link;
+ }
+ $URLback = $url;
+ if ($usehttp) {
+ $URLback .= (($URLback =~ /\?/) ? '&':'?').'usehttp=1';
+ }
+ unless ($plainurl =~ /\.page$/) {
+ $URLback .= (($URLback =~ /\?/) ? '&':'?').'symb='.&escape($symb.$anchor);
+ }
}
}
#
@@ -3864,8 +3887,9 @@ sub handler {
if ($env{'request.course.id'}) {
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my $clientip = &Apache::lonnet::get_requestor_ip($r);
my ($blocked,$blocktext) =
- &Apache::loncommon::blocking_status('printout',$cnum,$cdom);
+ &Apache::loncommon::blocking_status('printout',$clientip,$cnum,$cdom);
if ($blocked) {
my $checkrole = "cm./$cdom/$cnum";
if ($env{'request.course.sec'} ne '') {
@@ -4062,6 +4086,7 @@ sub printHelper {
}
if ($env{'form.url'}) {
$helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
+
}
if ($helper->{VARS}->{'symb'} ne '') {
$helper->{VARS}->{'symb'}=
@@ -4103,7 +4128,7 @@ sub printHelper {
my $navmap = Apache::lonnavmaps::navmap->new();
if (ref($navmap)) {
my $res = $navmap->getBySymb($symb);
- if (ref($res)) {
+ if (ref($res)) {
$res_printable = $res->resprintable(); #printability in course context
($res_printstartdate, $res_printenddate) = &get_print_dates($res);
($course_open, $course_close) = &course_print_dates($res);
@@ -4230,7 +4255,7 @@ sub printHelper {
}
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE',
'Select Problem(s) to print',
- "multichoice='1' toponly='1' addstatus='1' closeallpages='1'",
+ "multichoice='1' toponly='1' addstatus='1' closeallpages='1' modallink='1'",
'RESOURCES',
'PAGESIZE',
$url,
@@ -4240,7 +4265,7 @@ sub printHelper {
$helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE',
'Select Resource(s) to print',
- 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
'RESOURCES',
'PAGESIZE',
$url,
@@ -4305,7 +4330,7 @@ sub printHelper {
'CHOOSE_PROBLEMS_HTML'];
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS',
'Select Problem(s) to print',
- 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
'RESOURCES',
'PAGESIZE',
$map,
@@ -4314,7 +4339,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"',
+ 'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
'RESOURCES',
'PAGESIZE',
$map,
@@ -4362,7 +4387,7 @@ ALL_PROBLEMS
&Apache::lonxml::xmlparse($r, 'helper',
&generate_resource_chooser('ALL_PROBLEMS',
'Select Problem(s) to print',
- 'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',
+ 'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1" modallink="1"',
'RESOURCES',
'PAGESIZE',
'',
@@ -4371,7 +4396,7 @@ ALL_PROBLEMS
$start_new_option) .
&generate_resource_chooser('ALL_RESOURCES',
'Select Resource(s) to print',
- " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1'",
+ " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1' modallink='1'",
'RESOURCES',
'PAGESIZE',
'',
@@ -4379,7 +4404,7 @@ ALL_PROBLEMS
$start_new_option) .
&generate_resource_chooser('ALL_PROBLEMS_STUDENTS',
'Select Problem(s) to print',
- 'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',
+ 'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1" modallink="1"',
'RESOURCES',
'STUDENTS1',
'',
@@ -4423,7 +4448,7 @@ ALL_PROBLEMS
#
my $resource_selector= &generate_resource_chooser('SELECT_PROBLEMS',
'Select resources to print',
- 'multichoice="1" addstatus="1" closeallpages="1"',
+ 'multichoice="1" addstatus="1" closeallpages="1" modallink="1"',
'RESOURCES',
'PRINT_FORMATTING',
$map,
@@ -4434,7 +4459,7 @@ ALL_PROBLEMS
'PRINT_FORMATTING').
&generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
'Select Problem(s) to print',
- "multichoice='1' addstatus='1' closeallpages ='1'",
+ "multichoice='1' addstatus='1' closeallpages ='1' modallink='1'",
'RESOURCES',
'PRINT_FORMATTING',
$url,
@@ -4532,7 +4557,7 @@ ALL_PROBLEMS
$namechoice) .
&generate_resource_chooser('SELECT_PROBLEMS_PAGE',
'Select Problem(s) to print',
- "multichoice='1' addstatus='1' closeallpages ='1'",
+ "multichoice='1' addstatus='1' closeallpages ='1' modallink='1'",
'RESOURCES',
'PRINT_FORMATTING',
$url,
@@ -4556,7 +4581,7 @@ ALL_PROBLEMS
PRINT_FORMATTING
Select resources for the assignment
+ closeallpages="1" modallink="1">
return $isNotMap;
$map
return $symbFilter;
@@ -4701,7 +4726,7 @@ CHOOSE_FROM_SUBDIR
(mark desired resources then click "next" button)
+ closeallpages="1" modallink="1">
PAGESIZE
return $isNotMap
return '$escapedSequenceName';
@@ -4806,7 +4831,7 @@ CHOOSE_FROM_ANY_SEQUENCE
my $xmlfrag = << "FONT_SELECTION";
-
+
return 'normalsize';