Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 6e56204d

Von Jan Büren vor mehr als 13 Jahren hinzugefügt

Revert "Webdav-Komponente: Das Erstellen des Verzeichnisses ausgelagert. Ferner den Beleg auch in das Webdav-Verzeichnis kopieren."

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.

Unterschiede anzeigen:

SL/Common.pm
13 13

  
14 14
use Time::HiRes qw(gettimeofday);
15 15
use Data::Dumper;
16
use File::Copy;
17 16

  
18 17
use SL::DBUtils;
19 18

  
......
331 330
  $main::lxdebug->leave_sub();
332 331
}
333 332

  
334
#
335
# Legt ein entsprechendes Webdav-Verzeichnis an, falls
336
# Webdav als Option konfiguriert ist
337
#
338 333
sub webdav_folder {
339 334
  $main::lxdebug->enter_sub();
340 335

  
......
343 338
  return $main::lxdebug->leave_sub()
344 339
    unless ($::lx_office_conf{features}->{webdav} && $form->{id});
345 340

  
346
  my $path = get_webdav_folder($form); # ausgelagert, wg. D.R.Y.
341
  my ($path, $number);
347 342

  
348 343
  $form->{WEBDAV} = [];
349 344

  
350
  return $main::lxdebug->leave_sub() unless ($path);
345
  if ($form->{type} eq "sales_quotation") {
346
    ($path, $number) = ("angebote", $form->{quonumber});
347
  } elsif ($form->{type} eq "sales_order") {
348
    ($path, $number) = ("bestellungen", $form->{ordnumber});
349
  } elsif ($form->{type} eq "request_quotation") {
350
    ($path, $number) = ("anfragen", $form->{quonumber});
351
  } elsif ($form->{type} eq "purchase_order") {
352
    ($path, $number) = ("lieferantenbestellungen", $form->{ordnumber});
353
  } elsif ($form->{type} eq "sales_delivery_order") {
354
    ($path, $number) = ("verkaufslieferscheine", $form->{donumber});
355
  } elsif ($form->{type} eq "purchase_delivery_order") {
356
    ($path, $number) = ("einkaufslieferscheine", $form->{donumber});
357
  } elsif ($form->{type} eq "credit_note") {
358
    ($path, $number) = ("gutschriften", $form->{invnumber});
359
  } elsif ($form->{vc} eq "customer") {
360
    ($path, $number) = ("rechnungen", $form->{invnumber});
361
  } else {
362
    ($path, $number) = ("einkaufsrechnungen", $form->{invnumber});
363
  }
364

  
365
  return $main::lxdebug->leave_sub() unless ($path && $number);
366

  
367
  $number =~ s|[/\\]|_|g;
368

  
369
  $path = "webdav/${path}/${number}";
351 370

  
352 371
  if (!-d $path) {
353 372
    mkdir_with_parents($path);
......
554 573
  }
555 574
}
556 575

  
557
#
558
# Diese Routine baut aus dem Masken-Typ und der
559
# Beleg-Nummer, das entsprechende Webdav-Verzeichnis zusammen
560
# Nimmt leider noch die ganze Form entgegen und den if-elsif-Block
561
# sollte man schöner "dispatchen"
562
# Ergänzung 6.5.2011, den else-Zweig defensiver gestaltet und mit
563
# -1 als n.i.O. Rückgabewert versehen
564
#
565
sub get_webdav_folder {
566
  $main::lxdebug->enter_sub();
567

  
568
  my ($form) = @_;
569

  
570
  # TODO Ergänzung um check_params
571

  
572
  my ($path, $number);
573

  
574

  
575
  if ($form->{type} eq "sales_quotation") {
576
    ($path, $number) = ("angebote", $form->{quonumber});
577
  } elsif ($form->{type} eq "sales_order") {
578
    ($path, $number) = ("bestellungen", $form->{ordnumber});
579
  } elsif ($form->{type} eq "request_quotation") {
580
    ($path, $number) = ("anfragen", $form->{quonumber});
581
  } elsif ($form->{type} eq "purchase_order") {
582
    ($path, $number) = ("lieferantenbestellungen", $form->{ordnumber});
583
  } elsif ($form->{type} eq "sales_delivery_order") {
584
    ($path, $number) = ("verkaufslieferscheine", $form->{donumber});
585
  } elsif ($form->{type} eq "purchase_delivery_order") {
586
    ($path, $number) = ("einkaufslieferscheine", $form->{donumber});
587
  } elsif ($form->{type} eq "credit_note") {
588
    ($path, $number) = ("gutschriften", $form->{invnumber});
589
  } elsif ($form->{vc} eq "customer") {
590
    ($path, $number) = ("rechnungen", $form->{invnumber});
591
  } elsif ($form->{vc} eq "vendor") {
592
    ($path, $number) = ("einkaufsrechnungen", $form->{invnumber});
593
  } else {
594
    # wir befinden uns nicht in einer belegmaske
595
    # scheinbar wird diese routine auch bspw. bei waren
596
    # aufgerufen - naja, steuerung über Form.pm halt ...
597
    $main::lxdebug->leave_sub();
598
    return undef;
599
  }
600

  
601
  return $main::lxdebug->leave_sub() unless ($path && $number);
602

  
603
  $number =~ s|[/\\]|_|g;
604

  
605
  $path = "webdav/${path}/${number}";
606

  
607
  $main::lxdebug->leave_sub();
608

  
609
  return $path;
610

  
611
}
612

  
613
#
614
# Falls Webdav aktiviert ist, auch den generierten Beleg in das
615
# Webdav-Verzeichnis kopieren
616
#
617
#
618
sub copy_file_to_webdav_folder {
619
  $main::lxdebug->enter_sub();
620
  
621
  my ($form) = @_;  
622
  # leider die ganze form
623
  # da get_webdav_folder die auch noch benötigt
624
  # aber hier ein paar checks:
625
  # OFFEN: check_params kann ich ja nicht eine
626
  # abgespeckte $form übergeben, oder?
627
  $form->{type} = ''; 
628
  foreach my $item (qw(tmpdir tmpfile type)){
629
    if (!$form->{$item}){  # wahr, bei undef oder ''
630
      $main::lxdebug->message(0, 'Missing parameter'); 
631
      $main::form->error($main::locale->text("Missing parameter for webdav file copy"));
632
    }
633
  }
634

  
635
  # Den Webdav-Ordner ÜBER exakt denselben Mechanismus wie beim
636
  # Anlegen bestimmen
637
  # leider ist das auch das Kriterium, ob überhaupt ein "Anlegen"
638
  # erlaubt ist
639
  my $webdav_folder =  get_webdav_folder($form);
640

  
641
  # hier auch nochmal prüfen
642
  if (! $webdav_folder){
643
    $main::lxdebug->leave_sub();
644
    return undef; # s.o. erstmal so ...
645
    $main::form->error($main::locale->text("Cannot check correct webdav folder"));
646
  }
647

  
648
  if(!copy(join('/', $form->{tmpdir}, $form->{tmpfile}), join('/', $form->{cwd},  $webdav_folder))){ 
649
    my $j = join('/', $form->{tmpdir}, $form->{tmpfile});
650
    my $k = join('/', $form->{cwd},  $webdav_folder);
651
    $main::lxdebug->message(0, "Copy file from $j to $k failed");
652
    $main::form->error($main::locale->text("Copy file from #1 to #2 failed", $j, $k));
653
  }
654

  
655
  $main::lxdebug->leave_sub();
656
}
657

  
658 576
1;
SL/Form.pm
1204 1204
  local (*IN, *OUT);
1205 1205

  
1206 1206
  my $userspath = $::lx_office_conf{paths}->{userspath};
1207

  
1207 1208
  $self->{"cwd"} = getcwd();
1208 1209
  $self->{"tmpdir"} = $self->{cwd} . "/${userspath}";
1209 1210

  
......
1295 1296
    $result = $template->parse(*STDOUT);
1296 1297
  }
1297 1298

  
1298
  Common::copy_file_to_webdav_folder($self)  if ($self->{webdav});
1299 1299
  if (!$result) {
1300 1300
    $self->cleanup();
1301 1301
    $self->error("$self->{IN} : " . $template->get_error());

Auch abrufbar als: Unified diff