Wenn DB existiert aber Basistabellen fehlen anständige Fehlermeldung anzeigen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 18 Jun 2013 10:49:37 +0000 (12:49 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 18 Jun 2013 10:49:48 +0000 (12:49 +0200)
SL/Controller/LoginScreen.pm
SL/User.pm
locale/de/all
templates/webpages/login_screen/basic_tables_missing.html [new file with mode: 0644]

index 50cae18..385ce6f 100644 (file)
@@ -65,17 +65,24 @@ sub action_login {
   # if we get an error back, bale out
   my $result = User->new(login => $::myconfig{login})->login($::form);
 
-  # Database update available?
-  ::end_of_request() if -2 == $result;
-
   # Auth DB needs update? If so log the user out forcefully.
-  if (-3 == $result) {
+  if (User::LOGIN_AUTH_DBUPDATE_AVAILABLE() == $result) {
     $::auth->destroy_session;
     return $self->render('login_screen/auth_db_needs_update');
   }
 
+  # Basic client tables available? If not tell the user to create them
+  # and log the user out forcefully.
+  if (User::LOGIN_BASIC_TABLES_MISSING() == $result) {
+    $::auth->destroy_session;
+    return $self->render('login_screen/basic_tables_missing');
+  }
+
+  # Database update available?
+  ::end_of_request() if User::LOGIN_DBUPDATE_AVAILABLE() == $result;
+
   # Other login errors.
-  if (0 > $result) {
+  if (User::LOGIN_OK() != $result) {
     $::auth->punish_wrong_login;
     return $self->show_login_form(error => $error);
   }
index daa0239..a278239 100644 (file)
@@ -48,6 +48,12 @@ use SL::System::InstallationLock;
 
 use strict;
 
+use constant LOGIN_OK                      =>  0;
+use constant LOGIN_BASIC_TABLES_MISSING    => -1;
+use constant LOGIN_DBUPDATE_AVAILABLE      => -2;
+use constant LOGIN_AUTH_DBUPDATE_AVAILABLE => -3;
+use constant LOGIN_GENERAL_ERROR           => -4;
+
 sub new {
   $main::lxdebug->enter_sub();
 
@@ -96,28 +102,31 @@ sub country_codes {
 sub login {
   my ($self, $form) = @_;
 
-  return -3 if !$self->{login} || !$::auth->client;
+  return LOGIN_GENERAL_ERROR() if !$self->{login} || !$::auth->client;
 
   my %myconfig = $main::auth->read_user(login => $self->{login});
 
+  # Auth DB upgrades available?
+  my $dbupdater_auth = SL::DBUpgrade2->new(form => $form, auth => 1)->parse_dbupdate_controls;
+  return LOGIN_AUTH_DBUPDATE_AVAILABLE() if $dbupdater_auth->unapplied_upgrade_scripts($::auth->dbconnect);
+
   # check if database is down
   my $dbh = $form->dbconnect_noauto;
 
   # we got a connection, check the version
   my ($dbversion) = $dbh->selectrow_array(qq|SELECT version FROM defaults|);
+  if (!$dbversion) {
+    $dbh->disconnect;
+    return LOGIN_BASIC_TABLES_MISSING();
+  }
 
   $self->create_schema_info_table($form, $dbh);
 
-  # Auth DB upgrades available?
-  my $dbupdater_auth = SL::DBUpgrade2->new(form => $form, auth => 1)->parse_dbupdate_controls;
-  return -3 if $dbupdater_auth->unapplied_upgrade_scripts($::auth->dbconnect);
-
-  my $dbupdater = SL::DBUpgrade2->new(form => $form)->parse_dbupdate_controls;
-
+  my $dbupdater        = SL::DBUpgrade2->new(form => $form)->parse_dbupdate_controls;
   my $update_available = $dbupdater->update2_available($dbh);
   $dbh->disconnect;
 
-  return 0 if !$update_available;
+  return LOGIN_OK() if !$update_available;
 
   $form->{$_} = $::auth->client->{$_} for qw(dbname dbhost dbport dbuser dbpasswd);
   $form->{$_} = $myconfig{$_}         for qw(datestyle);
@@ -147,7 +156,7 @@ sub login {
 
   print $form->parse_html_template("dbupgrade/footer");
 
-  return -2;
+  return LOGIN_DBUPDATE_AVAILABLE();
 }
 
 sub dbconnect_vars {
index 68aaed1..7a9b168 100755 (executable)
@@ -1973,6 +1973,7 @@ $self->{texts} = {
   '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.',
   'The base unit does not exist.' => 'Die Basiseinheit existiert nicht.',
   '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.',
+  'The basic client tables have not been created for this client\'s database yet.' => 'Die grundlegenden Mandantentabellen wurden in der für diesen Mandanten konfigurierten Datenbank noch nicht angelegt.',
   'The business has been created.' => 'Der Kunden-/Lieferantentyp wurde erfasst.',
   'The business has been deleted.' => 'Der Kunden-/Lieferantentyp wurde gelöscht.',
   'The business has been saved.' => 'Der Kunden-/Lieferantentyp wurde gespeichert.',
@@ -2126,6 +2127,7 @@ $self->{texts} = {
   'The wrong taxkeys for AP and AR transactions have been fixed.' => 'Die Probleme mit falschen Steuerschlüssel bei Kreditoren- und Debitorenbuchungen wurden behoben.',
   'The wrong taxkeys for inventory transactions for sales and purchase invoices have been fixed.' => 'Die falschen Steuerschlüssel für Warenbestandsbuchungen bei Einkaufs- und Verkaufsrechnungen wurden behoben.',
   'The wrong taxkeys have been fixed.' => 'Die Steuerschlüssel wurden nach Ihrer Auswahl korrigiert.',
+  'Then go to the database administration and chose "create database".' => 'Dann gehen Sie in den Datenbankverwaltung, und wählen Sie dort "Datenbank anlegen" aus.',
   'There are #1 more open invoices for this customer with other currencies.' => 'Es gibt #1 weitere offene Rechnungen für diesen Kunden, die in anderen Währungen ausgestellt wurden.',
   'There are #1 more open invoices from this vendor with other currencies.' => 'Es gibt #1 weitere offene Rechnungen von diesem Lieferanten, die in anderen Währungen ausgestellt wurden.',
   'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.',
@@ -2152,6 +2154,7 @@ $self->{texts} = {
   'There is not enough left of \'#1\' in bin \'#2\' for the removal of #3.' => 'In Lagerplatz \'#2\' ist nicht genug von \'#1\' vorhanden, um #3 zu entnehmen.',
   'There was an error executing the background job.' => 'Bei der Ausführung des Hintergrund-Jobs trat ein Fehler auf.',
   'There was an error parsing the csv file: #1 in line #2.' => 'Es gab einen Fehler beim Parsen der CSV Datei: "#1" in der Zeile "#2"',
+  'There you can let kivitendo create the basic tables for you, even in an already existing database.' => 'Dort können Sie kivitendo diese grundlegenden Tabellen erstellen lassen, selbst in einer bereits existierenden Datenbank.',
   'Therefore several settings that had to be made for each user in the past have been consolidated into the client configuration.' => 'Dazu wurden gewisse Einstellungen, die vorher bei jedem Benutzer vorgenommen werden mussten, in die Konfiguration eines Mandanten verschoben.',
   'Therefore the definition of "kg" with the base unit "g" and a factor of 1000 is valid while defining "g" with a base unit of "kg" and a factor of "0.001" is not.' => 'So ist die Definition von "kg" mit der Basiseinheit "g" und dem Faktor 1000 zulässig, die Definition von "g" mit der Basiseinheit "kg" und dem Faktor "0,001" hingegen nicht.',
   'These wrong entries cannot be fixed automatically.' => 'Diese Einträge können nicht automatisch bereinigt werden.',
diff --git a/templates/webpages/login_screen/basic_tables_missing.html b/templates/webpages/login_screen/basic_tables_missing.html
new file mode 100644 (file)
index 0000000..63fa121
--- /dev/null
@@ -0,0 +1,23 @@
+[%- USE LxERP %]
+
+ <p><b>[% LxERP.t8('Error!') %]</b></p>
+
+ <p>
+  [% LxERP.t8('The basic client tables have not been created for this client\'s database yet.') %]
+  [% LxERP.t8('Please log in to the administration panel.') %]
+  [% LxERP.t8('Then go to the database administration and chose "create database".') %]
+  [% LxERP.t8('There you can let kivitendo create the basic tables for you, even in an already existing database.') %]
+ </p>
+
+ <hr>
+ <p>
+  [% LxERP.t8('For further information read this: ') %] <a href="doc/html/index.html" target="_blank">kivitendo Installation</a><br>
+  [% LxERP.t8('Or download the whole Installation Documentation as PDF (350kB) for off-line study (currently in German Language): ') %] <a href="doc/kivitendo-Dokumentation.pdf" target="_blank">kivitendo-Dokumentation.pdf</a>
+ </p>
+
+ <hr>
+
+ <p>
+  <a href="controller.pl?action=LoginScreen/user_login" target="_top">[% LxERP.t8('Login') %]</a> |
+  <a href="controller.pl?action=Admin/login" target="_top">[% LxERP.t8('Administration') %]</a>
+ </p>