hasRight('bericht', 'write')) bericht_ajax_fail('Permission denied', 403); $pageid = (int) ($_POST['pageid'] ?? 0); $relpath = (string) ($_POST['relpath'] ?? ''); $mime = (string) ($_POST['mime'] ?? ''); $slot = isset($_POST['slot']) && $_POST['slot'] !== '' ? (int) $_POST['slot'] : null; if (!$pageid || $relpath === '') bericht_ajax_fail('Parameter fehlen'); $full = bericht_resolve_data_path($relpath); if (!$full || !file_exists($full)) bericht_ajax_fail('Datei nicht gefunden', 404); $res = $db->query("SELECT rowid, fk_bericht, COALESCE(layout,'single') AS layout" ." FROM ".$db->prefix()."bericht_page WHERE rowid = ".((int) $pageid)); if (!$res || !($row = $db->fetch_object($res))) bericht_ajax_fail('Seite nicht gefunden', 404); // Bericht darf nicht finalisiert sein $b = new Bericht($db); if ($b->fetch((int) $row->fk_bericht) <= 0) bericht_ajax_fail('Bericht nicht gefunden', 404); if ((int) $b->status === Bericht::STATUS_FINAL) { bericht_ajax_fail('Der Bericht ist finalisiert und kann nicht mehr geändert werden', 403); } if ($row->layout !== 'single' && $slot !== null) { // Grid: nur den einen Slot ersetzen if (strpos($mime, 'image') !== 0 && $mime !== '') { bericht_ajax_fail('In Raster-Layouts sind nur Bilder möglich'); } $slots = BerichtPage::slotCountForLayout($row->layout); if ($slot < 0 || $slot >= $slots) bericht_ajax_fail('Ungültiger Slot'); $p = new BerichtPage($db); $p->id = (int) $row->rowid; $p->fk_bericht = (int) $row->fk_bericht; $p->layout = $row->layout; if ($p->setSlotImage($slot, $relpath, 0) > 0) { bericht_ajax_ok(array('slot' => $slot)); } bericht_ajax_fail('DB-Fehler beim Ersetzen des Slots'); } // Single: source_path/source_type der Seite ersetzen $source_type = (strpos($mime, 'pdf') !== false || preg_match('/\.pdf$/i', $relpath)) ? 'pdf' : 'image'; $sql = "UPDATE ".$db->prefix()."bericht_page SET" ." source_path = '".$db->escape($relpath)."'," ." source_type = '".$db->escape($source_type)."'," ." source_page = 1," ." rotation = 0" ." WHERE rowid = ".((int) $pageid); if ($db->query($sql)) { bericht_ajax_ok(array('source_type' => $source_type)); } bericht_ajax_fail('DB-Fehler beim Ersetzen der Seite');