Diff for /loncom/interface/spreadsheet/Spreadsheet.pm between versions 1.5 and 1.10

version 1.5, 2003/05/23 19:36:04 version 1.10, 2003/05/28 17:38:57
Line 142  sub filename { Line 142  sub filename {
     if (@_) {      if (@_) {
         my ($newfilename) = @_;          my ($newfilename) = @_;
         if (! defined($newfilename) || $newfilename eq 'Default' ||          if (! defined($newfilename) || $newfilename eq 'Default' ||
             $newfilename !~ /\w/    || $newfilename =~ /\W/) {              $newfilename !~ /\w/) {
             my %tmphash = &Apache::lonnet::get('environment',              my %tmphash = &Apache::lonnet::get('environment',
                                                ['spreadsheet_default_'.                                                 ['spreadsheet_default_'.
                                                 $self->{'type'}],                                                  $self->{'type'}],
Line 152  sub filename { Line 152  sub filename {
             if ($tmp !~ /^(con_lost|error|no_such_host)/i) {              if ($tmp !~ /^(con_lost|error|no_such_host)/i) {
                 $newfilename=$tmphash{'spreadsheet_default_'.$self->{'type'}};                  $newfilename=$tmphash{'spreadsheet_default_'.$self->{'type'}};
             }              }
         }              if (! defined($newfilename) || 
         if (! defined($newfilename) ||                   $newfilename !~ /\w/   || 
               $newfilename !~ /\w/   ||                   $newfilename =~ /^\W*$/) {
               $newfilename =~ /^\W*$/) {                  $newfilename = 'default.'.$self->{'type'};
             $newfilename = 'default.'.$self->{'type'};              }
         } else {          } elsif ($newfilename !~ /^\/res\/.*\.spreadsheet/ &&
                    $newfilename !~ /^default\.$self->{'type'}$/ ) {
             my $regexp = '_'.$self->{'type'}.'$';              my $regexp = '_'.$self->{'type'}.'$';
             if ($newfilename !~ /$regexp/) {              if ($newfilename !~ /$regexp/) {
                 $newfilename .= '_'.$self->{'type'};                  $newfilename .= '_'.$self->{'type'};
Line 815  sub expandnamed { Line 816  sub expandnamed {
             push @matches,$parameter if ($parameter =~ /$expression/);              push @matches,$parameter if ($parameter =~ /$expression/);
         }          }
         if (scalar(@matches) == 0) {          if (scalar(@matches) == 0) {
             $returnvalue = 'unmatched parameter: '.$parameter;              $returnvalue = '""';#'"unmatched parameter: '.$parameter.'"';
         } elsif (scalar(@matches) == 1) {          } elsif (scalar(@matches) == 1) {
             # why do we not do this lookup here, instead of delaying it?              # why do we not do this lookup here, instead of delaying it?
             $returnvalue = '$c{\''.$matches[0].'\'}';              $returnvalue = '$c{\''.$matches[0].'\'}';
Line 831  sub expandnamed { Line 832  sub expandnamed {
         } else {          } else {
             # There was a negative number of matches, which indicates               # There was a negative number of matches, which indicates 
             # something is wrong with reality.  Better warn the user.              # something is wrong with reality.  Better warn the user.
             $returnvalue = 'bizzare parameter: '.$parameter;              $returnvalue = '"bizzare parameter: '.$parameter.'"';
         }          }
         return $returnvalue;          return $returnvalue;
     }      }
Line 1158  sub html_template_row { Line 1159  sub html_template_row {
     for (my $i = 0; $i<=$#rowdata; $i++) {      for (my $i = 0; $i<=$#rowdata; $i++) {
         my $cell = $rowdata[$i];          my $cell = $rowdata[$i];
         if ($i < $num_uneditable) {          if ($i < $num_uneditable) {
     $row_html .= '<td bgcolor="#DDCCFF">'.      $row_html .= '<td bgcolor="#FFDDDD">'.
                 &html_editable_cell($cell,'#DDCCFF',$allowed).'</td>';                  &html_uneditable_cell($cell,'#FFDDDD',$allowed).'</td>';
         } else {          } else {
     $row_html .= '<td bgcolor="#EOFFDD">'.      $row_html .= '<td bgcolor="#EOFFDD">'.
                 &html_editable_cell($cell,'#EOFFDD',$allowed).'</td>';                  &html_editable_cell($cell,'#EOFFDD',$allowed).'</td>';
Line 1342  sub outsheet_excel { Line 1343  sub outsheet_excel {
     return;      return;
 }  }
   
   #################################
   ## CSV output routines         ##
   #################################
   sub outsheet_csv   {
       my $self = shift;
       my ($r) = @_;
       my $csvdata = '';
       my @Values;
       #
       # Open the csv file
       my $filename = '/prtspool/'.
           $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
           time.'_'.rand(1000000000).'.csv';
       my $file;
       unless ($file = Apache::File->new('>'.'/home/httpd'.$filename)) {
           $r->log_error("Couldn't open $filename for output $!");
           $r->print("Problems occured in writing the csv file.  ".
                     "This error has been logged.  ".
                     "Please alert your LON-CAPA administrator.");
           $r->print("<pre>\n".$csvdata."</pre>\n");
           return 0;
       }
       #
       # Output the title information
       foreach my $value ($self->get_title()) {
           print $file "'".&Apache::loncommon::csv_translate($value)."'\n";
       }
       #
       # Output the body of the spreadsheet
       $self->csv_rows($file);
       #
       # Close the csv file
       close($file);
       $r->print('<br /><br />'.
                 '<a href="'.$filename.'">Your CSV spreadsheet.</a>'."\n");
       #
       return 1;
   }
   
   sub csv_output_row {
       my $self = shift;
       my ($filehandle,$rownum,@prepend) = @_;
       #
       my @rowdata = ();
       if (defined($rownum)) {
           @rowdata = $self->get_row($rownum);
       }
       my @output = ();
       foreach my $cell (@prepend,@rowdata) {
           my $value = $cell;
           $value = $cell->{'value'} if (ref($value));
           $value =~ s/\&nbsp;/ /gi;
           $value = "'".$value."'";
           push (@output,$value);
       }
       print $filehandle join(',',@output )."\n";
       return;
   }
   
 ############################################  ############################################
 ##          XML output routines           ##  ##          XML output routines           ##
 ############################################  ############################################
Line 1438  sub load { Line 1498  sub load {
                 $sheetxml='<field row="0" col="A"></field>';                  $sheetxml='<field row="0" col="A"></field>';
             }              }
             ($formulas,undef) = &parse_sheet(\$sheetxml);              ($formulas,undef) = &parse_sheet(\$sheetxml);
         } elsif($self->filename() =~ /^\/*\.spreadsheet$/) {          } elsif($self->filename() =~ /^\/res\/.*\.spreadsheet$/) {
             # Load a spreadsheet definition file              # Load a spreadsheet definition file
             my $sheetxml=&Apache::lonnet::getfile              my $sheetxml=&Apache::lonnet::getfile
                 (&Apache::lonnet::filelocation('',$filename));                  (&Apache::lonnet::filelocation('',$filename));
Line 1545  sub save { Line 1605  sub save {
   
 sub save_tmp {  sub save_tmp {
     my $self = shift;      my $self = shift;
     my $fn=$ENV{'user.name'}.'_'.      my $filename=$ENV{'user.name'}.'_'.
         $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'.          $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'.
            $self->{'filename'};             $self->{'filename'};
     $fn=~s/\W/\_/g;      $filename=~s/\W/\_/g;
     $fn=$Apache::lonnet::tmpdir.$fn.'.tmp';      $filename=$Apache::lonnet::tmpdir.$filename.'.tmp';
     $self->temporary(1);      $self->temporary(1);
     my $fh;      my $fh;
     if ($fh=Apache::File->new('>'.$fn)) {      if ($fh=Apache::File->new('>'.$filename)) {
         my %f = $self->formulas();          my %f = $self->formulas();
         while( my ($cell,$formula) = each(%f)) {          while( my ($cell,$formula) = each(%f)) {
             next if ($formula eq 'import');              next if ($formula eq 'import');
Line 1594  sub temporary { Line 1654  sub temporary {
     if (@_) {      if (@_) {
         ($self->{'temporary'})= @_;          ($self->{'temporary'})= @_;
     }      }
     $self->logthis('temporary = '.$self->{'temporary'});  
     return $self->{'temporary'};      return $self->{'temporary'};
 }  }
   

Removed from v.1.5  
changed lines
  Added in v.1.10


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>