bericht/ajax/list_pages.php
Eduard Wisch 3d84f7e0be
All checks were successful
Deploy bericht / deploy (push) Successful in 1s
feat: Phase 2.1 + 2.2 — Mobile-Upload mit QR-Code
Phase 2.1 Token-System:
- Neue Tabelle llx_bericht_upload_token (token, fk_bericht, expires_at,
  uploads_count, max_uploads)
- BerichtUploadToken-Klasse mit create/fetchValid/incrementCount/cleanupExpired
- Cronjob 'Bericht: Expired Upload-Tokens bereinigen' täglich
- 64-Hex random_bytes-Tokens, 1h Lifetime, 100 Uploads max

Phase 2.2 QR-Upload Lite:
- mobile_upload.php — Mobile-optimierte Page ohne Dolibarr-Login,
  Auth nur über Token in URL/Form
- 📷 Foto aufnehmen (capture=environment) und 📂 Galerie
- Clientseitiges Resize auf max 2000px (Canvas, JPEG q=0.85)
- Upload-Status mit Toast-Notifications
- Liste der hochgeladenen Bilder live in der Page
- ajax/create_upload_token.php — generiert Token für aktiven Bericht
- ajax/list_pages.php — Polling-Endpoint für Editor
- 📱 Mobil hochladen-Button im Editor → QR-Modal mit qrcodejs
- Polling alle 5s nach neuen Pages, auto-reload bei Änderung
- QR-Modal styled für Dark-Theme

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-08 22:38:33 +02:00

23 lines
712 B
PHP

<?php
/* Liefert die aktuelle Liste der Seiten eines Berichts (für Polling vom QR-Upload).
* GET: berichtid
*/
require_once __DIR__.'/_inc.php';
global $db, $user;
if (!$user->hasRight('bericht', 'read')) bericht_ajax_fail('Permission denied', 403);
$berichtid = (int) (GETPOSTINT('berichtid'));
if (!$berichtid) bericht_ajax_fail('berichtid fehlt');
$pages = BerichtPage::fetchAllForBericht($db, $berichtid);
$out = array();
foreach ($pages as $p) {
$out[] = array(
'id' => (int) $p->id,
'page_order' => (int) $p->page_order,
'source_type'=> $p->source_type,
'layout' => $p->layout,
);
}
bericht_ajax_ok(array('pages' => $out, 'count' => count($out)));