version 1.620, 2012/10/12 13:48:08
|
version 1.707, 2025/01/15 23:19:30
|
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 77 my $font_size = 'normalsize'; # Default
|
Line 75 my $font_size = 'normalsize'; # Default
|
|
|
#---------------------------- Helper helpers. ------------------------- |
#---------------------------- Helper helpers. ------------------------- |
|
|
## |
## |
# Filter function to determine if a resource is a printable sequence. |
# Filter function to determine if a resource is a printable sequence. |
# |
# |
# @param $res -Resource to check. |
# @param $res -Resource to check. |
Line 145 sub printable_sequence {
|
Line 143 sub printable_sequence {
|
# Parameters: |
# Parameters: |
# helper - the helper which already contains info about the current folder we can |
# helper - the helper which already contains info about the current folder we can |
# purloin. |
# purloin. |
# url - Top url of the sequence |
# map - the map for which incomplete problems are to be printed |
|
# nocurrloc - True if printout called from icon/link in Tools in /adm/navmaps |
# 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, $nocurrloc) = @_; |
my ($helper, $map) = @_; |
|
|
|
|
|
my $symbFilter = '$res->shown_symb()'; |
my $symbFilter = '$res->shown_symb()'; |
Line 160 sub create_incomplete_folder_selstud_hel
|
Line 158 sub create_incomplete_folder_selstud_hel
|
|
|
my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_PEOPLE_SEQ', |
my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_PEOPLE_SEQ', |
'Select problem(s) to print', |
'Select problem(s) to print', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1"', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'"', |
'RESOURCES', |
'RESOURCES', |
'CHOOSE_STUDENTS_INCOMPLETE', |
'CHOOSE_STUDENTS_INCOMPLETE', |
$map, |
$map, |
$selFilter, |
$selFilter, |
'', |
'', |
$symbFilter, |
$symbFilter, |
''); |
''); |
|
|
my $student_chooser = &generate_student_chooser('CHOOSE_STUDENTS_INCOMPLETE', |
my $student_chooser = &generate_student_chooser('CHOOSE_STUDENTS_INCOMPLETE', |
Line 179 sub create_incomplete_folder_selstud_hel
|
Line 177 sub create_incomplete_folder_selstud_hel
|
'CHOOSE_STUDENTS_INCOMPLETE_FORMAT'); # end state. |
'CHOOSE_STUDENTS_INCOMPLETE_FORMAT'); # end state. |
|
|
return $resource_chooser . $student_chooser . $format_chooser; |
return $resource_chooser . $student_chooser . $format_chooser; |
} |
} |
|
|
|
|
# BZ 5209 |
# BZ 5209 |
Line 199 sub create_incomplete_folder_selstud_hel
|
Line 197 sub create_incomplete_folder_selstud_hel
|
# helper - Helper we are creating states for. |
# helper - Helper we are creating states for. |
# Returns: |
# Returns: |
# Text that can be parsed by the helper. |
# Text that can be parsed by the helper. |
# |
# |
|
|
sub create_incomplete_course_helper { |
sub create_incomplete_course_helper { |
my $helper = shift; |
my $helper = shift; |
|
|
my $filter = '$res->is_problem() || $res->contains_problem() || $res->is_sequence() || $res->is_practice())'; |
my $filter = '$res->is_problem() || $res->contains_problem() || $res->is_sequence() || $res->is_practice())'; |
my $symbfilter = '$res->shown_symb()'; |
my $symbfilter = '$res->shown_symb()'; |
|
|
my $resource_chooser = &generate_resource_chooser('INCOMPLETE_PROBLEMS_COURSE_RESOURCES', |
my $resource_chooser = &generate_resource_chooser('INCOMPLETE_PROBLEMS_COURSE_RESOURCES', |
'Select problem(s) to print', |
'Select problem(s) to print', |
'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1"', |
'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1" modallink="1"', |
'RESOURCES', |
'RESOURCES', |
'INCOMPLETE_PROBLEMS_COURSE_STUDENTS', |
'INCOMPLETE_PROBLEMS_COURSE_STUDENTS', |
'', |
'', |
Line 232 sub create_incomplete_course_helper {
|
Line 230 sub create_incomplete_course_helper {
|
|
|
} |
} |
|
|
# BZ5209 |
# BZ5209 |
# Creates the states needed to run the print helper for a student |
# Creates the states needed to run the print helper for a student |
# that wants to print his incomplete problems from the current folder. |
# that wants to print his incomplete problems from the current folder. |
# Parameters: |
# Parameters: |
# $helper - helper we are generating states for. |
# $helper - helper we are generating states for. |
# $map - The map for which the student wants incomplete problems. |
# $map - The map for which the student wants incomplete problems. |
|
# $nocurrloc - True if printout called from icon/link in Tools in /adm/navmaps |
# Returns: |
# Returns: |
# XML that defines the helper states being created. |
# XML that defines the helper states being created. |
# |
# |
Line 245 sub create_incomplete_course_helper {
|
Line 244 sub create_incomplete_course_helper {
|
# CHOOSE_INCOMPLETE_SEQ - Resource selector. |
# CHOOSE_INCOMPLETE_SEQ - Resource selector. |
# |
# |
sub create_incomplete_folder_helper { |
sub create_incomplete_folder_helper { |
my ($helper, $map) = @_; |
my ($helper, $map, $nocurrloc) = @_; |
|
|
my $filter = '$res->is_problem()'; |
my $filter = '$res->is_problem()'; |
$filter .= ' && $res->resprintable() '; |
$filter .= ' && $res->resprintable() '; |
Line 255 sub create_incomplete_folder_helper {
|
Line 254 sub create_incomplete_folder_helper {
|
|
|
my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_SEQ', |
my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_SEQ', |
'Select problem(s) to print', |
'Select problem(s) to print', |
'multichoice="1", toponly ="1", addstatus="1", closeallpages="1"', |
'multichoice="1", toponly ="1", addstatus="1", closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'"', |
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
$map, |
$map, |
$filter, '', |
$filter, '', |
$symfilter, |
$symfilter, |
''); |
''); |
|
|
Line 277 sub create_incomplete_folder_helper {
|
Line 276 sub create_incomplete_folder_helper {
|
|
|
|
|
sub generate_student_chooser { |
sub generate_student_chooser { |
my ($this_state, |
my ($this_state, |
$sort_choice, |
$sort_choice, |
$variable, |
$variable, |
$next_state) = @_; |
$next_state) = @_; |
my $result = <<CHOOSE_STUDENTS; |
my $result = <<CHOOSE_STUDENTS; |
<state name="$this_state" title="Select Students and Resources"> |
<state name="$this_state" title="Select Students and Resources"> |
Line 291 sub generate_student_chooser {
|
Line 290 sub generate_student_chooser {
|
</choices> |
</choices> |
|
|
<message><br /><hr /><br /> </message> |
<message><br /><hr /><br /> </message> |
<student multichoice='1' |
<student multichoice='1' |
variable="$variable" |
variable="$variable" |
nextstate="$next_state" |
nextstate="$next_state" |
coursepersonnel="1" /> |
coursepersonnel="1" /> |
Line 309 CHOOSE_STUDENTS
|
Line 308 CHOOSE_STUDENTS
|
# this_state - State name of the chooser. |
# this_state - State name of the chooser. |
# prompt_text - Text to use to prompt user. |
# prompt_text - Text to use to prompt user. |
# resource_options - Resource tag options e.g. |
# 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 |
# that control the selection and appearance of the |
# resource selector. |
# resource selector. |
# variable - Name of the variable to hold the choice |
# variable - Name of the variable to hold the choice |
Line 320 CHOOSE_STUDENTS
|
Line 320 CHOOSE_STUDENTS
|
# filter - How to filter the resources. |
# filter - How to filter the resources. |
# value_func - <valuefunc> function. |
# value_func - <valuefunc> function. |
# choice_func - If not empty generates a <choicefunc> with this function. |
# choice_func - If not empty generates a <choicefunc> with this function. |
# start_new_option |
# start_new_option |
# - Fragment appended after valuefunc. |
# - Fragment appended after valuefunc. |
# |
# |
# |
# |
Line 446 CHOOSE_ANON1
|
Line 446 CHOOSE_ANON1
|
return $result; |
return $result; |
} |
} |
|
|
# Returns the XML for choosing how assignments are to be formatted |
sub generate_common_choosers { |
|
my ($r,$helper,$map,$url,$isProblem,$symbFilter,$start_new_option) = @_; |
|
|
|
my $randomly_ordered_warning = |
|
&get_randomly_ordered_warning($helper, $map); |
|
|
|
# code for a few states used for printout launched from both |
|
# /adm/navmaps and from a resource by a privileged user: |
|
# - To allow resources to be selected for printing. |
|
# - To determine pagination between assignments. |
|
# - To determine how many assignments should be bundled into a single PDF. |
|
|
|
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='<choice></choice>'; |
|
foreach my $name (sort {uc($a) cmp uc($b)} @names) { |
|
if ($name =~ /^error: 2 /) { next; } |
|
if ($name =~ /^type\0/) { next; } |
|
$namechoice.='<choice computer="'.$name.'">'.$name.'</choice>'; |
|
} |
|
|
|
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]); |
|
} |
|
if (%codes_to_print) { |
|
$code_selection .=' |
|
<message><b>Choose single CODE from list:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0"> |
|
<choice></choice> |
|
<exec> |
|
push(@{$state->{CHOICES}},@{$helper->{DATA}{ALL_CODE_CHOICES}}); |
|
</exec> |
|
</dropdown> |
|
<message></td></tr><tr><td></message> |
|
'.$/; |
|
} |
|
|
|
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.='<choice computer="'.$name.'">'.$description.'</choice>'; |
|
} |
|
} |
|
if ($codechoice eq '') { |
|
$codechoice='<choice computer="default">Default</choice>'; |
|
} |
|
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. |
# that text must still be parsed by the helper xml parser. |
# Parameters: 3 (required) |
# Parameters: 3 (required) |
|
|
# helper - The helper; $helper->{'VARS'}->{'PRINT_TYPE'} used |
# helper - The helper; $helper->{'VARS'}->{'PRINT_TYPE'} used |
# to check if splitting PDFs by section can be offered. |
# to check if splitting PDFs by section can be offered. |
# title - Title for the current state. |
# title - Title for the current state. |
# this_state - State name of the chooser. |
# this_state - State name of the chooser. |
|
|
sub generate_format_selector { |
sub generate_format_selector { |
Line 460 sub generate_format_selector {
|
Line 588 sub generate_format_selector {
|
my $secpdfoption; |
my $secpdfoption; |
unless (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon') || |
unless (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon') || |
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') || |
($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 = '<choice computer="sections">Each PDF contains exactly one section</choice>'; |
$secpdfoption = '<choice computer="sections">Each PDF contains exactly one section</choice>'; |
} |
} |
return <<RESOURCE_SELECTOR; |
return <<RESOURCE_SELECTOR; |
Line 493 RESOURCE_SELECTOR
|
Line 623 RESOURCE_SELECTOR
|
# @param \@opens - reference to an array of open dates. |
# @param \@opens - reference to an array of open dates. |
# @param \@closes - reference to an array of close dates. |
# @param \@closes - reference to an array of close dates. |
# |
# |
# @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 525 sub compute_open_window {
|
Line 655 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; |
} |
} |
|
|
return ($latest_open, $earliest_close); |
return ($latest_open, $earliest_close); |
|
|
} |
} |
|
|
## |
## |
Line 559 sub printable {
|
Line 689 sub printable {
|
if ($close_date && ($close_date < $now)) { |
if ($close_date && ($close_date < $now)) { |
return 0; |
return 0; |
} |
} |
|
|
return 1; |
return 1; |
|
|
} |
} |
Line 568 sub printable {
|
Line 698 sub printable {
|
# Returns the innermost print start/print end dates for a resource. |
# Returns the innermost print start/print end dates for a resource. |
# This is done by looking at the start/end dates for its parts and choosing |
# This is done by looking at the start/end dates for its parts and choosing |
# the intersection of those dates. |
# the intersection of those dates. |
# |
# |
# @param res - lonnvamaps::resource object that represents the resource. |
# @param res - lonnvamaps::resource object that represents the resource. |
# |
# |
# @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 596 sub get_print_dates {
|
Line 728 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 604 sub get_print_dates {
|
Line 747 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 619 sub get_print_dates {
|
Line 755 sub get_print_dates {
|
# get_print_dates but namvaps::course_print_dates are gotten...and not converted |
# get_print_dates but namvaps::course_print_dates are gotten...and not converted |
# to times either. |
# to times either. |
# |
# |
# @param $res - Reference to a resource has from lonnvampas::resource. |
# @param $res - Reference to a resource hash from lonnavmaps::resource. |
# |
# |
# @return (opendate, closedate) |
# @return (opendate, closedate) |
# |
# |
Line 633 sub course_print_dates {
|
Line 769 sub course_print_dates {
|
my @close_dates; |
my @close_dates; |
my $navmap = $res->{NAV_MAP}; # Slightly OO dirty. |
my $navmap = $res->{NAV_MAP}; # Slightly OO dirty. |
|
|
# Don't bother looping over undefined or empty parts arraY; |
# Don't bother looping over undefined or empty parts array; |
|
|
if (@parts) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
Line 659 sub map_print_dates {
|
Line 795 sub map_print_dates {
|
my $navmap = $res->{NAV_MAP}; # slightly OO dirty. |
my $navmap = $res->{NAV_MAP}; # slightly OO dirty. |
|
|
|
|
# Don't bother looping over undefined or empty parts arraY; |
# Don't bother looping over undefined or empty parts array; |
|
|
if (@parts) { |
if (@parts) { |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
Line 676 sub map_print_dates {
|
Line 812 sub map_print_dates {
|
# Parameters: |
# Parameters: |
# $username - Name of user for whom we are checking. |
# $username - Name of user for whom we are checking. |
# $domain - Domain of user we are checking. |
# $domain - Domain of user we are checking. |
|
# $section - Section for user for whom we are checking. |
# $map - map name. |
# $map - map name. |
# Returns: |
# Returns: |
# 0 - map is not incomplete. |
# 0 - map is not incomplete. |
# 1 - map is incomplete. |
# 1 - map is incomplete. |
# |
# |
sub incomplete { |
sub incomplete { |
my ($username, $domain, $map) = @_; |
my ($username, $domain, $section, $map) = @_; |
|
|
|
|
my $navmap = Apache::lonnavmaps::navmap->new($username, $domain); |
my $navmap = Apache::lonnavmaps::navmap->new($username, $domain, $section); |
|
|
|
|
if (defined($navmap)) { |
if (defined($navmap)) { |
my $res = $navmap->getResourceByUrl($map); |
my $res = $navmap->getResourceByUrl($map); |
Line 697 sub incomplete {
|
Line 834 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: |
# $ |
# $ |
# Returns: |
# Returns: |
# reference to an array of resources that can be passed to |
# reference to an array of resources that can be passed to |
# 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 ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'}); |
|
my $navmap = Apache::lonnavmaps::navmap->new($username, $userdomain); |
|
my $iterator = $navmap->getIterator($navmap->firstResource(), |
|
$navmap->finishResource(), |
|
{}, 1); |
|
my %nonResourceItems = ( |
|
$iterator->BEGIN_MAP => 1, |
|
$iterator->BEGIN_BRANCH => 1, |
|
$iterator->END_BRANCH => 1, |
|
$iterator->END_MAP => 1, |
|
$iterator->FORWARD => 1, |
|
$iterator->BACKWARD => 1 |
|
|
|
); # These items are not resources but appear in the midst of iteration. |
my $unhidden; |
|
if ($nohidemap) { |
|
$unhidden = &Apache::lonnet::clutter($map); |
|
} |
|
|
|
my $navmap = Apache::lonnavmaps::navmap->new($username, $userdomain, |
|
$usersection, $code, $unhidden); |
|
my ($start,$finish); |
|
|
|
if ($map) { |
|
my $mapres = $navmap->getResourceByUrl($map); |
|
if ($mapres->is_map()) { |
|
$start = $mapres->map_start(); |
|
$finish = $mapres->map_finish(); |
|
} |
|
} |
|
unless ($start && $finish) { |
|
$start = $navmap->firstResource(); |
|
$finish = $navmap->finishResource(); |
|
} |
|
|
|
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_hash. 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()) { |
Line 756 sub master_seq_to_person_seq {
|
Line 906 sub master_seq_to_person_seq {
|
# 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 (ref($curres) && ! $curres->randomout()) { |
if (! exists $nonResourceItems{$curres} && ! $curres->randomout()) { |
my $currsymb = $curres->symb(); |
my $symb = $curres->symb(); |
if (exists($seq_hash{$currsymb})) { |
if (exists $seq_hash{$symb}) { |
push(@output_seq, $currsymb); |
push(@output_seq, $symb); |
|
} |
} |
} |
} |
} |
} |
|
|
|
|
return \@output_seq; # for now. |
return \@output_seq; # for now. |
|
|
} |
} |
|
|
|
|
Line 790 sub fetch_raw_resource {
|
Line 938 sub fetch_raw_resource {
|
} |
} |
return $contents; |
return $contents; |
|
|
|
|
} |
} |
|
|
# Fetch the annotations associated with a URL and |
# Fetch the annotations associated with a URL and |
# put a centered 'annotations:' title. |
# put a centered 'annotations:' title. |
# This is all suppressed if the annotations are empty. |
# This is all suppressed if the annotations are empty. |
# |
# |
Line 826 sub set_font_size {
|
Line 974 sub set_font_size {
|
my ($text) = @_; |
my ($text) = @_; |
|
|
# There appear to be cases where the font directive is empty.. in which |
# There appear to be cases where the font directive is empty.. in which |
# case the first substituion would insert a spurious \ oh happy day. |
# case the first substitution would insert a spurious \ oh happy day. |
# as this has been the cause of much mystery and hair pulling _sigh_ |
# as this has been the cause of much mystery and hair pulling _sigh_ |
|
|
if ($font_size ne '') { |
if ($font_size ne '') { |
|
|
$text =~ s/\\begin{document}/\\begin{document}{\\$font_size/; |
$text =~ s/\\begin\{document}/\\begin{document}{\\$font_size/; |
|
$text =~ s/\\end\{document}/}\\end{document}/; |
|
|
} |
} |
$text =~ s/\\end{document}/}\\end{document}/; |
|
return $text; |
return $text; |
|
|
|
|
} |
} |
|
|
# include_pdf - PDF files are included into the |
# include_pdf - PDF files are included into the |
# output as follows: |
# output as follows: |
# - The PDF, if necessary, is replicated. |
# - The PDF, if necessary, is replicated. |
# - The PDF is added to the list of files to convert to postscript (along with the images). |
# - The PDF is added to the list of files to convert to postscript (along with the images). |
# - The LaTeX is added to include the final converted postscript in the file as an included |
# - The LaTeX is added to include the final converted postscript in the file as an included |
# job. The assumption is that the includedpsheader.ps header will be included. |
# job. The assumption is that the includepsheader.ps header will be included. |
# |
# |
# Parameters: |
# Parameters: |
# pdf_uri - URI of the PDF file to include. |
# pdf_uri - URI of the PDF file to include. |
# |
# |
# Returns: |
# Returns: |
# The LaTeX to include. |
# The LaTeX to include. |
# |
# |
Line 868 sub include_pdf {
|
Line 1017 sub include_pdf {
|
$file = &Apache::lonnet::filelocation('',$pdf_uri); |
$file = &Apache::lonnet::filelocation('',$pdf_uri); |
} |
} |
|
|
# The file isn ow replicated locally.. or it did not exist in the first place |
# The file is now replicated locally ... or it did not exist in the first place |
# (unlikely). If it did exist, add the pdf to the set of files/images that |
# (unlikely). If it did exist, add the pdf to the set of files/images that |
# need tob e converted for this print job: |
# need to be converted for this print job: |
|
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
$file =~ s{(.*)/res/}{$londocroot/res/}; |
$file =~ s{(.*)/res/}{$londocroot/res/}; |
|
|
open(FILE,">>$Apache::lonnet::perlvar{'lonPrtDir'}/$env{'user.name'}_$env{'user.domain'}_printout.dat"); |
open(FILE,">>","$Apache::lonnet::perlvar{'lonPrtDir'}/$env{'user.name'}_$env{'user.domain'}_printout.dat"); |
print FILE ("$file\n"); |
print FILE ("$file\n"); |
close (FILE); |
close (FILE); |
|
|
Line 910 sub include_pdf {
|
Line 1059 sub include_pdf {
|
sub collect_languages { |
sub collect_languages { |
my $doc = shift; |
my $doc = shift; |
my %languages; |
my %languages; |
while ($doc =~ /\\selectlanguage{(\w+)}/mg) { |
while ($doc =~ /\\selectlanguage\{(\w+)}/mg) { |
$languages{$1} = 1; # allows us to request each language exactly once. |
$languages{$1} = 1; # allows us to request each language exactly once. |
} |
} |
my @lang_list = (keys(%languages)); # List of unique languages |
my @lang_list = (keys(%languages)); # List of unique languages |
if (scalar @lang_list) { |
if (scalar @lang_list) { |
my $babel_header = '\usepackage[' . join(',', @lang_list) .']{babel}'. "\n"; |
my $babel_header = '\usepackage[' . join(',', @lang_list) .']{babel}'. "\n"; |
$doc =~ s/\\begin{document}/$babel_header\\begin{document}/; |
$doc =~ s/\\begin\{document}/$babel_header\\begin{document}/; |
} |
} |
return $doc; |
return $doc; |
} |
} |
Line 928 sub collect_languages {
|
Line 1077 sub collect_languages {
|
# the number of times requested by the caller. |
# the number of times requested by the caller. |
# If we still have a proble, no text is appended to the |
# If we still have a proble, no text is appended to the |
# output and we set some global variables. |
# output and we set some global variables. |
# to indicate to the caller an SSI error occurred. |
# to indicate to the caller an SSI error occurred. |
# All of this is supposed to deal with the issues described |
# All of this is supposed to deal with the issues described |
# in LonCAPA BZ 5631 see: |
# in LonCAPA BZ 5631 see: |
# http://bugs.lon-capa.org/show_bug.cgi?id=5631 |
# http://bugs.lon-capa.org/show_bug.cgi?id=5631 |
Line 938 sub collect_languages {
|
Line 1087 sub collect_languages {
|
# resource - The resource to include. This is passed directly, without |
# resource - The resource to include. This is passed directly, without |
# interpretation to lonnet::ssi. |
# interpretation to lonnet::ssi. |
# form - The form hash parameters that guide the interpretation of the resource |
# form - The form hash parameters that guide the interpretation of the resource |
# |
# |
# retries - Number of retries allowed before giving up completely. |
# retries - Number of retries allowed before giving up completely. |
# Returns: |
# Returns: |
# On success, returns the rendered resource identified by the resource parameter. |
# On success, returns the rendered resource identified by the resource parameter. |
Line 989 sub get_student_view_with_retries {
|
Line 1138 sub get_student_view_with_retries {
|
|
|
# |
# |
# printf_style_subst item format_string repl |
# printf_style_subst item format_string repl |
# |
# |
# Does printf style substitution for a format string that |
# Does printf style substitution for a format string that |
# can have %[n]item in it.. wherever, %[n]item occurs, |
# can have %[n]item in it.. wherever, %[n]item occurs, |
# rep is substituted in format_string. Note that |
# rep is substituted in format_string. Note that |
# [n] is an optional integer length. If provided, |
# [n] is an optional integer length. If provided, |
# repl is truncated to at most [n] characters prior to |
# repl is truncated to at most [n] characters prior to |
# substitution. |
# substitution. |
# |
# |
sub printf_style_subst { |
sub printf_style_subst { |
Line 1006 sub printf_style_subst {
|
Line 1155 sub printf_style_subst {
|
my $subst = $repl; |
my $subst = $repl; |
if ($size ne "") { |
if ($size ne "") { |
$subst = substr($subst, 0, $size); |
$subst = substr($subst, 0, $size); |
|
|
# Here's a nice edge case.. supose the end of the |
# Here's a nice edge case ... suppose the end of the |
# substring is a \. In that case may have just |
# substring is a \. In that case may have just |
# chopped off a TeX escape... in that case, we append |
# chopped off a TeX escape... in that case, we append |
# " " for the trailing character, and let the field |
# " " for the trailing character, and let the field |
# spill over a bit (sigh). |
# spill over a bit (sigh). |
# We don't just chop off the last character in order to deal |
# We don't just chop off the last character in order to deal |
# with one last pathology, and that would be if substr had |
# with one last pathology, and that would be if substr had |
# trimmed us to e.g. \\\ |
# trimmed us to e.g. \\\ |
|
|
|
|
if ($subst =~ /\\$/) { |
if ($subst =~ /\\$/) { |
Line 1034 sub printf_style_subst {
|
Line 1183 sub printf_style_subst {
|
} |
} |
|
|
|
|
# Format a header according to a format. |
# Format a header according to a format. |
# |
# |
|
|
# Substitutions: |
# Substitutions: |
# %a - Assignment name. |
# %a - Assignment name. |
Line 1059 sub format_page_header {
|
Line 1208 sub format_page_header {
|
# we assume that each character is about 2mm in width. |
# we assume that each character is about 2mm in width. |
# (correct for the header text size??). We ignore |
# (correct for the header text size??). We ignore |
# any formatting (e.g. boldfacing in this). |
# any formatting (e.g. boldfacing in this). |
# |
# |
# - Allow the student/course to be one line. |
# - Allow the student/course to be one line. |
# but only truncate the course. |
# but only truncate the course. |
# - Allow the assignment to be 2 lines (wrapped). |
# - Allow the assignment to be 2 lines (wrapped). |
Line 1075 sub format_page_header {
|
Line 1224 sub format_page_header {
|
if ($section) { |
if ($section) { |
$format .= ' - Sec: '."%$sec_length".'s'; |
$format .= ' - Sec: '."%$sec_length".'s'; |
} |
} |
|
$format .= '\\hfill\\thepage'; |
|
|
$format .= '\\\\%c \\\\ %a'; |
$format .= '\\\\%c \\\\ %a'; |
|
|
|
|
} |
} |
# An open question is how to handle long user formatted page headers... |
# An open question is how to handle long user formatted page headers... |
Line 1088 sub format_page_header {
|
Line 1238 sub format_page_header {
|
$format = &printf_style_subst("c", $format, $course); |
$format = &printf_style_subst("c", $format, $course); |
$format = &printf_style_subst("n", $format, $student); |
$format = &printf_style_subst("n", $format, $student); |
$format = &printf_style_subst("s", $format, $section); |
$format = &printf_style_subst("s", $format, $section); |
|
|
|
|
# If the user put %'s in the format string, they must be escaped |
# If the user put %'s in the format string, they must be escaped |
# to \% else LaTeX will think they are comments and terminate |
# to \% else LaTeX will think they are comments and terminate |
# the line.. which is bad!!! |
# 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 1116 sub format_page_header {
|
Line 1266 sub format_page_header {
|
|
|
|
|
return $format; |
return $format; |
|
|
} |
} |
|
|
# |
# |
Line 1164 sub is_valid_numeric_code {
|
Line 1314 sub is_valid_numeric_code {
|
# Remove leading/trailing whitespace; |
# Remove leading/trailing whitespace; |
$value =~ s/^\s*//g; |
$value =~ s/^\s*//g; |
$value =~ s/\s*$//g; |
$value =~ s/\s*$//g; |
|
|
# All digits? |
# All digits? |
if ($value !~ /^[0-9]+$/) { |
if ($value !~ /^[0-9]+$/) { |
return "Numeric code $value has invalid characters - must only be digits"; |
return "Numeric code $value has invalid characters - must only be digits"; |
Line 1185 sub is_valid_numeric_code {
|
Line 1335 sub is_valid_numeric_code {
|
# |
# |
sub is_valid_alpha_code { |
sub is_valid_alpha_code { |
my ($value, $num_letters) = @_; |
my ($value, $num_letters) = @_; |
|
|
# strip leading and trailing spaces. |
# strip leading and trailing spaces. |
|
|
$value =~ s/^\s*//g; |
$value =~ s/^\s*//g; |
Line 1203 sub is_valid_alpha_code {
|
Line 1353 sub is_valid_alpha_code {
|
|
|
# Determine if a code entered by the user in a helper is valid. |
# Determine if a code entered by the user in a helper is valid. |
# valid depends on the code type and the type of code selected. |
# valid depends on the code type and the type of code selected. |
# The type of code selected can either be numeric or |
# The type of code selected can either be numeric or |
# Alphabetic. If alphabetic, the code, in fact is a simple |
# Alphabetic. If alphabetic, the code, in fact is a simple |
# substitution cipher for the actual numeric code: 0->A, 1->B ... |
# substitution cipher for the actual numeric code: 0->A, 1->B ... |
# We'll be nice and be case insensitive for alpha codes. |
# We'll be nice and be case insensitive for alpha codes. |
Line 1218 sub is_valid_alpha_code {
|
Line 1368 sub is_valid_alpha_code {
|
sub is_code_valid { |
sub is_code_valid { |
my ($code_value, $code_option) = @_; |
my ($code_value, $code_option) = @_; |
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::lonnet::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 1239 sub is_code_valid {
|
Line 1390 sub is_code_valid {
|
# |
# |
# Compare two students by section (Used to sort by section). |
# Compare two students by section (Used to sort by section). |
# |
# |
# Implicit inputs, |
# Implicit inputs, |
# $a - The first one |
# $a - The first one |
# $b - The second one. |
# $b - The second one. |
# |
# |
Line 1291 sub compare_names {
|
Line 1442 sub compare_names {
|
} |
} |
|
|
# Break the tie on the first name, but there are leading (possibly trailing |
# Break the tie on the first name, but there are leading (possibly trailing |
# whitespaces to get rid of first |
# whitespaces to get rid of first) |
# |
# |
$f1 =~ s/^\s+//; # Remove leading... |
$f1 =~ s/^\s+//; # Remove leading... |
$f1 =~ s/\s+$//; # Trailing spaces from first 1... |
$f1 =~ s/\s+$//; # Trailing spaces from first 1... |
|
|
$f2 =~ s/^\s+//; |
$f2 =~ s/^\s+//; |
$f2 =~ s/\s+$//; # And the same for first 2... |
$f2 =~ s/\s+$//; # And the same for first 2... |
|
|
Line 1305 sub compare_names {
|
Line 1456 sub compare_names {
|
if($f1 gt $f2) { |
if($f1 gt $f2) { |
return 1; |
return 1; |
} |
} |
|
|
# Must be the same name. |
# Must be the same name. |
|
|
return 0; |
return 0; |
Line 1313 sub compare_names {
|
Line 1464 sub compare_names {
|
|
|
sub latex_header_footer_remove { |
sub latex_header_footer_remove { |
my $text = shift; |
my $text = shift; |
$text =~ s/\\end{document}//; |
$text =~ s/\\end\{document}//; |
$text =~ s/\\documentclass([^&]*)\\begin{document}//; |
$text =~ s/\\documentclass([^&]*)\\begin\{document}//; |
return $text; |
return $text; |
} |
} |
# |
# |
# If necessary, encapsulate text inside |
# If necessary, encapsulate text inside |
# a minipage env. |
# a minipage env. |
# necessity is determined by the problem_split param. |
# necessity is determined by the problem_split param. |
# |
# |
sub encapsulate_minipage { |
sub encapsulate_minipage { |
my ($text) = @_; |
my ($text,$problem_split) = @_; |
if (!($env{'form.problem.split'} =~ /yes/i)) { |
if (!($problem_split =~ /yes/i)) { |
$text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}'; |
$text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}'; |
} |
} |
return $text; |
return $text; |
Line 1342 sub adjust_number_to_print {
|
Line 1493 sub adjust_number_to_print {
|
my $helper = shift; |
my $helper = shift; |
|
|
my $split_pdf = $helper->{'VARS'}->{'SPLIT_PDFS'}; |
my $split_pdf = $helper->{'VARS'}->{'SPLIT_PDFS'}; |
|
|
if ($split_pdf eq 'all') { |
if ($split_pdf eq 'all') { |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'all'; |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'all'; |
} elsif ($split_pdf eq 'oneper') { |
} elsif ($split_pdf eq 'oneper') { |
Line 1374 sub old_character_chart {
|
Line 1525 sub old_character_chart {
|
$result =~ s/&(\#0?34|quot);/\"/g; |
$result =~ s/&(\#0?34|quot);/\"/g; |
$result =~ s/&\#0?35;/\\\#/g; |
$result =~ s/&\#0?35;/\\\#/g; |
$result =~ s/&\#0?36;/\\\$/g; |
$result =~ s/&\#0?36;/\\\$/g; |
$result =~ s/&\#0?37;/\\%/g; |
$result =~ s/&\#0?37;/\\%/g; |
$result =~ s/&(\#0?38|amp);/\\&/g; |
$result =~ s/&(\#0?38|amp);/\\&/g; |
$result =~ s/&\#(0?39|146);/\'/g; |
$result =~ s/&\#(0?39|146);/\'/g; |
$result =~ s/&\#0?40;/(/g; |
$result =~ s/&\#0?40;/(/g; |
$result =~ s/&\#0?41;/)/g; |
$result =~ s/&\#0?41;/)/g; |
Line 1482 sub old_character_chart {
|
Line 1633 sub old_character_chart {
|
$result =~ s/&(\#160|nbsp);/~/g; |
$result =~ s/&(\#160|nbsp);/~/g; |
$result =~ s/&(\#161|iexcl);/!\`/g; |
$result =~ s/&(\#161|iexcl);/!\`/g; |
$result =~ s/&(\#162|cent);/\\textcent /g; |
$result =~ s/&(\#162|cent);/\\textcent /g; |
$result =~ s/&(\#163|pound);/\\pounds /g; |
$result =~ s/&(\#163|pound);/\\pounds /g; |
$result =~ s/&(\#164|curren);/\\textcurrency /g; |
$result =~ s/&(\#164|curren);/\\textcurrency /g; |
$result =~ s/&(\#165|yen);/\\textyen /g; |
$result =~ s/&(\#165|yen);/\\textyen /g; |
$result =~ s/&(\#166|brvbar);/\\textbrokenbar /g; |
$result =~ s/&(\#166|brvbar);/\\textbrokenbar /g; |
Line 1508 sub old_character_chart {
|
Line 1659 sub old_character_chart {
|
$result =~ s/&(\#188|frac14);/\\textonequarter /g; |
$result =~ s/&(\#188|frac14);/\\textonequarter /g; |
$result =~ s/&(\#189|frac12);/\\textonehalf /g; |
$result =~ s/&(\#189|frac12);/\\textonehalf /g; |
$result =~ s/&(\#190|frac34);/\\textthreequarters /g; |
$result =~ s/&(\#190|frac34);/\\textthreequarters /g; |
$result =~ s/&(\#191|iquest);/?\`/g; |
$result =~ s/&(\#191|iquest);/?\`/g; |
$result =~ s/&(\#192|Agrave);/\\\`{A}/g; |
$result =~ s/&(\#192|Agrave);/\\\`{A}/g; |
$result =~ s/&(\#193|Aacute);/\\\'{A}/g; |
$result =~ s/&(\#193|Aacute);/\\\'{A}/g; |
$result =~ s/&(\#194|Acirc);/\\^{A}/g; |
$result =~ s/&(\#194|Acirc);/\\^{A}/g; |
$result =~ s/&(\#195|Atilde);/\\~{A}/g; |
$result =~ s/&(\#195|Atilde);/\\~{A}/g; |
$result =~ s/&(\#196|Auml);/\\\"{A}/g; |
$result =~ s/&(\#196|Auml);/\\\"{A}/g; |
$result =~ s/&(\#197|Aring);/{\\AA}/g; |
$result =~ s/&(\#197|Aring);/{\\AA}/g; |
$result =~ s/&(\#198|AElig);/{\\AE}/g; |
$result =~ s/&(\#198|AElig);/{\\AE}/g; |
$result =~ s/&(\#199|Ccedil);/\\c{c}/g; |
$result =~ s/&(\#199|Ccedil);/\\c{c}/g; |
$result =~ s/&(\#200|Egrave);/\\\`{E}/g; |
$result =~ s/&(\#200|Egrave);/\\\`{E}/g; |
$result =~ s/&(\#201|Eacute);/\\\'{E}/g; |
$result =~ s/&(\#201|Eacute);/\\\'{E}/g; |
$result =~ s/&(\#202|Ecirc);/\\^{E}/g; |
$result =~ s/&(\#202|Ecirc);/\\^{E}/g; |
$result =~ s/&(\#203|Euml);/\\\"{E}/g; |
$result =~ s/&(\#203|Euml);/\\\"{E}/g; |
$result =~ s/&(\#204|Igrave);/\\\`{I}/g; |
$result =~ s/&(\#204|Igrave);/\\\`{I}/g; |
$result =~ s/&(\#205|Iacute);/\\\'{I}/g; |
$result =~ s/&(\#205|Iacute);/\\\'{I}/g; |
$result =~ s/&(\#206|Icirc);/\\^{I}/g; |
$result =~ s/&(\#206|Icirc);/\\^{I}/g; |
$result =~ s/&(\#207|Iuml);/\\\"{I}/g; |
$result =~ s/&(\#207|Iuml);/\\\"{I}/g; |
$result =~ s/&(\#209|Ntilde);/\\~{N}/g; |
$result =~ s/&(\#209|Ntilde);/\\~{N}/g; |
$result =~ s/&(\#210|Ograve);/\\\`{O}/g; |
$result =~ s/&(\#210|Ograve);/\\\`{O}/g; |
$result =~ s/&(\#211|Oacute);/\\\'{O}/g; |
$result =~ s/&(\#211|Oacute);/\\\'{O}/g; |
$result =~ s/&(\#212|Ocirc);/\\^{O}/g; |
$result =~ s/&(\#212|Ocirc);/\\^{O}/g; |
$result =~ s/&(\#213|Otilde);/\\~{O}/g; |
$result =~ s/&(\#213|Otilde);/\\~{O}/g; |
$result =~ s/&(\#214|Ouml);/\\\"{O}/g; |
$result =~ s/&(\#214|Ouml);/\\\"{O}/g; |
$result =~ s/&(\#215|times);/\\ensuremath\{\\times\}/g; |
$result =~ s/&(\#215|times);/\\ensuremath\{\\times\}/g; |
$result =~ s/&(\#216|Oslash);/{\\O}/g; |
$result =~ s/&(\#216|Oslash);/{\\O}/g; |
$result =~ s/&(\#217|Ugrave);/\\\`{U}/g; |
$result =~ s/&(\#217|Ugrave);/\\\`{U}/g; |
$result =~ s/&(\#218|Uacute);/\\\'{U}/g; |
$result =~ s/&(\#218|Uacute);/\\\'{U}/g; |
$result =~ s/&(\#219|Ucirc);/\\^{U}/g; |
$result =~ s/&(\#219|Ucirc);/\\^{U}/g; |
$result =~ s/&(\#220|Uuml);/\\\"{U}/g; |
$result =~ s/&(\#220|Uuml);/\\\"{U}/g; |
Line 1564 sub old_character_chart {
|
Line 1715 sub old_character_chart {
|
$result =~ s/&(\#246|ouml);/\\\"{o}/g; |
$result =~ s/&(\#246|ouml);/\\\"{o}/g; |
$result =~ s/&(\#247|divide);/\\ensuremath\{\\div\}/g; |
$result =~ s/&(\#247|divide);/\\ensuremath\{\\div\}/g; |
$result =~ s/&(\#248|oslash);/{\\o}/g; |
$result =~ s/&(\#248|oslash);/{\\o}/g; |
$result =~ s/&(\#249|ugrave);/\\\`{u}/g; |
$result =~ s/&(\#249|ugrave);/\\\`{u}/g; |
$result =~ s/&(\#250|uacute);/\\\'{u}/g; |
$result =~ s/&(\#250|uacute);/\\\'{u}/g; |
$result =~ s/&(\#251|ucirc);/\\^{u}/g; |
$result =~ s/&(\#251|ucirc);/\\^{u}/g; |
$result =~ s/&(\#252|uuml);/\\\"{u}/g; |
$result =~ s/&(\#252|uuml);/\\\"{u}/g; |
Line 1711 sub old_character_chart {
|
Line 1862 sub old_character_chart {
|
my %page_formats= |
my %page_formats= |
('letter' => { |
('letter' => { |
'book' => { |
'book' => { |
'1' => [ '7.1 in','9.8 in', '-0.57 in','-0.57 in','0.275 in'], |
'1' => [ '7.1 in','9.7 in', '-0.57 in','-0.57 in','-0.5 in'], |
'2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','0.275 in'] |
'2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','-0.5 in'] |
}, |
}, |
'album' => { |
'album' => { |
'1' => [ '8.8 in', '6.8 in','-0.55 in', '-0.55 in','0.394 in'], |
'1' => [ '8.8 in', '6.8 in','-0.55 in', '-0.55 in','-0.5 in'], |
'2' => [ '4.8 in', '6.8 in','-0.5 in', '-1.0 in','3.5 in'] |
'2' => [ '4.8 in', '6.7 in','-0.5 in', '-1.0 in','3.0 in'] |
}, |
}, |
}, |
}, |
'legal' => { |
'legal' => { |
Line 1726 my %page_formats=
|
Line 1877 my %page_formats=
|
}, |
}, |
'album' => { |
'album' => { |
'1' => ['12 in','7.1 in',,'-0.57 in','-0.57 in','-0.5 in'], |
'1' => ['12 in','7.1 in',,'-0.57 in','-0.57 in','-0.5 in'], |
'2' => ['6.0 in','7.1 in','-1 in','-1 in','5 in'] |
'2' => ['5.7 in','7.1 in','-1 in','-1 in','5 in'] |
}, |
}, |
}, |
}, |
'tabloid' => { |
'tabloid' => { |
Line 1775 my %page_formats=
|
Line 1926 my %page_formats=
|
'2' => [ '9.1 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm'] |
'2' => [ '9.1 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm'] |
}, |
}, |
'album' => { |
'album' => { |
'1' => ['21.59 cm','19.558 cm','-1.397cm','-2.11 cm','0 cm'], |
'1' => ['24.0 cm','18.0 cm','-1.0 cm','-1.0 cm','-1.25 cm'], |
'2' => ['9.91 cm','19.558 cm','-1.397 cm','-2.11 cm','0 cm'] |
'2' => ['11.5 cm','18.0 cm','-0.7 cm','-1.7 cm','-1.25 cm'] |
}, |
}, |
}, |
}, |
'a5' => { |
'a5' => { |
Line 1808 sub page_format {
|
Line 1959 sub page_format {
|
# "A2 [420x594 mm]", "A3 [297x420 mm]", |
# "A2 [420x594 mm]", "A3 [297x420 mm]", |
# "A4 [210x297 mm]", "A5 [148x210 mm]", |
# "A4 [210x297 mm]", "A5 [148x210 mm]", |
# "A6 [105x148 mm]" |
# "A6 [105x148 mm]" |
# |
# |
my ($papersize,$layout,$numberofcolumns) = @_; |
my ($papersize,$layout,$numberofcolumns) = @_; |
return @{$page_formats{$papersize}->{$layout}->{$numberofcolumns}}; |
return @{$page_formats{$papersize}->{$layout}->{$numberofcolumns}}; |
} |
} |
|
|
Line 1829 sub get_course {
|
Line 1980 sub get_course {
|
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'}; |
my $sec = $env{'request.course.sec'}; |
|
|
} |
} |
return $courseidinfo; |
return $courseidinfo; |
} |
} |
|
|
sub page_format_transformation { |
sub page_format_transformation { |
my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents,$indexlist,$selectionmade) = @_; |
my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents, |
|
$indexlist,$selectionmade,$mostrecent) = @_; |
my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin); |
my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin); |
|
|
if ($selectionmade eq '4') { |
if ($selectionmade eq '4') { |
Line 1849 sub page_format_transformation {
|
Line 2001 sub page_format_transformation {
|
} |
} |
($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin); |
($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin); |
|
|
|
my $name; |
my $name = &get_name(); |
if ($mostrecent ne '') { |
|
$name = $mostrecent; |
|
} else { |
|
$name = &get_name(); |
|
} |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
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, |
Line 1860 sub page_format_transformation {
|
Line 2016 sub page_format_transformation {
|
my $fancypagestatement=''; |
my $fancypagestatement=''; |
if ($numberofcolumns eq '2') { |
if ($numberofcolumns eq '2') { |
$fancypagestatement="\\fancyhead{}\\fancyhead[LO]{$header_text}"; |
$fancypagestatement="\\fancyhead{}\\fancyhead[LO]{$header_text}"; |
|
if ($parmhash{'print_header_format'} eq '') { |
|
$fancypagestatement .= "\\fancyhead[RE]{\\thepage \\\\[\\baselineskip]}"; |
|
} |
} else { |
} else { |
$fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}"; |
$fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}"; |
} |
} |
|
$fancypagestatement .= "\\fancyfoot{}"; |
|
my ($paperwidth,$paperheight); |
if ($layout eq 'album') { |
if ($layout eq 'album') { |
$text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; |
$text =~ s/\\begin\{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; |
|
if ($papersize eq 'a4') { |
|
$paperwidth = '29.7cm'; |
|
$paperheight = '21.0cm'; |
|
} elsif ($numberofcolumns eq '1') { |
|
if ($papersize eq 'letter') { |
|
$paperwidth = '11.0in'; |
|
$paperheight = '8.5in'; |
|
} elsif ($papersize eq 'legal') { |
|
$paperwidth = '14.0in'; |
|
$paperheight = '8.5in'; |
|
} |
|
} |
} elsif ($layout eq 'book') { |
} elsif ($layout eq 'book') { |
if ($choice ne 'All class print') { |
if ($choice ne 'All class print') { |
$text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/; |
$text =~ s/\\begin\{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/; |
} else { |
} else { |
$text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /; |
$text =~ s/\\pagestyle\{fancy}\\rhead\{}\\chead\{}\s*\\begin\{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /; |
} |
|
if ($papersize eq 'a4') { |
|
my $papersize_text; |
|
if ($perm{'pav'}) { |
|
$papersize_text = '\\special{papersize=210mm,297mm}'; |
|
} else { |
|
$papersize_text = '\special{papersize=210mm,297mm}'; |
|
} |
|
$text =~ s/(\\begin{document})/$1$papersize_text/; |
|
} |
} |
|
if ($papersize eq 'a4') { |
|
$paperwidth = '21.0cm'; |
|
$paperheight = '29.7cm'; |
|
} elsif ($papersize eq 'letter') { |
|
$paperwidth = '8.5in'; |
|
$paperheight = '11.0in'; |
|
} elsif ($papersize eq 'legal') { |
|
$paperwidth = '8.5in'; |
|
$paperheight = '14.0in'; |
|
} |
|
} |
|
if ($paperwidth ne '' && $paperheight ne '') { |
|
my $papersize_text; |
|
if ($perm{'pav'}) { |
|
$papersize_text = '\\special{papersize='.$paperwidth.','.$paperheight.'}'; |
|
} else { |
|
$papersize_text = '\special{papersize='.$paperwidth.','.$paperheight.'}'; |
|
} |
|
$text =~ s/(\\begin\{document})/$1$papersize_text/; |
} |
} |
if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;} |
if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;} |
if ($indexlist eq 'yes') { |
if ($indexlist eq 'yes') { |
$text=~s/(\\begin{document})/\\makeindex $1/; |
$text=~s/(\\begin\{document})/\\makeindex $1/; |
$text=~s/(\\end{document})/\\strut\\\\\\strut\\printindex $1/; |
$text=~s/(\\end\{document})/\\strut\\\\\\strut\\printindex $1/; |
} |
} |
return $text; |
return $text; |
} |
} |
Line 1892 sub page_format_transformation {
|
Line 2075 sub page_format_transformation {
|
|
|
sub page_cleanup { |
sub page_cleanup { |
my $result = shift; |
my $result = shift; |
|
|
$result =~ m/\\end{document}(\d*)$/; |
$result =~ m/\\end\{document}(\d*)$/; |
my $number_of_columns = $1; |
my $number_of_columns = $1; |
my $insert = '{'; |
my $insert = '{'; |
for (my $id=1;$id<=$number_of_columns;$id++) { $insert .='l'; } |
for (my $id=1;$id<=$number_of_columns;$id++) { $insert .='l'; } |
$insert .= '}'; |
$insert .= '}'; |
$result =~ s/(\\begin{longtable})INSERTTHEHEADOFLONGTABLE\\endfirsthead\\endhead/$1$insert/g; |
$result =~ s/(\\begin\{longtable})INSERTTHEHEADOFLONGTABLE\\endfirsthead\\endhead/$1$insert/g; |
$result =~ s/&\s*REMOVETHEHEADOFLONGTABLE\\\\/\\\\/g; |
$result =~ s/&\s*REMOVETHEHEADOFLONGTABLE\\\\/\\\\/g; |
return $result,$number_of_columns; |
return $result,$number_of_columns; |
} |
} |
Line 1934 my $end_of_student = "\n".'\special{ps:E
|
Line 2117 my $end_of_student = "\n".'\special{ps:E
|
|
|
sub latex_corrections { |
sub latex_corrections { |
my ($number_of_columns,$result,$selectionmade,$answer_mode) = @_; |
my ($number_of_columns,$result,$selectionmade,$answer_mode) = @_; |
# $result =~ s/\\includegraphics{/\\includegraphics\[width=\\minipagewidth\]{/g; |
# $result =~ s/\\includegraphics\{/\\includegraphics\[width=\\minipagewidth\]{/g; |
my $copyright = ©right_line(); |
my $copyright = ©right_line(); |
if ($selectionmade eq '1' || $answer_mode eq 'only') { |
if ($selectionmade eq '1' || $answer_mode eq 'only') { |
$result =~ s/(\\end{document})/\\strut\\vskip 0 mm $copyright $end_of_student $1/; |
$result =~ s/(\\end\{document})/\\strut\\vskip 0 mm $copyright $end_of_student $1/; |
} else { |
} else { |
$result =~ s/(\\end{document})/\\strut\\vspace\*{-4 mm}\\newline $copyright $end_of_student $1/; |
$result =~ s/(\\end\{document})/\\strut\\vspace\*{-4 mm}\\newline $copyright $end_of_student $1/; |
} |
} |
$result =~ s/\$number_of_columns/$number_of_columns/g; |
$result =~ s/\$number_of_columns/$number_of_columns/g; |
$result =~ s/(\\end{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill})/$2$1/g; |
$result =~ s/(\\end\{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]\{\\hrulefill})/$2$1/g; |
$result =~ s/(\\end{longtable}\s*)\\strut\\newline/$1/g; |
$result =~ s/(\\end\{longtable}\s*)\\strut\\newline/$1/g; |
#-- LaTeX corrections |
#-- LaTeX corrections |
my $first_comment = index($result,'<!--',0); |
my $first_comment = index($result,'<!--',0); |
while ($first_comment != -1) { |
while ($first_comment != -1) { |
my $end_comment = index($result,'-->',$first_comment); |
my $end_comment = index($result,'-->',$first_comment); |
Line 1962 sub latex_corrections {
|
Line 2145 sub latex_corrections {
|
if ($result =~ m/&(\w+|#\d+);/) { |
if ($result =~ m/&(\w+|#\d+);/) { |
$result = &character_chart($result); |
$result = &character_chart($result); |
} |
} |
$result =~ s/(\\end{tabular})\s*\\vskip 0 mm/$1/g; |
$result =~ s/(\\end\{tabular})\s*\\vskip 0 mm/$1/g; |
$result =~ s/(\\begin{enumerate})\s*\\noindent/$1/g; |
$result =~ s/(\\begin\{enumerate})\s*\\noindent/$1/g; |
return $result; |
return $result; |
} |
} |
|
|
Line 2056 sub get_textwidth {
|
Line 2239 sub get_textwidth {
|
|
|
sub unsupported { |
sub unsupported { |
my ($currentURL,$mode,$symb)=@_; |
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} |
if ($mode ne '') {$mode='\\'.$mode} |
my $result.= &print_latex_header($mode); |
my $result = &print_latex_header($mode); |
if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { |
if ($cleanURL=~m|^(/adm/wrapper)?/ext/|) { |
$currentURL=~s|^(/adm/wrapper/)?ext/|http://|; |
$cleanURL=~s|^(/adm/wrapper)?/ext/|http://|; |
my $title=&Apache::lonnet::gettitle($symb); |
$cleanURL=~s|^http://https://|https://|; |
$title = &Apache::lonxml::latex_special_symbols($title); |
if ($shown eq $currentURL) { |
$result.=' \strut \\\\ '.$title.' \strut \\\\ '.$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 { |
} 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}'; |
$result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}'; |
return $result; |
return $result; |
Line 2100 sub print_page_in_course {
|
Line 2296 sub print_page_in_course {
|
$laystyle = &map_laystyle($laystyle); |
$laystyle = &map_laystyle($laystyle); |
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle, |
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle, |
$numberofcolumns); |
$numberofcolumns); |
my $LaTeXwidth=&recalcto_mm($textwidth); |
my $LaTeXwidth=&recalcto_mm($textwidth); |
|
|
|
|
if ($mode ne '') {$mode='\\'.$mode} |
if ($mode ne '') {$mode='\\'.$mode} |
my $result = &print_latex_header($mode); |
my $result = &print_latex_header($mode); |
if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { |
|
$currentURL=~s|^(/adm/wrapper/)?ext/|http://|; |
my $title=&Apache::lonnet::gettitle($currentURL); |
my $title=&Apache::lonnet::gettitle($symb); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$result .= '\noindent\textit{'.$title.'}\\\\'; |
} else { |
|
my $esc_currentURL= $currentURL; |
|
$esc_currentURL =~ s/_/\\_/g; |
|
$result.=$esc_currentURL; |
|
} |
|
$result .= '\\\\'; |
|
|
|
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
&Apache::lonnet::appenv({'construct.style' => |
&Apache::lonnet::appenv({'construct.style' => |
Line 2123 sub print_page_in_course {
|
Line 2312 sub print_page_in_course {
|
&Apache::lonnet::delenv('construct.style'); |
&Apache::lonnet::delenv('construct.style'); |
} |
} |
|
|
# First is the overall page description. This is then followed by the |
# First is the overall page description. This is then followed by the |
# components of the page. Each of which must be printed independently. |
# components of the page. Each of which must be printed independently. |
my $the_page = shift(@page_resources); |
my $the_page = shift(@page_resources); |
|
|
|
|
foreach my $resource (@page_resources) { |
foreach my $resource (@page_resources) { |
my $resource_src = $resource->src(); # Essentially the URL of the resource. |
my $resource_src = $resource->src(); # Essentially the URL of the resource. |
$result .= $resource->title() . '\\\\'; |
my $current_url = $resource->link(); |
|
|
# Recurse if a .page: |
# Recurse if a .page: |
|
|
if ($resource_src =~ /.page$/i) { |
if ($resource_src =~ /.page$/i) { |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
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()) { |
# these resources go through the XML transformer: |
$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)$/) { |
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); |
my $urlp = &Apache::lonnet::clutter($resource_src); |
|
|
Line 2155 sub print_page_in_course {
|
Line 2345 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'} = $pdfFormFields; # |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
|
|
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
$form{'suppress_tries'}=$parmhash{'suppress_tries'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
Line 2173 sub print_page_in_course {
|
Line 2363 sub print_page_in_course {
|
} |
} |
$form{'rndseed'}=$rndseed; |
$form{'rndseed'}=$rndseed; |
&Apache::lonnet::appenv(\%moreenv); |
&Apache::lonnet::appenv(\%moreenv); |
|
|
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
|
|
my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form); |
my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form); |
Line 2198 sub print_page_in_course {
|
Line 2388 sub print_page_in_course {
|
my $answer=&ssi_with_retries($urlp,$ssi_retry_count, %answerform); |
my $answer=&ssi_with_retries($urlp,$ssi_retry_count, %answerform); |
|
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
$texversion= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
Line 2208 sub print_page_in_course {
|
Line 2398 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}'; |
} |
} |
|
|
|
|
|
|
|
|
|
|
} |
} |
# Print annotations. |
# Print annotations. |
|
|
|
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $annotation .= &annotate($currentURL); |
my $annotation .= &annotate($currentURL); |
$texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; |
$texversion =~ s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/; |
} |
} |
|
|
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
$texversion=&IndexCreation($texversion,$currentURL); |
$texversion=&IndexCreation($texversion,$currentURL); |
} |
} |
Line 2264 sub recently_generated {
|
Line 2449 sub recently_generated {
|
my $pdf_result; |
my $pdf_result; |
opendir(DIR,$prtspool); |
opendir(DIR,$prtspool); |
|
|
my @files = |
my @files = |
grep(/^$env{'user.name'}_$env{'user.domain'}_printout_(\d+)_.*\.(pdf|zip)$/,readdir(DIR)); |
grep(/^$env{'user.name'}_$env{'user.domain'}_printout_(\d+)_.*\.(pdf|zip)$/,readdir(DIR)); |
closedir(DIR); |
closedir(DIR); |
|
|
Line 2344 sub get_page_breaks {
|
Line 2529 sub get_page_breaks {
|
} |
} |
return %page_breaks; |
return %page_breaks; |
} |
} |
# |
# |
# Returns text to insert for any extra vskip prior to the resource. |
# Returns text to insert for any extra vskip prior to the resource. |
# Parameters: |
# Parameters: |
# helper - Reference to the helper object driving the printout. |
# helper - Reference to the helper object driving the printout. |
Line 2355 sub get_page_breaks {
|
Line 2540 sub get_page_breaks {
|
# EXTRASPACE has the list of extra space values. |
# EXTRASPACE has the list of extra space values. |
# EXTRASPACE_UNITS is the set of resources for which the units are |
# EXTRASPACE_UNITS is the set of resources for which the units are |
# mm. All others are 'in'. |
# mm. All others are 'in'. |
# |
# |
# The resource is found in the POSSIBLE_RESOURCES to get the index |
# The resource is found in the POSSIBLE_RESOURCES to get the index |
# of the EXTRASPACE value. |
# of the EXTRASPACE value. |
# |
# |
Line 2376 sub load_skips {
|
Line 2561 sub load_skips {
|
|
|
my ($helper) = @_; |
my ($helper) = @_; |
|
|
# If this is the first time, unrap the resources and extra spaces: |
# If this is the first time, unwrap the resources and extra spaces: |
|
|
if (!$skips_loaded) { |
if (!$skips_loaded) { |
@extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'})); |
@extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'})); |
Line 2424 sub get_extra_vspaces {
|
Line 2609 sub get_extra_vspaces {
|
# The resource chooser part of the helper needs more than just |
# The resource chooser part of the helper needs more than just |
# the value of the extraspaces var to recover the value into a text |
# the value of the extraspaces var to recover the value into a text |
# field option. This sub produces the required format for the saved var: |
# field option. This sub produces the required format for the saved var: |
# specifically |
# specifically |
# ||| separated fields of the form resourcename=value |
# ||| separated fields of the form resourcename=value |
# |
# |
# Parameters: |
# Parameters: |
Line 2458 sub set_form_extraspace {
|
Line 2643 sub set_form_extraspace {
|
$env{'form.extraspace'} = $result; |
$env{'form.extraspace'} = $result; |
$env{'form.extraspace_units'} = $helper->{'VARS'}->{'EXTRASPACE_UNITS'}; |
$env{'form.extraspace_units'} = $helper->{'VARS'}->{'EXTRASPACE_UNITS'}; |
return $result; |
return $result; |
|
|
} |
} |
|
|
# Output a sequence (recursively if neeed) |
# Output a sequence (recursively if neeed) |
Line 2484 sub print_construction_sequence {
|
Line 2669 sub print_construction_sequence {
|
} |
} |
my $errtext=&LONCAPA::map::mapread(&Apache::lonnet::filelocation('',$currentURL)); |
my $errtext=&LONCAPA::map::mapread(&Apache::lonnet::filelocation('',$currentURL)); |
|
|
# |
# |
# These make this all support recursing for subsequences. |
# These make this all support recursing for subsequences. |
# |
# |
my @order = @LONCAPA::map::order; |
my @order = @LONCAPA::map::order; |
my @resources = @LONCAPA::map::resources; |
my @resources = @LONCAPA::map::resources; |
|
|
for (my $member=0;$member<=$#order;$member++) { |
for (my $member=0;$member<=$#order;$member++) { |
$resources[$order[$member]]=~/^([^:]*):([^:]*):/; |
$resources[$order[$member]]=~/^([^:]*):([^:]*):/; |
Line 2504 sub print_construction_sequence {
|
Line 2689 sub print_construction_sequence {
|
$texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
$texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
} |
} |
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
($urlp=~/$LONCAPA::assess_page_re/)) { |
($urlp=~/$LONCAPA::assess_page_re/)) { |
# Don't permanently modify %$form... |
# Don't permanently modify %$form... |
my %answerform = %form; |
my %answerform = %form; |
Line 2516 sub print_construction_sequence {
|
Line 2701 sub print_construction_sequence {
|
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
# If necessary, encapsulate answer in minipage: |
# If necessary, encapsulate answer in minipage: |
|
|
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}); |
my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
$body.=&path_to_problem($urlp,$LaTeXwidth); |
$body.=&path_to_problem($urlp,$LaTeXwidth); |
$body.='\vskip 1 mm '.$answer.'\end{document}'; |
$body.='\vskip 1 mm '.$answer.'\end{document}'; |
$body = &encapsulate_minipage($body); |
$body = &encapsulate_minipage($body,$answerform{'problem_split'}); |
$texversion.=$body; |
$texversion.=$body; |
} |
} |
} |
} |
Line 2541 sub print_construction_sequence {
|
Line 2726 sub print_construction_sequence {
|
$result.=$texversion; |
$result.=$texversion; |
|
|
} elsif ($urlp=~/\.(sequence|page)$/) { |
} elsif ($urlp=~/\.(sequence|page)$/) { |
|
|
# header: |
# header: |
|
|
$result.='\strut\newline\noindent Sequence/page '.$urlp.'\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent '; |
$result.='\strut\newline\noindent Sequence/page '.$urlp.'\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent '; |
|
|
# IF sequence, recurse: |
# IF sequence, recurse: |
|
|
if ($urlp =~ /\.sequence$/) { |
if ($urlp =~ /\.sequence$/) { |
$result .= &print_construction_sequence($urlp, |
$result .= &print_construction_sequence($urlp, |
$helper, %form, |
$helper, %form, |
$LaTeXwidth); |
$LaTeXwidth); |
} |
} |
} |
} |
Line 2565 sub print_construction_sequence {
|
Line 2750 sub print_construction_sequence {
|
if ($member != $#order) { |
if ($member != $#order) { |
$texversion .= '\\ \cleardoublepage'; |
$texversion .= '\\ \cleardoublepage'; |
} |
} |
|
|
$result .= $texversion; |
$result .= $texversion; |
} |
} |
} |
} |
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} |
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin\{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} |
return $result; |
return $result; |
} |
} |
|
|
Line 2589 sub print_construction_sequence {
|
Line 2774 sub print_construction_sequence {
|
# 6 Print selected problems from a folder. |
# 6 Print selected problems from a folder. |
# 7 Print print selected resources from some scope. |
# 7 Print print selected resources from some scope. |
# 8 Print resources for selected students. |
# 8 Print resources for selected students. |
|
# 9 Print for anonymous CODEs |
# |
# |
#BZ 5209 |
#BZ 5209 |
# 2 map_incomplete_problems_seq Print incomplete problems from the current |
# 2 map_incomplete_problems_seq Print incomplete problems from the current |
Line 2605 sub print_construction_sequence {
|
Line 2791 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 2625 sub output_data {
|
Line 2812 sub output_data {
|
url += 'form=' + formname + '&'; |
url += 'form=' + formname + '&'; |
if (only != null) { |
if (only != null) { |
url += 'only=' + only + '&'; |
url += 'only=' + only + '&'; |
} |
} |
if (omit != null) { |
if (omit != null) { |
url += 'omit=' + omit + '&'; |
url += 'omit=' + omit + '&'; |
} |
} |
Line 2660 ENDPART
|
Line 2847 ENDPART
|
|
|
$env{'form.pagebreaks'} = $helper->{'VARS'}->{'FINISHPAGE'}; |
$env{'form.pagebreaks'} = $helper->{'VARS'}->{'FINISHPAGE'}; |
&set_form_extraspace($helper); |
&set_form_extraspace($helper); |
$env{'form.lastprinttype'} = $print_type; |
$env{'form.lastprinttype'} = $print_type; |
&Apache::loncommon::store_course_settings('print', |
&Apache::loncommon::store_course_settings('print', |
{'pagebreaks' => 'scalar', |
{'pagebreaks' => 'scalar', |
'extraspace' => 'scalar', |
'extraspace' => 'scalar', |
Line 2677 ENDPART
|
Line 2864 ENDPART
|
$laystyle = &map_laystyle($laystyle); |
$laystyle = &map_laystyle($laystyle); |
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns); |
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns); |
my $assignment = $env{'form.assignment'}; |
my $assignment = $env{'form.assignment'}; |
my $LaTeXwidth=&recalcto_mm($textwidth); |
my $LaTeXwidth=&recalcto_mm($textwidth); |
my @print_array=(); |
my @print_array=(); |
my @student_names=(); |
my @student_names=(); |
|
my $lastprinted; |
|
|
|
# Common settings for the %form hash: |
# Common settings for the %form has: |
# In some cases these settings get overridden by specific cases, but the |
# In some cases these settings get overriddent by specific cases, but the |
|
# settings are common enough to make it worthwhile factoring them out |
# settings are common enough to make it worthwhile factoring them out |
# here. |
# here. |
# |
# |
Line 2693 ENDPART
|
Line 2880 ENDPART
|
$form{'pdfFormFields'} = $pdfFormFields; |
$form{'pdfFormFields'} = $pdfFormFields; |
|
|
# 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 |
# check box selecting this option to be presnt unless it's ok, |
# check box selecting this option to be presnt unless it's ok, |
# and by lonresponse's priv. check. |
# and by lonresponse's priv. check. |
# The if is here because lonresponse.pm only cares that |
# The if is here because lonresponse.pm only cares that |
# showallfoils is defined, not what the value is. |
# showallfoils is defined, not what the value is. |
|
|
if ($helper->{'VARS'}->{'showallfoils'} eq "1") { |
if ($helper->{'VARS'}->{'showallfoils'} eq "1") { |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; |
} |
} |
|
|
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
if ($helper->{'VARS'}->{'style_file'}=~/\w/) { |
&Apache::lonnet::appenv({'construct.style' => |
&Apache::lonnet::appenv({'construct.style' => |
$helper->{'VARS'}->{'style_file'}}); |
$helper->{'VARS'}->{'style_file'}}); |
Line 2725 ENDPART
|
Line 2912 ENDPART
|
$cleanURL=$currentURL; |
$cleanURL=$currentURL; |
} |
} |
$selectionmade = 1; |
$selectionmade = 1; |
|
|
if ($cleanURL!~m|^/adm/| |
if ($cleanURL!~m|^/adm/| |
&& $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) { |
&& $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) { |
my $rndseed=time; |
my $rndseed=time; |
Line 2755 ENDPART
|
Line 2942 ENDPART
|
$texversion.=&ssi_with_retries($currentURL,$ssi_retry_count, %form); |
$texversion.=&ssi_with_retries($currentURL,$ssi_retry_count, %form); |
|
|
# Add annotations if required: |
# Add annotations if required: |
|
|
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
|
|
&Apache::lonnet::delenv('request.filename'); |
&Apache::lonnet::delenv('request.filename'); |
Line 2778 ENDPART
|
Line 2965 ENDPART
|
|
|
|
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
Line 2788 ENDPART
|
Line 2975 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 2798 ENDPART
|
Line 2985 ENDPART
|
|
|
|
|
|
|
|
|
} |
} |
# Print annotations. |
# Print annotations. |
|
|
|
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $annotation .= &annotate($currentURL); |
my $annotation .= &annotate($currentURL); |
$texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; |
$texversion =~ s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/; |
} |
} |
|
|
|
|
Line 2824 ENDPART
|
Line 3011 ENDPART
|
&& $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') { |
&& $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') { |
$result .= &print_construction_sequence($currentURL, $helper, %form, |
$result .= &print_construction_sequence($currentURL, $helper, %form, |
$LaTeXwidth); |
$LaTeXwidth); |
$result .= '\end{document}'; |
$result .= '\end{document}'; |
if (!($result =~ /\\begin\{document\}/)) { |
if (!($result =~ /\\begin\{document\}/)) { |
$result = &print_latex_header() . $result; |
$result = &print_latex_header() . $result; |
} |
} |
# End construction space sequence. |
# 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'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;} |
if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;} |
|
if ($currentURL=~/\/ext\.tool$/) {$currentURL=~s/^\/adm\/wrapper//;} |
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
my $texversion = &ssi_with_retries($currentURL, $ssi_retry_count, %form); |
my $texversion = &ssi_with_retries($currentURL, $ssi_retry_count, %form); |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $annotation = &annotate($currentURL); |
my $annotation = &annotate($currentURL); |
$texversion =~ s/(\\end{document})/$annotation$1/; |
$texversion =~ s/(\\end\{document})/$annotation$1/; |
} |
} |
$result .= $texversion; |
$result .= $texversion; |
} elsif ($cleanURL =~/\.tex$/) { |
} elsif ($cleanURL =~/\.tex$/) { |
Line 2847 ENDPART
|
Line 3035 ENDPART
|
$result = &fetch_raw_resource($currentURL); |
$result = &fetch_raw_resource($currentURL); |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $annotation = &annotate($currentURL); |
my $annotation = &annotate($currentURL); |
$result =~ s/(\\end{document})/$annotation$1/; |
$result =~ s/(\\end\{document})/$annotation$1/; |
} |
} |
|
|
$do_postprocessing = 0; # Don't massage the result. |
$do_postprocessing = 0; # Don't massage the result. |
Line 2864 ENDPART
|
Line 3052 ENDPART
|
$result .= &print_page_in_course($helper, $rparmhash, |
$result .= &print_page_in_course($helper, $rparmhash, |
$cleanURL, \@page_resources); |
$cleanURL, \@page_resources); |
|
|
|
|
} else { |
} else { |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, |
$helper->{'VARS'}->{'symb'}); |
$helper->{'VARS'}->{'symb'}); |
Line 2879 ENDPART
|
Line 3067 ENDPART
|
($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 |
($print_type eq 'map_incomplete_problems_seq') or |
($print_type eq 'map_incomplete_problems_seq') or |
Line 2889 ENDPART
|
Line 3076 ENDPART
|
($print_type eq 'map_resources_in_page')) |
($print_type eq 'map_resources_in_page')) |
{ |
{ |
$selectionmade = 3; |
$selectionmade = 3; |
} elsif (($print_type eq 'all_problems') |
} elsif (($print_type eq 'all_problems') |
) { |
) { |
$selectionmade = 4; |
$selectionmade = 4; |
} elsif ($print_type eq 'all_resources') { #BUGBUG |
} elsif ($print_type eq 'all_resources') { #BUGBUG |
Line 2914 ENDPART
|
Line 3101 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(); |
|
|
|
|
# Note due to document structure, not allowed to put \newpage |
# Note due to document structure, not allowed to put \newpage |
# prior to the first resource |
# prior to the first resource |
|
|
Line 2940 ENDPART
|
Line 3125 ENDPART
|
my $texversion=''; |
my $texversion=''; |
if ($urlp!~m|^/adm/| |
if ($urlp!~m|^/adm/| |
&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { |
|
my $extension = $1; |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
&Apache::lonxml::remember_problem_counter(); |
&Apache::lonxml::remember_problem_counter(); |
if ($flag_latex_header_remove eq 'NO') { |
if ($flag_latex_header_remove eq 'NO') { |
Line 2948 ENDPART
|
Line 3134 ENDPART
|
(($i==0) && |
(($i==0) && |
(($urlp=~/\.page$/) || |
(($urlp=~/\.page$/) || |
($print_type eq 'map_problems_in_page') || |
($print_type eq 'map_problems_in_page') || |
($print_type eq 'map_resources_in_page')))) { |
(($print_type eq 'map_resources_in_page') && ($extension !~ /^x?html?$/))))) { |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
} |
} |
} |
} |
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form); |
if ($urlp=~/\.page$/) { |
if ($urlp=~/\.page$/) { |
($texversion,my $number_of_columns_page) = &page_cleanup($texversion); |
($texversion,my $number_of_columns_page) = &page_cleanup($texversion); |
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} |
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} |
$texversion =~ s/\\end{document}\d*/\\end{document}/; |
$texversion =~ s/\\end\{document}\d*/\\end{document}/; |
$flag_page_in_sequence = 'YES'; |
$flag_page_in_sequence = 'YES'; |
} |
} |
|
|
Line 2971 ENDPART
|
Line 3157 ENDPART
|
&Apache::lonxml::restore_problem_counter(); |
&Apache::lonxml::restore_problem_counter(); |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
if ($urlp =~ /\.page$/) { |
if ($urlp =~ /\.page$/) { |
$answer =~ s/\\end{document}(\d*)$//; |
$answer =~ s/\\end\{document}(\d*)$//; |
} |
} |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($urlp =~ /\.page$/) { |
if ($urlp =~ /\.page$/) { |
my @probs = split(/\\keephidden{ENDOFPROBLEM}/,$texversion); |
my @probs = split(/\\keephidden\{ENDOFPROBLEM}/,$texversion); |
my $lastprob = pop(@probs); |
my $lastprob = pop(@probs); |
$texversion = join('\keephidden{ENDOFPROBLEM}',@probs). |
$texversion = join('\keephidden{ENDOFPROBLEM}',@probs). |
$answer.'\keephidden{ENDOFPROBLEM}'.$lastprob; |
$answer.'\keephidden{ENDOFPROBLEM}'.$lastprob; |
} else { |
} else { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/; |
} |
} |
} else { |
} else { |
if ($urlp=~/$LONCAPA::assess_page_re/) { |
if ($urlp=~/$LONCAPA::assess_page_re/) { |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
# $texversion =~ s/\\begin{document}//; # FIXME |
# $texversion =~ s/\\begin\{document}//; # FIXME |
my $title = &Apache::lonnet::gettitle($master_seq[$i]); |
my $title = &Apache::lonnet::gettitle($master_seq[$i]); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
$body .= &path_to_problem ($urlp,$LaTeXwidth); |
$body .= &path_to_problem ($urlp,$LaTeXwidth); |
$body .='\vskip 1 mm '.$answer; |
$body .='\vskip 1 mm '.$answer; |
$body = &encapsulate_minipage($body); |
$body = &encapsulate_minipage($body,$answerform{'problem_split'}); |
$texversion .= $body; |
$texversion .= $body; |
} else { |
} else { |
$texversion=''; |
$texversion=''; |
Line 3001 ENDPART
|
Line 3187 ENDPART
|
} |
} |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $annotation .= &annotate($urlp); |
my $annotation .= &annotate($urlp); |
$texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; |
$texversion =~ s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/; |
} |
} |
|
|
if ($flag_latex_header_remove ne 'NO') { |
if ($flag_latex_header_remove ne 'NO') { |
$texversion = &latex_header_footer_remove($texversion); |
$texversion = &latex_header_footer_remove($texversion); |
} else { |
} else { |
$texversion =~ s/\\end{document}//; |
$texversion =~ s/\\end\{document}//; |
} |
} |
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
$texversion=&IndexCreation($texversion,$urlp); |
$texversion=&IndexCreation($texversion,$urlp); |
Line 3018 ENDPART
|
Line 3204 ENDPART
|
$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 '; |
Line 3028 ENDPART
|
Line 3214 ENDPART
|
} |
} |
} |
} |
$result .= $texversion; |
$result .= $texversion; |
$flag_latex_header_remove = 'YES'; |
$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'}; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;} |
if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;} |
|
if ($urlp=~/\/ext\.tool$/) {$urlp=~s/^\/adm\/wrapper//;} |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form); |
my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form); |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $annotation = &annotate($urlp); |
my $annotation = &annotate($urlp); |
$texversion =~ s/(\\end{document)/$annotation$1/; |
$texversion =~ s/(\\end\{document)/$annotation$1/; |
} |
} |
|
|
if ($flag_latex_header_remove ne 'NO') { |
if ($flag_latex_header_remove ne 'NO') { |
$texversion = &latex_header_footer_remove($texversion); |
$texversion = &latex_header_footer_remove($texversion); |
} else { |
} else { |
$texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/; |
$texversion =~ s/\\end\{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/; |
} |
} |
$result .= $texversion; |
$result .= $texversion; |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
} elsif ($urlp=~ /\.pdf$/i) { |
} elsif ($urlp=~ /\.pdf$/i) { |
if ($i > 0) { |
if ($i > 0) { |
$result .= '\cleardoublepage'; |
$result .= '\cleardoublepage'; |
Line 3073 ENDPART
|
Line 3260 ENDPART
|
if ($flag_latex_header_remove ne 'NO') { |
if ($flag_latex_header_remove ne 'NO') { |
$texversion = &latex_header_footer_remove($texversion); |
$texversion = &latex_header_footer_remove($texversion); |
} else { |
} else { |
$texversion =~ s/\\end{document}//; |
$texversion =~ s/\\end\{document}//; |
} |
} |
$result .= $texversion; |
$result .= $texversion; |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
} |
} |
if (&Apache::loncommon::connection_aborted($r)) { |
if (&Apache::loncommon::connection_aborted($r)) { |
last; |
last; |
} |
} |
} |
} |
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
if ($flag_page_in_sequence eq 'YES') { |
if ($flag_page_in_sequence eq 'YES') { |
$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/; |
$result =~ s/\\usepackage\{calc}/\\usepackage{calc}\\usepackage{longtable}/; |
} |
} |
$result .= '\end{document}'; |
$result .= '\end{document}'; |
} elsif (($print_type eq 'problems_for_students') || |
} elsif (($print_type eq 'problems_for_students') || |
Line 3092 ENDPART
|
Line 3279 ENDPART
|
($print_type eq 'all_problems_students') || |
($print_type eq 'all_problems_students') || |
($print_type eq 'resources_for_students') || |
($print_type eq 'resources_for_students') || |
($print_type eq 'incomplete_problems_selpeople_course') || |
($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 |
#-- prints assignments for whole class or for selected students |
my $type; |
my $type; |
if (($print_type eq 'problems_for_students') || |
if (($print_type eq 'problems_for_students') || |
($print_type eq 'problems_for_students_from_page') || |
($print_type eq 'problems_for_students_from_page') || |
($print_type eq 'all_problems_students') || |
($print_type eq 'all_problems_students') || |
($print_type eq 'incomplete_problems_selpeople_course') || |
($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; |
$selectionmade=5; |
$type='problems'; |
$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; |
$selectionmade=8; |
$type='resources'; |
$type='resources'; |
} |
} |
Line 3114 ENDPART
|
Line 3305 ENDPART
|
# to override this and output the students by name. |
# to override this and output the students by name. |
# Each element of the students array is of the form: |
# Each element of the students array is of the form: |
# username:domain:section:last, first:status |
# username:domain:section:last, first:status |
# |
# |
# Note that student sort is not compatible with printing |
# Note that student sort is not compatible with printing |
# 1 section per pdf...so that setting overrides. |
# 1 section per pdf...so that setting overrides. |
# |
# |
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 { |
} else { |
@students = sort compare_sections @students; |
@students = sort compare_sections @students; |
} |
} |
&adjust_number_to_print($helper); |
&adjust_number_to_print($helper); |
|
|
Line 3130 ENDPART
|
Line 3321 ENDPART
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) { |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) { |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1; |
$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1; |
} |
} |
# If we are splitting on section boundaries, we need |
# If we are splitting on section boundaries, we need |
# to remember that in split_on_sections and |
# to remember that in split_on_sections and |
# print all of the students in the list. |
# print all of the students in the list. |
# |
# |
my $split_on_sections = 0; |
my $split_on_sections = 0; |
Line 3141 ENDPART
|
Line 3332 ENDPART
|
} |
} |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
|
|
|
my $map; |
|
if ($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'}); |
|
} |
|
} elsif (($helper->{'VARS'}->{'postdata'} eq '/adm/navmaps') && ($perm{'pfo'})) { |
|
$map = $helper->{'VARS'}->{'SEQUENCE'}; |
|
} |
|
|
#loop over students |
#loop over students |
|
|
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
Line 3159 ENDPART
|
Line 3362 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 3175 ENDPART
|
Line 3382 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 3187 ENDPART
|
Line 3395 ENDPART
|
# &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname); |
# &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname); |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student'); |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student'); |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
|
if ($printed) { |
|
$lastprinted = $fullname; |
|
} |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
$result .= $print_array[0].' \end{document}'; |
$result .= $print_array[0].' \end{document}'; |
} elsif (($print_type eq 'problems_for_anon') || |
} elsif (($print_type eq 'problems_for_anon') || |
($print_type eq 'problems_for_anon_page') || |
($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 $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'}; |
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'}; |
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'}; |
Line 3201 ENDPART
|
Line 3415 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::lonnet::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); |
foreach my $line (@lines) { |
foreach my $line (@lines) { |
chomp($line); |
next if (($line =~ /^\#/) || ($line eq '')); |
my ($name,$type,$length,$bubbles_per_item) = |
my ($name,$type,$length,$bubbles_per_item) = |
(split(/:/,$line))[0,2,4,17]; |
(split(/:/,$line))[0,2,4,17]; |
if ($name eq $code_option) { |
if ($name eq $code_option) { |
$code_length=$length; |
$code_length=$length; |
if ($type eq 'number') { $code_type = 'number'; } |
if ($type eq 'number') { $code_type = 'number'; } |
chomp($bubbles_per_item); |
chomp($bubbles_per_item); |
if (($bubbles_per_item ne '') && ($bubbles_per_item > 0)) { |
if (($bubbles_per_item ne '') && ($bubbles_per_item > 0)) { |
$bubbles_per_row = $bubbles_per_item; |
$bubbles_per_row = $bubbles_per_item; |
} |
} |
} |
} |
} |
} |
|
my $map; |
|
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)); |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
|
$moreenv{'suppress_tries'} = $parmhash{'suppress_tries'}; |
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'instructor_comments'}='hide'; |
$moreenv{'bubbles_per_row'} = $bubbles_per_row; |
$moreenv{'bubbles_per_row'} = $bubbles_per_row; |
my $seed=time+($$<<16)+($$); |
my $seed=time+($$<<16)+($$); |
Line 3251 ENDPART
|
Line 3472 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 3269 ENDPART
|
Line 3492 ENDPART
|
|| $number_per_page eq 'section') { |
|| $number_per_page eq 'section') { |
$number_per_page=$num_todo > 0 ? $num_todo : 1; |
$number_per_page=$num_todo > 0 ? $num_todo : 1; |
} |
} |
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') { |
$moreenv{'CODE'}=$code; |
$moreenv{'CODE'}=$code; |
} else { |
} else { |
$moreenv{'CODE'}=&num_to_letters($code); |
$moreenv{'CODE'}=&num_to_letters($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)= |
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 3289 ENDPART
|
Line 3521 ENDPART
|
&mt('last assignment').' '.$fullname); |
&mt('last assignment').' '.$fullname); |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
$count++; |
$count++; |
|
if ($printed) { |
|
$lastprinted = $fullname; |
|
} |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
$result .= $print_array[0].' \end{document}'; |
$result .= $print_array[0].' \end{document}'; |
} elsif ($print_type eq 'problems_from_directory') { |
} elsif ($print_type eq 'problems_from_directory') { |
#prints selected problems from the subdirectory |
#prints selected problems from the subdirectory |
$selectionmade = 6; |
$selectionmade = 6; |
my @list_of_files=split /\|\|\|/, $helper->{'VARS'}->{'FILES'}; |
my @list_of_files=split /\|\|\|/, $helper->{'VARS'}->{'FILES'}; |
@list_of_files=sort @list_of_files; |
@list_of_files=sort @list_of_files; |
my $flag_latex_header_remove = 'NO'; |
my $flag_latex_header_remove = 'NO'; |
my $rndseed=time; |
my $rndseed=time; |
if ($helper->{'VARS'}->{'curseed'}) { |
if ($helper->{'VARS'}->{'curseed'}) { |
$rndseed=$helper->{'VARS'}->{'curseed'}; |
$rndseed=$helper->{'VARS'}->{'curseed'}; |
Line 3326 ENDPART
|
Line 3561 ENDPART
|
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
if ($helper->{'VARS'}->{'construction'} ne '1') { |
Line 3334 ENDPART
|
Line 3569 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 3343 ENDPART
|
Line 3578 ENDPART
|
#this chunk is responsible for printing the path to problem |
#this chunk is responsible for printing the path to problem |
|
|
my $newurlp=&path_to_problem($urlp,$LaTeXwidth); |
my $newurlp=&path_to_problem($urlp,$LaTeXwidth); |
$texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 $newurlp/; |
$texversion =~ s/(\\begin\{minipage}\{\\textwidth})/$1 $newurlp/; |
if ($flag_latex_header_remove ne 'NO') { |
if ($flag_latex_header_remove ne 'NO') { |
$texversion = &latex_header_footer_remove($texversion); |
$texversion = &latex_header_footer_remove($texversion); |
} else { |
} else { |
$texversion =~ s/\\end{document}//; |
$texversion =~ s/\\end\{document}//; |
} |
} |
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { |
$texversion=&IndexCreation($texversion,$urlp); |
$texversion=&IndexCreation($texversion,$urlp); |
} |
} |
if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URL'} eq 'yes') { |
if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URL'} eq 'yes') { |
$texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$urlp| \\strut\\\\\\strut /; |
$texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$urlp| \\strut\\\\\\strut /; |
|
|
} |
} |
$result .= $texversion; |
$result .= $texversion; |
} |
} |
$flag_latex_header_remove = 'YES'; |
$flag_latex_header_remove = 'YES'; |
} |
} |
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\typeout)/ RANDOM SEED IS $rndseed $1/;} |
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\typeout)/ RANDOM SEED IS $rndseed $1/;} |
$result .= '\end{document}'; |
$result .= '\end{document}'; |
Line 3368 ENDPART
|
Line 3603 ENDPART
|
# Only post process if that has not been turned off e.g. by a raw latex resource. |
# Only post process if that has not been turned off e.g. by a raw latex resource. |
|
|
if ($do_postprocessing) { |
if ($do_postprocessing) { |
|
my $mostrecent; |
|
if ((($selectionmade == 5) || ($selectionmade == 8) || ($selectionmade == 9)) && |
|
(($numberofcolumns == 1) || ($laystyle eq 'album' && $papersize eq 'a4'))) { |
|
$mostrecent = $lastprinted; |
|
} |
$result = &page_format_transformation($papersize, |
$result = &page_format_transformation($papersize, |
$laystyle,$numberofcolumns, |
$laystyle,$numberofcolumns, |
$print_type,$result, |
$print_type,$result, |
$helper->{VARS}->{'assignment'}, |
$helper->{VARS}->{'assignment'}, |
$helper->{'VARS'}->{'TABLE_CONTENTS'}, |
$helper->{'VARS'}->{'TABLE_CONTENTS'}, |
$helper->{'VARS'}->{'TABLE_INDEX'}, |
$helper->{'VARS'}->{'TABLE_INDEX'}, |
$selectionmade); |
$selectionmade,$mostrecent); |
$result = &latex_corrections($number_of_columns,$result,$selectionmade, |
$result = &latex_corrections($number_of_columns,$result,$selectionmade, |
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
#if ($numberofcolumns == 1) { |
#if ($numberofcolumns == 1) { |
Line 3385 ENDPART
|
Line 3625 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'}); |
|
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 '') { |
|
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); |
|
} |
|
} |
|
} elsif (($helper->{VARS}->{'postdata'} eq '/adm/navmaps') && |
|
($env{'request.course.id'})) { |
|
$URLback=$helper->{VARS}->{'postdata'}; |
} |
} |
# |
# |
# Final adjustment of the font size: |
# Final adjustment of the font size: |
Line 3404 ENDPART
|
Line 3682 ENDPART
|
$result = &collect_languages($result); |
$result = &collect_languages($result); |
|
|
|
|
#-- writing .tex file in prtspool |
#-- writing .tex file in prtspool |
my $temp_file; |
my $temp_file; |
my $identifier = &Apache::loncommon::get_cgi_id(); |
my $identifier = &Apache::loncommon::get_cgi_id(); |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex"; |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex"; |
if (!($#print_array>0)) { |
if (!($#print_array>0)) { |
unless ($temp_file = Apache::File->new('>'.$filename)) { |
unless ($temp_file = Apache::File->new('>'.$filename)) { |
$r->log_error("Couldn't open $filename for output $!"); |
$r->log_error("Couldn't open $filename for output $!"); |
return SERVER_ERROR; |
return SERVER_ERROR; |
} |
} |
print $temp_file $result; |
print $temp_file $result; |
my $begin=index($result,'\begin{document}',0); |
my $begin=index($result,'\begin{document}',0); |
my $inc=substr($result,0,$begin+16); |
my $inc=substr($result,0,$begin+16); |
} else { |
} else { |
my $begin=index($result,'\begin{document}',0); |
my $begin=index($result,'\begin{document}',0); |
my $inc=substr($result,0,$begin+16); |
my $inc=substr($result,0,$begin+16); |
Line 3424 ENDPART
|
Line 3702 ENDPART
|
$print_array[$i]=$result; |
$print_array[$i]=$result; |
} else { |
} else { |
$print_array[$i].='\end{document}'; |
$print_array[$i].='\end{document}'; |
$print_array[$i] = |
$print_array[$i] = |
&latex_corrections($number_of_columns,$print_array[$i], |
&latex_corrections($number_of_columns,$print_array[$i], |
$selectionmade, |
$selectionmade, |
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
$helper->{'VARS'}->{'ANSWER_TYPE'}); |
|
|
my $anobegin=index($print_array[$i],'\setcounter{page}',0); |
my $anobegin=index($print_array[$i],'\setcounter{page}',0); |
substr($print_array[$i],0,$anobegin)=''; |
substr($print_array[$i],0,$anobegin)=''; |
$print_array[$i]=$inc.$print_array[$i]; |
$print_array[$i]=$inc.$print_array[$i]; |
Line 3436 ENDPART
|
Line 3714 ENDPART
|
my $temp_file; |
my $temp_file; |
my $newfilename=$filename; |
my $newfilename=$filename; |
my $num=$i+1; |
my $num=$i+1; |
$newfilename =~s/\.tex$//; |
$newfilename =~s/\.tex$//; |
$newfilename=sprintf("%s_%03d.tex",$newfilename, $num); |
$newfilename=sprintf("%s_%03d.tex",$newfilename, $num); |
unless ($temp_file = Apache::File->new('>'.$newfilename)) { |
unless ($temp_file = Apache::File->new('>'.$newfilename)) { |
$r->log_error("Couldn't open $newfilename for output $!"); |
$r->log_error("Couldn't open $newfilename for output $!"); |
return SERVER_ERROR; |
return SERVER_ERROR; |
} |
} |
print $temp_file $print_array[$i]; |
print $temp_file $print_array[$i]; |
} |
} |
Line 3475 ENDPART
|
Line 3753 ENDPART
|
'cgi.'.$identifier.'.role' => $perm{'pav'}, |
'cgi.'.$identifier.'.role' => $perm{'pav'}, |
'cgi.'.$identifier.'.numberoffiles' => $#print_array, |
'cgi.'.$identifier.'.numberoffiles' => $#print_array, |
'cgi.'.$identifier.'.studentnames' => $student_names, |
'cgi.'.$identifier.'.studentnames' => $student_names, |
'cgi.'.$identifier.'.backref' => $URLback,}); |
'cgi.'.$identifier.'.backref' => &escape($URLback),}); |
&Apache::lonnet::appenv({"cgi.$identifier.user" => $env{'user.name'}, |
&Apache::lonnet::appenv({"cgi.$identifier.user" => $env{'user.name'}, |
"cgi.$identifier.domain" => $env{'user.domain'}, |
"cgi.$identifier.domain" => $env{'user.domain'}, |
"cgi.$identifier.courseid" => $cnum, |
"cgi.$identifier.courseid" => $cnum, |
"cgi.$identifier.coursedom" => $cdom, |
"cgi.$identifier.coursedom" => $cdom, |
"cgi.$identifier.resources" => $resources_printed}); |
"cgi.$identifier.resources" => $resources_printed}); |
|
|
my $end_page = &Apache::loncommon::end_page(); |
my $end_page = &Apache::loncommon::end_page(); |
Line 3526 sub get_CODE {
|
Line 3804 sub get_CODE {
|
sub print_resources { |
sub print_resources { |
my ($r,$helper,$person,$type,$moreenv,$master_seq,$remove_latex_header, |
my ($r,$helper,$person,$type,$moreenv,$master_seq,$remove_latex_header, |
$LaTeXwidth)=@_; |
$LaTeXwidth)=@_; |
my $current_output = ''; |
my $current_output = ''; |
my $printed = ''; |
my $printed = ''; |
my ($username,$userdomain,$usersection) = split /:/,$person; |
my ($username,$userdomain,$usersection) = split /:/,$person; |
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 3554 sub print_resources {
|
Line 3831 sub print_resources {
|
|
|
my $i = 0; |
my $i = 0; |
my $actually_printed = 0; # Count of resources printed. |
my $actually_printed = 0; # Count of resources printed. |
#goes through all resources, checks if they are available for |
#goes through all resources, checks if they are available for |
#current student, and produces output |
#current student, and produces output |
|
|
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::clear_problem_counter(); |
my %page_breaks = &get_page_breaks($helper); |
my %page_breaks = &get_page_breaks($helper); |
my $columns_in_format = (split(/\|/,$helper->{'VARS'}->{'FORMAT'}))[1]; |
my $columns_in_format = (split(/\|/,$helper->{'VARS'}->{'FORMAT'}))[1]; |
# |
# |
# end each student with a |
# end each student with a |
# Special that allows the post processor to even out the page |
# Special that allows the post processor to even out the page |
# counts later. Nasty problem this... it would be really |
# counts later. Nasty problem this... it would be really |
# nice to put the special in as a postscript comment |
# nice to put the special in as a postscript comment |
# e.g. \special{ps:\ENDOFSTUDENTSTAMP} unfortunately, |
# e.g. \special{ps:\ENDOFSTUDENTSTAMP} unfortunately, |
# The special gets passed the \ and dvips puts it in the output file |
# The special gets passed the \ and dvips puts it in the output file |
# so we will just rely on prntout.pl to strip ENDOFSTUDENTSTAMP from the |
# so we will just rely on printout.pl to strip ENDOFSTUDENTSTAMP from the |
# postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself. |
# postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself. |
# |
# |
|
|
Line 3575 sub print_resources {
|
Line 3852 sub print_resources {
|
my $current_assignment = ""; |
my $current_assignment = ""; |
my $assignment; |
my $assignment; |
my $courseidinfo = &get_course(); |
my $courseidinfo = &get_course(); |
|
my $possprint = scalar(@{$master_seq}); |
|
|
foreach my $curresline (@{$master_seq}) { |
foreach my $curresline (@{$master_seq}) { |
if (defined $page_breaks{$curresline}) { |
if (defined $page_breaks{$curresline}) { |
Line 3588 sub print_resources {
|
Line 3866 sub print_resources {
|
|
|
# See if we need to emit a new header: |
# 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/)) ) { |
if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) { |
if ($print_incomplete && !&incomplete($username, $userdomain, $usersection, $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)$/) { |
$printed .= $curresline.':'; |
$printed .= $curresline.':'; |
&Apache::lonxml::remember_problem_counter(); |
&Apache::lonxml::remember_problem_counter(); |
|
|
my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
if ($res_url =~ /\.page$/) { |
if ($res_url =~ /\.page$/) { |
Line 3607 sub print_resources {
|
Line 3886 sub print_resources {
|
$rendered = &print_latex_header().$rendered; |
$rendered = &print_latex_header().$rendered; |
} |
} |
} |
} |
; |
|
if ($remove_latex_header eq 'YES') { |
if ($remove_latex_header eq 'YES') { |
$rendered = &latex_header_footer_remove($rendered); |
$rendered = &latex_header_footer_remove($rendered); |
} else { |
} else { |
$rendered =~ s/\\end{document}\d*//; |
$rendered =~ s/\\end\{document}\d*//; |
} |
} |
} |
} |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
Line 3622 sub print_resources {
|
Line 3900 sub print_resources {
|
|
|
|
|
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
|
|
&Apache::lonxml::restore_problem_counter(); |
&Apache::lonxml::restore_problem_counter(); |
|
|
my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv); |
my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv); |
|
|
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; |
$rendered=~s/(\\keephidden\{ENDOFPROBLEM})/$ansrendered$1/; |
} else { |
} else { |
|
|
|
|
my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); |
unless ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') { |
unless ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') { |
$header =~ s/\\begin{document}//; #<<<<< |
$header =~ s/\\begin\{document}//; #<<<<< |
} |
} |
my $title = &Apache::lonnet::gettitle($curresline); |
my $title = &Apache::lonnet::gettitle($curresline); |
$title = &Apache::lonxml::latex_special_symbols($title); |
$title = &Apache::lonxml::latex_special_symbols($title); |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; |
$body .=&path_to_problem($res_url,$LaTeXwidth); |
$body .=&path_to_problem($res_url,$LaTeXwidth); |
$body .='\vskip 1 mm '.$ansrendered; |
$body .='\vskip 1 mm '.$ansrendered; |
$body = &encapsulate_minipage($body); |
$body = &encapsulate_minipage($body,$answerenv{'problem_split'}); |
$rendered = $header.$body; |
$rendered = $header.$body; |
} |
} |
} |
} |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $url = &Apache::lonnet::clutter($res_url); |
my $url = &Apache::lonnet::clutter($res_url); |
my $annotation = &annotate($url); |
my $annotation = &annotate($url); |
$rendered =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; |
$rendered =~ s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/; |
} |
} |
my $junk; |
my $junk; |
if ($remove_latex_header eq 'YES') { |
if ($remove_latex_header eq 'YES') { |
$rendered = &latex_header_footer_remove($rendered); |
$rendered = &latex_header_footer_remove($rendered); |
} else { |
} else { |
$rendered =~ s/\\end{document}//; |
$rendered =~ s/\\end\{document}//; |
} |
} |
$current_output .= $rendered; |
$current_output .= $rendered; |
} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { |
} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard|ext\.tool)$/) { |
if ($i == 1) { |
if ($i == 1) { |
$syllabus_first = 1; |
$syllabus_first = 1; |
} |
} |
Line 3666 sub print_resources {
|
Line 3942 sub print_resources {
|
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { |
my $url = &Apache::lonnet::clutter($res_url); |
my $url = &Apache::lonnet::clutter($res_url); |
my $annotation = &annotate($url); |
my $annotation = &annotate($url); |
$annotation =~ s/(\\end{document})/$annotation$1/; |
$annotation =~ s/(\\end\{document})/$annotation$1/; |
} |
} |
if ($remove_latex_header eq 'YES') { |
if ($remove_latex_header eq 'YES') { |
$rendered = &latex_header_footer_remove($rendered); |
$rendered = &latex_header_footer_remove($rendered); |
} else { |
} else { |
$rendered =~ s/\\end{document}//; |
$rendered =~ s/\\end\{document}//; |
} |
} |
$current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut '; |
$current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut '; |
} elsif($res_url = ~/\.pdf$/) { |
} elsif($res_url =~ /\.pdf$/) { |
my $url = &Apache::lonnet::clutter($res_url); |
my $url = &Apache::lonnet::clutter($res_url); |
my $rendered = &include_pdf($url); |
my $rendered = &include_pdf($url); |
if ($remove_latex_header ne 'NO') { |
if ($remove_latex_header ne 'NO') { |
Line 3686 sub print_resources {
|
Line 3962 sub print_resources {
|
if ($remove_latex_header ne 'NO') { |
if ($remove_latex_header ne 'NO') { |
$rendered = &latex_header_footer_remove($rendered); |
$rendered = &latex_header_footer_remove($rendered); |
} else { |
} else { |
$rendered =~ s/\\end{document}//; |
$rendered =~ s/\\end\{document}//; |
} |
} |
$current_output .= $rendered; |
$current_output .= $rendered; |
} |
} |
Line 3697 sub print_resources {
|
Line 3973 sub print_resources {
|
&Apache::lonnet::gettitle($map), 'header'); |
&Apache::lonnet::gettitle($map), 'header'); |
if (($assignment ne $current_assignment) && ($assignment ne "")) { |
if (($assignment ne $current_assignment) && ($assignment ne "")) { |
my $header_line = &format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
my $header_line = &format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, |
$assignment, $courseidinfo, |
$assignment, $courseidinfo, |
$fullname, $usersection); |
$fullname, $usersection); |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
my $header_start = ($columns_in_format == 1) ? '\lhead' |
: '\fancyhead[LO]'; |
: '\fancyhead[LO]'; |
Line 3715 sub print_resources {
|
Line 3991 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",$moreenv->{'problem_split'}); |
|
} |
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 3726 sub print_resources {
|
Line 4019 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 3784 sub handler {
|
Line 4069 sub handler {
|
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my ($blocked,$blocktext) = |
my $clientip = &Apache::lonnet::get_requestor_ip($r); |
&Apache::loncommon::blocking_status('printout',$cnum,$cdom); |
my ($blocked,$blocktext) = |
|
&Apache::loncommon::blocking_status('printout',$clientip,$cnum,$cdom); |
if ($blocked) { |
if ($blocked) { |
my $checkrole = "cm./$cdom/$cnum"; |
my $checkrole = "cm./$cdom/$cnum"; |
if ($env{'request.course.sec'} ne '') { |
if ($env{'request.course.sec'} ne '') { |
$checkrole .= "/$env{'request.course.sec'}"; |
$checkrole .= "/$env{'request.course.sec'}"; |
} |
} |
unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && |
unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && |
($env{'request.role'} !~ m{^st\./$cdom/$cnum})) { |
($env{'request.role'} !~ m{^st\./$cdom/$cnum})) { |
&printing_blocked($r,$blocktext); |
&printing_blocked($r,$blocktext); |
return OK; |
return OK; |
} |
} |
} |
} |
} |
} |
|
|
&init_perm(); |
|
|
|
|
&init_perm(); |
my $helper = printHelper($r); |
my $helper = printHelper($r); |
if (!ref($helper)) { |
if (!ref($helper)) { |
return $helper; |
return $helper; |
} |
} |
|
|
|
|
%parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
|
|
|
|
|
|
|
%parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
|
# If a figure conversion queue file exists for this user.domain |
# If a figure conversion queue file exists for this user.domain |
# we delete it since it can only be bad (if it were good, printout.pl |
# we delete it since it can only be bad (if it were good, printout.pl |
Line 3820 sub handler {
|
Line 4102 sub handler {
|
if(-e $conversion_queuefile) { |
if(-e $conversion_queuefile) { |
unlink $conversion_queuefile; |
unlink $conversion_queuefile; |
} |
} |
|
|
|
|
&output_data($r,$helper,\%parmhash); |
&output_data($r,$helper,\%parmhash); |
return OK; |
return OK; |
Line 3866 sub get_randomly_ordered_warning {
|
Line 4147 sub get_randomly_ordered_warning {
|
if (defined($navmap)) { |
if (defined($navmap)) { |
my $res = $navmap->getResourceByUrl($map); |
my $res = $navmap->getResourceByUrl($map); |
if ($res) { |
if ($res) { |
my $func = |
my $func = |
sub { return ($_[0]->is_map() && $_[0]->randomorder); }; |
sub { return ($_[0]->is_map() && $_[0]->randomorder); }; |
my @matches = $navmap->retrieveResources($res, $func,1,1,1); |
my @matches = $navmap->retrieveResources($res, $func,1,1,1); |
|
|
} |
} |
} else { |
} else { |
$message = "Retrieval of information about ordering of resources failed."; |
$message = "Retrieval of information about ordering of resources failed."; |
return '<message type="warning">'.$message.'</message>'; |
return '<message type="warning">'.$message.'</message>'; |
} |
} |
return; |
return; |
Line 3905 sub printHelper {
|
Line 4186 sub printHelper {
|
# write it by hand |
# write it by hand |
|
|
Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING}); |
Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING}); |
|
|
my $helper = Apache::lonhelper::helper->new("Printing Helper"); |
my $helper = Apache::lonhelper::helper->new("Printing Helper"); |
$helper->declareVar('symb'); |
$helper->declareVar('symb'); |
$helper->declareVar('postdata'); |
$helper->declareVar('postdata'); |
$helper->declareVar('curseed'); |
$helper->declareVar('curseed'); |
$helper->declareVar('probstatus'); |
$helper->declareVar('probstatus'); |
$helper->declareVar('filename'); |
$helper->declareVar('filename'); |
$helper->declareVar('construction'); |
$helper->declareVar('construction'); |
$helper->declareVar('assignment'); |
$helper->declareVar('assignment'); |
Line 3922 sub printHelper {
|
Line 4203 sub printHelper {
|
$helper->declareVar("STUDENTS"); |
$helper->declareVar("STUDENTS"); |
$helper->declareVar("EXTRASPACE"); |
$helper->declareVar("EXTRASPACE"); |
|
|
|
|
|
|
|
|
# The page breaks and extra spaces |
# The page breaks and extra spaces |
Line 3930 sub printHelper {
|
Line 4211 sub printHelper {
|
# But we only do this in the initial state so that they are allowed to change. |
# But we only do this in the initial state so that they are allowed to change. |
# |
# |
|
|
|
|
&Apache::loncommon::restore_course_settings('print', |
&Apache::loncommon::restore_course_settings('print', |
{'pagebreaks' => 'scalar', |
{'pagebreaks' => 'scalar', |
'extraspace' => 'scalar', |
'extraspace' => 'scalar', |
'extraspace_units' => 'scalar', |
'extraspace_units' => 'scalar', |
'lastprinttype' => 'scalar'}); |
'lastprinttype' => 'scalar'}); |
|
|
# This will persistently load in the data we want from the |
# This will persistently load in the data we want from the |
# very first screen. |
# very first screen. |
|
|
if($helper->{VARS}->{PRINT_TYPE} eq $env{'form.lastprinttype'}) { |
if($helper->{VARS}->{PRINT_TYPE} eq $env{'form.lastprinttype'}) { |
if (!defined ($env{"form.CURRENT_STATE"})) { |
if (!defined ($env{"form.CURRENT_STATE"})) { |
|
|
$helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'}; |
$helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'}; |
$helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'}; |
$helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'}; |
$helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'}; |
$helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'}; |
Line 3955 sub printHelper {
|
Line 4236 sub printHelper {
|
|
|
} |
} |
} |
} |
|
|
} |
} |
|
|
# Detect whether we're coming from construction space |
# Detect whether we're coming from construction space |
Line 3964 sub printHelper {
|
Line 4244 sub printHelper {
|
$helper->{VARS}->{'construction'} = 1; |
$helper->{VARS}->{'construction'} = 1; |
} else { |
} else { |
if ($env{'form.postdata'}) { |
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 '') { |
if ( $helper->{VARS}->{'symb'} eq '') { |
$helper->{VARS}->{'postdata'} = $env{'form.postdata'}; |
$helper->{VARS}->{'postdata'} = $env{'form.postdata'}; |
} |
} |
Line 3973 sub printHelper {
|
Line 4255 sub printHelper {
|
$helper->{VARS}->{'symb'} = $env{'form.symb'}; |
$helper->{VARS}->{'symb'} = $env{'form.symb'}; |
} |
} |
if ($env{'form.url'}) { |
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'}) { |
if ($helper->{VARS}->{'symb'} ne '') { |
$helper->{VARS}->{'symb'} = $env{'form.symb'}; |
$helper->{VARS}->{'symb'}= |
} |
&Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'}); |
if ($env{'form.url'}) { |
} |
$helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'}); |
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); |
} |
} |
$helper->{VARS}->{'symb'}= |
|
&Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'}); |
|
my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper); |
|
if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;} |
if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;} |
|
|
|
|
# Extract map |
# Extract map |
my $symb = $helper->{VARS}->{'symb'}; |
my $symb = $helper->{VARS}->{'symb'}; |
my ($map, $id, $url); |
my ($map, $id, $url); |
my $subdir; |
my $subdir; |
my $is_published=0; # True when printing from resource space. |
my $is_published=0; # True when printing from resource space. |
my $res_printable = 1; # By default the current resource is printable. |
my $res_printable = 1; # By default the current resource is printable. |
|
my $res_error; |
my $userCanPrint = ($perm{'pav'} || $perm{'pfo'}); |
my $userCanPrint = ($perm{'pav'} || $perm{'pfo'}); |
my $res_printstartdate; |
my $res_printstartdate; |
my $res_printenddate; |
my $res_printenddate; |
Line 4007 sub printHelper {
|
Line 4310 sub printHelper {
|
|
|
# Get the resource name from construction space |
# Get the resource name from construction space |
if ($helper->{VARS}->{'construction'}) { |
if ($helper->{VARS}->{'construction'}) { |
$resourceTitle = substr($helper->{VARS}->{'filename'}, |
$resourceTitle = substr($helper->{VARS}->{'filename'}, |
rindex($helper->{VARS}->{'filename'}, '/')+1); |
rindex($helper->{VARS}->{'filename'}, '/')+1); |
$subdir = substr($helper->{VARS}->{'filename'}, |
$subdir = substr($helper->{VARS}->{'filename'}, |
0, rindex($helper->{VARS}->{'filename'}, '/') + 1); |
0, rindex($helper->{VARS}->{'filename'}, '/') + 1); |
Line 4016 sub printHelper {
|
Line 4319 sub printHelper {
|
|
|
if ($symb ne '') { |
if ($symb ne '') { |
($map, $id, $url) = &Apache::lonnet::decode_symb($symb); |
($map, $id, $url) = &Apache::lonnet::decode_symb($symb); |
$helper->{VARS}->{'postdata'} = |
$helper->{VARS}->{'postdata'} = |
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url)); |
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url)); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
} elsif (($helper->{VARS}->{'postdata'} eq '/adm/navmaps') && |
my $res = $navmap->getBySymb($symb); |
($env{'request.course.id'} ne '')) { |
$res_printable = $res->resprintable() | $userCanPrint; #printability in course context |
if ($env{'course.'.$env{'request.course.id'}.'.url'} eq |
($res_printstartdate, $res_printenddate) = &get_print_dates($res); |
"uploaded/$cdom/$cnum/default.sequence") { |
($course_open, $course_close) = &course_print_dates($res); |
$map = $env{'course.'.$env{'request.course.id'}.'.url'}; |
($map_open, $map_close) = &map_print_dates($res); |
$url = $helper->{VARS}->{'postdata'}; |
|
} |
|
} |
|
if (($symb ne '') || ($map ne '')) { |
|
if (!$userCanPrint) { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
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); |
|
($course_open, $course_close) = &course_print_dates($res); |
|
($map_open, $map_close) = &map_print_dates($res); |
|
} else { |
|
$res_error = 1; |
|
} |
|
} else { |
|
$res_error = 1; |
|
} |
|
} |
} else { |
} else { |
# Resource space. |
# Resource space. |
|
|
Line 4036 sub printHelper {
|
Line 4362 sub printHelper {
|
my $postdata = $helper->{VARS}->{'postdata'}; |
my $postdata = $helper->{VARS}->{'postdata'}; |
$resourceTitle = substr($postdata, rindex($postdata, '/') + 1); |
$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); |
|
} |
|
|
|
|
} |
} |
Line 4073 sub printHelper {
|
Line 4403 sub printHelper {
|
# Give that as a choice. |
# Give that as a choice. |
|
|
if ($resourceTitle && $res_printable) { |
if ($resourceTitle && $res_printable) { |
push @{$printChoices}, ["<b><i>$resourceTitle</i></b> (".&mt('the resource you just saw on the screen').")", 'current_document', 'PAGESIZE']; |
push(@{$printChoices}, ["<b><i>$resourceTitle</i></b> (".&mt('the resource you just saw on the screen').")", 'current_document', 'PAGESIZE']); |
} |
} |
|
|
# Useful filter strings |
# Useful filter strings |
|
|
Line 4099 sub printHelper {
|
Line 4429 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' />" |
; |
; |
|
|
|
|
} |
} |
|
|
# If not construction space user can print the components of a page: |
# If not construction space user can print the components of a page: |
Line 4129 sub printHelper {
|
Line 4457 sub printHelper {
|
my $resourcesymb = $page_resources[0]->symb(); |
my $resourcesymb = $page_resources[0]->symb(); |
my ($pagemap, $pageid, $pageurl) = &Apache::lonnet::decode_symb($symb); |
my ($pagemap, $pageid, $pageurl) = &Apache::lonnet::decode_symb($symb); |
if ($page_ispage) { |
if ($page_ispage) { |
push @{$printChoices}, |
push(@{$printChoices}, |
[&mt('Selected [_1]Problems[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'), |
[&mt('Selected [_1]Problems[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'), |
'map_problems_in_page', |
'map_problems_in_page', |
'CHOOSE_PROBLEMS_PAGE']; |
'CHOOSE_PROBLEMS_PAGE']); |
push @{$printChoices}, |
push(@{$printChoices}, |
[&mt('Selected [_1]Resources[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'), |
[&mt('Selected [_1]Resources[_2] from page [_3]', '<b>', '</b>', '<b><i>'.$page_title.'</i></b>'), |
'map_resources_in_page', |
'map_resources_in_page', |
'CHOOSE_RESOURCES_PAGE']; |
'CHOOSE_RESOURCES_PAGE']); |
} |
} |
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE', |
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE', |
'Select Problem(s) to print', |
'Select Problem(s) to print', |
"multichoice='1' toponly='1' addstatus='1' closeallpages='1'", |
"multichoice='1' toponly='1' addstatus='1' closeallpages='1' modallink='1'", |
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
$url, |
$url, |
Line 4150 sub printHelper {
|
Line 4478 sub printHelper {
|
|
|
$helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE', |
$helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE', |
'Select Resource(s) to print', |
'Select Resource(s) to print', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1"', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" suppressNavmap="1"', |
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
$url, |
$url, |
$isNotMap, '', $symbFilter, |
$isNotMap, '', $symbFilter, |
$start_new_option); |
$start_new_option); |
|
|
|
|
|
|
|
|
|
|
Line 4175 sub printHelper {
|
Line 4503 sub printHelper {
|
# the exact form of this depends on whether or not we are privileged or a mere |
# the exact form of this depends on whether or not we are privileged or a mere |
# plebe of s student: |
# plebe of s student: |
|
|
|
my $optionText = ''; |
my $printSelector = 'map_incomplete_problems_seq'; |
my $printSelector = 'map_incomplete_problems_seq'; |
my $nextState = 'CHOOSE_INCOMPLETE_SEQ'; |
my $nextState = 'CHOOSE_INCOMPLETE_SEQ'; |
my $textSuffix = ''; |
my $textSuffix = ''; |
|
my $nocurrloc = ''; |
|
if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') { |
|
$nocurrloc = 1; |
|
} |
|
|
if ($userCanPrint) { |
if ($userCanPrint) { |
$printSelector = 'map_incomplete_problems_people_seq'; |
$printSelector = 'map_incomplete_problems_people_seq'; |
$nextState = 'CHOOSE_INCOMPLETE_PEOPLE_SEQ'; |
$nextState = 'CHOOSE_INCOMPLETE_PEOPLE_SEQ'; |
$textSuffix = ' for selected students'; |
$textSuffix = ' for selected students'; |
my $helperStates = |
my $helperStates = |
&create_incomplete_folder_selstud_helper($helper, $map); |
&create_incomplete_folder_selstud_helper($helper, $map, $nocurrloc); |
&Apache::lonxml::xmlparse($r, 'helper', $helperStates); |
&Apache::lonxml::xmlparse($r, 'helper', $helperStates); |
} else { |
} else { |
if (&printable($map_open, $map_close)) { |
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); |
&Apache::lonxml::xmlparse($r, 'helper', $helperStates); |
} else { |
} else { |
# TODO: Figure out how to break the news...this folder is not printable. |
# TODO: Figure out how to break the news...this folder is not printable. |
Line 4196 sub printHelper {
|
Line 4529 sub printHelper {
|
} |
} |
|
|
if ($userCanPrint || &printable($map_open, $map_close)) { |
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, |
|
'<b>','</b>','<i>','</i>'); |
|
} else { |
|
$optionText = &mt('Selected [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix, |
|
'<b>','</b>','<b><i>'.$sequenceTitle.'</b></i>'); |
|
} |
push(@{$printChoices}, |
push(@{$printChoices}, |
[&mt('Selected [_1]Incomplete Problems[_2] from folder [_3]' . $textSuffix, |
[$optionText, |
'<b>', '</b>', |
|
'<b><i>'. $sequenceTitle . '</b></i>'), |
|
$printSelector, |
$printSelector, |
$nextState]); |
$nextState]); |
} |
} |
# Allow problems from sequence |
# Allow problems from sequence |
if ($userCanPrint || &printable($map_open, $map_close)) { |
if ($userCanPrint || &printable($map_open, $map_close)) { |
push @{$printChoices}, |
if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') { |
[&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), |
$optionText = &mt('Selected [_1]Problems[_2] [_3]not in a folder[_4]','<b>','</b>','<i>','</i>'); |
'map_problems', |
} else { |
'CHOOSE_PROBLEMS']; |
$optionText = &mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'); |
|
} |
|
push(@{$printChoices}, |
|
[$optionText, |
|
'map_problems', |
|
'CHOOSE_PROBLEMS']); |
# Allow all resources from sequence |
# Allow all resources from sequence |
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), |
if ($helper->{VARS}->{'postdata'} eq '/adm/navmaps') { |
'map_problems_pages', |
$optionText = &mt('Selected [_1]Resources[_2] [_3]not in a folder[_4]','<b>','</b>','<i>','</i>'); |
'CHOOSE_PROBLEMS_HTML']; |
} else { |
|
$optionText = &mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'); |
|
} |
|
push(@{$printChoices}, [$optionText, |
|
'map_problems_pages', |
|
'CHOOSE_PROBLEMS_HTML']); |
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS', |
my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS', |
'Select Problem(s) to print', |
'Select Problem(s) to print', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1"', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'"', |
'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', |
'Select Resource(s) to print', |
'Select Resource(s) to print', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1"', |
'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1" nocurrloc="'.$nocurrloc.'" suppressNavmap="1"', |
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
$map, |
$map, |
$isNotMap, '', |
$isNotMap, '', |
$symbFilter, |
$symbFilter, |
$start_new_option); |
$start_new_option); |
|
|
&Apache::lonxml::xmlparse($r, 'helper', $helperFragment); |
&Apache::lonxml::xmlparse($r, 'helper', $helperFragment); |
} else { |
} else { |
# TODO: Figure out how to tell them the folder is not printable. |
# TODO: Figure out how to tell them the folder is not printable. |
} |
} |
} |
} |
# If the user has pfo (print for others) allow them to print all |
# If the user has pfo (print for others) allow them to print all |
# problems and resources in the entire course, optionally for selected students |
# problems and resources in the entire course, optionally for selected students |
my $post_data = $helper->{VARS}->{'postdata'}; |
my $post_data = $helper->{VARS}->{'postdata'}; |
|
|
if ($perm{'pfo'} && !$is_published && |
if ($perm{'pfo'} && !$is_published && |
($post_data=~/\/res\// || $post_data =~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { |
($post_data=~/\/res\// || $post_data =~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { |
|
|
# BZ 5209 - incomplete problems from entire course: |
# BZ 5209 - incomplete problems from entire course: |
|
|
push(@{$printChoices}, |
push(@{$printChoices}, |
[&mtn('Selected <b>Incomplete Problems</b> from <b>entire course</b> for selected people'), |
[&mt('Selected [_1]Incomplete Problems[_2] from [_3]entire course[_4] for [_5]selected people[_6]', |
|
'<b>','</b>','<b>','</b>','<b>','</b>'), |
'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']); |
'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']); |
my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states. |
my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states. |
|
|
Line 4255 sub printHelper {
|
Line 4604 sub printHelper {
|
|
|
# Selected problems/resources from entire course: |
# Selected problems/resources from entire course: |
|
|
push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b>'), 'all_problems', 'ALL_PROBLEMS']; |
push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from [_3]entire course[_4]','<b>','</b>','<b>','</b>'), 'all_problems', 'ALL_PROBLEMS']); |
push @{$printChoices}, [&mtn('Selected <b>Resources</b> from <b>entire course</b>'), 'all_resources', 'ALL_RESOURCES']; |
push(@{$printChoices}, [&mt('Selected [_1]Resources[_2] from [_3]entire course[_4]','<b>','</b>','<b>','</b>'), 'all_resources', 'ALL_RESOURCES']); |
push @{$printChoices}, [&mtn('Selected <b>Problems</b> from <b>entire course</b> for <b>selected people</b>'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS']; |
push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from [_3]entire course[_4] for [_5]selected people[_6]','<b>','</b>','<b>','</b>','<b>','</b>'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS']); |
my $suffixXml = <<ALL_PROBLEMS; |
my $suffixXml = <<ALL_PROBLEMS; |
<state name="STUDENTS1" title="Select People"> |
<state name="STUDENTS1" title="Select People"> |
<message><b>Select sorting order of printout</b> </message> |
<message><b>Select sorting order of printout</b> </message> |
Line 4269 my $suffixXml = <<ALL_PROBLEMS;
|
Line 4618 my $suffixXml = <<ALL_PROBLEMS;
|
<student multichoice='1' variable="STUDENTS" nextstate="PRINT_FORMATTING" coursepersonnel="1"/> |
<student multichoice='1' variable="STUDENTS" nextstate="PRINT_FORMATTING" coursepersonnel="1"/> |
</state> |
</state> |
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" modallink="1"', |
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
'', |
'', |
Line 4281 ALL_PROBLEMS
|
Line 4630 ALL_PROBLEMS
|
$start_new_option) . |
$start_new_option) . |
&generate_resource_chooser('ALL_RESOURCES', |
&generate_resource_chooser('ALL_RESOURCES', |
'Select Resource(s) to print', |
'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" suppressNavmap="1"', |
'RESOURCES', |
'RESOURCES', |
'PAGESIZE', |
'PAGESIZE', |
'', |
'', |
Line 4289 ALL_PROBLEMS
|
Line 4638 ALL_PROBLEMS
|
$start_new_option) . |
$start_new_option) . |
&generate_resource_chooser('ALL_PROBLEMS_STUDENTS', |
&generate_resource_chooser('ALL_PROBLEMS_STUDENTS', |
'Select Problem(s) to print', |
'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', |
'RESOURCES', |
'STUDENTS1', |
'STUDENTS1', |
'', |
'', |
Line 4304 ALL_PROBLEMS
|
Line 4653 ALL_PROBLEMS
|
# either for selected students or for coded assignments. |
# either for selected students or for coded assignments. |
|
|
if ($page_ispage) { |
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]', |
'<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'), |
'<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'), |
'problems_for_students_from_page', 'CHOOSE_TGT_STUDENTS_PAGE']; |
'problems_for_students_from_page', 'CHOOSE_TGT_STUDENTS_PAGE']); |
push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]CODEd assignments[_5]', |
push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]CODEd assignments[_5]', |
'<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'), |
'<b>', '</b>', '<b><i>'.$page_title.'</i></b>', '<b>', '</b>'), |
'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]', |
'<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), |
'<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), |
'problems_for_students', 'CHOOSE_STUDENTS']; |
'problems_for_students', 'CHOOSE_STUDENTS']); |
push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]', |
push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]', |
'<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), |
'<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), |
'problems_for_anon', 'CHOOSE_ANON1']; |
'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"', |
|
'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'", |
|
'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='<choice></choice>'; |
|
foreach my $name (sort {uc($a) cmp uc($b)} @names) { |
|
if ($name =~ /^error: 2 /) { next; } |
|
if ($name =~ /^type\0/) { next; } |
|
$namechoice.='<choice computer="'.$name.'">'.$name.'</choice>'; |
|
} |
|
|
|
|
|
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]); |
|
} |
|
if (%codes_to_print) { |
|
$code_selection .=' |
|
<message><b>Choose single CODE from list:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_SELECTED_FROM_LIST" multichoice="0" allowempty="0"> |
|
<choice></choice> |
|
<exec> |
|
push(@{$state->{CHOICES}},@{$helper->{DATA}{ALL_CODE_CHOICES}}); |
|
</exec> |
|
</dropdown> |
|
<message></td></tr><tr><td></message> |
|
'.$/; |
|
|
|
} |
} |
|
|
my @lines = &Apache::grades::get_scantronformat_file(); |
my ($randomly_ordered_warning,$codechoice,$code_selection,$namechoice) = |
my $codechoice=''; |
&generate_common_choosers($r,$helper,$map,$url,$isProblem,$symbFilter,$start_new_option); |
foreach my $line (@lines) { |
|
my ($name,$description,$code_type,$code_length)= |
|
(split(/:/,$line))[0,1,2,4]; |
|
if ($code_length > 0 && |
|
$code_type =~/^(letter|number|-1)/) { |
|
$codechoice.='<choice computer="'.$name.'">'.$description.'</choice>'; |
|
} |
|
} |
|
if ($codechoice eq '') { |
|
$codechoice='<choice computer="default">Default</choice>'; |
|
} |
|
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'", |
|
'RESOURCES', |
|
'PRINT_FORMATTING', |
|
$url, |
|
$isProblem, '', $symbFilter, |
|
$start_new_option); |
|
&Apache::lonxml::xmlparse($r, 'helper', $anon_page); |
|
|
|
|
|
if ($helper->{VARS}->{'assignment'}) { |
if ($helper->{VARS}->{'assignment'}) { |
|
|
# Assignment printing: |
# Assignment printing: |
|
|
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_students', 'CHOOSE_STUDENTS1']; |
push(@{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_students', 'CHOOSE_STUDENTS1']); |
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_anon', 'CHOOSE_ANON2']; |
push(@{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_anon', 'CHOOSE_ANON2']); |
} |
} |
|
|
|
|
$resource_selector=<<RESOURCE_SELECTOR; |
# 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=<<RESOURCE_SELECTOR; |
<state name="SELECT_RESOURCES" title="Select Resources"> |
<state name="SELECT_RESOURCES" title="Select Resources"> |
$randomly_ordered_warning |
$randomly_ordered_warning |
<nextstate>PRINT_FORMATTING</nextstate> |
<nextstate>PRINT_FORMATTING</nextstate> |
<message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message> |
<message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message> |
<resource variable="RESOURCES" multichoice="1" addstatus="1" |
<resource variable="RESOURCES" multichoice="1" addstatus="1" |
closeallpages="1"> |
closeallpages="1" modallink="1"> |
<filterfunc>return $isNotMap;</filterfunc> |
<filterfunc>return $isNotMap;</filterfunc> |
<mapurl>$map</mapurl> |
<mapurl>$map</mapurl> |
<valuefunc>return $symbFilter;</valuefunc> |
<valuefunc>return $symbFilter;</valuefunc> |
Line 4556 CHOOSE_ANON2
|
Line 4785 CHOOSE_ANON2
|
} |
} |
|
|
# FIXME: That RE should come from a library somewhere. |
# FIXME: That RE should come from a library somewhere. |
if (($perm{'pav'} |
if (($perm{'pav'} |
|
&& ($subdir ne '') |
&& $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/' |
&& $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/' |
&& (defined($helper->{'VARS'}->{'construction'}) |
&& (defined($helper->{'VARS'}->{'construction'}) |
|| |
|| |
(&Apache::lonnet::allowed('bre',$subdir) eq 'F' |
(&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}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/) |
)) |
)) |
&& $helper->{VARS}->{'assignment'} eq "" |
&& $helper->{VARS}->{'assignment'} eq "" |
) { |
) { |
my $pretty_dir = &Apache::lonnet::hreflocation($subdir); |
my $pretty_dir = &Apache::lonnet::hreflocation($subdir); |
push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','<b>','</b>','<b><i>'.$pretty_dir.'</i></b>','<b>','</b>'), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; |
push(@{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','<b>','</b>','<b><i>'.$pretty_dir.'</i></b>','<b>','</b>'), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']); |
my $xmlfrag = <<CHOOSE_FROM_SUBDIR; |
my $xmlfrag = <<CHOOSE_FROM_SUBDIR; |
<state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$pretty_dir</small></b> to print"> |
<state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$pretty_dir</small></b> to print"> |
|
|
Line 4575 CHOOSE_ANON2
|
Line 4805 CHOOSE_ANON2
|
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filechoice>return '$subdir';</filechoice> |
<filechoice>return '$subdir';</filechoice> |
CHOOSE_FROM_SUBDIR |
CHOOSE_FROM_SUBDIR |
|
|
# this is broken up because I really want interpolation above, |
# this is broken up because I really want interpolation above, |
# and I really DON'T want it below |
# and I really DON'T want it below |
$xmlfrag .= <<'CHOOSE_FROM_SUBDIR'; |
$xmlfrag .= <<'CHOOSE_FROM_SUBDIR'; |
Line 4590 CHOOSE_FROM_SUBDIR
|
Line 4820 CHOOSE_FROM_SUBDIR
|
|
|
# Allow the user to select any sequence in the course, feed it to |
# Allow the user to select any sequence in the course, feed it to |
# another resource selector for that sequence |
# another resource selector for that sequence |
if (!$helper->{VARS}->{'construction'} && !$is_published) { |
if ((!$helper->{VARS}->{'construction'}) && |
push @$printChoices, [&mtn("Selected <b>Resources</b> from <b>selected folder</b> in course"), |
(!$is_published || (($subdir eq '') && ($url eq '/adm/navmaps')))) { |
'select_sequences', 'CHOOSE_SEQUENCE']; |
push(@$printChoices,[&mt('Selected [_1]Resources[_2] from [_3]selected folder[_4] in course', |
my $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'}; |
'<b>','</b>','<b>','</b>'), |
#Escape apostrophes and backslashes for Perl |
'select_sequences','CHOOSE_SEQUENCE']); |
$escapedSequenceName =~ s/\\/\\\\/g; |
my $escapedSequenceName; |
$escapedSequenceName =~ s/'/\\'/g; |
if ($helper->{VARS}->{'SEQUENCE'} ne '') { |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_FROM_ANY_SEQUENCE); |
$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]', |
|
'<b>','</b>','<b>','</b>','<b>','</b>'), |
|
'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]', |
|
'<b>','</b>','<b>','</b>','<b>','</b>'), |
|
'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]', |
|
'<b>','</b>','<b>','</b>','<b>','</b>'), |
|
'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]', |
|
'<b>','</b>','<b>','</b>','<b>','</b>'), |
|
'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 = <<RESOURCE_SELECTOR; |
|
<state name="CHOOSE_STUDENTS2" title="Select Students and Resources"> |
|
<choices variable='student_sort'> |
|
<choice computer='0'>Sort by section then student</choice> |
|
<choice computer='1'>Sort by students across sections.</choice> |
|
</choices> |
|
<message><br /><hr /><br /></message> |
|
<student multichoice='1' variable="STUDENTS" nextstate="SELECT_RESOURCES" coursepersonnel="1" /> |
|
|
|
</state> |
|
<state name="SELECT_RESOURCES" title="Select Resources"> |
|
$randomly_ordered_warning |
|
<nextstate>PRINT_FORMATTING</nextstate> |
|
<message>(mark desired resources then click "next" button) <br /></message> |
|
<resource variable="RESOURCES" multichoice="1" addstatus="1" |
|
closeallpages="1" modallink="1" suppressNavmap="1" $nocurrloc> |
|
<filterfunc>return $isNotMap;</filterfunc> |
|
<mapurl>$escapedSequenceName</mapurl> |
|
<valuefunc>return $symbFilter;</valuefunc> |
|
$start_new_option |
|
</resource> |
|
</state> |
|
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', <<CHOOSE_FROM_ANY_SEQUENCE); |
|
<state name="CHOOSE_SEQUENCE" title="Select Sequence To Print From"> |
|
<message>Select the sequence to print resources from:</message> |
|
<resource variable="SEQUENCE"> |
|
<nextstate>CHOOSE_FROM_ANY_SEQUENCE</nextstate> |
|
<filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc> |
|
<valuefunc>return $urlValue;</valuefunc> |
|
<choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0); |
|
</choicefunc> |
|
</resource> |
|
</state> |
|
<state name="CHOOSE_SEQUENCE_STUDENTS" title="Select Sequence To Print From"> |
|
<message>Select the sequence to print resources from:</message> |
|
<resource variable="SEQUENCE"> |
|
<nextstate>CHOOSE_STUDENTS</nextstate> |
|
<filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc> |
|
<valuefunc>return $urlValue;</valuefunc> |
|
<choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0); |
|
</choicefunc> |
|
</resource> |
|
</state> |
|
<state name="CHOOSE_SEQUENCE_ANON1" title="Select Sequence To Print From"> |
|
<message>Select the sequence to print resources from:</message> |
|
<resource variable="SEQUENCE"> |
|
<nextstate>CHOOSE_ANON1</nextstate> |
|
<filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc> |
|
<valuefunc>return $urlValue;</valuefunc> |
|
<choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0); |
|
</choicefunc> |
|
</resource> |
|
</state> |
|
<state name="CHOOSE_SEQUENCE_STUDENTS1" title="Select Sequence To Print From"> |
|
<message>Select the sequence to print resources from:</message> |
|
<resource variable="SEQUENCE"> |
|
<nextstate>CHOOSE_STUDENTS2</nextstate> |
|
<filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc> |
|
<valuefunc>return $urlValue;</valuefunc> |
|
<choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0); |
|
</choicefunc> |
|
</resource> |
|
</state> |
|
<state name="CHOOSE_SEQUENCE_ANON2" title="Select Sequence To Print From"> |
|
<message>Select the sequence to print resources from:</message> |
|
<resource variable="SEQUENCE"> |
|
<nextstate>CHOOSE_ANON3</nextstate> |
|
<filterfunc>return &Apache::lonprintout::printable_sequence(\$res);</filterfunc> |
|
<valuefunc>return $urlValue;</valuefunc> |
|
<choicefunc>return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0); |
|
</choicefunc> |
|
</resource> |
|
</state> |
|
<state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print"> |
|
<message>(mark desired resources then click "next" button) <br /></message> |
|
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
|
closeallpages="1" modallink="1" suppressNavmap="1" $nocurrloc> |
|
<nextstate>PAGESIZE</nextstate> |
|
<filterfunc>return $isNotMap</filterfunc> |
|
<mapurl evaluate='1'>return '$escapedSequenceName';</mapurl> |
|
<valuefunc>return $symbFilter;</valuefunc> |
|
$start_new_option |
|
</resource> |
|
</state> |
|
CHOOSE_FROM_ANY_SEQUENCE |
|
} else { |
|
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_FROM_ANY_SEQUENCE); |
<state name="CHOOSE_SEQUENCE" title="Select Sequence To Print From"> |
<state name="CHOOSE_SEQUENCE" title="Select Sequence To Print From"> |
<message>Select the sequence to print resources from:</message> |
<message>Select the sequence to print resources from:</message> |
<resource variable="SEQUENCE"> |
<resource variable="SEQUENCE"> |
Line 4611 CHOOSE_FROM_SUBDIR
|
Line 4975 CHOOSE_FROM_SUBDIR
|
<state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print"> |
<state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print"> |
<message>(mark desired resources then click "next" button) <br /></message> |
<message>(mark desired resources then click "next" button) <br /></message> |
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
<resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1" |
closeallpages="1"> |
closeallpages="1" modallink="1" suppressNavmap="1" $nocurrloc> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<filterfunc>return $isNotMap</filterfunc> |
<filterfunc>return $isNotMap</filterfunc> |
<mapurl evaluate='1'>return '$escapedSequenceName';</mapurl> |
<mapurl evaluate='1'>return '$escapedSequenceName';</mapurl> |
Line 4620 CHOOSE_FROM_SUBDIR
|
Line 4984 CHOOSE_FROM_SUBDIR
|
</resource> |
</resource> |
</state> |
</state> |
CHOOSE_FROM_ANY_SEQUENCE |
CHOOSE_FROM_ANY_SEQUENCE |
} |
} |
|
} |
|
my $numchoices = 0; |
|
if (ref($printChoices) eq 'ARRAY') { |
|
$numchoices = @{$printChoices}; |
|
} |
|
# Early out if nothing to print |
|
if (!$numchoices) { |
|
$r->print(&Apache::loncommon::start_page('Printing Helper'). |
|
'<h2>'.&mt('Unable to determine print context').'</h2>'. |
|
'<p>'.&mt('Please display a resource, and then click the "Print" button/icon').'</p>'); |
|
my $prtspool=$r->dir_config('lonPrtDir'); |
|
my $footer = &recently_generated($prtspool); |
|
$r->print($footer.&Apache::loncommon::end_page()); |
|
return OK; |
|
} |
|
|
# 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 $noprintmsg; |
$paramHash->{MESSAGE_TEXT} = |
if ($res_error) { |
&mt('<p><b>Printing for current resource is only possible between [_1] and [_1]</b></p>', |
$noprintmsg = &mt('Print availability for current resource could not be determined'); |
$res_printstartdate, $res_printenddate); |
} else { |
Apache::lonhelper::message->new(); |
my $now = time; |
|
my $shownprintstart = &Apache::lonlocal::locallocaltime($res_printstartdate); |
|
my $shownprintend = &Apache::lonlocal::locallocaltime($res_printenddate); |
|
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 4643 CHOOSE_FROM_ANY_SEQUENCE
|
Line 5048 CHOOSE_FROM_ANY_SEQUENCE
|
my $startedTable = 0; # have we started an HTML table yet? (need |
my $startedTable = 0; # have we started an HTML table yet? (need |
# to close it later) |
# to close it later) |
|
|
if (($perm{'pav'} and $perm{'vgr'}) or |
if (($perm{'pav'} and $perm{'vgr'}) or |
($helper->{VARS}->{'construction'} eq '1')) { |
($helper->{VARS}->{'construction'} eq '1')) { |
&addMessage('<br />' |
&addMessage('<br />' |
.'<h3>'.&mt('Print Options').'</h3>' |
.'<h3>'.&mt('Print Options').'</h3>' |
Line 4655 CHOOSE_FROM_ANY_SEQUENCE
|
Line 5060 CHOOSE_FROM_ANY_SEQUENCE
|
) |
) |
); |
); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'ANSWER_TYPE'; |
$paramHash->{'variable'} = 'ANSWER_TYPE'; |
$helper->declareVar('ANSWER_TYPE'); |
$helper->declareVar('ANSWER_TYPE'); |
$paramHash->{CHOICES} = [ |
$paramHash->{CHOICES} = [ |
['Without Answers', 'yes'], |
['Without Answers', 'yes'], |
['With Answers', 'no'], |
['With Answers', 'no'], |
Line 4674 CHOOSE_FROM_ANY_SEQUENCE
|
Line 5079 CHOOSE_FROM_ANY_SEQUENCE
|
&addMessage(&Apache::lonhtmlcommon::row_title(&mt('Font Size'))); |
&addMessage(&Apache::lonhtmlcommon::row_title(&mt('Font Size'))); |
my $xmlfrag = << "FONT_SELECTION"; |
my $xmlfrag = << "FONT_SELECTION"; |
|
|
|
|
<dropdown variable='fontsize' multichoice='0', allowempty='0'> |
<dropdown variable='fontsize' multichoice='0' allowempty='0'> |
<defaultvalue> |
<defaultvalue> |
return 'normalsize'; |
return 'normalsize'; |
</defaultvalue> |
</defaultvalue> |
Line 4711 FONT_SELECTION
|
Line 5116 FONT_SELECTION
|
); |
); |
} |
} |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
$paramHash->{'variable'} = 'LATEX_TYPE'; |
$helper->declareVar('LATEX_TYPE'); |
$helper->declareVar('LATEX_TYPE'); |
if ($helper->{VARS}->{'construction'} eq '1') { |
if ($helper->{VARS}->{'construction'} eq '1') { |
$paramHash->{CHOICES} = [ |
$paramHash->{CHOICES} = [ |
['standard LaTeX mode', 'standard'], |
['standard LaTeX mode', 'standard'], |
['LaTeX batchmode', 'batchmode'], ]; |
['LaTeX batchmode', 'batchmode'], ]; |
} else { |
} else { |
$paramHash->{CHOICES} = [ |
$paramHash->{CHOICES} = [ |
Line 4723 FONT_SELECTION
|
Line 5128 FONT_SELECTION
|
['standard LaTeX mode', 'standard'] ]; |
['standard LaTeX mode', 'standard'] ]; |
} |
} |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
|
|
&addMessage(&Apache::lonhtmlcommon::row_closure() |
&addMessage(&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_title( |
.&Apache::lonhtmlcommon::row_title( |
'<label for="TABLE_CONTENTS_forminput">' |
'<label for="TABLE_CONTENTS_forminput">' |
Line 4732 FONT_SELECTION
|
Line 5137 FONT_SELECTION
|
) |
) |
); |
); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'TABLE_CONTENTS'; |
$paramHash->{'variable'} = 'TABLE_CONTENTS'; |
$helper->declareVar('TABLE_CONTENTS'); |
$helper->declareVar('TABLE_CONTENTS'); |
$paramHash->{CHOICES} = [ |
$paramHash->{CHOICES} = [ |
['No', 'no'], |
['No', 'no'], |
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Apache::lonhelper::dropdown->new(); |
Apache::lonhelper::dropdown->new(); |
&addMessage(&Apache::lonhtmlcommon::row_closure()); |
&addMessage(&Apache::lonhtmlcommon::row_closure()); |
|
|
if (not $helper->{VARS}->{'construction'}) { |
if (not $helper->{VARS}->{'construction'}) { |
&addMessage(&Apache::lonhtmlcommon::row_title( |
&addMessage(&Apache::lonhtmlcommon::row_title( |
'<label for="TABLE_INDEX_forminput">' |
'<label for="TABLE_INDEX_forminput">' |
Line 4748 FONT_SELECTION
|
Line 5153 FONT_SELECTION
|
) |
) |
); |
); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'TABLE_INDEX'; |
$paramHash->{'variable'} = 'TABLE_INDEX'; |
$helper->declareVar('TABLE_INDEX'); |
$helper->declareVar('TABLE_INDEX'); |
$paramHash->{CHOICES} = [ |
$paramHash->{CHOICES} = [ |
['No', 'no'], |
['No', 'no'], |
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Line 4762 FONT_SELECTION
|
Line 5167 FONT_SELECTION
|
) |
) |
); |
); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash = Apache::lonhelper::getParamHash(); |
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS'; |
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS'; |
$helper->declareVar('PRINT_DISCUSSIONS'); |
$helper->declareVar('PRINT_DISCUSSIONS'); |
$paramHash->{CHOICES} = [ |
$paramHash->{CHOICES} = [ |
['No', 'no'], |
['No', 'no'], |
['Yes', 'yes'] ]; |
['Yes', 'yes'] ]; |
Line 4797 FONT_SELECTION
|
Line 5202 FONT_SELECTION
|
&addMessage(&Apache::lonhtmlcommon::row_closure(1)); |
&addMessage(&Apache::lonhtmlcommon::row_closure(1)); |
} |
} |
|
|
if ($helper->{'VARS'}->{'construction'}) { |
if ($helper->{'VARS'}->{'construction'}) { |
my $stylevalue='$Apache::lonnet::env{"construct.style"}'; |
my $stylevalue='$Apache::lonnet::env{"construct.style"}'; |
my $randseedtext=&mt("Use random seed"); |
my $randseedtext=&mt("Use random seed"); |
my $stylefiletext=&mt("Use style file"); |
my $stylefiletext=&mt("Use style file"); |
Line 4853 FONT_SELECTION
|
Line 5258 FONT_SELECTION
|
return "$helper->{VARS}->{'probstatus'}"; |
return "$helper->{VARS}->{'probstatus'}"; |
</defaultvalue> |
</defaultvalue> |
<choice computer="problem">Homework Problem</choice> |
<choice computer="problem">Homework Problem</choice> |
<choice computer="exam">Exam Problem</choice> |
<choice computer="exam">Bubblesheet Exam Problem</choice> |
<choice computer="survey">Survey question</choice> |
<choice computer="survey">Survey question</choice> |
,choice computer="anonsurvey"Anonymous survey question</choice> |
,choice computer="anonsurvey"Anonymous survey question</choice> |
</dropdown> |
</dropdown> |
Line 4888 PROBTYPE
|
Line 5293 PROBTYPE
|
# If we're in the "final" state, bailout and return to handler |
# If we're in the "final" state, bailout and return to handler |
if ($helper->{STATE} eq 'FINAL') { |
if ($helper->{STATE} eq 'FINAL') { |
return $helper; |
return $helper; |
} |
} |
|
|
my $footer; |
my $footer; |
if ($helper->{STATE} eq 'START') { |
if ($helper->{STATE} eq 'START') { |
my $prtspool=$r->dir_config('lonPrtDir'); |
my $prtspool=$r->dir_config('lonPrtDir'); |
$footer = &recently_generated($prtspool); |
$footer = &recently_generated($prtspool); |
} |
} |
$r->print($helper->display($footer)); |
$r->print($helper->display($footer)); |
Line 4912 package Apache::lonprintout::page_format
|
Line 5317 package Apache::lonprintout::page_format
|
|
|
See lonhelper.pm documentation for discussion of the helper framework. |
See lonhelper.pm documentation for discussion of the helper framework. |
|
|
Apache::lonprintout::page_format_state is an element that gives the |
Apache::lonprintout::page_format_state is an element that gives the |
user an opportunity to select the page layout they wish to print |
user an opportunity to select the page layout they wish to print |
with: Number of columns, portrait/landscape, and paper size. If you |
with: Number of columns, portrait/landscape, and paper size. If you |
want to change the paper size choices, change the @paperSize array |
want to change the paper size choices, change the @paperSize array |
contents in this package. |
contents in this package. |
|
|
page_format_state is always directly invoked in lonprintout.pm, so there |
page_format_state is always directly invoked in lonprintout.pm, so there |
Line 4939 use Apache::lonnet;
|
Line 5344 use Apache::lonnet;
|
|
|
my $maxColumns = 2; |
my $maxColumns = 2; |
# it'd be nice if these all worked |
# it'd be nice if these all worked |
#my @paperSize = ("letter [8 1/2x11 in]", "legal [8 1/2x14 in]", |
#my @paperSize = ("letter [8 1/2x11 in]", "legal [8 1/2x14 in]", |
# "tabloid (ledger) [11x17 in]", "executive [7 1/2x10 in]", |
# "tabloid (ledger) [11x17 in]", "executive [7 1/2x10 in]", |
# "a2 [420x594 mm]", "a3 [297x420 mm]", "a4 [210x297 mm]", |
# "a2 [420x594 mm]", "a3 [297x420 mm]", "a4 [210x297 mm]", |
# "a5 [148x210 mm]", "a6 [105x148 mm]" ); |
# "a5 [148x210 mm]", "a6 [105x148 mm]" ); |
my @paperSize = ("letter [8 1/2x11 in]", "legal [8 1/2x14 in]", |
my @paperSize = ("letter [8 1/2x11 in]", "legal [8 1/2x14 in]", |
"a4 [210x297 mm]"); |
"a4 [210x297 mm]"); |
|
|
# Tentative format: Orientation (L = Landscape, P = portrait) | Colnum | |
# Tentative format: Orientation (L = Landscape, P = portrait) | Colnum | |
# Paper type |
# Paper type |
|
|
sub new { |
sub new { |
my $self = Apache::lonhelper::element->new(); |
my $self = Apache::lonhelper::element->new(); |
|
|
shift; |
shift; |
Line 4971 sub render {
|
Line 5376 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>' |
.&Apache::loncommon::start_data_table() |
.&Apache::loncommon::start_data_table() |
Line 5041 sub postprocess {
|
Line 5446 sub postprocess {
|
|
|
my $var = $self->{'variable'}; |
my $var = $self->{'variable'}; |
my $helper = Apache::lonhelper->getHelper(); |
my $helper = Apache::lonhelper->getHelper(); |
$helper->{VARS}->{$var} = |
$helper->{VARS}->{$var} = |
$env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' . |
$env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' . |
$env{"form.$var.paper"} . '|' . $env{"form.$var.pdfFormFields"}; |
$env{"form.$var.paper"} . '|' . $env{"form.$var.pdfFormFields"}; |
return 1; |
return 1; |
Line 5057 package Apache::lonprintout::page_size_s
|
Line 5462 package Apache::lonprintout::page_size_s
|
|
|
See lonhelper.pm documentation for discussion of the helper framework. |
See lonhelper.pm documentation for discussion of the helper framework. |
|
|
Apache::lonprintout::page_size_state is an element that gives the |
Apache::lonprintout::page_size_state is an element that gives the |
user the opportunity to further refine the page settings if they |
user the opportunity to further refine the page settings if they |
select a single-column page. |
select a single-column page. |
|
|
Line 5080 use strict;
|
Line 5485 use strict;
|
|
|
|
|
|
|
sub new { |
sub new { |
my $self = Apache::lonhelper::element->new(); |
my $self = Apache::lonhelper::element->new(); |
|
|
shift; # disturbs me (probably prevents subclassing) but works (drops |
shift; # disturbs me (probably prevents subclassing) but works (drops |
Line 5090 sub new {
|
Line 5495 sub new {
|
my $helper = Apache::lonhelper::getHelper(); |
my $helper = Apache::lonhelper::getHelper(); |
$helper->declareVar($self->{'variable'}); |
$helper->declareVar($self->{'variable'}); |
|
|
# The variable name of the format element, so we can look into |
# The variable name of the format element, so we can look into |
# $helper->{VARS} to figure out whether the columns are one or two |
# $helper->{VARS} to figure out whether the columns are one or two |
$self->{'formatvar'} = shift; |
$self->{'formatvar'} = shift; |
|
|
Line 5130 sub render {
|
Line 5535 sub render {
|
$size{'height_and_units'}, |
$size{'height_and_units'}, |
$size{'margin_and_units'})= |
$size{'margin_and_units'})= |
&Apache::lonprintout::page_format($papersize, $laystyle, $cols); |
&Apache::lonprintout::page_format($papersize, $laystyle, $cols); |
|
|
foreach my $dimension ('width','height','margin') { |
foreach my $dimension ('width','height','margin') { |
($size{$dimension},$size{$dimension.'_unit'}) = |
($size{$dimension},$size{$dimension.'_unit'}) = |
split(/ +/, $size{$dimension.'_and_units'},2); |
split(/ +/, $size{$dimension.'_and_units'},2); |
Line 5215 sub preprocess {
|
Line 5620 sub preprocess {
|
|
|
foreach my $dim ('width', 'height', 'lmargin') { |
foreach my $dim ('width', 'height', 'lmargin') { |
my ($value, $units) = split(/ /, $size{$dim}); |
my ($value, $units) = split(/ /, $size{$dim}); |
|
|
$helper->{VARS}->{"$var.".$dim} = $value; |
$helper->{VARS}->{"$var.".$dim} = $value; |
$helper->{VARS}->{"$var.".$dim.'unit'} = $units; |
$helper->{VARS}->{"$var.".$dim.'unit'} = $units; |
|
|
} |
} |
|
|
|
|
Line 5226 sub preprocess {
|
Line 5631 sub preprocess {
|
|
|
$helper->changeState($self->{NEXTSTATE}); |
$helper->changeState($self->{NEXTSTATE}); |
} |
} |
|
|
return 1; |
return 1; |
} |
} |
|
|
Line 5235 sub postprocess {
|
Line 5640 sub postprocess {
|
|
|
my $var = $self->{'variable'}; |
my $var = $self->{'variable'}; |
my $helper = Apache::lonhelper->getHelper(); |
my $helper = Apache::lonhelper->getHelper(); |
my $width = $helper->{VARS}->{$var .'.width'} = $env{"form.${var}.width"}; |
my $width = $helper->{VARS}->{$var .'.width'} = $env{"form.${var}.width"}; |
my $height = $helper->{VARS}->{$var .'.height'} = $env{"form.${var}.height"}; |
my $height = $helper->{VARS}->{$var .'.height'} = $env{"form.${var}.height"}; |
my $lmargin = $helper->{VARS}->{$var .'.lmargin'} = $env{"form.${var}.lmargin"}; |
my $lmargin = $helper->{VARS}->{$var .'.lmargin'} = $env{"form.${var}.lmargin"}; |
$helper->{VARS}->{$var .'.widthunit'} = $env{"form.${var}.widthunit"}; |
$helper->{VARS}->{$var .'.widthunit'} = $env{"form.${var}.widthunit"}; |
$helper->{VARS}->{$var .'.heightunit'} = $env{"form.${var}.heightunit"}; |
$helper->{VARS}->{$var .'.heightunit'} = $env{"form.${var}.heightunit"}; |
$helper->{VARS}->{$var .'.lmarginunit'} = $env{"form.${var}.lmarginunit"}; |
$helper->{VARS}->{$var .'.lmarginunit'} = $env{"form.${var}.lmarginunit"}; |
|
|
my $error = ''; |
my $error = ''; |
|
|
# /^-?[0-9]+(\.[0-9]*)?$/ -> optional minus, at least on digit, followed |
# /^-?[0-9]+(\.[0-9]*)?$/ -> optional minus, at least on digit, followed |
# by an optional period, followed by digits, ending the string |
# by an optional period, followed by digits, ending the string |
|
|
if ($width !~ /^-?[0-9]*(\.[0-9]*)?$/) { |
if ($width !~ /^-?[0-9]*(\.[0-9]*)?$/) { |