hasRight('bericht', 'write')) bericht_ajax_fail('Permission denied', 403); $relpath = (string) ($_POST['relpath'] ?? ''); if (empty($relpath)) bericht_ajax_fail('relpath fehlt'); // Whitelist-Prüfung: nur unter den drei erlaubten Element-Verzeichnissen if (!preg_match('#^(facture|commande|propal)/[^/]+/[^/]+$#', $relpath)) { bericht_ajax_fail('Pfad nicht erlaubt: ' . $relpath, 403); } $full = bericht_resolve_data_path($relpath); if (!$full || !file_exists($full)) bericht_ajax_fail('Datei nicht gefunden', 404); // Datei löschen if (!@unlink($full)) bericht_ajax_fail('Löschen fehlgeschlagen'); // Thumbs ebenfalls löschen (Dolibarr legt _mini/_small unter thumbs/ ab) $dir = dirname($full); $base = pathinfo($full, PATHINFO_FILENAME); $ext = pathinfo($full, PATHINFO_EXTENSION); foreach (array('_mini', '_small') as $suffix) { $thumb = $dir.'/thumbs/'.$base.$suffix.'.'.$ext; if (file_exists($thumb)) @unlink($thumb); $thumb_png = $dir.'/thumbs/'.$base.$suffix.'.png'; if (file_exists($thumb_png)) @unlink($thumb_png); } // ECM-Eintrag bereinigen $relpath_dir = dirname($relpath); $filename = basename($relpath); $db->query("DELETE FROM ".$db->prefix()."ecm_files" ." WHERE filepath = '".$db->escape($relpath_dir)."'" ." AND filename = '".$db->escape($filename)."'"); bericht_ajax_ok(array('deleted' => $relpath));