--- loncom/interface/spreadsheet/Spreadsheet.pm 2006/01/10 16:38:47 1.61
+++ loncom/interface/spreadsheet/Spreadsheet.pm 2006/09/03 00:39:57 1.70
@@ -1,5 +1,5 @@
#
-# $Id: Spreadsheet.pm,v 1.61 2006/01/10 16:38:47 albertel Exp $
+# $Id: Spreadsheet.pm,v 1.70 2006/09/03 00:39:57 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -60,6 +60,9 @@ use HTML::TokeParser;
use Spreadsheet::WriteExcel;
use Time::HiRes;
use Apache::lonlocal;
+use lib '/home/httpd/lib/perl/';
+use LONCAPA;
+
##
## Package Variables
@@ -85,7 +88,7 @@ sub new {
my $class = ref($this) || $this;
my ($stype) = ($class =~ /Apache::(.*)$/);
#
- my ($name,$domain,$filename,$usymb)=@_;
+ my ($name,$domain,$filename,$usymb,$section,$groups)=@_;
if (defined($usymb) && ref($usymb)) {
$usymb = $usymb->symb;
}
@@ -95,10 +98,22 @@ sub new {
if (! defined($domain) || $domain eq '') {
$domain = $env{'user.domain'};
}
+ if (! defined($section) || $section eq '') {
+ $section = &Apache::lonnet::getsection($domain,$name,
+ $env{'request.course.id'});
+ }
+ if (! defined($groups)) {
+
+ my @usersgroups = &Apache::lonnet::get_users_groups($domain,$name,
+ $env{'request.course.id'});
+ $groups = \@usersgroups;
+ }
#
my $self = {
name => $name,
domain => $domain,
+ section => $section,
+ groups => $groups,
type => $stype,
symb => $usymb,
errorlog => '',
@@ -808,7 +823,7 @@ sub expandnamed {
$result.=$thissum.'+';
}
$result=~s/\+$//;
- return $result;
+ return '('.$result.')';
} else {
return 0;
}
@@ -1195,12 +1210,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);
@@ -1240,10 +1262,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;
@@ -1262,15 +1286,16 @@ sub html_template_row {
$row_html .= ''.
&html_uneditable_cell($cell,'#FFDDDD',$allowed).' | ';
} else {
- $row_html .= ''.
- &html_editable_cell($cell,'#EOFFDD',$allowed).' | ';
+ $row_html .= ''.
+ &html_editable_cell($cell,'#E0FFDD',$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)) {
@@ -1280,7 +1305,13 @@ 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';
@@ -1332,8 +1363,9 @@ sub html_row {
$row_html .= '';
$row_html .= &html_uneditable_cell($cell,'#FFDDDD');
} else {
- $row_html .= ' | ';
- $row_html .= &html_editable_cell($cell,'#E0FFDD',$allowed);
+ $row_html .= ' | ';
+ $row_html .= &html_editable_cell($cell,'#E0FFDD',$allowed,
+ $self->{outputmode} eq 'source');
}
$row_html .= ' | ';
}
@@ -1357,6 +1389,8 @@ sub output_options {
description => 'HTML'},
{value => 'excel',
description => 'Excel'},
+ {value => 'source',
+ description => 'Show Source'},
# {value => 'xml',
# description => 'XML'},
{value => 'csv',
@@ -1784,8 +1818,8 @@ sub save_tmp {
my %f = $self->formulas();
while( my ($cell,$formula) = each(%f)) {
next if ($formula eq 'import');
- print $fh &Apache::lonnet::escape($cell)."=".
- &Apache::lonnet::escape($formula)."\n";
+ print $fh &escape($cell)."=".
+ &escape($formula)."\n";
}
$fh->close();
}
@@ -1803,8 +1837,8 @@ sub load_tmp {
while (<$spreadsheet_file>) {
chomp;
my ($cell,$formula) = split(/=/);
- $cell = &Apache::lonnet::unescape($cell);
- $formula = &Apache::lonnet::unescape($formula);
+ $cell = &unescape($cell);
+ $formula = &unescape($formula);
$formulas{$cell} = $formula;
}
$spreadsheet_file->close();