--- loncom/interface/Attic/lonspreadsheet.pm 2002/09/01 18:06:52 1.106 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/09/16 20:09:45 1.110 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.106 2002/09/01 18:06:52 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.110 2002/09/16 20:09:45 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,16 +26,6 @@ # The LearningOnline Network with CAPA # Spreadsheet/Grades Display Handler # -# 11/11,11/15,11/27,12/04,12/05,12/06,12/07, -# 12/08,12/09,12/11,12/12,12/15,12/16,12/18,12/19,12/30, -# 01/01/01,02/01,03/01,19/01,20/01,22/01, -# 03/05,03/08,03/10,03/12,03/13,03/15,03/17, -# 03/19,03/20,03/21,03/27,04/05,04/09, -# 07/09,07/14,07/21,09/01,09/10,9/11,9/12,9/13,9/14,9/17, -# 10/16,10/17,10/20,11/05,11/28,12/27 Gerd Kortemeyer -# 01/14/02 Matthew -# 02/04/02 Matthew - # POD required stuff: =head1 NAME @@ -54,7 +44,6 @@ not the grades of their peers. The spre offering the ability to use Perl code to manipulate data, as well as many built-in functions. - =head2 Functions available to user of lonspreadsheet =over 4 @@ -167,7 +156,7 @@ $chome= ''; $cnum = ''; $cdom = ''; $cid = ''; -$cfn = ''; +$coursefilename = ''; # symb @@ -1111,9 +1100,9 @@ sub getcid { # --------------------------------------------------------- Get course filename -sub getcfn { +sub getcoursefilename { my $safeeval=shift; - return $safeeval->reval('$cfn'); + return $safeeval->reval('$coursefilename'); } # ----------------------------------------------------------- Get course number @@ -1393,14 +1382,14 @@ sub parse_sheet { # # -------------------------------------- Read spreadsheet formulas for a course # - sub readsheet { - my ($safeeval,$fn)=@_; - my $stype = &gettype($safeeval); - my $cnum = &getcnum($safeeval); - my $cdom = &getcdom($safeeval); - my $chome = &getchome($safeeval); - + my ($safeeval,$sheetdata,$fn)=@_; + # + my $stype = $sheetdata->{'sheettype'}; + my $cnum = $sheetdata->{'cnum'}; + my $cdom = $sheetdata->{'cdom'}; + my $chome = $sheetdata->{'chome'}; + # if (! defined($fn)) { # There is no filename. Look for defaults in course and global, cache unless ($fn=$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}) { @@ -1464,7 +1453,6 @@ sub readsheet { } # -------------------------------------------------------- Make new spreadsheet - sub makenewsheet { my ($uname,$udom,$stype,$usymb)=@_; my %sheetdata=(); @@ -1475,7 +1463,7 @@ sub makenewsheet { $sheetdata{'cid'} = $ENV{'request.course.id'}; $sheetdata{'csec'} = &Apache::lonnet::usection ($udom,$uname,$ENV{'request.course.id'}); - $sheetdata{'cfn'} = $ENV{'request.course.fn'}; + $sheetdata{'coursefilename'} = $ENV{'request.course.fn'}; $sheetdata{'cnum'} = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; $sheetdata{'cdom'} = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; $sheetdata{'chome'} = $ENV{'course.'.$ENV{'request.course.id'}.'.home'}; @@ -1491,7 +1479,6 @@ sub makenewsheet { } # ------------------------------------------------------------ Save spreadsheet - sub writesheet { my ($safeeval,$makedef)=@_; my $cid=&getcid($safeeval); @@ -1543,7 +1530,6 @@ sub writesheet { # ----------------------------------------------- Make a temp copy of the sheet # "Modified workcopy" - interactive only # - sub tmpwrite { my $safeeval=shift; my $fn=$ENV{'user.name'}.'_'. @@ -1558,7 +1544,6 @@ sub tmpwrite { } # ---------------------------------------------------------- Read the temp copy - sub tmpread { my ($safeeval,$nfield,$nform)=@_; my $fn=$ENV{'user.name'}.'_'. @@ -1679,11 +1664,11 @@ sub parmval { # ---------------------------------------------- Update rows for course listing sub updateclasssheet { - my $safeeval=shift; - my $cnum=&getcnum($safeeval); - my $cdom=&getcdom($safeeval); - my $cid=&getcid($safeeval); - my $chome=&getchome($safeeval); + my ($safeeval,$sheetdata) = @_; + my $cnum =$sheetdata->{'cnum'}; + my $cdom =$sheetdata->{'cdom'}; + my $cid =$sheetdata->{'cid'}; + my $chome =$sheetdata->{'chome'}; # # Read class list and row labels my %classlist; @@ -1708,15 +1693,15 @@ sub updateclasssheet { 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 { +# 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', @@ -1741,7 +1726,7 @@ sub updateclasssheet { $studentInformation{'generation'}) ).'"'; } - } + # } $currentlist{$student}=$rowlabel; } # end of if ($active) } # end of foreach my $student (keys(%classlist)) @@ -1783,13 +1768,17 @@ sub updateclasssheet { # ----------------------------------- Update rows for student and assess sheets sub updatestudentassesssheet { - my $safeeval=shift; + my ($safeeval,$sheetdata) = @_; my %bighash; - my $stype=&gettype($safeeval); + my $stype=$sheetdata->{'sheettype'}; + my $uname=$sheetdata->{'uname'}; + my $udom =$sheetdata->{'udom'}; my %current=(); - if ($updatedata{$ENV{'request.course.fn'}.'_'.$stype}) { + if ($updatedata + {$ENV{'request.course.fn'}.'_'.$stype.'_'.$uname.'_'.$udom}) { %current=split(/\_\_\_\;\_\_\_/, - $updatedata{$ENV{'request.course.fn'}.'_'.$stype}); + $updatedata{$ENV{'request.course.fn'}. + '_'.$stype.'_'.$uname.'_'.$udom}); } else { # Tie hash tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', @@ -1807,10 +1796,8 @@ sub updatestudentassesssheet { 'totalpoints' => 'Total Points Granted
totalpoints'); my $adduserstr=''; - if ((&getuname($safeeval) ne $ENV{'user.name'}) || - (&getudom($safeeval) ne $ENV{'user.domain'})) { - $adduserstr='&uname='.&getuname($safeeval). - '&udom='.&getudom($safeeval); + if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})){ + $adduserstr='&uname='.$uname.'&udom='.$udom; } my %allassess = ('_feedback' =>'Discussion' ); - foreach (keys(%bighash)) { + while (($_,undef) = each(%bighash)) { next if ($_!~/^src\_(\d+)\.(\d+)$/); my $mapid=$1; my $resid=$2; @@ -1861,7 +1848,7 @@ sub updatestudentassesssheet { } elsif ($stype eq 'studentcalc') { %current=%allassess; } - $updatedata{$ENV{'request.course.fn'}.'_'.$stype}= + $updatedata{$ENV{'request.course.fn'}.'_'.$stype.'_'.$uname.'_'.$udom}= join('___;___',%current); # Get current from cache } @@ -1953,7 +1940,7 @@ sub loadstudent { } # --------------------------------------------------- Load data for one student - +# sub loadcourse { my ($safeeval,$sheetdata,$r)=@_; my %c=(); @@ -2015,7 +2002,7 @@ ENDPOP } # ------------------------------------------------ Load data for one assessment - +# sub loadassessment { my ($safeeval,$sheetdata)=@_; @@ -2047,26 +2034,20 @@ sub loadassessment { # # restore individual # - my $answer=&Apache::lonnet::reply( - "restore:$udom:$uname:". - &Apache::lonnet::escape($namespace).":". - &Apache::lonnet::escape($symb),$uhome); - foreach (split(/\&/,$answer)) { - my ($name,$value)=split(/\=/,$_); - $returnhash{&Apache::lonnet::unescape($name)}= - &Apache::lonnet::unescape($value); - } - my $version; - for ($version=1;$version<=$returnhash{'version'};$version++) { + %returnhash = &Apache::lonnet::restore($symb,$namespace,$udom,$uname); + for (my $version=1;$version<=$returnhash{'version'};$version++) { foreach (split(/\:/,$returnhash{$version.':keys'})) { $returnhash{$_}=$returnhash{$version.':'.$_}; } } } + # # returnhash now has all stores for this resource # convert all "_" to "." to be able to use libraries, multiparts, etc + # + # This is dumb. It is also necessary :( my @oldkeys=keys %returnhash; - + # foreach (@oldkeys) { my $name=$_; my $value=$returnhash{$_}; @@ -2096,15 +2077,14 @@ sub loadassessment { &Apache::lonnet::unescape($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 $reply= + &Apache::lonnet::reply('dump:'.$udom.':'.$uname.':resourcedata',$uhome); + if ($reply!~/^error\:/) { + $userrdatas{$uname.'___'.$udom}=$reply; + $userrdatas{$uname.'___'.$udom.'.last_cache'}=time; } + } foreach (split(/\&/,$userrdatas{$uname.'___'.$udom})) { my ($name,$value)=split(/\=/,$_); $useropt{$userprefix.&Apache::lonnet::unescape($name)}= @@ -2126,7 +2106,7 @@ sub loadassessment { # my %c=(); if (tie(%parmhash,'GDBM_File', - &getcfn($safeeval).'_parms.db',&GDBM_READER(),0640)) { + &getcoursefilename($safeeval).'_parms.db',&GDBM_READER(),0640)) { my %f=&getformulas($safeeval); foreach (keys(%f)) { next if ($_!~/^A/); @@ -2184,9 +2164,9 @@ sub updatesheet { my ($safeeval,$sheetdata)=@_; my $stype=$sheetdata->{'sheettype'}; if ($stype eq 'classcalc') { - return &updateclasssheet($safeeval); + return &updateclasssheet($safeeval,$sheetdata); } else { - return &updatestudentassesssheet($safeeval); + return &updatestudentassesssheet($safeeval,$sheetdata); } } @@ -2292,7 +2272,7 @@ sub exportsheet { # Not cached # my ($thissheet,$sheetdata)=&makenewsheet($uname,$udom,$stype,$usymb); - &readsheet($thissheet,$fn); + &readsheet($thissheet,$sheetdata,$fn); &updatesheet($thissheet,$sheetdata); &loadrows($thissheet,$sheetdata); &calcsheet($thissheet,$sheetdata); @@ -2436,6 +2416,14 @@ sub cachedssheets { sub handler { my $r=shift; + + my $loaderror=&Apache::lonnet::overloaderror($r); + if ($loaderror) { return $loaderror; } + $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; @@ -2540,18 +2528,18 @@ ENDSCRIPT &setfilename($asheet,$ENV{'form.ufn'}); &tmpread($asheet); } else { - &readsheet($asheet,$ENV{'form.ufn'}); + &readsheet($asheet,$asheetdata,$ENV{'form.ufn'}); } # Print out user information unless ($asheetdata->{'sheettype'} eq 'classcalc') { $r->print('

User: '.$asheetdata->{'uname'}. '
Domain: '.$asheetdata->{'udom'}); - if (&getcsec($asheet) eq '-1') { - $r->print('

'. - 'Not a student in this course

'); - } else { +# if (&getcsec($asheet) eq '-1') { +# $r->print('

'. +# 'Not a student in this course

'); +# } else { $r->print('
Section/Group: '.$asheetdata->{'csec'}); - } +# } if ($ENV{'form.usymb'}) { $r->print('
Assessment: '. $ENV{'form.usymb'}.''); @@ -2607,7 +2595,7 @@ ENDSCRIPT $r->print('>'.$_.''); } $r->print('

'); - if (&gettype($asheet) eq 'studentcalc') { + if ($asheetdata->{'sheettype'} eq 'studentcalc') { &setothersheets($asheet,&othersheets($asheet,'assesscalc')); } }