24 lines
1.1 KiB
PHP
24 lines
1.1 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/common.php';
|
|
|
|
/**
|
|
* Absturzbericht der Android-App (wird beim nächsten Start nach der Anmeldung gesendet) und im Aktivitätsprotokoll abgelegt.
|
|
* POST {appVersion, device, trace}
|
|
*/
|
|
api_require_method('POST');
|
|
$staff = api_require_staff();
|
|
$body = api_request_body();
|
|
$trace = trim((string) ($body['trace'] ?? ''));
|
|
if ($trace === '') api_error(422, 'TRACE_REQUIRED', 'Kein Absturzbericht übermittelt.');
|
|
$line = 'App-Absturz v' . mb_substr((string) ($body['appVersion'] ?? '?'), 0, 12) . ' ' . mb_substr((string) ($body['device'] ?? '?'), 0, 30) . ': ' . mb_substr(preg_replace('/\s+/', ' ', $trace), 0, 190);
|
|
// Pro Mitarbeiter höchstens 20 Berichte pro Tag (Schutz vor Absturzschleifen); der Zähler steht als "Datum:Anzahl" in einer Einstellung je Mitarbeiter
|
|
$key = 'crash_count_' . (int) $staff['id'];
|
|
[$day, $n] = array_pad(explode(':', (string) get_setting($key, '')), 2, '0');
|
|
$n = $day === date('Ymd') ? (int) $n : 0;
|
|
if ($n < 20) {
|
|
set_setting($key, date('Ymd') . ':' . ($n + 1));
|
|
audit_log((int) $staff['id'], $line);
|
|
}
|
|
api_json(['received' => true], 201);
|