version 1.425, 2006/03/02 23:56:55
|
version 1.429, 2006/03/14 23:24:46
|
Line 41 use Apache::lonnavmaps;
|
Line 41 use Apache::lonnavmaps;
|
use Apache::lonratedt; |
use Apache::lonratedt; |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Carp; |
|
|
my %perm; |
my %perm; |
|
|
Line 233 sub latex_header_footer_remove {
|
Line 234 sub latex_header_footer_remove {
|
# |
# |
sub encapsulate_minipage { |
sub encapsulate_minipage { |
my ($text) = @_; |
my ($text) = @_; |
if (!(env{'form.problem.split'} =~ /yes/i)) { |
if (!($env{'form.problem.split'} =~ /yes/i)) { |
$text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}'; |
$text = '\begin{minipage}{\textwidth}'.$text.'\end{minipage}'; |
} |
} |
return $text; |
return $text; |
} |
} |
|
# |
|
# The NUMBER_TO_PRINT and SPLIT_PDFS |
|
# variables interact, this sub looks at these two parameters |
|
# and comes up with a final value for NUMBER_TO_PRINT which can be: |
|
# all - if SPLIT_PDFS eq 'all'. |
|
# 1 - if SPLIT_PDFS eq 'oneper' |
|
# section - if SPLIT_PDFS eq 'sections' |
|
# <unchanged> - if SPLIT_PDFS eq 'usenumber' |
|
# |
|
sub adjust_number_to_print { |
|
my $helper = shift; |
|
|
|
my $split_pdf = $helper->{'VARS'}->{'SPLIT_PDFS'}; |
|
|
|
if ($split_pdf eq 'all') { |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'all'; |
|
} elsif ($split_pdf eq 'oneper') { |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 1; |
|
} elsif ($split_pdf eq 'sections') { |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = 'section'; |
|
} elsif ($split_pdf eq 'usenumber') { |
|
# Unmodified. |
|
} else { |
|
# Error!!!! |
|
|
|
croak "bad SPLIT_PDFS: $split_pdf in lonprintout::adjust_number_to_print"; |
|
} |
|
} |
|
|
sub character_chart { |
sub character_chart { |
my $result = shift; |
my $result = shift; |
Line 1120 ENDPART
|
Line 1148 ENDPART
|
} |
} |
$form{'rndseed'}=$rndseed; |
$form{'rndseed'}=$rndseed; |
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::delenv('form.counter'); |
|
&Apache::lonxml::init_counter(); |
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::store_counter(); |
|
$resources_printed .= $currentURL.':'; |
$resources_printed .= $currentURL.':'; |
$texversion.=&Apache::lonnet::ssi($currentURL,%form); |
$texversion.=&Apache::lonnet::ssi($currentURL,%form); |
&Apache::lonnet::delenv('form.counter'); |
|
|
&Apache::lonxml::clear_problem_counter(); |
|
|
&Apache::lonnet::delenv('request.filename'); |
&Apache::lonnet::delenv('request.filename'); |
} |
} |
# current document with answers.. no need to encap in minipage |
# current document with answers.. no need to encap in minipage |
Line 1272 ENDPART
|
Line 1302 ENDPART
|
my $flag_page_in_sequence = 'NO'; |
my $flag_page_in_sequence = 'NO'; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my $prevassignment=''; |
my $prevassignment=''; |
&Apache::lonnet::delenv('form.counter'); |
|
&Apache::lonxml::init_counter(); |
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::store_counter(); |
|
my $pbreakresources = keys %page_breaks; |
my $pbreakresources = keys %page_breaks; |
for (my $i=0;$i<=$#master_seq;$i++) { |
for (my $i=0;$i<=$#master_seq;$i++) { |
|
|
Line 1297 ENDPART
|
Line 1327 ENDPART
|
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)$/) { |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $pre_counter=$env{'form.counter'}; |
|
|
&Apache::lonxml::remember_problem_counter(); |
|
|
$texversion.=&Apache::lonnet::ssi($urlp,%form); |
$texversion.=&Apache::lonnet::ssi($urlp,%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); |
Line 1305 ENDPART
|
Line 1337 ENDPART
|
$texversion =~ s/\\end{document}\d*/\\end{document}/; |
$texversion =~ s/\\end{document}\d*/\\end{document}/; |
$flag_page_in_sequence = 'YES'; |
$flag_page_in_sequence = 'YES'; |
} |
} |
my ($envfile) = ($env{'user.environment'} =~m|/([^/]+)\.id$| ); |
|
&Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'), |
|
$envfile); |
|
my $current_counter=$env{'form.counter'}; |
|
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')) { |
# Don't permanently pervert the %form hash |
# Don't permanently pervert the %form hash |
Line 1316 ENDPART
|
Line 1345 ENDPART
|
$answerform{'grade_target'}='answer'; |
$answerform{'grade_target'}='answer'; |
$answerform{'answer_output_mode'}='tex'; |
$answerform{'answer_output_mode'}='tex'; |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
&Apache::lonnet::appenv(('form.counter' => $pre_counter)); |
|
|
&Apache::lonxml::restore_problem_counter(); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
|
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 { |
Line 1380 ENDPART
|
Line 1410 ENDPART
|
} |
} |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
&Apache::lonnet::delenv('form.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}/; |
} |
} |
Line 1405 ENDPART
|
Line 1435 ENDPART
|
# 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 |
|
# 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")) { |
@students = sort compare_names @students; |
@students = sort compare_names @students; |
} |
} |
|
&adjust_number_to_print($helper); |
|
|
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' || |
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' || |
$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 |
|
# to remember that in split_on_sections and |
|
# print all of the students in the list. |
|
# |
|
my $split_on_sections = 0; |
|
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'section') { |
|
$split_on_sections = 1; |
|
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} = $#students+1; |
|
} |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; |
|
|
#loop over students |
#loop over students |
Line 1426 ENDPART
|
Line 1470 ENDPART
|
if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';} |
if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';} |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75'); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75'); |
my $student_counter=-1; |
my $student_counter=-1; |
|
my $i = 0; |
|
my ($junku, $junkd, $last_section) = split /:/,$students[0]; |
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"; |
Line 1434 ENDPART
|
Line 1480 ENDPART
|
print $temp_file "1969\n"; |
print $temp_file "1969\n"; |
} |
} |
$student_counter++; |
$student_counter++; |
my $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
if ($split_on_sections) { |
|
my $this_section; |
|
($junku, $junkd, $this_section) = split /:/,$person; |
|
if ($this_section ne $last_section) { |
|
$i++; |
|
$last_section = $this_section; |
|
} |
|
} else { |
|
$i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'}); |
|
} |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
my ($output,$fullname, $printed)=&print_resources($r,$helper, |
$person,$type, |
$person,$type, |
\%moreenv,\@master_seq, |
\%moreenv,\@master_seq, |
Line 1758 sub print_resources {
|
Line 1813 sub print_resources {
|
my $i = 0; |
my $i = 0; |
#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::lonnet::delenv('form.counter'); |
|
&Apache::lonxml::init_counter(); |
&Apache::lonxml::clear_problem_counter(); |
&Apache::lonxml::store_counter(); |
|
my %page_breaks = &get_page_breaks($helper); |
my %page_breaks = &get_page_breaks($helper); |
my @format_array = split(/\|/,$helper->{'VARS'}->{'FORMAT'}); |
my @format_array = split(/\|/,$helper->{'VARS'}->{'FORMAT'}); |
my $columns_in_format = $format_array[1]; |
my $columns_in_format = $format_array[1]; |
Line 1779 sub print_resources {
|
Line 1833 sub print_resources {
|
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.':'; |
my $pre_counter=$env{'form.counter'}; |
|
|
&Apache::lonxml::remember_problem_counter(); |
|
|
my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
my ($envfile) = |
|
( $env{'user.environment'} =~ m|/([^/]+)\.id$| ); |
|
&Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'), |
|
$envfile); |
|
my $current_counter=$env{'form.counter'}; |
|
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')) { |
# Use a copy of the hash so we don't pervert it on future loop passes. |
# Use a copy of the hash so we don't pervert it on future loop passes. |
my %answerenv = %{$moreenv}; |
my %answerenv = %{$moreenv}; |
$answerenv{'answer_output_mode'}='tex'; |
$answerenv{'answer_output_mode'}='tex'; |
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
&Apache::lonnet::appenv(('form.counter' => $pre_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); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
|
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 { |
Line 1817 sub print_resources {
|
Line 1871 sub print_resources {
|
} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { |
} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { |
$printed .= $curresline.':'; |
$printed .= $curresline.':'; |
my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); |
my ($envfile) = |
|
( $env{'user.environment'} =~ m|/([^/]+)\.id$| ); |
|
&Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'), |
|
$envfile); |
|
my $current_counter=$env{'form.counter'}; |
|
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 { |
Line 2203 ALL_PROBLEMS
|
Line 2253 ALL_PROBLEMS
|
</state> |
</state> |
<state name="NUMBER_PER_PDF" title="Number printed at once"> |
<state name="NUMBER_PER_PDF" title="Number printed at once"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<message><hr width='33%' /><b>Number of assignments printed at the same time: </b></message> |
<message><hr width='33%' /><b>How do you want assignments split into PDF files? </b></message> |
|
<choices variable="SPLIT_PDFS"> |
|
<choice computer="all">All assignments in a single PDF file</choice> |
|
<choice computer="sections">Each PDF contains exactly one section</choice> |
|
<choice computer="oneper">Each PDF contains exactly one assignment</choice> |
|
<choice computer="usenumber">Specify Number:</choice> |
|
</choices> |
<string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string> |
<string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string> |
</state> |
</state> |
RESOURCE_SELECTOR |
RESOURCE_SELECTOR |
Line 2342 CHOOSE_ANON1
|
Line 2398 CHOOSE_ANON1
|
<choice computer='3'>Add three empty pages/column after each student\'s assignment</choice> |
<choice computer='3'>Add three empty pages/column after each student\'s assignment</choice> |
</choices> |
</choices> |
</state> |
</state> |
<state name="NUMBER_PER_PDF title="Number assingnments per pdf"> |
<state name="NUMBER_PER_PDF" title="Number assignments per pdf"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
<message><hr width='33%' /><b>Number of assignments printed at the same time: </b></message> |
<message><hr width='33%' /><b>How do you want assignments split into PDF files? </b></message> |
|
<choices variable="SPLIT_PDFS"> |
|
<choice computer="all">All assignments in a single PDF file</choice> |
|
<choice computer="sections">Each PDF contains exactly one section</choice> |
|
<choice computer="oneper">Each PDF contains exactly one assignment</choice> |
|
<choice computer="usenumber">Specify Number:</choice> |
|
</choices> |
<string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string> |
<string variable="NUMBER_TO_PRINT" maxlength="5" size="5"><defaultvalue>"all"</defaultvalue></string> |
</state> |
</state> |
RESOURCE_SELECTOR |
RESOURCE_SELECTOR |
|
|
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_STUDENTS1); |
<state name="CHOOSE_STUDENTS1" title="Select Students and Resources"> |
<state name="CHOOSE_STUDENTS1" title="Select Students and Resources"> |
<student multichoice='1' variable="STUDENTS" nextstate="SELECT_RESOURCES" coursepersonnel="1" /> |
|
<choices variable='student_sort'> |
<choices variable='student_sort'> |
<choice computer='0'>Sort by section then student</choice> |
<choice computer='0'>Sort by section then student</choice> |
<choice computer='1'>Sort by students across sections.</choice> |
<choice computer='1'>Sort by students across sections.</choice> |
</choices> |
</choices> |
|
<student multichoice='1' variable="STUDENTS" nextstate="SELECT_RESOURCES" coursepersonnel="1" /> |
|
|
</state> |
</state> |
$resource_selector |
$resource_selector |