added new signature action

This commit is contained in:
Luca Haid
2025-05-15 14:02:29 +02:00
parent 4716c3156a
commit 1b485aca83
7 changed files with 656 additions and 4 deletions
@@ -168,6 +168,7 @@ class ConstructionConsentController extends mfBaseController {
protected function downloadAction()
{
$owner_id = $this->request->owner_id;
$open = $this->request->open;
if (!is_numeric($owner_id) || $owner_id < 1 || !($owner = new ConstructionConsentOwner($owner_id))->id) {
$this->layout()->setFlash("Besitzer nicht gefunden", "error");
@@ -184,7 +185,7 @@ class ConstructionConsentController extends mfBaseController {
$this->redirect("ConstructionConsent", "View", ["id" => $cc->id]);
}
$this->sendPdfResponse($filename, "Zustimmungserklärung-{$cc->id}-{$owner_id}.pdf");
$this->sendPdfResponse($filename, "Zustimmungserklärung-{$cc->id}-{$owner_id}.pdf", $open === 'true');
}
protected function downloadMultipleAction()
@@ -224,10 +225,12 @@ class ConstructionConsentController extends mfBaseController {
$this->sendPdfResponse($filename, "Zustimmungserklärungen-".date('Y-m-d').".pdf");
}
private function sendPdfResponse(string $filename, string $downloadName): void
private function sendPdfResponse(string $filename, string $downloadName, bool $open = false): void
{
header('Content-Type: ' . mime_content_type($filename));
header('Content-disposition: attachment; filename="' . rawurlencode($downloadName) . '"');
if ($open === true) header('Content-disposition: inline; filename="' . rawurlencode($downloadName) . '"');
else header('Content-disposition: attachment; filename="' . rawurlencode($downloadName) . '"');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
@@ -1278,4 +1281,84 @@ class ConstructionConsentController extends mfBaseController {
fclose($output);
exit();
}
protected function searchTabletAction() {
$name = '';
$filter = [];
// Handle POST data - support both form data and JSON input
if($_SERVER['REQUEST_METHOD'] === 'POST') {
$postData = [];
// Check for JSON input (Axios sends JSON)
$inputJSON = file_get_contents('php://input');
$jsonData = json_decode($inputJSON, true);
if($jsonData !== null) {
$postData = $jsonData;
} else {
$postData = $_POST;
}
if(isset($postData['name'])) {
$name = $postData['name'];
}
if(isset($postData['filter']) && is_array($postData['filter'])) {
$filter = $postData['filter'];
}
}
$results = ConstructionConsent::searchConstructionConsentBasedOnName($name, $filter);
self::returnJson([
'success' => true,
'count' => count($results),
'results' => $results
]);
}
protected function signTabletAction() {
$JSGlobals = ["BASE_PATH" => self::getUrl(""),
"DASHBOARD_URL" => self::getUrl("Dashboard"),
"MFAPPNAME" => MFAPPNAME_SLUG,
"PAGE_TITLE" => "Zustimmungserklärungen unterzeichnen",
"PATH" => [
["text" => MFAPPNAME_SLUG, "href" => self::getUrl("Dashboard")],
["text" => "Zustimmungserklärungen unterzeichnen", "href" => self::getUrl("ConstructionConsent", "SignTablet")],
],
"IS_ADMIN" => $this->me->is("Admin"),
];
$this->layout()->set("vueViewName", "ConstructionConsentSignTablet");
$this->layout()->set("JSGlobals", $JSGlobals);
$this->layout()->setTemplate("VueViews/Vue");
}
protected function signAction() {
$POST = json_decode(file_get_contents('php://input'), true);
$owner_id = $POST['owner_id'] ?? null;
$signature = $POST['signature'] ?? null;
$signature_name = $POST['signature_name'] ?? null;
$signature_date = $POST['signature_date'] ?? null;
if(!$owner_id || !$signature) {
self::sendError("Invalid request");
}
$owner = new ConstructionConsentOwner($owner_id);
if(!$owner->id) self::sendError("Owner not found");
if($signature_name) $owner->signature_name = $signature_name;
if($signature_date) $owner->signature_date = date("U", strtotime($signature_date));
if($signature) $owner->signature = $signature;
$owner->status = 'returned';
$owner->result = 'accepted';
if(!$owner->save()) self::sendError("Error saving signature");
self::returnJson(["success" => true]);
}
}