--- loncom/interface/Attic/lonspreadsheet.pm 2001/03/17 20:43:57 1.46 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/07/20 02:05:33 1.55 @@ -4,7 +4,9 @@ # 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 Gerd Kortemeyer +# 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 Gerd Kortemeyer package Apache::lonspreadsheet; @@ -23,6 +25,7 @@ use HTML::TokeParser; my %oldsheets; my %loadedcaches; +my %expiredates; # # Cache for stores of an individual user @@ -75,12 +78,17 @@ sub initsheet { # v: output values # c: preloaded constants (A-column) # rl: row label +# os: other spreadsheets (for student spreadsheet only) undef %v; undef %t; undef %f; undef %c; undef %rl; +undef @os; + + undef $nfield; + undef $nsheet; $maxrow=0; $sheettype=''; @@ -395,7 +403,18 @@ sub outrowassess { my $n=shift; my @cols=(); if ($n) { - $cols[0]=$rl{$f{'A'.$n}}; + my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{'A'.$n}); + $cols[0]=$rl{$f{'A'.$n}}.'
'. + ''; } else { $cols[0]='Export'; } @@ -458,6 +477,13 @@ sub setconstants { %{$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 { @@ -506,6 +532,12 @@ sub getmaxrow { my $safeeval=shift; return $safeeval->reval('$maxrow'); } +# -------------------------------------------- Store which sheet needs changing + +sub changesheet { + my ($safeeval,$nfield,$nsheet)=@_; + $safeeval->reval('$nfield='.$nfield.'; $nsheet='.$nsheet.';'); +} # ---------------------------------------------------------------- Set filename @@ -598,6 +630,7 @@ sub exportdata { return $safeeval->reval('&exportrowa()'); } + # ========================================================== End of Spreadsheet # ============================================================================= @@ -636,11 +669,15 @@ sub rown { my $showf=0; my $proc; my $maxred; - if (&gettype($safeeval) eq 'assesscalc') { + if (&gettype($safeeval) eq 'studentcalc') { $proc='&outrowassess'; - $maxred=1; + $maxred=26; } else { $proc='&outrow'; + } + if (&gettype($safeeval) eq 'assesscalc') { + $maxred=1; + } else { $maxred=26; } if ($n eq '-') { $proc='&templaterow'; $n=-1; } @@ -714,6 +751,29 @@ sub outsheet { } # +# ----------------------------------------------- Read list of available sheets +# + +sub othersheets { + my ($safeeval,$stype)=@_; + + my $cnum=&getcnum($safeeval); + my $cdom=&getcdom($safeeval); + my $chome=&getchome($safeeval); + + my @alternatives=(); + my $result=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum.':'. + $stype.'_spreadsheets',$chome); + if ($result!~/^error\:/) { + map { + $alternatives[$#alternatives+1]= + &Apache::lonnet::unescape((split(/\=/,$_))[0]); + } split(/\&/,$result); + } + return @alternatives; +} + +# # -------------------------------------- Read spreadsheet formulas for a course # @@ -842,7 +902,8 @@ sub writesheet { if ($reply eq 'ok') { $reply=&Apache::lonnet::reply('put:'.$cdom.':'.$cnum.':'. $stype.'_spreadsheets:'. - &Apache::lonnet::escape($fn).'='.$ENV{'user.name'}, + &Apache::lonnet::escape($fn).'='.$ENV{'user.name'}.'@'. + $ENV{'user.domain'}, $chome); if ($reply eq 'ok') { if ($makedef) { @@ -900,7 +961,13 @@ sub tmpread { $fo{$name}=$value; } } - if ($nfield) { $fo{$nfield}=$nform; } + if ($nform eq 'changesheet') { + unless ($ENV{'form.sel_'.$nfield} eq 'Default') { + &changesheet($safeeval,$nfield,$ENV{'form.sel_'.$nfield}); + } + } else { + if ($nfield) { $fo{$nfield}=$nform; } + } &setformulas($safeeval,%fo); } @@ -1091,9 +1158,17 @@ sub updatestudentassesssheet { &GDBM_READER,0640)) { # --------------------------------------------------------- Get all assessments - my %allkeys=(); + my %allkeys=('timestamp' => + 'Timestamp of Last Transaction
timestamp'); my %allassess=(); + my $adduserstr=''; + if ((&getuname($safeeval) ne $ENV{'user.name'}) || + (&getudom($safeeval) ne $ENV{'user.domain'})) { + $adduserstr='&uname='.&getuname($safeeval). + '&udom='.&getudom($safeeval); + } + map { if ($_=~/^src\_(\d+)\.(\d+)$/) { my $mapid=$1; @@ -1106,7 +1181,8 @@ sub updatestudentassesssheet { '___'.$resid.'___'. &Apache::lonnet::declutter($srcf); $allassess{$symb}= - ''.$bighash{'title_'.$id}.''; + ''. + $bighash{'title_'.$id}.''; if ($stype eq 'assesscalc') { map { if (($_=~/^stores\_(.*)/) || ($_=~/^parameter\_(.*)/)) { @@ -1212,9 +1288,10 @@ sub loadstudent { if ($_=~/^A(\d+)/) { my $row=$1; unless (($f{$_}=~/^\!/) || ($row==0)) { + my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_}); @assessdata=&exportsheet(&getuname($safeeval), &getudom($safeeval), - 'assesscalc',$f{$_}); + 'assesscalc',$usy,$ufn); my $index=0; map { if ($assessdata[$index]) { @@ -1258,7 +1335,7 @@ sub loadcourse { ENDSCRIPT $r->print(''. @@ -1737,6 +1887,18 @@ ENDSCRIPT $r->rflush(); +# ---------------------------------------------------------------- Full recalc? + + + if ($ENV{'form.forcerecalc'}) { + $r->print('

Completely Recalculating Sheet ...

'); + undef %spreadsheets; + undef %courserdatas; + undef %userrdatas; + undef %defaultsheets; + undef %updatedata; + } + # ---------------------------------------- Read new sheet or modified worksheet $r->uri=~/\/(\w+)$/; @@ -1779,6 +1941,17 @@ ENDSCRIPT $r->print('

'. $ENV{'course.'.$ENV{'request.course.id'}.'.description'}.'

'); +# ---------------------------------------------------- See if user can see this + + if ((&gettype($asheet) eq 'classcalc') || + (&getuname($asheet) ne $ENV{'user.name'}) || + (&getudom($asheet) ne $ENV{'user.domain'})) { + unless (&Apache::lonnet::allowed('vgr',&getcid($asheet))) { + $r->print( + '

Access Permission Denied

'); + return OK; + } + } # ---------------------------------------------------- See if something to save @@ -1801,6 +1974,26 @@ ENDSCRIPT &tmpwrite($asheet); +# ---------------------------------------------------------- Additional options + + $r->print( + '

' + ); + if (&gettype($asheet) eq 'assesscalc') { + $r->print ('

Level up: Student Sheet

'); + } + + if ((&gettype($asheet) eq 'studentcalc') && + (&Apache::lonnet::allowed('vgr',&getcid($asheet)))) { + $r->print ( + '

'. + 'Level up: Course Sheet

'); + } + + # ----------------------------------------------------------------- Save dialog @@ -1815,8 +2008,28 @@ ENDSCRIPT $r->print(&hiddenfield('ufn',&getfilename($asheet))); +# ----------------------------------------------------------------- Load dialog + if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { + $r->print('

'. + '

'); + if (&gettype($asheet) eq 'studentcalc') { + &setothersheets($asheet,&othersheets($asheet,'assesscalc')); + } + } + # --------------------------------------------------------------- Cached sheets + &expirationdates(); + undef %oldsheets; undef %loadedcaches;