danach ist alles "neu" $db->truncateTable('#__eis_documents'); $newIds = self::saveToDb($data, null, $db); // Dauerhaft speichern (Frontend-Modul nutzt das ja schon) SettingsHelper::setSetting('last_new_ids', json_encode($newIds, JSON_UNESCAPED_SLASHES)); SettingsHelper::setSetting('last_scan_at', date('Y-m-d H:i:s')); return $newIds; } private static function scanFolder(string $dir): array { $result = []; if (!is_dir($dir)) { return $result; } $entries = @scandir($dir); if ($entries === false) { return $result; } foreach ($entries as $file) { if ($file === '.' || $file === '..') { continue; } $fullPath = $dir . DIRECTORY_SEPARATOR . $file; if (is_dir($fullPath)) { $result[] = [ 'name' => $file, 'children' => self::scanFolder($fullPath) ]; } elseif (is_file($fullPath) && strtolower(pathinfo($file, PATHINFO_EXTENSION)) === 'pdf') { $result[] = [ 'name' => $file, 'path' => $fullPath ]; } } usort($result, static fn($a, $b) => strcasecmp((string)$a['name'], (string)$b['name'])); return $result; } private static function saveToDb(array $items, ?int $parentId, DatabaseDriver $db): array { $insertedFileIds = []; foreach ($items as $item) { $name = $db->quote($item['name']); $path = $db->quote($item['path'] ?? ''); $parent = $parentId !== null ? (int)$parentId : 'NULL'; $isFolder = isset($item['children']) ? 1 : 0; $query = $db->getQuery(true) ->insert($db->quoteName('#__eis_documents')) ->columns(['name', 'path', 'parent_id', 'is_folder']) ->values("$name, $path, $parent, $isFolder"); $db->setQuery($query)->execute(); $insertedId = (int) $db->insertid(); if ($isFolder && !empty($item['children'])) { $childIds = self::saveToDb($item['children'], $insertedId, $db); $insertedFileIds = array_merge($insertedFileIds, $childIds); } else { $insertedFileIds[] = $insertedId; } } return $insertedFileIds; } }