accountRepository = $accountRepository; $this->aliasRepository = $aliasRepository; } // -- /accounts - List all accounts public function showAccounts(Request $request, Response $response): Response { // Parse query parameters for filters $queryParams = $request->getQueryParams(); $filterByDomain = $queryParams['domain'] ?? null; $renderData = [ 'filterDomain' => $filterByDomain, 'accountList' => $this->accountRepository->fetchAccountList($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']; // Get account data from database $account = $this->accountRepository->fetchAccountById($accountId); // Don't display the password hash, but at least the type of hash (used hash algorithm) if ($account->getPasswordHash() === '') { $passwordHashType = 'empty'; } else { $passwordHashInfo = password_get_info($account->getPasswordHash()); $passwordHashType = $passwordHashInfo['algoName'] ?? 'unknown'; } // Get list of aliases for this account $aliases = $this->aliasRepository->fetchAliasesForUserId($accountId); $renderData = [ 'id' => $accountId, 'accountUsername' => $account->getUsername(), 'account' => $account, 'passwordHashType' => $passwordHashType, 'aliases' => $aliases, ]; return $this->view->render($response, 'account_details.html.twig', $renderData); } // -- /accounts/new - Create new account public function showAccountCreate(Request $request, Response $response): Response { return $this->showAccounts($request, $response); } // -- /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 $account = $this->accountRepository->fetchAccountById($accountId); // Render page return $this->renderEditPage($response, $account); } public function editAccount(Request $request, Response $response, array $args): Response { // TODO: just a placeholder $this->view->getEnvironment()->addGlobal('error', 'Not implemented yet!'); return $this->showAccountEdit($request, $response, $args); } private function renderEditPage(Response $response, Account $account, array $extraRenderData = []): Response { $renderData = [ 'id' => $account->getId(), 'accountUsername' => $account->getUsername(), 'account' => $account, ]; return $this->view->render($response, 'account_edit.html.twig', array_merge($renderData, $extraRenderData)); } // -- /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 $account = $this->accountRepository->fetchAccountById($accountId); $aliases = $this->aliasRepository->fetchAliasesForUserId($accountId); $renderData = [ 'id' => $accountId, 'accountUsername' => $account->getUsername(), 'aliases' => $aliases, ]; 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); } }