From 6e56204df612176aa0300243483746f1b04c0a7c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20B=C3=BCren?= Date: Fri, 6 May 2011 18:52:28 +0200 Subject: [PATCH] Revert "Webdav-Komponente: Das Erstellen des Verzeichnisses ausgelagert. Ferner den Beleg auch in das Webdav-Verzeichnis kopieren." MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This reverts commit 4cb3ecfd6f144901ed89dae7acafdf1c124c53f4. Svens Anmerkungen: > Hehe, ich check die ein, da die Erweiterung sowieso nur die webdav- > komponente betrifft. ansonsten reverte ich direkt, falls du anders > denkst. Ich denke anders, wie immer. - schonwieder deutsche Kommentare *grrr* - return $main::lxdebug->leave_sub() unless ($path); <- solche kontrukte liefern 1 zurück (ich hab das irgendwann mal auf definiert 1 gesetzt nachdem vorher alles mögliche bei rauskommen konnte). Wenn dann benutz lieber sowas: $::lxdebug->leave_sub && return unless $path; - copy_file_to_webdav_folder setzt $form->{type} auf '' und stirbt anschliessend auf die Bedingung !$form->{type}. Das soll wahrscheinlich nicht so sein oder? - Nicht jede print Operation hat tmpfiles. Im schlimmsten Fall hast Du damit n directory traversal eingebaut, das musst Du unbedingt dreifach prüfen und nicht einfach aus form holen. Sonst schreibt einer einfach tmpdir=/etc&&tmpfile=passwd in die URL. Und zu Deinem ursprünglichen Problem: Ich vermute das liegt an der Positionierung in parse_template. Die Funktion ist ziemlich destruktiv geschrieben, die macht halt form kaputt um was druckbares zu produzieren. Lass Dir mal form dunpen, ich vermute dass da schon irgendwas kaputt ist. Die Fehlermeldung funktioniert in der Konsole einwandfrei. --- SL/Common.pm | 134 ++++++++++----------------------------------------- SL/Form.pm | 2 +- 2 files changed, 27 insertions(+), 109 deletions(-) diff --git a/SL/Common.pm b/SL/Common.pm index 8cf4e85cf..dae75322f 100644 --- a/SL/Common.pm +++ b/SL/Common.pm @@ -13,7 +13,6 @@ use strict; use Time::HiRes qw(gettimeofday); use Data::Dumper; -use File::Copy; use SL::DBUtils; @@ -331,10 +330,6 @@ sub mkdir_with_parents { $main::lxdebug->leave_sub(); } -# -# Legt ein entsprechendes Webdav-Verzeichnis an, falls -# Webdav als Option konfiguriert ist -# sub webdav_folder { $main::lxdebug->enter_sub(); @@ -343,11 +338,35 @@ sub webdav_folder { return $main::lxdebug->leave_sub() unless ($::lx_office_conf{features}->{webdav} && $form->{id}); - my $path = get_webdav_folder($form); # ausgelagert, wg. D.R.Y. + my ($path, $number); $form->{WEBDAV} = []; - return $main::lxdebug->leave_sub() unless ($path); + if ($form->{type} eq "sales_quotation") { + ($path, $number) = ("angebote", $form->{quonumber}); + } elsif ($form->{type} eq "sales_order") { + ($path, $number) = ("bestellungen", $form->{ordnumber}); + } elsif ($form->{type} eq "request_quotation") { + ($path, $number) = ("anfragen", $form->{quonumber}); + } elsif ($form->{type} eq "purchase_order") { + ($path, $number) = ("lieferantenbestellungen", $form->{ordnumber}); + } elsif ($form->{type} eq "sales_delivery_order") { + ($path, $number) = ("verkaufslieferscheine", $form->{donumber}); + } elsif ($form->{type} eq "purchase_delivery_order") { + ($path, $number) = ("einkaufslieferscheine", $form->{donumber}); + } elsif ($form->{type} eq "credit_note") { + ($path, $number) = ("gutschriften", $form->{invnumber}); + } elsif ($form->{vc} eq "customer") { + ($path, $number) = ("rechnungen", $form->{invnumber}); + } else { + ($path, $number) = ("einkaufsrechnungen", $form->{invnumber}); + } + + return $main::lxdebug->leave_sub() unless ($path && $number); + + $number =~ s|[/\\]|_|g; + + $path = "webdav/${path}/${number}"; if (!-d $path) { mkdir_with_parents($path); @@ -554,105 +573,4 @@ sub check_params_x { } } -# -# Diese Routine baut aus dem Masken-Typ und der -# Beleg-Nummer, das entsprechende Webdav-Verzeichnis zusammen -# Nimmt leider noch die ganze Form entgegen und den if-elsif-Block -# sollte man schöner "dispatchen" -# Ergänzung 6.5.2011, den else-Zweig defensiver gestaltet und mit -# -1 als n.i.O. Rückgabewert versehen -# -sub get_webdav_folder { - $main::lxdebug->enter_sub(); - - my ($form) = @_; - - # TODO Ergänzung um check_params - - my ($path, $number); - - - if ($form->{type} eq "sales_quotation") { - ($path, $number) = ("angebote", $form->{quonumber}); - } elsif ($form->{type} eq "sales_order") { - ($path, $number) = ("bestellungen", $form->{ordnumber}); - } elsif ($form->{type} eq "request_quotation") { - ($path, $number) = ("anfragen", $form->{quonumber}); - } elsif ($form->{type} eq "purchase_order") { - ($path, $number) = ("lieferantenbestellungen", $form->{ordnumber}); - } elsif ($form->{type} eq "sales_delivery_order") { - ($path, $number) = ("verkaufslieferscheine", $form->{donumber}); - } elsif ($form->{type} eq "purchase_delivery_order") { - ($path, $number) = ("einkaufslieferscheine", $form->{donumber}); - } elsif ($form->{type} eq "credit_note") { - ($path, $number) = ("gutschriften", $form->{invnumber}); - } elsif ($form->{vc} eq "customer") { - ($path, $number) = ("rechnungen", $form->{invnumber}); - } elsif ($form->{vc} eq "vendor") { - ($path, $number) = ("einkaufsrechnungen", $form->{invnumber}); - } else { - # wir befinden uns nicht in einer belegmaske - # scheinbar wird diese routine auch bspw. bei waren - # aufgerufen - naja, steuerung über Form.pm halt ... - $main::lxdebug->leave_sub(); - return undef; - } - - return $main::lxdebug->leave_sub() unless ($path && $number); - - $number =~ s|[/\\]|_|g; - - $path = "webdav/${path}/${number}"; - - $main::lxdebug->leave_sub(); - - return $path; - -} - -# -# Falls Webdav aktiviert ist, auch den generierten Beleg in das -# Webdav-Verzeichnis kopieren -# -# -sub copy_file_to_webdav_folder { - $main::lxdebug->enter_sub(); - - my ($form) = @_; - # leider die ganze form - # da get_webdav_folder die auch noch benötigt - # aber hier ein paar checks: - # OFFEN: check_params kann ich ja nicht eine - # abgespeckte $form übergeben, oder? - $form->{type} = ''; - foreach my $item (qw(tmpdir tmpfile type)){ - if (!$form->{$item}){ # wahr, bei undef oder '' - $main::lxdebug->message(0, 'Missing parameter'); - $main::form->error($main::locale->text("Missing parameter for webdav file copy")); - } - } - - # Den Webdav-Ordner ÜBER exakt denselben Mechanismus wie beim - # Anlegen bestimmen - # leider ist das auch das Kriterium, ob überhaupt ein "Anlegen" - # erlaubt ist - my $webdav_folder = get_webdav_folder($form); - - # hier auch nochmal prüfen - if (! $webdav_folder){ - $main::lxdebug->leave_sub(); - return undef; # s.o. erstmal so ... - $main::form->error($main::locale->text("Cannot check correct webdav folder")); - } - - if(!copy(join('/', $form->{tmpdir}, $form->{tmpfile}), join('/', $form->{cwd}, $webdav_folder))){ - my $j = join('/', $form->{tmpdir}, $form->{tmpfile}); - my $k = join('/', $form->{cwd}, $webdav_folder); - $main::lxdebug->message(0, "Copy file from $j to $k failed"); - $main::form->error($main::locale->text("Copy file from #1 to #2 failed", $j, $k)); - } - - $main::lxdebug->leave_sub(); -} - 1; diff --git a/SL/Form.pm b/SL/Form.pm index 8a4ecbf8d..b3a3e23df 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -1204,6 +1204,7 @@ sub parse_template { local (*IN, *OUT); my $userspath = $::lx_office_conf{paths}->{userspath}; + $self->{"cwd"} = getcwd(); $self->{"tmpdir"} = $self->{cwd} . "/${userspath}"; @@ -1295,7 +1296,6 @@ sub parse_template { $result = $template->parse(*STDOUT); } - Common::copy_file_to_webdav_folder($self) if ($self->{webdav}); if (!$result) { $self->cleanup(); $self->error("$self->{IN} : " . $template->get_error()); -- 2.20.1