version 1.632, 2013/06/01 00:22:37
|
version 1.642, 2014/04/24 15:31:39
|
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 595 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 614 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 1105 sub format_page_header {
|
Line 1109 sub format_page_header {
|
# 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 2218 sub print_page_in_course {
|
Line 2222 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 2799 ENDPART
|
Line 2803 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 3371 ENDPART
|
Line 3375 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 3630 sub print_resources {
|
Line 3634 sub print_resources {
|
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 3762 sub print_resources {
|
Line 3767 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 $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, $usersection); |
my $header_start = ($columns_in_format == 1) ? '\lhead' : '\fancyhead[LO]'; |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
my $newheader = $header_start.'{'.$header_line.'}'; |
: '\fancyhead[LO]'; |
|
$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 /; |
$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; |
|
|
} |
} |
# |
# |
Line 4055 sub printHelper {
|
Line 4052 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 4135 sub printHelper {
|
Line 4132 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 4306 my $suffixXml = <<ALL_PROBLEMS;
|
Line 4303 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 4449 ALL_PROBLEMS
|
Line 4446 ALL_PROBLEMS
|
my @lines = &Apache::grades::get_scantronformat_file(); |
my @lines = &Apache::grades::get_scantronformat_file(); |
my $codechoice=''; |
my $codechoice=''; |
foreach my $line (@lines) { |
foreach my $line (@lines) { |
|
next if (($line =~ /^\#/) || ($line eq '')); |
my ($name,$description,$code_type,$code_length)= |
my ($name,$description,$code_type,$code_length)= |
(split(/:/,$line))[0,1,2,4]; |
(split(/:/,$line))[0,1,2,4]; |
if ($code_length > 0 && |
if ($code_length > 0 && |
Line 4660 CHOOSE_FROM_ANY_SEQUENCE
|
Line 4658 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(); |
Line 5007 sub render {
|
Line 5026 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 $pdfFormLabel=&mt('PDF Form Fields'); |
my $with=&mt('with Formfields'); |
my $with=&mt('with Form Fields'); |
my $without=&mt('without Formfields'); |
my $without=&mt('without Form Fields'); |
|
|
|
|
$result.='<h3>'.&mt('Layout Options').'</h3>' |
$result.='<h3>'.&mt('Layout Options').'</h3>' |