--- loncom/interface/Attic/lonspreadsheet.pm 2002/10/24 15:30:25 1.126
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/10/25 15:58:35 1.128
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.126 2002/10/24 15:30:25 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.128 2002/10/25 15:58:35 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -828,9 +828,11 @@ sub expandnamed {
foreach $parameter (keys(%c)) {
push @matches,$parameter if ($parameter =~ /$expression/);
}
- if ($#matches == 0) {
+ if (scalar(@matches )== 0) {
+ return;
+ } elsif (scalar(@matches) == 1) {
$returnvalue = '$c{\''.$matches[0].'\'}';
- } elsif ($#matches > 0) {
+ } elsif (scalar(@matches) > 0) {
# more than one match. Look for a concise one
$returnvalue = "'non-unique parameter name : $expression'";
foreach (@matches) {
@@ -838,8 +840,6 @@ sub expandnamed {
$returnvalue = '$c{\''.$_.'\'}';
}
}
- } else {
- $returnvalue = "'bad parameter name : $expression'";
}
return $returnvalue;
}
@@ -1232,6 +1232,8 @@ sub outsheet {
# Prepare to output rows
my $row;
#
+ # Sort the rows in some manner
+ #
my @sortby=();
my @sortidx=();
for ($row=1;$row<=$sheet->{'maxrow'};$row++) {
@@ -1522,7 +1524,7 @@ sub tmpread {
}
}
if ($nform eq 'changesheet') {
- $fo{'A'.$nfield}=(split(/\_\_\&\&\&\_\_/,$fo{'A'.$nfield}))[0];
+ $fo{'A'.$nfield}=(split(/__&&&\__/,$fo{'A'.$nfield}))[0];
unless ($ENV{'form.sel_'.$nfield} eq 'Default') {
$fo{'A'.$nfield}.='__&&&__'.$ENV{'form.sel_'.$nfield};
}
@@ -1641,10 +1643,9 @@ sub format_rowlabel {
}
} elsif ($type eq 'parameter') {
if ($ENV{'form.showcsv'}) {
- $result = $labeldata =~ s/
//g;
- } else {
- $result = $labeldata;
+ $labeldata =~ s/
/ /g;
}
+ $result = $labeldata;
} else {
&Apache::lonnet::logthis("lonspreadsheet:bogus rowlabel type: $type");
}
@@ -1703,11 +1704,11 @@ sub updateclasssheet {
}
#
# New and unknown keys
- foreach (sort keys(%currentlist)) {
- unless ($existing{$_}) {
+ foreach my $student (sort keys(%currentlist)) {
+ unless ($existing{$student}) {
$changed=1;
$sheet->{'maxrow'}++;
- $f{'A'.$sheet->{'maxrow'}}=$_;
+ $f{'A'.$sheet->{'maxrow'}}=$student;
}
}
if ($changed) {
@@ -1721,45 +1722,42 @@ sub updateclasssheet {
# ----------------------------------- Update rows for student and assess sheets
sub updatestudentassesssheet {
my ($sheet) = @_;
+ #
my %bighash;
- my $stype=$sheet->{'sheettype'};
- my $uname=$sheet->{'uname'};
- my $udom =$sheet->{'udom'};
+ #
+ my $stype = $sheet->{'sheettype'};
+ my $uname = $sheet->{'uname'};
+ my $udom = $sheet->{'udom'};
$sheet->{'rowlabel'} = {};
- if ($updatedata
- {$ENV{'request.course.fn'}.'_'.$stype.'_'.$uname.'_'.$udom}) {
- %{$sheet->{'rowlabel'}}=split(/___;___/,
- $updatedata{$ENV{'request.course.fn'}.
- '_'.$stype.'_'.$uname.'_'.$udom});
+ my $identifier =$sheet->{'coursefilename'}.'_'.$stype.'_'.$uname.'_'.$udom;
+ if ($updatedata{$identifier}) {
+ %{$sheet->{'rowlabel'}}=split(/___;___/,$updatedata{$identifier});
} else {
# Tie hash
- tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
+ tie(%bighash,'GDBM_File',$sheet->{'coursefilename'}.'.db',
&GDBM_READER(),0640);
if (! tied(%bighash)) {
return 'Could not access course data';
}
# Get all assessments
#
- # allkeys is used in the assessment sheets to provide labels
+ # parameter_labels is used in the assessment sheets to provide labels
# for the parameters.
- my %allkeys=('timestamp' =>
- 'parameter:Timestamp of Last Transaction
timestamp',
- 'subnumber' =>
- 'parameter:Number of Submissions
subnumber',
- 'tutornumber' =>
- 'parameter:Number of Tutor Responses
tutornumber',
- 'totalpoints' =>
- 'parameter:Total Points Granted
totalpoints');
- my $adduserstr='';
- if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})){
- $adduserstr='&uname='.$uname.'&udom='.$udom;
- }
+ my %parameter_labels=
+ ('timestamp' =>
+ 'parameter:Timestamp of Last Transaction
timestamp',
+ 'subnumber' =>
+ 'parameter:Number of Submissions
subnumber',
+ 'tutornumber' =>
+ 'parameter:Number of Tutor Responses
tutornumber',
+ 'totalpoints' =>
+ 'parameter:Total Points Granted
totalpoints');
#
- # allassess holds the descriptions of all assessments
- my %allassess;
+ # assesslist holds the descriptions of all assessments
+ my %assesslist;
foreach ('Feedback','Evaluation','Tutoring','Discussion') {
my $symb = '_'.lc($_);
- $allassess{$symb} = join(':',('symb',$symb,$uname,$udom,$_));
+ $assesslist{$symb} = join(':',('symb',$symb,$uname,$udom,$_));
}
while (($_,undef) = each(%bighash)) {
next if ($_!~/^src\_(\d+)\.(\d+)$/);
@@ -1771,7 +1769,7 @@ sub updatestudentassesssheet {
my $symb=
&Apache::lonnet::declutter($bighash{'map_id_'.$mapid}).
'___'.$resid.'___'.&Apache::lonnet::declutter($srcf);
- $allassess{$symb}='symb:'.&Apache::lonnet::escape($symb).':'
+ $assesslist{$symb}='symb:'.&Apache::lonnet::escape($symb).':'
.$uname.':'.$udom.':'.$bighash{'title_'.$id};
next if ($stype ne 'assesscalc');
foreach my $key (split(/\,/,
@@ -1785,22 +1783,24 @@ sub updatestudentassesssheet {
&Apache::lonnet::metadata($srcf,$key.'.name');
}
$display.='
'.$key;
- $allkeys{$key}='parameter:'.$display;
+ $parameter_labels{$key}='parameter:'.$display;
} # end of foreach
}
} # end of foreach (keys(%bighash))
untie(%bighash);
#
- # %allkeys has a list of storage and parameter displays by unikey
- # %allassess has a list of all resource displays by symb
+ # %parameter_labels has a list of storage and parameter displays by
+ # unikey
+ # %assesslist has a list of all resource, by symb
#
if ($stype eq 'assesscalc') {
- $sheet->{'rowlabel'} = \%allkeys;
+ $sheet->{'rowlabel'} = \%parameter_labels;
} elsif ($stype eq 'studentcalc') {
- $sheet->{'rowlabel'} = \%allassess;
+ $sheet->{'rowlabel'} = \%assesslist;
}
- $updatedata{$ENV{'request.course.fn'}.'_'.$stype.'_'.$uname.'_'.$udom}=
- join('___;___',%{$sheet->{'rowlabel'}});
+ $updatedata{$sheet->{'coursefilename'}.'_'.$stype.'_'
+ .$uname.'_'.$udom}=
+ join('___;___',%{$sheet->{'rowlabel'}});
# Get current from cache
}
# Find discrepancies between the course row table and this
@@ -1867,7 +1867,7 @@ sub loadstudent {
my $row=$1;
next if (($f{$_}=~/^[\!\~\-]/) || ($row==0));
my ($usy,$ufn)=split(/__&&&\__/,$f{$_});
- @assessdata=&exportsheet($sheet->{'uname'},
+ @assessdata=&exportsheet($sheet,$sheet->{'uname'},
$sheet->{'udom'},
'assesscalc',$usy,$ufn);
my $index=0;
@@ -1924,7 +1924,7 @@ ENDPOP
next if ($_!~/^A(\d+)/);
my $row=$1;
next if (($f{$_}=~/^[\!\~\-]/) || ($row==0));
- my @studentdata=&exportsheet(split(/\:/,$f{$_}),
+ my @studentdata=&exportsheet($sheet,split(/\:/,$f{$_}),
'studentcalc');
undef %userrdatas;
$now++;
@@ -2168,8 +2168,14 @@ sub forcedrecalc {
}
# ============================================================== Export handler
+# exportsheet
+# returns the export row for a spreadsheet.
+#
sub exportsheet {
- my ($uname,$udom,$stype,$usymb,$fn)=@_;
+ my ($sheet,$uname,$udom,$stype,$usymb,$fn)=@_;
+ $uname = $uname || $sheet->{'uname'};
+ $udom = $udom || $sheet->{'udom'};
+ $stype = $stype || $sheet->{'sheettype'};
my @exportarr=();
if (defined($usymb) && ($usymb=~/^\_(\w+)/) && (!$fn)) {
$fn='default_'.$1;
@@ -2188,7 +2194,7 @@ sub exportsheet {
}
}
unless ($found) {
- &cachedssheets($uname,$udom,&Apache::lonnet::homeserver($uname,$udom));
+ &cachedssheets($sheet,$uname,$udom);
if ($oldsheets{$key}) {
foreach (split(/___&\___/,$oldsheets{$key})) {
my ($name,$value)=split(/___=___/,$_);
@@ -2216,29 +2222,28 @@ sub exportsheet {
#
# Not cached
#
- my ($sheet)=&makenewsheet($uname,$udom,$stype,$usymb);
- &readsheet($sheet,$fn);
- &updatesheet($sheet);
- &loadrows($sheet);
- &calcsheet($sheet);
- @exportarr=&exportdata($sheet);
+ my ($newsheet)=&makenewsheet($uname,$udom,$stype,$usymb);
+ &readsheet($newsheet,$fn);
+ &updatesheet($newsheet);
+ &loadrows($newsheet);
+ &calcsheet($newsheet);
+ @exportarr=&exportdata($newsheet);
#
# Store now
#
- my $cid=$ENV{'request.course.id'};
+ my $cid=$newsheet->{'cid'};
my $current='';
if ($stype eq 'studentcalc') {
- $current=&Apache::lonnet::reply('get:'.
- $ENV{'course.'.$cid.'.domain'}.':'.
- $ENV{'course.'.$cid.'.num'}.
+ $current=&Apache::lonnet::reply('get:'.$sheet->{'cdom'}.':'.
+ $sheet->{'cnum'}.
':nohist_calculatedsheets:'.
&Apache::lonnet::escape($key),
- $ENV{'course.'.$cid.'.home'});
+ $sheet->{'chome'});
} else {
$current=&Apache::lonnet::reply('get:'.$sheet->{'udom'}.':'.
$sheet->{'uname'}.
':nohist_calculatedsheets_'.
- $ENV{'request.course.id'}.':'.
+ $sheet->{'cid'}.':'.
&Apache::lonnet::escape($key),
$sheet->{'uhome'});
}
@@ -2261,8 +2266,7 @@ sub exportsheet {
&Apache::lonnet::put('nohist_calculatedsheets',
{ $key => $newstore,
$key.time => $now },
- $ENV{'course.'.$cid.'.domain'},
- $ENV{'course.'.$cid.'.num'})
+ $sheet->{'cid'},$sheet->{'cnum'});
} else {
&Apache::lonnet::put('nohist_calculatedsheets_'.$sheet->{'cid'},
{ $key => $newstore,
@@ -2280,17 +2284,11 @@ sub exportsheet {
sub expirationdates {
undef %expiredates;
my $cid=$ENV{'request.course.id'};
- my $reply=&Apache::lonnet::reply('dump:'.
- $ENV{'course.'.$cid.'.domain'}.':'.
- $ENV{'course.'.$cid.'.num'}.
- ':nohist_expirationdates',
- $ENV{'course.'.$cid.'.home'});
- unless ($reply=~/^error\:/) {
- foreach (split(/\&/,$reply)) {
- my ($name,$value)=split(/\=/,$_);
- $expiredates{&Apache::lonnet::unescape($name)}
- =&Apache::lonnet::unescape($value);
- }
+ my @tmp = &Apache::lonnet::dump('nohist_expirationdates',
+ $ENV{'course.'.$cid.'.domain'},
+ $ENV{'course.'.$cid.'.num'});
+ if (lc($tmp[0])!~/^error/){
+ %expiredates = @tmp;
}
}
@@ -2301,16 +2299,13 @@ sub expirationdates {
sub cachedcsheets {
my $cid=$ENV{'request.course.id'};
- my $reply=&Apache::lonnet::reply('dump:'.
- $ENV{'course.'.$cid.'.domain'}.':'.
- $ENV{'course.'.$cid.'.num'}.
- ':nohist_calculatedsheets',
- $ENV{'course.'.$cid.'.home'});
- unless ($reply=~/^error\:/) {
- foreach ( split(/\&/,$reply)) {
- my ($name,$value)=split(/\=/,$_);
- $oldsheets{&Apache::lonnet::unescape($name)}
- =&Apache::lonnet::unescape($value);
+ my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets',
+ $ENV{'course.'.$cid.'.domain'},
+ $ENV{'course.'.$cid.'.num'});
+ if ($tmp[0] !~ /^error/) {
+ my %StupidTempHash = @tmp;
+ while (my ($key,$value) = each %StupidTempHash) {
+ $oldsheets{$key} = $value;
}
}
}
@@ -2321,22 +2316,21 @@ sub cachedcsheets {
#
sub cachedssheets {
- my ($sname,$sdom,$shome)=@_;
- unless (($loadedcaches{$sname.'_'.$sdom}) || ($shome eq 'no_host')) {
- my $cid=$ENV{'request.course.id'};
- my $reply=&Apache::lonnet::reply('dump:'.$sdom.':'.$sname.
- ':nohist_calculatedsheets_'.
- $ENV{'request.course.id'},
- $shome);
- unless ($reply=~/^error\:/) {
- foreach ( split(/\&/,$reply)) {
- my ($name,$value)=split(/\=/,$_);
- $oldsheets{&Apache::lonnet::unescape($name)}
- =&Apache::lonnet::unescape($value);
+ my ($sheet,$uname,$udom) = @_;
+ $uname = $uname || $sheet->{'uname'};
+ $udom = $udom || $sheet->{'udom'};
+ if (! $loadedcaches{$sheet->{'uname'}.'_'.$sheet->{'udom'}}) {
+ my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets',
+ $sheet->{'udom'},
+ $sheet->{'uname'});
+ if ($tmp[0] !~ /^error/) {
+ my %StupidTempHash = @tmp;
+ while (my ($key,$value) = each %StupidTempHash) {
+ $oldsheets{$key} = $value;
+ }
+ $loadedcaches{$sheet->{'uname'}.'_'.$sheet->{'udom'}}=1;
}
}
- $loadedcaches{$sname.'_'.$sdom}=1;
- }
}
# ===================================================== Calculated sheets cache
@@ -2551,7 +2545,7 @@ ENDSCRIPT
} elsif ($sheet->{'sheettype'} eq 'studentcalc') {
$r->print("Loading previously calculated assessment sheets ...\n");
$r->rflush();
- &cachedssheets($sheet->{'uname'},$sheet->{'udom'},$sheet->{'uhome'});
+ &cachedssheets($sheet);
}
# Update sheet, load rows
$r->print("Loaded sheet(s), updating rows ...
\n");
@@ -2599,7 +2593,7 @@ ENDSCRIPT
} else {
unless ($ENV{'form.userselhidden'}) {
unless
- ($ENV{'course.'.$ENV{'request.course.id'}.'.hideemptyrows'} eq 'yes') {
+ ($ENV{'course.'.$sheet->{'cid'}.'.hideemptyrows'} eq 'yes') {
$r->print(' checked');
$ENV{'form.showall'}=1;
}