package SL::Template::OpenDocument;
-use SL::Template::Simple;
+use parent qw(SL::Template::Simple);
use Archive::Zip;
+use Encode;
use POSIX 'setsid';
-use vars qw(@ISA);
use SL::Iconv;
# use File::Temp qw(:mktemp);
use IO::File;
-@ISA = qw(SL::Template::Simple);
-
use strict;
sub new {
my $self = $type->SUPER::new(@_);
$self->{"rnd"} = int(rand(1000000));
- $self->{"iconv"} = SL::Iconv->new($main::dbcharset, "UTF-8");
+ $self->{"iconv"} = SL::Iconv->new($::lx_office_conf{system}->{dbcharset}, "UTF-8");
$self->set_tag_style('<%', '%>');
$self->{quot_re} = '"';
my $ary = $self->_get_loop_variable($var, 1, @indices);
- for (my $i = 0; $i < scalar(@{$ary}); $i++) {
+ for (my $i = 0; $i < scalar(@{$ary || []}); $i++) {
$form->{"__first__"} = $i == 0;
$form->{"__last__"} = ($i + 1) == scalar(@{$ary});
$form->{"__odd__"} = (($i + 1) % 2) == 1;
$contents =~ m|^(.*?)(</table:table-row[^>]*>)|;
my $table_row = $1;
my $end_tag = $2;
- substr($contents, 0, length($1) + length($end_tag)) = "";
if ($table_row =~ m|\<\%foreachrow\s+(.*?)\%\>|) {
my $var = $1;
- substr($table_row, length($`), length($&)) = "";
+ $contents =~ m|\<\%foreachrow\s+.*?\%\>|;
+ substr($contents, length($`), length($&)) = "";
- my ($t1, $t2) = $self->find_end($table_row, length($`));
- if (!$t1) {
+ ($table_row, $contents) = $self->find_end($contents, length($`));
+ if (!$table_row) {
$self->{"error"} = "Unclosed <\%foreachrow\%>." unless ($self->{"error"});
$main::lxdebug->leave_sub();
return undef;
}
- my $new_text = $self->parse_foreach($var, $t1 . $t2, $tag, $end_tag, @indices);
+ $contents =~ m|^(.*?)(</table:table-row[^>]*>)|;
+ $table_row .= $1;
+ $end_tag = $2;
+
+ substr $contents, 0, length($&), '';
+
+ my $new_text = $self->parse_foreach($var, $table_row, $tag, $end_tag, @indices);
if (!defined($new_text)) {
$main::lxdebug->leave_sub();
return undef;
$new_contents .= $new_text;
} else {
+ substr($contents, 0, length($table_row) + length($end_tag)) = "";
my $new_text = $self->parse_block($table_row, @indices);
if (!defined($new_text)) {
$main::lxdebug->leave_sub();
return 0;
}
- my $contents = $zip->contents("content.xml");
+ my $contents = Encode::decode('utf-8-strict', $zip->contents("content.xml"));
if (!$contents) {
$self->{"error"} = "File is not a OpenDocument file.";
$main::lxdebug->leave_sub();
# $new_contents =~ s|>|>\n|g;
- $zip->contents("content.xml", $new_contents);
+ $zip->contents("content.xml", Encode::encode('utf-8-strict', $new_contents));
my $styles = $zip->contents("styles.xml");
if ($contents) {
my $pid = fork();
if (0 == $pid) {
$main::lxdebug->message(LXDebug->DEBUG2(), " Child execing\n");
- exec($main::xvfb_bin, $display, "-screen", "0", "640x480x8", "-nolisten", "tcp");
+ exec($::lx_office_conf{applications}->{xvfb}, $display, "-screen", "0", "640x480x8", "-nolisten", "tcp");
}
sleep(3);
$main::lxdebug->message(LXDebug->DEBUG2(), " parent dont sleeping\n");
local *OUT;
my $dfname = $self->{"userspath"} . "/xvfb_display";
- if (!open(OUT, ">$dfname")) {
+ if (!open(OUT, ">", $dfname)) {
$self->{"error"} = "Conversion to PDF failed because OpenOffice could not be started ($dfname: $!)";
unlink($xauthority);
kill($pid);
sub is_openoffice_running {
$main::lxdebug->enter_sub();
- my $output = `./scripts/oo-uno-test-conn.py $main::openofficeorg_daemon_port 2> /dev/null`;
+ my $cmd = "./scripts/oo-uno-test-conn.py " . $::lx_office_conf{print_templates}->{openofficeorg_daemon_port} . " 2> /dev/null";
+ my $output = `$cmd`;
chomp $output;
my $res = ($? == 0) || $output;
exit if ($new_pid);
my $ssres = setsid();
$main::lxdebug->message(LXDebug->DEBUG2(), " Child execing\n");
- my @cmdline = ($main::openofficeorg_writer_bin,
+ my @cmdline = ($::lx_office_conf{applications}->{openofficeorg_writer},
"-minimized", "-norestore", "-nologo", "-nolockcheck",
"-headless",
"-accept=socket,host=localhost,port=" .
- $main::openofficeorg_daemon_port . ";urp;");
+ $::lx_office_conf{print_templates}->{openofficeorg_daemon_port} . ";urp;");
exec(@cmdline);
}
}
my @cmdline;
- if (!$main::openofficeorg_daemon) {
- @cmdline = ($main::openofficeorg_writer_bin,
+ if (!$::lx_office_conf{print_templates}->{openofficeorg_daemon}) {
+ @cmdline = ($::lx_office_conf{applications}->{openofficeorg_writer},
"-minimized", "-norestore", "-nologo", "-nolockcheck",
"-headless",
"file:${filename}.odt",
}
@cmdline = ("./scripts/oo-uno-convert-pdf.py",
- $main::openofficeorg_daemon_port,
+ $::lx_office_conf{print_templates}->{openofficeorg_daemon_port},
"${filename}.odt");
}