diff --git a/ChangeLog.md b/ChangeLog.md index 7fed683..624989b 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,5 +1,20 @@ # Changelog NetDiag +## 1.1.6 — 2026-08-17 + +### PDF-Zweig für die DNS-Prüfung + +`netdiagPdfDns()` — je befragtem Server eine eigene Zeile statt einer +`|`-getrennten Kette. Bei zwei Servern ging die generische Darstellung noch, +bei den vier bis fünf Einträgen eines Firmennetzes wäre die eigentliche Aussage +— welcher Server antwortet und welcher nicht — nicht mehr auffindbar gewesen. +Damit hat jedes Werkzeug mit Listenergebnis einen eigenen Renderer: Dauertest, +WLAN-Kanal, Geräte-Monitor, Internet-Kette, DNS-Prüfung. + +Geprüft im vollständigen Durchstich: in der App gemessen (Emulator gegen die +lokale Testinstanz), synchronisiert, PDF aus Protokoll ND2026-0016 erzeugt und +angesehen. + ## 1.1.5 — 2026-08-16 ### Feldtabelle für das neue Werkzeug „DNS-Prüfung" diff --git a/core/modules/modNetDiag.class.php b/core/modules/modNetDiag.class.php index 86994f0..727fee3 100644 --- a/core/modules/modNetDiag.class.php +++ b/core/modules/modNetDiag.class.php @@ -67,7 +67,7 @@ class modNetDiag extends DolibarrModules $this->editor_url = ''; $this->editor_squarred_logo = ''; - $this->version = '1.1.5'; + $this->version = '1.1.6'; // Konstanten-Name in llx_const für Modul-Status $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); diff --git a/lib/netdiag_pdf.lib.php b/lib/netdiag_pdf.lib.php index 7aa16f7..214411f 100644 --- a/lib/netdiag_pdf.lib.php +++ b/lib/netdiag_pdf.lib.php @@ -220,6 +220,8 @@ function netdiagGeneratePdf($db, $protocol, $outputlangs) netdiagPdfMonitor($pdf, $m->result); } elseif ($m->tool === 'internetkette') { netdiagPdfKette($pdf, $m->result); + } elseif ($m->tool === 'dnscheck') { + netdiagPdfDns($pdf, $m->result); } else { $pdf->MultiCell(180, 5, netdiagPdfFlattenResult($m->result), 1, 'L'); } @@ -435,6 +437,67 @@ function netdiagPdfStressTest($pdf, $json) } } +/** + * DNS-Prüfung ins PDF schreiben: je Server eine eigene Zeile. + * + * Dieselbe Begründung wie beim Monitor und bei der Internet-Kette: die + * generische Darstellung schiebt alle Serverantworten zu einer `|`-Kette + * zusammen. Bei zwei Servern geht das noch, bei den vier bis fünf Einträgen + * eines Firmennetzes ist die eigentliche Aussage — welcher Server antwortet + * und welcher nicht — nicht mehr auffindbar. + * + * @param TCPDF $pdf PDF-Objekt (Cursor steht direkt hinter der Titelzeile) + * @param string $json result-JSON der Messung + * @return void + */ +function netdiagPdfDns($pdf, $json) +{ + $data = json_decode((string) $json, true); + if (!is_array($data)) { + $pdf->MultiCell(180, 5, netdiagPdfFlattenResult($json), 1, 'L'); + return; + } + + $sum = array(); + if (!empty($data['ziel'])) { + $sum[] = 'Abgefragter Name: '.$data['ziel']; + } + if (!empty($data['gefragteServer']) && is_array($data['gefragteServer'])) { + $sum[] = 'Befragte Server: '.count($data['gefragteServer']); + } + if (!empty($sum)) { + $pdf->MultiCell(180, 5, netdiagPdfText(implode(' | ', $sum)), 1, 'L'); + } + + $antworten = (isset($data['antworten']) && is_array($data['antworten'])) ? $data['antworten'] : array(); + if (!empty($antworten)) { + netdiagPdfEnsureSpace($pdf, 10); + $pdf->SetFont('', 'B', 8); + $pdf->Cell(180, 5, 'Antworten der Server ('.count($antworten).')', 1, 1, 'L'); + $pdf->SetFont('', '', 8); + foreach ($antworten as $line) { + netdiagPdfEnsureSpace($pdf, 5, function ($p) { + $p->SetFont('', 'B', 8); + $p->Cell(180, 5, 'Antworten der Server — Fortsetzung', 1, 1, 'L'); + $p->SetFont('', '', 8); + }); + // MultiCell, weil eine Fehlermeldung des Servers lang werden kann + $pdf->MultiCell(180, 5, netdiagPdfText(netdiagKundentext((string) $line)), 1, 'L'); + } + } + + // Messverfahren und Hinweis zum Schluss — die Grenze der Aussage gehört + // ins Kundendokument (gemessen wurde je ein Paket an je einen Server). + foreach (array('hinweis', 'verfahren') as $feld) { + if (!empty($data[$feld])) { + netdiagPdfEnsureSpace($pdf, 8); + $pdf->SetFont('', 'I', 7); + $pdf->MultiCell(180, 4, netdiagPdfText(netdiagKundentext((string) $data[$feld])), 1, 'L'); + $pdf->SetFont('', '', 8); + } + } +} + /** * Internet-Kette ins PDF schreiben: Fehlerglied zuerst, dann die Stufen. *