feat(admin): paginacao na interface, edicao de utilizadores e pagina de testes
- fila e utilizadores passam a pedir uma pagina de cada vez, com pesquisa e filtros; nada e cortado no browser, porque o que faltava nunca chegou a ser buscado. A pesquisa espera que se pare de escrever: cada tecla seria mais uma consulta, e as respostas podem chegar fora de ordem - pageWindow e pageRange tem testes proprios: uma pagina fora do intervalo vem de um URL velho ou de uma lista que encolheu, e nao pode dar um paginador vazio ou negativo, nem dizer "76 a 100 de 82" - editar utilizador: papel, quota, idioma, com os apelidos que entregam naquela caixa a mostra no mesmo painel - "Caixas de e-mail" passa a chamar-se Utilizadores, que e o que sao Pagina nova /admin/tests: verificacoes que o operador corre a mao, sobre o servidor ou sobre um utilizador. Todas leem estado; nenhuma envia correio nem altera definicoes -- uma pagina de diagnostico que mexe naquilo que diagnostica e pior do que nao existir. As regras de cada verificacao sao funcoes puras com testes, separadas da recolha dos factos. Alguns casos que estes testes fixam: uma quota zero significa sem limite, e um racio marcaria todas as caixas ilimitadas como cheias; um bloqueio ja expirado nao bloqueia ninguem e nao deve mandar ninguem investigar; e uma resposta de ausencia ligada com o periodo ja passado esta ligada sem fazer nada, que e o que parece avariado a quem a pos. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
52bf43b74f
commit
2b92abd185
16 files changed
+1431
-153
No files matched your search
@@ -44,7 +44,7 @@
|
||||
"mailHost": "Mail host",
|
||||
"mailboxCount": "{count} mailboxes",
|
||||
"mailboxesSubtitle": "Accounts, aliases, CSV import and the second-factor policy.",
|
||||
"mailboxesTitle": "Mailboxes",
|
||||
"mailboxesTitle": "Users",
|
||||
"mfaAdmins": "Required for admins",
|
||||
"mfaEveryone": "Required for everyone",
|
||||
"mfaOptional": "Optional",
|
||||
@@ -96,7 +96,15 @@
|
||||
"reconcileErrors": "The provider refused these:",
|
||||
"selectDomain": "Select",
|
||||
"domainSelected": "Selected",
|
||||
"tlsSelfSigned": "This certificate is self-signed (issuer: {issuer}). Clients that verify certificates will refuse the connection on the mail ports. Set TRAEFIK_ACME_DIR or STATIC_CERT_PATH to serve an issued certificate."
|
||||
"tlsSelfSigned": "This certificate is self-signed (issuer: {issuer}). Clients that verify certificates will refuse the connection on the mail ports. Set TRAEFIK_ACME_DIR or STATIC_CERT_PATH to serve an issued certificate.",
|
||||
"aliasesForUser": "Aliases delivering to this mailbox",
|
||||
"noAliasesForUser": "No alias delivers to this mailbox.",
|
||||
"testsTitle": "Tests",
|
||||
"testsSubtitle": "Checks you can run at any time. They all read state; none sends mail or changes a setting.",
|
||||
"serverChecks": "Server",
|
||||
"userChecks": "User",
|
||||
"runChecks": "Run",
|
||||
"checksRun": "{count} checks"
|
||||
},
|
||||
"auth": {
|
||||
"adminLoginTitle": "Admin console",
|
||||
@@ -358,12 +366,52 @@
|
||||
"italic": "Italic",
|
||||
"underline": "Underline",
|
||||
"insertLink": "Link",
|
||||
"insertImage": "Image"
|
||||
"insertImage": "Image",
|
||||
"showingRange": "Showing {from} to {to} of {total}",
|
||||
"noResults": "No results",
|
||||
"previousPage": "Previous page",
|
||||
"nextPage": "Next page",
|
||||
"searchPlaceholder": "Search...",
|
||||
"all": "All",
|
||||
"filters": "Filters",
|
||||
"editUser": "Edit user",
|
||||
"quotaMb": "Quota (MB)",
|
||||
"selectUser": "Select a user"
|
||||
},
|
||||
"folders": {
|
||||
"new": "New folder",
|
||||
"newPlaceholder": "New folder…",
|
||||
"delete": "Delete {name}",
|
||||
"deleteConfirm": "Delete the folder \"{name}\" and every message in it? This cannot be undone from the interface."
|
||||
},
|
||||
"checks": {
|
||||
"userActive": "The account is enabled",
|
||||
"userDisabled": "The account is disabled",
|
||||
"userLockedOut": "Locked out after failed sign-ins",
|
||||
"userNotLockedOut": "No active lockout",
|
||||
"userHasPassword": "Has a password set",
|
||||
"userHasNoPassword": "Has no password set",
|
||||
"quotaFull": "The quota is full",
|
||||
"quotaNearlyFull": "The quota is nearly full",
|
||||
"quotaHealthy": "The quota has headroom",
|
||||
"quotaUnlimited": "No quota limit",
|
||||
"mfaEnrolled": "Second factor enrolled",
|
||||
"mfaNotEnrolled": "No second factor",
|
||||
"aliasesDelivering": "Aliases delivering to this mailbox",
|
||||
"sieveScriptPresent": "Has filing rules",
|
||||
"vacationActive": "Autoresponder is on",
|
||||
"vacationWindowPast": "Autoresponder is on, but its window has passed",
|
||||
"vacationWindowFuture": "Autoresponder is on, its window has not started",
|
||||
"dnsVerified": "DNS records verified",
|
||||
"dnsNotVerified": "DNS records not verified",
|
||||
"noDomains": "No domains configured",
|
||||
"dkimMissing": "No DKIM key: the domain signs nothing",
|
||||
"queueHasBounces": "Bounced messages in the queue",
|
||||
"queueNoBounces": "No bounces in the queue",
|
||||
"queueHasDeferred": "Deferred messages in the queue",
|
||||
"queueNoDeferred": "No deferred messages",
|
||||
"queueHasFrozen": "Frozen messages in the queue",
|
||||
"usersOverQuota": "Users over their quota",
|
||||
"noUsersOverQuota": "No user is over quota"
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,7 @@
|
||||
"mailHost": "Host de correo",
|
||||
"mailboxCount": "{count} buzones",
|
||||
"mailboxesSubtitle": "Cuentas, alias, importación CSV y la política de segundo factor.",
|
||||
"mailboxesTitle": "Buzones",
|
||||
"mailboxesTitle": "Usuarios",
|
||||
"mfaAdmins": "Obligatorio para administradores",
|
||||
"mfaEveryone": "Obligatorio para todos",
|
||||
"mfaOptional": "Opcional",
|
||||
@@ -96,7 +96,15 @@
|
||||
"reconcileErrors": "El proveedor rechazó estos:",
|
||||
"selectDomain": "Seleccionar",
|
||||
"domainSelected": "Seleccionado",
|
||||
"tlsSelfSigned": "Este certificado es autofirmado (emisor: {issuer}). Los clientes que verifican el certificado rechazaran la conexion en los puertos de correo. Defina TRAEFIK_ACME_DIR o STATIC_CERT_PATH para servir un certificado emitido."
|
||||
"tlsSelfSigned": "Este certificado es autofirmado (emisor: {issuer}). Los clientes que verifican el certificado rechazaran la conexion en los puertos de correo. Defina TRAEFIK_ACME_DIR o STATIC_CERT_PATH para servir un certificado emitido.",
|
||||
"aliasesForUser": "Alias que entregan en este buzon",
|
||||
"noAliasesForUser": "Ningun alias entrega en este buzon.",
|
||||
"testsTitle": "Pruebas",
|
||||
"testsSubtitle": "Comprobaciones que puede ejecutar en cualquier momento. Todas leen el estado; ninguna envia correo ni cambia ajustes.",
|
||||
"serverChecks": "Servidor",
|
||||
"userChecks": "Usuario",
|
||||
"runChecks": "Ejecutar",
|
||||
"checksRun": "{count} comprobaciones"
|
||||
},
|
||||
"auth": {
|
||||
"adminLoginTitle": "Consola de administración",
|
||||
@@ -358,12 +366,52 @@
|
||||
"italic": "Cursiva",
|
||||
"underline": "Subrayado",
|
||||
"insertLink": "Enlace",
|
||||
"insertImage": "Imagen"
|
||||
"insertImage": "Imagen",
|
||||
"showingRange": "Mostrando {from} a {to} de {total}",
|
||||
"noResults": "Sin resultados",
|
||||
"previousPage": "Pagina anterior",
|
||||
"nextPage": "Pagina siguiente",
|
||||
"searchPlaceholder": "Buscar...",
|
||||
"all": "Todos",
|
||||
"filters": "Filtros",
|
||||
"editUser": "Editar usuario",
|
||||
"quotaMb": "Cuota (MB)",
|
||||
"selectUser": "Elegir usuario"
|
||||
},
|
||||
"folders": {
|
||||
"new": "Nueva carpeta",
|
||||
"newPlaceholder": "Nueva carpeta…",
|
||||
"delete": "Eliminar {name}",
|
||||
"deleteConfirm": "¿Eliminar la carpeta \"{name}\" y todos sus mensajes? Esto no se puede deshacer desde la interfaz."
|
||||
},
|
||||
"checks": {
|
||||
"userActive": "La cuenta esta activa",
|
||||
"userDisabled": "La cuenta esta desactivada",
|
||||
"userLockedOut": "Bloqueada por intentos fallidos",
|
||||
"userNotLockedOut": "Sin bloqueo activo",
|
||||
"userHasPassword": "Tiene contrasena definida",
|
||||
"userHasNoPassword": "No tiene contrasena definida",
|
||||
"quotaFull": "La cuota esta llena",
|
||||
"quotaNearlyFull": "La cuota esta casi llena",
|
||||
"quotaHealthy": "La cuota tiene margen",
|
||||
"quotaUnlimited": "Sin limite de cuota",
|
||||
"mfaEnrolled": "Segundo factor activo",
|
||||
"mfaNotEnrolled": "Sin segundo factor",
|
||||
"aliasesDelivering": "Alias que entregan en este buzon",
|
||||
"sieveScriptPresent": "Tiene reglas de filtrado",
|
||||
"vacationActive": "Respuesta de ausencia activada",
|
||||
"vacationWindowPast": "Respuesta de ausencia activada, pero el periodo ya paso",
|
||||
"vacationWindowFuture": "Respuesta de ausencia activada, el periodo aun no empezo",
|
||||
"dnsVerified": "Registros DNS verificados",
|
||||
"dnsNotVerified": "Registros DNS sin verificar",
|
||||
"noDomains": "Ningun dominio configurado",
|
||||
"dkimMissing": "Sin clave DKIM: el dominio no firma nada",
|
||||
"queueHasBounces": "Hay mensajes devueltos en la cola",
|
||||
"queueNoBounces": "Sin devoluciones en la cola",
|
||||
"queueHasDeferred": "Hay mensajes aplazados en la cola",
|
||||
"queueNoDeferred": "Sin mensajes aplazados",
|
||||
"queueHasFrozen": "Hay mensajes congelados en la cola",
|
||||
"usersOverQuota": "Usuarios con la cuota excedida",
|
||||
"noUsersOverQuota": "Ningun usuario con la cuota excedida"
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,7 @@
|
||||
"mailHost": "Host de e-mail",
|
||||
"mailboxCount": "{count} caixas de e-mail",
|
||||
"mailboxesSubtitle": "Contas, apelidos, importação CSV e a política de segundo fator.",
|
||||
"mailboxesTitle": "Caixas de e-mail",
|
||||
"mailboxesTitle": "Usuarios",
|
||||
"mfaAdmins": "Obrigatório para administradores",
|
||||
"mfaEveryone": "Obrigatório para todos",
|
||||
"mfaOptional": "Opcional",
|
||||
@@ -96,7 +96,15 @@
|
||||
"reconcileErrors": "O provedor recusou estes:",
|
||||
"selectDomain": "Selecionar",
|
||||
"domainSelected": "Selecionado",
|
||||
"tlsSelfSigned": "Este certificado e autoassinado (emissor: {issuer}). Clientes que verificam o certificado vao recusar a ligacao nas portas de correio. Defina TRAEFIK_ACME_DIR ou STATIC_CERT_PATH para servir um certificado emitido."
|
||||
"tlsSelfSigned": "Este certificado e autoassinado (emissor: {issuer}). Clientes que verificam o certificado vao recusar a ligacao nas portas de correio. Defina TRAEFIK_ACME_DIR ou STATIC_CERT_PATH para servir um certificado emitido.",
|
||||
"aliasesForUser": "Apelidos que entregam nesta caixa",
|
||||
"noAliasesForUser": "Nenhum apelido entrega nesta caixa.",
|
||||
"testsTitle": "Testes",
|
||||
"testsSubtitle": "Verificacoes que pode correr a qualquer momento. Todas leem o estado; nenhuma envia correio nem altera definicoes.",
|
||||
"serverChecks": "Servidor",
|
||||
"userChecks": "Utilizador",
|
||||
"runChecks": "Correr",
|
||||
"checksRun": "{count} verificacoes"
|
||||
},
|
||||
"auth": {
|
||||
"adminLoginTitle": "Console de administração",
|
||||
@@ -358,12 +366,52 @@
|
||||
"italic": "Itálico",
|
||||
"underline": "Sublinhado",
|
||||
"insertLink": "Link",
|
||||
"insertImage": "Imagem"
|
||||
"insertImage": "Imagem",
|
||||
"showingRange": "A mostrar {from} a {to} de {total}",
|
||||
"noResults": "Nenhum resultado",
|
||||
"previousPage": "Pagina anterior",
|
||||
"nextPage": "Pagina seguinte",
|
||||
"searchPlaceholder": "Pesquisar...",
|
||||
"all": "Todos",
|
||||
"filters": "Filtros",
|
||||
"editUser": "Editar utilizador",
|
||||
"quotaMb": "Quota (MB)",
|
||||
"selectUser": "Escolher utilizador"
|
||||
},
|
||||
"folders": {
|
||||
"new": "Nova pasta",
|
||||
"newPlaceholder": "Nova pasta…",
|
||||
"delete": "Apagar {name}",
|
||||
"deleteConfirm": "Apagar a pasta \"{name}\" e todas as mensagens nela? Isto não pode ser desfeito pela interface."
|
||||
},
|
||||
"checks": {
|
||||
"userActive": "A conta esta activa",
|
||||
"userDisabled": "A conta esta desactivada",
|
||||
"userLockedOut": "A conta esta bloqueada por tentativas falhadas",
|
||||
"userNotLockedOut": "Sem bloqueio activo",
|
||||
"userHasPassword": "Tem palavra-passe definida",
|
||||
"userHasNoPassword": "Nao tem palavra-passe definida",
|
||||
"quotaFull": "A quota esta cheia",
|
||||
"quotaNearlyFull": "A quota esta quase cheia",
|
||||
"quotaHealthy": "A quota tem folga",
|
||||
"quotaUnlimited": "Sem limite de quota",
|
||||
"mfaEnrolled": "Segundo factor activo",
|
||||
"mfaNotEnrolled": "Sem segundo factor",
|
||||
"aliasesDelivering": "Apelidos que entregam nesta caixa",
|
||||
"sieveScriptPresent": "Tem regras de filtragem",
|
||||
"vacationActive": "Resposta de ausencia ligada",
|
||||
"vacationWindowPast": "Resposta de ausencia ligada, mas o periodo ja passou",
|
||||
"vacationWindowFuture": "Resposta de ausencia ligada, o periodo ainda nao comecou",
|
||||
"dnsVerified": "Registos DNS verificados",
|
||||
"dnsNotVerified": "Registos DNS por verificar",
|
||||
"noDomains": "Nenhum dominio configurado",
|
||||
"dkimMissing": "Sem chave DKIM: o dominio nao assina nada",
|
||||
"queueHasBounces": "Ha mensagens devolvidas na fila",
|
||||
"queueNoBounces": "Sem devolucoes na fila",
|
||||
"queueHasDeferred": "Ha mensagens adiadas na fila",
|
||||
"queueNoDeferred": "Sem mensagens adiadas",
|
||||
"queueHasFrozen": "Ha mensagens congeladas na fila",
|
||||
"usersOverQuota": "Utilizadores com a quota excedida",
|
||||
"noUsersOverQuota": "Nenhum utilizador com a quota excedida"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user