version 1.616, 2012/05/28 10:31:17
|
version 1.627.2.16, 2016/08/06 20:52:43
|
Line 27
|
Line 27
|
# |
# |
package Apache::lonprintout; |
package Apache::lonprintout; |
use strict; |
use strict; |
use POSIX; |
|
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::lonnet; |
use Apache::lonnet; |
Line 47 use File::Basename;
|
Line 46 use File::Basename;
|
|
|
use HTTP::Response; |
use HTTP::Response; |
use LONCAPA::map(); |
use LONCAPA::map(); |
use POSIX qw(ctime); |
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use Carp; |
use Carp; |
use LONCAPA; |
use LONCAPA; |
Line 102 sub printable_sequence {
|
Line 100 sub printable_sequence {
|
|
|
if ($res->is_sequence()) { |
if ($res->is_sequence()) { |
my $symb = $res->symb(); |
my $symb = $res->symb(); |
&Apache::lonnet::logthis("Symb: $symb"); |
|
my $navmap = $res->{NAV_MAP}; |
my $navmap = $res->{NAV_MAP}; |
|
|
# Find the first resource in the map: |
# Find the first resource in the map: |
Line 111 sub printable_sequence {
|
Line 108 sub printable_sequence {
|
my $first = $iterator->next(); |
my $first = $iterator->next(); |
|
|
while (1) { |
while (1) { |
if ($first == $iterator->END_ITERATOR) { |
if ($first == $iterator->END_ITERATOR) { last; } |
&Apache::lonnet::logthis("End of iterator"); |
|
last; } |
|
if (ref($first)) { |
|
&Apache::lonnet::logthis("Looking at: " . $first->symb()); |
|
} else { |
|
&Apache::lonnet::logthis("Got: $first"); |
|
} |
|
if (ref($first) && ! $first->is_sequence()) {last; } |
if (ref($first) && ! $first->is_sequence()) {last; } |
$first = $iterator->next(); |
$first = $iterator->next(); |
} |
} |
Line 127 sub printable_sequence {
|
Line 117 sub printable_sequence {
|
# Might be an empty map: |
# Might be an empty map: |
|
|
if (!ref($first)) { |
if (!ref($first)) { |
&Apache::lonnet::logthis("printable_sequence: empty"); |
|
return 0; |
return 0; |
} |
} |
my $partsref = $first->parts(); |
my $partsref = $first->parts(); |
my @parts = @$partsref; |
my @parts = @$partsref; |
&Apache::lonnet::logthis("Dates for " . $first->symb()); |
|
my ($open, $close) = $navmap->map_printdates($first, $parts[0]); |
my ($open, $close) = $navmap->map_printdates($first, $parts[0]); |
&Apache::lonnet::logthis("Opens $open, closes $close"); |
|
&Apache::lonnet::logthis(ctime($open)); |
|
&Apache::lonnet::logthis(ctime($close)); |
|
return &printable($open, $close); |
return &printable($open, $close); |
} |
} |
return 0; |
return 0; |
Line 162 sub printable_sequence {
|
Line 147 sub printable_sequence {
|
# Return: |
# Return: |
# XML that can be parsed by the helper to drive the state machine. |
# XML that can be parsed by the helper to drive the state machine. |
# |
# |
sub create_incomplete_folder_selstud_helper($helper) |
sub create_incomplete_folder_selstud_helper { |
{ |
|
my ($helper, $map) = @_; |
my ($helper, $map) = @_; |
|
|
|
|
Line 508 RESOURCE_SELECTOR
|
Line 492 RESOURCE_SELECTOR
|
# |
# |
# @return ($open, $close) |
# @return ($open, $close) |
# |
# |
# @note If open/close dates are not defined they will be retunred as undef |
# @note If open/close dates are not defined they will be returned as undef |
# @note It is possible for there to be no overlap in which case -1,-1 |
# @note It is possible for there to be no overlap in which case -1,-1 |
# will be returned. |
# will be returned. |
# @note The algorithm used is to take the latest open date and the earliest end date. |
# @note The algorithm used is to take the latest open date and the earliest end date. |
Line 538 sub compute_open_window {
|
Line 522 sub compute_open_window {
|
|
|
# If no overlap...both are -1 as promised. |
# If no overlap...both are -1 as promised. |
|
|
if (defined($earliest_close) && defined($latest_open) |
if (($earliest_close ne '') && ($latest_open ne '') |
&& ($earliest_close < $latest_open)) { |
&& ($earliest_close < $latest_open)) { |
$latest_open = -1; |
$latest_open = -1; |
$earliest_close = -1; |
$earliest_close = -1; |
Line 586 sub printable {
|
Line 570 sub printable {
|
# |
# |
# @return (opendate, closedate) |
# @return (opendate, closedate) |
# |
# |
# @note If open/close dates are not defined they will be retunred as undef |
# @note If open/close dates are not defined they will be returned as undef |
# @note It is possible for there to be no overlap in which case -1,-1 |
# @note It is possible for there to be no overlap in which case -1,-1 |
# will be returned. |
# will be returned. |
# @note The algorithm used is to take the latest open date and the earliest end date. |
# @note The algorithm used is to take the latest open date and the earliest end date. |
# |
# For consistency with &printable() in lonnavmaps.pm determination of start |
|
# date for printing checks printstartdate param first, then, if not set, |
|
# opendate param, then, if not set, contentopen param. |
|
|
|
|
sub get_print_dates { |
sub get_print_dates { |
my $res = shift; |
my $res = shift; |
my $partsref = $res->parts(); |
my $partsref = $res->parts(); |
my @parts = @$partsref; |
my @parts; |
|
if (ref($partsref) eq 'ARRAY') { |
|
@parts = @{$partsref}; |
|
} |
my $open_date; |
my $open_date; |
my $close_date; |
my $close_date; |
my @open_dates; |
my @open_dates; |
my @close_dates; |
my @close_dates; |
|
|
|
|
if (defined(@parts) && (scalar(@parts) > 0)) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my $partopen = $res->parmval('printstartdate', $part); |
my $partopen = $res->parmval('printstartdate', $part); |
my $partclose = $res->parmval('printenddate', $part); |
my $partclose = $res->parmval('printenddate', $part); |
|
if (!$partopen) { |
|
$partopen = $res->parmval('opendate',$part); |
|
} |
|
if (!$partopen) { |
|
$partopen = $res->parmval('contentopen',$part); |
|
} |
|
if ($partopen) { |
|
push(@open_dates, $partopen); |
|
} |
|
if ($partclose) { |
|
push(@close_dates, $partclose); |
|
} |
push(@open_dates, $partopen); |
push(@open_dates, $partopen); |
push(@close_dates, $partclose); |
push(@close_dates, $partclose); |
} |
} |
Line 614 sub get_print_dates {
|
Line 615 sub get_print_dates {
|
|
|
($open_date, $close_date) = &compute_open_window(\@open_dates, \@close_dates); |
($open_date, $close_date) = &compute_open_window(\@open_dates, \@close_dates); |
|
|
if ($open_date) { |
|
$open_date = POSIX::strftime('%D', localtime($open_date)); |
|
} |
|
if ($close_date) { |
|
$close_date = POSIX::strftime('%D', localtime($close_date)); |
|
} |
|
|
|
return ($open_date, $close_date); |
return ($open_date, $close_date); |
} |
} |
|
|
Line 645 sub course_print_dates {
|
Line 639 sub course_print_dates {
|
|
|
# Don't bother looping over undefined or empty parts arraY; |
# Don't bother looping over undefined or empty parts arraY; |
|
|
if (defined(@parts) && (scalar(@parts) > 0)) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my ($partopen, $partclose) = $navmap->course_printdates($res, $part); |
my ($partopen, $partclose) = $navmap->course_printdates($res, $part); |
push(@open_dates, $partopen); |
push(@open_dates, $partopen); |
Line 671 sub map_print_dates {
|
Line 665 sub map_print_dates {
|
|
|
# Don't bother looping over undefined or empty parts arraY; |
# Don't bother looping over undefined or empty parts arraY; |
|
|
if (defined(@parts) && (scalar(@parts) > 0)) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my ($partopen, $partclose) = $navmap->map_printdates($res, $part); |
my ($partopen, $partclose) = $navmap->map_printdates($res, $part); |
push(@open_dates, $partopen); |
push(@open_dates, $partopen); |
Line 707 sub incomplete {
|
Line 701 sub incomplete {
|
} |
} |
} |
} |
# |
# |
# When printing for students, the resoures and order of the |
# When printing for students, the resources and order of the |
# resources may need to be altered if there are folders with |
# resources may need to be altered if there are folders with |
# random selectiopn or random ordering (or both) enabled. |
# random selectiopn or random ordering (or both) enabled. |
# This sub computes the set of resources to print for a student |
# This sub computes the set of resources to print for a student |
# modified both by random ordering and selection and filtered |
# modified both by random ordering and selection and filtered |
# to only those that are in the original set selcted to be printed. |
# to only those that are in the original set selected to be printed. |
# |
# |
# Parameters: |
# Parameters: |
# $helper - The helper we need $helper->{'VARS'}->{'symb'} |
# $map - The URL of the folder being printed. |
# to construct the navmap and the iteration. |
# Used to determine which startResource and finishResource |
# $seq - The original set of resources to print |
# to use when using the navmap's getIterator method. |
|
# $seq - The original set of resources to print. |
# (really an array of resource names (array of symb's). |
# (really an array of resource names (array of symb's). |
# $who - Student/domain for whome the sequence will be generated. |
# $who - Student/domain for whome the sequence will be generated. |
|
# $code - CODE being printed when printing Problems/Resources |
|
# from folder for CODEd assignments |
|
# $nohidemap - If true, parameter in map for hiddenresource will be |
|
# ignored. The user calling the routine should have |
|
# both the pav and vgr privileges if this is set to true). |
# |
# |
# Implicit inputs: |
# Implicit inputs: |
# $ |
# $ |
Line 728 sub incomplete {
|
Line 728 sub incomplete {
|
# print_resources. |
# print_resources. |
# |
# |
sub master_seq_to_person_seq { |
sub master_seq_to_person_seq { |
my ($helper, $seq, $who) = @_; |
my ($map, $seq, $who, $code, $nohidemap) = @_; |
|
|
|
|
my ($username, $userdomain, $usersection) = split(/:/, $who); |
my ($username, $userdomain, $usersection) = split(/:/, $who); |
|
|
|
|
# Toss the sequence up into a hash so that we have O(1) lookup time. |
# Toss the sequence up into a hash so that we have O(1) lookup time. |
# on the items that come out of the user's list of resources. |
# on the items that come out of the user's list of resources. |
# |
# |
|
|
my %seq_hash = map {$_ => 1} @$seq; |
my %seq_hash = map {$_ => 1} @$seq; |
my @output_seq; |
my @output_seq; |
|
|
|
my $unhidden; |
|
if ($nohidemap) { |
|
$unhidden = &Apache::lonnet::clutter($map); |
|
} |
|
|
my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'}); |
my $navmap = Apache::lonnavmaps::navmap->new($username, $userdomain, |
my $navmap = Apache::lonnavmaps::navmap->new($username, $userdomain); |
$code,$unhidden); |
my $iterator = $navmap->getIterator($navmap->firstResource(), |
my ($start,$finish); |
$navmap->finishResource(), |
|
{}, 1); |
if ($map) { |
my %nonResourceItems = ( |
my $mapres = $navmap->getResourceByUrl($map); |
$iterator->BEGIN_MAP => 1, |
if ($mapres->is_map()) { |
$iterator->BEGIN_BRANCH => 1, |
$start = $mapres->map_start(); |
$iterator->END_BRANCH => 1, |
$finish = $mapres->map_finish(); |
$iterator->END_MAP => 1, |
} |
$iterator->FORWARD => 1, |
} |
$iterator->BACKWARD => 1 |
unless ($start && $finish) { |
|
$start = $navmap->firstResource(); |
|
$finish = $navmap->finishResource(); |
|
} |
|
|
); # These items are not resources but appear in the midst of iteration. |
my $iterator = $navmap->getIterator($start,$finish,{},1); |
|
|
# Iterate on the resource..select the items that are randomly selected |
# Iterate on the resource..select the items that are randomly selected |
# and that are in the seq_has. Presumably the iterator will take care |
# and that are in the seq_has. Presumably the iterator will take care |
# of the random ordering part of the deal. |
# of the random ordering part of the deal. |
# |
|
my $curres; |
my $curres; |
while ($curres = $iterator->next()) { |
while ($curres = $iterator->next()) { |
# |
# |
# Only process resources..that are not removed by randomout... |
# Only process resources..that are not removed by randomout... |
# and are selected for printint as well. |
# and are selected for printint as well. |
# |
# |
|
|
if (! exists $nonResourceItems{$curres} && ! $curres->randomout()) { |
if (ref($curres) && ! $curres->randomout()) { |
my $symb = $curres->symb(); |
my $currsymb = $curres->symb(); |
if (exists $seq_hash{$symb}) { |
if (exists($seq_hash{$currsymb})) { |
push(@output_seq, $symb); |
push(@output_seq, $currsymb); |
} |
} |
} |
} |
} |
} |
|
|
|
|
return \@output_seq; # for now. |
return \@output_seq; # for now. |
|
|
Line 1054 sub printf_style_subst {
|
Line 1059 sub printf_style_subst {
|
# %s - The section if it is supplied. |
# %s - The section if it is supplied. |
# |
# |
sub format_page_header { |
sub format_page_header { |
my ($width, $format, $assignment, $course, $student, $section) = @_; |
my ($width, $format, $assignment, $course, $student) = @_; |
|
|
|
|
|
|
$width = &recalcto_mm($width); # Get width in mm. |
$width = &recalcto_mm($width); # Get width in mm. |
my $chars_per_line = int($width/1.6); # Character/textline. |
my $chars_per_line = int($width/2); # Character/textline. |
|
|
# Default format? |
# Default format? |
|
|
Line 1075 sub format_page_header {
|
Line 1080 sub format_page_header {
|
# - Allow the assignment to be 2 lines (wrapped). |
# - 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); |
|
} |
|
|
my $name_length = int($chars_per_line *3 /4); |
$format = "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}"; |
my $sec_length = int($chars_per_line / 5); |
|
|
|
$format = "%$name_length".'n'; |
} 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!!! |
|
|
if ($section) { |
} |
$format .= ' - Sec: '."%$sec_length".'s'; |
|
} |
|
|
|
$format .= '\\\\%c \\\\ %a'; |
return $format; |
|
|
|
|
} |
|
# 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 |
# 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 |
# there is '\\ \\ ' in the page header. That's cause a error in LaTeX |
if($format =~ /\\\\\s\\\\\s/) { |
if($format =~ /\\\\\s\\\\\s/) { |
#TODO find sensible caption for page header |
#TODO find sensible caption for page header |
my $testPrintout = '\\\\'.&mt('Construction Space').' \\\\'.&mt('Test-Printout '); |
my $testPrintout = '\\\\'.&mt('Authoring Space').' \\\\'.&mt('Test-Printout '); |
$format =~ s/\\\\\s\\\\\s/$testPrintout/; |
$format =~ s/\\\\\s\\\\\s/$testPrintout/; |
} |
} |
# |
# |
Line 1230 sub is_code_valid {
|
Line 1239 sub is_code_valid {
|
my ($code_type, $code_length) = ('letter', 6); # defaults. |
my ($code_type, $code_length) = ('letter', 6); # defaults. |
my @lines = &Apache::grades::get_scantronformat_file(); |
my @lines = &Apache::grades::get_scantronformat_file(); |
foreach my $line (@lines) { |
foreach my $line (@lines) { |
|
next if (($line =~ /^\#/) || ($line eq '')); |
my ($name, $type, $length) = (split(/:/, $line))[0,2,4]; |
my ($name, $type, $length) = (split(/:/, $line))[0,2,4]; |
if($name eq $code_option) { |
if($name eq $code_option) { |
$code_length = $length; |
$code_length = $length; |
Line 1246 sub is_code_valid {
|
Line 1256 sub is_code_valid {
|
} |
} |
|
|
} |
} |
|
# |
|
# Compare two students by section (Used to sort by section). |
|
# |
|
# Implicit inputs, |
|
# $a - The first one |
|
# $b - The second one. |
|
# |
|
# Returns: |
|
# a-section cmp b-section |
|
# |
|
sub compare_sections { |
|
my ($u1, $d1, $s1, $n1, $stat1) = split(/:/, $a); |
|
my ($u2, $d2, $s2, $n2, $stat2) = split(/:/, $b); |
|
|
|
return $s1 cmp $s2; |
|
} |
|
|
# Compare two students by name. The students are in the form |
# Compare two students by name. The students are in the form |
# returned by the helper: |
# returned by the helper: |
Line 1822 sub get_course {
|
Line 1848 sub get_course {
|
my $courseidinfo; |
my $courseidinfo; |
if (defined($env{'request.course.id'})) { |
if (defined($env{'request.course.id'})) { |
$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); |
$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); |
my $sec = $env{'request.course.sec'}; |
|
|
|
} |
} |
return $courseidinfo; |
return $courseidinfo; |
} |
} |
Line 1846 sub page_format_transformation {
|
Line 1870 sub page_format_transformation {
|
|
|
my $name = &get_name(); |
my $name = &get_name(); |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
|
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
my $header_text = $parmhash{'print_header_format'}; |
my $header_text = $parmhash{'print_header_format'}; |
$header_text = &format_page_header($textwidth, $header_text, $assignment, |
$header_text = &format_page_header($textwidth, $header_text, $assignment, |
$courseidinfo, $name); |
$courseidinfo, $name); |
Line 2054 sub unsupported {
|
Line 2079 sub unsupported {
|
my $result.= &print_latex_header($mode); |
my $result.= &print_latex_header($mode); |
if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { |
if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { |
$currentURL=~s|^(/adm/wrapper/)?ext/|http://|; |
$currentURL=~s|^(/adm/wrapper/)?ext/|http://|; |
|
$currentURL=~s|^http://https://|https://|; |
my $title=&Apache::lonnet::gettitle($symb); |
my $title=&Apache::lonnet::gettitle($symb); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' '; |
$result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' '; |
Line 2133 sub print_page_in_course {
|
Line 2159 sub print_page_in_course {
|
my @page_resources = $navmap->retrieveResources($resource_src); |
my @page_resources = $navmap->retrieveResources($resource_src); |
$result .= &print_page_in_course($helper, $rparmhash, |
$result .= &print_page_in_course($helper, $rparmhash, |
$resource_src, \@page_resources); |
$resource_src, \@page_resources); |
|
} elsif ($resource->ext()) { |
|
$result .= &unsupported($currentURL,$mode,$symb); |
} |
} |
# these resources go through the XML transformer: |
# these resources go through the XML transformer: |
|
|
Line 2149 sub print_page_in_course {
|
Line 2177 sub print_page_in_course {
|
|
|
$form{'grade_target'} = 'tex'; |
$form{'grade_target'} = 'tex'; |
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); |
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); |
$form{'pdfFormFields'} = $pdfFormFields; # |
$form{'pdfFormFields'} = 'no'; # |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
|
|
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
Line 2202 sub print_page_in_course {
|
Line 2230 sub print_page_in_course {
|
$texversion.=&path_to_problem($urlp,$LaTeXwidth); |
$texversion.=&path_to_problem($urlp,$LaTeXwidth); |
} else { |
} else { |
$texversion.='\vskip 0 mm \noindent\textbf{'. |
$texversion.='\vskip 0 mm \noindent\textbf{'. |
&mt("Printing from Construction Space: No Title").'}\vskip 0 mm '; |
&mt("Printing from Authoring Space: No Title").'}\vskip 0 mm '; |
$texversion.=&path_to_problem($urlp,$LaTeXwidth); |
$texversion.=&path_to_problem($urlp,$LaTeXwidth); |
} |
} |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
Line 2599 sub print_construction_sequence {
|
Line 2627 sub print_construction_sequence {
|
# For item 100, filtering was done at the helper level. |
# For item 100, filtering was done at the helper level. |
|
|
sub output_data { |
sub output_data { |
|
|
my ($r,$helper,$rparmhash) = @_; |
my ($r,$helper,$rparmhash) = @_; |
my %parmhash = %$rparmhash; |
my %parmhash = %$rparmhash; |
$ssi_error = 0; # This will be set nonzero by failing ssi's. |
$ssi_error = 0; # This will be set nonzero by failing ssi's. |
Line 2684 ENDPART
|
Line 2713 ENDPART
|
my %form; |
my %form; |
$form{'grade_target'} = 'tex'; |
$form{'grade_target'} = 'tex'; |
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); |
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); |
$form{'pdfFormFields'} = $pdfFormFields; |
$form{'pdfFormFields'} = 'no'; |
|
|
# If form.showallfoils is set, then request all foils be shown: |
# If form.showallfoils is set, then request all foils be shown: |
# privilege will be enforced both by not allowing the |
# privilege will be enforced both by not allowing the |
Line 2782 ENDPART
|
Line 2811 ENDPART
|
$texversion.=&path_to_problem($cleanURL,$LaTeXwidth); |
$texversion.=&path_to_problem($cleanURL,$LaTeXwidth); |
} else { |
} else { |
$texversion.='\vskip 0 mm \noindent\textbf{'. |
$texversion.='\vskip 0 mm \noindent\textbf{'. |
&mt("Printing from Construction Space: No Title").'}\vskip 0 mm '; |
&mt("Printing from Authoring Space: No Title").'}\vskip 0 mm '; |
|
|
$texversion.=&path_to_problem($cleanURL,$LaTeXwidth); |
$texversion.=&path_to_problem($cleanURL,$LaTeXwidth); |
} |
} |
Line 2872 ENDPART
|
Line 2901 ENDPART
|
($print_type eq 'select_sequences') or |
($print_type eq 'select_sequences') or |
($print_type eq 'map_incomplete_problems_seq') |
($print_type eq 'map_incomplete_problems_seq') |
) { |
) { |
|
|
|
|
#-- produce an output string |
#-- produce an output string |
if (($print_type eq 'map_problems') or |
if (($print_type eq 'map_problems') or |
Line 2908 ENDPART
|
Line 2936 ENDPART
|
|
|
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
|
|
my $pbreakresources = keys %page_breaks; |
|
for (my $i=0;$i<=$#master_seq;$i++) { |
for (my $i=0;$i<=$#master_seq;$i++) { |
|
|
&Apache::lonenc::reset_enc(); |
&Apache::lonenc::reset_enc(); |
Line 3009 ENDPART
|
Line 3036 ENDPART
|
if (($selectionmade == 4) and ($assignment ne $prevassignment)) { |
if (($selectionmade == 4) and ($assignment ne $prevassignment)) { |
my $name = &get_name(); |
my $name = &get_name(); |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
|
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } |
$prevassignment=$assignment; |
$prevassignment=$assignment; |
my $header_text = $parmhash{'print_header_format'}; |
my $header_text = $parmhash{'print_header_format'}; |
$header_text = &format_page_header($textwidth, $header_text, |
$header_text = &format_page_header($textwidth, $header_text, |
$assignment, |
$assignment, |
$courseidinfo, |
$courseidinfo, |
$name); |
$name); |
|
|
if ($numberofcolumns eq '1') { |
if ($numberofcolumns eq '1') { |
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; |
$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; |
} else { |
} else { |
Line 3116 ENDPART
|
Line 3143 ENDPART
|
if (($helper->{'VARS'}->{'student_sort'} eq 1) && |
if (($helper->{'VARS'}->{'student_sort'} eq 1) && |
($helper->{'VARS'}->{'SPLIT_PDFS'} ne "sections")) { |
($helper->{'VARS'}->{'SPLIT_PDFS'} ne "sections")) { |
@students = sort compare_names @students; |
@students = sort compare_names @students; |
|
} else { |
|
@students = sort compare_sections @students; |
} |
} |
&adjust_number_to_print($helper); |
&adjust_number_to_print($helper); |
|
|
Line 3134 ENDPART
|
Line 3163 ENDPART
|
} |
} |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
|
|
|
my $map; |
|
if ($helper->{VARS}->{'symb'}) { |
|
($map, my $id, my $resource) = |
|
&Apache::lonnet::decode_symb($helper->{VARS}->{'symb'}); |
|
} |
|
|
#loop over students |
#loop over students |
|
|
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
Line 3152 ENDPART
|
Line 3187 ENDPART
|
my $student_counter=-1; |
my $student_counter=-1; |
my $i = 0; |
my $i = 0; |
my $last_section = (split(/:/,$students[0]))[2]; |
my $last_section = (split(/:/,$students[0]))[2]; |
|
my $nohidemap; |
|
if ($perm{'pav'} && $perm{'vgr'}) { |
|
$nohidemap = 1; |
|
} |
foreach my $person (@students) { |
foreach my $person (@students) { |
my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due"; |
my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due"; |
if (-e $duefile) { |
if (-e $duefile) { |
Line 3168 ENDPART
|
Line 3207 ENDPART
|
} else { |
} else { |
$i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
$i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
} |
} |
my $actual_seq = master_seq_to_person_seq($helper, \@master_seq, $person); |
my $actual_seq = master_seq_to_person_seq($map, \@master_seq, |
|
$person, undef, $nohidemap); |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
$person,$type, |
$person,$type, |
\%moreenv, $actual_seq, |
\%moreenv, $actual_seq, |
Line 3194 ENDPART
|
Line 3234 ENDPART
|
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'}; |
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'}; |
my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'}; |
my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'}; |
my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'}; |
my $selected_code = $helper->{'VARS'}->{'CODE_SELECTED_FROM_LIST'}; |
|
|
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; |
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; |
my @lines = &Apache::grades::get_scantronformat_file(); |
my @lines = &Apache::grades::get_scantronformat_file(); |
my ($code_type,$code_length,$bubbles_per_row)=('letter',6,10); |
my ($code_type,$code_length,$bubbles_per_row)=('letter',6,10); |
Line 3211 ENDPART
|
Line 3250 ENDPART
|
} |
} |
} |
} |
} |
} |
|
my ($randomorder,$randompick,$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)); |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'instructor_comments'}='hide'; |
Line 3244 ENDPART
|
Line 3296 ENDPART
|
$moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,$code_length, |
$moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,$code_length, |
$code_type); |
$code_type); |
} |
} |
|
$code_name =~ s/^\s+//; |
|
$code_name =~ s/\s+$//; |
if ($code_name) { |
if ($code_name) { |
&Apache::lonnet::put('CODEs', |
&Apache::lonnet::put('CODEs', |
{ |
{ |
Line 3265 ENDPART
|
Line 3319 ENDPART
|
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$num_todo); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$num_todo); |
my $count=0; |
my $count=0; |
|
my $nohidemap; |
|
if ($perm{'pav'} && $perm{'vgr'}) { |
|
$nohidemap = 1; |
|
} |
foreach my $code (sort(@allcodes)) { |
foreach my $code (sort(@allcodes)) { |
my $file_num=int($count/$number_per_page); |
my $file_num=int($count/$number_per_page); |
if ($code_type eq 'number') { |
if ($code_type eq 'number') { |
Line 3272 ENDPART
|
Line 3330 ENDPART
|
} else { |
} else { |
$moreenv{'CODE'}=&num_to_letters($code); |
$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'}); |
|
} |
my ($output,$fullname, $printed)= |
my ($output,$fullname, $printed)= |
&print_resources($r,$helper,'anonymous',$type,\%moreenv, |
&print_resources($r,$helper,'anonymous',$type,\%moreenv, |
\@master_seq,$flag_latex_header_remove, |
$actual_seq,$flag_latex_header_remove, |
$LaTeXwidth); |
$LaTeXwidth); |
$resources_printed .= ":"; |
$resources_printed .= ":"; |
$print_array[$file_num].=$output; |
$print_array[$file_num].=$output; |
Line 3327 ENDPART
|
Line 3393 ENDPART
|
$texversion.=&path_to_problem ($urlp,$LaTeXwidth); |
$texversion.=&path_to_problem ($urlp,$LaTeXwidth); |
} else { |
} else { |
$texversion.='\vskip 0 mm \noindent\textbf{'. |
$texversion.='\vskip 0 mm \noindent\textbf{'. |
&mt("Printing from Construction Space: No Title").'}\vskip 0 mm '; |
&mt("Printing from Authoring Space: No Title").'}\vskip 0 mm '; |
$texversion.=&path_to_problem ($urlp,$LaTeXwidth); |
$texversion.=&path_to_problem ($urlp,$LaTeXwidth); |
} |
} |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
$texversion.='\vskip 1 mm '.$answer.'\end{document}'; |
Line 3378 ENDPART
|
Line 3444 ENDPART
|
#} |
#} |
} |
} |
|
|
# Set URLback if this is a construction space print so we can provide |
# Set URLback so we can provide a link back to the resource and to change options. |
# a link to the resource being edited. |
# (Since the browser back button does not currently work with https, |
# |
# the back link is useful even when there is an easy-to-miss LON-CAPA back button.) |
|
|
my $URLback=''; #link to original document |
my $URLback=''; #link to original document |
if ($helper->{'VARS'}->{'construction'} eq '1') { |
if ($helper->{'VARS'}->{'construction'} eq '1') { |
$URLback=$helper->{'VARS'}->{'filename'}; |
$URLback=$helper->{'VARS'}->{'filename'}; |
|
} elsif ($helper->{VARS}{'symb'}) { |
|
my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}{'symb'}); |
|
$URLback = &Apache::lonnet::clutter($url); |
} |
} |
# |
# |
# Final adjustment of the font size: |
# Final adjustment of the font size: |
Line 3525 sub print_resources {
|
Line 3594 sub print_resources {
|
my $fullname = &get_name($username,$userdomain); |
my $fullname = &get_name($username,$userdomain); |
my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace. |
my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace. |
|
|
|
|
# |
# |
# Figure out if we need to filter the output by |
# Figure out if we need to filter the output by |
# the incomplete problems for that person |
# the incomplete problems for that person |
Line 3563 sub print_resources {
|
Line 3633 sub print_resources {
|
# |
# |
|
|
my $syllabus_first = 0; |
my $syllabus_first = 0; |
|
my $current_assignment = ""; |
|
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}) { |
foreach my $curresline (@{$master_seq}) { |
if (defined $page_breaks{$curresline}) { |
if (defined $page_breaks{$curresline}) { |
if($i != 0) { |
if($i != 0) { |
Line 3571 sub print_resources {
|
Line 3648 sub print_resources {
|
} |
} |
$current_output .= &get_extra_vspaces($helper, $curresline); |
$current_output .= &get_extra_vspaces($helper, $curresline); |
$i++; |
$i++; |
|
my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline); |
|
|
|
# See if we need to emit a new header: |
|
|
if ( !($type eq 'problems' && |
if ( !($type eq 'problems' && |
($curresline!~ m/$LONCAPA::assess_page_re/)) ) { |
($curresline!~ m/$LONCAPA::assess_page_re/)) ) { |
my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline); |
|
if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) { |
if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) { |
next; |
next; |
} |
} |
$actually_printed++; # we're going to print one. |
$actually_printed++; # we're going to print one. |
|
|
if (&Apache::lonnet::allowed('bre',$res_url)) { |
if (&Apache::lonnet::allowed('bre',$res_url)) { |
if ($res_url!~m|^ext/| |
if ($res_url!~m|^ext/| |
&& $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
&& $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
Line 3677 sub print_resources {
|
Line 3758 sub print_resources {
|
} |
} |
$remove_latex_header = 'YES'; |
$remove_latex_header = 'YES'; |
} |
} |
|
$assignment = &Apache::lonxml::latex_special_symbols( |
|
&Apache::lonnet::gettitle($map), 'header'); |
|
if (($assignment ne $current_assignment) && ($assignment ne "")) { |
|
my $header_line = &format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
|
$assignment, $courseidinfo, |
|
$fullname); |
|
my $header_start = ($columns_in_format == 1) ? '\lhead' |
|
: '\fancyhead[LO]'; |
|
$header_line = $header_start.'{'.$header_line.'}'; |
|
$current_output = $current_output . $header_line; |
|
$current_assignment = $assignment; |
|
} |
|
|
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
# If we are printing incomplete it's possible we don't have |
# If we are printing incomplete it's possible we don't have |
Line 3686 sub print_resources {
|
Line 3780 sub print_resources {
|
# |
# |
|
|
if ($actually_printed == 0) { |
if ($actually_printed == 0) { |
$current_output = &encapsulate_minipage("\\vskip -10mm \nNo incomplete resources\n \\vskip 100 mm { }\n"); |
my $message = &mt('No resources to print'); |
|
if (!$possprint) { |
|
if ($perm{'pav'} || $perm{'pfo'}) { |
|
$message = &mt('There are no unhidden resources to print.')."\n\n". |
|
&mt('The most likely reason is one of the following: ')."\n". |
|
'\begin{itemize}'."\n". |
|
'\item '.&mt("The 'Resource hidden from students' parameter is set for the folder being printed.")."\n". |
|
'\item '.&mt("'Hidden' is checked in the Course Editor individually for each resource in the folder being printed.")."\n". |
|
'\end{itemize}'."\n\n". |
|
&mt("Note: to print a bubblesheet exam which you want to hide from students, ". |
|
"use the Course Editor to check the 'Hidden' checkbox for the exam folder itself.")."\n"; |
|
} |
|
} elsif ($print_incomplete) { |
|
$message = &mt('No incomplete resources'); |
|
} |
|
if ($message) { |
|
$current_output = &encapsulate_minipage("\\vskip -10mm \n$message\n \\vskip 100 mm { }\n"); |
|
} |
if ($remove_latex_header eq "NO") { |
if ($remove_latex_header eq "NO") { |
$current_output = &print_latex_header() . $current_output; |
$current_output = &print_latex_header() . $current_output; |
} else { |
} else { |
Line 3697 sub print_resources {
|
Line 3808 sub print_resources {
|
if ($syllabus_first) { |
if ($syllabus_first) { |
$current_output =~ s/\\\\ Last updated:/Last updated:/ |
$current_output =~ s/\\\\ Last updated:/Last updated:/ |
} |
} |
my $courseidinfo = &get_course(); |
|
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
my $header_line = |
my $header_line = |
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
$currentassignment, $courseidinfo, $fullname, $usersection); |
$currentassignment, $courseidinfo, $fullname); |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
my $header_start = ($columns_in_format == 1) ? '\lhead' : '\fancyhead[LO]'; |
: '\fancyhead[LO]'; |
my $newheader = $header_start.'{'.$header_line.'}'; |
$header_line = $header_start.'{'.$header_line.'}'; |
|
if ($current_output=~/\\documentclass/) { |
if ($current_output=~/\\documentclass/) { |
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /; |
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$newheader$namepostfix}\\vskip 5 mm /; |
} else { |
} else { |
my $blankpages = |
my $blankpages = |
'\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'}; |
'\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'}; |
|
|
$current_output = '\strut\vspace*{-6 mm}\\newline'. |
$current_output = '\strut\vspace*{-6 mm}\\newline'. |
©right_line().' \newpage '.$blankpages.$end_of_student. |
©right_line().' \newpage '.$blankpages.$end_of_student. |
'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent'. |
'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent'. |
$header_line.$namepostfix.'} \vskip 5 mm '.$current_output; |
$newheader.$namepostfix. '} \vskip 5 mm '.$current_output; |
} |
} |
# |
# |
# Close the student bracketing. |
# Close the student bracketing. |
Line 3763 sub handler {
|
Line 3873 sub handler {
|
} |
} |
|
|
&init_perm(); |
&init_perm(); |
|
|
my $helper = printHelper($r); |
my $helper = printHelper($r); |
if (!ref($helper)) { |
if (!ref($helper)) { |
return $helper; |
return $helper; |
Line 3983 sub printHelper {
|
Line 4092 sub printHelper {
|
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url)); |
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url)); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $res = $navmap->getBySymb($symb); |
my $res = $navmap->getBySymb($symb); |
$res_printable = $res->resprintable() | $userCanPrint; #printability in course context |
$res_printable = $res->resprintable() || $userCanPrint; #printability in course context |
($res_printstartdate, $res_printenddate) = &get_print_dates($res); |
($res_printstartdate, $res_printenddate) = &get_print_dates($res); |
($course_open, $course_close) = &course_print_dates($res); |
($course_open, $course_close) = &course_print_dates($res); |
($map_open, $map_close) = &map_print_dates($res); |
($map_open, $map_close) = &map_print_dates($res); |
Line 4063 sub printHelper {
|
Line 4172 sub printHelper {
|
my $start_new_option; |
my $start_new_option; |
if ($perm{'pav'}) { |
if ($perm{'pav'}) { |
$start_new_option = |
$start_new_option = |
"<option text='".&mt('Start new page<br />before selected'). |
"<option text='".&mt('Start new page[_1]before selected','<br />'). |
"' variable='FINISHPAGE' />". |
"' variable='FINISHPAGE' />". |
"<option text='".&mt('Extra space<br />before selected'). |
"<option text='".&mt('Extra space[_1]before selected','<br />'). |
"' variable='EXTRASPACE' type='text' />" . |
"' variable='EXTRASPACE' type='text' />" . |
"<option " . |
"<option " . |
"' variable='POSSIBLE_RESOURCES' type='hidden' />". |
"' variable='POSSIBLE_RESOURCES' type='hidden' />". |
"<option text='".&mt('Space units<br />check for mm'). |
"<option text='".&mt('Space units[_1]check for mm','<br />'). |
"' variable='EXTRASPACE_UNITS' type='checkbox' />" |
"' variable='EXTRASPACE_UNITS' type='checkbox' />" |
; |
; |
|
|
Line 4182 sub printHelper {
|
Line 4291 sub printHelper {
|
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
$map, |
$map, |
! $isProblem, '', |
$isProblem, '', |
$symbFilter, |
$symbFilter, |
$start_new_option); |
$start_new_option); |
$helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML', |
$helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML', |
Line 4234 my $suffixXml = <<ALL_PROBLEMS;
|
Line 4343 my $suffixXml = <<ALL_PROBLEMS;
|
ALL_PROBLEMS |
ALL_PROBLEMS |
&Apache::lonxml::xmlparse($r, 'helper', |
&Apache::lonxml::xmlparse($r, 'helper', |
&generate_resource_chooser('ALL_PROBLEMS', |
&generate_resource_chooser('ALL_PROBLEMS', |
'SelectProblem(s) to print', |
'Select Problem(s) to print', |
'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"', |
'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"', |
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
Line 4588 CHOOSE_FROM_ANY_SEQUENCE
|
Line 4697 CHOOSE_FROM_ANY_SEQUENCE
|
# Generate the first state, to select which resources get printed. |
# Generate the first state, to select which resources get printed. |
Apache::lonhelper::state->new("START", "Select Printing Options:"); |
Apache::lonhelper::state->new("START", "Select Printing Options:"); |
if (!$res_printable) { |
if (!$res_printable) { |
$paramHash = Apache::lonhelper::getParamHash(); |
my $now = time; |
$paramHash->{MESSAGE_TEXT} = |
my $shownprintstart = &Apache::lonlocal::locallocaltime($res_printstartdate); |
&mt('<p><b>Printing for current resource is only possible between [_1] and [_1]</b></p>', |
my $shownprintend = &Apache::lonlocal::locallocaltime($res_printenddate); |
$res_printstartdate, $res_printenddate); |
my $noprintmsg; |
Apache::lonhelper::message->new(); |
if (($res_printenddate) && ($res_printenddate < $now)) { |
|
$noprintmsg = &mt('Printing for current resource no longer available (ended: [_1])', |
|
$shownprintend); |
|
} else { |
|
if (($res_printstartdate) && ($res_printstartdate > $now)) { |
|
if (($res_printenddate) && ($res_printenddate > $now) && ($res_printenddate > $res_printstartdate)) { |
|
$noprintmsg = &mt('Printing for current resource is only possible between [_1] and [_2]', |
|
$shownprintstart,$shownprintend); |
|
} elsif (!$res_printenddate) { |
|
$noprintmsg = &mt('Printing for current resource will only be possible starting [_1]', |
|
$shownprintstart); |
|
} else { |
|
$noprintmsg = &mt('Printing for current resource is unavailable'); |
|
} |
|
} |
|
} |
|
|
|
if ($noprintmsg) { |
|
$paramHash = Apache::lonhelper::getParamHash(); |
|
$paramHash->{MESSAGE_TEXT} = |
|
'<p class="LC_info">'.$noprintmsg.'</p>'; |
|
Apache::lonhelper::message->new(); |
|
} |
} |
} |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
Line 4934 sub render {
|
Line 5065 sub render {
|
my $PaperType=&mt('Paper type'); |
my $PaperType=&mt('Paper type'); |
my $landscape=&mt('Landscape'); |
my $landscape=&mt('Landscape'); |
my $portrait=&mt('Portrait'); |
my $portrait=&mt('Portrait'); |
my $pdfFormLabel=&mt('PDF-Formfields'); |
|
my $with=&mt('with Formfields'); |
|
my $without=&mt('without Formfields'); |
|
|
|
|
|
$result.='<h3>'.&mt('Layout Options').'</h3>' |
$result.='<h3>'.&mt('Layout Options').'</h3>' |
Line 4945 sub render {
|
Line 5073 sub render {
|
.'<th>'.$PageLayout.'</th>' |
.'<th>'.$PageLayout.'</th>' |
.'<th>'.$NumberOfColumns.'</th>' |
.'<th>'.$NumberOfColumns.'</th>' |
.'<th>'.$PaperType.'</th>' |
.'<th>'.$PaperType.'</th>' |
.'<th>'.$pdfFormLabel.'</th>' |
|
.&Apache::loncommon::end_data_table_header_row() |
.&Apache::loncommon::end_data_table_header_row() |
.&Apache::loncommon::start_data_table_row() |
.&Apache::loncommon::start_data_table_row() |
.'<td>' |
.'<td>' |
Line 4986 sub render {
|
Line 5113 sub render {
|
$result .= <<HTML; |
$result .= <<HTML; |
</select> |
</select> |
</td> |
</td> |
<td align='center'> |
|
<select name='${var}.pdfFormFields'> |
|
<option selected="selected" value="no">$without</option> |
|
<option value="yes">$with</option> |
|
</select> |
|
</td> |
|
HTML |
HTML |
$result.=&Apache::loncommon::end_data_table_row() |
$result.=&Apache::loncommon::end_data_table_row() |
.&Apache::loncommon::end_data_table(); |
.&Apache::loncommon::end_data_table(); |