--- loncom/interface/Attic/lonspreadsheet.pm 2002/09/10 19:04:13 1.109
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/10/18 13:46:01 1.118
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.109 2002/09/10 19:04:13 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.118 2002/10/18 13:46:01 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -61,6 +61,12 @@ use Apache::Constants qw(:common :http);
use GDBM_File;
use HTML::TokeParser;
use Apache::lonhtmlcommon;
+use Apache::loncoursedata;
+#
+# Caches for coursewide information
+#
+my %Section;
+
#
# Caches for previously calculated spreadsheets
#
@@ -111,60 +117,9 @@ my $tmpdir;
# =============================================================================
# ===================================== Implements an instance of a spreadsheet
-sub initsheet {
- my $safeeval = new Safe(shift);
- my $safehole = new Safe::Hole;
- $safeeval->permit("entereval");
- $safeeval->permit(":base_math");
- $safeeval->permit("sort");
- $safeeval->deny(":base_io");
- $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT');
- $safeeval->share('$@');
- my $code=<<'ENDDEFS';
-# ---------------------------------------------------- Inside of the safe space
-
-#
-# f: formulas
-# t: intermediate format (variable references expanded)
-# v: output values
-# c: preloaded constants (A-column)
-# rl: row label
-# os: other spreadsheets (for student spreadsheet only)
-
-undef %sheet_values;
-undef %t;
-undef %f;
-undef %c;
-undef %rowlabel;
-undef @os;
-
-$maxrow = 0;
-$sheettype = '';
-
-# filename/reference of the sheet
-$filename = '';
-
-# user data
-$uname = '';
-$uhome = '';
-$udom = '';
-
-# course data
-
-$csec = '';
-$chome= '';
-$cnum = '';
-$cdom = '';
-$cid = '';
-$coursefilename = '';
-
-# symb
-
-$usymb = '';
-
-# error messages
-$errormsg = '';
-
+##
+## mask - used to reside in the safe space.
+##
sub mask {
my ($lower,$upper)=@_;
@@ -188,7 +143,6 @@ sub mask {
$alpha='['.$la.'-Za-'.$ua.']';
}
}
-
if (($ld eq '*') || ($ud eq '*')) {
$num='\d+';
} else {
@@ -208,7 +162,9 @@ sub mask {
} else {
my @lda=($ld=~m/\d/g);
my @uda=($ud=~m/\d/g);
- my $i; $j=0; $notdone=1;
+ my $i;
+ my $j=0;
+ my $notdone=1;
for ($i=0;($i<=$#lda)&&($notdone);$i++) {
if ($lda[$i]==$uda[$i]) {
$num.=$lda[$i];
@@ -241,6 +197,65 @@ sub mask {
return '^'.$alpha.$num."\$";
}
+
+
+sub initsheet {
+ my $safeeval = new Safe(shift);
+ my $safehole = new Safe::Hole;
+ $safeeval->permit("entereval");
+ $safeeval->permit(":base_math");
+ $safeeval->permit("sort");
+ $safeeval->deny(":base_io");
+ $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT');
+ $safehole->wrap(\&Apache::lonspreadsheet::mask,$safeeval,'&mask');
+ $safehole->wrap(\&Apache::lonspreadsheet::templaterow,$safeeval,'&templaterow');
+ $safeeval->share('$@');
+ my $code=<<'ENDDEFS';
+# ---------------------------------------------------- Inside of the safe space
+
+#
+# f: formulas
+# t: intermediate format (variable references expanded)
+# v: output values
+# c: preloaded constants (A-column)
+# rl: row label
+# os: other spreadsheets (for student spreadsheet only)
+
+undef %sheet_values;
+undef %t;
+undef %f;
+undef %c;
+undef %rowlabel;
+undef @os;
+
+$maxrow = 0;
+$sheettype = '';
+
+# filename/reference of the sheet
+$filename = '';
+
+# user data
+$uname = '';
+$uhome = '';
+$udom = '';
+
+# course data
+
+$csec = '';
+$chome= '';
+$cnum = '';
+$cdom = '';
+$cid = '';
+$coursefilename = '';
+
+# symb
+
+$usymb = '';
+
+# error messages
+$errormsg = '';
+
+
#-------------------------------------------------------
=item UWCALC(hashname,modules,units,date)
@@ -852,7 +867,7 @@ sub sett {
}
# Deal with the normal cells
foreach (keys(%f)) {
- if (($f{$_}) && ($_!~/template\_/)) {
+ if (exists($f{$_}) && ($_!~/template\_/)) {
my $matches=($_=~/^$pattern(\d+)/);
if (($matches) && ($1)) {
unless ($f{$_}=~/^\!/) {
@@ -913,20 +928,6 @@ sub calc {
return '';
}
-sub templaterow {
- my @cols=();
- $cols[0]='Template';
- foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
- my $fm=$f{'template_'.$_};
- $fm=~s/[\'\"]/\&\#34;/g;
- push(@cols,"'template_$_','$fm'".'___eq___'.$fm);
- }
- return @cols;
-}
-
#
# This is actually used for the student spreadsheet, not the assessment sheet
# Do not be fooled by the name!
@@ -994,175 +995,71 @@ sub exportrowa {
return @exportarray;
}
+sub templaterow {
+ my @cols=();
+ $cols[0]='Template';
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
+ my $fm=$f{'template_'.$_};
+ $fm=~s/[\'\"]/\&\#34;/g;
+ push(@cols,"'template_$_','$fm'".'___eq___'.$fm);
+ }
+ return @cols;
+}
+
+
# ------------------------------------------- End of "Inside of the safe space"
ENDDEFS
$safeeval->reval($code);
return $safeeval;
}
-# ------------------------------------------------ Add or change formula values
+# ------------------------------------------------ Add or change formula values
sub setformulas {
my ($safeeval,%f)=@_;
%{$safeeval->varglob('f')}=%f;
}
# ------------------------------------------------ Add or change formula values
-
sub setconstants {
my ($safeeval,%c)=@_;
%{$safeeval->varglob('c')}=%c;
}
# --------------------------------------------- Set names of other spreadsheets
-
sub setothersheets {
my ($safeeval,@os)=@_;
@{$safeeval->varglob('os')}=@os;
}
# ------------------------------------------------ Add or change formula values
-
sub setrowlabels {
my ($safeeval,%rowlabel)=@_;
%{$safeeval->varglob('rowlabel')}=%rowlabel;
}
# ------------------------------------------------------- Calculate spreadsheet
-
sub calcsheet {
my $safeeval=shift;
return $safeeval->reval('&calc();');
}
-# ------------------------------------------------------------------ Get values
-
-sub getvalues {
- my $safeeval=shift;
- return $safeeval->reval('%sheet_values');
-}
-
# ---------------------------------------------------------------- Get formulas
-
sub getformulas {
my $safeeval=shift;
return %{$safeeval->varglob('f')};
}
# ----------------------------------------------------- Get value of $f{'A'.$n}
-
sub getfa {
my ($safeeval,$n)=@_;
return $safeeval->reval('$f{"A'.$n.'"}');
}
-# -------------------------------------------------------------------- Get type
-
-sub gettype {
- my $safeeval=shift;
- return $safeeval->reval('$sheettype');
-}
-
-# ------------------------------------------------------------------ Set maxrow
-
-sub setmaxrow {
- my ($safeeval,$row)=@_;
- $safeeval->reval('$maxrow='.$row.';');
-}
-
-# ------------------------------------------------------------------ Get maxrow
-
-sub getmaxrow {
- my $safeeval=shift;
- return $safeeval->reval('$maxrow');
-}
-
-# ---------------------------------------------------------------- Set filename
-
-sub setfilename {
- my ($safeeval,$fn)=@_;
- $safeeval->reval('$filename="'.$fn.'";');
-}
-
-# ---------------------------------------------------------------- Get filename
-
-sub getfilename {
- my $safeeval=shift;
- return $safeeval->reval('$filename');
-}
-
-# --------------------------------------------------------------- Get course ID
-
-sub getcid {
- my $safeeval=shift;
- return $safeeval->reval('$cid');
-}
-
-# --------------------------------------------------------- Get course filename
-
-sub getcoursefilename {
- my $safeeval=shift;
- return $safeeval->reval('$coursefilename');
-}
-
-# ----------------------------------------------------------- Get course number
-
-sub getcnum {
- my $safeeval=shift;
- return $safeeval->reval('$cnum');
-}
-
-# ------------------------------------------------------------- Get course home
-
-sub getchome {
- my $safeeval=shift;
- return $safeeval->reval('$chome');
-}
-
-# ----------------------------------------------------------- Get course domain
-
-sub getcdom {
- my $safeeval=shift;
- return $safeeval->reval('$cdom');
-}
-
-# ---------------------------------------------------------- Get course section
-
-sub getcsec {
- my $safeeval=shift;
- return $safeeval->reval('$csec');
-}
-
-# --------------------------------------------------------------- Get user name
-
-sub getuname {
- my $safeeval=shift;
- return $safeeval->reval('$uname');
-}
-
-# ------------------------------------------------------------- Get user domain
-
-sub getudom {
- my $safeeval=shift;
- return $safeeval->reval('$udom');
-}
-
-# --------------------------------------------------------------- Get user home
-
-sub getuhome {
- my $safeeval=shift;
- return $safeeval->reval('$uhome');
-}
-
-# -------------------------------------------------------------------- Get symb
-
-sub getusymb {
- my $safeeval=shift;
- return $safeeval->reval('$usymb');
-}
-
# ------------------------------------------------------------- Export of A-row
-
sub exportdata {
my $safeeval=shift;
return $safeeval->reval('&exportrowa()');
@@ -1178,7 +1075,7 @@ sub exportdata {
# --------------------------------------------- Produce output row n from sheet
sub rown {
- my ($safeeval,$n)=@_;
+ my ($safeeval,$n,$sheetdata)=@_;
my $defaultbg;
my $rowdata='';
my $dataflag=0;
@@ -1195,7 +1092,7 @@ sub rown {
my $showf=0;
my $proc;
my $maxred=1;
- my $sheettype=&gettype($safeeval);
+ my $sheettype=$sheetdata->{'sheettype'};
if ($sheettype eq 'studentcalc') {
$proc='&outrowassess';
$maxred=26;
@@ -1226,8 +1123,14 @@ sub rown {
if ($vl eq '') {
$vl='#';
}
- $rowdata.='
'.
- ''.$vl.' | ';
+ $rowdata.='';
+ if ($ENV{'request.role'} =~ /^st\./) {
+ $rowdata.=$vl;
+ } else {
+ $rowdata.=''.
+ $vl.'';
+ }
+ $rowdata.=' | ';
} else {
$rowdata.=' '.$vl.' | ';
}
@@ -1285,13 +1188,14 @@ sub outsheet {
}
$tabledata.="$_";
}
- $tabledata.=''.&rown($safeeval,'-').&rown($safeeval,0);
+ $tabledata.=''.&rown($safeeval,'-',$sheetdata).
+ &rown($safeeval,0,$sheetdata);
}
$r->print($tabledata);
#
# Prepare to output rows
my $row;
- my $maxrow=&getmaxrow($safeeval);
+ my $maxrow=$sheetdata->{'maxrow'};
#
my @sortby=();
my @sortidx=();
@@ -1299,7 +1203,7 @@ sub outsheet {
push (@sortby, $safeeval->reval('$f{"A'.$row.'"}'));
push (@sortidx, $row-1);
}
- @sortidx=sort { $sortby[$a] cmp $sortby[$b]; } @sortidx;
+ @sortidx=sort { lc($sortby[$a]) cmp lc($sortby[$b]); } @sortidx;
#
# Determine the type of child spreadsheets
my $what='Student';
@@ -1312,7 +1216,7 @@ sub outsheet {
# Loop through the rows and output them one at a time
my $n=0;
for ($row=0;$row<$maxrow;$row++) {
- my $thisrow=&rown($safeeval,$sortidx[$row]+1);
+ my $thisrow=&rown($safeeval,$sortidx[$row]+1,$sheetdata);
if ($thisrow) {
if (($n/25==int($n/25)) && (!$ENV{'form.showcsv'})) {
$r->print("\n
\n");
@@ -1335,11 +1239,11 @@ sub outsheet {
# ----------------------------------------------- Read list of available sheets
#
sub othersheets {
- my ($safeeval,$stype)=@_;
+ my ($safeeval,$stype,$sheetdata)=@_;
#
- my $cnum = &getcnum($safeeval);
- my $cdom = &getcdom($safeeval);
- my $chome = &getchome($safeeval);
+ my $cnum = $sheetdata->{'cnum'};
+ my $cdom = $sheetdata->{'cdom'};
+ my $chome = $sheetdata->{'chome'};
#
my @alternatives=();
my %results=&Apache::lonnet::dump($stype.'_spreadsheets',$cdom,$cnum);
@@ -1409,7 +1313,7 @@ sub readsheet {
}
}
# $fn now has a value
- &setfilename($safeeval,$fn);
+ $sheetdata->{'filename'} = $fn;
# see if sheet is cached
my $fstring='';
if ($fstring=$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}) {
@@ -1461,8 +1365,7 @@ sub makenewsheet {
$sheetdata{'sheettype'} = $stype;
$sheetdata{'usymb'} = $usymb;
$sheetdata{'cid'} = $ENV{'request.course.id'};
- $sheetdata{'csec'} = &Apache::lonnet::usection
- ($udom,$uname,$ENV{'request.course.id'});
+ $sheetdata{'csec'} = $Section{$uname.':'.$udom};
$sheetdata{'coursefilename'} = $ENV{'request.course.fn'};
$sheetdata{'cnum'} = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
$sheetdata{'cdom'} = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
@@ -1470,6 +1373,8 @@ sub makenewsheet {
$sheetdata{'uhome'} = &Apache::lonnet::homeserver($uname,$udom);
my $safeeval=initsheet($stype);
+ #
+ # Place all the %sheetdata items into the safe space
my $initstring = '';
foreach (keys(%sheetdata)) {
$initstring.= qq{\$$_="$sheetdata{$_}";};
@@ -1480,15 +1385,15 @@ sub makenewsheet {
# ------------------------------------------------------------ Save spreadsheet
sub writesheet {
- my ($safeeval,$makedef)=@_;
- my $cid=&getcid($safeeval);
+ my ($safeeval,$makedef,$sheetdata)=@_;
+ my $cid=$sheetdata->{'cid'};
if (&Apache::lonnet::allowed('opa',$cid)) {
my %f=&getformulas($safeeval);
- my $stype=&gettype($safeeval);
- my $cnum=&getcnum($safeeval);
- my $cdom=&getcdom($safeeval);
- my $chome=&getchome($safeeval);
- my $fn=&getfilename($safeeval);
+ my $stype= $sheetdata->{'sheettype'};
+ my $cnum = $sheetdata->{'cnum'};
+ my $cdom = $sheetdata->{'cdom'};
+ my $chome= $sheetdata->{'chome'};
+ my $fn = $sheetdata->{'filename'};
# Cache new sheet
$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}=join('___;___',%f);
# Write sheet
@@ -1531,10 +1436,10 @@ sub writesheet {
# "Modified workcopy" - interactive only
#
sub tmpwrite {
- my $safeeval=shift;
+ my ($safeeval,$sheetdata) = @_;
my $fn=$ENV{'user.name'}.'_'.
- $ENV{'user.domain'}.'_spreadsheet_'.&getusymb($safeeval).'_'.
- &getfilename($safeeval);
+ $ENV{'user.domain'}.'_spreadsheet_'.$sheetdata->{'usymb'}.'_'.
+ $sheetdata->{'filename'};
$fn=~s/\W/\_/g;
$fn=$tmpdir.$fn.'.tmp';
my $fh;
@@ -1545,10 +1450,10 @@ sub tmpwrite {
# ---------------------------------------------------------- Read the temp copy
sub tmpread {
- my ($safeeval,$nfield,$nform)=@_;
+ my ($safeeval,$sheetdata,$nfield,$nform)=@_;
my $fn=$ENV{'user.name'}.'_'.
- $ENV{'user.domain'}.'_spreadsheet_'.&getusymb($safeeval).'_'.
- &getfilename($safeeval);
+ $ENV{'user.domain'}.'_spreadsheet_'.$sheetdata->{'usymb'}.'_'.
+ $sheetdata->{'filename'};
$fn=~s/\W/\_/g;
$fn=$tmpdir.$fn.'.tmp';
my $fh;
@@ -1640,24 +1545,24 @@ sub parmval {
my $courselevelr = $usercourseprefix.'.'.$symbparm;
my $courselevelm = $usercourseprefix.'.'.$mapparm;
# fourth, check user
- if ($uname) {
- return $useropt{$courselevelr} if ($useropt{$courselevelr});
- return $useropt{$courselevelm} if ($useropt{$courselevelm});
- return $useropt{$courselevel} if ($useropt{$courselevel});
+ if (defined($uname)) {
+ return $useropt{$courselevelr} if (defined($useropt{$courselevelr}));
+ return $useropt{$courselevelm} if (defined($useropt{$courselevelm}));
+ return $useropt{$courselevel} if (defined($useropt{$courselevel}));
}
# third, check course
- if ($csec) {
- return $courseopt{$seclevelr} if ($courseopt{$seclevelr});
- return $courseopt{$seclevelm} if ($courseopt{$seclevelm});
- return $courseopt{$seclevel} if ($courseopt{$seclevel});
+ if (defined($csec)) {
+ return $courseopt{$seclevelr} if (defined($courseopt{$seclevelr}));
+ return $courseopt{$seclevelm} if (defined($courseopt{$seclevelm}));
+ return $courseopt{$seclevel} if (defined($courseopt{$seclevel}));
}
#
- return $courseopt{$courselevelr} if ($courseopt{$courselevelr});
- return $courseopt{$courselevelm} if ($courseopt{$courselevelm});
- return $courseopt{$courselevel} if ($courseopt{$courselevel});
+ return $courseopt{$courselevelr} if (defined($courseopt{$courselevelr}));
+ return $courseopt{$courselevelm} if (defined($courseopt{$courselevelm}));
+ return $courseopt{$courselevel} if (defined($courseopt{$courselevel}));
# second, check map parms
my $thisparm = $parmhash{$symbparm};
- return $thisparm if ($thisparm);
+ return $thisparm if (defined($thisparm));
# first, check default
return &Apache::lonnet::metadata($fn,$rwhat.'.default');
}
@@ -1670,66 +1575,33 @@ sub updateclasssheet {
my $cid =$sheetdata->{'cid'};
my $chome =$sheetdata->{'chome'};
#
+ %Section = ();
+
+ #
# Read class list and row labels
- my %classlist;
- my @tmp = &Apache::lonnet::dump('classlist',$cdom,$cnum);
- if ($tmp[0] !~ /^error/) {
- %classlist = @tmp;
- } else {
- return 'Could not access course data';
- }
- undef @tmp;
+ my $classlist = &Apache::loncoursedata::get_classlist();
+ if (! defined($classlist)) {
+ return 'Could not access course classlist';
+ }
#
my %currentlist=();
- my $now=time;
- foreach my $student (keys(%classlist)) {
- my ($end,$start)=split(/\:/,$classlist{$student});
- my $active=1;
- $active = 0 if (($end) && ($now>$end));
- $active = 1 if ($ENV{'form.Status'} eq 'Any');
- $active = !$active if ($ENV{'form.Status'} eq 'Expired');
- if ($active) {
+ foreach my $student (keys(%$classlist)) {
+ my ($studentDomain,$studentName,$end,$start,$id,$studentSection,
+ $fullname,$status) = @{$classlist->{$student}};
+ if ($ENV{'form.Status'} eq $status || $ENV{'form.Status'} eq 'Any') {
my $rowlabel='';
- my ($studentName,$studentDomain)=split(/\:/,$student);
- my $studentSection=&Apache::lonnet::usection($studentDomain,
- $studentName,$cid);
-# if ($studentSection==-1) {
-# unless ($ENV{'form.showcsv'}) {
-# $rowlabel='Data not available: '.
-# $studentName.'';
-# } else {
-# $rowlabel='ERROR","'.$studentName.
-# '","Data not available","","","';
-# }
-# } else {
- my %reply=&Apache::lonnet::idrget($studentDomain,$studentName);
- my %studentInformation=&Apache::lonnet::get
- ('environment',
- ['lastname','generation','firstname','middlename','id'],
- $studentDomain,$studentName);
- if (! $ENV{'form.showcsv'}) {
- $rowlabel=''.
- $studentSection.' ';
- foreach ('id','firstname','middlename',
- 'lastname','generation'){
- $rowlabel.=$studentInformation{$_}." ";
- }
- $rowlabel.='';
- } else {
- $rowlabel= '"'.join('","',
- ($studentSection,
- $studentInformation{'id'},
- $studentInformation{'firstname'},
- $studentInformation{'middlename'},
- $studentInformation{'lastname'},
- $studentInformation{'generation'})
- ).'"';
- }
- # }
+ if ($ENV{'form.showcsv'}) {
+ $rowlabel= '"'.join('","',($studentName,$studentDomain,
+ $fullname,$studentSection,$id).'"');
+ } else {
+ $rowlabel='';
+ $rowlabel.=$studentSection.' '.$id." ".$fullname;
+ $rowlabel.='';
+ }
$currentlist{$student}=$rowlabel;
- } # end of if ($active)
- } # end of foreach my $student (keys(%classlist))
+ }
+ }
#
# Find discrepancies between the course row table and this
#
@@ -1762,7 +1634,7 @@ sub updateclasssheet {
}
if ($changed) { &setformulas($safeeval,%f); }
#
- &setmaxrow($safeeval,$maxrow);
+ $sheetdata->{'maxrow'} = $maxrow;
&setrowlabels($safeeval,%currentlist);
}
@@ -1883,7 +1755,7 @@ sub updatestudentassesssheet {
}
}
if ($changed) { &setformulas($safeeval,%f); }
- &setmaxrow($safeeval,$maxrow);
+ $sheetdata->{'maxrow'} = $maxrow;
&setrowlabels($safeeval,%current);
#
undef %current;
@@ -2048,10 +1920,9 @@ sub loadassessment {
# This is dumb. It is also necessary :(
my @oldkeys=keys %returnhash;
#
- foreach (@oldkeys) {
- my $name=$_;
- my $value=$returnhash{$_};
- delete $returnhash{$_};
+ foreach my $name (@oldkeys) {
+ my $value=$returnhash{$name};
+ delete $returnhash{$name};
$name=~s/\_/\./g;
$returnhash{$name}=$value;
}
@@ -2060,35 +1931,28 @@ sub loadassessment {
undef %useropt;
my $userprefix=$uname.'_'.$udom.'_';
-
+
unless ($uhome eq 'no_host') {
# Get coursedata
unless ((time-$courserdatas{$cid.'.last_cache'})<240) {
- my $reply=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum.
- ':resourcedata',$chome);
- if ($reply!~/^error\:/) {
- $courserdatas{$cid}=$reply;
- $courserdatas{$cid.'.last_cache'}=time;
- }
+ my %Tmp = &Apache::lonnet::dump('resourcedata',$cdom,$cnum);
+ $courserdatas{$cid}=\%Tmp;
+ $courserdatas{$cid.'.last_cache'}=time;
}
- foreach (split(/\&/,$courserdatas{$cid})) {
- my ($name,$value)=split(/\=/,$_);
- $courseopt{$userprefix.&Apache::lonnet::unescape($name)}=
- &Apache::lonnet::unescape($value);
+ while (my ($name,$value) = each(%{$courserdatas{$cid}})) {
+ $courseopt{$userprefix.$name}=$value;
}
# Get userdata (if present)
- unless ((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<240) {
- my $reply=
- &Apache::lonnet::reply('dump:'.$udom.':'.$uname.':resourcedata',$uhome);
- if ($reply!~/^error\:/) {
- $userrdatas{$uname.'___'.$udom}=$reply;
- $userrdatas{$uname.'___'.$udom.'.last_cache'}=time;
- }
+ unless ((time-$userrdatas{$uname.'@'.$udom.'.last_cache'})<240) {
+ my %Tmp = &Apache::lonnet::dump('resourcedata',$udom,$uname);
+ $userrdatas{$cid} = \%Tmp;
+ # Most of the time the user does not have a 'resourcedata.db'
+ # file. We need to cache that we got nothing instead of bothering
+ # with requesting it every time.
+ $userrdatas{$uname.'@'.$udom.'.last_cache'}=time;
}
- foreach (split(/\&/,$userrdatas{$uname.'___'.$udom})) {
- my ($name,$value)=split(/\=/,$_);
- $useropt{$userprefix.&Apache::lonnet::unescape($name)}=
- &Apache::lonnet::unescape($value);
+ while (my ($name,$value) = each(%{$userrdatas{$cid}})) {
+ $useropt{$userprefix.$name}=$value;
}
}
# now courseopt, useropt initialized for this user and course
@@ -2106,7 +1970,7 @@ sub loadassessment {
#
my %c=();
if (tie(%parmhash,'GDBM_File',
- &getcoursefilename($safeeval).'_parms.db',&GDBM_READER(),0640)) {
+ $sheetdata->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) {
my %f=&getformulas($safeeval);
foreach (keys(%f)) {
next if ($_!~/^A/);
@@ -2275,8 +2139,8 @@ sub exportsheet {
&readsheet($thissheet,$sheetdata,$fn);
&updatesheet($thissheet,$sheetdata);
&loadrows($thissheet,$sheetdata);
- &calcsheet($thissheet,$sheetdata);
- @exportarr=&exportdata($thissheet,$sheetdata);
+ &calcsheet($thissheet);
+ @exportarr=&exportdata($thissheet);
#
# Store now
#
@@ -2412,10 +2276,20 @@ sub cachedssheets {
# Interactive call to screen
#
#
-
-
sub handler {
my $r=shift;
+
+ if (! exists($ENV{'form.Status'})) {
+ $ENV{'form.Status'} = 'Active';
+ }
+ # Check this server
+ my $loaderror=&Apache::lonnet::overloaderror($r);
+ if ($loaderror) { return $loaderror; }
+ # Check the course homeserver
+ $loaderror= &Apache::lonnet::overloaderror($r,
+ $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+ if ($loaderror) { return $loaderror; }
+
if ($r->header_only) {
$r->content_type('text/html');
$r->send_http_header;
@@ -2434,6 +2308,10 @@ sub handler {
# Get query string for limited number of parameters
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['uname','udom','usymb','ufn']);
+ if ($ENV{'request.role'} =~ /^st\./) {
+ delete $ENV{'form.unewfield'} if (exists($ENV{'form.unewfield'}));
+ delete $ENV{'form.unewformula'} if (exists($ENV{'form.unewformula'}));
+ }
if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) {
$ENV{'form.ufn'}='default_'.$1;
}
@@ -2460,7 +2338,8 @@ sub handler {
$r->send_http_header;
# Screen output
$r->print('LON-CAPA Spreadsheet');
- $r->print(<print(<
function celledit(cn,cf) {
@@ -2486,6 +2365,7 @@ sub handler {
ENDSCRIPT
+ }
$r->print(''.&Apache::loncommon::bodytag('Grades Spreadsheet').
'