--- loncom/interface/lonprintout.pm 2005/10/31 21:06:35 1.396 +++ loncom/interface/lonprintout.pm 2005/12/06 03:58:14 1.400 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.396 2005/10/31 21:06:35 albertel Exp $ +# $Id: lonprintout.pm,v 1.400 2005/12/06 03:58:14 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,6 +42,8 @@ use Apache::lonratedt; use POSIX qw(strftime); use Apache::lonlocal; +my %perm; + # # Convert a numeric code to letters # @@ -431,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; @@ -815,7 +818,7 @@ 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". @@ -905,28 +908,43 @@ sub unsupported { # # List of recently generated print files # - sub recently_generated { my $r=shift; my $prtspool=$r->dir_config('lonPrtDir'); - my $result; + my $zip_result; + my $pdf_result; opendir(DIR,$prtspool); - while (my $filename=readdir(DIR)) { - if ($filename=~/^$env{'user.name'}\_$env{'user.domain'}\_printout\_(\d+)\_.*.pdf$/) { - my ($cdev,$cino,$cmode,$cnlink, - $cuid,$cgid,$crdev,$csize, - $catime,$cmtime,$cctime, - $cblksize,$cblocks)=stat($prtspool.'/'.$filename); - $result.="". - &mt('Generated [_1] ([_2] bytes)', - &Apache::lonlocal::locallocaltime($cctime),$csize). - '
'; - } - } + + my @files = + grep(/^$env{'user.name'}_$env{'user.domain'}_printout_(\d+)_.*\.(pdf|zip)$/,readdir(DIR)); closedir(DIR); - if ($result) { - $r->print('

'.&mt('Recently generated printouts').'

'."\n". - $result); + + @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); } } @@ -1634,7 +1652,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,); @@ -1781,7 +1799,8 @@ sub print_resources { sub handler { my $r = shift; - my $helper; + + &init_perm(); # my $loaderror=&Apache::lonnet::overloaderror($r); # if ($loaderror) { return $loaderror; } @@ -1790,11 +1809,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'}}) { @@ -1837,6 +1855,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; @@ -1965,9 +1997,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(); @@ -2052,9 +2081,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']; @@ -2316,7 +2345,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'; @@ -2388,7 +2417,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(); @@ -2404,7 +2433,7 @@ CHOOSE_FROM_ANY_SEQUENCE $startedTable = 1; } - if ($env{'request.role.adv'}) { + if ($perm{'pav'}) { if (!$startedTable) { addMessage("
"); - # If advanced roles, then allow to show all foils. - - if ($env{'request.role.adv'}) { - addMessage(""); - } - + addMessage(""); } if ($helper->{'VARS'}->{'construction'}) { @@ -2623,7 +2647,8 @@ STATEHTML $result .= "
LaTeX mode: "); $startedTable = 1; @@ -2455,19 +2484,14 @@ CHOOSE_FROM_ANY_SEQUENCE Apache::lonhelper::dropdown->new(); 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("
"); + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{'multichoice'} = "true"; + $paramHash->{'allowempty'} = "true"; + $paramHash->{'variable'} = "showallfoils"; + $paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ]; + Apache::lonhelper::choices->new(); + addMessage("