Projekt

Allgemein

Profil

Fehler #578

Admin-Oberfläche: Fehler beim Anlegen eines Benutzers

Von Bernd Bleßmann vor fast 2 Jahren hinzugefügt. Vor mehr als 1 Jahr aktualisiert.

Status:
Erledigt
Priorität:
Normal
Zugewiesen an:
Zielversion:
-
Beginn:
17.03.2023
Abgabedatum:
% erledigt:

100%

Geschätzter Aufwand:

Beschreibung

Fehler: Can't call method "selectrow_array" on an undefined value at /var/www/kivitendo-bernd/SL/Controller/Admin.pm line 793.

Der Fehler tritt auf, wenn die Client-Datenbank noch nicht konfiguriert ist, da dann der Check, ob es den Benutzer schon mal gab, nicht funktioniert.

Meiner Meinung nach muss entweder die Funktion prüfen, ob es die Client-DB überhaupt gibt oder die Maske muss das Anlegen der Client-DB erzwingen (und das Vorhandensein prüfen) bevor der Benutzer angelegt wird.

Historie

#1

Von Bernd Bleßmann vor mehr als 1 Jahr aktualisiert

Der Fehler tritt auch auf, wenn für einen Mandanten die Client-DB nicht mehr existiert.

#2

Von Cem Aydin vor mehr als 1 Jahr aktualisiert

  • Zugewiesen an wurde auf Cem Aydin gesetzt

Muss ich mir gelegentlich anschauen. Ich hatte das gesehen aber es war mir dann untergegangen..

Ich würde prüfen ob die Datenbank vorhanden ist, weiß aber noch nicht genau wie ich das machen kann.

#3

Von Bernd Bleßmann vor mehr als 1 Jahr aktualisiert

Bernd Bleßmann schrieb:

Der Fehler tritt auch auf, wenn für einen Mandanten die Client-DB nicht mehr existiert.

Cem Aydin schrieb:

Muss ich mir gelegentlich anschauen. Ich hatte das gesehen aber es war mir dann untergegangen..

Ich würde prüfen ob die Datenbank vorhanden ist, weiß aber noch nicht genau wie ich das machen kann.

Ich habe testweise mal das probiert:

--- a/SL/Controller/Admin.pm
+++ b/SL/Controller/Admin.pm
@@ -169,6 +169,8 @@ sub action_save_user {
       my $timestamp = $now->format_cldr('yyyyMMddHHmmss');

       my $dbh = $client->dbconnect(AutoCommit => 1);
+      next if !$dbh;
+
       $dbh->do(qq|UPDATE employee SET login = ? WHERE login = ?;|,undef,
                $params->{'login'} . $timestamp, $params->{'login'});
       $dbh->disconnect;
@@ -789,6 +791,8 @@ sub check_loginname_previously_used() {
   my $clients = SL::DB::Manager::AuthClient->get_all_sorted;
   for my $client (@$clients) {
     my $dbh = $client->dbconnect();
+    next if !$dbh;
+
     my ($result) = $dbh->selectrow_array(qq|SELECT login FROM employee WHERE login = ?;|,undef,
                                         $self->user->{'login'});
     $dbh->disconnect;

Keine Ahnung, ob ich das was übersehen.

#4

Von Cem Aydin vor mehr als 1 Jahr aktualisiert

  • Status wurde von Neu zu Erledigt geändert
  • % erledigt wurde von 0 zu 100 geändert

Habe das mal so übernommen, denke das funktioniert. Lokal bei mir getestet.

https://github.com/kivitendo/kivitendo-erp/pull/165
0475f05a31a73960f5836c3b39b5a20b1562069b

Grüsse, Danke

Auch abrufbar als: Atom PDF