Import-Dashboard


Tabellen leeren (Reset) ✕
Kategorien importieren ↗
Beiträge importieren ↗
$table wurde erfolgreich geleert.
"; } else { echo "Fehler beim Leeren der Tabelle $table: " . mysqli_error($GLOBALS['mysql_con']) . "
"; } } // Foreign-Key-Prüfungen wieder aktivieren mysqli_query($GLOBALS['mysql_con'], "SET FOREIGN_KEY_CHECKS = 1"); } /** * Rekursive Funktion zum Importieren von Kategorien. * Für jeden Unterordner wird – sofern noch nicht vorhanden – eine Kategorie in * knowledgecenter_categories_update und eine Übersetzung in knowledgecenter_category_translations (language_id = 1) angelegt. * Bei Unterordnern wird zudem in knowledgecenter_category_links eine Parent-Child-Verknüpfung erstellt. * * @param string $folder Absoluter Pfad des aktuellen Ordners. * @param int|null $parentCategoryId Falls vorhanden, die Kategorie-ID des Elternordners. */ function import_categories($folder, $parentCategoryId = null) { if (!is_dir($folder)) { echo "Ordner '$folder' existiert nicht.
"; return; } $folderName = basename($folder); $folderNameEscaped = mysqli_real_escape_string($GLOBALS['mysql_con'], $folderName); // Prüfen, ob eine Kategorie mit diesem Titel (language_id = 1) bereits existiert $query = "SELECT c.id FROM knowledgecenter_categories_update c JOIN knowledgecenter_category_translations t ON c.id = t.category_id WHERE t.language_id = 1 AND t.title = '$folderNameEscaped' LIMIT 1"; $result = mysqli_query($GLOBALS['mysql_con'], $query); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); $categoryId = $row['id']; echo "Kategorie '$folderName' existiert bereits (ID: $categoryId).
"; } else { $sql_category = "INSERT INTO knowledgecenter_categories_update (sorting, state, modified_at, modified_by, created_at) VALUES (0, 1, NOW(), 'import', NOW())"; if (!mysqli_query($GLOBALS['mysql_con'], $sql_category)) { echo "Fehler beim Erstellen der Kategorie '$folderName': " . mysqli_error($GLOBALS['mysql_con']) . "
"; return; } $categoryId = mysqli_insert_id($GLOBALS['mysql_con']); $sql_trans = "INSERT INTO knowledgecenter_category_translations (category_id, language_id, title, created_at) VALUES ($categoryId, 1, '$folderNameEscaped', NOW())"; if (!mysqli_query($GLOBALS['mysql_con'], $sql_trans)) { echo "Fehler beim Einfügen der Kategorie-Übersetzung für '$folderName': " . mysqli_error($GLOBALS['mysql_con']) . "
"; } echo "Kategorie '$folderName' wurde erstellt (ID: $categoryId).
"; } if ($parentCategoryId !== null) { $query_link = "SELECT id FROM knowledgecenter_category_links WHERE parent_category_id = $parentCategoryId AND child_category_id = $categoryId LIMIT 1"; $result_link = mysqli_query($GLOBALS['mysql_con'], $query_link); if ($result_link && mysqli_num_rows($result_link) == 0) { $sql_link = "INSERT INTO knowledgecenter_category_links (parent_category_id, child_category_id, sorting, created_at) VALUES ($parentCategoryId, $categoryId, 0, NOW())"; if (!mysqli_query($GLOBALS['mysql_con'], $sql_link)) { echo "Fehler beim Verknüpfen der Kategorie '$folderName' mit Eltern ($parentCategoryId): " . mysqli_error($GLOBALS['mysql_con']) . "
"; } } } // Unterordner verarbeiten $subDirs = glob($folder . "/*", GLOB_ONLYDIR); if ($subDirs !== false) { foreach ($subDirs as $subDir) { import_categories($subDir, $categoryId); } } } /** * Rekursive Funktion zum Importieren von Beiträgen. * In jedem Ordner werden alle Dateien als Beiträge importiert. * Für jede Datei wird der Dateiname (ohne Erweiterung) als Titel verwendet und * als Teaser "Hier finden Sie die Informationen zu [Dateiname]" gesetzt. * Anschließend wird der Beitrag in knowledgecenter_posts und knowledgecenter_post_versions (language_id = 1, Version 1) angelegt * und in knowledgecenter_category_post mit der zugehörigen Kategorie verknüpft. * Zusätzlich wird ein Eintrag in knowledgecenter_post_files für die Datei erstellt. * * @param string $folder Absoluter Pfad des aktuellen Ordners. */ function import_posts($folder) { if (!is_dir($folder)) { return; } // Ermitteln der zugehörigen Kategorie anhand des Ordnernamens $folderName = basename($folder); $folderNameEscaped = mysqli_real_escape_string($GLOBALS['mysql_con'], $folderName); $query = "SELECT c.id FROM knowledgecenter_categories_update c JOIN knowledgecenter_category_translations t ON c.id = t.category_id WHERE t.language_id = 1 AND t.title = '$folderNameEscaped' LIMIT 1"; $result = mysqli_query($GLOBALS['mysql_con'], $query); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); $categoryId = $row['id']; } else { echo "Keine Kategorie für '$folderName' gefunden. Bitte zuerst Kategorien importieren.
"; return; } // Alle Dateien im aktuellen Ordner als Beiträge importieren $files = glob($folder . "/*"); if ($files !== false) { foreach ($files as $item) { if (is_file($item)) { $fileName = basename($item); $fileTitle = pathinfo($fileName, PATHINFO_FILENAME); // Dateiname ohne Erweiterung $titleEscaped = mysqli_real_escape_string($GLOBALS['mysql_con'], $fileTitle); $teaser = "Hier finden Sie die Informationen zu $fileTitle"; $teaserEscaped = mysqli_real_escape_string($GLOBALS['mysql_con'], $teaser); // Überprüfen, ob bereits ein Beitrag mit diesem Titel existiert $checkQuery = "SELECT pv.id FROM knowledgecenter_post_versions pv JOIN knowledgecenter_posts p ON pv.post_id = p.id WHERE pv.language_id = 1 AND pv.title = '$titleEscaped' LIMIT 1"; $checkResult = mysqli_query($GLOBALS['mysql_con'], $checkQuery); if ($checkResult && mysqli_num_rows($checkResult) > 0) { echo "Beitrag '$fileTitle' existiert bereits. Überspringe.
"; continue; } // Beitrag erstellen $sql_post = "INSERT INTO knowledgecenter_posts (created_at, modified_at) VALUES (NOW(), NOW())"; if (!mysqli_query($GLOBALS['mysql_con'], $sql_post)) { echo "Fehler beim Erstellen des Beitrags für Datei '$fileName': " . mysqli_error($GLOBALS['mysql_con']) . "
"; continue; } $newPostId = mysqli_insert_id($GLOBALS['mysql_con']); // Beitrag-Version anlegen (language_id = 1, Version 1) $sql_post_version = "INSERT INTO knowledgecenter_post_versions (post_id, version_number, language_id, title, teaser, content, author_id, created_at) VALUES ($newPostId, 1, 1, '$titleEscaped', '$teaserEscaped', '', 0, NOW())"; if (!mysqli_query($GLOBALS['mysql_con'], $sql_post_version)) { echo "Fehler beim Erstellen der Beitragsversion für Datei '$fileTitle': " . mysqli_error($GLOBALS['mysql_con']) . "
"; } // Beitrag mit der Kategorie verknüpfen $sql_link_post = "INSERT INTO knowledgecenter_category_post (category_id, post_id) VALUES ($categoryId, $newPostId)"; if (!mysqli_query($GLOBALS['mysql_con'], $sql_link_post)) { echo "Fehler beim Verknüpfen des Beitrags $newPostId mit Kategorie $categoryId: " . mysqli_error($GLOBALS['mysql_con']) . "
"; } // Eintrag in die Files-Tabelle erstellen // Ermitteln des relativen Pfads relativ zum Document Root: $docRoot = realpath($_SERVER['DOCUMENT_ROOT']); $relativePath = str_replace($docRoot, '', realpath($item)); // Als Beschreibung verwenden wir den Dateinamen (inklusive Erweiterung) $descEscaped = mysqli_real_escape_string($GLOBALS['mysql_con'], $fileName); $pathEscaped = mysqli_real_escape_string($GLOBALS['mysql_con'], $relativePath); $sql_file = "INSERT INTO knowledgecenter_post_files (post_id, description, path, created_at) VALUES ($newPostId, '$descEscaped', '$pathEscaped', NOW())"; if (!mysqli_query($GLOBALS['mysql_con'], $sql_file)) { echo "Fehler beim Einfügen in die Files-Tabelle für Datei '$fileName': " . mysqli_error($GLOBALS['mysql_con']) . "
"; } echo "Beitrag '$fileTitle' (ID: $newPostId) in Kategorie '$folderName' importiert.
"; } } } // Unterordner rekursiv verarbeiten $subDirs = glob($folder . "/*", GLOB_ONLYDIR); if ($subDirs !== false) { foreach ($subDirs as $subDir) { import_posts($subDir); } } } // Hauptlogik: Prüfe die GET-Parameter zur Steuerung der Aktionen // Da im Link auch ?action=Import gesetzt ist, können wir dies ignorieren und nur reset, cat_import, post_import prüfen. // Reset: Tabellen leeren if (isset($_GET['reset_import']) && $_GET['reset_import'] == "1") { echo "

Reset Import gestartet

"; truncate_import_tables(); echo "

Reset Import beendet

"; exit; } // Kategorien importieren: GET-Parameter "cat_import" verwenden if (isset($_GET['cat_import']) && $_GET['cat_import'] == "1") { $importFolder = realpath($_SERVER['DOCUMENT_ROOT'] . '/userdata/knowledgecenter_update'); if (!$importFolder) { die("Der Import-Ordner wurde nicht gefunden."); } echo "

Kategorien-Import gestartet

"; import_categories($importFolder); echo "

Kategorien-Import beendet

"; exit; } // Beiträge importieren: GET-Parameter "post_import" verwenden if (isset($_GET['post_import']) && $_GET['post_import'] == "1") { $importFolder = realpath($_SERVER['DOCUMENT_ROOT'] . '/userdata/knowledgecenter_update'); if (!$importFolder) { die("Der Import-Ordner wurde nicht gefunden."); } echo "

Beiträge-Import gestartet

"; import_posts($importFolder); echo "

Beiträge-Import beendet

"; exit; } ?>