--- loncom/interface/lonprintout.pm 2005/08/22 22:21:48 1.388
+++ loncom/interface/lonprintout.pm 2005/12/06 09:41:02 1.401
@@ -1,7 +1,7 @@
-# The LearningOnline Network
+# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.388 2005/08/22 22:21:48 foxr Exp $
+# $Id: lonprintout.pm,v 1.401 2005/12/06 09:41:02 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,7 +42,7 @@ use Apache::lonratedt;
use POSIX qw(strftime);
use Apache::lonlocal;
-my $resources_printed = '';
+my %perm;
#
# Convert a numeric code to letters
@@ -433,6 +433,7 @@ sub character_chart {
$result =~ s/&(\#252|uuml);/\\\"{u}/g;
$result =~ s/&(\#253|yacute);/\\\'{y}/g;
$result =~ s/&(\#255|yuml);/\\\"{y}/g;
+ $result =~ s/&\#295;/\\ensuremath\{\\hbar\}/g;
$result =~ s/&\#952;/\\ensuremath\{\\theta\}/g;
#Greek Alphabet
$result =~ s/&(alpha|\#945);/\\ensuremath\{\\alpha\}/g;
@@ -508,6 +509,7 @@ sub character_chart {
$result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g;
$result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g;
$result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g;
+ $result =~ s/–/\\ensuremath\{-\}/g;
$result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g;
$result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g;
$result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g;
@@ -816,12 +818,13 @@ sub IndexCreation {
sub print_latex_header {
my $mode=shift;
my $output='\documentclass[letterpaper]{article}';
- if (($mode eq 'batchmode') || (!$env{'request.role.adv'})) {
+ if (($mode eq 'batchmode') || (!$perm{'pav'})) {
$output.='\batchmode';
}
$output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n".
'\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n".
'\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n".
+ '\usepackage{wrapfig}'.
'\usepackage{picins}\usepackage{calc}'."\n".
'\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n".
'\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n".
@@ -903,6 +906,49 @@ sub unsupported {
#
+# List of recently generated print files
+#
+sub recently_generated {
+ my $r=shift;
+ my $prtspool=$r->dir_config('lonPrtDir');
+ my $zip_result;
+ my $pdf_result;
+ opendir(DIR,$prtspool);
+
+ my @files =
+ grep(/^$env{'user.name'}_$env{'user.domain'}_printout_(\d+)_.*\.(pdf|zip)$/,readdir(DIR));
+ closedir(DIR);
+
+ @files = sort {
+ my ($actime) = (stat($prtspool.'/'.$a))[10];
+ my ($bctime) = (stat($prtspool.'/'.$b))[10];
+ return $bctime <=> $actime;
+ } (@files);
+
+ foreach my $filename (@files) {
+ my ($ext) = ($filename =~ m/(pdf|zip)$/);
+ my ($cdev,$cino,$cmode,$cnlink,
+ $cuid,$cgid,$crdev,$csize,
+ $catime,$cmtime,$cctime,
+ $cblksize,$cblocks)=stat($prtspool.'/'.$filename);
+ my $result="".
+ &mt('Generated [_1] ([_2] bytes)',
+ &Apache::lonlocal::locallocaltime($cctime),$csize).
+ '
';
+ if ($ext eq 'pdf') { $pdf_result .= $result; }
+ if ($ext eq 'zip') { $zip_result .= $result; }
+ }
+ if ($zip_result) {
+ $r->print('
'.&mt('Recently generated printout zip files')."
\n"
+ .$zip_result);
+ }
+ if ($pdf_result) {
+ $r->print(''.&mt('Recently generated printouts')."
\n"
+ .$pdf_result);
+ }
+}
+
+#
# Retrieve the hash of page breaks.
#
# Inputs:
@@ -926,6 +972,7 @@ sub get_page_breaks {
sub output_data {
my ($r,$helper,$rparmhash) = @_;
my %parmhash = %$rparmhash;
+ my $resources_printed = '';
my $html=&Apache::lonxml::xmlbegin();
my $bodytag=&Apache::loncommon::bodytag('Preparing Printout');
$r->print(<{'VARS'}->{'probstatus'} eq 'exam') {
+ $form{'problemtype'}='exam';
+ }
$resources_printed .= $currentURL.':';
my $answer=&Apache::lonnet::ssi($currentURL,%form);
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
@@ -1386,11 +1436,8 @@ ENDPART
$code_type=$result{"type\0$old_name"};
@allcodes=split(',',$result{$old_name});
$num_todo=scalar(@allcodes);
- } elsif ($selected_code) {
+ } elsif ($selected_code) { # Selection value is always numeric.
$num_todo = 1;
- my ($alpha, $numeric) = split(/:/, $selected_code);
- $selected_code = $numeric; # Always use numeric, converted if need be.
- $selected_code =~ s/\s+//g;
@allcodes = ($selected_code);
} elsif ($single_code) {
@@ -1608,7 +1655,7 @@ ENDPART
'cgi.'.$identifier.'.selection' => $selectionmade,
'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},
'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},
- 'cgi.'.$identifier.'.role' => $env{'request.role.adv'},
+ 'cgi.'.$identifier.'.role' => $perm{'pav'},
'cgi.'.$identifier.'.numberoffiles' => $#print_array,
'cgi.'.$identifier.'.studentnames' => $student_names,
'cgi.'.$identifier.'.backref' => $URLback,);
@@ -1633,7 +1680,7 @@ sub get_CODE {
my $max='1'.'0'x$size;
my $newcode;
while(1) {
- $newcode=sprintf("%06d",int(rand($max)));
+ $newcode=sprintf("%0".$size."d",int(rand($max)));
if (!exists($$all_codes{$newcode})) {
$$all_codes{$newcode}=1;
if ($type eq 'number' ) {
@@ -1755,7 +1802,8 @@ sub print_resources {
sub handler {
my $r = shift;
- my $helper;
+
+ &init_perm();
# my $loaderror=&Apache::lonnet::overloaderror($r);
# if ($loaderror) { return $loaderror; }
@@ -1764,11 +1812,10 @@ sub handler {
# $env{'course.'.$env{'request.course.id'}.'.home'});
# if ($loaderror) { return $loaderror; }
- my $result = printHelper($r);
- if (!ref($result)) {
- return $result;
+ my $helper = printHelper($r);
+ if (!ref($helper)) {
+ return $helper;
}
- $helper = $result;
# my $key;
# foreach $key (keys %{$helper->{'VARS'}}) {
@@ -1811,6 +1858,20 @@ sub addMessage {
use Data::Dumper;
+sub init_perm {
+ undef(%perm);
+ $perm{'pav'}=&Apache::lonnet::allowed('pav',$env{'request.course.id'});
+ if (!$perm{'pav'}) {
+ $perm{'pav'}=&Apache::lonnet::allowed('pav',
+ $env{'request.course.id'}.'/'.$env{'request.course.sec'});
+ }
+ $perm{'pfo'}=&Apache::lonnet::allowed('pav',$env{'request.course.id'});
+ if (!$perm{'pfo'}) {
+ $perm{'pfo'}=&Apache::lonnet::allowed('pfo',
+ $env{'request.course.id'}.'/'.$env{'request.course.sec'});
+ }
+}
+
sub printHelper {
my $r = shift;
@@ -1854,21 +1915,27 @@ sub printHelper {
$helper->declareVar("showallfoils");
# The page breaks can get loaded initially from the course environment:
+ # But we only do this in the initial state so that they are allowed to change.
+ #
- if((!defined($env{"form.CURRENT_STATE"})) ||
- ($env{'form.CURRENT_STATE'} == "START")) {
- $helper->{VARS}->{FINISHPAGE} = ""; # In case they did a back e.g.
- }
-
-
+ $helper->{VARS}->{FINISHPAGE} = '';
&Apache::loncommon::restore_course_settings('print',
{'pagebreaks' => 'scalar',
'lastprinttype' => 'scalar'});
-
- if("$helper->{VARS}->{PRINT_TYPE}" eq "$env{'form.lastprinttype'}") {
- $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+
+ if($helper->{VARS}->{PRINT_TYPE} eq $env{'form.lastprinttype'}) {
+ if (!defined ($env{"form.CURRENT_STATE"})) {
+
+ $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+ } else {
+ my $state = $env{"form.CURRENT_STATE"};
+ if ($state eq "START") {
+ $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+ }
+ }
+
}
@@ -1933,9 +2000,6 @@ sub printHelper {
}
my $userCanSeeHidden = Apache::lonnavmaps::advancedUser();
- my $userPriviledged = ($env{'request.role'}=~m/^cc\./ or
- $env{'request.role'}=~m/^in\./ or
- $env{'request.role'}=~m/^ta\./);
Apache::lonhelper::registerHelperTags();
@@ -1978,7 +2042,7 @@ sub printHelper {
$helper->declareVar('SEQUENCE');
# Useful for debugging: Dump the help vars
-# $r->print(Dumper($helper->{VARS}));
+# $r->print(Dumper($helper->{VARS}));
# $r->print($map);
# If we're in a sequence...
@@ -2020,9 +2084,9 @@ HELPERFRAGMENT
&Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
}
- # If the user is privileged, allow them to print all
+ # If the user has pfo (print for otheres) allow them to print all
# problems and resources in the entier course, optionally for selected students
- if ($userPriviledged &&
+ if ($perm{'pfo'} &&
($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {
push @{$printChoices}, ['Problems from entire course', 'all_problems', 'ALL_PROBLEMS'];
@@ -2096,20 +2160,26 @@ CHOOSE_STUDENTS
if ($name =~ /^type\0/) { next; }
$namechoice.=''.$name.'';
}
+
+
my %all_codes = &Apache::lonnet::get('CODEs',
\@names, $cdom,$cnum);
+ my %code_values;
my @all_code_array;
foreach my $key (keys %all_codes) {
- my $codes = $all_codes{$key};
- my @numeric_codes = split(/,/,$codes);
- foreach my $numeric (sort {uc($a) cmp uc($b)} @numeric_codes) {
- my $alpha_code = &num_to_letters($numeric);
- push (@all_code_array, "$alpha_code : $numeric");
+ %code_values = &Apache::grades::get_codes($key, $cdom, $cnum);
+ foreach my $key (keys %code_values) {
+ push (@all_code_array, "$key");
}
}
+
my $code_selection = "\n";
- foreach my $code (@all_code_array) {
- $code_selection .= ' '.$code."\n";
+ foreach my $code (sort {uc($a) cmp uc($b)} @all_code_array) {
+ my $choice = $code;
+ if ($code =~ /^[A-Z]+$/) { # Alpha code
+ $choice = &letters_to_num($code);
+ }
+ $code_selection .= ' '.$code."\n";
}
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');
my $codechoice='';
@@ -2278,7 +2348,7 @@ CHOOSE_ANON2
}
# FIXME: That RE should come from a library somewhere.
- if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $env{'request.role.adv'} and $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/') {
+ if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $perm{'pav'} and $subdir ne $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/') {
push @{$printChoices}, ["".&mt('Problems')." ".&mt('from current subdirectory')." $subdir", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];
my $f = '$filename';
@@ -2318,6 +2388,8 @@ CHOOSE_FROM_SUBDIR
CHOOSE_FROM_ANY_SEQUENCE
return \$res->is_sequence;
return $urlValue;
+ return \$res->hasResource(\$res,sub { return !\$_[0]->is_sequence() },0,0);
+
@@ -2348,7 +2420,7 @@ CHOOSE_FROM_ANY_SEQUENCE
my $startedTable = 0; # have we started an HTML table yet? (need
# to close it later)
- if (($env{'request.role.adv'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or
+ if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or
($helper->{VARS}->{'construction'} eq '1')) {
addMessage("
Print: | ");
$paramHash = Apache::lonhelper::getParamHash();
@@ -2364,7 +2436,7 @@ CHOOSE_FROM_ANY_SEQUENCE
$startedTable = 1;
}
- if ($env{'request.role.adv'}) {
+ if ($perm{'pav'}) {
if (!$startedTable) {
addMessage("
LaTeX mode: | ");
$startedTable = 1;
@@ -2415,19 +2487,14 @@ CHOOSE_FROM_ANY_SEQUENCE
Apache::lonhelper::dropdown->new();
addMessage(" | ");
- # If advanced roles, then allow to show all foils.
-
- if ($env{'request.role.adv'}) {
- addMessage(" | ");
- $paramHash = Apache::lonhelper::getParamHash();
- $paramHash->{'multichoice'} = "true";
- $paramHash->{'allowempty'} = "true";
- $paramHash->{'variable'} = "showallfoils";
- $paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ];
- Apache::lonhelper::choices->new();
- addMessage(" | ");
- }
-
+ addMessage(" | ");
+ $paramHash = Apache::lonhelper::getParamHash();
+ $paramHash->{'multichoice'} = "true";
+ $paramHash->{'allowempty'} = "true";
+ $paramHash->{'variable'} = "showallfoils";
+ $paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ];
+ Apache::lonhelper::choices->new();
+ addMessage(" | ");
}
if ($helper->{'VARS'}->{'construction'}) {
@@ -2450,7 +2517,6 @@ RNDSEED
$helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'};
}
-
}
@@ -2477,7 +2543,9 @@ RNDSEED
}
$r->print($helper->display());
-
+ if ($helper->{STATE} eq 'START') {
+ &recently_generated($r);
+ }
&Apache::lonhelper::unregisterHelperTags();
return OK;
@@ -2582,7 +2650,8 @@ STATEHTML
$result .= "
|