--- loncom/interface/Attic/lonspreadsheet.pm 2001/10/22 15:03:22 1.72
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/01/14 16:32:38 1.78
@@ -7,7 +7,8 @@
# 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 Gerd Kortemeyer
+# 10/16,10/17,10/20,11/05,11/28,12/27 Gerd Kortemeyer
+# 01/14/02 Matthew
package Apache::lonspreadsheet;
@@ -142,16 +143,16 @@ sub mask {
} else {
if (length($ld)!=length($ud)) {
$num.='(';
- map {
+ foreach ($ld=~m/\d/g) {
$num.='['.$_.'-9]';
- } ($ld=~m/\d/g);
+ }
if (length($ud)-length($ld)>1) {
$num.='|\d{'.(length($ld)+1).','.(length($ud)-1).'}';
}
$num.='|';
- map {
+ foreach ($ud=~m/\d/g) {
$num.='[0-'.$_.']';
- } ($ud=~m/\d/g);
+ }
$num.=')';
} else {
my @lda=($ld=~m/\d/g);
@@ -191,10 +192,7 @@ sub mask {
sub NUM {
my $mask=mask(@_);
- my $num=0;
- map {
- $num++;
- } grep /$mask/,keys %v;
+ my $num= $#{@{grep(/$mask/,keys(%v))}}+1;
return $num;
}
@@ -202,11 +200,11 @@ sub BIN {
my ($low,$high,$lower,$upper)=@_;
my $mask=mask($lower,$upper);
my $num=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
if (($v{$_}>=$low) && ($v{$_}<=$high)) {
$num++;
}
- } grep /$mask/,keys %v;
+ }
return $num;
}
@@ -214,19 +212,19 @@ sub BIN {
sub SUM {
my $mask=mask(@_);
my $sum=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=$v{$_};
- } grep /$mask/,keys %v;
+ }
return $sum;
}
sub MEAN {
my $mask=mask(@_);
my $sum=0; my $num=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=$v{$_};
$num++;
- } grep /$mask/,keys %v;
+ }
if ($num) {
return $sum/$num;
} else {
@@ -237,45 +235,45 @@ sub MEAN {
sub STDDEV {
my $mask=mask(@_);
my $sum=0; my $num=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=$v{$_};
$num++;
- } grep /$mask/,keys %v;
+ }
unless ($num>1) { return undef; }
my $mean=$sum/$num;
$sum=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=($v{$_}-$mean)**2;
- } grep /$mask/,keys %v;
+ }
return sqrt($sum/($num-1));
}
sub PROD {
my $mask=mask(@_);
my $prod=1;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$prod*=$v{$_};
- } grep /$mask/,keys %v;
+ }
return $prod;
}
sub MAX {
my $mask=mask(@_);
my $max='-';
- map {
+ foreach (grep /$mask/,keys(%v)) {
unless ($max) { $max=$v{$_}; }
if (($v{$_}>$max) || ($max eq '-')) { $max=$v{$_}; }
- } grep /$mask/,keys %v;
+ }
return $max;
}
sub MIN {
my $mask=mask(@_);
my $min='-';
- map {
+ foreach (grep /$mask/,keys(%v)) {
unless ($max) { $max=$v{$_}; }
if (($v{$_}<$min) || ($min eq '-')) { $min=$v{$_}; }
- } grep /$mask/,keys %v;
+ }
return $min;
}
@@ -283,9 +281,9 @@ sub SUMMAX {
my ($num,$lower,$upper)=@_;
my $mask=mask($lower,$upper);
my @inside=();
- map {
+ foreach (grep /$mask/,keys(%v)) {
$inside[$#inside+1]=$v{$_};
- } grep /$mask/,keys %v;
+ }
@inside=sort(@inside);
my $sum=0; my $i;
for ($i=$#inside;(($i>$#inside-$num) && ($i>=0));$i--) {
@@ -298,9 +296,9 @@ sub SUMMIN {
my ($num,$lower,$upper)=@_;
my $mask=mask($lower,$upper);
my @inside=();
- map {
+ foreach (grep /$mask/,keys(%v)) {
$inside[$#inside+1]=$v{$_};
- } grep /$mask/,keys %v;
+ }
@inside=sort(@inside);
my $sum=0; my $i;
for ($i=0;(($i<$num) && ($i<=$#inside));$i++) {
@@ -316,25 +314,25 @@ sub expandnamed {
my @vars=split(/\W+/,$formula);
my %values=();
undef %values;
- map {
+ foreach ( @vars ) {
my $varname=$_;
if ($varname=~/\D/) {
$formula=~s/$varname/'$c{\''.$varname.'\'}'/ge;
$varname=~s/$var/\(\\w\+\)/g;
- map {
+ foreach (keys(%c)) {
if ($_=~/$varname/) {
$values{$1}=1;
}
- } keys %c;
+ }
}
- } @vars;
+ }
if ($func eq 'EXPANDSUM') {
my $result='';
- map {
+ foreach (keys(%values)) {
my $thissum=$formula;
$thissum=~s/$var/$_/g;
$result.=$thissum.'+';
- } keys %values;
+ }
$result=~s/\+$//;
return $result;
} else {
@@ -353,11 +351,11 @@ sub sett {
} else {
$pattern='[A-Z]';
}
- map {
+ foreach (keys(%f)) {
if ($_=~/template\_(\w)/) {
my $col=$1;
unless ($col=~/^$pattern/) {
- map {
+ foreach (keys(%f)) {
if ($_=~/A(\d+)/) {
my $trow=$1;
if ($trow) {
@@ -369,11 +367,11 @@ sub sett {
$t{$lb}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge;
}
}
- } keys %f;
+ }
}
}
- } keys %f;
- map {
+ }
+ foreach (keys(%f)) {
if (($f{$_}) && ($_!~/template\_/)) {
my $matches=($_=~/^$pattern(\d+)/);
if (($matches) && ($1)) {
@@ -387,7 +385,7 @@ sub sett {
$t{$_}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge;
}
}
- } keys %f;
+ }
$t{'A0'}=$f{'A0'};
$t{'A0'}=~s/\.\.+/\,/g;
$t{'A0'}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g;
@@ -401,7 +399,7 @@ sub calc {
my $depth=0;
while ($notfinished) {
$notfinished=0;
- map {
+ foreach (keys(%t)) {
my $old=$v{$_};
$v{$_}=eval($t{$_});
if ($@) {
@@ -409,7 +407,7 @@ sub calc {
return $@;
}
if ($v{$_} ne $old) { $notfinished=1; }
- } keys %t;
+ }
$depth++;
if ($depth>100) {
%v=();
@@ -422,14 +420,14 @@ sub calc {
sub templaterow {
my @cols=();
$cols[0]='Template';
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
my $fm=$f{'template_'.$_};
$fm=~s/[\'\"]/\&\#34;/g;
$cols[$#cols+1]="'template_$_','$fm'".'___eq___'.$fm;
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
return @cols;
}
@@ -441,25 +439,25 @@ sub outrowassess {
$cols[0]=$rl{$usy}.'
'.
'';
} else {
$cols[0]='Export';
}
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
my $fm=$f{$_.$n};
$fm=~s/[\'\"]/\&\#34;/g;
$cols[$#cols+1]="'$_$n','$fm'".'___eq___'.$v{$_.$n};
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
return @cols;
}
@@ -471,23 +469,23 @@ sub outrow {
} else {
$cols[0]='Export';
}
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
my $fm=$f{$_.$n};
$fm=~s/[\'\"]/\&\#34;/g;
$cols[$#cols+1]="'$_$n','$fm'".'___eq___'.$v{$_.$n};
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
return @cols;
}
sub exportrowa {
my @exportarray=();
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z') {
$exportarray[$#exportarray+1]=$v{$_.'0'};
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
+ }
return @exportarray;
}
@@ -698,7 +696,7 @@ sub rown {
$maxred=26;
}
if ($n eq '-') { $proc='&templaterow'; $n=-1; $dataflag=1; }
- map {
+ foreach ($safeeval->reval($proc.'('.$n.')')) {
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD');
my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_);
if ((($vl ne '') || ($vl eq '0')) &&
@@ -721,7 +719,7 @@ sub rown {
$rowdata.=',"'.$vl.'"';
}
$showf++;
- } $safeeval->reval($proc.'('.$n.')');
+ } # End of foreach($safeval...)
if ($ENV{'form.showall'} || ($dataflag)) {
return $rowdata.($ENV{'form.showcsv'}?'':'');
} else {
@@ -756,7 +754,10 @@ sub outsheet {
'
Calculations | ';
my $showf=0;
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
$showf++;
if ($showf<=$maxred) {
$tabledata.='';
@@ -764,10 +765,7 @@ sub outsheet {
$tabledata.=' | ';
}
$tabledata.="$_ | ";
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
$tabledata.='
'.&rown($safeeval,'-').&rown($safeeval,0);
} else { $tabledata=''; }
@@ -799,12 +797,12 @@ sub outsheet {
$r->print("\n
\n");
$r->rflush();
$r->print('
| '.$what.' | ');
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
$r->print(''.$_.' | ');
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
$r->print('
');
}
$n++;
@@ -829,10 +827,10 @@ sub othersheets {
my $result=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum.':'.
$stype.'_spreadsheets',$chome);
if ($result!~/^error\:/) {
- map {
+ foreach (split(/\&/,$result)) {
$alternatives[$#alternatives+1]=
&Apache::lonnet::unescape((split(/\=/,$_))[0]);
- } split(/\&/,$result);
+ }
}
return @alternatives;
}
@@ -880,10 +878,13 @@ sub readsheet {
my $sheetxml='';
{
my $fh;
- if ($fh=Apache::File->new($includedir.
- '/default.'.&gettype($safeeval))) {
+ my $dfn=$fn;
+ $dfn=~s/\_/\./g;
+ if ($fh=Apache::File->new($includedir.'/'.$dfn)) {
$sheetxml=join('',<$fh>);
- }
+ } else {
+ $sheetxml='"Error"';
+ }
}
my $parser=HTML::TokeParser->new(\$sheetxml);
my $token;
@@ -906,11 +907,11 @@ sub readsheet {
unless ($reply=~/^error\:/) {
$sheet=$reply;
}
- map {
+ foreach (split(/\&/,$sheet)) {
my ($name,$value)=split(/\=/,$_);
$f{&Apache::lonnet::unescape($name)}=
&Apache::lonnet::unescape($value);
- } split(/\&/,$sheet);
+ }
}
# --------------------------------------------------------------- Cache and set
$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}=join('___;___',%f);
@@ -956,12 +957,12 @@ sub writesheet {
$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}=join('___;___',%f);
# ----------------------------------------------------------------- Write sheet
my $sheetdata='';
- map {
+ foreach (keys(%f)) {
unless ($f{$_} eq 'import') {
$sheetdata.=&Apache::lonnet::escape($_).'='.
&Apache::lonnet::escape($f{$_}).'&';
}
- } keys %f;
+ }
$sheetdata=~s/\&$//;
my $reply=&Apache::lonnet::reply('put:'.$cdom.':'.$cnum.':'.$fn.':'.
$sheetdata,$chome);
@@ -1142,7 +1143,7 @@ sub updateclasssheet {
my %currentlist=();
my $now=time;
unless ($classlst=~/^error\:/) {
- map {
+ foreach (split(/\&/,$classlst)) {
my ($name,$value)=split(/\=/,$_);
my ($end,$start)=split(/\:/,&Apache::lonnet::unescape($value));
my $active=1;
@@ -1169,24 +1170,24 @@ sub updateclasssheet {
$rowlabel=''.
$ssec.' '.$reply{$sname}.'
';
- map {
+ foreach ( split(/\&/,$reply)) {
$rowlabel.=&Apache::lonnet::unescape($_).' ';
- } split(/\&/,$reply);
+ }
$rowlabel.='';
} else {
$rowlabel=$ssec.'","'.$reply{$sname}.'"';
my $ncount=0;
- map {
+ foreach (split(/\&/,$reply)) {
$rowlabel.=',"'.&Apache::lonnet::unescape($_).'"';
$ncount++;
- } split(/\&/,$reply);
+ }
unless ($ncount==4) { $rowlabel.=',""'; }
$rowlabel=~s/\"$//;
}
}
$currentlist{&Apache::lonnet::unescape($name)}=$rowlabel;
}
- } split(/\&/,$classlst);
+ } # end of foreach (split(/\&/,$classlst))
#
# -------------------- Find discrepancies between the course row table and this
#
@@ -1197,7 +1198,7 @@ sub updateclasssheet {
my %existing=();
# ----------------------------------------------------------- Now obsolete rows
- map {
+ foreach (keys(%f)) {
if ($_=~/^A(\d+)/) {
$maxrow=($1>$maxrow)?$1:$maxrow;
$existing{$f{$_}}=1;
@@ -1206,17 +1207,17 @@ sub updateclasssheet {
$changed=1;
}
}
- } keys %f;
+ }
# -------------------------------------------------------- New and unknown keys
- map {
+ foreach (sort keys(%currentlist)) {
unless ($existing{$_}) {
$changed=1;
$maxrow++;
$f{'A'.$maxrow}=$_;
}
- } sort keys %currentlist;
+ }
if ($changed) { &setformulas($safeeval,%f); }
@@ -1242,7 +1243,13 @@ sub updatestudentassesssheet {
# --------------------------------------------------------- Get all assessments
my %allkeys=('timestamp' =>
- 'Timestamp of Last Transaction
timestamp');
+ 'Timestamp of Last Transaction
timestamp',
+ 'subnumber' =>
+ 'Number of Submissions
subnumber',
+ 'tutornumber' =>
+ 'Number of Tutor Responses
tutornumber',
+ 'totalpoints' =>
+ 'Total Points Granted
totalpoints');
my $adduserstr='';
if ((&getuname($safeeval) ne $ENV{'user.name'}) ||
@@ -1259,10 +1266,13 @@ sub updatestudentassesssheet {
'">Evaluation',
'_tutoring' =>
'Tutoring'
+ '">Tutoring',
+ '_discussion' =>
+ 'Discussion'
);
- map {
+ foreach (keys(%bighash)) {
if ($_=~/^src\_(\d+)\.(\d+)$/) {
my $mapid=$1;
my $resid=$2;
@@ -1277,7 +1287,8 @@ sub updatestudentassesssheet {
''.
$bighash{'title_'.$id}.'';
if ($stype eq 'assesscalc') {
- map {
+ foreach (split(/\,/,
+ &Apache::lonnet::metadata($srcf,'keys'))) {
if (($_=~/^stores\_(.*)/) || ($_=~/^parameter\_(.*)/)) {
my $key=$_;
my $display=
@@ -1289,11 +1300,11 @@ sub updatestudentassesssheet {
$display.='
'.$key;
$allkeys{$key}=$display;
}
- } split(/\,/,&Apache::lonnet::metadata($srcf,'keys'));
+ } # end of foreach
}
}
}
- } keys %bighash;
+ } # end of foreach (keys(%bighash))
untie(%bighash);
#
@@ -1325,7 +1336,7 @@ sub updatestudentassesssheet {
my %existing=();
# ----------------------------------------------------------- Now obsolete rows
- map {
+ foreach (keys(%f)) {
if ($_=~/^A(\d+)/) {
$maxrow=($1>$maxrow)?$1:$maxrow;
my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_});
@@ -1338,17 +1349,17 @@ sub updatestudentassesssheet {
=~s/assesscalc\?usymb\=/assesscalc\?ufn\=$ufn\&usymb\=/;
}
}
- } keys %f;
+ }
# -------------------------------------------------------- New and unknown keys
- map {
+ foreach (keys(%current)) {
unless ($existing{$_}) {
$changed=1;
$maxrow++;
$f{'A'.$maxrow}=$_;
}
- } keys %current;
+ }
if ($changed) { &setformulas($safeeval,%f); }
@@ -1373,15 +1384,15 @@ sub loadstudent {
&getcid($safeeval),
&getuhome($safeeval));
unless ($reply=~/^error\:/) {
- map {
+ foreach ( split(/\&/,$reply)) {
my ($name,$value)=split(/\=/,$_);
$cachedstores{&Apache::lonnet::unescape($name)}=
&Apache::lonnet::unescape($value);
- } split(/\&/,$reply);
+ }
}
}
my @assessdata=();
- map {
+ foreach (keys(%f)) {
if ($_=~/^A(\d+)/) {
my $row=$1;
unless (($f{$_}=~/^\!/) || ($row==0)) {
@@ -1390,7 +1401,8 @@ sub loadstudent {
&getudom($safeeval),
'assesscalc',$usy,$ufn);
my $index=0;
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z') {
if ($assessdata[$index]) {
my $col=$_;
if ($assessdata[$index]=~/\D/) {
@@ -1403,11 +1415,10 @@ sub loadstudent {
}
}
$index++;
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
+ }
}
}
- } keys %f;
+ }
$cachedassess='';
undef %cachedstores;
&setformulas($safeeval,%f);
@@ -1421,11 +1432,11 @@ sub loadcourse {
my %c=();
my %f=&getformulas($safeeval);
my $total=0;
- map {
+ foreach (keys(%f)) {
if ($_=~/^A(\d+)/) {
unless ($f{$_}=~/^\!/) { $total++; }
}
- } keys %f;
+ }
my $now=0;
my $since=time;
$r->print(<
ENDPOP
$r->rflush();
- map {
+ foreach (keys(%f)) {
if ($_=~/^A(\d+)/) {
my $row=$1;
unless (($f{$_}=~/^\!/) || ($row==0)) {
@@ -1454,7 +1465,8 @@ ENDPOP
$r->rflush();
my $index=0;
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z') {
if ($studentdata[$index]) {
my $col=$_;
if ($studentdata[$index]=~/\D/) {
@@ -1467,11 +1479,10 @@ ENDPOP
}
}
$index++;
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
+ }
}
}
- } keys %f;
+ }
&setformulas($safeeval,%f);
&setconstants($safeeval,%c);
$r->print('');
@@ -1507,9 +1518,9 @@ sub loadassessment {
my $version=$cachedstores{'version:'.$symb};
my $scope;
for ($scope=1;$scope<=$version;$scope++) {
- map {
+ foreach (split(/\:/,$cachedstores{$scope.':keys:'.$symb})) {
$returnhash{$_}=$cachedstores{$scope.':'.$symb.':'.$_};
- } split(/\:/,$cachedstores{$scope.':keys:'.$symb});
+ }
}
} else {
@@ -1521,20 +1532,32 @@ sub loadassessment {
"restore:$udom:$uname:".
&Apache::lonnet::escape($namespace).":".
&Apache::lonnet::escape($symb),$uhome);
- map {
+ foreach (split(/\&/,$answer)) {
my ($name,$value)=split(/\=/,$_);
$returnhash{&Apache::lonnet::unescape($name)}=
&Apache::lonnet::unescape($value);
- } split(/\&/,$answer);
+ }
my $version;
for ($version=1;$version<=$returnhash{'version'};$version++) {
- map {
+ foreach (split(/\:/,$returnhash{$version.':keys'})) {
$returnhash{$_}=$returnhash{$version.':'.$_};
- } split(/\:/,$returnhash{$version.':keys'});
+ }
}
}
# ----------------------------- returnhash now has all stores for this resource
+# --------- convert all "_" to "." to be able to use libraries, multiparts, etc
+
+ my @oldkeys=keys %returnhash;
+
+ foreach (@oldkeys) {
+ my $name=$_;
+ my $value=$returnhash{$_};
+ delete $returnhash{$_};
+ $name=~s/\_/\./g;
+ $returnhash{$name}=$value;
+ }
+
# ---------------------------- initialize coursedata and userdata for this user
undef %courseopt;
undef %useropt;
@@ -1552,11 +1575,11 @@ sub loadassessment {
$courserdatas{$cid.'.last_cache'}=time;
}
}
- map {
+ foreach (split(/\&/,$courserdatas{$cid})) {
my ($name,$value)=split(/\=/,$_);
$courseopt{$userprefix.&Apache::lonnet::unescape($name)}=
&Apache::lonnet::unescape($value);
- } split(/\&/,$courserdatas{$cid});
+ }
# --------------------------------------------------- Get userdata (if present)
unless
((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<240) {
@@ -1567,11 +1590,11 @@ sub loadassessment {
$userrdatas{$uname.'___'.$udom.'.last_cache'}=time;
}
}
- map {
+ foreach (split(/\&/,$userrdatas{$uname.'___'.$udom})) {
my ($name,$value)=split(/\=/,$_);
$useropt{$userprefix.&Apache::lonnet::unescape($name)}=
&Apache::lonnet::unescape($value);
- } split(/\&/,$userrdatas{$uname.'___'.$udom});
+ }
}
# ----------------- now courseopt, useropt initialized for this user and course
# (used by parmval)
@@ -1582,9 +1605,9 @@ sub loadassessment {
my %thisassess=();
my ($symap,$syid,$srcf)=split(/\_\_\_/,$symb);
- map {
+ foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'keys'))) {
$thisassess{$_}=1;
- } split(/\,/,&Apache::lonnet::metadata($srcf,'keys'));
+ }
#
# Load parameters
#
@@ -1593,7 +1616,7 @@ sub loadassessment {
if (tie(%parmhash,'GDBM_File',
&getcfn($safeeval).'_parms.db',&GDBM_READER,0640)) {
my %f=&getformulas($safeeval);
- map {
+ foreach (keys(%f)) {
if ($_=~/^A/) {
unless ($f{$_}=~/^\!/) {
if ($f{$_}=~/^parameter/) {
@@ -1612,7 +1635,7 @@ sub loadassessment {
}
}
}
- } keys %f;
+ }
untie(%parmhash);
}
&setconstants($safeeval,%c);
@@ -1634,11 +1657,11 @@ sub hiddenfield {
sub selectbox {
my ($title,$name,$value,%options)=@_;
my $selout="\n$title:
".'';
}
@@ -1713,6 +1736,11 @@ sub forcedrecalc {
sub exportsheet {
my ($uname,$udom,$stype,$usymb,$fn)=@_;
my @exportarr=();
+
+ if (($usymb=~/^\_(\w+)/) && (!$fn)) {
+ $fn='default_'.$1;
+ }
+
#
# Check if cached
#
@@ -1721,23 +1749,23 @@ sub exportsheet {
my $found='';
if ($oldsheets{$key}) {
- map {
+ foreach (split(/\_\_\_\&\_\_\_/,$oldsheets{$key})) {
my ($name,$value)=split(/\_\_\_\=\_\_\_/,$_);
if ($name eq $fn) {
$found=$value;
}
- } split(/\_\_\_\&\_\_\_/,$oldsheets{$key});
+ }
}
unless ($found) {
&cachedssheets($uname,$udom,&Apache::lonnet::homeserver($uname,$udom));
if ($oldsheets{$key}) {
- map {
+ foreach (split(/\_\_\_\&\_\_\_/,$oldsheets{$key})) {
my ($name,$value)=split(/\_\_\_\=\_\_\_/,$_);
if ($name eq $fn) {
$found=$value;
}
- } split(/\_\_\_\&\_\_\_/,$oldsheets{$key});
+ }
}
}
#
@@ -1790,18 +1818,18 @@ sub exportsheet {
}
my %currentlystored=();
unless ($current=~/^error\:/) {
- map {
+ foreach (split(/\_\_\_\&\_\_\_/,&Apache::lonnet::unescape($current))) {
my ($name,$value)=split(/\_\_\_\=\_\_\_/,$_);
$currentlystored{$name}=$value;
- } split(/\_\_\_\&\_\_\_/,&Apache::lonnet::unescape($current));
+ }
}
$currentlystored{$fn}=join('___;___',@exportarr);
my $newstore='';
- map {
+ foreach (keys(%currentlystored)) {
if ($newstore) { $newstore.='___&___'; }
$newstore.=$_.'___=___'.$currentlystored{$_};
- } keys %currentlystored;
+ }
my $now=time;
if ($stype eq 'studentcalc') {
&Apache::lonnet::reply('put:'.
@@ -1840,11 +1868,11 @@ sub expirationdates {
':nohist_expirationdates',
$ENV{'course.'.$cid.'.home'});
unless ($reply=~/^error\:/) {
- map {
+ foreach (split(/\&/,$reply)) {
my ($name,$value)=split(/\=/,$_);
$expiredates{&Apache::lonnet::unescape($name)}
=&Apache::lonnet::unescape($value);
- } split(/\&/,$reply);
+ }
}
}
@@ -1861,11 +1889,11 @@ sub cachedcsheets {
':nohist_calculatedsheets',
$ENV{'course.'.$cid.'.home'});
unless ($reply=~/^error\:/) {
- map {
+ foreach ( split(/\&/,$reply)) {
my ($name,$value)=split(/\=/,$_);
$oldsheets{&Apache::lonnet::unescape($name)}
=&Apache::lonnet::unescape($value);
- } split(/\&/,$reply);
+ }
}
}
@@ -1883,11 +1911,11 @@ sub cachedssheets {
$ENV{'request.course.id'},
$shome);
unless ($reply=~/^error\:/) {
- map {
+ foreach ( split(/\&/,$reply)) {
my ($name,$value)=split(/\=/,$_);
$oldsheets{&Apache::lonnet::unescape($name)}
=&Apache::lonnet::unescape($value);
- } split(/\&/,$reply);
+ }
}
$loadedcaches{$sname.'_'.$sdom}=1;
}
@@ -1925,7 +1953,7 @@ $tmpdir=$r->dir_config('lonDaemons').'/t
# --------------------------- Get query string for limited number of parameters
- map {
+ foreach (split(/&/,$ENV{'QUERY_STRING'})) {
my ($name, $value) = split(/=/,$_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
@@ -1935,7 +1963,7 @@ $tmpdir=$r->dir_config('lonDaemons').'/t
$ENV{'form.'.$name}=$value;
}
}
- } (split(/&/,$ENV{'QUERY_STRING'}));
+ }
if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) {
$ENV{'form.ufn'}='default_'.$1;
@@ -2049,6 +2077,9 @@ ENDSCRIPT
} else {
$r->print('
Section/Group: '.&getcsec($asheet));
}
+ if ($ENV{'form.usymb'}) {
+ $r->print('
Assessment: '.$ENV{'form.usymb'}.'');
+ }
}
# ---------------------------------------------------------------- Course title
@@ -2108,13 +2139,13 @@ ENDSCRIPT
$r->print('
'.
'
');
if (&gettype($asheet) eq 'studentcalc') {
&setothersheets($asheet,&othersheets($asheet,'assesscalc'));
@@ -2183,8 +2214,21 @@ ENDSCRIPT
} else {
$r->print('
Show empty rows: ');
}
- $r->print('print(' checked'); }
+
+ $r->print(&hiddenfield('userselhidden','true').
+ 'print(' checked');
+ } else {
+ unless ($ENV{'form.userselhidden'}) {
+ unless
+ ($ENV{'course.'.$ENV{'request.course.id'}.'.hideemptyrows'} eq 'yes') {
+ $r->print(' checked');
+ $ENV{'form.showall'}=1;
+ }
+ }
+ }
$r->print('>');
if (&gettype($asheet) eq 'classcalc') {
$r->print(
@@ -2210,3 +2254,7 @@ ENDSCRIPT
1;
__END__
+
+
+
+