version 1.51, 2002/08/14 20:38:04
|
version 1.54, 2002/09/05 15:51:07
|
Line 43 use strict;
|
Line 43 use strict;
|
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::loncommon; |
use Apache::inputtags; |
use Apache::inputtags; |
|
use Apache::loncoursedata; |
|
use Apache::grades; |
use Apache::edit; |
use Apache::edit; |
use Apache::File(); |
use Apache::File(); |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
Line 73 sub menu_for_output {
|
Line 76 sub menu_for_output {
|
(you will print what you see on the screen)<br /> |
(you will print what you see on the screen)<br /> |
ENDMENUOUT1 |
ENDMENUOUT1 |
if ((not $ENV{'request.role'}=~m/^au\./) and (not $ENV{'request.role'}=~m/^ca\./)) { |
if ((not $ENV{'request.role'}=~m/^au\./) and (not $ENV{'request.role'}=~m/^ca\./)) { |
$r->print(<<ENDMENUOUT2); |
$r->print(<<ENDMENUOUT2); |
<input type="radio" name="choice" value="Standard LaTeX output for the primary sequence"> All problems from the primary sequence<br /> |
<input type="radio" name="choice" value="Standard LaTeX output for the primary sequence"> All problems from the primary sequence<br /> |
<input type="radio" name="choice" value="Standard LaTeX output for whole primary sequence"> The whole primary sequence (problems plus all html and xml files)<br /> |
<input type="radio" name="choice" value="Standard LaTeX output for whole primary sequence"> The whole primary sequence (problems plus all html and xml files)<br /> |
<input type="radio" name="choice" value="Standard LaTeX output for the top level sequence"> All problems from the top level sequence<br /> |
<input type="radio" name="choice" value="Standard LaTeX output for the top level sequence"> All problems from the top level sequence<br /> |
<br /> |
<br /> |
ENDMENUOUT2 |
ENDMENUOUT2 |
} |
} |
|
if ($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) { |
|
$r->print(<<ENDMENUOUT6); |
|
<input type="radio" name="choice" value="All class print"> Print assignment (all problems from the primary sequence) for group of students<br /> |
|
ENDMENUOUT6 |
|
} |
my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); |
my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); |
$subdirtoprint =~ s/\/[^\/]+$//; |
$subdirtoprint =~ s/\/[^\/]+$//; |
if (&Apache::lonnet::allowed('bre',$subdirtoprint) eq 'F') { |
if (&Apache::lonnet::allowed('bre',$subdirtoprint) eq 'F') { |
Line 114 ENDMENUOUT4
|
Line 122 ENDMENUOUT4
|
</table> |
</table> |
</br> |
</br> |
<input type="submit" value="Submit your choice"> |
<input type="submit" value="Submit your choice"> |
</form> |
|
</body> |
|
</html> |
|
ENDMENUOUT5 |
ENDMENUOUT5 |
} |
} |
|
|
|
|
|
sub additional_class_menu { |
|
my $r = shift; |
|
$r->print(<<ENDMENUOUT1); |
|
<input type="hidden" name="url" value="$ENV{'form.url'}"> |
|
<input type="hidden" name="choice" value="$ENV{'form.choice'}"> |
|
<input type="hidden" name="layout" value="$ENV{'form.layout'}"> |
|
<input type="hidden" name="numberofcolumns" value="$ENV{'form.numberofcolumns'}"> |
|
<h1>Mark students which assignments you want to print</h1> |
|
ENDMENUOUT1 |
|
my $c = $r->connection; |
|
my %cache; |
|
my $courseID = $ENV{'request.course.id'}; |
|
my $classlist = &Apache::loncoursedata::DownloadClasslist($courseID,$cache{'ClasslistTimestamp'},$c); |
|
&Apache::loncoursedata::ProcessClasslist(\%cache,$classlist,$courseID,$c); |
|
my @all_students = split(':::',$cache{'NamesOfStudents'}); |
|
my @active_students = (); |
|
foreach my $student (@all_students) { |
|
if ($cache{$student.':Status'} eq 'Active') { |
|
push @active_students,$student; |
|
} |
|
} |
|
my $what_to_print = '<table border="1">'; |
|
my $i = 0; |
|
foreach my $student (@active_students) { |
|
$what_to_print .= '<tr><td><input type="checkbox" name="whomtoprint'.$i.'" value="'.$student.'">'.$cache{$student.':fullname'}.'</td></tr>'; |
|
# $what_to_print .= '<tr><td><input type="checkbox" name="whomtoprint'.$i.'" value="'.$cache{$student.':fullname'}.'">'.$cache{$student.':fullname'}.'</td></tr>'; |
|
$i++; |
|
} |
|
$what_to_print .= '</table>'; |
|
$r->print(<<ENDMENUOUT2); |
|
$what_to_print <br /> |
|
<input type="hidden" name="numberofstudents" value="$i"> |
|
<input type="hidden" name="phase" value="three"> |
|
<input type="submit" value="Submit"> |
|
ENDMENUOUT2 |
|
} |
|
|
|
|
|
sub additional_print_menu { |
|
my $r = shift; |
|
my $what_to_print = ''; |
|
for (my $i=0; $i<$ENV{'form.numberofstudents'};$i++) { |
|
$what_to_print .= '<input type="hidden" name="whomtoprint'.$i.'" value="'.$ENV{'form.whomtoprint'.$i}.'">'; |
|
} |
|
$r->print(<<ENDMENUOUT); |
|
$what_to_print |
|
<input type="hidden" name="url" value="$ENV{'form.url'}"> |
|
<input type="hidden" name="choice" value="$ENV{'form.choice'}"> |
|
<input type="hidden" name="layout" value="$ENV{'form.layout'}"> |
|
<input type="hidden" name="numberofstudents" value="$ENV{'form.numberofstudents'}"> |
|
<input type="hidden" name="numberofcolumns" value="$ENV{'form.numberofcolumns'}"> |
|
Enter width of the page: <input type="text" name="width" width="10" value="9cm"> <br /> |
|
<input type="hidden" name="phase" value="four"> |
|
<input type="submit" value="Submit"> |
|
</form> |
|
</body> |
|
</html> |
|
ENDMENUOUT |
|
} |
|
|
|
|
sub output_data { |
sub output_data { |
Line 184 ENDPART
|
Line 248 ENDPART
|
&Apache::lonnet::delenv('form.grade_target'); |
&Apache::lonnet::delenv('form.grade_target'); |
$result .= $texversion; |
$result .= $texversion; |
} |
} |
} else { |
} elsif ($urlp =~ /\S+/) { |
my %moreenv; |
my %moreenv; |
$moreenv{'form.grade_target'}='tex'; |
$moreenv{'form.grade_target'}='tex'; |
&Apache::lonnet::appenv(%moreenv); |
&Apache::lonnet::appenv(%moreenv); |
Line 242 ENDPART
|
Line 306 ENDPART
|
if ($file_seq[-1]=~m/REMOVE IT PLEASE/) { |
if ($file_seq[-1]=~m/REMOVE IT PLEASE/) { |
pop @file_seq; |
pop @file_seq; |
} |
} |
#-- produce an output string |
#-- produce an output string |
for (my $i=0;$i<=$#file_seq;$i++) { |
for (my $i=0;$i<=$#file_seq;$i++) { |
my $urlp = $file_seq[$i]; |
my $urlp = $file_seq[$i]; |
$urlp=~s/\/home\/httpd\/html//; |
$urlp=~s/\/home\/httpd\/html//; |
Line 256 ENDPART
|
Line 320 ENDPART
|
} |
} |
} |
} |
$result = &additional_cleanup($result); |
$result = &additional_cleanup($result); |
|
} elsif ($choice eq 'All class print') { |
|
#-- prints assignments for whole class or for selected students |
|
my (@students,@st_output) = ((),()); |
|
for (my $i=0; $i<$ENV{'form.numberofstudents'};$i++) { |
|
if ($ENV{'form.whomtoprint'.$i}=~/:/) { |
|
push @students,$ENV{'form.whomtoprint'.$i}; |
|
} |
|
} |
|
#where is the primary sequence containing current resource (the same for all students)? |
|
my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'}); |
|
$symbolic =~ m/([^_]+)_/; |
|
my $primary_sequence = '/res/'.$1; |
|
#opens and analyses the primary sequence file, produces the array of resources |
|
my $sequence_file=&Apache::lonnet::filelocation("",$primary_sequence); |
|
my $sequencefilecontents=&Apache::lonnet::getfile($sequence_file); |
|
my @master_seq = &content_map($sequencefilecontents); |
|
#loop over students |
|
foreach my $person (@students) { |
|
my $current_output = ''; |
|
my ($username,$userdomain) = split /:/,$person; |
|
my $fullname = &Apache::grades::get_fullname($username,$userdomain); |
|
#goes through all resources, checks if they are available for current student, and produces output |
|
foreach my $curres (@master_seq) { |
|
$curres =~ s/^"//; |
|
$curres =~ s/"$//; |
|
if ($curres=~/\w+/) { |
|
my $symb = &Apache::lonnet::symbread($curres); |
|
my ($map,$id,$res_url) = split(/___/,$symb); |
|
if (&Apache::lonnet::allowed('bre',$res_url)) { |
|
my $rendered = &Apache::loncommon::get_student_view($symb,$username,$userdomain, |
|
$ENV{'request.course.id'},'tex'); |
|
$current_output .= $rendered; |
|
} |
|
} |
|
} |
|
$current_output =~ s/\\begin{document}/\\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$fullname}}\\hskip 1\.4in } \\vskip 5 mm /; |
|
$result .= $current_output; |
|
} |
|
|
|
$result = &additional_cleanup($result); |
|
|
|
|
|
|
|
|
|
|
|
|
} elsif ($choice eq 'Subdirectory print') { |
} elsif ($choice eq 'Subdirectory print') { |
my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); |
my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); |
$subdirtoprint =~ s/\/[^\/]+$//; |
$subdirtoprint =~ s/\/[^\/]+$//; |
Line 317 ENDPART
|
Line 427 ENDPART
|
$result =~ s/(\\end{longtable}\s*)\\newline/$1/g; |
$result =~ s/(\\end{longtable}\s*)\\newline/$1/g; |
$result =~ s/\$number_of_columns/$number_of_columns/g; |
$result =~ s/\$number_of_columns/$number_of_columns/g; |
} |
} |
|
#changes page's parameters for the one column output |
|
if ($ENV{'form.numberofcolumns'} == 1) { |
|
$result =~ s/\\textwidth= 9cm/\\textwidth= $ENV{'form.width'}/; |
|
} |
#-- LaTeX corrections |
#-- LaTeX corrections |
my $first_comment = index($result,'<!--',0); |
my $first_comment = index($result,'<!--',0); |
while ($first_comment != -1) { |
while ($first_comment != -1) { |
Line 325 ENDPART
|
Line 439 ENDPART
|
$first_comment = index($result,'<!--',$first_comment); |
$first_comment = index($result,'<!--',$first_comment); |
} |
} |
$result =~ s/^\s+$//gm; #remove empty lines |
$result =~ s/^\s+$//gm; #remove empty lines |
$result =~ s/\s%/\\%/g; #corrects % |
|
$result =~ s/(\s)+/$1/g; #removes more than one empty space |
$result =~ s/(\s)+/$1/g; #removes more than one empty space |
$result =~ s/\\\\\s*\\vskip/\\vskip/gm; |
$result =~ s/\\\\\s*\\vskip/\\vskip/gm; |
$result =~ s/\\\\\s*\\noindent\s*(\\\\)+/\\\\\\noindent /g; |
$result =~ s/\\\\\s*\\noindent\s*(\\\\)+/\\\\\\noindent /g; |
Line 779 sub handler {
|
Line 892 sub handler {
|
unless ($ENV{'form.phase'}) { |
unless ($ENV{'form.phase'}) { |
&menu_for_output($r); |
&menu_for_output($r); |
} |
} |
|
#-- additional menu for class printing |
|
if ($ENV{'form.phase'} eq 'two') { |
|
if($ENV{'form.choice'} eq 'All class print') { |
|
&additional_class_menu($r); |
|
} else { |
|
$ENV{'form.phase'} = 'three'; |
|
} |
|
} |
|
#-- additional menu for page layout (one column case) |
|
if ($ENV{'form.phase'} eq 'three') { |
|
if($ENV{'form.numberofcolumns'} == 1) { |
|
&additional_print_menu($r); |
|
} else { |
|
$ENV{'form.phase'} = 'four'; |
|
} |
|
} |
#-- core part |
#-- core part |
if ($ENV{'form.phase'} eq 'two') { |
if ($ENV{'form.phase'} eq 'four') { |
&output_data($r); |
&output_data($r); |
} |
} |
return OK; |
return OK; |