accountHandler = $accountHandler; } // -- /accounts - List all accounts public function showAccounts(Request $request, Response $response): Response { // Parse query parameters for filters $queryParams = $request->getQueryParams(); $filterByDomain = $queryParams['domain'] ?? ''; $renderData = $this->accountHandler->listAccounts($filterByDomain); return $this->view->render($response, 'accounts.html.twig', $renderData); } // -- /accounts/{id} - Show account details public function showAccountDetails(Request $request, Response $response, array $args): Response { // Parse URL arguments $accountId = (int)$args['id']; $renderData = $this->accountHandler->getAccountDetails($accountId); return $this->view->render($response, 'account_details.html.twig', $renderData); } // -- /accounts/new - Create new account public function showAccountCreate(Request $request, Response $response): Response { $renderData = $this->accountHandler->getPageDataForCreate(); // If the form has been submitted, add the result message and form input data to the render data array $lastActionResult = $this->sessionHelper->getLastActionResult(); if ($lastActionResult !== null) { $renderData = array_merge($renderData, $lastActionResult->getRenderData()); } return $this->view->render($response, 'account_create.html.twig', $renderData); } public function createAccount(Request $request, Response $response): Response { // Parse form data $createData = $request->getParsedBody(); try { // Validate input $validatedCreateData = AccountCreateData::createFromArray($createData); $createResult = $this->accountHandler->createNewAccount($validatedCreateData); // Save success result $successMessage = "Account {$createResult['username']} was created."; if (!empty($createResult['generatedPassword'])) { $successMessage .= "\nThe password generated for this account is: {$createResult['generatedPassword']}"; } $this->sessionHelper->setLastActionResult(ActionResult::createSuccessResult($successMessage)); } catch (InputValidationError $e) { // Save error result $this->sessionHelper->setLastActionResult(ActionResult::createErrorResult($e->getMessage(), $createData)); } // Redirect to edit form page via GET (PRG) return $response->withHeader('Location', '/accounts/new')->withStatus(303); } // -- /accounts/{id}/edit - Edit account public function showAccountEdit(Request $request, Response $response, array $args): Response { // Parse URL arguments $accountId = (int)$args['id']; // Get account data from database $renderData = $this->accountHandler->getAccountDataForEdit($accountId); // If the form has been submitted, add the result message and form input data to the render data array $lastActionResult = $this->sessionHelper->getLastActionResult(); if ($lastActionResult !== null) { $renderData = array_merge($renderData, $lastActionResult->getRenderData()); } return $this->view->render($response, 'account_edit.html.twig', $renderData); } public function editAccount(Request $request, Response $response, array $args): Response { // Parse URL arguments and form data $accountId = (int)$args['id']; $editData = $request->getParsedBody(); try { // Validate input $validatedEditData = AccountEditData::createFromArray($editData); $editResult = $this->accountHandler->editAccountData($accountId, $validatedEditData); // Save success result $successMessage = "Account data was saved."; if (!empty($editResult['generatedPassword'])) { $successMessage .= "\nThe new password generated for this account is: {$editResult['generatedPassword']}"; } $this->sessionHelper->setLastActionResult(ActionResult::createSuccessResult($successMessage)); } catch (InputValidationError $e) { // Save error result $this->sessionHelper->setLastActionResult(ActionResult::createErrorResult($e->getMessage(), $editData)); } // Redirect to edit form page via GET (PRG) return $response->withHeader('Location', '/accounts/' . $accountId . '/edit')->withStatus(303); } // -- /accounts/{id}/delete - Delete account public function showAccountDelete(Request $request, Response $response, array $args): Response { // Parse URL arguments $accountId = (int)$args['id']; // Get account data and list of aliases from database $renderData = $this->accountHandler->getAccountDataForDelete($accountId); return $this->view->render($response, 'account_delete.html.twig', $renderData); } public function deleteAccount(Request $request, Response $response, array $args): Response { // TODO: just a placeholder $this->view->getEnvironment()->addGlobal('error', 'Not implemented yet!'); return $this->showAccountDelete($request, $response, $args); } }