Actualización a APS Conecta Gestión 19

Resumen

Esta página enumera los cambios de la versión 19 que afectan a las apps: el fin del polyfill global de Babel, la obsolescencia de jQuery, las variables globales obsoletas o eliminadas con sus reemplazos, la actualización a Symfony 4.4, la obsolescencia de la inyección de servicios por nombre y las API nuevas y modificadas. Está dirigida a quienes desarrollan o mantienen apps.

Fuente: documentación de Nextcloud, «developer_manual/release_notes/previous/upgrade_to_19», versión 3ad9158, licencia CC BY 3.0; traducida y adaptada para APS Conecta Gestión.

Nota

Los cambios críticos se recopilaron en GitHub. Consultar el ticket original para ver los enlaces a las pull requests y a los tickets.

Cambios de frontend

Eliminación del polyfill de Babel

APS Conecta Gestión 19 ya no incluye un polyfill global de Babel, sino que usa core-js en su lugar. Asegurarse de que los scripts de frontend no dependan de API del navegador cubiertas por polyfills.

Obsolescencia de jQuery

A partir de APS Conecta Gestión 19, los globales jquery y $ quedan obsoletos para las apps. Aunque la biblioteca no se eliminará de inmediato, para dar tiempo a que quienes desarrollan se adapten, se recomienda reemplazarla por otra biblioteca o simplemente usar una herramienta de empaquetado como webpack para acotarla al código propio. La biblioteca se actualizará en APS Conecta Gestión en futuras versiones de APS Conecta Gestión, y las versiones más recientes de jQuery traen cambios incompatibles.

Variables globales obsoletas

Variables globales eliminadas

  • getURLParameter

  • formatDate

  • humanFileSize

  • relative_modified_date

Bibliotecas eliminadas

  • marked

Cambios de backend

Actualización de Symfony

Symfony se actualizó a la v4.4. El cambio más importante para las apps es que los comandos de CLI deben devolver un valor int. Devolver null (de forma explícita o implícita) no se permitirá en futuras versiones de Symfony.

Obsolescencia de la inyección de servicios con nombre

Las apps podían consultar servicios del núcleo, como la implementación de la interfaz \OCP\ITagManager, con el nombre TagManager. Para unificar la resolución de servicios con las declaraciones de tipo de la inyección por constructor, la resolución por nombre queda obsoleta, registra advertencias y se eliminará en el futuro. Usar en su lugar el nombre de clase completamente calificado (con la constante ::class):

Si se tenía

$tagManager = \OC::$server->query('TagManager');

cambiar el código por

$tagManager = \OC::$server->query(\OCP\ITagManager::class);

En los argumentos del constructor, siempre debe declararse el tipo del servicio con su interfaz. Si ya se hace así, nada cambia.

Nuevas API

  • Se añadió la clase \OCP\Authentication\Events\LoginFailedEvent

  • Se añadió el método \OCP\Comments\IComment::getReferenceId

  • Se añadió el método \OCP\Comments\IComment::setReferenceId

  • Se añadió la clase \OCP\Contacts\Events\ContactInteractedWithEvent

  • Se añadió el método \OCP\EventDispatcher\IEventDispatcher::removeListener

  • Se añadió la constante \OCP\ITags::TAG_FAVORITE

  • Se añadió la clase \OCP\Mail\Events\BeforeMessageSent

  • Se añadió el método \OCP\Lock\LockedException::getExistingLock

  • Se añadió la clase \OCP\Share\Events\VerifyMountPointEvent

  • Se añadió el método \OCP\Share\IManager::allowEnumeration

  • Se añadió el método \OCP\Share\IManager::limitEnumerationToGroups

API modificadas

  • \OCP\User\Events\BeforeUserLoggedInEvent::getUsername ahora devuelve correctamente una cadena y no un \OCP\IUser