bericht/ajax/upload_extra.php
Eduard Wisch 7b69c0f180
All checks were successful
Deploy bericht / deploy (push) Successful in 14s
1.7.4: AVIF-Bilder beim Hochladen in JPG/PNG umwandeln [deploy]
Eddy: „es gibt immer mehr Bilder im Netz, die AVIF verwenden". Neue
lib/bericht_avif.lib.php erkennt AVIF am Inhalt (auch unter „.jpg") und
wandelt es vor der Endungsprüfung um: deckend → JPG, transparent → PNG
(nur GD, ImageMagick 6 verliert den Alphakanal; Muster KB #1698).

Abgedeckt: Editor-Upload (ajax/upload_extra.php, accept + Dateifilter),
PWA-Foto (api/orders.php upload_photo), Handy-Upload per QR
(mobile_upload.php; verkleinerte Bilder heißen jetzt .jpg statt der
alten Endung).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:43:40 +02:00

65 lines
2.5 KiB
PHP

<?php
/* Upload einer zusätzlichen Datei direkt in den Bericht.
* POST: berichtid, token, file (multipart)
*/
require_once __DIR__.'/_inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
global $db, $user;
if (!$user->hasRight('bericht', 'write')) bericht_ajax_fail('Permission denied', 403);
$berichtid = (int) ($_POST['berichtid'] ?? 0);
$bericht = new Bericht($db);
if ($bericht->fetch($berichtid) <= 0) bericht_ajax_fail('Bericht nicht gefunden', 404);
if (empty($_FILES['file']['tmp_name'])) bericht_ajax_fail('Keine Datei hochgeladen');
// AVIF (aus dem Netz, auch unter „.jpg") vor Endungsprüfung und Namensbildung in JPG/PNG umwandeln
require_once __DIR__.'/../lib/bericht_avif.lib.php';
$avif_fehler = bericht_upload_avif_umwandeln($_FILES['file']);
if ($avif_fehler !== '') bericht_ajax_fail($avif_fehler);
$origname = dol_sanitizeFileName($_FILES['file']['name']);
$ext = strtolower(pathinfo($origname, PATHINFO_EXTENSION));
$allowed = array('pdf', 'png', 'jpg', 'jpeg');
if (!in_array($ext, $allowed)) bericht_ajax_fail('Dateityp nicht erlaubt');
$workdir = DOL_DATA_ROOT.'/bericht/work/'.$berichtid;
if (!is_dir($workdir)) dol_mkdir($workdir);
$target = $workdir.'/'.dol_print_date(dol_now(), '%Y%m%d_%H%M%S').'_'.$origname;
if (!move_uploaded_file($_FILES['file']['tmp_name'], $target)) bericht_ajax_fail('Upload fehlgeschlagen');
$relpath = str_replace(DOL_DATA_ROOT.'/', '', $target);
// Zur Bericht-Page-Liste hinzufügen
$res = $db->query("SELECT COALESCE(MAX(page_order),0) AS m FROM ".$db->prefix()."bericht_page WHERE fk_bericht = ".((int) $berichtid));
$next_order = ($res && ($o = $db->fetch_object($res))) ? ((int) $o->m) + 1 : 1;
if ($ext === 'pdf') {
require_once __DIR__.'/add_attachment.php'; // bericht_pdf_pagecount
}
$created = array();
if ($ext === 'pdf') {
$pagecount = function_exists('bericht_pdf_pagecount') ? bericht_pdf_pagecount($target) : 1;
for ($p = 1; $p <= $pagecount; $p++) {
$page = new BerichtPage($db);
$page->fk_bericht = $berichtid;
$page->page_order = $next_order++;
$page->source_type = 'pdf';
$page->source_path = $relpath;
$page->source_page = $p;
if ($page->create() > 0) $created[] = $page->id;
}
} else {
$page = new BerichtPage($db);
$page->fk_bericht = $berichtid;
$page->page_order = $next_order++;
$page->source_type = 'upload';
$page->source_path = $relpath;
if ($page->create() > 0) $created[] = $page->id;
}
bericht_ajax_ok(array('created' => $created, 'relpath' => $relpath));