diff --git a/l10n/de.js b/l10n/de.js index 2fab599f4..32363b3e8 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -114,7 +114,7 @@ OC.L10N.register( "Failed to link file to work package" : "Fehler beim Verknüpfen der Datei mit dem Arbeitspaket", "Successfully connected to OpenProject!" : "Erfolgreich mit OpenProject verbunden!", "OAuth access token could not be obtained:" : "OAuth-Zugriffstoken konnte nicht abgerufen werden:", - "Displays a link to your OpenProject instance in the Nextcloud header." : "Zeigt einen Link zu Ihrer OpenProject-Instanz im Nextcloud-Header an.", + "Displays a link to your OpenProject instance in the Nextcloud header." : "Zeigt einen Link zu deiner OpenProject-Instanz im Nextcloud-Header an.", "Allows you to search OpenProject work packages via the universal search bar in Nextcloud." : "Ermöglicht die Suche nach OpenProject-Arbeitspaketen über die universelle Suchleiste in Nextcloud.", "OpenProject notifications" : "OpenProject-Benachrichtigungen", "OpenProject activity" : "OpenProject-Aktivitäten", diff --git a/l10n/de.json b/l10n/de.json index 62f01f2b3..312a42198 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -112,7 +112,7 @@ "Failed to link file to work package" : "Fehler beim Verknüpfen der Datei mit dem Arbeitspaket", "Successfully connected to OpenProject!" : "Erfolgreich mit OpenProject verbunden!", "OAuth access token could not be obtained:" : "OAuth-Zugriffstoken konnte nicht abgerufen werden:", - "Displays a link to your OpenProject instance in the Nextcloud header." : "Zeigt einen Link zu Ihrer OpenProject-Instanz im Nextcloud-Header an.", + "Displays a link to your OpenProject instance in the Nextcloud header." : "Zeigt einen Link zu deiner OpenProject-Instanz im Nextcloud-Header an.", "Allows you to search OpenProject work packages via the universal search bar in Nextcloud." : "Ermöglicht die Suche nach OpenProject-Arbeitspaketen über die universelle Suchleiste in Nextcloud.", "OpenProject notifications" : "OpenProject-Benachrichtigungen", "OpenProject activity" : "OpenProject-Aktivitäten", diff --git a/l10n/gl.js b/l10n/gl.js index cc54747b1..66e1210fe 100644 --- a/l10n/gl.js +++ b/l10n/gl.js @@ -13,7 +13,7 @@ OC.L10N.register( "OAuth access token refused" : "Foi rexeitado o testemuño de acceso de OAuth", "OpenProject Integration" : "Integración de OpenProject", "Link Nextcloud files to OpenProject work packages" : "Vincular ficheiros Nextcloud a paquetes de traballo de OpenProject", - "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* Create work packages directly in Nextcloud\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n* Link multiple files and folder to a work package at once\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Crear paquetes de traballo directamente en Nextcloud\n* Consultar as notificacións de OpenProject a través do panel\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n* Vincular varios ficheiros e cartafoles a un paquete de traballo á vez\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", + "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* Create work packages directly in Nextcloud\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n* Link multiple files and folder to a work package at once\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Crear paquetes de traballo directamente en Nextcloud\n* Consultar as notificacións de OpenProject a través do Taboleiro\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n* Vincular varios ficheiros e cartafoles a un paquete de traballo á vez\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", "OpenProject server" : "Servidor OpenProject", "OpenProject host" : "Máquina de OpenProject", "Please introduce your OpenProject hostname" : "Introduza o seu nome da súa máquina de OpenProject", @@ -120,7 +120,7 @@ OC.L10N.register( "OpenProject activity" : "Actividade de OpenProject", "_You have %s new notification in {instance}_::_You have %s new notifications in {instance}_" : ["Ten %s notificación novas en {instance}","Ten %s notificacións novas en {instance}"], "Connected accounts" : "Contas conectadas", - "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n\nOn the OpenProject end, users are able to:\n\n* View all Nextcloud files and folders linked to a work package\n* Download linked files or open them in Nextcloud to edit them\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do panel\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n\nDo lado de OpenProject, os usuarios poden:\n\n* Ver todos os ficheiros e cartafoles de Nextcloud vinculados a un paquete de traballo\n* Descargar os ficheiros vinculados ou abrilos en Nextcloud para editalos\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", + "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n\nOn the OpenProject end, users are able to:\n\n* View all Nextcloud files and folders linked to a work package\n* Download linked files or open them in Nextcloud to edit them\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do Taboleiro\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n\nDo lado de OpenProject, os usuarios poden:\n\n* Ver todos os ficheiros e cartafoles de Nextcloud vinculados a un paquete de traballo\n* Descargar os ficheiros vinculados ou abrilos en Nextcloud para editalos\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", "Please introduce your OpenProject host name" : "Introduza o seu nome da súa máquina de OpenProject", "Reset" : "Restabelecer", "Please introduce a valid OpenProject host name" : "Introduza un nome de máquina de OpenProject válido", @@ -176,7 +176,7 @@ OC.L10N.register( "To be able to use an OpenProject server with a local address, enable the `allow_local_remote_servers` setting. {htmlLink}." : "Para poder usar un servidor OpenProject cun enderezo local, active o axuste «allow_local_remote_servers». {htmlLink}.", "Failed to revoke some users' OpenProject OAuth access tokens" : "Non foi posíbel revogar os testemuños de acceso OpenProject OAuth dalgúns usuarios", "Successfully revoked users' OpenProject OAuth access tokens" : "Foron revogados correctamente os testemuños de acceso OAuth de OpenProject dos usuarios", - "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do panel\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", + "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do Taboleiro\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", "Please link a project to this Nextcloud storage" : "Ligue un proxecto a este almacenamento Nextcloud" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/gl.json b/l10n/gl.json index 2b6f49d88..80ded10df 100644 --- a/l10n/gl.json +++ b/l10n/gl.json @@ -11,7 +11,7 @@ "OAuth access token refused" : "Foi rexeitado o testemuño de acceso de OAuth", "OpenProject Integration" : "Integración de OpenProject", "Link Nextcloud files to OpenProject work packages" : "Vincular ficheiros Nextcloud a paquetes de traballo de OpenProject", - "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* Create work packages directly in Nextcloud\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n* Link multiple files and folder to a work package at once\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Crear paquetes de traballo directamente en Nextcloud\n* Consultar as notificacións de OpenProject a través do panel\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n* Vincular varios ficheiros e cartafoles a un paquete de traballo á vez\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", + "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* Create work packages directly in Nextcloud\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n* Link multiple files and folder to a work package at once\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Crear paquetes de traballo directamente en Nextcloud\n* Consultar as notificacións de OpenProject a través do Taboleiro\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n* Vincular varios ficheiros e cartafoles a un paquete de traballo á vez\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", "OpenProject server" : "Servidor OpenProject", "OpenProject host" : "Máquina de OpenProject", "Please introduce your OpenProject hostname" : "Introduza o seu nome da súa máquina de OpenProject", @@ -118,7 +118,7 @@ "OpenProject activity" : "Actividade de OpenProject", "_You have %s new notification in {instance}_::_You have %s new notifications in {instance}_" : ["Ten %s notificación novas en {instance}","Ten %s notificacións novas en {instance}"], "Connected accounts" : "Contas conectadas", - "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n\nOn the OpenProject end, users are able to:\n\n* View all Nextcloud files and folders linked to a work package\n* Download linked files or open them in Nextcloud to edit them\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do panel\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n\nDo lado de OpenProject, os usuarios poden:\n\n* Ver todos os ficheiros e cartafoles de Nextcloud vinculados a un paquete de traballo\n* Descargar os ficheiros vinculados ou abrilos en Nextcloud para editalos\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", + "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n\nOn the OpenProject end, users are able to:\n\n* View all Nextcloud files and folders linked to a work package\n* Download linked files or open them in Nextcloud to edit them\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do Taboleiro\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n\nDo lado de OpenProject, os usuarios poden:\n\n* Ver todos os ficheiros e cartafoles de Nextcloud vinculados a un paquete de traballo\n* Descargar os ficheiros vinculados ou abrilos en Nextcloud para editalos\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", "Please introduce your OpenProject host name" : "Introduza o seu nome da súa máquina de OpenProject", "Reset" : "Restabelecer", "Please introduce a valid OpenProject host name" : "Introduza un nome de máquina de OpenProject válido", @@ -174,7 +174,7 @@ "To be able to use an OpenProject server with a local address, enable the `allow_local_remote_servers` setting. {htmlLink}." : "Para poder usar un servidor OpenProject cun enderezo local, active o axuste «allow_local_remote_servers». {htmlLink}.", "Failed to revoke some users' OpenProject OAuth access tokens" : "Non foi posíbel revogar os testemuños de acceso OpenProject OAuth dalgúns usuarios", "Successfully revoked users' OpenProject OAuth access tokens" : "Foron revogados correctamente os testemuños de acceso OAuth de OpenProject dos usuarios", - "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do panel\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", + "This application enables seamless integration with open source project management and collaboration software OpenProject.\n\nOn the Nextcloud end, it allows users to:\n\n* Link files and folders with work packages in OpenProject\n* Find all work packages linked to a file or a folder\n* View OpenProject notifications via the dashboard\n* Search for work packages using Nextcloud's search bar\n* Link work packages in rich text fields via Smart Picker\n* Preview links to work packages in text fields\n\nOn the OpenProject end, users are able to:\n\n* Link work packages with files and folders in Nextcloud\n* Upload and download files directly to Nextcloud from within a work package\n* Open linked files in Nextcloud to edit them\n* Let OpenProject create shared folders per project\n\nFor more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/)." : "Esta aplicación permite a integración perfecta co software de xestión de proxectos de código aberto e colaboración OpenProject.\n\nDo lado de Nextcloud, permite aos usuarios:\n\n* Vincular ficheiros e cartafoles con paquetes de traballo en OpenProject\n* Atopar todos os paquetes de traballo vinculados a un ficheiro ou cartafol\n* Consultar as notificacións de OpenProject a través do Taboleiro\n* Buscar paquetes de traballo usando a barra de busca de Nextcloud\n* Vincular paquetes de traballo en campos de texto mellorado mediante o Selector intelixente\n* Vista previa de ligazóns a paquetes de traballo en campos de texto\n\nDo lado de OpenProject, os usuarios poden:\n\n* Vincular paquetes de traballo con ficheiros e cartafoles en Nextcloud\n* Enviar e descargar ficheiros directamente a Nextcloud dende un paquete de traballo\n* Abrir ficheiros vinculados en Nextcloud para editalos\n* Permite que OpenProject cree cartafoles compartidos por proxecto\n\nPara obter máis información sobre como configurar e usar a aplicación OpenProject, consulte a [guía de configuración da integración](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) para administradores e a [guía do usuario](https://www.openproject.org/docs/user-guide/nextcloud-integration/).", "Please link a project to this Nextcloud storage" : "Ligue un proxecto a este almacenamento Nextcloud" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/nb.js b/l10n/nb.js index 2f34d6832..8f482eb24 100644 --- a/l10n/nb.js +++ b/l10n/nb.js @@ -79,6 +79,7 @@ OC.L10N.register( "Select a user or group" : "Velg en bruker eller gruppe", "Description" : "Beskrivelse", "Work package description" : "Beskrivelse for arbeidspakke", + "No matching work projects found!" : "Ingen samsvarende arbeidsprosjekter funnet!", "This type has mandatory fields which cannot be filled here. Please, create work packages of this type directly in {htmlLink}." : "Denne typen har obligatoriske felt som ikke kan fylles ut her. Lag arbeidspakker av denne typen direkte i {htmlLink}.", "Status is not set to one of the allowed values." : "Status er ikke satt til en av de tillatte verdiene.", "Create" : "Opprett", diff --git a/l10n/nb.json b/l10n/nb.json index 19305f20e..3ebd38e03 100644 --- a/l10n/nb.json +++ b/l10n/nb.json @@ -77,6 +77,7 @@ "Select a user or group" : "Velg en bruker eller gruppe", "Description" : "Beskrivelse", "Work package description" : "Beskrivelse for arbeidspakke", + "No matching work projects found!" : "Ingen samsvarende arbeidsprosjekter funnet!", "This type has mandatory fields which cannot be filled here. Please, create work packages of this type directly in {htmlLink}." : "Denne typen har obligatoriske felt som ikke kan fylles ut her. Lag arbeidspakker av denne typen direkte i {htmlLink}.", "Status is not set to one of the allowed values." : "Status er ikke satt til en av de tillatte verdiene.", "Create" : "Opprett", diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 0b1605a6b..c7aa85e25 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -53,6 +53,7 @@ class Application extends App implements IBootstrap { public const APP_ID = 'integration_openproject'; public const OPEN_PROJECT_ENTITIES_NAME = 'OpenProject'; + public const APP_ID_PROXY_OPENPROJECT = 'openproject-nextcloud-app'; /** * @var mixed */ diff --git a/lib/Controller/ConfigController.php b/lib/Controller/ConfigController.php index 8c563fa12..ce087f9a5 100755 --- a/lib/Controller/ConfigController.php +++ b/lib/Controller/ConfigController.php @@ -39,6 +39,7 @@ use OCP\PreConditionNotMetException; use OCP\Security\ISecureRandom; use Psr\Log\LoggerInterface; +use OCA\OpenProject\ExApp; class ConfigController extends Controller { @@ -96,21 +97,23 @@ class ConfigController extends Controller { * @var ISubAdmin */ private ISubAdmin $subAdminManager; + private ExApp $exApp; public function __construct(string $appName, - IRequest $request, - IConfig $config, - IURLGenerator $urlGenerator, - IUserManager $userManager, - IL10N $l, - OpenProjectAPIService $openprojectAPIService, - LoggerInterface $logger, - OauthService $oauthService, - SettingsController $oauthSettingsController, - IGroupManager $groupManager, - ISecureRandom $secureRandom, - ISubAdmin $subAdminManager, - ?string $userId) { + IRequest $request, + IConfig $config, + IURLGenerator $urlGenerator, + IUserManager $userManager, + IL10N $l, + OpenProjectAPIService $openprojectAPIService, + LoggerInterface $logger, + OauthService $oauthService, + SettingsController $oauthSettingsController, + IGroupManager $groupManager, + ISecureRandom $secureRandom, + ISubAdmin $subAdminManager, + ExApp $exApp, + ?string $userId) { parent::__construct($appName, $request); $this->config = $config; $this->urlGenerator = $urlGenerator; @@ -124,6 +127,7 @@ public function __construct(string $appName, $this->groupManager = $groupManager; $this->secureRandom = $secureRandom; $this->subAdminManager = $subAdminManager; + $this->exApp = $exApp; } /** @@ -485,6 +489,10 @@ public function oauthRedirect(string $code = '', string $state = ''): RedirectRe if ($clientID && $validClientSecret && $validCodeVerifier && $configState !== '' && $configState === $state) { $openprojectUrl = $this->config->getAppValue(Application::APP_ID, 'openproject_instance_url'); + $options = []; + if($this->exApp->isOpenProjectRunningAsExApp($openprojectUrl)) { + $options = $this->exApp->setHeadersForProxyRequest($this->userId, $options); + } $result = $this->openprojectAPIService->requestOAuthAccessToken($openprojectUrl, [ 'client_id' => $clientID, 'client_secret' => $clientSecret, @@ -492,7 +500,7 @@ public function oauthRedirect(string $code = '', string $state = ''): RedirectRe 'redirect_uri' => openprojectAPIService::getOauthRedirectUrl($this->urlGenerator), 'grant_type' => 'authorization_code', 'code_verifier' => $codeVerifier - ], 'POST'); + ], 'POST', $options); if (isset($result['access_token']) && isset($result['refresh_token'])) { $accessToken = $result['access_token']; $this->config->setUserValue($this->userId, Application::APP_ID, 'token', $accessToken); diff --git a/lib/Controller/DirectUploadController.php b/lib/Controller/DirectUploadController.php index 0bc2bbfd3..d3de8caee 100644 --- a/lib/Controller/DirectUploadController.php +++ b/lib/Controller/DirectUploadController.php @@ -165,7 +165,6 @@ public function prepareDirectUpload(int $folder_id): DataResponse { /** * direct upload * - * @CORS * @NoCSRFRequired * @NoAdminRequired * @PublicPage diff --git a/lib/Controller/OpenProjectAPIController.php b/lib/Controller/OpenProjectAPIController.php index ef9cc1c47..534735868 100644 --- a/lib/Controller/OpenProjectAPIController.php +++ b/lib/Controller/OpenProjectAPIController.php @@ -28,11 +28,11 @@ use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\Http\Client\LocalServerException; - use OCP\IConfig; use OCP\IRequest; use OCP\IURLGenerator; use Psr\Log\LoggerInterface; +use OCA\OpenProject\ExApp; class OpenProjectAPIController extends Controller { @@ -68,14 +68,16 @@ class OpenProjectAPIController extends Controller { * @var LoggerInterface */ private $logger; - - public function __construct(string $appName, - IRequest $request, - IConfig $config, - OpenProjectAPIService $openprojectAPIService, - IURLGenerator $urlGenerator, - LoggerInterface $logger, - ?string $userId) { + private ExApp $exApp; + + public function __construct(string $appName, + IRequest $request, + IConfig $config, + OpenProjectAPIService $openprojectAPIService, + IURLGenerator $urlGenerator, + LoggerInterface $logger, + ExApp $exApp, + ?string $userId) { parent::__construct($appName, $request); $this->openprojectAPIService = $openprojectAPIService; $this->userId = $userId; @@ -84,6 +86,7 @@ public function __construct(string $appName, $this->config = $config; $this->urlGenerator = $urlGenerator; $this->logger = $logger; + $this->exApp = $exApp; } /** @@ -549,10 +552,15 @@ public function isValidOpenProjectInstance(string $url): DataResponse { ); return new DataResponse(['result' => 'invalid']); } + $options = []; + if($this->exApp->isOpenProjectRunningAsExApp($url)) { + $options = $this->exApp->setHeadersForProxyRequest($this->userId, $options); + } + $options['allow_redirects'] = false; try { $response = $this->openprojectAPIService->rawRequest( '', $url, '', [], 'GET', - ['allow_redirects' => false] + $options ); $statusCode = $response->getStatusCode(); if ($statusCode >= 300 && $statusCode <= 399) { diff --git a/lib/ExApp.php b/lib/ExApp.php new file mode 100644 index 000000000..79516c9a4 --- /dev/null +++ b/lib/ExApp.php @@ -0,0 +1,43 @@ +exAppService = $exAppService; + } + + public function isOpenProjectRunningAsExApp(string $openprojectUrl) : bool { + return str_ends_with($openprojectUrl, '/proxy/' . self::APP_ID_PROXY_OPENPROJECT); + } + + public function setHeadersForProxyRequest(string $nextcloudUser, array $options): array { + $options = []; + $exAppconfigInformation = $this->exAppService->getExApp(self::APP_ID_PROXY_OPENPROJECT); + $authorizationAppAPI = base64_encode($nextcloudUser . ":" . $exAppconfigInformation->getSecret()); + $options['headers']['host'] = $exAppconfigInformation->getHost() . ":" . $exAppconfigInformation->getPort(); + $options['headers']['ex-app-id'] = $exAppconfigInformation->getAppid(); + $options['headers']['authorization-app-api'] = $authorizationAppAPI; + $options['headers']['ex-app-version'] = $exAppconfigInformation->getVersion(); + return $options; + } +} diff --git a/lib/Service/OpenProjectAPIService.php b/lib/Service/OpenProjectAPIService.php index ea1d23fcb..0ba526b81 100644 --- a/lib/Service/OpenProjectAPIService.php +++ b/lib/Service/OpenProjectAPIService.php @@ -56,6 +56,7 @@ use OCP\Security\ISecureRandom; use OCP\Server; use Psr\Log\LoggerInterface; +use OCA\OpenProject\ExApp; define('CACHE_TTL', 3600); @@ -130,6 +131,7 @@ class OpenProjectAPIService { private ISecureRandom $random; private IEventDispatcher $eventDispatcher; private AuditLogger $auditLogger; + private ExApp $exApp; public function __construct( string $appName, @@ -150,6 +152,7 @@ public function __construct( ISubAdmin $subAdminManager, IDBConnection $db, ILogFactory $logFactory, + ExApp $exApp ) { $this->appName = $appName; $this->avatarManager = $avatarManager; @@ -169,6 +172,7 @@ public function __construct( $this->eventDispatcher = $eventDispatcher; $this->db = $db; $this->logFactory = $logFactory; + $this->exApp = $exApp; } /** @@ -316,9 +320,13 @@ public function getOpenProjectAvatar( $this->config->getAppValue(Application::APP_ID, 'openproject_client_id'); $this->config->getAppValue(Application::APP_ID, 'openproject_client_secret'); $openprojectUrl = $this->config->getAppValue(Application::APP_ID, 'openproject_instance_url'); + $options = []; + if($this->exApp->isOpenProjectRunningAsExApp($openprojectUrl)) { + $options = $this->exApp->setHeadersForProxyRequest($nextcloudUserId, $options); + } try { $response = $this->rawRequest( - $accessToken, $openprojectUrl, 'users/'.$openprojectUserId.'/avatar' + $accessToken, $openprojectUrl, 'users/'.$openprojectUserId.'/avatar', [], 'GET', $options ); $imageMimeType = $response->getHeader('Content-Type'); $imageData = $response->getBody(); @@ -443,8 +451,12 @@ public function request(string $userId, if (!$openprojectUrl || !OpenProjectAPIService::validateURL($openprojectUrl)) { return ['error' => 'OpenProject URL is invalid', 'statusCode' => 500]; } + $options = []; + if($this->exApp->isOpenProjectRunningAsExApp($openprojectUrl)) { + $options = $this->exApp->setHeadersForProxyRequest($userId, $options); + } try { - $response = $this->rawRequest($accessToken, $openprojectUrl, $endPoint, $params, $method); + $response = $this->rawRequest($accessToken, $openprojectUrl, $endPoint, $params, $method, $options); if (($method === 'DELETE' || $method === 'POST') && $response->getStatusCode() === Http::STATUS_NO_CONTENT ) { @@ -464,7 +476,7 @@ public function request(string $userId, 'client_secret' => $clientSecret, 'grant_type' => 'refresh_token', 'refresh_token' => $refreshToken, - ], 'POST'); + ], 'POST', $options); if (isset($result['refresh_token'])) { $refreshToken = $result['refresh_token']; $this->config->setUserValue( @@ -517,17 +529,13 @@ public function request(string $userId, * @param string $url * @param array $params passed to `http_build_query` for GET requests, else send as body * @param string $method + * @param array $options * @return array */ - public function requestOAuthAccessToken(string $url, array $params = [], string $method = 'GET'): array { + public function requestOAuthAccessToken(string $url, array $params = [], string $method = 'GET', array $options = []): array { try { $url = $url . '/oauth/token'; - $options = [ - 'headers' => [ - 'User-Agent' => 'Nextcloud OpenProject integration', - ] - ]; - + $options ['headers']['User-Agent'] = 'Nextcloud OpenProject integration'; if (count($params) > 0) { if ($method === 'GET') { $paramsContent = http_build_query($params);