aboutsummaryrefslogtreecommitdiffstats
path: root/apps/settings
diff options
context:
space:
mode:
authorAndrii Rublov <github.a@rublov.me>2024-02-25 13:48:38 +0100
committerGitHub <noreply@github.com>2024-02-25 13:48:38 +0100
commita72706f1e624f07ac9298790cb8c0806e5d0cd29 (patch)
treed8860683e4fd791ac06edfd1e3e64608a0264fe1 /apps/settings
parent7142ea922729615a2e8c4ff6d6d76d33c96dafa5 (diff)
parent34c9bfc767e1bafa7c708318e4050a5f4c9a772b (diff)
downloadnextcloud-server-a72706f1e624f07ac9298790cb8c0806e5d0cd29.tar.gz
nextcloud-server-a72706f1e624f07ac9298790cb8c0806e5d0cd29.zip
Merge branch 'master' into fix/pages-titles-apps
Signed-off-by: Andrii Rublov <github.a@rublov.me>
Diffstat (limited to 'apps/settings')
-rw-r--r--apps/settings/l10n/eo.js1
-rw-r--r--apps/settings/l10n/eo.json1
-rw-r--r--apps/settings/l10n/es_MX.js119
-rw-r--r--apps/settings/l10n/es_MX.json119
-rw-r--r--apps/settings/l10n/sc.js28
-rw-r--r--apps/settings/l10n/sc.json28
-rw-r--r--apps/settings/lib/AppInfo/Application.php4
-rw-r--r--apps/settings/lib/Controller/AppSettingsController.php107
-rw-r--r--apps/settings/lib/Controller/UsersController.php97
-rw-r--r--apps/settings/src/App.vue7
-rw-r--r--apps/settings/src/components/AppList.vue2
-rw-r--r--apps/settings/src/store/apps.js7
-rw-r--r--apps/settings/src/store/index.js2
-rw-r--r--apps/settings/src/store/users-settings.js (renamed from apps/settings/src/store/settings.js)4
-rw-r--r--apps/settings/src/store/users.js2
-rw-r--r--apps/settings/src/views/Apps.vue21
-rw-r--r--apps/settings/templates/settings-vue.php32
-rw-r--r--apps/settings/templates/settings/empty.php4
-rw-r--r--apps/settings/tests/Controller/AppSettingsControllerTest.php41
-rw-r--r--apps/settings/tests/Controller/UsersControllerTest.php40
20 files changed, 385 insertions, 281 deletions
diff --git a/apps/settings/l10n/eo.js b/apps/settings/l10n/eo.js
index b0827e92ce8..d09c7476580 100644
--- a/apps/settings/l10n/eo.js
+++ b/apps/settings/l10n/eo.js
@@ -266,6 +266,7 @@ OC.L10N.register(
"Error while wiping the device with the token" : "Eraro dum forviŝado de la aparato kun la ĵetono",
"Error while updating device token name" : "Eraro dum ĝisdatigo de la nomo de la aparataj ĵetonoj",
"Error while updating device token scope" : "Eraro dum ĝisdatigo de la amplekso de la aparataj ĵetonoj",
+ "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Estis tro multaj petoj de via reto. Reprovu poste aŭ kontaktu vian administranton se tio estas eraro.",
"Documentation" : "Dokumentaro",
"Forum" : "Forumo",
"SSL" : "SSL",
diff --git a/apps/settings/l10n/eo.json b/apps/settings/l10n/eo.json
index cea5a043bba..7d08a854e9a 100644
--- a/apps/settings/l10n/eo.json
+++ b/apps/settings/l10n/eo.json
@@ -264,6 +264,7 @@
"Error while wiping the device with the token" : "Eraro dum forviŝado de la aparato kun la ĵetono",
"Error while updating device token name" : "Eraro dum ĝisdatigo de la nomo de la aparataj ĵetonoj",
"Error while updating device token scope" : "Eraro dum ĝisdatigo de la amplekso de la aparataj ĵetonoj",
+ "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Estis tro multaj petoj de via reto. Reprovu poste aŭ kontaktu vian administranton se tio estas eraro.",
"Documentation" : "Dokumentaro",
"Forum" : "Forumo",
"SSL" : "SSL",
diff --git a/apps/settings/l10n/es_MX.js b/apps/settings/l10n/es_MX.js
index 2f58c920a21..7a75f34a5d2 100644
--- a/apps/settings/l10n/es_MX.js
+++ b/apps/settings/l10n/es_MX.js
@@ -372,6 +372,7 @@ OC.L10N.register(
"Background job did not run yet!" : "¡El trabajo en segundo plano no se ha ejecutado todavía!",
"AJAX" : "AJAX",
"Execute one task with each page loaded. Use case: Single account instance." : "Ejecutar una tarea con cada página cargada. Caso de uso: instancia de un solo usuario.",
+ "Webcron" : "Webcron",
"Cron (Recommended)" : "Cron (recomendado)",
"Use system cron service to call the cron.php file every 5 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 5 minutos.",
"The cron.php needs to be executed by the system account \"{user}\"." : "El cron.php debe ser ejecutado por el usuario del sistema \"{user}\".",
@@ -556,85 +557,201 @@ OC.L10N.register(
"Default quota" : "Cuota predeterminada",
"Select default quota" : "Establecer la cuota predeterminada",
"Passwordless authentication requires a secure connection." : "La autentificación sin contraseña requiere una conexión segura.",
+ "Add WebAuthn device" : "Añadir dispositivo WebAuthn",
+ "Please authorize your WebAuthn device." : "Por favor, autorice su dispositivo WebAuthn.",
+ "Name your device" : "Nombrar su dispositivo",
+ "Adding your device …" : "Añadiendo su dispositivo ...",
+ "Server error while trying to add WebAuthn device" : "Error en el servidor al intentar agregar el dispositivo WebAuthn",
+ "Server error while trying to complete WebAuthn device registration" : "Error en el servidor al intentar completar el registro del dispositivo WebAuthn",
"Unnamed device" : "Dispositivo sin nombre",
+ "Passwordless Authentication" : "Autentificación sin contraseña",
+ "Set up your account for passwordless authentication following the FIDO2 standard." : "Configure su cuenta para autentificación sin contraseña siguiendo el estándar FIDO2.",
+ "No devices configured." : "No hay dispositivos configurados.",
+ "The following devices are configured for your account:" : "Los siguientes dispositivos están configurados para su cuenta:",
+ "Your browser does not support WebAuthn." : "Su navegador no soporta WebAuthn.",
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, puedes hacer ajustes finos al comportamiento de compartir. Por favor consulta la documentación para más información. ",
+ "You need to enable the File sharing App." : "Debe habilitar la aplicación Compartir archivos.",
+ "{license}-licensed" : "Licenciado bajo {license}",
"Changelog" : "Bitácora de cambios",
+ "by {author}\n{license}" : "por {author}\n{license}",
+ "Account management" : "Administración de cuentas",
+ "New account" : "Nueva cuenta",
+ "Active accounts" : "Cuentas activas",
"Admins" : "Administradores",
"Disabled users" : "Usuarios deshabilitados",
+ "Creating group …" : "Creando grupo …",
+ "Create group" : "Crear grupo",
"Group name" : "Nombre del grupo",
+ "Please enter a valid group name" : "Por favor, ingrese un nombre de grupo válido",
+ "Disabled accounts" : "Cuentas deshabilitadas",
+ "Account group: {group}" : "Grupo de cuentas: {group}",
+ "Failed to create group" : "No se pudo crear el grupo",
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Location" : "Ubicación",
"Profile picture" : "Foto de perfil",
"About" : "Acerca de",
"Full name" : "Nombre completo",
+ "Additional email" : "Correo electrónico adicional",
+ "Headline" : "Titular",
+ "Organisation" : "Organización",
"Phone number" : "Número de teléfono",
+ "Role" : "Cargo",
+ "X (formerly Twitter)" : "X (anteriormente Twitter)",
+ "Fediverse (e.g. Mastodon)" : "Fediverse (por ejemplo, Mastodon)",
"Website" : "Sitio web",
+ "Profile visibility" : "Visibilidad del perfil",
+ "Locale" : "Configuración regional",
+ "Not available as this property is required for core functionality including file sharing and calendar invitations" : "No disponible, ya que esta propiedad es necesaria para la funcionalidad básica, incluyendo el compartir archivos y las invitaciones de calendario.",
+ "Not available as federation has been disabled for your account, contact your system administration if you have any questions" : "No disponible, ya que la federación ha sido deshabilitada para su cuenta, contacte a su administrador del sistema si tiene alguna pregunta",
+ "Not available as publishing account specific data to the lookup server is not allowed, contact your system administration if you have any questions" : "No disponible, ya que no se permite la publicación de datos específicos de usuario en el servidor de búsqueda, póngase en contacto con el administrador del sistema si tiene alguna duda",
"Your apps" : "Tus aplicaciones",
+ "Active apps" : "Aplicaciones activas",
"Disabled apps" : "Aplicaciones deshabilitadas",
"Updates" : "Actualizaciones",
"App bundles" : "Paquetes de aplicación",
+ "Featured apps" : "Aplicaciones destacadas",
+ "Supported apps" : "Aplicaciones soportadas",
+ "Show to everyone" : "Mostrar a todos",
+ "Show to logged in accounts only" : "Mostrar únicamente a usuarios conectados",
"Hide" : "Ocultar",
+ "Download and enable" : "Descargar y habilitar",
+ "Allow untested app" : "Permitir aplicación no probada",
+ "The app will be downloaded from the App Store" : "La aplicación será descargada de la tienda de aplicaciones",
"Never" : "Nunca",
"Active users" : "Usuarios activos",
+ "An error occurred during the request. Unable to proceed." : "Ocurrió un error durante la solicitud. No se puede continuar.",
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación ha sido habilitada pero necesita ser actualizada. Serás redireccionado a la página de actualización en 5 segundos. ",
+ "Error: This app cannot be enabled because it makes the server unstable" : "Error: Esta aplicación no se puede habilitar porque genera inestabilidad en el servidor",
+ "Do you really want to wipe your data from this device?" : "¿Realmente desea limpiar sus datos de este dispositivo?",
+ "Confirm wipe" : "Confirmar limpieza",
+ "Could not delete the app token" : "No se pudo eliminar el token de aplicación",
+ "Error while wiping the device with the token" : "Error al limpiar el dispositivo con el token",
+ "Error while updating device token name" : "Error al actualizar el nombre del token del dispositivo",
+ "Error while updating device token scope" : "Error al actualizar el alcance del token del dispositivo",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Hubieron demasiadas solicitudes desde su red. Vuelva a intentarlo más tarde o contacte a su administrador si se trata de un error.",
+ "Account documentation" : "Documentación de la cuenta",
+ "Administration documentation" : "Documentación de administración",
"Documentation" : "Documentación",
"Forum" : "Foro",
+ "Nextcloud help resources" : "Recursos de ayuda de Nextcloud",
+ "General documentation" : "Documentación general",
+ "None/STARTTLS" : "Ninguno/STARTTLS",
"SSL" : "SSL",
"Open documentation" : "Abrir documentación",
"It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es importante preparar este servidor para poder enviar correos electrónicos, como para restablecer contraseñas y notificaciones. ",
"Send mode" : "Modo de envío",
"Encryption" : "Encripción",
+ "Sendmail mode" : "Modo de enviar correo",
"From address" : "De la dirección",
"Server address" : "Dirección del servidor",
"Port" : "Puerto",
"Authentication" : "Autenticación",
"Authentication required" : "Autenticación requerida",
"Credentials" : "Credenciales",
+ "SMTP Login" : "Inicio de sesión SMTP",
"SMTP Password" : "Contraseña SMTP",
"Save" : "Guardar",
+ "Test and verify email settings" : "Probar y verificar la configuración del correo electrónico",
"All checks passed." : "Pasaron todas las verificaciones. ",
+ "There are some errors regarding your setup." : "Hay algunos errores referentes a su configuración.",
+ "There are some warnings regarding your setup." : "Hay algunas advertencias referentes a su configuración.",
+ "Checking for system and security issues." : "Comprobando problemas del sistema y seguridad.",
+ "Check the security of your Nextcloud over <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">our security scan ↗</a>." : "Revise la seguridad de su Nextcloud usando <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">nuestro escáner de seguridad ↗</a>.",
+ "Reasons to use Nextcloud in your organization" : "Razones para usar Nextcloud en su organización",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.",
"Like our Facebook page" : "Da un Like a nuestra página de Facebook",
"Follow us on Twitter" : "Síguenos en Twitter",
+ "Follow us on Mastodon" : "Síguenos en Mastodon",
"Check out our blog" : "Visita nuestro blog",
"Subscribe to our newsletter" : "Suscribete a nuestro boletín",
"This community release of Nextcloud is unsupported and instant notifications are unavailable." : "El lanzamiento de esta versión para la comunidad de Nextcloud no cuenta con soporte y las notificaciones instantáneas no están disponibles.",
+ "Use a second factor besides your password to increase security for your account." : "Use un segundo factor además de su contraseña para incrementar la seguridad de su cuenta. ",
"No user supplied" : "No se proporcionó usuario alguno",
"Please provide an admin recovery password; otherwise, all user data will be lost." : "Por favor proporciona una contraseña de recuperación de administrador; de lo contrario toda la información del usuario se perderá. ",
+ "Backend does not support password change, but the user's encryption key was updated." : "El backend no soporta el cambio de contraseñas, pero se actualizó la llave de cifrado del usuario.",
+ "installing and updating apps via the App Store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones a través de la tienda de aplicaciones o el uso compartido federado en la nube",
"Federated Cloud Sharing" : "Compartir en la Nube Federada",
+ "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL está utilizando una versión desactualizada %1$sde (%2$s). Por favor, actualice su sistema operativo o las funciones como %3$s no funcionarán de manera confiable.",
+ "You need to set your user email before being able to send test emails. Go to %s for that." : "Necesita establecer su correo electrónico antes de poder enviar correos de prueba. Vaya a %s para hacerlo.",
"Invalid user" : "Usuario inválido",
"Your username is: %s" : "Tu Usuario es: %s",
"Logged in user must be a subadmin" : "El usuario firmado debe ser un subadministrador ",
+ "A background job is pending that checks for user imported SSL certificates. Please check back later." : "Está pendiente una tarea en segundo plano que comprueba los certificados SSL de usuario importados. Por favor, vuelva a checar más tarde.",
"Enable all" : "Habilitar todo",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
+ "iPhone" : "iPhone",
+ "iPad" : "iPad",
"Sync client - {os}" : "Sync client - {os}",
"Error while deleting the token" : "Se presentó un error al borrar la ficha",
"Use the credentials below to configure your app or device." : "Usa las siguientes credenciales para configurar tu aplicación o dispositivo. ",
"For security reasons this password will only be shown once." : "Por razones de seguridad esta contraseña sólo se mostrará una vez. ",
"Copied!" : "¡Copiado!",
"Copy" : "Copiar",
+ "Execute one task with each page loaded. Use case: Single user instance." : "Ejecutar una tarea con cada página cargada. Caso de uso: instancia de un solo usuario.",
"To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión POSIX de PHP. Por favor ve la {linkstart}documentación de PHP{linkend} para más detalles. ",
+ "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 5 minutos. Recomendado para todas las instancias.",
+ "The cron.php needs to be executed by the system user \"{user}\"." : "El cron.php debe ser ejecutado por el usuario del sistema \"{user}\".",
+ "Enable or disable profile by default for new users." : "Habilitar o deshabilitar el perfil por defecto para nuevos usuarios.",
"You are about to remove the group {group}. The users will NOT be deleted." : "Estás a punto de eliminar el grupo {group}. Los usuarios NO serán borrados.",
"Please confirm the group removal " : "Por favor confirma la eliminación del grupo",
+ "Choose profile picture from files" : "Seleccionar la imagen de perfil desde archivos",
"png or jpg, max. 20 MB" : "png o jpg max. 20 MB",
"Your email address" : "Tu dirección de correo electrónico",
+ "Your location" : "Su ubicación",
+ "Enable Profile" : "Habilitar perfil",
"Your Twitter handle" : "Tu cuenta de Twitter",
"You do not have permissions to see the details of this user" : "No tienes los permisos para ver los detalles de este usuario",
+ "Add new password" : " Añadir nueva contraseña",
+ "Add new email address" : "Añadir nueva dirección de correo electrónico",
+ "Set user as admin for" : "Establecer al usuario como administrador de",
+ "Select user quota" : "Seleccionar la cuota de usuario",
+ "Toggle user actions menu" : "Alternar menú de acciones de usuario",
"Delete user" : "Borrar usuario",
"Disable user" : "Deshabilitar usuario",
"Enable user" : "Habilitar usuario",
+ "Edit User" : "Editar usuario",
+ "Will be autogenerated" : "Será autogenerado",
+ "Add a new user" : "Añadir nuevo usuario",
+ "No users in here" : "No hay usuarios aquí",
+ "Enter group name" : "Ingrese el nombre del grupo",
"Add group" : "Agregar grupo",
+ "Default quota:" : "Cuota predeterminada:",
+ "Show Languages" : "Mostrar idiomas",
"Show user backend" : "Mostrar backend del usuario",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Not saved" : "No guardado",
"Twitter" : "Twitter",
+ "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "No disponible, ya que la federación ha sido deshabilitada para su cuenta, contacte a su administrador del sistema si tiene alguna pregunta",
+ "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "No disponible, ya que no se permite la publicación de datos específicos de usuario en el servidor de búsqueda, póngase en contacto con el administrador del sistema si tiene alguna duda",
+ "Show to logged in users only" : "Mostrar únicamente a usuarios conectados",
+ "Enable untested app" : "Habilitar aplicación no probada",
"SMTP Username" : "Usuario SMTP",
- "Set default expiration date" : "Establecer la fecha de expiración predeterminada"
+ "Expire after" : "Caduca tras",
+ "day(s)" : "día(s)",
+ "Exclude groups from password requirements:" : "Excluir grupos de los requisitos de contraseña:",
+ "Set default expiration date" : "Establecer la fecha de expiración predeterminada",
+ "Exclude groups from creating link shares:" : "Excluir grupos de la creación de enlaces compartidos:",
+ "Allow username autocompletion in share dialog" : "Permitir el autocompletado usuario en el diálogo de compartir",
+ "Allow username autocompletion to users within the same groups" : "Permitir el autocompletado para usuarios en los mismos grupos",
+ "Edit display name" : "Editar el nombre para mostrar",
+ "Select manager" : "Seleccionar administrador",
+ "User's table" : "Tabla de usuario",
+ "Select user manager" : "Seleccionar al administrador del usuario",
+ "Old user imported certificates" : "Certificados antiguos de usuario importados",
+ "Overwrite cli URL" : "Sobrescribir el URL de la línea de comandos",
+ "This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them: %s." : "A esta instancia le faltan algunos módulos PHP recomendados. Para mejorar el rendimiento y la compatibilidad, se recomienda encarecidamente instalarlos: %s.",
+ "You are about to remove the group \"{group}\". The users will NOT be deleted." : "Está a punto de eliminar el grupo \"{group}\". Los usuarios NO serán eliminados.",
+ "No users" : "Sin usuarios",
+ "Loading user …" : "Cargando usuario ...",
+ "Failed to update user manager" : "No se pudo actualizar el gerente del usuario",
+ "User management settings" : "Ajustes de administración de usuarios",
+ "Send welcome email to new users" : "Enviar correo de bienvenida a usuarios nuevos",
+ "User management" : "Administración de usuarios",
+ "User group: {group}" : "Grupo del usuario: {group}"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/settings/l10n/es_MX.json b/apps/settings/l10n/es_MX.json
index 6644e38b14e..a68a2cff2a8 100644
--- a/apps/settings/l10n/es_MX.json
+++ b/apps/settings/l10n/es_MX.json
@@ -370,6 +370,7 @@
"Background job did not run yet!" : "¡El trabajo en segundo plano no se ha ejecutado todavía!",
"AJAX" : "AJAX",
"Execute one task with each page loaded. Use case: Single account instance." : "Ejecutar una tarea con cada página cargada. Caso de uso: instancia de un solo usuario.",
+ "Webcron" : "Webcron",
"Cron (Recommended)" : "Cron (recomendado)",
"Use system cron service to call the cron.php file every 5 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 5 minutos.",
"The cron.php needs to be executed by the system account \"{user}\"." : "El cron.php debe ser ejecutado por el usuario del sistema \"{user}\".",
@@ -554,85 +555,201 @@
"Default quota" : "Cuota predeterminada",
"Select default quota" : "Establecer la cuota predeterminada",
"Passwordless authentication requires a secure connection." : "La autentificación sin contraseña requiere una conexión segura.",
+ "Add WebAuthn device" : "Añadir dispositivo WebAuthn",
+ "Please authorize your WebAuthn device." : "Por favor, autorice su dispositivo WebAuthn.",
+ "Name your device" : "Nombrar su dispositivo",
+ "Adding your device …" : "Añadiendo su dispositivo ...",
+ "Server error while trying to add WebAuthn device" : "Error en el servidor al intentar agregar el dispositivo WebAuthn",
+ "Server error while trying to complete WebAuthn device registration" : "Error en el servidor al intentar completar el registro del dispositivo WebAuthn",
"Unnamed device" : "Dispositivo sin nombre",
+ "Passwordless Authentication" : "Autentificación sin contraseña",
+ "Set up your account for passwordless authentication following the FIDO2 standard." : "Configure su cuenta para autentificación sin contraseña siguiendo el estándar FIDO2.",
+ "No devices configured." : "No hay dispositivos configurados.",
+ "The following devices are configured for your account:" : "Los siguientes dispositivos están configurados para su cuenta:",
+ "Your browser does not support WebAuthn." : "Su navegador no soporta WebAuthn.",
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, puedes hacer ajustes finos al comportamiento de compartir. Por favor consulta la documentación para más información. ",
+ "You need to enable the File sharing App." : "Debe habilitar la aplicación Compartir archivos.",
+ "{license}-licensed" : "Licenciado bajo {license}",
"Changelog" : "Bitácora de cambios",
+ "by {author}\n{license}" : "por {author}\n{license}",
+ "Account management" : "Administración de cuentas",
+ "New account" : "Nueva cuenta",
+ "Active accounts" : "Cuentas activas",
"Admins" : "Administradores",
"Disabled users" : "Usuarios deshabilitados",
+ "Creating group …" : "Creando grupo …",
+ "Create group" : "Crear grupo",
"Group name" : "Nombre del grupo",
+ "Please enter a valid group name" : "Por favor, ingrese un nombre de grupo válido",
+ "Disabled accounts" : "Cuentas deshabilitadas",
+ "Account group: {group}" : "Grupo de cuentas: {group}",
+ "Failed to create group" : "No se pudo crear el grupo",
"Sending…" : "Enviando...",
"Email sent" : "Correo electrónico enviado",
"Location" : "Ubicación",
"Profile picture" : "Foto de perfil",
"About" : "Acerca de",
"Full name" : "Nombre completo",
+ "Additional email" : "Correo electrónico adicional",
+ "Headline" : "Titular",
+ "Organisation" : "Organización",
"Phone number" : "Número de teléfono",
+ "Role" : "Cargo",
+ "X (formerly Twitter)" : "X (anteriormente Twitter)",
+ "Fediverse (e.g. Mastodon)" : "Fediverse (por ejemplo, Mastodon)",
"Website" : "Sitio web",
+ "Profile visibility" : "Visibilidad del perfil",
+ "Locale" : "Configuración regional",
+ "Not available as this property is required for core functionality including file sharing and calendar invitations" : "No disponible, ya que esta propiedad es necesaria para la funcionalidad básica, incluyendo el compartir archivos y las invitaciones de calendario.",
+ "Not available as federation has been disabled for your account, contact your system administration if you have any questions" : "No disponible, ya que la federación ha sido deshabilitada para su cuenta, contacte a su administrador del sistema si tiene alguna pregunta",
+ "Not available as publishing account specific data to the lookup server is not allowed, contact your system administration if you have any questions" : "No disponible, ya que no se permite la publicación de datos específicos de usuario en el servidor de búsqueda, póngase en contacto con el administrador del sistema si tiene alguna duda",
"Your apps" : "Tus aplicaciones",
+ "Active apps" : "Aplicaciones activas",
"Disabled apps" : "Aplicaciones deshabilitadas",
"Updates" : "Actualizaciones",
"App bundles" : "Paquetes de aplicación",
+ "Featured apps" : "Aplicaciones destacadas",
+ "Supported apps" : "Aplicaciones soportadas",
+ "Show to everyone" : "Mostrar a todos",
+ "Show to logged in accounts only" : "Mostrar únicamente a usuarios conectados",
"Hide" : "Ocultar",
+ "Download and enable" : "Descargar y habilitar",
+ "Allow untested app" : "Permitir aplicación no probada",
+ "The app will be downloaded from the App Store" : "La aplicación será descargada de la tienda de aplicaciones",
"Never" : "Nunca",
"Active users" : "Usuarios activos",
+ "An error occurred during the request. Unable to proceed." : "Ocurrió un error durante la solicitud. No se puede continuar.",
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación ha sido habilitada pero necesita ser actualizada. Serás redireccionado a la página de actualización en 5 segundos. ",
+ "Error: This app cannot be enabled because it makes the server unstable" : "Error: Esta aplicación no se puede habilitar porque genera inestabilidad en el servidor",
+ "Do you really want to wipe your data from this device?" : "¿Realmente desea limpiar sus datos de este dispositivo?",
+ "Confirm wipe" : "Confirmar limpieza",
+ "Could not delete the app token" : "No se pudo eliminar el token de aplicación",
+ "Error while wiping the device with the token" : "Error al limpiar el dispositivo con el token",
+ "Error while updating device token name" : "Error al actualizar el nombre del token del dispositivo",
+ "Error while updating device token scope" : "Error al actualizar el alcance del token del dispositivo",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Hubieron demasiadas solicitudes desde su red. Vuelva a intentarlo más tarde o contacte a su administrador si se trata de un error.",
+ "Account documentation" : "Documentación de la cuenta",
+ "Administration documentation" : "Documentación de administración",
"Documentation" : "Documentación",
"Forum" : "Foro",
+ "Nextcloud help resources" : "Recursos de ayuda de Nextcloud",
+ "General documentation" : "Documentación general",
+ "None/STARTTLS" : "Ninguno/STARTTLS",
"SSL" : "SSL",
"Open documentation" : "Abrir documentación",
"It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es importante preparar este servidor para poder enviar correos electrónicos, como para restablecer contraseñas y notificaciones. ",
"Send mode" : "Modo de envío",
"Encryption" : "Encripción",
+ "Sendmail mode" : "Modo de enviar correo",
"From address" : "De la dirección",
"Server address" : "Dirección del servidor",
"Port" : "Puerto",
"Authentication" : "Autenticación",
"Authentication required" : "Autenticación requerida",
"Credentials" : "Credenciales",
+ "SMTP Login" : "Inicio de sesión SMTP",
"SMTP Password" : "Contraseña SMTP",
"Save" : "Guardar",
+ "Test and verify email settings" : "Probar y verificar la configuración del correo electrónico",
"All checks passed." : "Pasaron todas las verificaciones. ",
+ "There are some errors regarding your setup." : "Hay algunos errores referentes a su configuración.",
+ "There are some warnings regarding your setup." : "Hay algunas advertencias referentes a su configuración.",
+ "Checking for system and security issues." : "Comprobando problemas del sistema y seguridad.",
+ "Check the security of your Nextcloud over <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">our security scan ↗</a>." : "Revise la seguridad de su Nextcloud usando <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">nuestro escáner de seguridad ↗</a>.",
+ "Reasons to use Nextcloud in your organization" : "Razones para usar Nextcloud en su organización",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.",
"Like our Facebook page" : "Da un Like a nuestra página de Facebook",
"Follow us on Twitter" : "Síguenos en Twitter",
+ "Follow us on Mastodon" : "Síguenos en Mastodon",
"Check out our blog" : "Visita nuestro blog",
"Subscribe to our newsletter" : "Suscribete a nuestro boletín",
"This community release of Nextcloud is unsupported and instant notifications are unavailable." : "El lanzamiento de esta versión para la comunidad de Nextcloud no cuenta con soporte y las notificaciones instantáneas no están disponibles.",
+ "Use a second factor besides your password to increase security for your account." : "Use un segundo factor además de su contraseña para incrementar la seguridad de su cuenta. ",
"No user supplied" : "No se proporcionó usuario alguno",
"Please provide an admin recovery password; otherwise, all user data will be lost." : "Por favor proporciona una contraseña de recuperación de administrador; de lo contrario toda la información del usuario se perderá. ",
+ "Backend does not support password change, but the user's encryption key was updated." : "El backend no soporta el cambio de contraseñas, pero se actualizó la llave de cifrado del usuario.",
+ "installing and updating apps via the App Store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones a través de la tienda de aplicaciones o el uso compartido federado en la nube",
"Federated Cloud Sharing" : "Compartir en la Nube Federada",
+ "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL está utilizando una versión desactualizada %1$sde (%2$s). Por favor, actualice su sistema operativo o las funciones como %3$s no funcionarán de manera confiable.",
+ "You need to set your user email before being able to send test emails. Go to %s for that." : "Necesita establecer su correo electrónico antes de poder enviar correos de prueba. Vaya a %s para hacerlo.",
"Invalid user" : "Usuario inválido",
"Your username is: %s" : "Tu Usuario es: %s",
"Logged in user must be a subadmin" : "El usuario firmado debe ser un subadministrador ",
+ "A background job is pending that checks for user imported SSL certificates. Please check back later." : "Está pendiente una tarea en segundo plano que comprueba los certificados SSL de usuario importados. Por favor, vuelva a checar más tarde.",
"Enable all" : "Habilitar todo",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
+ "iPhone" : "iPhone",
+ "iPad" : "iPad",
"Sync client - {os}" : "Sync client - {os}",
"Error while deleting the token" : "Se presentó un error al borrar la ficha",
"Use the credentials below to configure your app or device." : "Usa las siguientes credenciales para configurar tu aplicación o dispositivo. ",
"For security reasons this password will only be shown once." : "Por razones de seguridad esta contraseña sólo se mostrará una vez. ",
"Copied!" : "¡Copiado!",
"Copy" : "Copiar",
+ "Execute one task with each page loaded. Use case: Single user instance." : "Ejecutar una tarea con cada página cargada. Caso de uso: instancia de un solo usuario.",
"To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión POSIX de PHP. Por favor ve la {linkstart}documentación de PHP{linkend} para más detalles. ",
+ "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 5 minutos. Recomendado para todas las instancias.",
+ "The cron.php needs to be executed by the system user \"{user}\"." : "El cron.php debe ser ejecutado por el usuario del sistema \"{user}\".",
+ "Enable or disable profile by default for new users." : "Habilitar o deshabilitar el perfil por defecto para nuevos usuarios.",
"You are about to remove the group {group}. The users will NOT be deleted." : "Estás a punto de eliminar el grupo {group}. Los usuarios NO serán borrados.",
"Please confirm the group removal " : "Por favor confirma la eliminación del grupo",
+ "Choose profile picture from files" : "Seleccionar la imagen de perfil desde archivos",
"png or jpg, max. 20 MB" : "png o jpg max. 20 MB",
"Your email address" : "Tu dirección de correo electrónico",
+ "Your location" : "Su ubicación",
+ "Enable Profile" : "Habilitar perfil",
"Your Twitter handle" : "Tu cuenta de Twitter",
"You do not have permissions to see the details of this user" : "No tienes los permisos para ver los detalles de este usuario",
+ "Add new password" : " Añadir nueva contraseña",
+ "Add new email address" : "Añadir nueva dirección de correo electrónico",
+ "Set user as admin for" : "Establecer al usuario como administrador de",
+ "Select user quota" : "Seleccionar la cuota de usuario",
+ "Toggle user actions menu" : "Alternar menú de acciones de usuario",
"Delete user" : "Borrar usuario",
"Disable user" : "Deshabilitar usuario",
"Enable user" : "Habilitar usuario",
+ "Edit User" : "Editar usuario",
+ "Will be autogenerated" : "Será autogenerado",
+ "Add a new user" : "Añadir nuevo usuario",
+ "No users in here" : "No hay usuarios aquí",
+ "Enter group name" : "Ingrese el nombre del grupo",
"Add group" : "Agregar grupo",
+ "Default quota:" : "Cuota predeterminada:",
+ "Show Languages" : "Mostrar idiomas",
"Show user backend" : "Mostrar backend del usuario",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Not saved" : "No guardado",
"Twitter" : "Twitter",
+ "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "No disponible, ya que la federación ha sido deshabilitada para su cuenta, contacte a su administrador del sistema si tiene alguna pregunta",
+ "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "No disponible, ya que no se permite la publicación de datos específicos de usuario en el servidor de búsqueda, póngase en contacto con el administrador del sistema si tiene alguna duda",
+ "Show to logged in users only" : "Mostrar únicamente a usuarios conectados",
+ "Enable untested app" : "Habilitar aplicación no probada",
"SMTP Username" : "Usuario SMTP",
- "Set default expiration date" : "Establecer la fecha de expiración predeterminada"
+ "Expire after" : "Caduca tras",
+ "day(s)" : "día(s)",
+ "Exclude groups from password requirements:" : "Excluir grupos de los requisitos de contraseña:",
+ "Set default expiration date" : "Establecer la fecha de expiración predeterminada",
+ "Exclude groups from creating link shares:" : "Excluir grupos de la creación de enlaces compartidos:",
+ "Allow username autocompletion in share dialog" : "Permitir el autocompletado usuario en el diálogo de compartir",
+ "Allow username autocompletion to users within the same groups" : "Permitir el autocompletado para usuarios en los mismos grupos",
+ "Edit display name" : "Editar el nombre para mostrar",
+ "Select manager" : "Seleccionar administrador",
+ "User's table" : "Tabla de usuario",
+ "Select user manager" : "Seleccionar al administrador del usuario",
+ "Old user imported certificates" : "Certificados antiguos de usuario importados",
+ "Overwrite cli URL" : "Sobrescribir el URL de la línea de comandos",
+ "This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them: %s." : "A esta instancia le faltan algunos módulos PHP recomendados. Para mejorar el rendimiento y la compatibilidad, se recomienda encarecidamente instalarlos: %s.",
+ "You are about to remove the group \"{group}\". The users will NOT be deleted." : "Está a punto de eliminar el grupo \"{group}\". Los usuarios NO serán eliminados.",
+ "No users" : "Sin usuarios",
+ "Loading user …" : "Cargando usuario ...",
+ "Failed to update user manager" : "No se pudo actualizar el gerente del usuario",
+ "User management settings" : "Ajustes de administración de usuarios",
+ "Send welcome email to new users" : "Enviar correo de bienvenida a usuarios nuevos",
+ "User management" : "Administración de usuarios",
+ "User group: {group}" : "Grupo del usuario: {group}"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/settings/l10n/sc.js b/apps/settings/l10n/sc.js
index a732657b154..f2cceb0d2ab 100644
--- a/apps/settings/l10n/sc.js
+++ b/apps/settings/l10n/sc.js
@@ -56,14 +56,14 @@ OC.L10N.register(
"Administrator documentation" : "Documentatzione amministratzione",
"User documentation" : "Documentatzione utente",
"Invalid SMTP password." : "Crae SMTP non bàlida.",
- "Email setting test" : "Proa de impostatziones de sa posta eletrònica",
+ "Email setting test" : "Proa de cunfiguratzione de posta eletrònica",
"Well done, %s!" : "Bene fatu, %s!",
"If you received this email, the email configuration seems to be correct." : "Si as retzidu custu messàgiu de posta, sa cunfiguratzione de sa posta eletrònica est andada bene.",
"Email could not be sent. Check your mail server log" : "Impossìbile a imbiare su messàgiu. Controlla s'informe de su serbidore tuo de posta",
- "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ddoe at àpidu unu problema in s'imbiu de su messàgiu. Controlla is impostatziones. (Errore: %s)",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ddoe at àpidu unu problema in s'imbiu de su messàgiu. Controlla sa cunfiguratzione. (Errore: %s)",
"Users" : "Utentes",
"Invalid mail address" : "Indiritzu de posta non bàlidu",
- "Settings saved" : "Impostatziones sarvadas",
+ "Settings saved" : "Cunfiguratziones sarvadas",
"Unable to change full name" : "Impossìbile a cambiare su nùmene",
"Unable to change email address" : "Non faghet a cambiare s'indiritzu de posta eletrònica",
"Unable to set invalid phone number" : "Non faghet a impostare nùmeru de telèfonu non bàlidu",
@@ -90,19 +90,19 @@ OC.L10N.register(
"Set your password" : "Imposta sa crae tua",
"Go to %s" : "Bae a %s",
"Install Client" : "Installa aplicatzione",
- "Settings" : "Impostatziones",
+ "Settings" : "Cunfiguratziones",
"Personal" : "Personale",
"Administration" : "Amministratzione",
- "Additional settings" : "Impostatziones in agiunta",
+ "Additional settings" : "Cunfiguratziones in agiunta",
"Groupware" : "Groupware",
"Overview" : "Panoràmica",
- "Basic settings" : "Impostatziones de base",
+ "Basic settings" : "Cunfiguratzione de base",
"Sharing" : "Cumpartzidura",
"Calendar" : "Calendàriu",
"Personal info" : "Informatziones personales",
"Mobile & desktop" : "Mòbile e de iscrivania",
"Email server" : "Serbidore posta eletrònica",
- "Security & setup warnings" : "Avisos de seguresa e impostatziones",
+ "Security & setup warnings" : "Avisos de seguresa e cunfiguratzione",
"Background jobs" : "Atividades de background",
"Unlimited" : "Chene lìmites",
"Verifying" : "Averguende",
@@ -113,12 +113,12 @@ OC.L10N.register(
"The old server-side-encryption format is enabled. We recommend disabling this." : "Su formadu betzu de tzifradura ladu serbidore est ativu. Racumandamus de ddu disativare. ",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "Sa funtzione PHP \"set_time_limit\" no est disponìbile. Custu podet essire in programmas firmados in cursu de esecutzione, trunchende s'installatzione. Est cussigiadu meda a ativare custa funtzione.",
"Supported" : "Suportadu",
- "Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Su PHP tuo no tenet su suportu FreeType, e custu càusat dannos in is immàgines de profilu e in s'interfache de is impostatziones.",
+ "Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Su PHP tuo no tenet su suportu FreeType, e custu càusat dannos in is immàgines de profilu e in s'interfache de sa cunfiguratzione.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Paret chi PHP no est cunfigradu comente si depet pro rechèrrere variàbiles de ambiente de sistema. Sa proa cun getenv(\"PATH\") at torradu isceti una isceda bòida.",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Sa cunfinguratzione de letura isceti est istètia ativada. Custu evitat de pònere cunfiguratziones cun sa interfache-web. In prus, s'archìviu depet èssere produidu pro èssere iscritu a manu a cada agiornamentu.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Sa base de datos tua non funtzionat cun su livellu de isulamentu de sa transatzione \"READ COMMITTED\". Custu podet causare problemas cando si faghent prus atziones in parallelu.",
- "Nextcloud settings" : "Impostatziones de Nextcloud",
- "Image generation" : "Generatzione de imàgines",
+ "Nextcloud settings" : "Cunfiguratzione de Nextcloud",
+ "Image generation" : "Generatzione de immàgines",
"None" : "Perunu",
"Allow apps to use the Share API" : "Permite a is aplicatzione de impreare is API de cumpartzidura",
"Allow resharing" : "Permite de torrare a cumpartzire",
@@ -175,7 +175,7 @@ OC.L10N.register(
"Disable all" : "Disativa totu",
"_%n app has an update available_::_%n apps have an update available_" : ["%n aplicatzione tenet un'agiornamentu a disponimentu","%n aplicatziones tenent un'agiornamentu a disponimentu"],
"Marked for remote wipe" : "Marcadu pro cantzelladura remota",
- "Device settings" : "Impostatziones de su dispositivu",
+ "Device settings" : "Cunfiguratzione de su dispositivu",
"Allow filesystem access" : "Permite s'intrada a su sistema de is archìvios",
"Rename" : "Torra a numenare",
"Revoke" : "Rèvoca",
@@ -203,7 +203,7 @@ OC.L10N.register(
"Server-side encryption" : "Tzifradura ladu serbidore",
"Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Sa tzifradura ladu serbidore permitit de tzifrare is archìvios chi sunt carrigados in custu serbidore. Bi sunt limitatziones comente prestatziones prus bàscias, tando ativa•ddu isceti chi est netzessàriu.",
"Enable server-side encryption" : "Ativa tzifradura ladu serbidore",
- "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Una borta chi sa tzifradura est ativada, totu is archìvios carrigados in su serbidore dae cussu momentu ant a èssere tzifrados in su serbidore. S'at a pòdere disativare sa tzifradura a pustis, si su mòdulu de tzifradura ativu ddu permitit, e totu is pre-cunditziones (comente s'impostatzione de una crae de recùperu) sunt cumproadas.",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Una borta chi sa tzifradura est ativada, totu is archìvios carrigados in su serbidore dae cussu momentu ant a èssere tzifrados in su serbidore. S'at a pòdere disativare sa tzifradura a pustis, si su mòdulu de tzifradura ativu ddu permitit, e totu is pre-cunditziones (comente sa cunfiguratzione de una crae de recùperu) sunt cumproadas.",
"Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Sa tzifradura a sa sola no assegurat sa seguresa de su sistema. Càstia sa documentatzione pro àteras informatziones subra su funtzionamentu de s'aplicatzione pro sa tzifradura, e is genias de impreu suportadas.",
"Be aware that encryption always increases the file size." : "Regorda ca sa tzifradura creschet semper sa mannària de s'archìviu.",
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Benit semper a bene a creare còpias de seguresa regulares de is datos tuos, in casu de tzifradura assegura•ti de creare còpia de is craes de tzfradura paris cun is datos tuos.",
@@ -217,7 +217,7 @@ OC.L10N.register(
"Current password" : "Crae currente",
"New password" : "Crae noa",
"Change password" : "Càmbia crae",
- "Picture provided by original account" : "Imàgine frunida dae su contu originale",
+ "Picture provided by original account" : "Immàgine frunida dae su contu originale",
"Details" : "Detàllios",
"You are a member of the following groups:" : "Faghes parte de custos grupos:",
"Back" : "In segus",
@@ -290,7 +290,7 @@ OC.L10N.register(
"Sending…" : "Imbiende...",
"Email sent" : "Messàgiu de posta imbiadu",
"Location" : "Positzione",
- "Profile picture" : "Imàgine de profilu",
+ "Profile picture" : "Immàgine de profilu",
"About" : "In contu de",
"Full name" : "Nùmene cumpletu",
"Headline" : "Tìtulos",
diff --git a/apps/settings/l10n/sc.json b/apps/settings/l10n/sc.json
index 6d3c2fb6c70..323e2869a64 100644
--- a/apps/settings/l10n/sc.json
+++ b/apps/settings/l10n/sc.json
@@ -54,14 +54,14 @@
"Administrator documentation" : "Documentatzione amministratzione",
"User documentation" : "Documentatzione utente",
"Invalid SMTP password." : "Crae SMTP non bàlida.",
- "Email setting test" : "Proa de impostatziones de sa posta eletrònica",
+ "Email setting test" : "Proa de cunfiguratzione de posta eletrònica",
"Well done, %s!" : "Bene fatu, %s!",
"If you received this email, the email configuration seems to be correct." : "Si as retzidu custu messàgiu de posta, sa cunfiguratzione de sa posta eletrònica est andada bene.",
"Email could not be sent. Check your mail server log" : "Impossìbile a imbiare su messàgiu. Controlla s'informe de su serbidore tuo de posta",
- "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ddoe at àpidu unu problema in s'imbiu de su messàgiu. Controlla is impostatziones. (Errore: %s)",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ddoe at àpidu unu problema in s'imbiu de su messàgiu. Controlla sa cunfiguratzione. (Errore: %s)",
"Users" : "Utentes",
"Invalid mail address" : "Indiritzu de posta non bàlidu",
- "Settings saved" : "Impostatziones sarvadas",
+ "Settings saved" : "Cunfiguratziones sarvadas",
"Unable to change full name" : "Impossìbile a cambiare su nùmene",
"Unable to change email address" : "Non faghet a cambiare s'indiritzu de posta eletrònica",
"Unable to set invalid phone number" : "Non faghet a impostare nùmeru de telèfonu non bàlidu",
@@ -88,19 +88,19 @@
"Set your password" : "Imposta sa crae tua",
"Go to %s" : "Bae a %s",
"Install Client" : "Installa aplicatzione",
- "Settings" : "Impostatziones",
+ "Settings" : "Cunfiguratziones",
"Personal" : "Personale",
"Administration" : "Amministratzione",
- "Additional settings" : "Impostatziones in agiunta",
+ "Additional settings" : "Cunfiguratziones in agiunta",
"Groupware" : "Groupware",
"Overview" : "Panoràmica",
- "Basic settings" : "Impostatziones de base",
+ "Basic settings" : "Cunfiguratzione de base",
"Sharing" : "Cumpartzidura",
"Calendar" : "Calendàriu",
"Personal info" : "Informatziones personales",
"Mobile & desktop" : "Mòbile e de iscrivania",
"Email server" : "Serbidore posta eletrònica",
- "Security & setup warnings" : "Avisos de seguresa e impostatziones",
+ "Security & setup warnings" : "Avisos de seguresa e cunfiguratzione",
"Background jobs" : "Atividades de background",
"Unlimited" : "Chene lìmites",
"Verifying" : "Averguende",
@@ -111,12 +111,12 @@
"The old server-side-encryption format is enabled. We recommend disabling this." : "Su formadu betzu de tzifradura ladu serbidore est ativu. Racumandamus de ddu disativare. ",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "Sa funtzione PHP \"set_time_limit\" no est disponìbile. Custu podet essire in programmas firmados in cursu de esecutzione, trunchende s'installatzione. Est cussigiadu meda a ativare custa funtzione.",
"Supported" : "Suportadu",
- "Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Su PHP tuo no tenet su suportu FreeType, e custu càusat dannos in is immàgines de profilu e in s'interfache de is impostatziones.",
+ "Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Su PHP tuo no tenet su suportu FreeType, e custu càusat dannos in is immàgines de profilu e in s'interfache de sa cunfiguratzione.",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Paret chi PHP no est cunfigradu comente si depet pro rechèrrere variàbiles de ambiente de sistema. Sa proa cun getenv(\"PATH\") at torradu isceti una isceda bòida.",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Sa cunfinguratzione de letura isceti est istètia ativada. Custu evitat de pònere cunfiguratziones cun sa interfache-web. In prus, s'archìviu depet èssere produidu pro èssere iscritu a manu a cada agiornamentu.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Sa base de datos tua non funtzionat cun su livellu de isulamentu de sa transatzione \"READ COMMITTED\". Custu podet causare problemas cando si faghent prus atziones in parallelu.",
- "Nextcloud settings" : "Impostatziones de Nextcloud",
- "Image generation" : "Generatzione de imàgines",
+ "Nextcloud settings" : "Cunfiguratzione de Nextcloud",
+ "Image generation" : "Generatzione de immàgines",
"None" : "Perunu",
"Allow apps to use the Share API" : "Permite a is aplicatzione de impreare is API de cumpartzidura",
"Allow resharing" : "Permite de torrare a cumpartzire",
@@ -173,7 +173,7 @@
"Disable all" : "Disativa totu",
"_%n app has an update available_::_%n apps have an update available_" : ["%n aplicatzione tenet un'agiornamentu a disponimentu","%n aplicatziones tenent un'agiornamentu a disponimentu"],
"Marked for remote wipe" : "Marcadu pro cantzelladura remota",
- "Device settings" : "Impostatziones de su dispositivu",
+ "Device settings" : "Cunfiguratzione de su dispositivu",
"Allow filesystem access" : "Permite s'intrada a su sistema de is archìvios",
"Rename" : "Torra a numenare",
"Revoke" : "Rèvoca",
@@ -201,7 +201,7 @@
"Server-side encryption" : "Tzifradura ladu serbidore",
"Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Sa tzifradura ladu serbidore permitit de tzifrare is archìvios chi sunt carrigados in custu serbidore. Bi sunt limitatziones comente prestatziones prus bàscias, tando ativa•ddu isceti chi est netzessàriu.",
"Enable server-side encryption" : "Ativa tzifradura ladu serbidore",
- "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Una borta chi sa tzifradura est ativada, totu is archìvios carrigados in su serbidore dae cussu momentu ant a èssere tzifrados in su serbidore. S'at a pòdere disativare sa tzifradura a pustis, si su mòdulu de tzifradura ativu ddu permitit, e totu is pre-cunditziones (comente s'impostatzione de una crae de recùperu) sunt cumproadas.",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Una borta chi sa tzifradura est ativada, totu is archìvios carrigados in su serbidore dae cussu momentu ant a èssere tzifrados in su serbidore. S'at a pòdere disativare sa tzifradura a pustis, si su mòdulu de tzifradura ativu ddu permitit, e totu is pre-cunditziones (comente sa cunfiguratzione de una crae de recùperu) sunt cumproadas.",
"Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Sa tzifradura a sa sola no assegurat sa seguresa de su sistema. Càstia sa documentatzione pro àteras informatziones subra su funtzionamentu de s'aplicatzione pro sa tzifradura, e is genias de impreu suportadas.",
"Be aware that encryption always increases the file size." : "Regorda ca sa tzifradura creschet semper sa mannària de s'archìviu.",
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Benit semper a bene a creare còpias de seguresa regulares de is datos tuos, in casu de tzifradura assegura•ti de creare còpia de is craes de tzfradura paris cun is datos tuos.",
@@ -215,7 +215,7 @@
"Current password" : "Crae currente",
"New password" : "Crae noa",
"Change password" : "Càmbia crae",
- "Picture provided by original account" : "Imàgine frunida dae su contu originale",
+ "Picture provided by original account" : "Immàgine frunida dae su contu originale",
"Details" : "Detàllios",
"You are a member of the following groups:" : "Faghes parte de custos grupos:",
"Back" : "In segus",
@@ -288,7 +288,7 @@
"Sending…" : "Imbiende...",
"Email sent" : "Messàgiu de posta imbiadu",
"Location" : "Positzione",
- "Profile picture" : "Imàgine de profilu",
+ "Profile picture" : "Immàgine de profilu",
"About" : "In contu de",
"Full name" : "Nùmene cumpletu",
"Headline" : "Tìtulos",
diff --git a/apps/settings/lib/AppInfo/Application.php b/apps/settings/lib/AppInfo/Application.php
index 279f8be496b..e295c64e249 100644
--- a/apps/settings/lib/AppInfo/Application.php
+++ b/apps/settings/lib/AppInfo/Application.php
@@ -134,10 +134,6 @@ class Application extends App implements IBootstrap {
/**
* Core class wrappers
*/
- /** FIXME: Remove once OC_User is non-static and mockable */
- $context->registerService('isAdmin', function () {
- return \OC_User::isAdminUser(\OC_User::getUser());
- });
/** FIXME: Remove once OC_SubAdmin is non-static and mockable */
$context->registerService('isSubAdmin', function () {
$userObject = \OC::$server->getUserSession()->getUser();
diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php
index ad424809b2a..407cd6d9b6a 100644
--- a/apps/settings/lib/Controller/AppSettingsController.php
+++ b/apps/settings/lib/Controller/AppSettingsController.php
@@ -47,6 +47,7 @@ use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Services\IInitialState;
use OCP\IConfig;
use OCP\IL10N;
use OCP\INavigationManager;
@@ -58,72 +59,26 @@ use Psr\Log\LoggerInterface;
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
class AppSettingsController extends Controller {
- /** @var \OCP\IL10N */
- private $l10n;
- /** @var IConfig */
- private $config;
- /** @var INavigationManager */
- private $navigationManager;
- /** @var IAppManager */
- private $appManager;
- /** @var CategoryFetcher */
- private $categoryFetcher;
- /** @var AppFetcher */
- private $appFetcher;
- /** @var IFactory */
- private $l10nFactory;
- /** @var BundleFetcher */
- private $bundleFetcher;
- /** @var Installer */
- private $installer;
- /** @var IURLGenerator */
- private $urlGenerator;
- /** @var LoggerInterface */
- private $logger;
-
/** @var array */
private $allApps = [];
- /**
- * @param string $appName
- * @param IRequest $request
- * @param IL10N $l10n
- * @param IConfig $config
- * @param INavigationManager $navigationManager
- * @param IAppManager $appManager
- * @param CategoryFetcher $categoryFetcher
- * @param AppFetcher $appFetcher
- * @param IFactory $l10nFactory
- * @param BundleFetcher $bundleFetcher
- * @param Installer $installer
- * @param IURLGenerator $urlGenerator
- * @param LoggerInterface $logger
- */
- public function __construct(string $appName,
+ public function __construct(
+ string $appName,
IRequest $request,
- IL10N $l10n,
- IConfig $config,
- INavigationManager $navigationManager,
- IAppManager $appManager,
- CategoryFetcher $categoryFetcher,
- AppFetcher $appFetcher,
- IFactory $l10nFactory,
- BundleFetcher $bundleFetcher,
- Installer $installer,
- IURLGenerator $urlGenerator,
- LoggerInterface $logger) {
+ private IL10N $l10n,
+ private IConfig $config,
+ private INavigationManager $navigationManager,
+ private IAppManager $appManager,
+ private CategoryFetcher $categoryFetcher,
+ private AppFetcher $appFetcher,
+ private IFactory $l10nFactory,
+ private BundleFetcher $bundleFetcher,
+ private Installer $installer,
+ private IURLGenerator $urlGenerator,
+ private LoggerInterface $logger,
+ private IInitialState $initialState,
+ ) {
parent::__construct($appName, $request);
- $this->l10n = $l10n;
- $this->config = $config;
- $this->navigationManager = $navigationManager;
- $this->appManager = $appManager;
- $this->categoryFetcher = $categoryFetcher;
- $this->appFetcher = $appFetcher;
- $this->l10nFactory = $l10nFactory;
- $this->bundleFetcher = $bundleFetcher;
- $this->installer = $installer;
- $this->urlGenerator = $urlGenerator;
- $this->logger = $logger;
}
/**
@@ -132,18 +87,22 @@ class AppSettingsController extends Controller {
* @return TemplateResponse
*/
public function viewApps(): TemplateResponse {
- $params = [];
- $params['appstoreEnabled'] = $this->config->getSystemValueBool('appstoreenabled', true);
- $params['updateCount'] = count($this->getAppsWithUpdates());
- $params['developerDocumentation'] = $this->urlGenerator->linkToDocs('developer-manual');
- $params['bundles'] = $this->getBundles();
$this->navigationManager->setActiveEntry('core_apps');
- $templateResponse = new TemplateResponse('settings', 'settings-vue', ['serverData' => $params, 'pageTitle' => $this->l10n->t('Settings')]);
+ $this->initialState->provideInitialState('appstoreEnabled', $this->config->getSystemValueBool('appstoreenabled', true));
+ $this->initialState->provideInitialState('appstoreBundles', $this->getBundles());
+ $this->initialState->provideInitialState('appstoreDeveloperDocs', $this->urlGenerator->linkToDocs('developer-manual'));
+ $this->initialState->provideInitialState('appstoreUpdateCount', count($this->getAppsWithUpdates()));
+
$policy = new ContentSecurityPolicy();
$policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
+
+ $templateResponse = new TemplateResponse('settings', 'settings/empty', ['pageTitle' => $this->l10n->t('Settings')]);
$templateResponse->setContentSecurityPolicy($policy);
+ \OCP\Util::addStyle('settings', 'settings');
+ \OCP\Util::addScript('settings', 'vue-settings-apps-users-management');
+
return $templateResponse;
}
@@ -184,17 +143,11 @@ class AppSettingsController extends Controller {
private function getAllCategories() {
$currentLanguage = substr($this->l10nFactory->findLanguage(), 0, 2);
- $formattedCategories = [];
$categories = $this->categoryFetcher->get();
- foreach ($categories as $category) {
- $formattedCategories[] = [
- 'id' => $category['id'],
- 'ident' => $category['id'],
- 'displayName' => $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name'],
- ];
- }
-
- return $formattedCategories;
+ return array_map(fn ($category) => [
+ 'id' => $category['id'],
+ 'displayName' => $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name'],
+ ], $categories);
}
private function fetchApps() {
diff --git a/apps/settings/lib/Controller/UsersController.php b/apps/settings/lib/Controller/UsersController.php
index a3fabd5a8df..dbf86db20ac 100644
--- a/apps/settings/lib/Controller/UsersController.php
+++ b/apps/settings/lib/Controller/UsersController.php
@@ -33,8 +33,6 @@ declare(strict_types=1);
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
-// FIXME: disabled for now to be able to inject IGroupManager and also use
-// getSubAdmin()
namespace OCA\Settings\Controller;
@@ -42,9 +40,7 @@ use InvalidArgumentException;
use OC\AppFramework\Http;
use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
use OC\ForbiddenException;
-use OC\Group\Manager as GroupManager;
use OC\KnownUser\KnownUserService;
-use OC\L10N\Factory;
use OC\Security\IdentityProof\Manager;
use OC\User\Manager as UserManager;
use OCA\Settings\BackgroundJobs\VerifyUserData;
@@ -59,6 +55,7 @@ use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Services\IInitialState;
use OCP\BackgroundJob\IJobList;
use OCP\Encryption\IManager;
use OCP\EventDispatcher\IEventDispatcher;
@@ -67,7 +64,6 @@ use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IRequest;
use OCP\IUser;
-use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Mail\IMailer;
@@ -75,73 +71,27 @@ use function in_array;
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
class UsersController extends Controller {
- /** @var UserManager */
- private $userManager;
- /** @var GroupManager */
- private $groupManager;
- /** @var IUserSession */
- private $userSession;
- /** @var IConfig */
- private $config;
- /** @var bool */
- private $isAdmin;
- /** @var IL10N */
- private $l10n;
- /** @var IMailer */
- private $mailer;
- /** @var Factory */
- private $l10nFactory;
- /** @var IAppManager */
- private $appManager;
- /** @var IAccountManager */
- private $accountManager;
- /** @var Manager */
- private $keyManager;
- /** @var IJobList */
- private $jobList;
- /** @var IManager */
- private $encryptionManager;
- /** @var KnownUserService */
- private $knownUserService;
- /** @var IEventDispatcher */
- private $dispatcher;
-
public function __construct(
string $appName,
IRequest $request,
- IUserManager $userManager,
- IGroupManager $groupManager,
- IUserSession $userSession,
- IConfig $config,
- bool $isAdmin,
- IL10N $l10n,
- IMailer $mailer,
- IFactory $l10nFactory,
- IAppManager $appManager,
- IAccountManager $accountManager,
- Manager $keyManager,
- IJobList $jobList,
- IManager $encryptionManager,
- KnownUserService $knownUserService,
- IEventDispatcher $dispatcher
+ private UserManager $userManager,
+ private IGroupManager $groupManager,
+ private IUserSession $userSession,
+ private IConfig $config,
+ private IL10N $l10n,
+ private IMailer $mailer,
+ private IFactory $l10nFactory,
+ private IAppManager $appManager,
+ private IAccountManager $accountManager,
+ private Manager $keyManager,
+ private IJobList $jobList,
+ private IManager $encryptionManager,
+ private KnownUserService $knownUserService,
+ private IEventDispatcher $dispatcher,
+ private IInitialState $initialState,
) {
parent::__construct($appName, $request);
- $this->userManager = $userManager;
- $this->groupManager = $groupManager;
- $this->userSession = $userSession;
- $this->config = $config;
- $this->isAdmin = $isAdmin;
- $this->l10n = $l10n;
- $this->mailer = $mailer;
- $this->l10nFactory = $l10nFactory;
- $this->appManager = $appManager;
- $this->accountManager = $accountManager;
- $this->keyManager = $keyManager;
- $this->jobList = $jobList;
- $this->encryptionManager = $encryptionManager;
- $this->knownUserService = $knownUserService;
- $this->dispatcher = $dispatcher;
}
@@ -168,6 +118,7 @@ class UsersController extends Controller {
public function usersList(): TemplateResponse {
$user = $this->userSession->getUser();
$uid = $user->getUID();
+ $isAdmin = $this->groupManager->isAdmin($uid);
\OC::$server->getNavigationManager()->setActiveEntry('core_users');
@@ -192,7 +143,7 @@ class UsersController extends Controller {
/* GROUPS */
$groupsInfo = new \OC\Group\MetaData(
$uid,
- $this->isAdmin,
+ $isAdmin,
$this->groupManager,
$this->userSession
);
@@ -210,7 +161,7 @@ class UsersController extends Controller {
$userCount = 0;
if (!$isLDAPUsed) {
- if ($this->isAdmin) {
+ if ($isAdmin) {
$disabledUsers = $this->userManager->countDisabledUsers();
$userCount = array_reduce($this->userManager->countUsers(), function ($v, $w) {
return $v + (int)$w;
@@ -231,6 +182,7 @@ class UsersController extends Controller {
$userCount -= 1; // we also lower from one the total count
}
}
+
$userCount += $this->userManager->countUsersOfGroups($groupsInfo->getGroups());
$disabledUsers = $this->userManager->countDisabledUsersOfGroups($groupsNames);
}
@@ -265,7 +217,7 @@ class UsersController extends Controller {
// groups
$serverData['groups'] = array_merge_recursive($adminGroup, [$disabledUsersGroup], $groups);
// Various data
- $serverData['isAdmin'] = $this->isAdmin;
+ $serverData['isAdmin'] = $isAdmin;
$serverData['sortGroups'] = $sortGroupsBy;
$serverData['quotaPreset'] = $quotaPreset;
$serverData['allowUnlimitedQuota'] = $allowUnlimitedQuota;
@@ -280,7 +232,12 @@ class UsersController extends Controller {
$serverData['newUserRequireEmail'] = $this->config->getAppValue('core', 'newUser.requireEmail', 'no') === 'yes';
$serverData['newUserSendEmail'] = $this->config->getAppValue('core', 'newUser.sendEmail', 'yes') === 'yes';
- return new TemplateResponse('settings', 'settings-vue', ['serverData' => $serverData, 'pageTitle' => $this->l10n->t('Settings')]);
+ $this->initialState->provideInitialState('usersSettings', $serverData);
+
+ \OCP\Util::addStyle('settings', 'settings');
+ \OCP\Util::addScript('settings', 'vue-settings-apps-users-management');
+
+ return new TemplateResponse('settings', 'settings/empty', ['pageTitle' => $this->l10n->t('Settings')]);
}
/**
diff --git a/apps/settings/src/App.vue b/apps/settings/src/App.vue
index f7f81da5063..21565aea9ad 100644
--- a/apps/settings/src/App.vue
+++ b/apps/settings/src/App.vue
@@ -27,12 +27,5 @@
<script>
export default {
name: 'App',
- beforeMount() {
- // importing server data into the store
- const serverDataElmt = document.getElementById('serverData')
- if (serverDataElmt !== null) {
- this.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))
- }
- },
}
</script>
diff --git a/apps/settings/src/components/AppList.vue b/apps/settings/src/components/AppList.vue
index 18c4331e0f9..ca32b9f0495 100644
--- a/apps/settings/src/components/AppList.vue
+++ b/apps/settings/src/components/AppList.vue
@@ -204,7 +204,7 @@ export default {
})
},
bundles() {
- return this.$store.getters.getServerData.bundles.filter(bundle => this.bundleApps(bundle.id).length > 0)
+ return this.$store.getters.getAppBundles.filter(bundle => this.bundleApps(bundle.id).length > 0)
},
bundleApps() {
return function(bundle) {
diff --git a/apps/settings/src/store/apps.js b/apps/settings/src/store/apps.js
index d1c5be8034f..0b71367c3b2 100644
--- a/apps/settings/src/store/apps.js
+++ b/apps/settings/src/store/apps.js
@@ -26,11 +26,13 @@ import api from './api.js'
import Vue from 'vue'
import { generateUrl } from '@nextcloud/router'
import { showError, showInfo } from '@nextcloud/dialogs'
+import { loadState } from '@nextcloud/initial-state'
const state = {
apps: [],
+ bundles: loadState('settings', 'appstoreBundles', []),
categories: [],
- updateCount: 0,
+ updateCount: loadState('settings', 'appstoreUpdateCount', 0),
loading: {},
loadingList: false,
gettingCategoriesPromise: null,
@@ -164,6 +166,9 @@ const getters = {
getAllApps(state) {
return state.apps
},
+ getAppBundles(state) {
+ return state.bundles
+ },
getUpdateCount(state) {
return state.updateCount
},
diff --git a/apps/settings/src/store/index.js b/apps/settings/src/store/index.js
index abb1f374691..7f477d3882d 100644
--- a/apps/settings/src/store/index.js
+++ b/apps/settings/src/store/index.js
@@ -25,7 +25,7 @@ import Vue from 'vue'
import Vuex, { Store } from 'vuex'
import users from './users.js'
import apps from './apps.js'
-import settings from './settings.js'
+import settings from './users-settings.js'
import oc from './oc.js'
import { showError } from '@nextcloud/dialogs'
diff --git a/apps/settings/src/store/settings.js b/apps/settings/src/store/users-settings.js
index 28d40a08028..275c7f40bf0 100644
--- a/apps/settings/src/store/settings.js
+++ b/apps/settings/src/store/users-settings.js
@@ -20,8 +20,10 @@
*
*/
+import { loadState } from '@nextcloud/initial-state'
+
const state = {
- serverData: {},
+ serverData: loadState('settings', 'usersSettings', {}),
}
const mutations = {
setServerData(state, data) {
diff --git a/apps/settings/src/store/users.js b/apps/settings/src/store/users.js
index 499aa73170d..e0ed4e2b3bf 100644
--- a/apps/settings/src/store/users.js
+++ b/apps/settings/src/store/users.js
@@ -32,7 +32,7 @@ import axios from '@nextcloud/axios'
import { generateOcsUrl } from '@nextcloud/router'
import { getCapabilities } from '@nextcloud/capabilities'
import logger from '../logger.js'
-import { parseFileSize } from "@nextcloud/files"
+import { parseFileSize } from '@nextcloud/files'
const orderGroups = function(groups, orderBy) {
/* const SORT_USERCOUNT = 1;
diff --git a/apps/settings/src/views/Apps.vue b/apps/settings/src/views/Apps.vue
index b5cfad5632f..b88afdde4e8 100644
--- a/apps/settings/src/views/Apps.vue
+++ b/apps/settings/src/views/Apps.vue
@@ -65,18 +65,18 @@
<NcAppNavigationSpacer />
<!-- App store categories -->
- <template v-if="settings.appstoreEnabled">
+ <template v-if="appstoreEnabled">
<NcAppNavigationItem id="app-category-featured"
:to="{ name: 'apps-category', params: { category: 'featured' } }"
icon="icon-favorite"
:name="$options.APPS_SECTION_ENUM.featured" />
<NcAppNavigationItem v-for="cat in categories"
- :key="'icon-category-' + cat.ident"
- :icon="'icon-category-' + cat.ident"
+ :key="'icon-category-' + cat.id"
+ :icon="'icon-category-' + cat.id"
:to="{
name: 'apps-category',
- params: { category: cat.ident },
+ params: { category: cat.id },
}"
:name="cat.displayName" />
</template>
@@ -165,9 +165,13 @@ import AppScore from '../components/AppList/AppScore.vue'
import Markdown from '../components/Markdown.vue'
import { APPS_SECTION_ENUM } from './../constants/AppsConstants.js'
+import { loadState } from '@nextcloud/initial-state'
Vue.use(VueLocalStorage)
+const appstoreEnabled = loadState('settings', 'appstoreEnabled')
+const developerDocumentation = loadState('settings', 'appstoreDeveloperDocs')
+
export default {
name: 'Apps',
APPS_SECTION_ENUM,
@@ -208,6 +212,9 @@ export default {
},
computed: {
+ appstoreEnabled() {
+ return appstoreEnabled
+ },
pageHeading() {
if (this.$options.APPS_SECTION_ENUM[this.category]) {
return this.$options.APPS_SECTION_ENUM[this.category]
@@ -233,9 +240,6 @@ export default {
updateCount() {
return this.$store.getters.getUpdateCount
},
- settings() {
- return this.$store.getters.getServerData
- },
hasRating() {
return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5
@@ -302,7 +306,6 @@ export default {
this.$store.dispatch('getCategories', { shouldRefetchCategories: true })
this.$store.dispatch('getAllApps')
this.$store.dispatch('getGroups', { offset: 0, limit: 5 })
- this.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount)
},
mounted() {
@@ -329,7 +332,7 @@ export default {
})
},
openDeveloperDocumentation() {
- window.open(this.settings.developerDocumentation)
+ window.open(developerDocumentation)
},
},
}
diff --git a/apps/settings/templates/settings-vue.php b/apps/settings/templates/settings-vue.php
deleted file mode 100644
index 8db9dc6286b..00000000000
--- a/apps/settings/templates/settings-vue.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
- *
- * @author John Molakvoæ <skjnldsv@protonmail.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-script('settings', 'vue-settings-apps-users-management');
-style('settings', 'settings');
-
-// Do we have some data to inject ?
-if (is_array($_['serverData'])) {
- ?>
-<span id="serverData" data-server="<?php p(json_encode($_['serverData'])); ?>"></span>
-<?php
-} ?>
diff --git a/apps/settings/templates/settings/empty.php b/apps/settings/templates/settings/empty.php
index 59e3098e3de..d0a2f9c77c4 100644
--- a/apps/settings/templates/settings/empty.php
+++ b/apps/settings/templates/settings/empty.php
@@ -4,7 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
*
- * @license GNU AGPL version 3 or any later version
+ * @license AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
@@ -21,4 +21,4 @@
*
*/
-# used for Personal/Additional settings as fallback for legacy settings
+// Empty template as Vue will take over the `id="conent"` of the base template element
diff --git a/apps/settings/tests/Controller/AppSettingsControllerTest.php b/apps/settings/tests/Controller/AppSettingsControllerTest.php
index 3e458d0ce15..198e5fc4ec4 100644
--- a/apps/settings/tests/Controller/AppSettingsControllerTest.php
+++ b/apps/settings/tests/Controller/AppSettingsControllerTest.php
@@ -37,6 +37,7 @@ use OCP\App\IAppManager;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Services\IInitialState;
use OCP\IConfig;
use OCP\IL10N;
use OCP\INavigationManager;
@@ -81,6 +82,8 @@ class AppSettingsControllerTest extends TestCase {
private $urlGenerator;
/** @var LoggerInterface|MockObject */
private $logger;
+ /** @var IInitialState|MockObject */
+ private $initialState;
protected function setUp(): void {
parent::setUp();
@@ -100,6 +103,7 @@ class AppSettingsControllerTest extends TestCase {
$this->installer = $this->createMock(Installer::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->logger = $this->createMock(LoggerInterface::class);
+ $this->initialState = $this->createMock(IInitialState::class);
$this->appSettingsController = new AppSettingsController(
'settings',
@@ -114,7 +118,8 @@ class AppSettingsControllerTest extends TestCase {
$this->bundleFetcher,
$this->installer,
$this->urlGenerator,
- $this->logger
+ $this->logger,
+ $this->initialState,
);
}
@@ -125,52 +130,42 @@ class AppSettingsControllerTest extends TestCase {
$expected = new JSONResponse([
[
'id' => 'auth',
- 'ident' => 'auth',
'displayName' => 'Authentication & authorization',
],
[
'id' => 'customization',
- 'ident' => 'customization',
'displayName' => 'Customization',
],
[
'id' => 'files',
- 'ident' => 'files',
'displayName' => 'Files',
],
[
'id' => 'integration',
- 'ident' => 'integration',
'displayName' => 'Integration',
],
[
'id' => 'monitoring',
- 'ident' => 'monitoring',
'displayName' => 'Monitoring',
],
[
'id' => 'multimedia',
- 'ident' => 'multimedia',
'displayName' => 'Multimedia',
],
[
'id' => 'office',
- 'ident' => 'office',
'displayName' => 'Office & text',
],
[
'id' => 'organization',
- 'ident' => 'organization',
'displayName' => 'Organization',
],
[
'id' => 'social',
- 'ident' => 'social',
'displayName' => 'Social & communication',
],
[
'id' => 'tools',
- 'ident' => 'tools',
'displayName' => 'Tools',
],
]);
@@ -198,18 +193,16 @@ class AppSettingsControllerTest extends TestCase {
->method('setActiveEntry')
->with('core_apps');
+ $this->initialState
+ ->expects($this->exactly(4))
+ ->method('provideInitialState');
+
$policy = new ContentSecurityPolicy();
$policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
$expected = new TemplateResponse('settings',
- 'settings-vue',
+ 'settings/empty',
[
- 'serverData' => [
- 'updateCount' => 0,
- 'appstoreEnabled' => true,
- 'bundles' => [],
- 'developerDocumentation' => ''
- ],
'pageTitle' => 'Settings'
],
'user');
@@ -233,18 +226,16 @@ class AppSettingsControllerTest extends TestCase {
->method('setActiveEntry')
->with('core_apps');
+ $this->initialState
+ ->expects($this->exactly(4))
+ ->method('provideInitialState');
+
$policy = new ContentSecurityPolicy();
$policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
$expected = new TemplateResponse('settings',
- 'settings-vue',
+ 'settings/empty',
[
- 'serverData' => [
- 'updateCount' => 0,
- 'appstoreEnabled' => false,
- 'bundles' => [],
- 'developerDocumentation' => ''
- ],
'pageTitle' => 'Settings'
],
'user');
diff --git a/apps/settings/tests/Controller/UsersControllerTest.php b/apps/settings/tests/Controller/UsersControllerTest.php
index eddb290212a..d74f97b7013 100644
--- a/apps/settings/tests/Controller/UsersControllerTest.php
+++ b/apps/settings/tests/Controller/UsersControllerTest.php
@@ -35,6 +35,7 @@ use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
use OC\ForbiddenException;
use OC\Group\Manager;
use OC\KnownUser\KnownUserService;
+use OC\User\Manager as UserManager;
use OCA\Settings\Controller\UsersController;
use OCP\Accounts\IAccount;
use OCP\Accounts\IAccountManager;
@@ -42,21 +43,19 @@ use OCP\Accounts\IAccountProperty;
use OCP\Accounts\PropertyDoesNotExistException;
use OCP\App\IAppManager;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Services\IInitialState;
use OCP\BackgroundJob\IJobList;
use OCP\Encryption\IEncryptionModule;
use OCP\Encryption\IManager;
use OCP\EventDispatcher\IEventDispatcher;
-use OCP\IAvatarManager;
use OCP\IConfig;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IRequest;
use OCP\IUser;
-use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Mail\IMailer;
-use OCP\Security\ISecureRandom;
use PHPUnit\Framework\MockObject\MockObject;
/**
@@ -67,7 +66,7 @@ use PHPUnit\Framework\MockObject\MockObject;
class UsersControllerTest extends \Test\TestCase {
/** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
private $groupManager;
- /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var UserManager|\PHPUnit\Framework\MockObject\MockObject */
private $userManager;
/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
private $userSession;
@@ -79,33 +78,29 @@ class UsersControllerTest extends \Test\TestCase {
private $l10nFactory;
/** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject */
private $appManager;
- /** @var IAvatarManager|\PHPUnit\Framework\MockObject\MockObject */
- private $avatarManager;
/** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
private $l;
- /** @var AccountManager | \PHPUnit\Framework\MockObject\MockObject */
+ /** @var AccountManager|\PHPUnit\Framework\MockObject\MockObject */
private $accountManager;
- /** @var ISecureRandom | \PHPUnit\Framework\MockObject\MockObject */
- private $secureRandom;
- /** @var \OCA\Settings\Mailer\NewUserMailHelper|\PHPUnit\Framework\MockObject\MockObject */
- private $newUserMailHelper;
/** @var IJobList | \PHPUnit\Framework\MockObject\MockObject */
private $jobList;
- /** @var \OC\Security\IdentityProof\Manager |\PHPUnit\Framework\MockObject\MockObject */
+ /** @var \OC\Security\IdentityProof\Manager|\PHPUnit\Framework\MockObject\MockObject */
private $securityManager;
- /** @var IManager | \PHPUnit\Framework\MockObject\MockObject */
+ /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
private $encryptionManager;
/** @var KnownUserService|\PHPUnit\Framework\MockObject\MockObject */
private $knownUserService;
- /** @var IEncryptionModule | \PHPUnit\Framework\MockObject\MockObject */
+ /** @var IEncryptionModule|\PHPUnit\Framework\MockObject\MockObject */
private $encryptionModule;
/** @var IEventDispatcher|\PHPUnit\Framework\MockObject\MockObject */
private $dispatcher;
+ /** @var IInitialState|\PHPUnit\Framework\MockObject\MockObject*/
+ private $initialState;
protected function setUp(): void {
parent::setUp();
- $this->userManager = $this->createMock(IUserManager::class);
+ $this->userManager = $this->createMock(UserManager::class);
$this->groupManager = $this->createMock(Manager::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->config = $this->createMock(IConfig::class);
@@ -119,6 +114,7 @@ class UsersControllerTest extends \Test\TestCase {
$this->encryptionManager = $this->createMock(IManager::class);
$this->knownUserService = $this->createMock(KnownUserService::class);
$this->dispatcher = $this->createMock(IEventDispatcher::class);
+ $this->initialState = $this->createMock(IInitialState::class);
$this->l->method('t')
->willReturnCallback(function ($text, $parameters = []) {
@@ -137,6 +133,10 @@ class UsersControllerTest extends \Test\TestCase {
* @return UsersController | \PHPUnit\Framework\MockObject\MockObject
*/
protected function getController($isAdmin = false, $mockedMethods = []) {
+ $this->groupManager->expects($this->any())
+ ->method('isAdmin')
+ ->willReturn($isAdmin);
+
if (empty($mockedMethods)) {
return new UsersController(
'settings',
@@ -145,7 +145,6 @@ class UsersControllerTest extends \Test\TestCase {
$this->groupManager,
$this->userSession,
$this->config,
- $isAdmin,
$this->l,
$this->mailer,
$this->l10nFactory,
@@ -155,7 +154,8 @@ class UsersControllerTest extends \Test\TestCase {
$this->jobList,
$this->encryptionManager,
$this->knownUserService,
- $this->dispatcher
+ $this->dispatcher,
+ $this->initialState,
);
} else {
return $this->getMockBuilder(UsersController::class)
@@ -167,7 +167,6 @@ class UsersControllerTest extends \Test\TestCase {
$this->groupManager,
$this->userSession,
$this->config,
- $isAdmin,
$this->l,
$this->mailer,
$this->l10nFactory,
@@ -177,9 +176,10 @@ class UsersControllerTest extends \Test\TestCase {
$this->jobList,
$this->encryptionManager,
$this->knownUserService,
- $this->dispatcher
+ $this->dispatcher,
+ $this->initialState,
]
- )->setMethods($mockedMethods)->getMock();
+ )->onlyMethods($mockedMethods)->getMock();
}
}