--- loncom/interface/lonprintout.pm 2004/04/19 15:39:35 1.291
+++ loncom/interface/lonprintout.pm 2004/05/10 14:25:02 1.301
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.291 2004/04/19 15:39:35 sakharuk Exp $
+# $Id: lonprintout.pm,v 1.301 2004/05/10 14:25:02 sakharuk Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -672,6 +672,20 @@ sub get_textwidth {
return $textwidth;
}
+
+sub unsupported {
+ my $currentURL=shift;
+ my $result.='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
+ if ($currentURL=~/\/ext\//) {
+ $result.=' \strut \\\\ THIS IS EXTERNAL RESOURCE WITH URL \strut \\\\ '.$currentURL.' ';
+ } else {
+ $result.=$currentURL;
+ }
+ $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}';
+ return $result;
+}
+
+
sub output_data {
my ($r,$helper,$rparmhash) = @_;
my %parmhash = %$rparmhash;
@@ -860,29 +874,31 @@ ENDPART
}
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
$result .= '\end{document}';
- } elsif ($currentURL=~/\/smppg$/) {
+ } elsif ($currentURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
my %form;
$form{'grade_target'}='tex';
$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+ if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;}
my $texversion=&Apache::lonnet::ssi($currentURL,%form);
$result .= $texversion;
} else {
- $result.='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
- if ($currentURL=~/\/(aboutme|syllabus|bulletinboard|smppg)$/) {
- $result.=$1;
- } elsif ($currentURL=~/\/ext\//) {
- $result.=' \strut \\\\ THIS IS EXTERNAL RESOURCE WITH URL \strut \\\\ '.$currentURL.' ';
- } else {
- $result.=$currentURL;
- }
- $result.=' \end{document}'
+ $result.=&unsupported($currentURL);
}
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences')) {
#-- produce an output string
+ if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') {
+ $selectionmade = 2;
+ } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') {
+ $selectionmade = 3;
+ } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') {
+ $selectionmade = 4;
+ } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences') {
+ $selectionmade = 7;
+ }
my %form=();
$form{'grade_target'}='tex';
$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
@@ -897,71 +913,88 @@ ENDPART
for (my $i=0;$i<=$#master_seq;$i++) {
my (undef,undef,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
$urlp=&Apache::lonnet::clutter($urlp);
- if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') {
- $selectionmade = 2;
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') {
- $selectionmade = 3;
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') {
- $selectionmade = 4;
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences') {
- $selectionmade = 7;
- }
$form{'symb'}=$master_seq[$i];
my ($sequence)=&Apache::lonnet::decode_symb($master_seq[$i]);
my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #tittle of the assignment which contains this problem
if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}
if ($i==0) {$prevassignment=$assignment;}
#&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]");
- my $texversion.=&Apache::lonnet::ssi($urlp,%form);
- if ($urlp=~/\.page$/) {
- ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
- if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
- $texversion =~ s/\\end{document}\d*/\\end{document}/;
- $flag_page_in_sequence = 'YES';
- }
- my $lonidsdir=$r->dir_config('lonIDsDir');
- my $envfile=$ENV{'user.environment'};
- $envfile=~/\/([^\/]+)\.id$/;
- $envfile=$1;
- &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile);
- my $current_counter=$ENV{'form.counter'};
- if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
- ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
- my %form;
- $form{'grade_target'}='answer';
- $form{'answer_output_mode'}='tex';
- my $answer=&Apache::lonnet::ssi($urlp,%form);
- &Apache::lonnet::appenv(('form.counter' => $current_counter));
- if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
- $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
- } else {
- if ($urlp=~/\.(problem|exam|quiz|library)$/) {
- $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
- $texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($urlp).'}\vskip 0 mm ';
- $texversion.=&path_to_problem ($urlp,$LaTeXwidth);
- $texversion.='\vskip 1 mm '.$answer;
+ my $texversion='';
+ if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+ $texversion.=&Apache::lonnet::ssi($urlp,%form);
+ if ($urlp=~/\.page$/) {
+ ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
+ if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
+ $texversion =~ s/\\end{document}\d*/\\end{document}/;
+ $flag_page_in_sequence = 'YES';
+ }
+ my $lonidsdir=$r->dir_config('lonIDsDir');
+ my $envfile=$ENV{'user.environment'};
+ $envfile=~/\/([^\/]+)\.id$/;
+ $envfile=$1;
+ &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile);
+ my $current_counter=$ENV{'form.counter'};
+ if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
+ ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
+ my %form;
+ $form{'grade_target'}='answer';
+ $form{'answer_output_mode'}='tex';
+ my $answer=&Apache::lonnet::ssi($urlp,%form);
+ &Apache::lonnet::appenv(('form.counter' => $current_counter));
+ if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
+ $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
} else {
- $texversion='';
+ if ($urlp=~/\.(problem|exam|quiz|library)$/) {
+ $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+ $texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($urlp).'}\vskip 0 mm ';
+ $texversion.=&path_to_problem ($urlp,$LaTeXwidth);
+ $texversion.='\vskip 1 mm '.$answer;
+ } else {
+ $texversion='';
+ }
}
}
- }
- if ($flag_latex_header_remove ne 'NO') {
- $texversion = &latex_header_footer_remove($texversion);
+ if ($flag_latex_header_remove ne 'NO') {
+ $texversion = &latex_header_footer_remove($texversion);
+ } else {
+ $texversion =~ s/\\end{document}//;
+ }
+ if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
+ $texversion=&IndexCreation($texversion,$urlp);
+ }
+ if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
+ my $name = &get_name();
+ my $courseidinfo = &get_course();
+ if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
+ $prevassignment=$assignment;
+ $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm ';
+ }
+ $result .= $texversion;
+ $flag_latex_header_remove = 'YES';
+ } elsif ($urlp=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
+ my %form;
+ $form{'grade_target'}='tex';
+ $form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
+ $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+ if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;}
+ my $texversion=&Apache::lonnet::ssi($urlp,%form);
+ if ($flag_latex_header_remove ne 'NO') {
+ $texversion = &latex_header_footer_remove($texversion);
+ } else {
+ $texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/;
+ }
+ $result .= $texversion;
+ $flag_latex_header_remove = 'YES';
} else {
- $texversion =~ s/\\end{document}//;
- }
- if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
- $texversion=&IndexCreation($texversion,$urlp);
- }
- if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
- my $name = &get_name();
- my $courseidinfo = &get_course();
- if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
- $prevassignment=$assignment;
- $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm ';
- }
- $result .= $texversion;
- $flag_latex_header_remove = 'YES';
+ $texversion=&unsupported($urlp);
+ if ($flag_latex_header_remove ne 'NO') {
+ $texversion = &latex_header_footer_remove($texversion);
+ } else {
+ $texversion =~ s/\\end{document}//;
+ }
+ $result .= $texversion;
+ $flag_latex_header_remove = 'YES';
+ }
}
&Apache::lonnet::delenv('form.counter');
if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}
@@ -1002,34 +1035,50 @@ ENDPART
$result .= $print_array[0].' \end{document}';
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon') ||
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon') ) {
+ my $cdom =$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $cnum =$ENV{'course.'.$ENV{'request.course.id'}.'.num'};
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'};
my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'};
- if ($helper->{'VARS'}->{'REMEBER_ANON_CODES'} != 1) {
- $code_name=undef;
- }
+ my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'};
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'});
+ my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'};
+ if ($number_per_page eq '0' || $number_per_page eq 'all') {
+ $number_per_page=$num_todo;
+ }
my $flag_latex_header_remove = 'NO';
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline');
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');
my $seed=time+($$<<16)+($$);
- my %allcodes;
- for (my $i=0;$i<$num_todo;$i++) {
- $moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,'6');
+ my @allcodes;
+ if ($old_name) {
+ my %result=&Apache::lonnet::get('CODEs',[$old_name],$cdom,$cnum);
+ @allcodes=split(',',$result{$old_name});
+ } else {
+ my %allcodes;
+ srand($seed);
+ for (my $i=0;$i<$num_todo;$i++) {
+ $moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,'6');
+ }
+ if ($code_name) {
+ &Apache::lonnet::put('CODEs',
+ {$code_name =>join(',',keys(%allcodes))},
+ $cdom,$cnum);
+ }
+ @allcodes=keys(%allcodes);
+ }
+ my $count=0;
+ foreach my $code (sort(@allcodes)) {
+ my $file_num=int($count/$number_per_page);
+ $moreenv{'CODE'}=&num_to_letters($code);
my ($output,$fullname)=
&print_resources($r,$helper,'anonymous',$type,\%moreenv,
\@master_seq,$flag_latex_header_remove);
- $print_array[$i].=$output;
+ $print_array[$file_num].=$output;
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
&mt('last assignment').' '.$fullname);
$flag_latex_header_remove = 'YES';
- }
- if ($code_name) {
- my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
- my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
- &Apache::lonnet::put('CODEs',
- { $code_name => join(',',keys(%allcodes)) },
- $cdom,$cnum);
+ $count++;
}
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= $print_array[0].' \end{document}';
@@ -1209,10 +1258,9 @@ sub num_to_letters {
sub get_CODE {
my ($all_codes,$num,$seed,$size)=@_;
my $max='1'.'0'x$size;
- srand($seed);
my $newcode;
while(1) {
- $newcode=int(rand($max));
+ $newcode=sprintf("%06d",int(rand($max)));
if (!exists($$all_codes{$newcode})) {
$$all_codes{$newcode}=1;
return &num_to_letters($newcode);
@@ -1567,19 +1615,28 @@ RESOURCE_SELECTOR
$resource_selector
CHOOSE_STUDENTS
+
+ 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='';
+ foreach my $name (@names) {
+ if ($name =~ /^error: 2 /) { next; }
+ $namechoice.=''.$name.'';
+ }
&Apache::lonxml::xmlparse($r, 'helper', <
PAGESIZE
Number of anonymous assignments to print?
-
-
- Should the CODEs used on this printing be remebered for later?
-
-
- Names to store the CODEs under for later:
+
Names to store the CODEs under for later:
+ Reprint a set of saved CODEs:
+
+ $namechoice
+
+
$resource_selector
CHOOSE_ANON1
@@ -1619,8 +1676,16 @@ CHOOSE_STUDENTS1
&Apache::lonxml::xmlparse($r, 'helper', <
-
How many Anonymous exams to print?
+ PAGESIZE
+
Number of anonymous assignments to print?
+
Names to store the CODEs under for later:
+
+
+ Reprint a set of saved CODEs:
+
+ $namechoice
+
$resource_selector