excel download fixes, #21937, #20337, etc.
[freeside.git] / httemplate / search / elements / search-xls.html
index 26a51c4..bc844a5 100644 (file)
@@ -6,6 +6,8 @@ my $header = $args{'header'};
 my $rows   = $args{'rows'};
 my %opt    = %{ $args{'opt'} };    
 
+my $style  = $opt{'style'};
+
 my $override = scalar(@$rows) >= 65536 ? 'XLSX' : '';
 
 my $format = $FS::CurrentUser::CurrentUser->spreadsheet_format($override);
@@ -42,6 +44,12 @@ my $header_format = $workbook->add_format(
   bg_color => 55, #22,
   bottom   => 3,
 );
+my $footer_format = $workbook->add_format(
+  italic   => 1,
+  locked   => 1,
+  bg_color => 55,
+  top      => 3,
+);
 my $default_format = $workbook->add_format(locked => 0);
 
 my %money_format;
@@ -50,10 +58,24 @@ my $money_char = FS::Conf->new->config('money_char') || '$';
 my %date_format;
 xl_parse_date_init();
 
+my %bold_format;
+
 my $writer = sub {
   # Wrapper for $worksheet->write.
   # Do any massaging of the value/format here.
   my ($r, $c, $value, $format) = @_;
+  #warn "writer called with format $format\n";
+
+  if ( $style->[$c] eq 'b' or $value =~ /<b>/i ) { # the only one in common use
+    $value =~ s[</?b>][]ig;
+    if ( !exists($bold_format{$format}) ) {
+      $bold_format{$format} = $workbook->add_format();
+      $bold_format{$format}->copy($format);
+      $bold_format{$format}->set_bold();
+    }
+    $format = $bold_format{$format};
+  }
+
   # convert HTML entities
   # both Spreadsheet::WriteExcel and Excel::Writer::XLSX accept UTF-8 strings
   $value = decode_entities($value);
@@ -86,6 +108,7 @@ my $writer = sub {
     # String: replace line breaks with newlines
     $value =~ s/<BR>/\n/gi;
   }
+  #warn "writing with format $format\n";
   $worksheet->write($r, $c, $value, $format);
 };
 
@@ -140,7 +163,7 @@ if ( $opt{'footer'} ) {
     if ( ref($item) eq 'CODE' ) {
       $item = &{$item}();
     }
-    $writer->( $r, $c++, $item, $header_format );
+    $writer->( $r, $c++, $item, $footer_format );
   }
 }