Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 68d46d38

Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt

  • ID 68d46d3841e7306f2aeb4e3e19d88b7e8f712053
  • Vorgänger 68ca5cc3
  • Nachfolger 7b2faca4

Funktionen hinzugefügt, mit denen man ein Datenbankbackup mit Hilfe von "pg_restore" wieder einspielen kann. Dabei muss das Backup mit "pg_dump -Ft" erzegut worden sein, so wie es die eigene Backup-Funktion auch tut.

Unterschiede anzeigen:

bin/mozilla/admin.pl
48 48
use SL::Common;
49 49
use SL::Inifile;
50 50
use SL::DBUpgrade2;
51
use SL::DBUtils;
51 52

  
52 53
require "bin/mozilla/common.pl";
53 54

  
......
90 91

  
91 92
  # create memberfile
92 93
  if (!-f $memberfile) {
93
    open(FH, ">$memberfile") or $form->error("$memberfile : $!");
94
    open(FH, ">$memberfile") or $form->error("$memberfile : $ERRNO");
94 95
    print FH qq|# SQL-Ledger Accounting members
95 96

  
96 97
[root login]
......
125 126

  
126 127
  $form->error($locale->text('File locked!')) if (-f "${memberfile}.LCK");
127 128

  
128
  open(FH, "$memberfile") or $form->error("$memberfile : $!");
129
  open(FH, "$memberfile") or $form->error("$memberfile : $ERRNO");
129 130

  
130 131
  my %members;
131 132

  
......
220 221
    $form->error(sprintf($locale->text("The directory %s does not exist."), $templates));
221 222
  }
222 223

  
223
  opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $!");
224
  opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $ERRNO");
224 225
  my @all     = readdir(TEMPLATEDIR);
225 226
  my @alldir  = sort grep { -d "$templates/$_" && !/^\.\.?$/ } @all;
226 227
  my @allhtml = sort grep { -f "$templates/$_" && /\.html$/ } @all;
......
258 259
  my @acsorder = ();
259 260
  my %acs      = ();
260 261
  my %excl     = ();
261
  open(FH, $menufile) or $form->error("$menufile : $!");
262
  open(FH, $menufile) or $form->error("$menufile : $ERRNO");
262 263

  
263 264
  while ($item = <FH>) {
264 265
    next unless $item =~ /\[/;
......
393 394
          }
394 395
          close(HTACCESS);
395 396
        }
396
        open(HTACCESS, "> $file") or die "cannot open $file $!\n";
397
        open(HTACCESS, "> $file") or die "cannot open $file $ERRNO\n";
397 398
        $newfile .= $myconfig->{login} . ":" . $myconfig->{password} . "\n";
398 399
        print(HTACCESS $newfile);
399 400
        close(HTACCESS);
......
408 409
          }
409 410
          close(HTACCESS);
410 411
        }
411
        open(HTACCESS, "> $file") or die "cannot open $file $!\n";
412
        open(HTACCESS, "> $file") or die "cannot open $file $ERRNO\n";
412 413
        print(HTACCESS $newfile);
413 414
        close(HTACCESS);
414 415
      }
......
428 429
      umask(007);
429 430

  
430 431
      # copy templates to the directory
431
      opendir TEMPLATEDIR, "$templates/." or $form - error("$templates : $!");
432
      opendir TEMPLATEDIR, "$templates/." or $form - error("$templates : $ERRNO");
432 433
      @templates = grep /$form->{mastertemplates}.*?\.(html|tex|sty|xml|txb)$/,
433 434
        readdir TEMPLATEDIR;
434 435
      closedir TEMPLATEDIR;
435 436

  
436 437
      foreach $file (@templates) {
437 438
        open(TEMP, "$templates/$file")
438
          or $form->error("$templates/$file : $!");
439
          or $form->error("$templates/$file : $ERRNO");
439 440

  
440 441
        $file =~ s/$form->{mastertemplates}-//;
441 442
        open(NEW, ">$form->{templates}/$file")
442
          or $form->error("$form->{templates}/$file : $!");
443
          or $form->error("$form->{templates}/$file : $ERRNO");
443 444

  
444 445
        while ($line = <TEMP>) {
445 446
          print NEW $line;
......
448 449
        close(NEW);
449 450
      }
450 451
    } else {
451
      $form->error("$!: $form->{templates}");
452
      $form->error("$ERRNO: $form->{templates}");
452 453
    }
453 454
  }
454 455

  
......
458 459

  
459 460
sub delete {
460 461
  $form->error($locale->text('File locked!')) if (-f ${memberfile} . LCK);
461
  open(FH, ">${memberfile}.LCK") or $form->error("${memberfile}.LCK : $!");
462
  open(FH, ">${memberfile}.LCK") or $form->error("${memberfile}.LCK : $ERRNO");
462 463
  close(FH);
463 464

  
464 465
  my $members = Inifile->new($memberfile);
......
632 633

  
633 634
  $form->{CHARTS} = [];
634 635

  
635
  opendir SQLDIR, "sql/." or $form - error($!);
636
  opendir SQLDIR, "sql/." or $form - error($ERRNO);
636 637
  foreach $item (sort grep /-chart\.sql\z/, readdir SQLDIR) {
637 638
    next if ($item eq 'Default-chart.sql');
638 639
    $item =~ s/-chart\.sql//;
......
743 744
  $form->isblank("to", $locale->text('The email address is missing.')) if $form->{destination} eq "email";
744 745

  
745 746
  my $tmpdir = "/tmp/lx_office_backup_" . Common->unique_id();
746
  mkdir $tmpdir, 0700 || $form->error($locale->text('A temporary directory could not be created:') . " $!");
747
  mkdir $tmpdir, 0700 || $form->error($locale->text('A temporary directory could not be created:') . " $ERRNO");
747 748

  
748 749
  my $pgpass = IO::File->new("${tmpdir}/.pgpass", O_WRONLY | O_CREAT, 0600);
749 750

  
750 751
  if (!$pgpass) {
751 752
    unlink $tmpdir;
752
    $form->error($locale->text('A temporary file could not be created:') . " $!");
753
    $form->error($locale->text('A temporary file could not be created:') . " $ERRNO");
753 754
  }
754 755

  
755 756
  print $pgpass "$form->{dbhost}:$form->{dbport}:$form->{dbname}:$form->{dbuser}:$form->{dbpasswd}\n";
......
823 824
    . $locale->text('Database Administration') . " / "
824 825
    . $locale->text('Restore Dataset');
825 826

  
826
  if ("$pg_dump_exe" eq "DISABLED") {
827
  if ("$pg_restore_exe" eq "DISABLED") {
827 828
    $form->error($locale->text('Database backups and restorations are disabled in lx-erp.conf.'));
828 829
  }
830

  
831
  my $default_charset   = $dbcharset;
832
  $default_charset    ||= Common::DEFAULT_CHARSET;
833

  
834
  $form->{DBENCODINGS}  = [];
835

  
836
  foreach my $encoding (@Common::db_encodings) {
837
    push @{ $form->{DBENCODINGS} }, { "dbencoding" => $encoding->{dbencoding},
838
                                      "label"      => $encoding->{label},
839
                                      "selected"   => $encoding->{charset} eq $default_charset };
840
  }
841

  
842
  $form->header();
843
  print $form->parse_html_template("admin/restore_dataset");
844
}
845

  
846
sub restore_dataset_start {
847
  $form->{title} =
848
      "Lx-Office ERP "
849
    . $locale->text('Database Administration') . " / "
850
    . $locale->text('Restore Dataset');
851

  
852
  $pg_restore_exe ||= "pg_restore";
853

  
854
  if ("$pg_restore_exe" eq "DISABLED") {
855
    $form->error($locale->text('Database backups and restorations are disabled in lx-erp.conf.'));
856
  }
857

  
858
  $form->isblank("new_dbname", $locale->text('The dataset name is missing.'));
859
  $form->isblank("content", $locale->text('No backup file has been uploaded.'));
860

  
861
  # Create temporary directories. Write the backup file contents to a temporary
862
  # file. Create a .pgpass file with the username and password for the pg_restore
863
  # utility.
864

  
865
  my $tmpdir = "/tmp/lx_office_backup_" . Common->unique_id();
866
  mkdir $tmpdir, 0700 || $form->error($locale->text('A temporary directory could not be created:') . " $ERRNO");
867

  
868
  my $pgpass = IO::File->new("${tmpdir}/.pgpass", O_WRONLY | O_CREAT, 0600);
869

  
870
  if (!$pgpass) {
871
    unlink $tmpdir;
872
    $form->error($locale->text('A temporary file could not be created:') . " $ERRNO");
873
  }
874

  
875
  print $pgpass "$form->{dbhost}:$form->{dbport}:$form->{new_dbname}:$form->{dbuser}:$form->{dbpasswd}\n";
876
  $pgpass->close();
877

  
878
  $ENV{HOME} = $tmpdir;
879

  
880
  my $tmp = $tmpdir . "/dump_" . Common::unique_id();
881
  my $tmpfile;
882

  
883
  if (substr($form->{content}, 0, 2) eq "\037\213") {
884
    $tmpfile = IO::File->new("| gzip -d > $tmp");
885
    $tmpfile->binary();
886

  
887
  } else {
888
    $tmpfile = IO::File->new($tmp, O_WRONLY | O_CREAT | O_BINARY, 0600);
889
  }
890

  
891
  if (!$tmpfile) {
892
    unlink "${tmpdir}/.pgpass";
893
    rmdir $tmpdir;
894

  
895
    $form->error($locale->text('A temporary file could not be created:') . " $ERRNO");
896
  }
897

  
898
  print $tmpfile $form->{content};
899
  $tmpfile->close();
900

  
901
  delete $form->{content};
902

  
903
  # Try to connect to the database. Find out if a database with the same name exists.
904
  # If yes, then drop the existing database. Create a new one with the name and encoding
905
  # given by the user.
906

  
907
  User::dbconnect_vars($form, "template1");
908

  
909
  my %myconfig = map { $_ => $form->{$_} } grep /^db/, keys %{ $form };
910
  my $dbh      = $form->dbconnect(\%myconfig) || $form->dberror();
911

  
912
  my ($query, $sth);
913

  
914
  $form->{new_dbname} =~ s|[^a-zA-Z0-9_\-]||g;
915

  
916
  $query = qq|SELECT COUNT(*) FROM pg_database WHERE datname = ?|;
917
  my ($count) = selectrow_query($form, $dbh, $query, $form->{new_dbname});
918
  if ($count) {
919
    do_query($form, $dbh, qq|DROP DATABASE $form->{new_dbname}|);
920
  }
921

  
922
  my $found = 0;
923
  foreach my $item (@Common::db_encodings) {
924
    if ($item->{dbencoding} eq $form->{dbencoding}) {
925
      $found = 1;
926
      last;
927
    }
928
  }
929
  $form->{dbencoding} = "LATIN9" unless $form->{dbencoding};
930

  
931
  do_query($form, $dbh, qq|CREATE DATABASE $form->{new_dbname} ENCODING ? TEMPLATE template0|, $form->{dbencoding});
932

  
933
  $dbh->disconnect();
934

  
935
  # Spawn pg_restore on the temporary file.
936

  
937
  my @args = ("-h", $form->{dbhost}, "-U", $form->{dbuser}, "-d", $form->{new_dbname});
938
  push @args, ("-p", $form->{dbport}) if ($form->{dbport});
939
  push @args, $tmp;
940

  
941
  my $cmd = "${pg_restore_exe} " . join(" ", map { s/\\/\\\\/g; s/\"/\\\"/g; $_ } @args);
942

  
943
  my $in = IO::File->new("$cmd 2>&1 |");
944

  
945
  if (!$in) {
946
    unlink "${tmpdir}/.pgpass", $tmp;
947
    rmdir $tmpdir;
948

  
949
    $form->error($locale->text('The pg_restore process could not be started.'));
950
  }
951

  
952
  $AUTOFLUSH = 1;
953

  
954
  $form->header();
955
  print $form->parse_html_template("admin/restore_dataset_start_header");
956

  
957
  while (my $line = <$in>) {
958
    print $line;
959
  }
960
  $in->close();
961

  
962
  $form->{retval} = $CHILD_ERROR >> 8;
963
  print $form->parse_html_template("admin/restore_dataset_start_footer");
964

  
965
  unlink "${tmpdir}/.pgpass", $tmp;
966
  rmdir $tmpdir;
829 967
}
830 968

  
831 969
sub unlock_system {
locale/de/admin
45 45
  'No Database Drivers available!' => 'Kein Datenbanktreiber verf?gbar!',
46 46
  'No Dataset selected!'        => 'Keine Datenbank ausgew?hlt!',
47 47
  'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden',
48
  'No backup file has been uploaded.' => 'Es wurde keine Sicherungsdatei hochgeladen.',
48 49
  'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgew?hlt.',
49 50
  'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.',
50 51
  'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.',
......
84 85
  'The login is missing.'       => 'Das Login fehlt.',
85 86
  'The passwords do not match.' => 'Die Passw&ouml;rter stimmen nicht &uuml;berein.',
86 87
  'The pg_dump process could not be started.' => 'Der pg_dump-Prozess konnte nicht gestartet werden.',
88
  'The pg_restore process could not be started.' => 'Der pg_restore-Prozess konnte nicht gestartet werden.',
87 89
  'Trying to call a sub without a name' => 'Es wurde versucht, eine Unterfunktion ohne Namen aufzurufen.',
88 90
  'Unit'                        => 'Einheit',
89 91
  'Unknown dependency \'%s\'.'  => 'Unbekannte Abh&auml;ngigkeit \'%s\'.',
......
143 145
  'project_selection_internal'  => 'project_selection_internal',
144 146
  'reformat_numbers'            => 'reformat_numbers',
145 147
  'restore_dataset'             => 'restore_dataset',
148
  'restore_dataset_start'       => 'restore_dataset_start',
146 149
  'restore_form'                => 'restore_form',
147 150
  'save'                        => 'save',
148 151
  'save_form'                   => 'save_form',
locale/de/all
169 169
  'BWA'                         => 'BWA',
170 170
  'Back'                        => 'Zur&uuml;ck',
171 171
  'Backup Dataset'              => 'Datenbank sichern',
172
  'Backup file'                 => 'Sicherungsdatei',
172 173
  'Backup of dataset'           => 'Sicherung der Datenbank',
173 174
  'Balance'                     => 'Bilanz',
174 175
  'Balance Sheet'               => 'Bilanz',
......
329 330
  'Database update error:'      => 'Fehler beim Datenbankupgrade:',
330 331
  'Dataset'                     => 'Datenbank',
331 332
  'Dataset missing!'            => 'Datenbank fehlt!',
333
  'Dataset name'                => 'Datenbankname',
332 334
  'Dataset upgrade'             => 'Datenbankaktualisierung',
333 335
  'Date'                        => 'Datum',
334 336
  'Date Format'                 => 'Datumsformat',
......
489 491
  'February'                    => 'Februar',
490 492
  'Fee'                         => 'Geb?hr',
491 493
  'File locked!'                => 'Datei gesperrt!',
494
  'Files created by Lx-Office\'s &quot;Backup Dataset&quot; function are such files.' => 'Dateien, die von Lx-Office\' Funktion &quot;Datenbank sichern&quot; erstellt wurden, erf&uuml;llen diese Kriterien.',
492 495
  'Folgekonto'                  => 'Folgekonto',
493 496
  'For each unit there\'s either no or exactly one base unit. If you chose a base unit then you also have to chose a factor. That way the new unit will be defined as a multiple of the base unit. The base unit must be the &quot;smaller&quot; one. A factor may not be less than 1. Therefore you may define &quot;kg&quot; with the base unit &quot;g&quot; and a factor of &quot;1&quot;, but not the other way round.' => 'Einheiten haben entweder keine oder genau eine Basiseinheit, von der sie ein Vielfaches sind. Wenn Sie eine Basiseinheit ausw&auml;hlen, dann m&uuml;ssen Sie auch einen Faktor eingeben. Sie m&uuml;ssen Einheiten als ein Vielfaches einer kleineren Einheit eingeben. So ist die Definition von &quot;kg&quot; mit der Basiseinheit &quot;g&quot; und dem Faktor 1000 zul&auml;ssig, die Definition von &quot;g&quot; mit der Basiseinheit &quot;kg&quot; und dem Faktor &quot;0,001&quot; hingegen nicht.',
494 497
  'Foreign Exchange Gain'       => 'Wechselkursertr?ge',
......
581 584
  'Is this a summary account to record' => 'Buchungskonto in',
582 585
  'It is possible to do this automatically for some Buchungsgruppen, but not for all.' => 'Es ist m&ouml;glich, dies f&uuml;r einige, aber nicht f&uuml;r alle Buchungsgruppen automatisch zu erledigen.',
583 586
  'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => 'Das ist f&uuml;r einige Einheiten automatisch m&ouml;glich, aber bei anderen muss der Benutzer die neue Einheit ausw&auml;hlen.',
587
  'It may optionally be compressed with &quot;gzip&quot;.' => 'Sie darf optional mit &quot;gzip&quot; komprimiert sein.',
584 588
  'Item deleted!'               => 'Artikel gel?scht!',
585 589
  'Item not on file!'           => 'Dieser Artikel ist nicht in der Datenbank!',
586 590
  'Jan'                         => 'Jan',
......
704 708
  'No Database Drivers available!' => 'Kein Datenbanktreiber verf?gbar!',
705 709
  'No Dataset selected!'        => 'Keine Datenbank ausgew?hlt!',
706 710
  'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden',
711
  'No backup file has been uploaded.' => 'Es wurde keine Sicherungsdatei hochgeladen.',
707 712
  'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgew?hlt.',
708 713
  'No databases have been found on this server.' => 'Auf diesem Server wurden keine Datenbanken gefunden.',
709 714
  'No datasets have been selected.' => 'Es wurden keine Datenbanken ausgew&auml;hlt.',
......
801 806
  'Pick List'                   => 'Sammelliste',
802 807
  'Please enter a license key.' => 'Bitte geben Sie einen Lizenzschl?ssel an.',
803 808
  'Please enter a number of licenses.' => 'Bitte geben Sie die Anzahl Lizenzschl?ssel an.',
809
  'Please enter the name of the dataset you want to restore the backup in.' => 'Bitte geben Sie den Namen der Datenbank ein, in der Sie die Sicherung wiederherstellen wollen.',
804 810
  'Please enter values'         => 'Bitte Werte eingeben',
805 811
  'Please insert object dimensions below.' => 'Bitte geben Sie die Abmessungen unten ein',
806 812
  'Please insert your language values below' => 'Bitte die ?bersetzungen unten eintragen',
......
1041 1047
  'Templates'                   => 'Vorlagen',
1042 1048
  'Terms missing in row '       => '+Tage fehlen in Zeile ',
1043 1049
  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.',
1050
  'The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.' => 'Die von Ihnen hochzuladende Sicherungsdatei muss mit dem Programm und den Parametern &quot;pg_dump -o -Ft&quot; erstellt worden sein.',
1044 1051
  'The base unit does not exist or it is about to be deleted in row %d.' => 'Die Basiseinheit in Zeile %d existiert nicht oder soll gel&ouml;scht werden.',
1045 1052
  'The base unit does not exist.' => 'Die Basiseinheit existiert nicht.',
1046 1053
  'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.' => 'Die Beziehungen der Einheiten d&uuml;rfen keine Schleifen beinhalten (z.B. wenn gesagt wird, dass Einheit As Basiseinheit B, Bs Basiseinheit C und Cs Basiseinheit A ist) in Zeile %d.',
......
1050 1057
  'The database upgrade for the introduction of units is now complete.' => 'Das Datenbankupgrade zwecks Einf&uuml;hrung von Einheiten ist nun beendet.',
1051 1058
  'The dataset <TMPL_VAR db ESCAPE=HTML> has been successfully created.' => 'Die Datenbank <TMPL_VAR db ESCAPE=HTML> wurde erfolgreich erstellt.',
1052 1059
  'The dataset backup has been sent via email to <TMPL_VAR to ESCAPE=HTML>.' => 'Die Datenbanksicherung wurde an <TMPL_VAR to ESCAPE=HTML> per Email verschickt.',
1060
  'The dataset has to exist before a restoration can be started.' => 'Die Datenbank muss vor der Wiederherstellung bereits angelegt worden sein.',
1053 1061
  'The dataset name is missing.' => 'Der Datenbankname fehlt.',
1054 1062
  'The directory %s does not exist.' => 'Das Verzeichnis %s existiert nicht.',
1055 1063
  'The dunning process started' => 'Der Mahnprozess ist gestartet.',
......
1070 1078
  'The name is missing.'        => 'Der Name fehlt.',
1071 1079
  'The passwords do not match.' => 'Die Passw&ouml;rter stimmen nicht &uuml;berein.',
1072 1080
  'The pg_dump process could not be started.' => 'Der pg_dump-Prozess konnte nicht gestartet werden.',
1081
  'The pg_restore process could not be started.' => 'Der pg_restore-Prozess konnte nicht gestartet werden.',
1073 1082
  'The preferred one is to install packages provided by your operating system distribution (e.g. Debian or RPM packages).' => 'Die bevorzugte Art, ein Perl-Modul zu installieren, ist durch Installation eines von Ihrem Betriebssystem zur Verf&uuml;gung gestellten Paketes (z.B. Debian-Pakete oder RPM).',
1083
  'The program\'s exit code was <TMPL_VAR retval ESCAPE=HTML> (&quot;0&quot; usually means that everything went OK).' => 'Der Exitcode des Programms war <TMPL_VAR retval ESCAPE=HTML> (&quot;0&quot; bedeutet normalerweise, dass die Wiederherstellung erfolgreich war).',
1084
  'The restoration process has started. Here\'s the output of the &quot;pg_restore&quot; command:' => 'Der Wiederherstellungsprozess wurde gestartet. Hier ist die Ausgabe des &quot;pg_restore&quot;-Programmes:',
1085
  'The restoration process is complete. Please review &quot;pg_restore&quot;\'s output to find out if the restoration was successful.' => 'Die Wiederherstellung ist abgeschlossen. Bitte sehen Sie sich die Ausgabe von &quot;pg_restore&quot; an, um festzustellen, ob die Wiederherstellung erfolgreich war.',
1074 1086
  'The second way is to use Perl\'s CPAN module and let it download and install the module for you.' => 'Die zweite Variante besteht darin, Perls CPAN-Modul zu benutzen und es das Modul f&uuml;r Sie installieren zu lassen.',
1075 1087
  'The third way is to download the module from the above mentioned URL and to install the module manually following the installations instructions contained in the source archive.' => 'Die dritte Variante besteht darin, das Paket von der oben genannten URL herunterzuladen und es manuell zu installieren. Beachten Sie dabei die im Paket enthaltenen Installationsanweisungen.',
1076 1088
  'The unit has been saved.'    => 'Die Einheit wurde gespeichert.',
......
1187 1199
  'Yes'                         => 'Ja',
1188 1200
  'You are logged out!'         => 'Auf Wiedersehen!',
1189 1201
  'You can also create new units now.' => 'Sie k&ouml;nnen jetzt auch neue Einheiten anlegen.',
1202
  'You can create a missing dataset by going back and chosing &quot;Create Dataset&quot;.' => 'Sie k&ouml;nnen eine fehlende Datenbank erstellen, indem Sie jetzt zu&uuml;ck gehen und den Punkt &quot;Datenbank anlegen&quot; w&auml;hlen.',
1190 1203
  'You can only delete datasets that are not in use.' => 'Sie k&ouml;nnen nur Datenbanken l&ouml;schen, die momentan nicht in Benutzung sind.',
1191 1204
  'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.' => 'Sie k&ouml;nnen im Langtext und allen ?bersetzungen die folgenden Variablen benutzen, die vor der Ausgabe von Lx-Office automatisch ersetzt werden:',
1192 1205
  'You cannot continue before all required modules are installed.' => 'Sie k&ouml;nnen nicht fortfahren, bevor alle ben&ouml;tigten Pakete installiert sind.',
lx-erp.conf
1 1
use Cwd;
2
use vars qw($userspath $spool $memberfile $templates $sendmail $language $sid $latex $eur $webdav $lizenzen $pg_dump_exe $watch_form_variables);
2
use vars qw($userspath $spool $memberfile $templates $sendmail $language $sid $latex $eur $webdav $lizenzen $pg_dump_exe $pg_restore_exe $watch_form_variables);
3 3

  
4 4
# path to user configuration files
5 5
$userspath = "users";
......
70 70
# Datenbankbackups werden mit dem externen Programm "pg_dump" erledigt.
71 71
# Wenn es nicht im aktuellen Pfad vorhanden ist, so muss hier der vollst?ndige
72 72
# Pfad eingetragen werden. Wenn die Variable auf "DISABLED" gesetzt wird,
73
# so werden die Men?punkte zum Backup und Wiederherstellen von Datenbanken
74
# im Administrationsfrontend nicht angeboten.
75
$pg_dump_exe = "pg_dump";
73
# so wird der Men?punkt zum Backup von Datenbanken im Administrationsfrontend
74
# nicht angeboten.
75
# Das gleiche gilt analog f?r das Wiederherstellen mittels "pg_restore".
76
$pg_dump_exe    = "pg_dump";
77
$pg_restore_exe = "pg_restore";
76 78

  
77 79
# Globale Debug-Ausgaben (de-)aktivieren? Moegliche Werte sind
78 80
# LXDebug::NONE   - keine Debugausgaben
templates/webpages/admin/dbadmin_de.html
57 57
      <input type="submit" class="submit" name="action" value="Datenbank l?schen">
58 58
      <TMPL_IF ALLOW_DBBACKUP>
59 59
       <input type="submit" class="submit" name="action" value="Datenbank sichern">
60
<!--        <input type="submit" class="submit" name="action" value="Datenbank wiederherstellen"> -->
60
       <input type="submit" class="submit" name="action" value="Datenbank wiederherstellen">
61 61
      </TMPL_IF>
62 62
     </td>
63 63
    </tr>
templates/webpages/admin/dbadmin_master.html
57 57
      <input type="submit" class="submit" name="action" value="<translate>Delete Dataset</translate>">
58 58
      <TMPL_IF ALLOW_DBBACKUP>
59 59
       <input type="submit" class="submit" name="action" value="<translate>Backup Dataset</translate>">
60
<!--        <input type="submit" class="submit" name="action" value="<translate>Restore Dataset</translate>"> -->
60
       <input type="submit" class="submit" name="action" value="<translate>Restore Dataset</translate>">
61 61
      </TMPL_IF>
62 62
     </td>
63 63
    </tr>
templates/webpages/admin/restore_dataset_de.html
1
<body class="admin" onload="document.getElementsByName('dbname')[0].focus(); ">
2

  
3
 <h2><TMPL_VAR title></h2>
4

  
5
 <form name="Form" method="post" action="admin.pl" enctype="multipart/form-data">
6

  
7
  <input type="hidden" name="dbdriver" value="Pg">
8
  <input type="hidden" name="dbhost" value="<TMPL_VAR dbhost ESCAPE=HTML>">
9
  <input type="hidden" name="dbport" value="<TMPL_VAR dbport ESCAPE=HTML>">
10
  <input type="hidden" name="dbuser" value="<TMPL_VAR dbuser ESCAPE=HTML>">
11

  
12
  <p>
13
   Bitte geben Sie den Namen der Datenbank ein, in der Sie die Sicherung wiederherstellen wollen.
14
   Die Datenbank muss vor der Wiederherstellung bereits angelegt worden sein.
15
   Sie k&ouml;nnen eine fehlende Datenbank erstellen, indem Sie jetzt zu&uuml;ck gehen und den Punkt &quot;Datenbank anlegen&quot; w&auml;hlen.
16
  </p>
17

  
18
  <p>
19
   Die von Ihnen hochzuladende Sicherungsdatei muss mit dem Programm und den Parametern &quot;pg_dump -o -Ft&quot; erstellt worden sein.
20
   Sie darf optional mit &quot;gzip&quot; komprimiert sein.
21
   Dateien, die von Lx-Office' Funktion &quot;Datenbank sichern&quot; erstellt wurden, erf&uuml;llen diese Kriterien.
22
  </p>
23

  
24
  <table>
25
   <tr>
26
    <td valign="top">Datenbankname</td>
27
    <td valign="top"><input name="new_dbname"></td>
28
   </tr>
29

  
30
   <tr>
31
    <th valign="top">Schriftsatz</th>
32
    <td>
33
     <select name="dbencoding">
34
      <TMPL_LOOP DBENCODINGS><option value="<TMPL_VAR dbencoding ESCAPE=HTML>" <TMPL_IF selected>selected</TMPL_IF>><TMPL_VAR label ESCAPE=HTML></option></TMPL_LOOP>
35
     </select>
36
    </td>
37
   </tr>
38

  
39
   <tr>
40
    <td valign="top">Sicherungsdatei</td>
41
    <td valign="top"><input type="file" accept="*" name="content"></td>
42
   </tr>
43
  </table>
44

  
45
  <input type="hidden" name="rpw" value="<TMPL_VAR rpw ESCAPE=HTML>">
46
  <input type="hidden" name="nextsub" value="restore_dataset_start">
47

  
48
  <hr size="3" noshade>
49

  
50
  <br>
51

  
52
  <input type="submit" class="submit" name="action" value="Weiter">
53

  
54
 </form>
55

  
56
</body>
57
</html>
templates/webpages/admin/restore_dataset_master.html
1
<body class="admin" onload="document.getElementsByName('dbname')[0].focus(); ">
2

  
3
 <h2><TMPL_VAR title></h2>
4

  
5
 <form name="Form" method="post" action="admin.pl" enctype="multipart/form-data">
6

  
7
  <input type="hidden" name="dbdriver" value="Pg">
8
  <input type="hidden" name="dbhost" value="<TMPL_VAR dbhost ESCAPE=HTML>">
9
  <input type="hidden" name="dbport" value="<TMPL_VAR dbport ESCAPE=HTML>">
10
  <input type="hidden" name="dbuser" value="<TMPL_VAR dbuser ESCAPE=HTML>">
11

  
12
  <p>
13
   <translate>Please enter the name of the dataset you want to restore the backup in.</translate>
14
   <translate>The dataset has to exist before a restoration can be started.</translate>
15
   <translate>You can create a missing dataset by going back and chosing &quot;Create Dataset&quot;.</translate>
16
  </p>
17

  
18
  <p>
19
   <translate>The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.</translate>
20
   <translate>It may optionally be compressed with &quot;gzip&quot;.</translate>
21
   <translate>Files created by Lx-Office's &quot;Backup Dataset&quot; function are such files.</translate>
22
  </p>
23

  
24
  <table>
25
   <tr>
26
    <td valign="top"><translate>Dataset name</translate></td>
27
    <td valign="top"><input name="new_dbname"></td>
28
   </tr>
29

  
30
   <tr>
31
    <th valign="top"><translate>Multibyte Encoding</translate></th>
32
    <td>
33
     <select name="dbencoding">
34
      <TMPL_LOOP DBENCODINGS><option value="<TMPL_VAR dbencoding ESCAPE=HTML>" <TMPL_IF selected>selected</TMPL_IF>><TMPL_VAR label ESCAPE=HTML></option></TMPL_LOOP>
35
     </select>
36
    </td>
37
   </tr>
38

  
39
   <tr>
40
    <td valign="top"><translate>Backup file</translate></td>
41
    <td valign="top"><input type="file" accept="*" name="content"></td>
42
   </tr>
43
  </table>
44

  
45
  <input type="hidden" name="rpw" value="<TMPL_VAR rpw ESCAPE=HTML>">
46
  <input type="hidden" name="nextsub" value="restore_dataset_start">
47

  
48
  <hr size="3" noshade>
49

  
50
  <br>
51

  
52
  <input type="submit" class="submit" name="action" value="<translate>Continue</translate>">
53

  
54
 </form>
55

  
56
</body>
57
</html>
templates/webpages/admin/restore_dataset_start_footer_de.html
1
 </pre>
2

  
3
 <hr>
4

  
5
 <p>
6
  Die Wiederherstellung ist abgeschlossen. Bitte sehen Sie sich die Ausgabe von &quot;pg_restore&quot; an, um festzustellen, ob die Wiederherstellung erfolgreich war.
7
  Der Exitcode des Programms war <TMPL_VAR retval ESCAPE=HTML> (&quot;0&quot; bedeutet normalerweise, dass die Wiederherstellung erfolgreich war).
8
 </p>
9

  
10
 <form method="post" action="admin.pl">
11
  <input type="hidden" name="nextsub" value="list_users">
12
  <input type="submit" name="action" value="Weiter">
13
 </form>
14
</body>
15
</html>
templates/webpages/admin/restore_dataset_start_footer_master.html
1
 </pre>
2

  
3
 <hr>
4

  
5
 <p>
6
  <translate>The restoration process is complete. Please review &quot;pg_restore&quot;'s output to find out if the restoration was successful.</translate>
7
  <translate>The program's exit code was <TMPL_VAR retval ESCAPE=HTML> (&quot;0&quot; usually means that everything went OK).</translate>
8
 </p>
9

  
10
 <form method="post" action="admin.pl">
11
  <input type="hidden" name="nextsub" value="list_users">
12
  <input type="submit" name="action" value="<translate>Continue</translate>">
13
 </form>
14
</body>
15
</html>
templates/webpages/admin/restore_dataset_start_header_de.html
1
<body class="admin">
2

  
3
 <h2><TMPL_VAR title></h2>
4

  
5
 <p>Der Wiederherstellungsprozess wurde gestartet. Hier ist die Ausgabe des &quot;pg_restore&quot;-Programmes:</p>
6

  
7
 <hr>
8

  
9
 <pre>
templates/webpages/admin/restore_dataset_start_header_master.html
1
<body class="admin">
2

  
3
 <h2><TMPL_VAR title></h2>
4

  
5
 <p><translate>The restoration process has started. Here's the output of the &quot;pg_restore&quot; command:</translate></p>
6

  
7
 <hr>
8

  
9
 <pre>

Auch abrufbar als: Unified diff