Actualización a APS Conecta Gestión 31¶
Resumen¶
Esta página enumera los cambios de la versión 31 que afectan a las apps: el nuevo diseño de las plantillas de usuario, de invitado y pública, las reglas CSS de posición lógica, las comparticiones públicas en el frontend de Vue, la compatibilidad con PHP 8.4 y las API añadidas, modificadas, obsoletas o eliminadas, incluidos los alias de inyección de dependencias retirados. Está dirigida a quienes desarrollan o mantienen apps.
Fuente: documentación de Nextcloud, «developer_manual/release_notes/previous/upgrade_to_31», versión 3ad9158, licencia CC BY 3.0; traducida y adaptada para APS Conecta Gestión.
Cambios de frontend¶
Diseño de las plantillas de usuario, de invitado y pública¶
Se cambió el diseño principal de todas las apps (las plantillas de usuario, de invitado y pública):
el contenido principal ya no se representa dentro de un elemento <main> con la clase content, sino en un elemento div con la clase content.
El motivo es permitir escribir apps basadas en Vue 3, que de lo contrario representarían incorrectamente dos elementos main apilados.
Para las apps Vue 2 esto no cambia nada.
Pero si solo se usan plantillas simples (vanilla) u otros frameworks, esto cambia el diseño de la página y podría requerir ajustes.
Se recomienda envolver el contenido en un elemento main propio si no se usa ningún framework o si no se usa Vue como framework.
Reglas CSS de posición lógica¶
Con APS Conecta Gestión 31, todos los estilos que aporta el servidor se migraron para usar posicionamiento lógico en lugar de físico, lo que permite que el diseño del frontend se adapte a distintas direcciones de idioma (de derecha a izquierda). Se anima encarecidamente a quienes desarrollan apps a migrar también sus apps al posicionamiento lógico.
Ejemplos de posicionamiento lógico frente a físico:
margin-inline-start: 4px;en lugar demargin-left: 4px;inset-inline-end: 8px;en lugar deright: 8px
Archivos y compartición de archivos¶
Con APS Conecta Gestión 28, el frontend de la app Archivos se migró a Vue y se eliminó la API privada ( OCA.Files ),
pero para las comparticiones públicas se seguía usando el frontend heredado. Con APS Conecta Gestión 31, las comparticiones públicas también usan el nuevo frontend de Vue.
Esto significa que ya no es posible acceder a la API privada heredada de OCA.Files; todas las apps existentes deben migrar a la API pública.
Para facilitar la migración, el paquete @nextcloud/sharing ofrece funciones de utilidad
para comprobar si la instancia actual de la app Archivos es una compartición pública y, en tal caso, obtener el token de la compartición.
import { isPublicShare, getSharingToken } from '@nextcloud/sharing/public'
if (isPublicShare()) {
console.info('This is a public share with the sharing token: ', getSharingToken())
}
API eliminadas¶
OCA.FilesSharingDropse eliminó como parte de la migración a Vue. Usar la API de la app Archivos que proporciona el paquete .Se eliminó de la app Notificaciones el evento jQuery
$.Event('OCA.Notification.Action')como parte de la migración a Vue. Usar en su lugar el paquete@nextcloud/event-bus.
import { subscribe, unsubscribe } from '@nextcloud/event-bus'
subscribe('notifications:action:execute', (event) => {
console.info('Notification action has been executed:', event.notification, event.action)
})
Cambios de backend¶
Se añadió la compatibilidad con PHP 8.4¶
En esta versión se añadió la compatibilidad con PHP 8.4. Seguir los pasos siguientes para que la app sea compatible.
Si
appinfo/info.xmltiene una especificación de dependencia para PHP, aumentarmax-versiona 8.4. Sin embargo, se recomienda admitir siempre todas las versiones de PHP que son compatibles con la versión de APS Conecta Gestión admitida. En ese caso, las entradas de dependencias dephppueden omitirse.
<dependencies>
<php min-version="8.1" max-version="8.4" />
<nextcloud min-version="29" max-version="31" />
</dependencies>
Si la app tiene un
composer.jsony el archivo contiene las restricciones de PHP deinfo.xml, ajustarlo también.
{
"require": {
"php": ">=8.1 <=8.4"
}
}
Si se tiene configurada la integración continua, ampliar la matriz de pruebas con pruebas y linters de PHP 8.4. Esto ocurre automáticamente al reutilizar nuestras plantillas de GitHub Workflow, pero también se puede usar directamente la Action icewind1991/nextcloud-version-matrix subyacente.
La información sobre los cambios de código se encuentra en php.net y stitcher.io.
API añadidas¶
Ahora es posible descargar carpetas como archivos zip o tar mediante el backend WebDAV, con solicitudes
GET. Ver la documentación del endpoint correspondiente.Se añadió
OCP\SetupCheck\CheckServerResponseTraitpara facilitar la implementación de comprobaciones de configuración personalizadas que necesitan comprobar llamadas HTTP al propio servidor.Cualquier implementación de
OCP\Files\Mount\IMountPointpuede implementar ademásOCP\Files\Mount\IShareOwnerlessMount, lo que permite que cualquiera con permiso de compartir edite y elimine cualquier compartición de los archivos y directorios situados bajo el punto de montaje.OCP\Navigation\Events\LoadAdditionalEntriesEventse despacha cuando el gestor de navegación necesita conocer sus entradas, aparte de las entradas estándar de las apps, que se cargan automáticamente. Solo es relevante para las apps que aportan entradas adicionales.Se añadió
OCP\User\Backend\ILimitAwareCountUsersBackendcomo reemplazo deICountUsersBackend. Permite indicar un límite para el recuento de usuarios, para no contar todos los usuarios cuando quien llama no lo necesita. Se puede ignorar el límite sin problema si no tiene sentido para el caso de uso.Si una app admite la conversión de archivos, ahora puede registrar un
OCP\Files\Conversion\ConversionProvider, al que se llamará automáticamente según los tipos MIME admitidos. Una app puede registrar tantos como necesite.Se añadieron los nuevos eventos
OCP\User\Events\BeforeUserIdUnassignedEvent,OCP\User\Events\UserIdUnassignedEventyOCP\User\Events\UserIdAssignedEventpara reemplazar los hooks\OC\User::preUnassignedUserId,\OC\User::postUnassignedUserIdy\OC\User::assignedUserId.Nueva interfaz
OCP\Files\Storage\IConstructableStoragepara los almacenamientos que pueden construirse pasando solo un array al constructor.Nuevo servicio
OCP\RichObjectStrings\IRichTextFormatterpara convertir texto enriquecido en texto plano analizado mediante su métodorichToParsed.Nuevo parámetro de consulta mágico
forceLanguagepara forzar un idioma concreto en una solicitud web (API o frontend). Ver Forzar el idioma de una llamada.Se añadió la nueva propiedad WebDAV
nc:hide-downloadpara indicar si las acciones de descarga deben ocultarse para un archivo o una carpeta compartidos.Se añadió
OCP\Security\PasswordContext, que permite definir el contexto en el que se usará una contraseña. Lo usanGenerateSecurePasswordEventyValidatePasswordPolicyEvent, lo que permite aplicar reglas distintas para contextos distintos.
API modificadas¶
Se aclara que
OCP\Files\Storage\IStorage::getOwner()devuelvestring|false.Se añadieron tipos de parámetros y de retorno de los métodos a todas las clases que heredan de
OCP\Files\Storage\IStorage. Para migrar de forma compatible con versiones anteriores:Añadir ahora todos los tipos de retorno a la implementación.
Añadir todos los tipos de parámetros a la implementación cuando APS Conecta Gestión 31 sea la versión mínima admitida.
La implementación de APS Conecta Gestión del método
logdePsr\Log\LoggerInterfaceadmite ahoraPsr\Log\LogLevelcomo parámetro de nivel de registro.OCP\DB\QueryBuilder\IQueryBuilderadmite ahora más tipos de parámetros relacionados con la fecha y la hora:PARAM_DATE_MUTABLEyPARAM_DATE_IMMUTABLEpara pasar una instancia de\DateTime(o de\DateTimeImmutable, respectivamente) cuando solo interesa la parte de la fecha.PARAM_TIME_MUTABLEyPARAM_TIME_IMMUTABLEpara pasar una instancia de\DateTime(o de\DateTimeImmutable, respectivamente) cuando solo interesa la parte de la hora.PARAM_DATETIME_MUTABLEyPARAM_DATETIME_IMMUTABLEpara pasar una instancia de\DateTime(o de\DateTimeImmutable, respectivamente) sin gestión de la zona horaria.PARAM_DATETIME_TZ_MUTABLEyPARAM_DATETIME_TZ_IMMUTABLEpara pasar una instancia de\DateTime(o de\DateTimeImmutable, respectivamente) con gestión de la zona horaria.
OCP\\DB\\Typesadmite ahora más tipos relacionados con la fecha y la hora para usarlos con laEntity:DATE_IMMUTABLEpara los campos que se (de)serializarán como instancias de\DateTimeImmutablecon solo la parte de la fecha establecida.TIME_IMMUTABLEpara los campos que se (de)serializarán como instancias de\DateTimeImmutablecon solo la parte de la hora establecida.DATETIME_IMMUTABLEpara los campos que se (de)serializarán como instancias de\DateTimeImmutablecon también la parte de la hora establecida, pero sin información de zona horaria.DATETIME_TZpara los campos que se (de)serializarán como instancias de\DateTimecon también la parte de la hora establecida y con información de zona horaria.DATETIME_TZ_IMMUTABLEpara los campos que se (de)serializarán como instancias de\DateTimeImmutablecon también la parte de la hora establecida y con información de zona horaria.
Ahora es posible paginar las solicitudes DAV con nuevas cabeceras.
La primera solicitud debe contener las siguientes cabeceras:
X-NC-Paginate: trueactiva la funcionalidadX-NC-Paginate-Count: Xestablece el número de resultados por página (100 por defecto)
El servidor responderá con nuevas cabeceras:
X-NC-Paginate-Totalindica el número total de resultados.X-NC-Paginate-Tokenproporciona un token para acceder a otras páginas del mismo resultado.
Emitir nuevas solicitudes con el token:
X-NC-Paginate-Token: xxxcontiene el token tal como lo envió el servidorX-NC-Paginate-Count: Xestablece el número de resultados por página (100 por defecto)X-NC-Paginate-Offset: Yestablece el desplazamiento (número de resultados ignorados) para la página solicitada (normalmente «page_number × page_size»)
La clase heredada
OC_Imagese trasladó aOC\Image. Nunca debe usarse directamente; en su lugar, usarnew \OCP\Image()para construir el objeto y la interfazOCP\IImagepara llamar a los métodos.El constructor de
OCP\Preview\BeforePreviewFetchedEventtiene un nuevo parámetro,$mimeType, que debe ser una cadena o null.Tiene un nuevo método,
getMimeType(), para obtener la nueva propiedad.El método
OCP\Files\Storage::needsPartFilese trasladó a la interfazOCP\Files\Storage\IStorage.Se eliminó el constructor de la interfaz
OCP\Files\Storage\IStoragepara que los wrappers puedan usar DI en su constructor. Si la implementación del almacenamiento debe construirse llamando al constructor, implementar la nueva interfazOCP\Files\Storage\IConstructableStorage.Se añadió el método
OCP\IUser::getFirstLoginpara obtener el primer inicio de sesión conocido de un usuario. Devolverá una marca de tiempo unix, o 0 si el usuario nunca inició sesión, o -1 si no se conoce este dato (lo que significa que el primer inicio de sesión de este usuario fue anterior a la actualización a la 31).OCP\Security\GenerateSecurePasswordEventyOCP\Security\ValidatePasswordPolicyEventtienen ahora un métodogetContextque devuelve el contexto de la contraseña, lo que permite aplicar reglas distintas para contextos distintos.
API obsoletas¶
El endpoint
/s/{token}/downloadpara descargar comparticiones públicas está obsoleto. En su lugar, usar el endpoint WebDAV que proporciona APS Conecta Gestión.OCP\DB\QueryBuilder\IQueryBuilder::PARAM_DATEestá obsoleto en favor dePARAM_DATETIME_MUTABLE, para dejar claro que este tipo también incluye la parte de la hora de una instancia de fecha y hora.OCP\User\Backend\ICountUsersBackendquedó obsoleto. Implementar y usar en su lugarOCP\User\Backend\ILimitAwareCountUsersBackend.Los hooks
\OC\User::preUnassignedUserId,\OC\User::postUnassignedUserIdy\OC\User::assignedUserIdestán obsoletos; usar en su lugar los nuevos eventos de OCP.
API eliminadas¶
Se eliminó
OC_App::getForms, heredado y no funcional.Se eliminó la clase privada y heredada
OC_Files. En su lugar, usarOCP\AppFramework\Http\StreamResponseoOCP\AppFramework\Http\ZipResponse.Se eliminó el endpoint Ajax privado y heredado para descargar archivos comprimidos (
/apps/files/ajax/download.php). En su lugar, usar el endpoint WebDAV que proporciona APS Conecta Gestión.Se eliminaron todos los métodos de registro de
OCP\ILogger, obsoletos desde APS Conecta Gestión 20.La interfaz ahora solo contiene las constantes de nivel de registro internas de APS Conecta Gestión. Para todo el registro debe usarse
Psr\Log\LoggerInterface.La interfaz
OCP\ILoggerya no puede inyectarse como dependencia, ya que ahora solo contiene constantes.Se eliminó
OCP\IServerContainer::getLogger; usar en su lugar la inyección de dependencias conPsr\Log\LoggerInterface.
Se eliminó la clase interna
OC\AppFramework\Logger; nunca debería haberla usado ninguna app. Todas las apps que la usan deben migrar aPsr\Log\LoggerInterface.Se eliminó el endpoint heredado para probar el endpoint de compartición remota (
/testremote).La clase heredada
OC_APIse trasladó a un espacio de nombres privado. Las aplicaciones no deberían necesitarla.Se eliminó la interfaz obsoleta
OCP\Files\Storage. UsarOCP\Files\Storage\IStorageen su lugar.Se eliminaron los alias obsoletos de la inyección de dependencias; usar en su lugar las interfaces o los nombres de clase:
Alias eliminado |
Reemplazar por |
|---|---|
CalendarManager |
|
CalendarResourceBackendManager |
|
CalendarRoomBackendManager |
|
ContactsManager |
|
PreviewManager |
|
EncryptionManager |
|
EncryptionFileHelper |
|
EncryptionKeyStorage |
|
TagMapper |
|
TagManager |
|
SystemTagObjectMapper |
|
LazyRootFolder |
|
UserManager |
|
GroupManager |
|
UserSession |
|
NavigationManager |
|
AllConfig |
|
SystemConfig |
|
AppConfig |
|
L10NFactory |
|
URLGenerator |
|
AppFetcher |
|
CategoryFetcher |
|
UserCache |
|
MemCacheFactory |
|
ActivityManager |
|
AvatarManager |
|
Logger |
|
JobList |
|
Router |
|
SecureRandom |
|
Crypto |
|
Hasher |
|
CredentialsManager |
|
DatabaseConnection |
|
EventLogger |
|
QueryLogger |
|
TempManager |
|
AppManager |
|
DateTimeZone |
|
DateTimeFormatter |
|
UserMountCache |
|
MountConfigManager |
|
IniWrapper |
|
AsyncCommandBus |
|
TrustedDomainHelper |
|
Throttler |
|
Request |
|
Mailer |
|
LDAPProvider |
|
LockingProvider |
|
MountManager |
|
MimeTypeDetector |
|
MimeTypeLoader |
|
NotificationManager |
|
CapabilitiesManager |
|
CommentsManager |
|
CsrfTokenManager |
|
ContentSecurityPolicyManager |
|
ShareManager |
|
CollaboratorSearch |
|
ControllerMethodReflector |
|
TimeFactory |
|
Defaults |
|