--- loncom/interface/Attic/lonspreadsheet.pm 2000/12/19 15:40:08 1.19 +++ loncom/interface/Attic/lonspreadsheet.pm 2000/12/30 19:59:18 1.21 @@ -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); } @@ -612,7 +657,7 @@ sub writesheet { 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 +670,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; @@ -1062,11 +1107,12 @@ sub handler { ENDSCRIPT $r->print(''. + ''. + '

LON-CAPA Spreadsheet

'. '
'. &hiddenfield('uname',$ENV{'form.uname'}). &hiddenfield('udom',$ENV{'form.udom'}). &hiddenfield('usymb',$ENV{'form.usymb'}). - &hiddenfield('ufn',$ENV{'form.ufn'}). &hiddenfield('unewfield',''). &hiddenfield('unewformula','')); } @@ -1087,6 +1133,7 @@ ENDSCRIPT $ENV{'form.unewfield'},$ENV{'form.unewformula'}); } else { &readsheet($sheetone,$ENV{'form.ufn'},$r); + $ENV{'form.ufn'}=&getfilename($sheetone); } # --------------------------------------------- See if all import rows uptodate @@ -1112,7 +1159,8 @@ ENDSCRIPT # ----------------------------------------------------- Print user, course, etc unless ($reroute) { - $r->print("User '$uname' at domain '$udom' for '". + $r->print(&hiddenfield('ufn',$ENV{'form.ufn'}). + "User '$uname' at domain '$udom' for '". $ENV{'course.'.$ENV{'request.course.id'}.'.description'}."'"); if ($csec) { $r->print(", group/section '$csec'");