diff --git a/api/protocols.php b/api/protocols.php
index f6e2a83..452ae13 100644
--- a/api/protocols.php
+++ b/api/protocols.php
@@ -193,7 +193,10 @@ foreach ($measIn as $m) {
$meas->label = isset($m['label']) ? (string) $m['label'] : '';
$meas->params = isset($m['params']) ? json_encode($m['params'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : null;
$meas->result = isset($m['result']) ? json_encode($m['result'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : null;
- $meas->measure_status = isset($m['measureStatus']) ? (int) $m['measureStatus'] : 0;
+ // Nur bekannte Bewertungen uebernehmen. Ein unbekannter Wert landete sonst
+ // als Array-Index in Karte und PDF und lief dort ins Leere.
+ $st = isset($m['measureStatus']) ? (int) $m['measureStatus'] : 0;
+ $meas->measure_status = ($st >= 0 && $st <= 3) ? $st : 1;
$meas->date_measure = netdiag_api_timestamp($m['dateMeasure'] ?? 0);
$meas->tms = dol_now();
if ($meas->create($user, 1) <= 0) {
diff --git a/langs/de_DE/netdiag.lang b/langs/de_DE/netdiag.lang
index 36c26df..944d357 100644
--- a/langs/de_DE/netdiag.lang
+++ b/langs/de_DE/netdiag.lang
@@ -59,3 +59,4 @@ NetDiagMeasurements = Messungen
NetDiagMeasureOk = OK
NetDiagMeasureWarn = Warnung
NetDiagMeasureFail = Fehler
+NetDiagMeasureUnmeasurable = Nicht messbar
diff --git a/langs/en_US/netdiag.lang b/langs/en_US/netdiag.lang
index 26a28a4..120a701 100644
--- a/langs/en_US/netdiag.lang
+++ b/langs/en_US/netdiag.lang
@@ -59,3 +59,4 @@ NetDiagMeasurements = Measurements
NetDiagMeasureOk = OK
NetDiagMeasureWarn = Warning
NetDiagMeasureFail = Fail
+NetDiagMeasureUnmeasurable = Not measurable
diff --git a/lib/netdiag_pdf.lib.php b/lib/netdiag_pdf.lib.php
index 3ffea2a..279e7dd 100644
--- a/lib/netdiag_pdf.lib.php
+++ b/lib/netdiag_pdf.lib.php
@@ -132,20 +132,35 @@ function netdiagGeneratePdf($db, $protocol, $outputlangs)
// Messungen
$pdf->SetFont('', 'B', 12);
$pdf->Cell(0, 7, $outputlangs->transnoentities("NetDiagMeasurements").' ('.count($measurements).')', 0, 1, 'L');
- $statuslabels = array(0 => 'OK', 1 => $outputlangs->transnoentities("NetDiagMeasureWarn"), 2 => $outputlangs->transnoentities("NetDiagMeasureFail"));
+ // Status 3 = "nicht messbar": der Test konnte nicht durchgeführt werden.
+ // Bewusst grau und mit eigenem Zeichen — weder grün (wäre gelogen) noch rot
+ // (wäre eine Aussage über das Kundennetz, die die Messung nicht hergibt).
+ $statuslabels = array(
+ 0 => $outputlangs->transnoentities("NetDiagMeasureOk"),
+ 1 => $outputlangs->transnoentities("NetDiagMeasureWarn"),
+ 2 => $outputlangs->transnoentities("NetDiagMeasureFail"),
+ 3 => $outputlangs->transnoentities("NetDiagMeasureUnmeasurable"),
+ );
+ // Zusätzlich ein Zeichen, damit die Ampel auch im Schwarz-Weiß-Ausdruck lesbar bleibt
+ $statusmarks = array(0 => 'OK', 1 => '!', 2 => 'X', 3 => '?');
foreach ($measurements as $m) {
$st = (int) $m->measure_status;
+ if ($st < 0 || $st > 3) {
+ $st = 1; // unbekannter Wert -> als Warnung behandeln, nie als OK
+ }
if ($st == 2) {
$pdf->SetFillColor(230, 130, 130);
} elseif ($st == 1) {
$pdf->SetFillColor(245, 215, 130);
+ } elseif ($st == 3) {
+ $pdf->SetFillColor(210, 210, 210);
} else {
$pdf->SetFillColor(170, 215, 170);
}
$pdf->SetFont('', 'B', 9);
$title = ($m->category ? '['.$m->category.'] ' : '').$m->tool.($m->label ? ' — '.$m->label : '');
$pdf->Cell(150, 6, dol_trunc($title, 80), 1, 0, 'L');
- $pdf->Cell(30, 6, $statuslabels[$st], 1, 1, 'C', true);
+ $pdf->Cell(30, 6, $statusmarks[$st].' '.$statuslabels[$st], 1, 1, 'C', true);
$pdf->SetFont('', '', 8);
$pdf->MultiCell(180, 5, netdiagPdfFlattenResult($m->result), 1, 'L');
}
diff --git a/netdiagprotocol_card.php b/netdiagprotocol_card.php
index a4314ef..4f84b9c 100644
--- a/netdiagprotocol_card.php
+++ b/netdiagprotocol_card.php
@@ -201,8 +201,18 @@ print '';
// Messungen
$measObj = new NetDiagMeasurement($db);
$measurements = $measObj->fetchAllByProtocol($object->id);
-$statuslabels = array(0 => 'NetDiagMeasureOk', 1 => 'NetDiagMeasureWarn', 2 => 'NetDiagMeasureFail');
-$statuscss = array(0 => 'badge-status4', 1 => 'badge-status1', 2 => 'badge-status8');
+$statuslabels = array(
+ 0 => 'NetDiagMeasureOk',
+ 1 => 'NetDiagMeasureWarn',
+ 2 => 'NetDiagMeasureFail',
+ 3 => 'NetDiagMeasureUnmeasurable',
+);
+$statuscss = array(
+ 0 => 'badge-status4',
+ 1 => 'badge-status1',
+ 2 => 'badge-status8',
+ 3 => 'badge-status0', // grau: Test war nicht durchfuehrbar
+);
print '
';
print load_fiche_titre($langs->trans("NetDiagMeasurements").' ('.count($measurements).')', '', 'fa-wave-square');
print '
| '.$langs->trans("Result").' | '.$langs->trans("M print ''; foreach ($measurements as $m) { $st = (int) $m->measure_status; + // Unbekannte Werte nie als OK durchgehen lassen (Array-Zugriff waere sonst leer) + if ($st < 0 || $st > 3) { + $st = 1; + } print ' |
|---|---|
| '.dol_print_date($m->date_measure, 'dayhour').' | '; print ''.dol_escape_htmltag($m->category).' | ';