--- loncom/interface/Attic/lonspreadsheet.pm 2000/12/19 15:40:08 1.19
+++ loncom/interface/Attic/lonspreadsheet.pm 2000/12/30 21:33:11 1.22
@@ -2,7 +2,7 @@
# Spreadsheet/Grades Display Handler
#
# 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 Gerd Kortemeyer
+# 12/08,12/09,12/11,12/12,12/15,12/16,12/18,12/19,12/30 Gerd Kortemeyer
package Apache::lonspreadsheet;
@@ -267,7 +267,26 @@ sub sett {
$pattern='[A-Z]';
}
map {
- if ($f{$_}) {
+ if ($_=~/template\_(\w)/) {
+ my $col=$1;
+ unless ($col=~/^$pattern/) {
+ map {
+ if ($_=~/A(\d+)/) {
+ my $trow=$1;
+ if ($trow) {
+ my $lb=$col.$trow;
+ $t{$lb}=$f{'template_'.$col};
+ $t{$lb}=~s/\#/$trow/g;
+ $t{$lb}=~s/\.\.+/\,/g;
+ $t{$lb}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g;
+ }
+ }
+ } keys %f;
+ }
+ }
+ } keys %f;
+ map {
+ if (($f{$_}) && ($_!~/template\_/)) {
if ($_=~/^$pattern/) {
unless ($f{$_}=~/^\!/) {
$t{$_}=$c{$_};
@@ -309,6 +328,20 @@ sub calc {
return '';
}
+sub templaterow {
+ my @cols=();
+ $cols[0]='Template';
+ map {
+ 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;
+}
+
sub outrowassess {
my $n=shift;
my @cols=();
@@ -332,7 +365,7 @@ sub outrow {
my $n=shift;
my @cols=();
if ($n) {
- $cols[0]=$rl{$f{'A'.$n}}.' stuff';
+ $cols[0]=$rl{$f{'A'.$n}};
} else {
$cols[0]='Export';
}
@@ -461,7 +494,12 @@ sub exportrow {
sub rown {
my ($safeeval,$n)=@_;
- my $defaultbg=((($n-1)/5)==int(($n-1)/5))?'#E0E0':'#FFFF';
+ my $defaultbg;
+ unless ($n eq '-') {
+ $defaultbg=((($n-1)/5)==int(($n-1)/5))?'#E0E0':'#FFFF';
+ } else {
+ $defaultbg='#E0FF';
+ }
my $rowdata="\n
$n | ";
my $showf=0;
my $proc;
@@ -473,6 +511,7 @@ sub rown {
$proc='&outrow';
$maxred=26;
}
+ if ($n eq '-') { $proc='&templaterow'; $n=-1; }
map {
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD');
my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_);
@@ -533,6 +572,7 @@ sub outsheet {
$tabledata.='
';
my $row;
my $maxrow=&getmaxrow($safeeval);
+ $tabledata.=&rown($safeeval,'-');
for ($row=0;$row<=$maxrow;$row++) {
$tabledata.=&rown($safeeval,$row);
}
@@ -546,7 +586,7 @@ sub outsheet {
sub readsheet {
my ($safeeval,$fn,$r)=@_;
my %f=();
- unless ($fn) {
+ if (($fn eq '') || ($fn=~/^default\_/)) {
my $sheetxml='';
{
my $fh;
@@ -563,6 +603,10 @@ sub readsheet {
$f{$token->[2]->{'col'}.$token->[2]->{'row'}}=
$parser->get_text('/field');
}
+ if ($token->[1] eq 'template') {
+ $f{'template_'.$token->[2]->{'col'}}=
+ $parser->get_text('/template');
+ }
}
}
&setfilename($safeeval,'default_'.&gettype($safeeval));
@@ -584,6 +628,7 @@ sub readsheet {
&Apache::lonnet::unescape($value);
} split(/\&/,$spreadsheets{$fn});
}
+
&setformulas($safeeval,%f);
}
@@ -605,14 +650,26 @@ sub writesheet {
&getfilename($safeeval).':'.
$sheetdata,
$ENV{'course.'.$ENV{'request.course.id'}.'.home'});
- }
+ if ($reply eq 'ok') {
+ return &Apache::lonnet::reply('put:'.
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':'.
+ &gettype($safeeval).'_spreadsheets:'.
+ &Apache::lonnet::escape(&getfilename($safeeval)).'='.
+ $ENV{'user.name'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+ } else {
+ return $reply;
+ }
+ }
+ return 'unauthorized';
}
# ----------------------------------------------- Make a temp copy of the sheet
sub tmpwrite {
my ($safeeval,$tmpdir,$symb)=@_;
- my $fn=$uname.'_'.$udom.'_spreadsheet_'.&getfilename($safeeval);
+ my $fn=$uname.'_'.$udom.'_spreadsheet_'.$symb.'_'.&getfilename($safeeval);
$fn=~s/\W/\_/g;
$fn=$tmpdir.$fn.'.tmp';
my $fh;
@@ -625,7 +682,7 @@ sub tmpwrite {
sub tmpread {
my ($safeeval,$tmpdir,$symb,$nfield,$nform)=@_;
- my $fn=$uname.'_'.$udom.'_spreadsheet_'.&getfilename($safeeval);
+ my $fn=$uname.'_'.$udom.'_spreadsheet_'.$symb.'_'.&getfilename($safeeval);
$fn=~s/\W/\_/g;
$fn=$tmpdir.$fn.'.tmp';
my $fh;
@@ -639,7 +696,7 @@ sub tmpread {
$fo{$name}=$value;
}
}
- $fo{$nfield}=$nform;
+ if ($nfield) { $fo{$nfield}=$nform; }
&setformulas($safeeval,%fo);
}
@@ -1062,11 +1119,12 @@ sub handler {
ENDSCRIPT
$r->print(''.
+ '
'.
+ 'LON-CAPA Spreadsheet
'.
'