feat(launch): Konfigurationsvalidierung & GlobalNotify-Integration v3.4
- Neue Funktion idsconnect_notify() für GlobalNotify-Benachrichtigungen mit Fallback auf dol_syslog falls Modul nicht installiert - Neue Funktion idsconnect_validateSupplierConfig() prüft Supplier- Konfiguration vor dem Launch auf Vollständigkeit - launch.php: Validierung vor Formular-Submit - Fehler (leeres Passwort): blockiert Launch, Redirect zur Konfiguration - Warnung (leerer Username): erlaubt Launch aber warnt User + Admin - Löst Problem: Klux "Weiter"-Button fehlte weil ids_username leer war, Login schlug still fehl ohne jede Fehlermeldung Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
39f8a22f21
commit
81646f5ea4
4 changed files with 127 additions and 1 deletions
36
CHANGELOG.md
36
CHANGELOG.md
|
|
@ -9,6 +9,42 @@
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## v3.4 - Klux-Support & Konfigurationsvalidierung (17.03.2026)
|
||||||
|
|
||||||
|
### 🐛 BUGFIX: Klux "Weiter"-Button fehlte
|
||||||
|
|
||||||
|
- **Problem**: Beim WKS (Warenkorb senden) an Klux fehlte im Klux-Shop der "Weiter"-Button zur Bestellbestätigung.
|
||||||
|
- **Ursache**: `ids_username` (→ `name_kunde`) war leer in der Klux-Supplier-Konfiguration. Ohne gültigen Login-Namen zeigt der Klux-Shop den Katalog, aber keinen IDS-Checkout-Button.
|
||||||
|
- **Fix**: `ids_username = ids-1222925` (Kundennummer) in der Produktiv-DB gesetzt.
|
||||||
|
- **Hintergrund**: Bei deutschen Elektrogroßhändlern (Klux, Sonepar) wird die Kundennummer oft auch als Login-Username verwendet. Das `name_kunde`-Feld darf nicht leer sein.
|
||||||
|
|
||||||
|
### ✨ Feature: Konfigurationsvalidierung vor IDS-Launch
|
||||||
|
|
||||||
|
Neue Validierung in [launch.php](launch.php) bevor das Formular an den Großhändler-Shop gesendet wird:
|
||||||
|
|
||||||
|
- **Fehler (blockiert Launch)**: Kein Passwort konfiguriert → Redirect zur Supplier-Konfiguration
|
||||||
|
- **Warnung (erlaubt aber warnt)**: Kein Benutzername konfiguriert → `name_kunde` wäre leer → "Weiter"-Button fehlt im Shop
|
||||||
|
- Verhindert das stille Fehlschlagen ("Shop lädt, aber kein Bestell-Button, niemand weiß warum")
|
||||||
|
|
||||||
|
### ✨ Feature: GlobalNotify-Integration
|
||||||
|
|
||||||
|
- **Neue Funktion** `idsconnect_notify()` in [lib/idsconnect.lib.php](lib/idsconnect.lib.php)
|
||||||
|
- Sendet Benachrichtigungen an Admins über GlobalNotify (falls Modul aktiv)
|
||||||
|
- Fallback auf `dol_syslog()` wenn GlobalNotify nicht installiert
|
||||||
|
- Typen: `error`, `warning`, `info`, `action`
|
||||||
|
- **Neue Funktion** `idsconnect_validateSupplierConfig()` in [lib/idsconnect.lib.php](lib/idsconnect.lib.php)
|
||||||
|
- Prüft Supplier-Konfiguration vor dem Launch auf Vollständigkeit
|
||||||
|
- Gibt strukturierte `errors` und `warnings` zurück
|
||||||
|
- Bei unvollständiger Konfiguration: Admin erhält GlobalNotify-Meldung mit direktem Link zur Supplier-Konfigurationsseite
|
||||||
|
|
||||||
|
### 🔧 Technische Details
|
||||||
|
|
||||||
|
- **Validierte Felder**: `ids_password` (Error), `ids_username` (Warning)
|
||||||
|
- **GlobalNotify-Typ**: `action` für Fehler (Link zur Konfiguration), `warning` für Warnungen
|
||||||
|
- **Keine Code-Änderungen** an der Formular-Generierung (`idsconnect.class.php`) - nur Vorbedingung in `launch.php`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## v2.9 - Preis-Vergleich & Kritische Bugfixes (12.03.2026)
|
## v2.9 - Preis-Vergleich & Kritische Bugfixes (12.03.2026)
|
||||||
|
|
||||||
### 🐛 KRITISCHER BUGFIX: SQL-Spaltenname korrigiert
|
### 🐛 KRITISCHER BUGFIX: SQL-Spaltenname korrigiert
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ class modIdsconnect extends DolibarrModules
|
||||||
$this->editor_name = 'Alles Watt laeuft';
|
$this->editor_name = 'Alles Watt laeuft';
|
||||||
$this->editor_url = '';
|
$this->editor_url = '';
|
||||||
|
|
||||||
$this->version = '3.2';
|
$this->version = '3.4';
|
||||||
|
|
||||||
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
|
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
|
||||||
|
|
||||||
|
|
|
||||||
17
launch.php
17
launch.php
|
|
@ -95,6 +95,23 @@ if (!$supplier->active) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Supplier-Konfiguration auf Vollständigkeit prüfen
|
||||||
|
$config_issues = idsconnect_validateSupplierConfig($supplier);
|
||||||
|
$supplier_config_url = dol_buildpath('/idsconnect/supplier_card.php?id='.$supplier_id, 1);
|
||||||
|
|
||||||
|
foreach ($config_issues['errors'] as $err) {
|
||||||
|
setEventMessages($err, null, 'errors');
|
||||||
|
idsconnect_notify('action', 'IDS Connect: Konfigurationsfehler', $err, $supplier_config_url, 'Konfiguration öffnen');
|
||||||
|
}
|
||||||
|
foreach ($config_issues['warnings'] as $warn) {
|
||||||
|
setEventMessages($warn, null, 'warnings');
|
||||||
|
idsconnect_notify('warning', 'IDS Connect: Konfiguration unvollständig', $warn, $supplier_config_url, 'Konfiguration öffnen');
|
||||||
|
}
|
||||||
|
if (!empty($config_issues['errors'])) {
|
||||||
|
header('Location: '.$supplier_config_url);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
// IDS Connect initialisieren
|
// IDS Connect initialisieren
|
||||||
$idsconnect = new IdsConnect($db);
|
$idsconnect = new IdsConnect($db);
|
||||||
$testmode = $idsconnect->isTestMode($supplier);
|
$testmode = $idsconnect->isTestMode($supplier);
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,79 @@ function idsconnectSupplierPrepareHead($object)
|
||||||
return $head;
|
return $head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sendet Benachrichtigung über GlobalNotify (falls verfügbar).
|
||||||
|
* Fallback: Schreibt ins Dolibarr-Log.
|
||||||
|
*
|
||||||
|
* @param string $type 'error', 'warning', 'info', 'action'
|
||||||
|
* @param string $title Kurzer Titel
|
||||||
|
* @param string $message Detaillierte Nachricht
|
||||||
|
* @param string $actionUrl URL für Aktions-Button (optional)
|
||||||
|
* @param string $actionLabel Label für Aktions-Button (optional)
|
||||||
|
* @return bool True wenn über GlobalNotify gesendet
|
||||||
|
*/
|
||||||
|
function idsconnect_notify($type, $title, $message, $actionUrl = '', $actionLabel = '')
|
||||||
|
{
|
||||||
|
if (!isModEnabled('globalnotify')) {
|
||||||
|
dol_syslog("IDSCONNECT [{$type}]: {$title} - {$message}", LOG_WARNING);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$classFile = dol_buildpath('/globalnotify/class/globalnotify.class.php', 0);
|
||||||
|
if (!file_exists($classFile)) {
|
||||||
|
dol_syslog("IDSCONNECT [{$type}]: {$title} - {$message}", LOG_WARNING);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once $classFile;
|
||||||
|
|
||||||
|
if (!class_exists('GlobalNotify')) {
|
||||||
|
dol_syslog("IDSCONNECT [{$type}]: {$title} - {$message}", LOG_WARNING);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
switch ($type) {
|
||||||
|
case 'error':
|
||||||
|
GlobalNotify::error('idsconnect', $title, $message, $actionUrl, $actionLabel);
|
||||||
|
break;
|
||||||
|
case 'warning':
|
||||||
|
GlobalNotify::warning('idsconnect', $title, $message, $actionUrl, $actionLabel);
|
||||||
|
break;
|
||||||
|
case 'action':
|
||||||
|
GlobalNotify::actionRequired('idsconnect', $title, $message, $actionUrl, $actionLabel ?: 'Jetzt beheben');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
GlobalNotify::info('idsconnect', $title, $message, $actionUrl, $actionLabel);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
dol_syslog("GlobalNotify error in idsconnect: ".$e->getMessage(), LOG_ERR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prüft die Supplier-Konfiguration auf Vollständigkeit vor dem Launch.
|
||||||
|
*
|
||||||
|
* @param object $supplier IdsSupplier-Objekt
|
||||||
|
* @return array ['errors' => string[], 'warnings' => string[]]
|
||||||
|
*/
|
||||||
|
function idsconnect_validateSupplierConfig($supplier)
|
||||||
|
{
|
||||||
|
$result = array('errors' => array(), 'warnings' => array());
|
||||||
|
|
||||||
|
if (empty($supplier->ids_password)) {
|
||||||
|
$result['errors'][] = 'Kein Passwort konfiguriert für "'.$supplier->label.'" – IDS-Login nicht möglich.';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($supplier->ids_username)) {
|
||||||
|
$result['warnings'][] = 'Kein Benutzername (name_kunde) konfiguriert für "'.$supplier->label.'" – Login könnte fehlschlagen und der "Weiter"-Button fehlt ggf. im Shop.';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Testmodus-Banner ausgeben
|
* Testmodus-Banner ausgeben
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue