base_object = $base_object; $this->db = $base_object->db; } /** * Holt Basis-Item-Daten */ public function getItemData($item_id) { $sql = "SELECT * FROM items WHERE id = " . intval($item_id); $result = $this->db->query($sql); return $result ? $result->fetch_object() : false; } /** * Holt Herstellerinformationen */ public function getManufacturerInfo($vendor_id) { if (!$vendor_id) return []; $sql = "SELECT * FROM herstellerinformationen WHERE id = ?"; $stmt = $this->db->prepare($sql); if ($stmt) { $vendor_id_int = intval($vendor_id); $stmt->bind_param("i", $vendor_id_int); $stmt->execute(); $result = $stmt->get_result(); return $result->fetch_assoc() ?: []; } return []; } /** * Holt Admin User Daten */ public function getAdminUser($user_id) { if (!$user_id) return null; $sql = "SELECT * FROM customers WHERE id = " . intval($user_id); $result = $this->db->query($sql); return $result ? $result->fetch_object() : null; } /** * Holt Sicherheitshinweise (REAKTIVIERT + FALLBACK) * Übertragen aus item.class.php Zeile 885-936 * PRIORITÄT 1: attribute_5 (manuell) * PRIORITÄT 2: attribute_7 (Navision-Automatik) */ public function getSecurityWarnings($navision_id, $manual_warning_ids = null) { $warnings = []; $documents = []; // PRIORITÄT 1: Manuelle Warning-IDs aus attribute_5 (für alte Artikel) if (!empty($manual_warning_ids) && preg_match('/^[\d,\s]+$/', $manual_warning_ids)) { // SPECIAL CASE: warning_id 199 = Allgemeine Sicherheitsdokumente if (trim($manual_warning_ids) == '199') { // Lade das PDF aus sicherheitshinweis.bild für warning_id 199 $sql = "SELECT bild, name FROM sicherheitshinweis WHERE warning_id = 199"; $result = $this->db->query($sql); if ($result && $row = $result->fetch_assoc()) { if (!empty($row['bild'])) { $documents[] = [ 'file_name' => $row['bild'] . '.pdf', 'label' => $row['name'] ?? 'Allgemeine Sicherheitshinweise' ]; } } return [ 'warnings' => [], 'documents' => $documents, 'source' => 'manual_attribute_5_document_199' ]; } // Normale Warning-IDs (1-90): Nur Symbole, keine Dokumente $warnings = $this->loadWarnings($manual_warning_ids); return [ 'warnings' => $warnings, 'documents' => [], 'source' => 'manual_attribute_5' ]; } // PRIORITÄT 2: Automatische Navision-Logik aus attribute_7 if (!empty($navision_id)) { $sql = "SELECT * FROM sicherheitshinweis_item WHERE navision_id = ?"; $stmt = $this->db->prepare($sql); if ($stmt) { $stmt->bind_param("s", $navision_id); $stmt->execute(); $result = $stmt->get_result(); $warningDocsList = $result->fetch_assoc(); if ($warningDocsList) { // Sicherheitswarnungen laden $warningIdsList = $warningDocsList['warning_ids'] ?? null; $warnings = $this->loadWarnings($warningIdsList); // Dokumente laden $documentColumns = [ 'Bedienungsanleitung' => 'Allg. Sicherheitshinweise', 'EU_Datenblatt' => 'EU-Datenblatt', 'Energielabel' => 'Energielabel', 'Produktdatenblatt' => 'Produktdatenblatt', 'Sicherheitsdatenblatt' => 'Sicherheitsdatenblatt', 'Zertifikat' => 'Zertifikat', 'null_feld' => 'Allg. Sicherheitshinweise' ]; foreach ($documentColumns as $column => $label) { if (!empty($warningDocsList[$column])) { $pdfs = explode(',', $warningDocsList[$column]); $pdfs = array_map('trim', $pdfs); $pdfs = array_map(fn($pdf) => trim($pdf, '"'), $pdfs); foreach ($pdfs as $pdf) { if (!empty($pdf)) { $documents[] = [ 'file_name' => $pdf, 'label' => $label ]; } } } } } } } return [ 'warnings' => $warnings, 'documents' => $documents, 'source' => !empty($navision_id) ? 'navision_attribute_7' : 'empty' ]; } /** * Lädt Sicherheitswarnungen basierend auf IDs * Übertragen aus item.class.php loadWarnings() */ private function loadWarnings($warningIdsList) { $articleWarnings = []; if ($warningIdsList) { $ids = explode(',', $warningIdsList); $ids = array_map('trim', $ids); $ids = array_filter($ids, 'is_numeric'); if (!empty($ids)) { $placeholders = implode(',', array_fill(0, count($ids), '?')); $sqlWarn = " SELECT warning_id, name, beschreibung, bild, bildnr, bilddateiname FROM sicherheitshinweis WHERE warning_id IN ($placeholders) ORDER BY warning_id "; $stmtWarn = $this->db->prepare($sqlWarn); if ($stmtWarn) { $types = str_repeat('i', count($ids)); $stmtWarn->bind_param($types, ...$ids); $stmtWarn->execute(); $resultWarn = $stmtWarn->get_result(); $articleWarnings = $resultWarn->fetch_all(MYSQLI_ASSOC); // Bild-Dateinamen generieren foreach ($articleWarnings as &$warning) { $warning['image_filename'] = $this->generateImageFileName($warning); } } } } return $articleWarnings; } /** * Generiert Bild-Dateinamen für Sicherheitshinweise * Übertragen aus item.class.php generateImageFileName() */ private function generateImageFileName($warning) { // Verwende "bilddateiname", wenn vorhanden if (!empty($warning['bilddateiname'])) { return $warning['bilddateiname']; } // Verwende "bildnr", wenn vorhanden if (!empty($warning['bildnr'])) { return $warning['bildnr'] . ".gif"; } // Generiere basierend auf der Bildnummer if (!empty($warning['bild'])) { $baseName = "ISO_7010_"; $suffix = ".svg"; // Extrahiere die letzten 3 Ziffern der Bildnummer $imageFileId = substr($warning['bild'], -4); return $baseName . $imageFileId . $suffix; } // Kein Bild verfügbar return null; } /** * Performance-Debug - DIREKT AUF SEITE ausgeben */ public function debugItemPerformance($item_id) { echo "
"; echo "

🔍 PERFORMANCE DEBUG für Item $item_id

"; $this->benchmarkQuery("SELECT * FROM items WHERE id = $item_id", "1. Base Item Data"); $this->benchmarkQuery("SELECT * FROM item_files WHERE item_id = $item_id", "2. Files"); $this->benchmarkQuery("SELECT * FROM customers WHERE id = 1", "3. Test Admin User"); echo "✅ PERFORMANCE DEBUG ABGESCHLOSSEN"; echo "
"; } /** * Benchmark eine einzelne Abfrage - DIREKT AUF SEITE */ public function benchmarkQuery($sql, $description = '') { $start = microtime(true); $result = $this->db->query($sql); $end = microtime(true); $time = round(($end - $start) * 1000, 2); echo "

$description: {$time}ms
"; echo "$sql

"; return $result; } }