--- loncom/interface/Attic/lonspreadsheet.pm 2001/03/21 15:38:47 1.51 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/07/20 02:05:33 1.55 @@ -5,7 +5,8 @@ # 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 Gerd Kortemeyer +# 03/19,03/20,03/21,03/27,04/05,04/09, +# 07/09,07/14 Gerd Kortemeyer package Apache::lonspreadsheet; @@ -77,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=''; @@ -397,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'; } @@ -460,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 { @@ -508,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 @@ -600,6 +630,7 @@ sub exportdata { return $safeeval->reval('&exportrowa()'); } + # ========================================================== End of Spreadsheet # ============================================================================= @@ -638,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; } @@ -716,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 # @@ -844,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) { @@ -902,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); } @@ -1093,7 +1158,8 @@ sub updatestudentassesssheet { &GDBM_READER,0640)) { # --------------------------------------------------------- Get all assessments - my %allkeys=(); + my %allkeys=('timestamp' => + 'Timestamp of Last Transaction
timestamp'); my %allassess=(); my $adduserstr=''; @@ -1222,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]) { @@ -1506,6 +1573,7 @@ sub forcedrecalc { my ($uname,$udom,$stype,$usymb)=@_; my $key=$uname.':'.$udom.':'.$stype.':'.$usymb; my $time=$oldsheets{$key.'.time'}; + if ($ENV{'form.forcerecalc'}) { return 1; } unless ($time) { return 1; } if ($stype eq 'assesscalc') { my $map=(split(/\_\_\_/,$usymb))[0]; @@ -1758,6 +1826,10 @@ $tmpdir=$r->dir_config('lonDaemons').'/t } } (split(/&/,$ENV{'QUERY_STRING'})); +# -------------------------------------- Interactive loading of specific sheet? + if (($ENV{'form.load'}) && ($ENV{'form.loadthissheet'} ne 'Default')) { + $ENV{'form.ufn'}=$ENV{'form.loadthissheet'}; + } # ------------------------------------------- Nothing there? Must be login user my $aname; @@ -1793,6 +1865,12 @@ $tmpdir=$r->dir_config('lonDaemons').'/t } } + function changesheet(cn) { + document.sheet.unewfield.value=cn; + document.sheet.unewformula.value='changesheet'; + document.sheet.submit(); + } + ENDSCRIPT $r->print(''. @@ -1809,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+)$/; @@ -1851,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 @@ -1873,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 @@ -1887,6 +2008,24 @@ 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();