version 1.121, 2002/10/22 13:13:15
|
version 1.122, 2002/10/22 13:29:57
|
Line 208 sub initsheet {
|
Line 208 sub initsheet {
|
$safeeval->deny(":base_io"); |
$safeeval->deny(":base_io"); |
$safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); |
$safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); |
$safehole->wrap(\&Apache::lonspreadsheet::mask,$safeeval,'&mask'); |
$safehole->wrap(\&Apache::lonspreadsheet::mask,$safeeval,'&mask'); |
$safehole->wrap(\&Apache::lonspreadsheet::templaterow,$safeeval,'&templaterow'); |
|
$safeeval->share('$@'); |
$safeeval->share('$@'); |
my $code=<<'ENDDEFS'; |
my $code=<<'ENDDEFS'; |
# ---------------------------------------------------- Inside of the safe space |
# ---------------------------------------------------- Inside of the safe space |
Line 945 sub calc {
|
Line 944 sub calc {
|
return ''; |
return ''; |
} |
} |
|
|
|
# ------------------------------------------- End of "Inside of the safe space" |
|
ENDDEFS |
|
$safeeval->reval($code); |
|
return $safeeval; |
|
} |
|
|
# |
# |
# This is actually used for the student spreadsheet, not the assessment sheet |
# This is actually used for the student spreadsheet, not the assessment sheet |
# Do not be fooled by the name! |
# Do not be fooled by the name! |
# |
# |
|
sub templaterow { |
|
my $sheet = shift; |
|
my @cols=(); |
|
$cols[0]='<b><font size=+1>Template</font></b>'; |
|
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=$sheet->{'f'}->{'template_'.$_}; |
|
$fm=~s/[\'\"]/\&\#34;/g; |
|
push(@cols,"'template_$_','$fm'".'___eq___'.$fm); |
|
} |
|
return @cols; |
|
} |
|
|
|
|
sub outrowassess { |
sub outrowassess { |
# $n is the current row number |
# $n is the current row number |
|
my $sheet = shift; |
my $n=shift; |
my $n=shift; |
my $csv = shift; |
my $csv = $ENV{'form.showcsv'}; |
my @cols=(); |
my @cols=(); |
if ($n) { |
if ($n) { |
my ($usy,$ufn)=split(/__&&&\__/,$f{'A'.$n}); |
my ($usy,$ufn)=split(/__&&&\__/,$sheet->{'f'}->{'A'.$n}); |
if ($rowlabel{$usy}) { |
if ($sheet->{'rowlabel'}->{$usy}) { |
$cols[0]=$rowlabel{$usy}; |
$cols[0]=$sheet->{'rowlabel'}->{$usy}; |
if (! $csv) { |
if (! $csv) { |
$cols[0].='<br>'. |
$cols[0].='<br>'. |
'<select name="sel_'.$n.'" onChange="changesheet('.$n.')">'. |
'<select name="sel_'.$n.'" onChange="changesheet('.$n.')">'. |
Line 967 sub outrowassess {
|
Line 989 sub outrowassess {
|
$cols[0]=''; |
$cols[0]=''; |
} |
} |
if (! $csv) { |
if (! $csv) { |
foreach (@os) { |
foreach (@{$sheet->{'othersheets'}}) { |
$cols[0].='<option name="'.$_.'"'; |
$cols[0].='<option name="'.$_.'"'; |
if ($ufn eq $_) { |
if ($ufn eq $_) { |
$cols[0].=' selected'; |
$cols[0].=' selected'; |
Line 983 sub outrowassess {
|
Line 1005 sub outrowassess {
|
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', |
'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', |
'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') { |
'n','o','p','q','r','s','t','u','v','w','x','y','z') { |
my $fm=$f{$_.$n}; |
my $fm=$sheet->{'f'}->{$_.$n}; |
$fm=~s/[\'\"]/\&\#34;/g; |
$fm=~s/[\'\"]/\&\#34;/g; |
push(@cols,"'$_$n','$fm'".'___eq___'.$sheet_values{$_.$n}); |
push(@cols,"'$_$n','$fm'".'___eq___'.$sheet->{'values'}->{$_.$n}); |
} |
} |
return @cols; |
return @cols; |
} |
} |
|
|
sub outrow { |
sub outrow { |
|
my $sheet=shift; |
my $n=shift; |
my $n=shift; |
my @cols=(); |
my @cols=(); |
if ($n) { |
if ($n) { |
$cols[0]=$rowlabel{$f{'A'.$n}}; |
$cols[0]=$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$n}}; |
} else { |
} else { |
$cols[0]='<b><font size=+1>Export</font></b>'; |
$cols[0]='<b><font size=+1>Export</font></b>'; |
} |
} |
Line 1002 sub outrow {
|
Line 1025 sub outrow {
|
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', |
'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', |
'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') { |
'n','o','p','q','r','s','t','u','v','w','x','y','z') { |
my $fm=$f{$_.$n}; |
my $fm=$sheet->{'f'}->{$_.$n}; |
$fm=~s/[\'\"]/\&\#34;/g; |
|
push(@cols,"'$_$n','$fm'".'___eq___'.$sheet_values{$_.$n}); |
|
} |
|
return @cols; |
|
} |
|
|
|
sub templaterow { |
|
my @cols=(); |
|
$cols[0]='<b><font size=+1>Template</font></b>'; |
|
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; |
$fm=~s/[\'\"]/\&\#34;/g; |
push(@cols,"'template_$_','$fm'".'___eq___'.$fm); |
push(@cols,"'$_$n','$fm'".'___eq___'.$sheet->{'values'}->{$_.$n}); |
} |
} |
return @cols; |
return @cols; |
} |
} |
|
|
|
|
# ------------------------------------------- End of "Inside of the safe space" |
|
ENDDEFS |
|
$safeeval->reval($code); |
|
return $safeeval; |
|
} |
|
|
|
|
|
# ------------------------------------------------ Add or change formula values |
# ------------------------------------------------ Add or change formula values |
sub setformulas { |
sub setformulas { |
my ($sheet)=shift; |
my ($sheet)=shift; |
Line 1040 sub setformulas {
|
Line 1041 sub setformulas {
|
# ------------------------------------------------ Add or change formula values |
# ------------------------------------------------ Add or change formula values |
sub setconstants { |
sub setconstants { |
my ($sheet)=shift; |
my ($sheet)=shift; |
|
my ($constants) = @_; |
|
if (! ref($constants)) { |
|
my %tmp = @_; |
|
$constants = \%tmp; |
|
} |
|
$sheet->{'constants'} = $constants; |
return %{$sheet->{'safe'}->varglob('c')}=%{$sheet->{'constants'}}; |
return %{$sheet->{'safe'}->varglob('c')}=%{$sheet->{'constants'}}; |
} |
} |
|
|
Line 1114 sub rown {
|
Line 1121 sub rown {
|
$rowdata.="\n".'"'.$n.'"'; |
$rowdata.="\n".'"'.$n.'"'; |
} |
} |
my $showf=0; |
my $showf=0; |
my $proc; |
# |
|
# Determine how many pink (uneditable) cells there are in this sheet. |
my $maxred=1; |
my $maxred=1; |
my $sheettype=$sheet->{'sheettype'}; |
my $sheettype=$sheet->{'sheettype'}; |
if ($sheettype eq 'studentcalc') { |
if ($sheettype eq 'studentcalc') { |
$proc='&outrowassess'; |
|
$maxred=26; |
$maxred=26; |
} else { |
} elsif ($sheettype eq 'assesscalc') { |
$proc='&outrow'; |
|
} |
|
if ($sheettype eq 'assesscalc') { |
|
$maxred=1; |
$maxred=1; |
} else { |
} else { |
$maxred=26; |
$maxred=26; |
} |
} |
if (&getfa($sheet,$n)=~/^[\~\-]/) { $maxred=1; } |
$maxred=1 if (&getfa($sheet,$n)=~/^[\~\-]/); |
|
# |
|
# Get the proper row |
|
my @rowdata; |
if ($n eq '-') { |
if ($n eq '-') { |
$proc='&templaterow'; |
@rowdata = &templaterow($sheet); |
$n=-1; |
$n=-1; |
$dataflag=1; |
$dataflag=1; |
|
} elsif ($sheettype eq 'studentcalc') { |
|
@rowdata = &outrowassess($sheet,$n); |
|
} else { |
|
@rowdata = &outrow($sheet,$n); |
} |
} |
foreach ($sheet->{'safe'}->reval($proc.'('.$n.','.$ENV{'form.showcsv'}.')')) { |
# |
|
foreach (@rowdata) { |
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); |
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); |
my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_); |
my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_); |
if ((($vl ne '') || ($vl eq '0')) && |
if ((($vl ne '') || ($vl eq '0')) && |
Line 1868 sub loadstudent {
|
Line 1880 sub loadstudent {
|
$cachedassess=''; |
$cachedassess=''; |
undef %cachedstores; |
undef %cachedstores; |
$sheet->{'f'} = \%f; |
$sheet->{'f'} = \%f; |
$sheet->{'constants'} = \%c; |
|
&setformulas($sheet); |
&setformulas($sheet); |
&setconstants($sheet); |
&setconstants($sheet,\%c); |
} |
} |
|
|
# --------------------------------------------------- Load data for one student |
# --------------------------------------------------- Load data for one student |
Line 1930 ENDPOP
|
Line 1941 ENDPOP
|
} |
} |
} |
} |
$sheet->{'f'}=\%f; |
$sheet->{'f'}=\%f; |
$sheet->{'constants'}=\%c; |
|
&setformulas($sheet); |
&setformulas($sheet); |
&setconstants($sheet); |
&setconstants($sheet,\%c); |
$r->print('<script>popwin.close()</script>'); |
$r->print('<script>popwin.close()</script>'); |
$r->rflush(); |
$r->rflush(); |
} |
} |
Line 2056 sub loadassessment {
|
Line 2066 sub loadassessment {
|
} |
} |
untie(%parmhash); |
untie(%parmhash); |
} |
} |
$sheet->{'constants'}=\%c; |
&setconstants($sheet,\%c); |
&setconstants($sheet); |
|
} |
} |
|
|
# --------------------------------------------------------- Various form fields |
# --------------------------------------------------------- Various form fields |