--- loncom/interface/spreadsheet/Spreadsheet.pm 2004/01/14 16:47:39 1.33 +++ loncom/interface/spreadsheet/Spreadsheet.pm 2005/03/10 17:33:57 1.40 @@ -1,5 +1,5 @@ # -# $Id: Spreadsheet.pm,v 1.33 2004/01/14 16:47:39 matthew Exp $ +# $Id: Spreadsheet.pm,v 1.40 2005/03/10 17:33:57 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -86,6 +86,15 @@ sub new { my ($stype) = ($class =~ /Apache::(.*)$/); # my ($name,$domain,$filename,$usymb)=@_; + if (defined($usymb) && ref($usymb)) { + $usymb = $usymb->symb; + } + if (! defined($name) || $name eq '') { + $name = $ENV{'user.name'}; + } + if (! defined($domain) || $domain eq '') { + $domain = $ENV{'user.domain'}; + } # my $self = { name => $name, @@ -307,6 +316,9 @@ Returns the safe space required by a Spr sub initialize_safe_space { my $self = shift; + my $usection = &Apache::lonnet::getsection($self->{'domain'}, + $self->{'name'}, + $ENV{'request.course.id'}); if (! defined($safeeval)) { $safeeval = new Safe(shift); my $safehole = new Safe::Hole; @@ -314,7 +326,7 @@ sub initialize_safe_space { $safeeval->permit(":base_math"); $safeeval->permit("sort"); $safeeval->deny(":base_io"); - $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); + $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&Apache::lonnet::EXT'); $safehole->wrap(\&mask,$safeeval,'&mask'); $safeeval->share('$@'); my $code=<<'ENDDEFS'; @@ -373,6 +385,25 @@ $errormsg = ''; =pod +=item EXT(parameter) + +Calls the system EXT function to determine the value of the given parameter. + +=cut + +#------------------------------------------------------- +sub EXT { + my ($parameter) = @_; + return '' if (! defined($parameter) || $parameter eq ''); + $parameter =~ s/^parameter\./resource\./; + my $value = &Apache::lonnet::EXT($parameter,$symb,$domain,$name,$usection); + return $value; +} + +#------------------------------------------------------- + +=pod + =item NUM(range) returns the number of items in the range. @@ -615,7 +646,6 @@ parametername should be a string such as sub MINPARM { my ($expression) = @_; my $min = undef; - study($expression); foreach $parameter (keys(%c)) { next if ($parameter !~ /$expression/); if ((! defined($min)) || ($min > $c{$parameter})) { @@ -640,7 +670,6 @@ parametername should be a string such as sub MAXPARM { my ($expression) = @_; my $max = undef; - study($expression); foreach $parameter (keys(%c)) { next if ($parameter !~ /$expression/); if ((! defined($min)) || ($max < $c{$parameter})) { @@ -692,10 +721,11 @@ ENDDEFS # Place some of the %$self items into the safe space except the safe space # itself my $initstring = ''; - foreach (qw/name domain type usymb cid csec coursefilename + foreach (qw/name domain type symb cid csec coursefilename cnum cdom chome uhome/) { $initstring.= qq{\$$_="$self->{$_}";}; } + $initstring.=qq{\$usection="$usection";}; $self->{'safe'}->reval($initstring); return $self; } @@ -846,7 +876,6 @@ sub expandnamed { my @matches = (); my @values = (); $#matches = -1; - study $expression; while (my($parameter,$value) = each(%{$self->{'constants'}})) { next if ($parameter !~ /$expression/); push(@matches,$parameter); @@ -1291,7 +1320,7 @@ sub html_editable_cell { } elsif ($value =~ /^\s*$/ ) { $value = '#'; } else { - $value = &HTML::Entities::encode($value) if ($value !~/ /); + $value = &HTML::Entities::encode($value,'<>&"') if ($value !~/ /); } return $value if (! $allowed); # @@ -1314,7 +1343,7 @@ sub html_editable_cell { sub html_uneditable_cell { my ($cell,$bgcolor) = @_; my $value = (defined($cell) ? $cell->{'value'} : ''); - $value = &HTML::Entities::encode($value) if ($value !~/ /); + $value = &HTML::Entities::encode($value,'<>&"') if ($value !~/ /); return ' '.$value.' '; } @@ -1404,31 +1433,6 @@ sub excel_output_row { return; } -sub create_excel_spreadsheet { - my $self = shift; - my ($r) = @_; - my $filename = '/prtspool/'. - $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. - time.'_'.rand(1000000000).'.xls'; - my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename); - if (! defined($workbook)) { - $r->log_error("Error creating excel spreadsheet $filename: $!"); - $r->print(&mt("Problems creating new Excel file. ". - "This error has been logged. ". - "Please alert your LON-CAPA administrator")); - return undef; - } - # - # The excel spreadsheet stores temporary data in files, then put them - # together. If needed we should be able to disable this (memory only). - # The temporary directory must be specified before calling 'addworksheet'. - # File::Temp is used to determine the temporary directory. - $workbook->set_tempdir('/home/httpd/perl/tmp'); - # - # Determine the name to give the worksheet - return ($workbook,$filename); -} - # # This routine is just a stub sub outsheet_htmlclasslist { @@ -1449,8 +1453,8 @@ sub outsheet_excel { # $r->print("

".&mt('Preparing Excel Spreadsheet')."

"); # - # Create excel worksheet - my ($workbook,$filename) = $self->create_excel_spreadsheet($r); + # Create excel workbook + my ($workbook,$filename,$format)=&Apache::loncommon::create_workbook($r); return if (! defined($workbook)); # # Create main worksheet @@ -1461,16 +1465,18 @@ sub outsheet_excel { # Write excel header foreach my $value ($self->get_title()) { $cols_output = 0; - $worksheet->write($rows_output++,$cols_output,$value); + $worksheet->write($rows_output++,$cols_output,$value,$format->{'h1'}); } $rows_output++; # skip a line # # Write summary/export row $cols_output = 0; - $self->excel_output_row($worksheet,0,$rows_output++,'Summary'); + $self->excel_output_row($worksheet,0,$rows_output++,'Summary', + $format->{'b'}); $rows_output++; # skip a line # - $self->excel_rows($connection,$worksheet,$cols_output,$rows_output); + $self->excel_rows($connection,$worksheet,$cols_output,$rows_output, + $format); # # # Close the excel file @@ -1557,7 +1563,7 @@ sub outsheet_xml { ## But not on this day my $Str = ''."\n"; while (my ($cell,$formula) = each(%{$self->{'formulas'}})) { - if ($cell =~ /^template_(\d+)/) { + if ($cell =~ /^template_(\w+)/) { my $col = $1; $Str .= ''."\n"; } else { @@ -1570,7 +1576,7 @@ sub outsheet_xml { } } $Str.=""; -# $r->print("
\n\n\n".$Str."\n\n\n
"); + $r->print("
\n\n\n".$Str."\n\n\n
"); return $Str; } @@ -1597,8 +1603,7 @@ sub parse_sheet { $formulas{$cell} = $formula; $sources{$cell} = $source if (defined($source)); $parser->get_text('/field'); - } - if ($token->[1] eq 'template') { + } elsif ($token->[1] eq 'template') { $formulas{'template_'.$token->[2]->{'col'}}= $parser->get_text('/template'); }