--- loncom/interface/spreadsheet/Spreadsheet.pm 2005/09/01 21:52:56 1.56
+++ loncom/interface/spreadsheet/Spreadsheet.pm 2006/02/27 00:56:47 1.62
@@ -1,5 +1,5 @@
#
-# $Id: Spreadsheet.pm,v 1.56 2005/09/01 21:52:56 albertel Exp $
+# $Id: Spreadsheet.pm,v 1.62 2006/02/27 00:56:47 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -378,10 +378,12 @@ Calls the system EXT function to determi
#-------------------------------------------------------
sub EXT {
- my ($parameter) = @_;
+ my ($parameter,$specific_symb) = @_;
return '' if (! defined($parameter) || $parameter eq '');
$parameter =~ s/^parameter\./resource\./;
- my $value = &Apache::lonnet::EXT($parameter,$symb,$domain,$name,$usection);
+ if ($specific_symb eq '') { $specific_symb = $symb; }
+ my $value = &Apache::lonnet::EXT($parameter,$specific_symb,$domain,$name,
+ $usection);
return $value;
}
@@ -697,7 +699,7 @@ sub get_values {
}
return \@values;
} else {
- $num = '(\d+)';
+ $num = '([1-9]\d*)';
}
if (($la eq '*') || ($ua eq '*')) {
$alpha='[A-z]';
@@ -1193,12 +1195,19 @@ sub display {
last;
}
}
+ $self->{outputmode} = $outputmode;
if ($outputmode eq 'html') {
$self->compute($r);
$self->outsheet_html($r);
} elsif ($outputmode eq 'htmlclasslist') {
# No computation neccessary... This is kludgy
$self->outsheet_htmlclasslist($r);
+ } elsif ($outputmode eq 'source') {
+ # No computation necessary. Rumor has it that this is some
+ # sort of kludge w.r.t. not "computing". It's also
+ # a bit of of a kludge that we call "outsheet_html" and
+ # let the 'outputmode' cause the outputting of source.
+ $self->outsheet_html($r);
} elsif ($outputmode eq 'excel') {
$self->compute($r);
$self->outsheet_excel($r);
@@ -1238,10 +1247,12 @@ sub html_export_row {
foreach my $cell (@rowdata) {
if ($cell->{'name'} =~ /^[A-Z]/) {
$row_html .= '
'.
- &html_editable_cell($cell,$color,$allowed).' | ';
+ &html_editable_cell($cell,$color,$allowed,
+ $self->{outputmode} eq 'source').'';
} else {
$row_html .= ''.
- &html_editable_cell($cell,'#DDCCFF',$allowed).' | ';
+ &html_editable_cell($cell,'#DDCCFF',$allowed,
+ $self->{outputmode} eq 'source').'';
}
}
return $row_html;
@@ -1261,14 +1272,15 @@ sub html_template_row {
&html_uneditable_cell($cell,'#FFDDDD',$allowed).'';
} else {
$row_html .= ''.
- &html_editable_cell($cell,'#EOFFDD',$allowed).' | ';
+ &html_editable_cell($cell,'#EOFFDD',$allowed,
+ $self->{outputmode} eq 'source').'';
}
}
return $row_html;
}
sub html_editable_cell {
- my ($cell,$bgcolor,$allowed) = @_;
+ my ($cell,$bgcolor,$allowed,$showsource) = @_;
my $result;
my ($name,$formula,$value);
if (defined($cell)) {
@@ -1278,7 +1290,15 @@ sub html_editable_cell {
}
$name = '' if (! defined($name));
$formula = '' if (! defined($formula));
- if (! defined($value)) {
+ if ($showsource)
+ {
+ if (!defined($formula) || $formula =~ /^\s*$/) {
+ $value = '#';
+ } else {
+ $value = &HTML::Entities::encode($formula, '<>&"');
+ }
+ }
+ elsif (! defined($value)) {
$value = '#';
if ($formula ne '') {
$value = 'undefined value';
@@ -1331,7 +1351,8 @@ sub html_row {
$row_html .= &html_uneditable_cell($cell,'#FFDDDD');
} else {
$row_html .= '';
- $row_html .= &html_editable_cell($cell,'#E0FFDD',$allowed);
+ $row_html .= &html_editable_cell($cell,'#E0FFDD',$allowed,
+ $self->{outputmode} eq 'source');
}
$row_html .= ' | ';
}
@@ -1355,6 +1376,8 @@ sub output_options {
description => 'HTML'},
{value => 'excel',
description => 'Excel'},
+ {value => 'source',
+ description => 'Show Source'},
# {value => 'xml',
# description => 'XML'},
{value => 'csv',
@@ -1623,7 +1646,7 @@ sub load {
$self->{'row_source'}=$spreadsheets{$cachekey}->{'row_source'};
$self->{'row_numbers'}=$spreadsheets{$cachekey}->{'row_numbers'};
$self->{'maxrow'}=$spreadsheets{$cachekey}->{'maxrow'};
- } else {
+ } else {
# Not cached, need to read
if (! defined($filename)) {
$formulas = $self->load_system_default_sheet();
@@ -1656,24 +1679,33 @@ sub load {
$formulas = $self->load_system_default_sheet();
}
}
- $filename=$self->filename(); # filename may have changed
- $cachekey = join('_',($cnum,$cdom,$stype,$filename));
- if (ref($formulas) eq 'HASH') {
- %{$spreadsheets{$cachekey}->{'formulas'}} = %{$formulas};
- }
$self->formulas($formulas);
$self->set_row_sources();
$self->set_row_numbers();
- if (ref($self->{'row_source'})) {
- %{$spreadsheets{$cachekey}->{'row_source'}} =
- %{$self->{'row_source'}};
- }
- if (ref($self->{'row_numbers'})) {
- %{$spreadsheets{$cachekey}->{'row_numbers'}} =
- %{$self->{'row_numbers'}};
- }
- $spreadsheets{$cachekey}->{'maxrow'} = $self->{'maxrow'};
+ $self->cache_sheet($formulas);
+ }
+}
+
+sub cache_sheet {
+ my $self = shift;
+ my ($formulas) = @_;
+ my $stype = $self->{'type'};
+ my $cnum = $self->{'cnum'};
+ my $cdom = $self->{'cdom'};
+ #
+ my $filename = $self->filename();
+ my $cachekey = join('_',($cnum,$cdom,$stype,$filename));
+
+ if (ref($formulas) eq 'HASH') {
+ %{$spreadsheets{$cachekey}->{'formulas'}} = %{$formulas};
+ }
+ if (ref($self->{'row_source'})) {
+ %{$spreadsheets{$cachekey}->{'row_source'}} =%{$self->{'row_source'}};
+ }
+ if (ref($self->{'row_numbers'})) {
+ %{$spreadsheets{$cachekey}->{'row_numbers'}}=%{$self->{'row_numbers'}};
}
+ $spreadsheets{$cachekey}->{'maxrow'} = $self->{'maxrow'};
}
sub set_row_sources {
@@ -1725,9 +1757,8 @@ sub save {
my $cnum = $self->{'cnum'};
my $cdom = $self->{'cdom'};
my $filename = $self->{'filename'};
- my $cachekey = join('_',($cnum,$cdom,$stype,$filename));
# Cache new sheet
- %{$spreadsheets{$cachekey}->{'formulas'}}=%f;
+ $self->cache_sheet(\%f);
# Write sheet
foreach (keys(%f)) {
delete($f{$_}) if ($f{$_} eq 'import');