version 1.627.2.7, 2013/08/08 15:40:59
|
version 1.627.2.10, 2014/02/08 23:52:03
|
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 494 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 524 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 572 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; |
Line 595 sub get_print_dates {
|
Line 596 sub get_print_dates {
|
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 603 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 1231 sub is_code_valid {
|
Line 1236 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 3612 sub print_resources {
|
Line 3618 sub print_resources {
|
# |
# |
|
|
my $syllabus_first = 0; |
my $syllabus_first = 0; |
|
my $assessment_first = 0; |
my $current_assignment = ""; |
my $current_assignment = ""; |
my $assignment; |
my $assignment; |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
Line 3635 sub print_resources {
|
Line 3642 sub print_resources {
|
if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) { |
if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) { |
next; |
next; |
} |
} |
|
if ((!$actually_printed) && ($curresline =~ m/$LONCAPA::assess_re/)) { |
|
$assessment_first = 1; |
|
} |
$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 3768 sub print_resources {
|
Line 3779 sub print_resources {
|
if ($syllabus_first) { |
if ($syllabus_first) { |
$current_output =~ s/\\\\ Last updated:/Last updated:/ |
$current_output =~ s/\\\\ Last updated:/Last updated:/ |
} |
} |
if (0) { |
my $newheader; |
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
unless ($assessment_first) { |
my $header_line = |
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); |
|
my $header_line = |
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
&format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
$currentassignment, $courseidinfo, $fullname); |
$currentassignment, $courseidinfo, $fullname); |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
: '\fancyhead[LO]'; |
: '\fancyhead[LO]'; |
$header_line = $header_start.'{'.$header_line.'}'; |
$newheader = $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 /; |
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$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'. |
|
# ©right_line().' \newpage '.$blankpages.$end_of_student. |
|
# '\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent'. |
|
# $header_line.$namepostfix. '} \vskip 5 mm '.$current_output; |
|
$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'. |
.$namepostfix. '} \vskip 5 mm '.$current_output; |
$newheader.$namepostfix. '} \vskip 5 mm '.$current_output; |
|
|
} |
} |
# |
# |
# Close the student bracketing. |
# Close the student bracketing. |
Line 4061 sub printHelper {
|
Line 4066 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 4666 CHOOSE_FROM_ANY_SEQUENCE
|
Line 4671 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); |
'<p class="LC_info">' |
my $shownprintend = &Apache::lonlocal::locallocaltime($res_printenddate); |
.&mt('Printing for current resource is only possible between [_1] and [_2]', |
my $noprintmsg; |
$res_printstartdate, $res_printenddate).'</p>'; |
if (($res_printenddate) && ($res_printenddate < $now)) { |
Apache::lonhelper::message->new(); |
$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(); |