['message' => 'Authentication required.']]); exit; } $userId = $_SESSION['user_id']; $personId = filter_input(INPUT_POST, 'person_id', FILTER_VALIDATE_INT); $processDefinitionId = filter_input(INPUT_POST, 'process_id', FILTER_VALIDATE_INT); $processCode = filter_input(INPUT_POST, 'process_code', FILTER_SANITIZE_STRING); $deleteExisting = filter_input(INPUT_POST, 'delete_existing'); $mode = filter_input(INPUT_POST, 'mode', FILTER_SANITIZE_STRING); $pdo = db(); if (!$processDefinitionId && $processCode) { $stmt = $pdo->prepare("SELECT id FROM process_definitions WHERE code = ? AND is_latest = 1 LIMIT 1"); $stmt->execute([$processCode]); $processDefinitionId = $stmt->fetchColumn(); } if (!$personId || !$processDefinitionId) { throw new InvalidArgumentException('Invalid or missing person_id or process_id/process_code.'); } $engine = new WorkflowEngine(); if($deleteExisting === '1') { $instance = $engine->getInstanceByDefId($personId, $processDefinitionId); if ($instance) { $engine->deleteInstance($instance['id']); } } if ($mode === 'create_new_run' || filter_input(INPUT_POST, 'force', FILTER_VALIDATE_INT) === 1) { $instance = $engine->createNewInstance($personId, $processDefinitionId, $userId); } else { $instance = $engine->getOrCreateInstanceByDefId($personId, $processDefinitionId, $userId); } if ($instance) { echo json_encode(['success' => true, 'message' => 'Process initialized successfully.', 'instance_id' => $instance['id']]); } else { throw new Exception("Failed to initialize process for an unknown reason."); }