--- loncom/interface/Attic/lonspreadsheet.pm 2002/08/30 19:47:47 1.104 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/08/30 20:56:08 1.105 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.104 2002/08/30 19:47:47 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.105 2002/08/30 20:56:08 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1461,21 +1461,27 @@ sub readsheet { sub makenewsheet { my ($uname,$udom,$stype,$usymb)=@_; + my %sheetdata=(); + $sheetdata{'uname'} = $uname; + $sheetdata{'udom'} = $udom; + $sheetdata{'sheettype'} = $stype; + $sheetdata{'usymb'} = $usymb; + $sheetdata{'cid'} = $ENV{'request.course.id'}; + $sheetdata{'csec'} = &Apache::lonnet::usection + ($udom,$uname,$ENV{'request.course.id'}); + $sheetdata{'cfn'} = $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'}; + $sheetdata{'uhome'} = &Apache::lonnet::homeserver($uname,$udom); + my $safeeval=initsheet($stype); - $safeeval->reval( - '$uname="'.$uname. - '";$udom="'.$udom. - '";$uhome="'.&Apache::lonnet::homeserver($uname,$udom). - '";$sheettype="'.$stype. - '";$usymb="'.$usymb. - '";$csec="'.&Apache::lonnet::usection($udom,$uname, - $ENV{'request.course.id'}). - '";$cid="'.$ENV{'request.course.id'}. - '";$cfn="'.$ENV{'request.course.fn'}. - '";$cnum="'.$ENV{'course.'.$ENV{'request.course.id'}.'.num'}. - '";$cdom="'.$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}. - '";$chome="'.$ENV{'course.'.$ENV{'request.course.id'}.'.home'}.'";'); - return $safeeval; + my $initstring = ''; + foreach (keys(%sheetdata)) { + $initstring.= qq{\$$_="$sheetdata{$_}";}; + } + $safeeval->reval($initstring); + return $safeeval,\%sheetdata; } # ------------------------------------------------------------ Save spreadsheet @@ -1615,14 +1621,14 @@ this user and course. ################################################## ################################################## sub parmval { - my ($what,$safeeval)=@_; - my $symb = &getusymb($safeeval); + my ($what,$safeeval,$sheetdata)=@_; + my $symb = $sheetdata->{'usymb'}; unless ($symb) { return ''; } # - my $cid = &getcid($safeeval); - my $csec = &getcsec($safeeval); - my $uname = &getuname($safeeval); - my $udom = &getudom($safeeval); + my $cid = $sheetdata->{'cid'}; + my $csec = $sheetdata->{'csec'}; + my $uname = $sheetdata->{'uname'}; + my $udom = $sheetdata->{'udom'}; my $result=''; # my ($mapname,$id,$fn)=split(/\_\_\_/,$symb); @@ -1646,18 +1652,18 @@ sub parmval { if ($uname) { return $useropt{$courselevelr} if ($useropt{$courselevelr}); return $useropt{$courselevelm} if ($useropt{$courselevelm}); - return $useropt{$courselevel} if ($useropt{$courselevel}); + return $useropt{$courselevel} if ($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}); + return $courseopt{$seclevel} if ($courseopt{$seclevel}); } # return $courseopt{$courselevelr} if ($courseopt{$courselevelr}); return $courseopt{$courselevelm} if ($courseopt{$courselevelm}); - return $courseopt{$courselevel} if ($courseopt{$courselevel}); + return $courseopt{$courselevel} if ($courseopt{$courselevel}); # second, check map parms my $thisparm = $parmhash{$symbparm}; return $thisparm if ($thisparm); @@ -1894,14 +1900,14 @@ sub updatestudentassesssheet { # ------------------------------------------------ Load data for one assessment sub loadstudent { - my $safeeval=shift; + my ($safeeval,$sheetdata)=@_; my %c=(); my %f=&getformulas($safeeval); - $cachedassess=&getuname($safeeval).':'.&getudom($safeeval); + $cachedassess=$sheetdata->{'uname'}.':'.$sheetdata->{'udom'}; # Get ALL the student preformance data - my @tmp = &Apache::lonnet::dump(&getcid($safeeval), - &getudom($safeeval), - &getuname($safeeval), + my @tmp = &Apache::lonnet::dump($sheetdata->{'cid'}, + $sheetdata->{'udom'}, + $sheetdata->{'uname'}, undef); if ($tmp[0] !~ /^error:/) { %cachedstores = @tmp; @@ -1914,8 +1920,8 @@ sub loadstudent { my $row=$1; next if (($f{$_}=~/^[\!\~\-]/) || ($row==0)); my ($usy,$ufn)=split(/__&&&\__/,$f{$_}); - @assessdata=&exportsheet(&getuname($safeeval), - &getudom($safeeval), + @assessdata=&exportsheet($sheetdata->{'uname'}, + $sheetdata->{'udom'}, 'assesscalc',$usy,$ufn); my $index=0; foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M', @@ -1943,7 +1949,7 @@ sub loadstudent { # --------------------------------------------------- Load data for one student sub loadcourse { - my ($safeeval,$r)=@_; + my ($safeeval,$sheetdata,$r)=@_; my %c=(); my %f=&getformulas($safeeval); my $total=0; @@ -2005,16 +2011,16 @@ ENDPOP # ------------------------------------------------ Load data for one assessment sub loadassessment { - my $safeeval=shift; + my ($safeeval,$sheetdata)=@_; - my $uhome = &getuhome($safeeval); - my $uname = &getuname($safeeval); - my $udom = &getudom($safeeval); - my $symb = &getusymb($safeeval); - my $cid = &getcid($safeeval); - my $cnum = &getcnum($safeeval); - my $cdom = &getcdom($safeeval); - my $chome = &getchome($safeeval); + my $uhome = $sheetdata->{'uhome'}; + my $uname = $sheetdata->{'uname'}; + my $udom = $sheetdata->{'udom'}; + my $symb = $sheetdata->{'usymb'}; + my $cid = $sheetdata->{'cid'}; + my $cnum = $sheetdata->{'cnum'}; + my $cdom = $sheetdata->{'cdom'}; + my $chome = $sheetdata->{'chome'}; my $namespace; unless ($namespace=$cid) { return ''; } @@ -2070,15 +2076,14 @@ sub loadassessment { 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; - } + 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; } + } foreach (split(/\&/,$courserdatas{$cid})) { my ($name,$value)=split(/\=/,$_); $courseopt{$userprefix.&Apache::lonnet::unescape($name)}= @@ -2122,7 +2127,7 @@ sub loadassessment { next if ($f{$_}=~/^[\!\~\-]/); if ($f{$_}=~/^parameter/) { if ($thisassess{$f{$_}}) { - my $val=&parmval($f{$_},$safeeval); + my $val=&parmval($f{$_},$safeeval,$sheetdata); $c{$_}=$val; $c{$f{$_}}=$val; } @@ -2170,8 +2175,8 @@ sub selectbox { # sub updatesheet { - my $safeeval=shift; - my $stype=&gettype($safeeval); + my ($safeeval,$sheetdata)=@_; + my $stype=$sheetdata->{'sheettype'}; if ($stype eq 'classcalc') { return &updateclasssheet($safeeval); } else { @@ -2185,14 +2190,14 @@ sub updatesheet { # sub loadrows { - my ($safeeval,$r)=@_; - my $stype=&gettype($safeeval); + my ($safeeval,$sheetdata,$r)=@_; + my $stype=$sheetdata->{'sheettype'}; if ($stype eq 'classcalc') { - &loadcourse($safeeval,$r); + &loadcourse($safeeval,$sheetdata,$r); } elsif ($stype eq 'studentcalc') { - &loadstudent($safeeval); + &loadstudent($safeeval,$sheetdata); } else { - &loadassessment($safeeval); + &loadassessment($safeeval,$sheetdata); } } @@ -2280,12 +2285,12 @@ sub exportsheet { # # Not cached # - my $thissheet=&makenewsheet($uname,$udom,$stype,$usymb); + my ($thissheet,$sheetdata)=&makenewsheet($uname,$udom,$stype,$usymb); &readsheet($thissheet,$fn); - &updatesheet($thissheet); - &loadrows($thissheet); - &calcsheet($thissheet); - @exportarr=&exportdata($thissheet); + &updatesheet($thissheet,$sheetdata); + &loadrows($thissheet,$sheetdata); + &calcsheet($thissheet,$sheetdata); + @exportarr=&exportdata($thissheet,$sheetdata); # # Store now # @@ -2299,13 +2304,12 @@ sub exportsheet { &Apache::lonnet::escape($key), $ENV{'course.'.$cid.'.home'}); } else { - $current=&Apache::lonnet::reply('get:'. - &getudom($thissheet).':'. - &getuname($thissheet). + $current=&Apache::lonnet::reply('get:'.$sheetdata->{'udom'}.':'. + $sheetdata->{'uname'}. ':nohist_calculatedsheets_'. $ENV{'request.course.id'}.':'. &Apache::lonnet::escape($key), - &getuhome($thissheet)); + $sheetdata->{'uhome'}); } my %currentlystored=(); unless ($current=~/^error\:/) { @@ -2333,14 +2337,14 @@ sub exportsheet { $ENV{'course.'.$cid.'.home'}); } else { &Apache::lonnet::reply('put:'. - &getudom($thissheet).':'. - &getuname($thissheet). + $sheetdata->{'udom'}.':'. + $sheetdata->{'uname'}. ':nohist_calculatedsheets_'. $ENV{'request.course.id'}.':'. &Apache::lonnet::escape($key).'='. &Apache::lonnet::escape($newstore).'&'. &Apache::lonnet::escape($key).'.time='.$now, - &getuhome($thissheet)); + $sheetdata->{'uhome'}); } } return @exportarr; @@ -2510,7 +2514,8 @@ ENDSCRIPT } # Read new sheet or modified worksheet $r->uri=~/\/(\w+)$/; - my $asheet=&makenewsheet($aname,$adom,$1,$ENV{'form.usymb'}); + my ($asheet,$asheetdata)=&makenewsheet + ($aname,$adom,$1,$ENV{'form.usymb'}); # If a new formula had been entered, go from work copy if ($ENV{'form.unewfield'}) { $r->print('

Modified Workcopy

'); @@ -2528,14 +2533,14 @@ ENDSCRIPT &readsheet($asheet,$ENV{'form.ufn'}); } # Print out user information - unless (&gettype($asheet) eq 'classcalc') { - $r->print('

User: '.&getuname($asheet). - '
Domain: '.&getudom($asheet)); + 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 { - $r->print('
Section/Group: '.&getcsec($asheet)); + $r->print('
Section/Group: '.$asheetdata->{'csec'}); } if ($ENV{'form.usymb'}) { $r->print('
Assessment: '. @@ -2543,10 +2548,10 @@ ENDSCRIPT } } # 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))) { + if (($asheetdata->{'sheettype'} eq 'classcalc' ) || + ($asheetdata->{'uname'} ne $ENV{'user.name'} ) || + ($asheetdata->{'udom'} ne $ENV{'user.domain'})) { + unless (&Apache::lonnet::allowed('vgr',$asheetdata->{'cid'})) { $r->print('

Access Permission Denied

'. ''); return OK; @@ -2556,13 +2561,15 @@ ENDSCRIPT $r->print( '

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

'. - 'Level up: Student Sheet

'); + if ($asheetdata->{'sheettype'} eq 'assesscalc') { + $r->print('

'. + ''. + 'Level up: Student Sheet

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

'. 'Level up: Course Sheet

'); @@ -2583,7 +2590,7 @@ ENDSCRIPT $r->print('

'. 'print(' checked'); }