bericht/ajax/fragments.php
Eduard Wisch 4102ebfe5b
All checks were successful
Deploy bericht / deploy (push) Successful in 13s
Editor-Ueberarbeitung 1.5.0: Anhaenge-Kacheln, echte Seitengeometrie, Arbeiten ohne Reload [deploy]
Anhaenge-Spalte: Kachelraster mit Server-Thumbnails statt Dateinamen-Liste (Bilder per GD,
PDFs per PDF.js), Grossansicht per Klick, Auswahlreihenfolge sichtbar, Sortierung/Filter
(Aufnahmezeit per eigenem EXIF-Parser, da im Prod-Container ohne exif-Modul), ziehbare
Spaltenbreite, Kachelgroesse, Drag & Drop auf Seitenliste/Arbeitsflaeche/Raster-Plaetze.

Arbeitstisch zeigt jetzt Kopf-, Inhalts- und Fussbereich passend zur echten Seitengeometrie
(bericht_page_geometry()) - Editor und PDF-Erzeugung rechnen mit denselben Werten, das PDF
setzt die Arbeitsflaeche 1:1 statt sie ein zweites Mal einzupassen.

Neu: Bild einer Seite austauschen (auch einzelne Raster-Plaetze), Seiten mehrfach markieren
und sammeln loeschen/duplizieren, Autosave mit Verlassen-Warnung, Tastenkuerzel, kein
location.reload() mehr nach Hinzufuegen/Loeschen/Hochladen (ajax/fragments.php).

Nebenbei behoben: dol_dir_list() ohne mode=1 (Dateigroesse leer), PDF.js-Worker-Pfad ohne
/custom-Praefix, PDFs liefen als Download statt inline, Groessen-Select blieb leer,
Mehrfach-Upload nahm nur die erste Datei, Race-Condition bei schnellem Seitenwechsel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 00:33:20 +02:00

51 lines
1.7 KiB
PHP

<?php
/* Liefert Teilstuecke der Editor-Oberflaeche als HTML, damit nach dem Hinzufuegen,
* Loeschen oder Hochladen kein kompletter Seiten-Reload noetig ist (der warf den
* Editor jedes Mal auf Seite 1 zurueck und verwarf den Zoom).
*
* GET: berichtid, what = pages | attachments | both
* Antwort: { success, pages_html?, attachments_html?, page_count }
*/
require_once __DIR__.'/_inc.php';
global $db, $user, $langs, $conf;
$berichtid = GETPOSTINT('berichtid');
$what = GETPOST('what', 'alpha');
if (!in_array($what, array('pages', 'attachments', 'both'), true)) $what = 'both';
if (!$berichtid) bericht_ajax_fail('berichtid fehlt');
$bericht = new Bericht($db);
if ($bericht->fetch($berichtid) <= 0) bericht_ajax_fail('Bericht nicht gefunden', 404);
$langs->loadLangs(array('bericht@bericht', 'other'));
$out = array();
$pages = BerichtPage::fetchAllForBericht($db, $bericht->id);
$out['page_count'] = count($pages);
if ($what === 'pages' || $what === 'both') {
ob_start();
bericht_print_page_list($pages);
$out['pages_html'] = ob_get_clean();
}
if ($what === 'attachments' || $what === 'both') {
$parent = bericht_fetch_parent($db, $bericht->element_type, $bericht->fk_element);
if (!$parent) bericht_ajax_fail('Verknüpftes Objekt nicht gefunden', 404);
$attachments = bericht_collect_attachments($db, $parent, $bericht->element_type);
$used_paths = bericht_used_source_paths($db, $bericht->id);
$by_source = array();
foreach ($attachments as $a) {
$by_source[$a['source'].':'.$a['source_ref']][] = $a;
}
ob_start();
bericht_print_attachment_list($by_source, $used_paths);
$out['attachments_html'] = ob_get_clean();
$out['attachment_count'] = count($attachments);
}
bericht_ajax_ok($out);