daUser->username(); $prefix = $ctx->daUser->prefix(); $availableRoles = array_map(static fn(array $r): string => $r['name'], $ctx->mysql->listRolesForUser($daUser)); $selectedRoles = $ctx->postArray('roles'); if (empty($selectedRoles)) { $queryRole = $ctx->queryString('role'); if ($queryRole !== '') { $selectedRoles = [$queryRole]; } } $selectedRoles = array_values(array_unique(array_filter($selectedRoles, static fn(string $v): bool => $v !== ''))); $confirmDelete = $ctx->postString('confirm_delete') === '1'; if ($ctx->isPost() && !$confirmDelete) { try { $ctx->requireCsrf('select_delete_users'); } catch (Throwable $e) { $errors[] = $e->getMessage(); $selectedRoles = []; } } if ($ctx->isPost() && $confirmDelete) { try { $ctx->requireCsrf('delete_users_confirm'); if (empty($selectedRoles)) { throw new RuntimeException('Nie wybrano użytkowników do usunięcia.'); } $deleted = []; $skipped = []; foreach ($selectedRoles as $rawRole) { try { $role = NamePolicy::normalizeRoleName($rawRole, $prefix); if (!in_array($role, $availableRoles, true)) { $skipped[] = $role . ' (nie istnieje)'; continue; } $owned = $ctx->mysql->roleOwnedDatabases($role, $daUser); if (!empty($owned)) { $skipped[] = $role . ' (właściciel baz: ' . implode(', ', $owned) . ')'; continue; } $assigned = $ctx->mysql->roleAssignedDatabases($role, $daUser); foreach ($assigned as $dbName) { $owner = $ctx->mysql->getDatabaseOwner($dbName); if ($owner !== null && $owner !== $role) { $ctx->mysql->reassignOwnedObjects($dbName, $role, $owner); } $ctx->mysql->revokePrivileges($dbName, $role); } $ctx->mysql->deleteRoleHosts($daUser, $role); $ctx->mysql->dropRole($role); $deleted[] = $role; } catch (Throwable $inner) { $skipped[] = $rawRole . ' (' . $inner->getMessage() . ')'; } } $sync = $ctx->mysql->syncHostRules(); if (!$sync['ok']) { $errors[] = 'Usuwanie wykonane, ale synchronizacja hostów MySQL nie powiodła się: ' . $sync['output']; } if (!empty($deleted)) { $ok[] = 'Usunięto użytkowników: ' . implode(', ', $deleted); } if (!empty($skipped)) { $errors[] = 'Nie usunięto: ' . implode('; ', $skipped); } $selectedRoles = []; $availableRoles = array_map(static fn(array $r): string => $r['name'], $ctx->mysql->listRolesForUser($daUser)); } catch (Throwable $e) { $errors[] = $e->getMessage(); } } if (empty($selectedRoles)) { $rows = ''; foreach ($availableRoles as $roleName) { $assigned = $ctx->mysql->roleAssignedDatabases($roleName, $daUser); $owned = $ctx->mysql->roleOwnedDatabases($roleName, $daUser); $rows .= ''; $rows .= ''; $rows .= '' . AppContext::e($roleName) . ''; $rows .= '' . AppContext::e(implode(', ', $assigned)) . ''; $rows .= '' . AppContext::e(implode(', ', $owned)) . ''; $rows .= ''; } if ($rows === '') { $rows = 'Brak użytkowników do usunięcia.'; } $body = ''; $body .= '
'; $body .= $ctx->csrfField('select_delete_users'); $body .= '' . $rows . '
UżytkownikPrzypisane bazyBazy, których jest właścicielem
'; $body .= '
'; $body .= '
'; $ctx->renderPage('Usuwanie Użytkowników', $body, $ok, $errors); return; } $confirmRows = ''; foreach ($selectedRoles as $rawRole) { try { $role = NamePolicy::normalizeRoleName($rawRole, $prefix); $assigned = $ctx->mysql->roleAssignedDatabases($role, $daUser); $owned = $ctx->mysql->roleOwnedDatabases($role, $daUser); $confirmRows .= ''; $confirmRows .= '' . AppContext::e($role) . ''; $confirmRows .= '' . AppContext::e(implode(', ', $assigned)) . ''; $confirmRows .= '' . AppContext::e(implode(', ', $owned)) . ''; $confirmRows .= ''; } catch (Throwable $e) { $errors[] = $rawRole . ': ' . $e->getMessage(); } } if ($confirmRows === '') { $ctx->renderPage('Usuwanie Użytkowników', '

Brak poprawnych użytkowników do usunięcia.

', $ok, $errors); return; } $body = ''; $body .= '

Potwierdź usunięcie zaznaczonych użytkowników MySQL. Operacja jest nieodwracalna.

'; $body .= '
'; $body .= $ctx->csrfField('delete_users_confirm'); $body .= ''; $body .= ''; $body .= $confirmRows; $body .= '
UżytkownikPrzypisane bazyBazy, których jest właścicielem
'; $body .= '
'; $body .= ''; $body .= 'Anuluj'; $body .= '
'; $body .= '
'; $ctx->renderPage('Potwierdzenie Usuwania Użytkowników', $body, $ok, $errors); };