{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Controller\/ContractController.php"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Controller\/ContractController.php",
"content": "<?php\n\nnamespace Controller;\n\nuse Framework\\Controller;\nuse Infrastructure\\Persistence\\ContractRepository;\n\nclass ContractController extends Controller\n{\n private ContractRepository $repository;\n\n public function __construct()\n {\n $this->repository = new ContractRepository();\n }\n\n \/**\n * GET \/contracts\n *\/\n public function index(): void\n {\n $filters = [];\n if (isset($_GET['status']) && $_GET['status'] !== '') {\n $filters['status'] = $_GET['status'];\n }\n\n $contracts = $this->repository->findAll($filters);\n $stats = $this->repository->getStatistics();\n\n $this->view('contracts.index', [\n 'title' => 'Contracts',\n 'contracts' => $contracts,\n 'stats' => $stats,\n 'currentStatus' => $_GET['status'] ?? '',\n ]);\n }\n\n \/**\n * GET \/contracts\/new\n *\/\n public function contractNew(): void\n {\n $this->view('contracts.new', [\n 'title' => 'Neuer Contract',\n ]);\n }\n\n \/**\n * POST \/contracts\n *\/\n public function store(): void\n {\n $this->requireCsrf();\n\n $name = trim($_POST['name'] ?? '');\n $version = trim($_POST['version'] ?? '1.0');\n $yamlContent = $_POST['yaml_content'] ?? '';\n $scopeDescription = trim($_POST['scope_description'] ?? '');\n $status = $_POST['status'] ?? 'active';\n\n if ($name === '' || $yamlContent === '') {\n $_SESSION['error'] = 'Name und YAML-Inhalt sind erforderlich.';\n header('Location: \/contracts\/new');\n exit;\n }\n\n \/\/ YAML-Syntax validieren\n try {\n yaml_parse($yamlContent);\n } catch (\\Exception $e) {\n $_SESSION['error'] = 'Ungültige YAML-Syntax: ' . $e->getMessage();\n header('Location: \/contracts\/new');\n exit;\n }\n\n $contractId = $this->repository->create([\n 'name' => $name,\n 'version' => $version,\n 'yaml_content' => $yamlContent,\n 'scope_description' => $scopeDescription,\n 'status' => $status,\n ]);\n\n $_SESSION['success'] = 'Contract erfolgreich erstellt.';\n header('Location: \/contracts\/' . $contractId);\n exit;\n }\n\n \/**\n * GET \/contracts\/{id}\n *\/\n public function show(string $id): void\n {\n $contract = $this->repository->findById((int) $id);\n\n if ($contract === null) {\n http_response_code(404);\n echo 'Contract nicht gefunden';\n\n return;\n }\n\n $history = $this->repository->getHistory((int) $id);\n $validations = $this->repository->getValidations((int) $id, 10);\n\n $this->view('contracts.show', [\n 'title' => $contract['name'],\n 'contract' => $contract,\n 'history' => $history,\n 'validations' => $validations,\n ]);\n }\n\n \/**\n * GET \/contracts\/{id}\/edit\n *\/\n public function edit(string $id): void\n {\n $contract = $this->repository->findById((int) $id);\n\n if ($contract === null) {\n http_response_code(404);\n echo 'Contract nicht gefunden';\n\n return;\n }\n\n $this->view('contracts.edit', [\n 'title' => 'Contract bearbeiten: ' . $contract['name'],\n 'contract' => $contract,\n ]);\n }\n\n \/**\n * POST \/contracts\/{id}\n *\/\n public function update(string $id): void\n {\n $this->requireCsrf();\n\n $contract = $this->repository->findById((int) $id);\n\n if ($contract === null) {\n http_response_code(404);\n echo 'Contract nicht gefunden';\n\n return;\n }\n\n $yamlContent = $_POST['yaml_content'] ?? '';\n $newVersion = trim($_POST['new_version'] ?? '');\n $changeDescription = trim($_POST['change_description'] ?? '');\n\n if ($yamlContent === '' || $newVersion === '') {\n $_SESSION['error'] = 'YAML-Inhalt und neue Version sind erforderlich.';\n header('Location: \/contracts\/' . $id . '\/edit');\n exit;\n }\n\n \/\/ YAML-Syntax validieren\n try {\n yaml_parse($yamlContent);\n } catch (\\Exception $e) {\n $_SESSION['error'] = 'Ungültige YAML-Syntax: ' . $e->getMessage();\n header('Location: \/contracts\/' . $id . '\/edit');\n exit;\n }\n\n $this->repository->createNewVersion(\n (int) $id,\n $yamlContent,\n $newVersion,\n $changeDescription\n );\n\n $_SESSION['success'] = 'Contract auf Version ' . $newVersion . ' aktualisiert.';\n header('Location: \/contracts\/' . $id);\n exit;\n }\n\n \/**\n * POST \/contracts\/{id}\/validate\n *\/\n public function validate(string $id): void\n {\n $this->requireCsrf();\n\n $contract = $this->repository->findById((int) $id);\n\n if ($contract === null) {\n http_response_code(404);\n echo 'Contract nicht gefunden';\n\n return;\n }\n\n $result = $this->repository->runValidation((int) $id);\n\n $_SESSION['validation_result'] = $result;\n header('Location: \/contracts\/' . $id);\n exit;\n }\n\n \/**\n * POST \/contracts\/{id}\/deprecate\n *\/\n public function deprecate(string $id): void\n {\n $this->requireCsrf();\n\n $contract = $this->repository->findById((int) $id);\n\n if ($contract === null) {\n http_response_code(404);\n echo 'Contract nicht gefunden';\n\n return;\n }\n\n $this->repository->deprecate((int) $id);\n\n $_SESSION['success'] = 'Contract als deprecated markiert.';\n header('Location: \/contracts\/' . $id);\n exit;\n }\n}\n",
"numLines": 227,
"startLine": 1,
"totalLines": 227
}
}
}