app update final
This commit is contained in:
parent
e06a717e4b
commit
b6500bebe1
6 changed files with 406 additions and 30 deletions
58
04_Tablet-Quiz/app/feedback.php
Normal file
58
04_Tablet-Quiz/app/feedback.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
/**
|
||||
* SLC-Workshop — minimaler Feedback-Sammelpunkt (Referenz-Implementierung).
|
||||
*
|
||||
* Nimmt einen JSON-POST der Companion-App entgegen und hängt ihn als eine Zeile
|
||||
* (JSON Lines) an eine Datei an. Kein Framework, keine Datenbank, keine Secrets.
|
||||
*
|
||||
* Auswertung später: die Datei `feedback-data/feedback.jsonl` einlesen (jede Zeile
|
||||
* ein JSON-Objekt) — z. B. nach JSON/CSV konvertieren.
|
||||
*
|
||||
* Voraussetzung: PHP (php-fpm) ist auf dem Webserver aktiv und dieser Pfad wird
|
||||
* von der App aus erreicht (gleiche Domain). Schreibrechte aufs Datenverzeichnis
|
||||
* sind nötig. Alternativen (Node/Caddy) siehe DEPLOY.md.
|
||||
*/
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
// Nur POST erlaubt (GET nur als simpler Health-Check).
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
echo json_encode(['ok' => true, 'service' => 'slc-feedback', 'hint' => 'POST JSON to store feedback']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$raw = file_get_contents('php://input');
|
||||
if ($raw === false || strlen($raw) === 0 || strlen($raw) > 65536) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['ok' => false, 'error' => 'empty or oversized body']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$data = json_decode($raw, true);
|
||||
if (!is_array($data)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['ok' => false, 'error' => 'invalid json']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Serverseitigen Eingangszeitstempel + Roh-Metadaten ergänzen (nicht überschreibend).
|
||||
$data['_received'] = gmdate('c');
|
||||
$data['_ip'] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
|
||||
|
||||
$dir = __DIR__ . '/feedback-data';
|
||||
$file = $dir . '/feedback.jsonl';
|
||||
if (!is_dir($dir)) { @mkdir($dir, 0775, true); }
|
||||
|
||||
$line = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . "\n";
|
||||
$fp = @fopen($file, 'ab');
|
||||
if ($fp === false) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['ok' => false, 'error' => 'cannot open data file (Schreibrechte prüfen)']);
|
||||
exit;
|
||||
}
|
||||
flock($fp, LOCK_EX);
|
||||
fwrite($fp, $line);
|
||||
flock($fp, LOCK_UN);
|
||||
fclose($fp);
|
||||
|
||||
echo json_encode(['ok' => true]);
|
||||
Loading…
Add table
Add a link
Reference in a new issue